Change some GvG checks (#2172)

* Fixes #1600.
* Adjusted various GvG checks to ignore the Agit mode check.
* Blocked Anodyne on GvG zones.
Signed-off-by: Cydh Ramdh <cydh@pservero.com>
This commit is contained in:
Jittapan Pluemsumran 2017-06-13 04:59:44 +07:00 committed by Aleos
parent 399d11cd78
commit 264af55b42
9 changed files with 34 additions and 37 deletions

View File

@ -73,6 +73,7 @@
//----------------------------------------------------------------------------
// GVG
//----------------------------------------------------------------------------
605,4 // Anodyne
12218,4 // Assumptio_5_Scroll
14529,4 // Greed_Scroll
14590,4 // Pty_Assumptio_Scroll

View File

@ -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);

View File

@ -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;
}

View File

@ -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

View File

@ -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;

View File

@ -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;
}

View File

@ -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) {

View File

@ -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] )

View File

@ -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;
}