- Removed message 592 from trade.c

- Removed mapflag nopvp
- Added support for disabling mapflags on a mapflag line:
  comodo.gat	mapflag	nomemo <- turns on nomemo mapflag
  comodo.gat	mapflag	nomemo	off <- turns off nomemo mapflag
- Cleaned up and optimized the restricted/zones mapflag. Restricted cards will just not work in disallowed maps rather than blocking the compounded equipement from being used.


git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@6159 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
skotlex 2006-04-18 16:01:26 +00:00
parent 563231bb21
commit 6b9fd3cf04
12 changed files with 197 additions and 188 deletions

View File

@ -4,6 +4,14 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
2006/04/18
* Removed message 592 from trade.c [Skotlex]
* Added support for disabling mapflags on a mapflag line: [Skotlex]
comodo.gat mapflag nomemo <- turns on nomemo mapflag
comodo.gat mapflag nomemo off <- turns off nomemo mapflag
* Removed mapflag nopvp due to the above change. [Skotlex]
* Cleaned up and optimized the restricted/zones mapflag. Restricted cards
will just not work in disallowed maps rather than blocking the compounded
equipement from being used. [Skotlex]
* Converted the format of the battle conf files to windows format [Playtester]
* Shinomori's method (kinda) of remote script execution with interaction. [Lance]

View File

@ -1,71 +1,71 @@
///===== Description: =============================================
//= nopvp: Disables Player versus Player mode.
//= pvp off: Disables Player versus Player mode.
//= To disable PvP mode on a specific map add the mapname here.
//= v 1.1
//============================================================
ayo_in01.gat mapflag nopvp
ayo_in02.gat mapflag nopvp
alberta_in.gat mapflag nopvp
alberta.gat mapflag nopvp
alde_alche.gat mapflag nopvp
aldeba_in.gat mapflag nopvp
aldebaran.gat mapflag nopvp
ama_in01.gat mapflag nopvp
ama_in02.gat mapflag nopvp
amatsu.gat mapflag nopvp
cmd_in01.gat mapflag nopvp
cmd_in02.gat mapflag nopvp
comodo.gat mapflag nopvp
gef_tower.gat mapflag nopvp
geffen.gat mapflag nopvp
geffen_in.gat mapflag nopvp
gon_in.gat mapflag nopvp
gonryun.gat mapflag nopvp
gon_test.gat mapflag nopvp
in_hunter.gat mapflag nopvp
in_moc_16.gat mapflag nopvp
in_orcs01.gat mapflag nopvp
izlude_in.gat mapflag nopvp
izlude.gat mapflag nopvp
hugel.gat mapflag nopvp
hu_in01.gat mapflag nopvp
lighthalzen.gat mapflag nopvp
lhz_airport.gat mapflag nopvp
lhz_in01.gat mapflag nopvp
lhz_in02.gat mapflag nopvp
lhz_in03.gat mapflag nopvp
louyang.gat mapflag nopvp
lou_in01.gat mapflag nopvp
lou_in02.gat mapflag nopvp
moc_castle.gat mapflag nopvp
monk_in.gat mapflag nopvp
morocc_in.gat mapflag nopvp
morocc.gat mapflag nopvp
nif_in.gat mapflag nopvp
payon_in01.gat mapflag nopvp
payon_in02.gat mapflag nopvp
payon_in03.gat mapflag nopvp
payon.gat mapflag nopvp
pay_arche.gat mapflag nopvp
prt_are_in.gat mapflag nopvp
prt_are01.gat mapflag nopvp
prt_castle.gat mapflag nopvp
prt_church.gat mapflag nopvp
prt_in.gat mapflag nopvp
prontera.gat mapflag nopvp
sec_in01.gat mapflag nopvp
sword_1-1.gat mapflag nopvp
sword_2-1.gat mapflag nopvp
sword_3-1.gat mapflag nopvp
um_in.gat mapflag nopvp
umbala.gat mapflag nopvp
xmas_in.gat mapflag nopvp
xmas.gat mapflag nopvp
yuno_in01.gat mapflag nopvp
yuno_in03.gat mapflag nopvp
yuno_in04.gat mapflag nopvp
yuno_in05.gat mapflag nopvp
yuno.gat mapflag nopvp
yuno_pre.gat mapflag nopvp
y_airport.gat mapflag nopvp
ayo_in01.gat mapflag pvp off
ayo_in02.gat mapflag pvp off
alberta_in.gat mapflag pvp off
alberta.gat mapflag pvp off
alde_alche.gat mapflag pvp off
aldeba_in.gat mapflag pvp off
aldebaran.gat mapflag pvp off
ama_in01.gat mapflag pvp off
ama_in02.gat mapflag pvp off
amatsu.gat mapflag pvp off
cmd_in01.gat mapflag pvp off
cmd_in02.gat mapflag pvp off
comodo.gat mapflag pvp off
gef_tower.gat mapflag pvp off
geffen.gat mapflag pvp off
geffen_in.gat mapflag pvp off
gon_in.gat mapflag pvp off
gonryun.gat mapflag pvp off
gon_test.gat mapflag pvp off
in_hunter.gat mapflag pvp off
in_moc_16.gat mapflag pvp off
in_orcs01.gat mapflag pvp off
izlude_in.gat mapflag pvp off
izlude.gat mapflag pvp off
hugel.gat mapflag pvp off
hu_in01.gat mapflag pvp off
lighthalzen.gat mapflag pvp off
lhz_airport.gat mapflag pvp off
lhz_in01.gat mapflag pvp off
lhz_in02.gat mapflag pvp off
lhz_in03.gat mapflag pvp off
louyang.gat mapflag pvp off
lou_in01.gat mapflag pvp off
lou_in02.gat mapflag pvp off
moc_castle.gat mapflag pvp off
monk_in.gat mapflag pvp off
morocc_in.gat mapflag pvp off
morocc.gat mapflag pvp off
nif_in.gat mapflag pvp off
payon_in01.gat mapflag pvp off
payon_in02.gat mapflag pvp off
payon_in03.gat mapflag pvp off
payon.gat mapflag pvp off
pay_arche.gat mapflag pvp off
prt_are_in.gat mapflag pvp off
prt_are01.gat mapflag pvp off
prt_castle.gat mapflag pvp off
prt_church.gat mapflag pvp off
prt_in.gat mapflag pvp off
prontera.gat mapflag pvp off
sec_in01.gat mapflag pvp off
sword_1-1.gat mapflag pvp off
sword_2-1.gat mapflag pvp off
sword_3-1.gat mapflag pvp off
um_in.gat mapflag pvp off
umbala.gat mapflag pvp off
xmas_in.gat mapflag pvp off
xmas.gat mapflag pvp off
yuno_in01.gat mapflag pvp off
yuno_in03.gat mapflag pvp off
yuno_in04.gat mapflag pvp off
yuno_in05.gat mapflag pvp off
yuno.gat mapflag pvp off
yuno_pre.gat mapflag pvp off
y_airport.gat mapflag pvp off

View File

@ -39,7 +39,7 @@
26,32 //Teleport
27,32 //Warp portal
51,32 //Hiding
135,32 //Cloacking
135,32 //Cloaking
389,32 //Stealth
35,32 //Cure
87,32 //Ice Wall

View File

@ -2971,7 +2971,7 @@ int atcommand_pvpon(
return -1;
}
if (!map[sd->bl.m].flag.pvp && !map[sd->bl.m].flag.nopvp) {
if (!map[sd->bl.m].flag.pvp) {
map[sd->bl.m].flag.pvp = 1;
clif_send0199(sd->bl.m, 1);
pl_allsd = map_getallusers(&users);
@ -5626,8 +5626,6 @@ int atcommand_mapinfo(
strcpy(atcmd_output,"PvP Flags: ");
if (map[m_id].flag.pvp)
strcat(atcmd_output, "Pvp ON | ");
if (map[m_id].flag.nopvp)
strcat(atcmd_output, "NoPvp | ");
if (map[m_id].flag.pvp_noguild)
strcat(atcmd_output, "NoGuild | ");
if (map[m_id].flag.pvp_noparty)

View File

@ -4901,9 +4901,6 @@ int clif_pvpset(struct map_session_data *sd,int pvprank,int pvpnum,int type)
{
nullpo_retr(0, sd);
if(map[sd->bl.m].flag.nopvp)
return 0;
if(type == 2) {
WFIFOHEAD(sd->fd,packet_len_table[0x19a]);
WFIFOW(sd->fd,0) = 0x19a;
@ -9662,7 +9659,8 @@ void clif_parse_NpcStringInput(int fd,struct map_session_data *sd)
void clif_parse_NpcCloseClicked(int fd,struct map_session_data *sd)
{
RFIFOHEAD(fd);
npc_scriptcont(sd,RFIFOL(fd,2));
if (sd->npc_id) //Avoid parsing anything when the script was done with. [Skotlex]
npc_scriptcont(sd,RFIFOL(fd,2));
}
/*==========================================

View File

@ -1018,7 +1018,6 @@ struct map_data {
unsigned noskill : 1;
unsigned nowarp : 1;
unsigned nowarpto : 1;
unsigned nopvp : 1; // [Valaris]
unsigned noicewall : 1; // [Valaris]
unsigned snow : 1; // [Valaris]
unsigned clouds : 1;

View File

@ -2218,6 +2218,7 @@ static int npc_parse_mapflag (char *w1, char *w2, char *w3, char *w4)
{
int m;
char mapname[MAP_NAME_LENGTH];
int state = 1;
// 引数の個数チェック
if (sscanf(w1, "%15[^,]",mapname) != 1)
@ -2226,12 +2227,16 @@ static int npc_parse_mapflag (char *w1, char *w2, char *w3, char *w4)
m = map_mapname2mapid(mapname);
if (m < 0)
return 1;
if (w4 && strcmpi(w4, "off") == 0)
state = 0; //Disable mapflag rather than enable it. [Skotlex]
//マップフラグ
if (strcmpi(w3, "nosave") == 0) {
char savemap[MAP_NAME_LENGTH];
int savex, savey;
if (strcmp(w4, "SavePoint") == 0) {
if (state == 0)
; //Map flag disabled.
else if (strcmp(w4, "SavePoint") == 0) {
map[m].save.map = 0;
map[m].save.x = -1;
map[m].save.y = -1;
@ -2245,40 +2250,40 @@ static int npc_parse_mapflag (char *w1, char *w2, char *w3, char *w4)
map[m].save.y = -1;
}
}
map[m].flag.nosave = 1;
map[m].flag.nosave = state;
}
else if (strcmpi(w3,"nomemo")==0) {
map[m].flag.nomemo=1;
map[m].flag.nomemo=state;
}
else if (strcmpi(w3,"noteleport")==0) {
map[m].flag.noteleport=1;
map[m].flag.noteleport=state;
}
else if (strcmpi(w3,"nowarp")==0) {
map[m].flag.nowarp=1;
map[m].flag.nowarp=state;
}
else if (strcmpi(w3,"nowarpto")==0) {
map[m].flag.nowarpto=1;
map[m].flag.nowarpto=state;
}
else if (strcmpi(w3,"noreturn")==0) {
map[m].flag.noreturn=1;
map[m].flag.noreturn=state;
}
else if (strcmpi(w3,"monster_noteleport")==0) {
map[m].flag.monster_noteleport=1;
map[m].flag.monster_noteleport=state;
}
else if (strcmpi(w3,"nobranch")==0) {
map[m].flag.nobranch=1;
map[m].flag.nobranch=state;
}
else if (strcmpi(w3,"nopenalty")==0) {
map[m].flag.nopenalty=1;
map[m].flag.nopenalty=state;
}
else if (strcmpi(w3,"pvp")==0) {
map[m].flag.pvp=1;
map[m].flag.pvp=state;
}
else if (strcmpi(w3,"pvp_noparty")==0) {
map[m].flag.pvp_noparty=1;
map[m].flag.pvp_noparty=state;
}
else if (strcmpi(w3,"pvp_noguild")==0) {
map[m].flag.pvp_noguild=1;
map[m].flag.pvp_noguild=state;
}
else if (strcmpi(w3, "pvp_nightmaredrop") == 0) {
char drop_arg1[16], drop_arg2[16];
@ -2307,103 +2312,104 @@ static int npc_parse_mapflag (char *w1, char *w2, char *w3, char *w4)
}
map[m].flag.pvp_nightmaredrop = 1;
}
}
} else if (!state) //Disable
map[m].flag.pvp_nightmaredrop = 0;
}
else if (strcmpi(w3,"pvp_nocalcrank")==0) {
map[m].flag.pvp_nocalcrank=1;
map[m].flag.pvp_nocalcrank=state;
}
else if (strcmpi(w3,"gvg")==0) {
map[m].flag.gvg=1;
map[m].flag.gvg=state;
}
else if (strcmpi(w3,"gvg_noparty")==0) {
map[m].flag.gvg_noparty=1;
map[m].flag.gvg_noparty=state;
}
else if (strcmpi(w3,"gvg_dungeon")==0) {
map[m].flag.gvg_dungeon=1;
map[m].flag.gvg_dungeon=state;
}
else if (strcmpi(w3,"gvg_castle")==0) {
map[m].flag.gvg_castle=1;
map[m].flag.gvg_castle=state;
}
else if (strcmpi(w3,"nozenypenalty")==0) {
map[m].flag.nozenypenalty=1;
map[m].flag.nozenypenalty=state;
}
else if (strcmpi(w3,"notrade")==0) {
map[m].flag.notrade=1;
map[m].flag.notrade=state;
}
else if (strcmpi(w3,"nodrop")==0) {
map[m].flag.nodrop=1;
map[m].flag.nodrop=state;
}
else if (strcmpi(w3,"noskill")==0) {
map[m].flag.noskill=1;
}
else if (battle_config.pk_mode && strcmpi(w3,"nopvp")==0) { // nopvp for pk mode [Valaris]
map[m].flag.nopvp=1;
map[m].flag.pvp=0;
map[m].flag.noskill=state;
}
else if (strcmpi(w3,"noicewall")==0) { // noicewall [Valaris]
map[m].flag.noicewall=1;
map[m].flag.noicewall=state;
}
else if (strcmpi(w3,"snow")==0) { // snow [Valaris]
map[m].flag.snow=1;
map[m].flag.snow=state;
}
else if (strcmpi(w3,"clouds")==0) {
map[m].flag.clouds=1;
map[m].flag.clouds=state;
}
else if (strcmpi(w3,"clouds2")==0) { // clouds2 [Valaris]
map[m].flag.clouds2=1;
map[m].flag.clouds2=state;
}
else if (strcmpi(w3,"fog")==0) { // fog [Valaris]
map[m].flag.fog=1;
map[m].flag.fog=state;
}
else if (strcmpi(w3,"fireworks")==0) {
map[m].flag.fireworks=1;
map[m].flag.fireworks=state;
}
else if (strcmpi(w3,"sakura")==0) { // sakura [Valaris]
map[m].flag.sakura=1;
map[m].flag.sakura=state;
}
else if (strcmpi(w3,"leaves")==0) { // leaves [Valaris]
map[m].flag.leaves=1;
map[m].flag.leaves=state;
}
else if (strcmpi(w3,"rain")==0) { // rain [Valaris]
map[m].flag.rain=1;
map[m].flag.rain=state;
}
else if (strcmpi(w3,"indoors")==0) { // celest
map[m].flag.indoors=1;
map[m].flag.indoors=state;
}
else if (strcmpi(w3,"nightenabled")==0) { // Skotlex
map[m].flag.nightenabled=1;
map[m].flag.nightenabled=state;
}
else if (strcmpi(w3,"nogo")==0) { // celest
map[m].flag.nogo=1;
map[m].flag.nogo=state;
}
else if (strcmpi(w3,"noexp")==0) { // Lorky
map[m].flag.nobaseexp=1;
map[m].flag.nojobexp=1;
map[m].flag.nobaseexp=state;
map[m].flag.nojobexp=state;
}
else if (strcmpi(w3,"nobaseexp")==0) { // Lorky
map[m].flag.nobaseexp=1;
map[m].flag.nobaseexp=state;
}
else if (strcmpi(w3,"nojobexp")==0) { // Lorky
map[m].flag.nojobexp=1;
map[m].flag.nojobexp=state;
}
else if (strcmpi(w3,"noloot")==0) { // Lorky
map[m].flag.nomobloot=1;
map[m].flag.nomvploot=1;
map[m].flag.nomobloot=state;
map[m].flag.nomvploot=state;
}
else if (strcmpi(w3,"nomobloot")==0) { // Lorky
map[m].flag.nomobloot=1;
map[m].flag.nomobloot=state;
}
else if (strcmpi(w3,"nomvploot")==0) { // Lorky
map[m].flag.nomvploot=1;
map[m].flag.nomvploot=state;
}
else if (strcmpi(w3,"nocommand")==0) { // Skotlex
map[m].flag.nocommand=1;
map[m].flag.nocommand=state;
}
else if (strcmpi(w3,"restricted")==0) { // Komurka
map[m].flag.restricted=1;
sscanf(w4, "%d", &map[m].zone);
//map[m].zone = pow(2,map[m].zone+1);
map[m].zone = 1<<(map[m].zone+1);
if (state) {
map[m].flag.restricted=1;
sscanf(w4, "%d", &state);
map[m].zone |= 1<<(state+1);
} else {
map[m].flag.restricted=0;
map[m].zone = 0;
}
}
return 0;

View File

@ -519,7 +519,7 @@ int pc_setequipindex(struct map_session_data *sd)
return 0;
}
int pc_isAllowedCardOn(struct map_session_data *sd,int s,int eqindex,int flag) {
static int pc_isAllowedCardOn(struct map_session_data *sd,int s,int eqindex,int flag) {
int i;
struct item *item = &sd->status.inventory[eqindex];
struct item_data *data;
@ -558,11 +558,11 @@ int pc_isequip(struct map_session_data *sd,int n)
return 0;
if(item->sex != 2 && sd->status.sex != item->sex)
return 0;
if(map[sd->bl.m].flag.pvp && (item->flag.no_equip&1 || !pc_isAllowedCardOn(sd,item->slot,n,1))) //optimized by Lupus
if(map[sd->bl.m].flag.pvp && item->flag.no_equip&1)
return 0;
if(map_flag_gvg(sd->bl.m) && (item->flag.no_equip&2 || !pc_isAllowedCardOn(sd,item->slot,n,2))) //optimized by Lupus
if(map_flag_gvg(sd->bl.m) && item->flag.no_equip&2)
return 0;
if(map[sd->bl.m].zone && map[sd->bl.m].flag.restricted && (item->flag.no_equip&map[sd->bl.m].zone || !pc_isAllowedCardOn(sd,item->slot,n,map[sd->bl.m].zone)))
if(map[sd->bl.m].flag.restricted && item->flag.no_equip&map[sd->bl.m].zone)
return 0;
if (sd->sc.count) {
@ -2592,8 +2592,7 @@ int pc_isUseitem(struct map_session_data *sd,int n)
if (
(map[sd->bl.m].flag.pvp && item->flag.no_equip&1) || // PVP
(map_flag_gvg(sd->bl.m) && item->flag.no_equip&2) || // GVG
(map[sd->bl.m].zone && map[sd->bl.m].flag.restricted &&
item->flag.no_equip&map[sd->bl.m].zone) // Zone restriction
(map[sd->bl.m].flag.restricted && item->flag.no_equip&map[sd->bl.m].zone) // Zone restriction
)
return 0;
@ -6400,23 +6399,31 @@ int pc_checkitem(struct map_session_data *sd)
calc_flag = 1;
}
//?備制限チェック
if(sd->status.inventory[i].equip && (map[sd->bl.m].flag.pvp||map[sd->bl.m].flag.gvg) &&
(it->flag.no_equip&1 || !pc_isAllowedCardOn(sd,it->slot,i,1)))
{ //PVP check for forbiden items. optimized by [Lupus]
sd->status.inventory[i].equip=0;
calc_flag = 1;
} else if(sd->status.inventory[i].equip && map_flag_gvg(sd->bl.m) &&
(it->flag.no_equip&2 || !pc_isAllowedCardOn(sd,it->slot,i,2)))
{ //GvG optimized by [Lupus]
sd->status.inventory[i].equip=0;
calc_flag = 1;
} else if(sd->status.inventory[i].equip && (map[sd->bl.m].zone) && (map[sd->bl.m].flag.restricted) &&
(it->flag.no_equip&map[sd->bl.m].zone))
{ // Restricted zone by [Komurka]
sd->status.inventory[i].equip=0;
calc_flag = 1;
if(sd->status.inventory[i].equip && it) {
if (map[sd->bl.m].flag.pvp && it->flag.no_equip&1)
{ //PVP check for forbiden items. optimized by [Lupus]
sd->status.inventory[i].equip=0;
calc_flag = 1;
} else
if (map_flag_gvg(sd->bl.m) && it->flag.no_equip&2)
{ //GvG optimized by [Lupus]
sd->status.inventory[i].equip=0;
calc_flag = 1;
} else
if(map[sd->bl.m].flag.restricted && it->flag.no_equip&map[sd->bl.m].zone)
{ // Restricted zone by [Komurka]
sd->status.inventory[i].equip=0;
calc_flag = 1;
}
if (!calc_flag) { //Check cards
int flag;
flag = (map[sd->bl.m].flag.restricted?map[sd->bl.m].zone:0)
| (map[sd->bl.m].flag.pvp?1:0)
| (map_flag_gvg(sd->bl.m)?2:0);
if (flag && !pc_isAllowedCardOn(sd,it->slot,i,flag))
calc_flag = 1;
}
}
}
pc_setequipindex(sd);

View File

@ -6617,7 +6617,7 @@ int buildin_isloggedin(struct script_state *st)
*/
enum { MF_NOMEMO,MF_NOTELEPORT,MF_NOSAVE,MF_NOBRANCH,MF_NOPENALTY,MF_NOZENYPENALTY,
MF_PVP,MF_PVP_NOPARTY,MF_PVP_NOGUILD,MF_GVG,MF_GVG_NOPARTY,MF_NOTRADE,MF_NOSKILL,
MF_NOWARP,MF_NOPVP,MF_NOICEWALL,MF_SNOW,MF_FOG,MF_SAKURA,MF_LEAVES,MF_RAIN,
MF_NOWARP,MF_FREE,MF_NOICEWALL,MF_SNOW,MF_FOG,MF_SAKURA,MF_LEAVES,MF_RAIN,
MF_INDOORS,MF_NOGO,MF_CLOUDS,MF_CLOUDS2,MF_FIREWORKS,MF_GVG_CASTLE,MF_GVG_DUNGEON,MF_NIGHTENABLED,
MF_NOBASEEXP, MF_NOJOBEXP, MF_NOMOBLOOT, MF_NOMVPLOOT, MF_NORETURN, MF_NOWARPTO, MF_NIGHTMAREDROP,
MF_RESTRICTED, MF_NOCOMMAND, MF_NODROP };
@ -6703,9 +6703,6 @@ int buildin_setmapflag(struct script_state *st)
case MF_NOWARP:
map[m].flag.nowarp=1;
break;
case MF_NOPVP:
map[m].flag.nopvp=1;
break;
case MF_NOICEWALL: // [Valaris]
map[m].flag.noicewall=1;
break;
@ -6836,9 +6833,6 @@ int buildin_removemapflag(struct script_state *st)
case MF_NOWARP:
map[m].flag.nowarp=0;
break;
case MF_NOPVP:
map[m].flag.nopvp=0;
break;
case MF_NOICEWALL: // [Valaris]
map[m].flag.noicewall=0;
break;
@ -6916,7 +6910,7 @@ int buildin_pvpon(struct script_state *st)
str=conv_str(st,& (st->stack->stack_data[st->start+2]));
m = map_mapname2mapid(str);
if(m >= 0 && !map[m].flag.pvp && !map[m].flag.nopvp) {
if(m >= 0 && !map[m].flag.pvp) {
map[m].flag.pvp = 1;
clif_send0199(m,1);
@ -6949,7 +6943,7 @@ int buildin_pvpoff(struct script_state *st)
str=conv_str(st,& (st->stack->stack_data[st->start+2]));
m = map_mapname2mapid(str);
if(m >= 0 && map[m].flag.pvp && !map[m].flag.nopvp) { //fixed Lupus
if(m >= 0 && map[m].flag.pvp) { //fixed Lupus
map[m].flag.pvp = 0;
clif_send0199(m,0);

View File

@ -828,10 +828,8 @@ int skillnotok(int skillid, struct map_session_data *sd)
return 1;
if (agit_flag && skill_get_nocast (skillid) & 8)
return 1;
if (battle_config.pk_mode && !map[sd->bl.m].flag.nopvp && skill_get_nocast (skillid) & 16)
if (battle_config.pk_mode && map[sd->bl.m].flag.pvp && skill_get_nocast (skillid) & 16)
return 1;
//printf("skill %d, flag restricted=%d, zone=%d, zone*8=%d, skill_get_nocast (skillid)=%d, skill_get_nocast (skillid)&8*zone=%d\n",
// skillid,map[sd->bl.m].flag.restricted,map[sd->bl.m].zone,map[sd->bl.m].zone*8, skill_get_nocast (skillid),skill_get_nocast (skillid) & (8*map[sd->bl.m].zone));
if(map[sd->bl.m].flag.restricted && map[sd->bl.m].zone && skill_get_nocast (skillid) & (8*map[sd->bl.m].zone))
return 1;

View File

@ -814,6 +814,8 @@ int status_calc_pc(struct map_session_data* sd,int first)
if(sd->inventory_data[index]) {
int j,c;
struct item_data *data;
//Card script execution.
if(sd->status.inventory[index].card[0]==0x00ff ||
sd->status.inventory[index].card[0]==0x00fe ||
@ -821,17 +823,28 @@ int status_calc_pc(struct map_session_data* sd,int first)
continue;
for(j=0;j<sd->inventory_data[index]->slot;j++){ // ƒJ?ƒh
current_equip_card_id= c= sd->status.inventory[index].card[j];
if(c>0){
if(i == 8 && sd->status.inventory[index].equip == 0x20)
{ //Left hand status.
sd->state.lr_flag = 1;
run_script(itemdb_equipscript(c),0,sd->bl.id,0);
sd->state.lr_flag = 0;
} else
run_script(itemdb_equipscript(c),0,sd->bl.id,0);
if (!calculating) //Abort, run_script retriggered status_calc_pc. [Skotlex]
return 1;
if(!c)
continue;
data = itemdb_exists(c);
if (!data || !data->script)
continue;
if(data->flag.no_equip) { //Card restriction checks.
if(map[sd->bl.m].flag.restricted && data->flag.no_equip&map[sd->bl.m].zone)
continue;
if(map[sd->bl.m].flag.pvp && data->flag.no_equip&1)
continue;
if(map_flag_gvg(sd->bl.m) && data->flag.no_equip&2)
continue;
}
if(i == 8 && sd->status.inventory[index].equip == 0x20)
{ //Left hand status.
sd->state.lr_flag = 1;
run_script(data->script,0,sd->bl.id,0);
sd->state.lr_flag = 0;
} else
run_script(data->script,0,sd->bl.id,0);
if (!calculating) //Abort, run_script retriggered status_calc_pc. [Skotlex]
return 1;
}
}
}

View File

@ -204,11 +204,8 @@ int trade_check(struct map_session_data *sd) {
if (inventory2[i].nameid == inventory[n].nameid &&
inventory2[i].card[0] == inventory[n].card[0] && inventory2[i].card[1] == inventory[n].card[1] &&
inventory2[i].card[2] == inventory[n].card[2] && inventory2[i].card[3] == inventory[n].card[3]) {
if (inventory2[i].amount + amount > MAX_AMOUNT) {
clif_displaymessage(sd->fd, msg_txt(592)); // Trade can not be done, because one of your doesn't have enough free slots in its inventory.
clif_displaymessage(target_sd->fd, msg_txt(592)); // Trade can not be done, because one of your doesn't have enough free slots in its inventory.
if (inventory2[i].amount + amount > MAX_AMOUNT)
return 0;
}
inventory2[i].amount += amount;
inventory[n].amount -= amount;
if (inventory[n].amount <= 0)
@ -228,11 +225,8 @@ int trade_check(struct map_session_data *sd) {
break;
}
}
if (i == MAX_INVENTORY) {
clif_displaymessage(sd->fd, msg_txt(592)); // Trade can not be done, because one of your doesn't have enough free slots in its inventory.
clif_displaymessage(target_sd->fd, msg_txt(592)); // Trade can not be done, because one of your doesn't have enough free slots in its inventory.
if (i == MAX_INVENTORY)
return 0;
}
}
}
}
@ -251,11 +245,8 @@ int trade_check(struct map_session_data *sd) {
if (inventory[i].nameid == inventory2[n].nameid &&
inventory[i].card[0] == inventory2[n].card[0] && inventory[i].card[1] == inventory2[n].card[1] &&
inventory[i].card[2] == inventory2[n].card[2] && inventory[i].card[3] == inventory2[n].card[3]) {
if (inventory[i].amount + amount > MAX_AMOUNT) {
clif_displaymessage(sd->fd, msg_txt(592)); // Trade can not be done, because one of your doesn't have enough free slots in its inventory.
clif_displaymessage(target_sd->fd, msg_txt(592)); // Trade can not be done, because one of your doesn't have enough free slots in its inventory.
if (inventory[i].amount + amount > MAX_AMOUNT)
return 0;
}
inventory[i].amount += amount;
inventory2[n].amount -= amount;
if (inventory2[n].amount <= 0)
@ -274,11 +265,8 @@ int trade_check(struct map_session_data *sd) {
break;
}
}
if (i == MAX_INVENTORY) {
clif_displaymessage(sd->fd, msg_txt(592)); // Trade can not be done, because one of your doesn't have enough free slots in its inventory.
clif_displaymessage(target_sd->fd, msg_txt(592)); // Trade can not be done, because one of your doesn't have enough free slots in its inventory.
if (i == MAX_INVENTORY)
return 0;
}
}
}
}