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:
parent
399d11cd78
commit
264af55b42
@ -73,6 +73,7 @@
|
||||
//----------------------------------------------------------------------------
|
||||
// GVG
|
||||
//----------------------------------------------------------------------------
|
||||
605,4 // Anodyne
|
||||
12218,4 // Assumptio_5_Scroll
|
||||
14529,4 // Greed_Scroll
|
||||
14590,4 // Pty_Assumptio_Scroll
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
14
src/map/pc.c
14
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;
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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] )
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user