Issue information

Issue ID
#8395
Status
Fixed
Severity
None
Started
Ancyker
Oct 13, 2014 20:30
Last Post
Ind
Jan 24, 2015 15:14
Confirmation
Yes (1)
No (0)

Ancyker - Oct 13, 2014 20:30

Maps which are not always a certain mode, such as War of Emperium castles, have the mode "Normal" -- which is fine. The problem happens when an additional mode is applied, such as GvG. In this case the GvG zone appears to be applied first, then the settings overridden with the Normal zone. So, any items disabled in a Normal zone and allowed in a WoE zone, even if explicitly allowed, will not work.

This effectively breaks all siege gears, which are only supposed to work in PvP/GvG/WoE maps. Normally they are disabled outside of those areas:
[code=:0] { /* Normal zone is applied to all maps that are not pkable (where players cant fight each other) */ /* However, it wont be applied to maps with its own zones (specified thru mapflag) */ name: "Normal" /* changing this name requires MAP_ZONE_NORMAL_NAME to also be changed in src/map/map.h file */ disabled_skills: { WM_LULLABY_DEEPSLEEP: "PLAYER" WM_SIRCLEOFNATURE: "PLAYER" WM_SATURDAY_NIGHT_FEVER: "PLAYER" SO_ARRULLO: "PLAYER" CG_HERMODE: "PLAYER" } disabled_items: { Velum_Jamadhar: true Velum_Scare: true Velum_Buster: true Velum_Guillotine: true Velum_Spear: true Velum_Glaive: true Velum_Bible: true Velum_Encyclopedia: true Velum_Claw: true Velum_Arc_Wand: true Velum_Damascus: true Velum_Stunner: true Velum_Flail: true Velum_Arbalest: true Velum_CrossBow: true Velum_Claymore: true Velum_Katzbalger: true Siege_Arrow_A: true Siege_Arrow_S: true Siege_Greave: true Siege_Boots: true Siege_Shoes: true Siege_Manteau: true Siege_Muffler: true Siege_White_Potion: true Siege_Blue_Potion: true Woe_Violet_Potion: true Woe_White_Potion: true Woe_Blue_Potion: true Siege_Plate: true Siege_Suits: true Siege_Robe: true } mapflags: ( ) }, [/code]
I tried explicitly enabling them inside of GvG, but it didn't work:[code=:0] { /* GvG zone is applied to all maps with a gvg mapflag */ name: "GvG" /* changing this name requires MAP_ZONE_GVG_NAME to also be changed in src/map/map.h file */ disabled_skills: { AL_TELEPORT: "PLAYER" AL_WARP: "PLAYER" WZ_ICEWALL: "PLAYER" TF_BACKSLIDING: "PLAYER" RG_INTIMIDATE: "PLAYER" WE_CALLPARTNER: "PLAYER" HP_ASSUMPTIO: "PLAYER" HP_BASILICA: "PLAYER" CG_MOONLIT: "PLAYER" WE_CALLPARENT: "PLAYER" WE_CALLBABY: "PLAYER" CR_CULTIVATION: "PLAYER" NJ_KIRIKAGE: "PLAYER" CASH_ASSUMPTIO: "PLAYER" BS_GREED: "PLAYER" SC_FATALMENACE: "PLAYER" SC_DIMENSIONDOOR: "PLAYER" } disabled_items: { Assumptio_5_Scroll: true Greed_Scroll: true Pty_Assumptio_Scroll: true Velum_Jamadhar: false Velum_Scare: false Velum_Buster: false Velum_Guillotine: false Velum_Spear: false Velum_Glaive: false Velum_Bible: false Velum_Encyclopedia: false Velum_Claw: false Velum_Arc_Wand: false Velum_Damascus: false Velum_Stunner: false Velum_Flail: false Velum_Arbalest: false Velum_CrossBow: false Velum_Claymore: false Velum_Katzbalger: false Siege_Arrow_A: false Siege_Arrow_S: false Siege_Greave: false Siege_Boots: false Siege_Shoes: false Siege_Manteau: false Siege_Muffler: false Siege_White_Potion: false Siege_Blue_Potion: false Woe_Violet_Potion: false Woe_White_Potion: false Woe_Blue_Potion: false Siege_Plate: false Siege_Suits: false Siege_Robe: false } /* 5 second duration increase on GvG */ /* knockback disabled */ /* GvG Mode Damage Reductions */ /* - weapon_damage_rate -40% */ /* - magic_damage_rate -40% */ /* - misc_damage_rate -40% */ /* - long_damage_rate -20% */ /* - short_damage_rate -20% */ mapflags: ( "invincible_time_inc 5000", "noknockback", "weapon_damage_rate 60", "magic_damage_rate 60", "misc_damage_rate 60", "long_damage_rate 80", "short_damage_rate 80", "nocashshop", "gvg_noparty", ) }, [/code]

So the way zones stack needs changed. I understand why you'd apply @gvgon/@pvpon first, then apply the actual ("main") zone. For instance, for a PVP event which allows only certain items, I'd want my custom zone first, but for WoE, I'd want GvG to override the Normal zone.

[b]Suggestion Solution[/b]

GvG and PvP zones override the zone when the zone is "Normal", and should be secondary when the zone is of any other type. In short, Normal should always be overridden by any other zone (PvP/GvG).

Normal < PvP/GvG < All other zones

Example:

WoE has the zone "Normal" when WoE is not on. When WoE is started, GvG is added. The order should be Normal+GvG (Normal applied, then overridden with GvG)
A custom PVP area has the zone "Event". When PvP is enabled, PvP is added. The order should be PvP+Event (PvP applied first, then overridden with Event)

Ind - Oct 13, 2014 21:13

I can see why, however this is related to a main data flaw in the zone parser, for a Immediate fix I recommend you preset the castles to gvg (in mapflag/zones.txt), that way they'll never be "Normal" (and I believe it won't affect the battle-ability (or "pvp" state) as it requires another flag not related to the zone)

Ind - Jan 24, 2015 15:14

Fixed in [url="https://github.com/HerculesWS/Hercules/commit/1f40b88a9b27f1437d2d8b2f4c5dcb56a1e477db"]https://github.com/HerculesWS/Hercules/commit/1f40b88a9b27f1437d2d8b2f4c5dcb56a1e477db[/url]