diff --git a/db/re/item_noequip.txt b/db/re/item_noequip.txt index 7d9ac7b192..4639bf00b0 100644 --- a/db/re/item_noequip.txt +++ b/db/re/item_noequip.txt @@ -73,6 +73,7 @@ //---------------------------------------------------------------------------- // GVG //---------------------------------------------------------------------------- +605,4 // Anodyne 12218,4 // Assumptio_5_Scroll 14529,4 // Greed_Scroll 14590,4 // Pty_Assumptio_Scroll diff --git a/src/map/battle.c b/src/map/battle.c index e1b979fcdb..23ea8198ac 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -2083,9 +2083,9 @@ static int battle_skill_damage_skill(struct block_list *src, struct block_list * if (!battle_skill_damage_iscaster(damage->caster, src->type)) return 0; - if ((damage->map&1 && (!mapd->flag.pvp && !map_flag_gvg(m) && !mapd->flag.battleground && !mapd->flag.skill_damage && !mapd->flag.restricted)) || + if ((damage->map&1 && (!mapd->flag.pvp && !map_flag_gvg2(m) && !mapd->flag.battleground && !mapd->flag.skill_damage && !mapd->flag.restricted)) || (damage->map&2 && mapd->flag.pvp) || - (damage->map&4 && map_flag_gvg(m)) || + (damage->map&4 && map_flag_gvg2(m)) || (damage->map&8 && mapd->flag.battleground) || (damage->map&16 && mapd->flag.skill_damage) || (mapd->flag.restricted && damage->map&(8*mapd->zone))) @@ -4405,8 +4405,8 @@ struct Damage battle_attack_sc_bonus(struct Damage wd, struct block_list *src, s #endif if (sc->data[SC_SPIRIT]) { if (skill_id == AS_SONICBLOW && sc->data[SC_SPIRIT]->val2 == SL_ASSASIN) { - ATK_ADDRATE(wd.damage, wd.damage2, map_flag_gvg(src->m) ? 25 : 100); //+25% dmg on woe/+100% dmg on nonwoe - RE_ALLATK_ADDRATE(wd, map_flag_gvg(src->m) ? 25 : 100); //+25% dmg on woe/+100% dmg on nonwoe + ATK_ADDRATE(wd.damage, wd.damage2, map_flag_gvg2(src->m) ? 25 : 100); //+25% dmg on woe/+100% dmg on nonwoe + RE_ALLATK_ADDRATE(wd, map_flag_gvg2(src->m) ? 25 : 100); //+25% dmg on woe/+100% dmg on nonwoe } else if (skill_id == CR_SHIELDBOOMERANG && sc->data[SC_SPIRIT]->val2 == SL_CRUSADER) { ATK_ADDRATE(wd.damage, wd.damage2, 100); RE_ALLATK_ADDRATE(wd, 100); diff --git a/src/map/clif.c b/src/map/clif.c index 343e88a5e2..2e7f185f9e 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -6325,7 +6325,7 @@ void clif_map_property(struct block_list *bl, enum map_property property, enum s #if PACKETVER >= 20121010 WBUFL(buf,4) = ((map[bl->m].flag.pvp?1:0)<<0)| // PARTY - Show attack cursor on non-party members (PvP) - ((map[bl->m].flag.battleground || map_flag_gvg(bl->m)?1:0)<<1)|// GUILD - Show attack cursor on non-guild members (GvG) + ((map[bl->m].flag.battleground || map_flag_gvg2(bl->m)?1:0)<<1)|// GUILD - Show attack cursor on non-guild members (GvG) ((map[bl->m].flag.battleground || map_flag_gvg2(bl->m)?1:0)<<2)|// SIEGE - Show emblem over characters heads when in GvG (WoE castle) ((map[bl->m].flag.nomineeffect || !map_flag_gvg2(bl->m)?0:1)<<3)| // USE_SIMPLE_EFFECT - Automatically enable /mineffect ((map[bl->m].flag.nolockon || map_flag_vs(bl->m)?1:0)<<4)| // DISABLE_LOCKON - Only allow attacks on other players with shift key or /ns active @@ -7802,7 +7802,7 @@ void clif_sendegg(struct map_session_data *sd) nullpo_retv(sd); fd=sd->fd; - if (battle_config.pet_no_gvg && map_flag_gvg(sd->bl.m)) { //Disable pet hatching in GvG grounds during Guild Wars [Skotlex] + if (battle_config.pet_no_gvg && map_flag_gvg2(sd->bl.m)) { //Disable pet hatching in GvG grounds during Guild Wars [Skotlex] clif_displaymessage(fd, msg_txt(sd,666)); return; } diff --git a/src/map/guild.c b/src/map/guild.c index 92fc200ad9..9b260cfa21 100644 --- a/src/map/guild.c +++ b/src/map/guild.c @@ -605,7 +605,7 @@ int guild_invite(struct map_session_data *sd, struct map_session_data *tsd) { if(tsd->status.guild_id>0 || tsd->guild_invite>0 || - map_flag_gvg(tsd->bl.m)) + map_flag_gvg2(tsd->bl.m)) { //Can't invite people inside castles. [Skotlex] clif_guild_inviteack(sd,0); return 0; @@ -774,7 +774,7 @@ int guild_leave(struct map_session_data* sd, int guild_id, uint32 account_id, ui if(sd->status.account_id!=account_id || sd->status.char_id!=char_id || sd->status.guild_id!=guild_id || - map_flag_gvg(sd->bl.m)) + map_flag_gvg2(sd->bl.m)) return 0; guild_trade_bound_cancel(sd); @@ -806,7 +806,7 @@ int guild_expulsion(struct map_session_data* sd, int guild_id, uint32 account_id //Can't leave inside guild castles. if ((tsd = map_id2sd(account_id)) && tsd->status.char_id == char_id && - map_flag_gvg(tsd->bl.m)) + map_flag_gvg2(tsd->bl.m)) return 0; // find the member and perform expulsion diff --git a/src/map/mob.c b/src/map/mob.c index 82ecea27ca..ac6550da83 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -1383,7 +1383,7 @@ static int mob_ai_sub_hard_slavemob(struct mob_data *md,unsigned int tick) && unit_walktoxy(&md->bl, x, y, 0)) return 1; } - } else if (bl->m != md->bl.m && map_flag_gvg(md->bl.m)) { + } else if (bl->m != md->bl.m && map_flag_gvg2(md->bl.m)) { //Delete the summoned mob if it's in a gvg ground and the master is elsewhere. [Skotlex] status_kill(&md->bl); return 1; diff --git a/src/map/pc.c b/src/map/pc.c index 55c8732089..55b8e8ac3f 100755 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -4751,18 +4751,14 @@ bool pc_isUseitem(struct map_session_data *sd,int n) return false; // You cannot use this item while storage is open. } - if (item->flag.dead_branch && (map[sd->bl.m].flag.nobranch || map_flag_gvg(sd->bl.m))) + if (item->flag.dead_branch && (map[sd->bl.m].flag.nobranch || map_flag_gvg2(sd->bl.m))) return false; switch( nameid ) { - case ITEMID_ANODYNE: - if( map_flag_gvg(sd->bl.m) ) - return false; - break; case ITEMID_WING_OF_FLY: case ITEMID_GIANT_FLY_WING: case ITEMID_N_FLY_WING: - if( map[sd->bl.m].flag.noteleport || map_flag_gvg(sd->bl.m) ) { + if( map[sd->bl.m].flag.noteleport || map_flag_gvg2(sd->bl.m) ) { clif_skill_teleportmessage(sd,0); return false; } @@ -7602,7 +7598,7 @@ int pc_dead(struct map_session_data *sd,struct block_list *src) if(battle_config.pc_invincible_time) pc_setinvincibletimer(sd, battle_config.pc_invincible_time); sc_start(&sd->bl,&sd->bl,status_skill2sc(MO_STEELBODY),100,5,skill_get_time(MO_STEELBODY,5)); - if(map_flag_gvg(sd->bl.m)) + if(map_flag_gvg2(sd->bl.m)) pc_respawn_timer(INVALID_TIMER, gettick(), sd->bl.id, 0); return 0; } @@ -7762,7 +7758,7 @@ int pc_dead(struct map_session_data *sd,struct block_list *src) // changed penalty options, added death by player if pk_mode [Valaris] if(battle_config.death_penalty_type && (sd->class_&MAPID_UPPERMASK) != MAPID_NOVICE // only novices will receive no penalty - && !map[sd->bl.m].flag.noexppenalty && !map_flag_gvg(sd->bl.m) + && !map[sd->bl.m].flag.noexppenalty && !map_flag_gvg2(sd->bl.m) && !sd->sc.data[SC_BABY] && !sd->sc.data[SC_LIFEINSURANCE]) { uint32 base_penalty = 0; @@ -7882,7 +7878,7 @@ int pc_dead(struct map_session_data *sd,struct block_list *src) } } //GvG - if( map_flag_gvg(sd->bl.m) ) { + if( map_flag_gvg2(sd->bl.m) ) { add_timer(tick+1000, pc_respawn_timer, sd->bl.id, 0); return 1|8; } diff --git a/src/map/skill.c b/src/map/skill.c index 5e8b2a31da..6cf5602e1e 100755 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -726,7 +726,7 @@ bool skill_isNotOk(uint16 skill_id, struct map_session_data *sd) } break; case GC_DARKILLUSION: - if( map_flag_gvg(m) ) { + if( map_flag_gvg2(m) ) { clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0); return true; } @@ -4703,7 +4703,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint uint8 dir = map_calc_dir(bl, src->x, src->y); // teleport to target (if not on WoE grounds) - if (skill_check_unit_movepos(3, src, bl->x, bl->y, 0, 1)) + if (skill_check_unit_movepos(5, src, bl->x, bl->y, 0, 1)) skill_blown(src, src, 1, (dir+4)%8, BLOWN_NONE); //Target position is actually one cell next to the target // cause damage and knockback if the path to target was a straight one @@ -5330,7 +5330,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint sc_start(src,src,SC_HIDING,100,skill_lv,skill_get_time(skill_id,skill_lv)); break; case NJ_KIRIKAGE: - if( !map_flag_gvg(src->m) && !map[src->m].flag.battleground ) + if( !map_flag_gvg2(src->m) && !map[src->m].flag.battleground ) { //You don't move on GVG grounds. short x, y; map_search_freecell(bl, 0, &x, &y, 1, 1, 0); @@ -5674,7 +5674,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint } break; case LG_PINPOINTATTACK: - if (skill_check_unit_movepos(3, src, bl->x, bl->y, 1, 1)) + if (skill_check_unit_movepos(5, src, bl->x, bl->y, 1, 1)) clif_blown(src); skill_attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag); break; @@ -6216,7 +6216,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui break; case ALL_RESURRECTION: - if(sd && (map_flag_gvg(bl->m) || map[bl->m].flag.battleground)) + if(sd && (map_flag_gvg2(bl->m) || map[bl->m].flag.battleground)) { //No reviving in WoE grounds! clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0); break; @@ -11758,7 +11758,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui } break; case NJ_SHADOWJUMP: - if( map_getcell(src->m,x,y,CELL_CHKREACH) && skill_check_unit_movepos(3, src, x, y, 1, 0) ) //You don't move on GVG grounds. + if( map_getcell(src->m,x,y,CELL_CHKREACH) && skill_check_unit_movepos(5, src, x, y, 1, 0) ) //You don't move on GVG grounds. clif_blown(src); status_change_end(src, SC_HIDING, INVALID_TIMER); break; @@ -12647,7 +12647,7 @@ struct skill_unit_group *skill_unitsetting(struct block_list *src, uint16 skill_ ARR_FIND(0, MAX_SKILL_ITEM_REQUIRE, i, req.itemid[i] && (req.itemid[i] == ITEMID_TRAP || req.itemid[i] == ITEMID_TRAP_ALLOY)); if( i != MAX_SKILL_ITEM_REQUIRE && req.itemid[i] ) req_item = req.itemid[i]; - if( map_flag_gvg(src->m) || map[src->m].flag.battleground ) + if( map_flag_gvg2(src->m) || map[src->m].flag.battleground ) limit *= 4; // longer trap times in WOE [celest] if( battle_config.vs_traps_bctall && map_flag_vs(src->m) && (src->type&battle_config.vs_traps_bctall) ) target = BCT_ALL; @@ -15366,7 +15366,7 @@ bool skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_i } break; case SR_CURSEDCIRCLE: - if (map_flag_gvg(sd->bl.m)) { + if (map_flag_gvg2(sd->bl.m)) { if (map_foreachinrange(mob_count_sub, &sd->bl, skill_get_splash(skill_id, skill_lv), BL_MOB, MOBID_EMPERIUM, MOBID_GUARDIAN_STONE1, MOBID_GUARDIAN_STONE2)) { char output[128]; @@ -16520,7 +16520,7 @@ int skill_delayfix(struct block_list *bl, uint16 skill_id, uint16 skill_lv) time /= 2; break; case AS_SONICBLOW: - if (!map_flag_gvg(bl->m) && !map[bl->m].flag.battleground && sc->data[SC_SPIRIT]->val2 == SL_ASSASIN) + if (!map_flag_gvg2(bl->m) && !map[bl->m].flag.battleground && sc->data[SC_SPIRIT]->val2 == SL_ASSASIN) time /= 2; break; } @@ -20635,7 +20635,7 @@ int skill_get_elemental_type( uint16 skill_id , uint16 skill_lv ) { /** * Check before do `unit_movepos` call - * @param check_flag Flags: 1:Check for BG map, 2:Check for GVG map on WOE, 4:Check for GVG map + * @param check_flag Flags: 1:Check for BG maps, 2:Check for GVG maps on WOE times, 4:Check for GVG maps regardless Agit flags * @return True:If unit can be moved, False:If check on flags are met or unit cannot be moved. **/ static bool skill_check_unit_movepos(uint8 check_flag, struct block_list *bl, short dst_x, short dst_y, int easy, bool checkpath) { diff --git a/src/map/status.c b/src/map/status.c index fc551889e8..8a03e2cb18 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -1648,7 +1648,7 @@ int status_damage(struct block_list *src,struct block_list *target,int64 dhp, in * Endure count is only reduced by non-players on non-gvg maps. * val4 signals infinite endure. **/ - if (src && src->type != BL_PC && !map_flag_gvg(target->m) && !map[target->m].flag.battleground && --(sce->val2) < 0) + if (src && src->type != BL_PC && !map_flag_gvg2(target->m) && !map[target->m].flag.battleground && --(sce->val2) < 0) status_change_end(target, SC_ENDURE, INVALID_TIMER); } if ((sce=sc->data[SC_GRAVITATION]) && sce->val3 == BCT_SELF) { @@ -1744,7 +1744,7 @@ int status_damage(struct block_list *src,struct block_list *target,int64 dhp, in } } - if( sc && sc->data[SC_KAIZEL] && !map_flag_gvg(target->m) ) { // flag&8 = disable Kaizel + if( sc && sc->data[SC_KAIZEL] && !map_flag_gvg2(target->m) ) { // flag&8 = disable Kaizel int time = skill_get_time2(SL_KAIZEL,sc->data[SC_KAIZEL]->val1); // Look for Osiris Card's bonus effect on the character and revive 100% or revive normally if ( target->type == BL_PC && BL_CAST(BL_PC,target)->special_state.restart_full_recover ) @@ -6968,7 +6968,7 @@ static short status_calc_aspd_rate(struct block_list *bl, struct status_change * */ static unsigned short status_calc_dmotion(struct block_list *bl, struct status_change *sc, int dmotion) { - if( !sc || !sc->count || map_flag_gvg(bl->m) || map[bl->m].flag.battleground ) + if( !sc || !sc->count || map_flag_gvg2(bl->m) || map[bl->m].flag.battleground ) return cap_value(dmotion,0,USHRT_MAX); /// It has been confirmed on official servers that MvP mobs have no dmotion even without endure @@ -9174,7 +9174,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty break; case SC_ENDURE: val2 = 7; // Hit-count [Celest] - if( !(flag&SCSTART_NOAVOID) && (bl->type&(BL_PC|BL_MER)) && !map_flag_gvg(bl->m) && !map[bl->m].flag.battleground && !val4 ) { + if( !(flag&SCSTART_NOAVOID) && (bl->type&(BL_PC|BL_MER)) && !map_flag_gvg2(bl->m) && !map[bl->m].flag.battleground && !val4 ) { struct map_session_data *tsd; if( sd ) { int i; @@ -9486,7 +9486,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty if (sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_ROGUE) val3 -= 40; val4 = 10+val1*2; // SP cost. - if (map_flag_gvg(bl->m) || map[bl->m].flag.battleground) val4 *= 5; + if (map_flag_gvg2(bl->m) || map[bl->m].flag.battleground) val4 *= 5; break; case SC_CLOAKING: if (!sd) // Monsters should be able to walk with no penalties. [Skotlex] @@ -9681,7 +9681,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty if( (d_bl = map_id2bl(val1)) && (d_sc = status_get_sc(d_bl)) && d_sc->count ) { // Inherits Status From Source const enum sc_type types[] = { SC_AUTOGUARD, SC_DEFENDER, SC_REFLECTSHIELD, SC_ENDURE }; - int i = (map_flag_gvg(bl->m) || map[bl->m].flag.battleground)?2:3; + int i = (map_flag_gvg2(bl->m) || map[bl->m].flag.battleground)?2:3; while( i >= 0 ) { enum sc_type type2 = types[i]; if( d_sc->data[type2] ) diff --git a/src/map/unit.c b/src/map/unit.c index 5e63876363..94693620e5 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -1111,7 +1111,7 @@ int unit_blown(struct block_list* bl, int dx, int dy, int count, enum e_skill_bl enum e_unit_blown unit_blown_immune(struct block_list* bl, uint8 flag) { if ((flag&0x1) - && (map_flag_gvg(bl->m) || map[bl->m].flag.battleground) + && (map_flag_gvg2(bl->m) || map[bl->m].flag.battleground) && ((flag&0x2) || !(battle_config.skill_trap_type&0x1))) return UB_NO_KNOCKBACK_MAP; // No knocking back in WoE / BG @@ -2679,7 +2679,7 @@ int unit_skillcastcancel(struct block_list *bl, char type) return 0; if (sd && (sd->special_state.no_castcancel2 || - ((sd->sc.data[SC_UNLIMITEDHUMMINGVOICE] || sd->special_state.no_castcancel) && !map_flag_gvg(bl->m) && !map[bl->m].flag.battleground))) // fixed flags being read the wrong way around [blackhole89] + ((sd->sc.data[SC_UNLIMITEDHUMMINGVOICE] || sd->special_state.no_castcancel) && !map_flag_gvg2(bl->m) && !map[bl->m].flag.battleground))) // fixed flags being read the wrong way around [blackhole89] return 0; }