* Applied map flag update patch provided by Daegaladh. Will mess with custom restricted items.

- Adds a reset mapflag which is checked when using the Neuralizer.
- Syncronizes the item_noequip_db bitmasks with with skill_nocast_db.
- Updates mapflags, and both skills and items which are restricted.


git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@14961 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
L0ne_W0lf 2011-09-20 23:46:48 +00:00
parent 558b08bfe7
commit d25e1c287b
13 changed files with 197 additions and 47 deletions

View File

@ -1,5 +1,10 @@
Date Added
2011/09/18
* 14961 Applied map flag update patch provided by Daegaladh. Will mess with custom restricted items.
- Adds a reset mapflag which is checked when using the Neuralizer.
- Syncronizes the item_noequip_db bitmasks with with skill_nocast_db.
- Updates mapflags, and both skills and items which are restricted.
2011/09/18
* Fixed CR_SLIMPITCHER passing item requirement index to itemdb_search when used by a monster (bugreport:5021, since r6791). [Ai4rei]
2011/09/17

42
conf/mapflag/reset.txt Normal file
View File

@ -0,0 +1,42 @@
//===== eAthena Script =======================================
//= Map flags that enable the use of Neuralizer
//===== By: ==================================================
//= Daegaladh
//===== Current Version: =====================================
//= 1.0 [Daegaladh]
//===== Compatible With: =====================================
//=
//===== Description: =========================================
//=
//============================================================
alberta mapflag reset
aldebaran mapflag reset
amatsu mapflag reset
ayothaya mapflag reset
brasilis mapflag reset
comodo mapflag reset
einbroch mapflag reset
einbech mapflag reset
geffen mapflag reset
gonryun mapflag reset
izlude mapflag reset
jawaii mapflag reset
hugel mapflag reset
lighthalzen mapflag reset
louyang mapflag reset
manuk mapflag reset
mid_camp mapflag reset
moc_ruins mapflag reset
morocc mapflag reset
moscovia mapflag reset
niflheim mapflag reset
prontera mapflag reset
payon mapflag reset
pay_arche mapflag reset
rachel mapflag reset
splendide mapflag reset
umbala mapflag reset
veins mapflag reset
xmas mapflag reset
yuno mapflag reset

View File

@ -6,6 +6,7 @@
//= 1.0 [Komurka]
//= 1.1 Added WoE:SE Map restrictions. [L0ne_W0lf]
//= 1.2 Added Endless Tower Restrictions. (bugreport:4707) [L0ne_W0lf]
//= 1.3 Added Orc's Memory, Nidhoggur's Nest and towns restrictions [Daegaladh]
//===== Current Version: =====================================
//Aldebaran Turbo Track
@ -54,3 +55,43 @@ arug_cas05 mapflag restricted 4
4@tower mapflag restricted 6
5@tower mapflag restricted 6
6@tower mapflag restricted 6
//Orc's Memory ===================
1@orcs mapflag restricted 6
2@orcs mapflag restricted 6
// Nidhoggr's Instance ===========
1@nyd mapflag restricted 6
2@nyd mapflag restricted 6
//Towns
alberta mapflag restricted 7
aldebaran mapflag restricted 7
amatsu mapflag restricted 7
ayothaya mapflag restricted 7
brasilis mapflag restricted 7
comodo mapflag restricted 7
einbroch mapflag restricted 7
einbech mapflag restricted 7
geffen mapflag restricted 7
gonryun mapflag restricted 7
izlude mapflag restricted 7
jawaii mapflag restricted 7
hugel mapflag restricted 7
lighthalzen mapflag restricted 7
louyang mapflag restricted 7
manuk mapflag restricted 7
mid_camp mapflag restricted 7
moc_ruins mapflag restricted 7
morocc mapflag restricted 7
moscovia mapflag restricted 7
niflheim mapflag restricted 7
prontera mapflag restricted 7
payon mapflag restricted 7
pay_arche mapflag restricted 7
rachel mapflag restricted 7
splendide mapflag restricted 7
umbala mapflag restricted 7
veins mapflag restricted 7
xmas mapflag restricted 7
yuno mapflag restricted 7

View File

@ -5037,7 +5037,7 @@
12330,Recall_FemaleGM,Summon Female GameMaster Scroll,2,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ mercenary_create 2001,1800000; },{},{}
12331,Ginseng,Ginseng,0,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ percentheal 6,0; },{},{}
12332,Fruit_Juice,Fruit Juice,0,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ percentheal 0,6; },{},{}
12333,Ansila,Ancilla,2,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
12333,Ansila,Ancilla,2,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ percentheal 0,15; },{},{}
12334,Cherish_Box,Treasure Edition Helm Box,2,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem groupranditem(IG_Cherish_Box),1; },{},{}
12335,Yummy_Skewered_Dish,Grilled Delicious Skewer,0,1000,,350,,,,,0xFFFFFFFF,7,2,,,,,,{ percentheal 60,60; },{},{}
12336,Baked_Mushroom,Grilled Mushroom,0,500,,300,,,,,0xFFFFFFFF,7,2,,,,,,{ percentheal 30,30; },{},{}
@ -5099,13 +5099,13 @@
12392,RepairA,Repair A,2,220,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
12393,RepairB,Repair B,2,500,,140,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
12394,RepairC,Repair C,2,1100,,180,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
12395,Tantanmen,Tantan Noodle,2,20,,50,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
12395,Tantanmen,Tantan Noodle,2,20,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ pet 1519; },{},{}
12396,Fools_Day_Box,Gift Box?,11,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ if(rand(1,10)==1) itemskill "AL_TELEPORT",1; else if(rand(1,10)==2) itemskill "AL_TELEPORT",3; else if(rand(1,10)==3) percentheal 50,0; else if(rand(1,10)==4) percentheal 0,50; else if(rand(1,10)==5) end; else if(rand(1,10)==6) getitem 512,1; else if(rand(1,10)==7) itemskill "ALL_REVERSEORCISH",1; else if(rand(1,10)==8) specialeffect2 247; else if(rand(1,10)==9) specialeffect2 338; else specialeffect2 10; },{},{}
12397,Fools_Day_Box2,Gift Box?,11,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ if(rand(1,10)==1) itemskill "TF_DETOXIFY",1; else if(rand(1,10)==2) itemskill "TF_PICKSTONE",1; else if(rand(1,10)==3) itemskill "BA_FROSTJOKER",1; else if(rand(1,10)==4) itemskill "DC_SCREAM",1; else if(rand(1,10)==5) end; else if(rand(1,10)==6) getitem 909,1; else if(rand(1,10)==7) itemskill "AL_RUWACH",1; else if(rand(1,10)==8) specialeffect2 328; else if(rand(1,10)==9) specialeffect2 68; else specialeffect2 196; },{},{}
12398,PCBang_Gift_Box,PCBang Gift Box,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
12399,Castle_Treasure_Box,Castle Treasure Box,2,20,,1000,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
12400,Water_Of_Blessing_,Water Of Blessing ,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
12401,Rune_Kn_Test_Int,Rune Kn Test Int,2,0,,0,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
12401,Rune_Kn_Test_Int,Rune Kn Test Int,2,0,,0,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_INCINT,300000,40; },{},{}
12402,29Fruit,29Fruit,2,0,,0,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
12403,Lucky_Egg2,Lucky Egg2,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
12404,Acti_Potion,Acti Potion,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}

View File

@ -2,17 +2,18 @@
// here you define which items may not be used at PvP / GvG
// format: <item id>,<mode>
// mode
// 1- restricted in PVP
// 2- restricted in GVG
// 3- restricted in both PvP and GvG
// 1- restricted in normal maps
// 2- restricted in PVP
// 4- restricted in GVG
// 8- restricted in Battlegrounds
// Restricted zones - they're configured by 'restricted <number>' mapflag
// 4 - restricted in zone 1
// 8 - restricted in zone 2
// 16 - restricted in zone 3
// 32 - restricted in zone 4
// 64 - restricted in zone 5
// 128 - restricted in zone 6
// 256 - restricted in zone 7
// 32 - restricted in zone 1
// 64 - restricted in zone 2
// 128 - restricted in zone 3
// 256 - restricted in zone 4
// 512 - restricted in zone 5
// 1024 - restricted in zone 6
// 2048 - restricted in zone 7
//Examples:
//1201,1 you can't use KNIFE(ID 1201) on PvP and GvG
@ -24,20 +25,36 @@
// you can even mix modes
//519,41 (32+8+1) you can't use Milk on PVP, and maps marked as 'restricted zone 2' and 'restricted zone 4'
//PVP
14529,2 //Greed Scroll
//GVG
12218,4 //LV5 Assumptio Scroll
14529,4 //Greed Scroll
14590,4 //Party Assumptio 5 Scroll
//BATTLEGROUND
12218,8 //LV5 Assumptio Scroll
14590,8 //Party Assumptio 5 Scroll
//Zone 1 - Aldebaran Turbo Track
601,4 //Fly Wing
506,4 //Green Potion
525,4 //Panacea
601,32 //Fly Wing
605,32 //Anodyne
506,32 //Green Potion
525,32 //Panacea
//Zone 2 - Jail
601,8 //Fly Wing - not really needed here but ...
602,8 //Butterfly Wing - also not needed
12212,8 //Giant Fly Wing
14582,8
14583,8
14584,8
14585,8
601,64 //Fly Wing - not really needed here but ...
602,64 //Butterfly Wing - also not needed
12212,64 //Giant Fly Wing
14582,64
14583,64
14584,64
14585,64
//Zone 3 - Izlude Battle Arena
601,16 //Fly Wing
601,128 //Fly Wing
//Zone 7 - Towns
14529,2048 //Greed Scroll

View File

@ -21,29 +21,39 @@
// Example:
// 8,6 = Endure cannot be used in PvP and GvG maps (2+4)
//PVP
1013,2048 //BS_GREED
//GVG
26,4 //AL_TELEPORT
27,4 //AL_WARP
87,4 //WZ_ICEWALL
150,4 //TF_BACKSLIDING
290,4 //SA_ABRACADABRA
219,4 //RG_INTIMIDATE
336,4 //WE_CALLPARTNER
361,4 //HP_ASSUMPTIO
362,4 //HP_BASILICA
395,4 //CG_MOONLIT
409,4 //WE_CALLPARENT
410,4 //WE_CALLBABY
491,4 //CR_CULTIVATION
530,4 //NJ_KIRIKAGE
691,4 //CASH_ASSUMPTIO
1013,2048 //BS_GREED
//BATTLEGROUND
26,8 //AL_TELEPORT
27,8 //AL_WARP
87,8 //WZ_ICEWALL
150,8 //TF_BACKSLIDING
219,8 //RG_INTIMIDATE
264,8 //MO_BODYRELOCATION
336,8 //WE_CALLPARTNER
361,8 //HP_ASSUMPTIO
362,8 //HP_BASILICA
395,8 //CG_MOONLIT
396,8 //CG_MARIONETTE
409,8 //WE_CALLPARENT
410,8 //WE_CALLBABY
491,8 //CR_CULTIVATION
411,8 //TK_RUN
426,8 //TK_HIGHJUMP
@ -72,19 +82,20 @@
79,16 //PR_MAGNUS
//Zone 1 - Aldebaran Turbo Track
219,32 //RG_INTIMIDATE
8,32 //SM_ENDURE
26,32 //AL_TELEPORT
27,32 //AL_WARP
51,32 //TF_HIDING
135,32 //AS_CLOAKING
389,32 //ST_CHASEWALK
35,32 //AL_CURE
51,32 //TF_HIDING
87,32 //WZ_ICEWALL
135,32 //AS_CLOAKING
219,32 //RG_INTIMIDATE
264,32 //MO_BODYRELOCATION
357,32 //LK_CONCENTRATION
359,32 //LK_BERSERK
362,32 //HP_BASILICA
389,32 //ST_CHASEWALK
395,32 //CG_MOONLIT
357,32 //LK_CONCENTRATION
264,32 //MO_BODYRELOCATION
//Zone 2 - Jail
421,64 //TK_JUMPKICK
@ -96,6 +107,7 @@
//Zone 4 - WoE:SE
426,256 //TK_HIGHJUMP
290,256 //SA_ABRACADABRA
//Zone 5 - Sealed Shrine
12,512 //MG_SAFETYWALL
@ -104,9 +116,15 @@
361,512 //HP_ASSUMPTIO
691,512 //CASH_ASSUMPTIO
//Zone 6 -Endless Tower
//Zone 6 - Endless Tower, Orc's Memory, Nidhoggur's Nest
26,1024 //AL_TELEPORT
87,1024 //WZ_ICEWALL
219,1024 //RG_INTIMIDATE
405,1024 //PF_SPIDERWEB
674,1024 //NPC_EXPULSION
//Zone 7 - Towns
232,2048 //AM_CANNIBALIZE
233,2048 //AM_SPHEREMINE
491,2048 //CR_CULTIVATION
1013,2048 //BS_GREED

View File

@ -27,4 +27,5 @@ npc: conf/mapflag/battleground.txt
npc: conf/mapflag/fireworks.txt
npc: conf/mapflag/novending.txt
npc: conf/mapflag/town.txt
npc: conf/mapflag/reset.txt
// --------------------------------------------------------------

View File

@ -4416,6 +4416,8 @@ ACMD_FUNC(mapinfo)
strcat(atcmd_output, "NoIcewall | ");
if (map[m_id].flag.allowks)
strcat(atcmd_output, "AllowKS | ");
if (map[m_id].flag.reset)
strcat(atcmd_output, "Reset | ");
clif_displaymessage(fd, atcmd_output);
strcpy(atcmd_output,"Other Flags: ");

View File

@ -491,6 +491,7 @@ struct map_data {
unsigned partylock :1;
unsigned guildlock :1;
unsigned src4instance : 1; // To flag this map when it's used as a src map for instances
unsigned reset :1; // [Daegaladh]
} flag;
struct point save;
struct npc_data *npc[MAX_NPC_PER_MAP];

View File

@ -3117,6 +3117,8 @@ static const char* npc_parse_mapflag(char* w1, char* w2, char* w3, char* w4, con
map[m].flag.partylock=state;
else if (!strcmpi(w3,"guildlock"))
map[m].flag.guildlock=state;
else if (!strcmpi(w3,"reset"))
map[m].flag.reset=state;
else
ShowError("npc_parse_mapflag: unrecognized mapflag '%s' (file '%s', line '%d').\n", w3, filepath, strline(buffer,start-buffer));

View File

@ -720,13 +720,17 @@ 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)))
if(!map_flag_vs(sd->bl.m) && ((item->flag.no_equip&1) || !pc_isAllowedCardOn(sd,item->slot,n,1)))
return 0;
if(map[sd->bl.m].flag.pvp && ((item->flag.no_equip&2) || !pc_isAllowedCardOn(sd,item->slot,n,2)))
return 0;
if(map_flag_gvg(sd->bl.m) && ((item->flag.no_equip&4) || !pc_isAllowedCardOn(sd,item->slot,n,4)))
return 0;
if(map[sd->bl.m].flag.battleground && ((item->flag.no_equip&8) || !pc_isAllowedCardOn(sd,item->slot,n,8)))
return 0;
if(map_flag_gvg(sd->bl.m) && ((item->flag.no_equip&2) || !pc_isAllowedCardOn(sd,item->slot,n,2)))
return 0;
if(map[sd->bl.m].flag.restricted)
{
int flag =map[sd->bl.m].zone;
int flag =8*map[sd->bl.m].zone;
if (item->flag.no_equip&flag || !pc_isAllowedCardOn(sd,item->slot,n,flag))
return 0;
}
@ -3648,6 +3652,11 @@ int pc_isUseitem(struct map_session_data *sd,int n)
if( nameid == 12243 && sd->md->db->lv < 80 )
return 0;
break;
case 12213: //Neuralizer
if( !map[sd->bl.m].flag.reset )
return 0;
break;
}
if( nameid >= 12153 && nameid <= 12182 && sd->md != NULL )
@ -3655,9 +3664,11 @@ int pc_isUseitem(struct map_session_data *sd,int n)
//added item_noequip.txt items check by Maya&[Lupus]
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].flag.restricted && item->flag.no_equip&map[sd->bl.m].zone) // Zone restriction
(!map_flag_vs(sd->bl.m) && item->flag.no_equip&1) || // Normal
(map[sd->bl.m].flag.pvp && item->flag.no_equip&2) || // PVP
(map_flag_gvg(sd->bl.m) && item->flag.no_equip&4) || // GVG
(map[sd->bl.m].flag.battleground && item->flag.no_equip&8) || // Battleground
(map[sd->bl.m].flag.restricted && item->flag.no_equip&(8*map[sd->bl.m].zone)) // Zone restriction
)
return 0;
@ -7435,9 +7446,11 @@ int pc_checkitem(struct map_session_data *sd)
if( it )
{ // check for forbiden items.
int 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);
(map[sd->bl.m].flag.restricted?(8*map[sd->bl.m].zone):0)
| (!map_flag_vs(sd->bl.m)?1:0)
| (map[sd->bl.m].flag.pvp?2:0)
| (map_flag_gvg(sd->bl.m)?4:0)
| (map[sd->bl.m].flag.battleground?8:0);
if( flag && (it->flag.no_equip&flag || !pc_isAllowedCardOn(sd,it->slot,i,flag)) )
{
pc_unequipitem(sd, i, 2);

View File

@ -348,7 +348,8 @@ enum {
MF_ALLOWKS,
MF_MONSTER_NOTELEPORT,
MF_PVP_NOCALCRANK, //50
MF_BATTLEGROUND
MF_BATTLEGROUND,
MF_RESET
};
const char* script_op2name(int op)
@ -9632,6 +9633,7 @@ BUILDIN_FUNC(getmapflag)
case MF_MONSTER_NOTELEPORT: script_pushint(st,map[m].flag.monster_noteleport); break;
case MF_PVP_NOCALCRANK: script_pushint(st,map[m].flag.pvp_nocalcrank); break;
case MF_BATTLEGROUND: script_pushint(st,map[m].flag.battleground); break;
case MF_RESET: script_pushint(st,map[m].flag.reset); break;
}
}
@ -9701,6 +9703,7 @@ BUILDIN_FUNC(setmapflag)
case MF_MONSTER_NOTELEPORT: map[m].flag.monster_noteleport=1; break;
case MF_PVP_NOCALCRANK: map[m].flag.pvp_nocalcrank=1; break;
case MF_BATTLEGROUND: map[m].flag.battleground = (!val || atoi(val) < 0 || atoi(val) > 2) ? 1 : atoi(val); break;
case MF_RESET: map[m].flag.reset=1; break;
}
}
@ -9767,6 +9770,7 @@ BUILDIN_FUNC(removemapflag)
case MF_MONSTER_NOTELEPORT: map[m].flag.monster_noteleport=0; break;
case MF_PVP_NOCALCRANK: map[m].flag.pvp_nocalcrank=0; break;
case MF_BATTLEGROUND: map[m].flag.battleground=0; break;
case MF_RESET: map[m].flag.reset=0; break;
}
}

View File

@ -1992,11 +1992,15 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
if(!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)
if(map[sd->bl.m].flag.restricted && data->flag.no_equip&(8*map[sd->bl.m].zone))
continue;
if(map[sd->bl.m].flag.pvp && data->flag.no_equip&1)
if(!map_flag_vs(sd->bl.m) && data->flag.no_equip&1)
continue;
if(map_flag_gvg(sd->bl.m) && data->flag.no_equip&2)
if(map[sd->bl.m].flag.pvp && data->flag.no_equip&2)
continue;
if(map_flag_gvg(sd->bl.m) && data->flag.no_equip&4)
continue;
if(map[sd->bl.m].flag.battleground && data->flag.no_equip&8)
continue;
}
if(i == EQI_HAND_L && sd->status.inventory[index].equip == EQP_HAND_L)