Cleaned up status_change_end (#7211)

* Removed leftover old debug info that made it necessary to the hide the real function behind a define.
* Introduced a C++ default argument for timer id, as the timer id is only needed a single time, when the status expires naturally.
* Replaced all currently existing calls that had INVALID_TIMER as argument and made use of the new default argument.
This commit is contained in:
Lemongrass3110 2022-08-27 04:23:40 +02:00 committed by GitHub
parent a03644fc53
commit b1b371f4b8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 512 additions and 513 deletions

View File

@ -7444,7 +7444,7 @@ ACMD_FUNC(unmute)
}
pl_sd->status.manner = 0;
status_change_end(&pl_sd->bl, SC_NOCHAT, INVALID_TIMER);
status_change_end(&pl_sd->bl, SC_NOCHAT);
clif_displaymessage(sd->fd,msg_txt(sd,1236)); // Player unmuted.
return 0;
@ -7551,7 +7551,7 @@ ACMD_FUNC(mute)
sc_start(NULL,&pl_sd->bl,SC_NOCHAT,100,0,0);
} else {
pl_sd->status.manner = 0;
status_change_end(&pl_sd->bl, SC_NOCHAT, INVALID_TIMER);
status_change_end(&pl_sd->bl, SC_NOCHAT);
}
clif_GM_silence(sd, pl_sd, (manner > 0 ? 1 : 0));
@ -8438,7 +8438,7 @@ static int atcommand_mutearea_sub(struct block_list *bl,va_list ap)
if (pl_sd->status.manner < 0)
sc_start(NULL,&pl_sd->bl,SC_NOCHAT,100,0,0);
else
status_change_end(&pl_sd->bl, SC_NOCHAT, INVALID_TIMER);
status_change_end(&pl_sd->bl, SC_NOCHAT);
}
return 0;
}
@ -9738,7 +9738,7 @@ ACMD_FUNC(mount2) {
sc_start(NULL, &sd->bl, SC_ALL_RIDING, 10000, 1, INFINITE_TICK);
} else {
clif_displaymessage(sd->fd,msg_txt(sd,1364)); // You have released your mount.
status_change_end(&sd->bl, SC_ALL_RIDING, INVALID_TIMER);
status_change_end(&sd->bl, SC_ALL_RIDING);
}
return 0;
}
@ -10333,7 +10333,7 @@ ACMD_FUNC(changedress){
for( sc_type type : name2id ) {
if( sd->sc.data[type] ) {
status_change_end( &sd->bl, type, INVALID_TIMER );
status_change_end( &sd->bl, type );
// You should only be able to have one - so we cancel here
break;
}
@ -10366,7 +10366,7 @@ ACMD_FUNC(costume) {
if( sd->sc.data[name2id[k]] ) {
sprintf(atcmd_output, msg_txt(sd, 727), names[k]); // '%s' Costume removed.
clif_displaymessage(sd->fd, atcmd_output);
status_change_end(&sd->bl, (sc_type)name2id[k], INVALID_TIMER);
status_change_end(&sd->bl, (sc_type)name2id[k]);
return 0;
}
}

View File

@ -503,12 +503,12 @@ int64 battle_attr_fix(struct block_list *src, struct block_list *target, int64 d
damage *= 2;
#endif
//Remove a unit group or end whole status change
status_change_end(target, SC_SPIDERWEB, INVALID_TIMER);
status_change_end(target, SC_SPIDERWEB);
}
if (tsc->data[SC_THORNSTRAP] && battle_getcurrentskill(src) != GN_CARTCANNON)
status_change_end(target, SC_THORNSTRAP, INVALID_TIMER);
status_change_end(target, SC_THORNSTRAP);
if (tsc->data[SC_CRYSTALIZE])
status_change_end(target, SC_CRYSTALIZE, INVALID_TIMER);
status_change_end(target, SC_CRYSTALIZE);
if (tsc->data[SC_EARTH_INSIGNIA])
#ifdef RENEWAL
ratio += 50;
@ -521,7 +521,7 @@ int64 battle_attr_fix(struct block_list *src, struct block_list *target, int64 d
#else
damage *= 2;
#endif
status_change_end(target,SC_WIDEWEB,INVALID_TIMER);
status_change_end(target,SC_WIDEWEB);
}
if( tsc->data[SC_BURNT] ) {
#ifdef RENEWAL
@ -587,7 +587,7 @@ int64 battle_attr_fix(struct block_list *src, struct block_list *target, int64 d
#else
damage += (int64)(damage * 50 / 100);
#endif
status_change_end(target, SC_MAGNETICFIELD, INVALID_TIMER); //freed if received earth dmg
status_change_end(target, SC_MAGNETICFIELD); //freed if received earth dmg
break;
case ELE_NEUTRAL:
if (tsc->data[SC_ANTI_M_BLAST])
@ -1123,7 +1123,7 @@ bool battle_status_block_damage(struct block_list *src, struct block_list *targe
damage = -sce->val2;
}
if ((--sce->val3) <= 0 || (sce->val2 <= 0) || skill_id == AL_HOLYLIGHT)
status_change_end(target, SC_KYRIE, INVALID_TIMER);
status_change_end(target, SC_KYRIE);
}
if ((sce = sc->data[SC_P_ALTER]) && damage > 0) {
@ -1134,7 +1134,7 @@ bool battle_status_block_damage(struct block_list *src, struct block_list *targe
else
damage = -sce->val3;
if (sce->val3 <= 0)
status_change_end(target, SC_P_ALTER, INVALID_TIMER);
status_change_end(target, SC_P_ALTER);
}
if ((sce = sc->data[SC_TUNAPARTY]) && damage > 0) {
@ -1144,20 +1144,20 @@ bool battle_status_block_damage(struct block_list *src, struct block_list *targe
else
damage = -sce->val2;
if (sce->val2 <= 0)
status_change_end(target, SC_TUNAPARTY, INVALID_TIMER);
status_change_end(target, SC_TUNAPARTY);
}
if ((sce = sc->data[SC_DIMENSION1]) && damage > 0) {
sce->val2 -= static_cast<int>(cap_value(damage, INT_MIN, INT_MAX));
if (sce->val2 <= 0)
status_change_end(target, SC_DIMENSION1, INVALID_TIMER);
status_change_end(target, SC_DIMENSION1);
return false;
}
if ((sce = sc->data[SC_DIMENSION2]) && damage > 0) {
sce->val2 -= static_cast<int>(cap_value(damage, INT_MIN, INT_MAX));
if (sce->val2 <= 0)
status_change_end(target, SC_DIMENSION2, INVALID_TIMER);
status_change_end(target, SC_DIMENSION2);
return false;
}
@ -1171,7 +1171,7 @@ bool battle_status_block_damage(struct block_list *src, struct block_list *targe
damage = -sce->val2;
}
if (sce->val2 <= 0)
status_change_end(target, SC_GUARDIAN_S, INVALID_TIMER);
status_change_end(target, SC_GUARDIAN_S);
}
// Weapon Blocking can be triggered while the above statuses are active.
@ -1218,7 +1218,7 @@ bool battle_status_block_damage(struct block_list *src, struct block_list *targe
}
return false;
}
status_change_end(target, SC_SAFETYWALL, INVALID_TIMER);
status_change_end(target, SC_SAFETYWALL);
}
if ((sc->data[SC_PNEUMA] && (flag&(BF_MAGIC | BF_LONG)) == BF_LONG) ||
@ -1248,7 +1248,7 @@ bool battle_status_block_damage(struct block_list *src, struct block_list *targe
{
if (skill_id == WL_SOULEXPANSION)
damage <<= 1; // If used against a player in White Imprison, the skill deals double damage.
status_change_end(target, SC_WHITEIMPRISON, INVALID_TIMER); // Those skills do damage and removes effect
status_change_end(target, SC_WHITEIMPRISON); // Those skills do damage and removes effect
} else {
d->dmg_lv = ATK_BLOCK;
return false;
@ -1264,7 +1264,7 @@ bool battle_status_block_damage(struct block_list *src, struct block_list *targe
clif_millenniumshield(target, sce->val2);
sce->val3 = 1000; // Next shield
} else
status_change_end(target, SC_MILLENNIUMSHIELD, INVALID_TIMER); // All shields down
status_change_end(target, SC_MILLENNIUMSHIELD); // All shields down
status_change_start(src, target, SC_STUN, 10000, 0, 0, 0, 0, 1000, SCSTART_NOTICKDEF);
}
return false;
@ -1332,7 +1332,7 @@ bool battle_status_block_damage(struct block_list *src, struct block_list *targe
unit_setdir(target, dir);
}
d->dmg_lv = ATK_DEF;
status_change_end(target, SC_LIGHTNINGWALK, INVALID_TIMER);
status_change_end(target, SC_LIGHTNINGWALK);
return false;
}
@ -1371,7 +1371,7 @@ bool battle_status_block_damage(struct block_list *src, struct block_list *targe
if (skill_id != ASC_BREAKER || !(flag&BF_WEAPON))
#endif
if (--sce->val3 <= 0) //We make it work like Safety Wall, even though it only blocks 1 time.
status_change_end(target, SC_KAUPE, INVALID_TIMER);
status_change_end(target, SC_KAUPE);
return false;
}
@ -1390,9 +1390,9 @@ bool battle_status_block_damage(struct block_list *src, struct block_list *targe
}
//Both need to be consumed if they are active.
if (sce && --sce->val2 <= 0)
status_change_end(target, SC_UTSUSEMI, INVALID_TIMER);
status_change_end(target, SC_UTSUSEMI);
if ((sce = sc->data[SC_BUNSINJYUTSU]) && --sce->val2 <= 0)
status_change_end(target, SC_BUNSINJYUTSU, INVALID_TIMER);
status_change_end(target, SC_BUNSINJYUTSU);
return false;
}
@ -1493,7 +1493,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
#ifndef RENEWAL
if( skill_id != ASC_BREAKER || !(flag&BF_WEAPON) )
#endif
status_change_end(bl, SC_AETERNA, INVALID_TIMER); //Shouldn't end until Breaker's non-weapon part connects.
status_change_end(bl, SC_AETERNA); //Shouldn't end until Breaker's non-weapon part connects.
}
#ifdef RENEWAL
@ -1508,7 +1508,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
if( damage ) {
if( sc->data[SC_DEEPSLEEP] ) {
damage += damage / 2; // 1.5 times more damage while in Deep Sleep.
status_change_end(bl,SC_DEEPSLEEP,INVALID_TIMER);
status_change_end(bl,SC_DEEPSLEEP);
}
if( tsd && sd && sc->data[SC_CRYSTALIZE] && flag&BF_WEAPON ) {
switch(tsd->status.weapon) {
@ -1536,7 +1536,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
}
}
if( sc->data[SC_VOICEOFSIREN] )
status_change_end(bl,SC_VOICEOFSIREN,INVALID_TIMER);
status_change_end(bl,SC_VOICEOFSIREN);
}
if (sc->data[SC_SOUNDOFDESTRUCTION])
@ -1669,7 +1669,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
per /=20; //Uses 20% SP intervals.
//SP Cost: 1% + 0.5% per every 20% SP
if (!status_charge(bl, 0, (10+5*per)*status->max_sp/1000))
status_change_end(bl, SC_ENERGYCOAT, INVALID_TIMER);
status_change_end(bl, SC_ENERGYCOAT);
damage -= damage * 6 * (1 + per) / 100; //Reduction: 6% + 6% every 20%
}
@ -1706,9 +1706,9 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
//Finally added to remove the status of immobile when Aimed Bolt is used. [Jobbie]
if( skill_id == RA_AIMEDBOLT && (sc->data[SC_BITE] || sc->data[SC_ANKLE] || sc->data[SC_ELECTRICSHOCKER]) ) {
status_change_end(bl, SC_BITE, INVALID_TIMER);
status_change_end(bl, SC_ANKLE, INVALID_TIMER);
status_change_end(bl, SC_ELECTRICSHOCKER, INVALID_TIMER);
status_change_end(bl, SC_BITE);
status_change_end(bl, SC_ANKLE);
status_change_end(bl, SC_ELECTRICSHOCKER);
}
if (!damage)
@ -2804,7 +2804,7 @@ static bool is_attack_critical(struct Damage* wd, struct block_list *src, struct
if(sc && !sc->data[SC_AUTOCOUNTER])
break;
clif_specialeffect(src, EF_AUTOCOUNTER, AREA);
status_change_end(src, SC_AUTOCOUNTER, INVALID_TIMER);
status_change_end(src, SC_AUTOCOUNTER);
case KN_AUTOCOUNTER:
if(battle_config.auto_counter_type &&
(battle_config.auto_counter_type&src->type))
@ -3953,7 +3953,7 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
skillratio += -100 + sd->inventory_data[index]->weight / 10 + sd->inventory_data[index]->atk +
100 * sd->inventory_data[index]->weapon_level * (sd->inventory.u.items_inventory[index].refine + 6);
}
status_change_end(src,SC_CRUSHSTRIKE,INVALID_TIMER);
status_change_end(src,SC_CRUSHSTRIKE);
skill_break_equip(src,src,EQP_WEAPON,2000,BCT_SELF);
} else {
if (sc->data[SC_GIANTGROWTH] && (sd->class_&MAPID_THIRDMASK) == MAPID_RUNE_KNIGHT) { // Increase damage again if Crush Strike is not active
@ -5877,7 +5877,7 @@ static void battle_calc_attack_plant(struct Damage* wd, struct block_list *src,s
bool attack_hits = is_attack_hitting(wd, src, target, skill_id, skill_lv, false);
if (skill_id != SN_SHARPSHOOTING && skill_id != RA_ARROWSTORM)
status_change_end(src, SC_CAMOUFLAGE, INVALID_TIMER);
status_change_end(src, SC_CAMOUFLAGE);
//Plants receive 1 damage when hit
if( attack_hits || wd->damage > 0 )
@ -6102,7 +6102,7 @@ static void battle_calc_weapon_final_atk_modifiers(struct Damage* wd, struct blo
status_fix_damage(target,src,wd->damage,clif_damage(target,src,gettick(),0,0,wd->damage,0,DMG_NORMAL,0,false),ST_REJECTSWORD);
clif_skill_nodamage(target,target,ST_REJECTSWORD,tsc->data[SC_REJECTSWORD]->val1,1);
if( --(tsc->data[SC_REJECTSWORD]->val3) <= 0 )
status_change_end(target, SC_REJECTSWORD, INVALID_TIMER);
status_change_end(target, SC_REJECTSWORD);
}
if( tsc && tsc->data[SC_CRESCENTELBOW] && wd->flag&BF_SHORT && rnd()%100 < tsc->data[SC_CRESCENTELBOW]->val2 ) {
@ -6118,7 +6118,7 @@ static void battle_calc_weapon_final_atk_modifiers(struct Damage* wd, struct blo
clif_damage(src, target, gettick(), status_get_amotion(src)+1000, 0, rdamage/10, 1, DMG_NORMAL, 0, false);
status_damage(target, src, rdamage, 0, 0, 0, 0);
status_damage(src, target, rdamage/10, 0, 0, 1, 0);
status_change_end(target, SC_CRESCENTELBOW, INVALID_TIMER);
status_change_end(target, SC_CRESCENTELBOW);
}
if( sc ) {
@ -6151,7 +6151,7 @@ static void battle_calc_weapon_final_atk_modifiers(struct Damage* wd, struct blo
}
}
if (skill_id != SN_SHARPSHOOTING && skill_id != RA_ARROWSTORM)
status_change_end(src, SC_CAMOUFLAGE, INVALID_TIMER);
status_change_end(src, SC_CAMOUFLAGE);
}
#ifndef RENEWAL
@ -8440,7 +8440,7 @@ int64 battle_calc_return_damage(struct block_list* tbl, struct block_list *src,
*dmg = rd1 * 30 / 100; // Received damage = 30% of amplified damage.
clif_skill_damage(src, tbl, gettick(), status_get_amotion(src), 0, -30000, 1, RK_DEATHBOUND, tsc->data[SC_DEATHBOUND]->val1, DMG_SINGLE);
skill_blown(tbl, src, skill_get_blewcount(RK_DEATHBOUND, tsc->data[SC_DEATHBOUND]->val1), unit_getdir(src), BLOWN_NONE);
status_change_end(tbl, SC_DEATHBOUND, INVALID_TIMER);
status_change_end(tbl, SC_DEATHBOUND);
rdamage += rd1 * 70 / 100; // Target receives 70% of the amplified damage. [Rytech]
}
}
@ -8767,11 +8767,11 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t
}
if (sc && sc->count) {
if (sc->data[SC_CLOAKING] && !(sc->data[SC_CLOAKING]->val4 & 2))
status_change_end(src, SC_CLOAKING, INVALID_TIMER);
status_change_end(src, SC_CLOAKING);
else if (sc->data[SC_CLOAKINGEXCEED] && !(sc->data[SC_CLOAKINGEXCEED]->val4 & 2))
status_change_end(src, SC_CLOAKINGEXCEED, INVALID_TIMER);
status_change_end(src, SC_CLOAKINGEXCEED);
else if (sc->data[SC_NEWMOON] && --(sc->data[SC_NEWMOON]->val2) <= 0)
status_change_end(src, SC_NEWMOON, INVALID_TIMER);
status_change_end(src, SC_NEWMOON);
}
if (tsc && tsc->data[SC_AUTOCOUNTER] && status_check_skilluse(target, src, KN_AUTOCOUNTER, 1)) {
uint8 dir = map_calc_dir(target,src->x,src->y);
@ -8783,7 +8783,7 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t
clif_skillcastcancel(target); //Remove the casting bar. [Skotlex]
clif_damage(src, target, tick, sstatus->amotion, 1, 0, 1, DMG_NORMAL, 0, false); //Display MISS.
status_change_end(target, SC_AUTOCOUNTER, INVALID_TIMER);
status_change_end(target, SC_AUTOCOUNTER);
skill_attack(BF_WEAPON,target,target,src,KN_AUTOCOUNTER,skill_lv,tick,0);
return ATK_BLOCK;
}
@ -8802,7 +8802,7 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t
if (status_get_class_(src) == CLASS_BOSS)
duration = 2000; // Only lasts 2 seconds for Boss monsters
#endif
status_change_end(target, SC_BLADESTOP_WAIT, INVALID_TIMER);
status_change_end(target, SC_BLADESTOP_WAIT);
if(sc_start4(src,src, SC_BLADESTOP, 100, sd?pc_checkskill(sd, MO_BLADESTOP):5, 0, 0, target->id, duration))
{ //Target locked.
clif_damage(src, target, tick, sstatus->amotion, 1, 0, 1, DMG_NORMAL, 0, false); //Display MISS.
@ -8821,7 +8821,7 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t
if (sc && sc->data[SC_SKILLRATE_UP] && sc->data[SC_SKILLRATE_UP]->val1 == MO_TRIPLEATTACK) {
triple_rate+= triple_rate*(sc->data[SC_SKILLRATE_UP]->val2)/100;
status_change_end(src, SC_SKILLRATE_UP, INVALID_TIMER);
status_change_end(src, SC_SKILLRATE_UP);
}
if (rnd()%100 < triple_rate) {
//Need to apply canact_tick here because it doesn't go through skill_castend_id
@ -8838,7 +8838,7 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t
damage_lv ret_val;
if( --sc->data[SC_SACRIFICE]->val2 <= 0 )
status_change_end(src, SC_SACRIFICE, INVALID_TIMER);
status_change_end(src, SC_SACRIFICE);
/**
* We need to calculate the DMG before the hp reduction, because it can kill the source.
@ -8895,7 +8895,7 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t
if( sc && sc->count ) {
if (sc->data[SC_EXEEDBREAK])
status_change_end(src, SC_EXEEDBREAK, INVALID_TIMER);
status_change_end(src, SC_EXEEDBREAK);
if( sc->data[SC_SPELLFIST] && !vellum_damage ){
if (status_charge(src, 0, 20)) {
if (!is_infinite_defense(target, wd.flag)) {
@ -8908,7 +8908,7 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t
DAMAGE_DIV_FIX(wd.damage, wd.div_);
}
} else
status_change_end(src,SC_SPELLFIST,INVALID_TIMER);
status_change_end(src,SC_SPELLFIST);
}
if (sc->data[SC_GIANTGROWTH] && (wd.flag&BF_SHORT) && rnd()%100 < sc->data[SC_GIANTGROWTH]->val2 && !is_infinite_defense(target, wd.flag) && !vellum_damage)
wd.damage += wd.damage * 150 / 100; // 2.5 times damage
@ -8996,7 +8996,7 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t
}
}
else
status_change_end(target, SC_DEVOTION, INVALID_TIMER);
status_change_end(target, SC_DEVOTION);
}
if (target->type == BL_PC && (wd.flag&BF_SHORT) && tsc->data[SC_CIRCLE_OF_FIRE_OPTION]) {
s_elemental_data *ed = ((TBL_PC*)target)->ed;
@ -9205,7 +9205,7 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t
--sce->val2;
}
if (sce->val2 <= 0)
status_change_end(target, SC_POISONREACT, INVALID_TIMER);
status_change_end(target, SC_POISONREACT);
}
}

View File

@ -11192,8 +11192,8 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd)
clif_changeoption(&sd->bl);
if ((sd->sc.data[SC_MONSTER_TRANSFORM] || sd->sc.data[SC_ACTIVE_MONSTER_TRANSFORM]) && battle_config.mon_trans_disable_in_gvg && mapdata_flag_gvg2(mapdata)) {
status_change_end(&sd->bl, SC_MONSTER_TRANSFORM, INVALID_TIMER);
status_change_end(&sd->bl, SC_ACTIVE_MONSTER_TRANSFORM, INVALID_TIMER);
status_change_end(&sd->bl, SC_MONSTER_TRANSFORM);
status_change_end(&sd->bl, SC_ACTIVE_MONSTER_TRANSFORM);
clif_displaymessage(sd->fd, msg_txt(sd,731)); // Transforming into monster is not allowed in Guild Wars.
}
@ -11459,8 +11459,8 @@ void clif_parse_WalkToXY(int fd, struct map_session_data *sd)
// not when you move each cell. This is official behaviour.
if (sd->sc.data[SC_CLOAKING])
skill_check_cloaking(&sd->bl, sd->sc.data[SC_CLOAKING]);
status_change_end(&sd->bl, SC_ROLLINGCUTTER, INVALID_TIMER); // If you move, you lose your counters. [malufett]
status_change_end(&sd->bl, SC_CRESCIVEBOLT, INVALID_TIMER);
status_change_end(&sd->bl, SC_ROLLINGCUTTER); // If you move, you lose your counters. [malufett]
status_change_end(&sd->bl, SC_CRESCIVEBOLT);
pc_delinvincibletimer(sd);
@ -19590,7 +19590,7 @@ int clif_autoshadowspell_list(struct map_session_data *sd) {
sd->menuskill_id = SC_AUTOSHADOWSPELL;
sd->menuskill_val = c;
} else {
status_change_end(&sd->bl,SC_STOP,INVALID_TIMER);
status_change_end(&sd->bl,SC_STOP);
clif_skill_fail(sd,SC_AUTOSHADOWSPELL,USESKILL_FAIL_IMITATION_SKILL_NONE,0);
}

View File

@ -1038,11 +1038,11 @@ int guild_member_withdraw(int guild_id, uint32 account_id, uint32 char_id, int f
}
clif_name_area(&sd->bl); //Update display name [Skotlex]
status_change_end(&sd->bl,SC_LEADERSHIP,INVALID_TIMER);
status_change_end(&sd->bl,SC_GLORYWOUNDS,INVALID_TIMER);
status_change_end(&sd->bl,SC_SOULCOLD,INVALID_TIMER);
status_change_end(&sd->bl,SC_HAWKEYES,INVALID_TIMER);
status_change_end(&sd->bl,SC_EMERGENCY_MOVE,INVALID_TIMER);
status_change_end(&sd->bl,SC_LEADERSHIP);
status_change_end(&sd->bl,SC_GLORYWOUNDS);
status_change_end(&sd->bl,SC_SOULCOLD);
status_change_end(&sd->bl,SC_HAWKEYES);
status_change_end(&sd->bl,SC_EMERGENCY_MOVE);
//@TODO: Send emblem update to self and people around
}
return 0;
@ -1534,7 +1534,7 @@ void guild_guildaura_refresh(struct map_session_data *sd, uint16 skill_id, uint1
if (type == SC_NONE)
return;
status_change_end(&sd->bl, type, INVALID_TIMER);
status_change_end(&sd->bl, type);
std::shared_ptr<s_skill_unit_group> group = skill_unitsetting(&sd->bl,skill_id,skill_lv,sd->bl.x,sd->bl.y,0);
@ -1914,11 +1914,11 @@ int guild_broken(int guild_id,int flag) {
sd->state.gmaster_flag = 0;
clif_guild_broken(g->member[i].sd,0);
clif_name_area(&sd->bl); // [LuzZza]
status_change_end(&sd->bl,SC_LEADERSHIP,INVALID_TIMER);
status_change_end(&sd->bl,SC_GLORYWOUNDS,INVALID_TIMER);
status_change_end(&sd->bl,SC_SOULCOLD,INVALID_TIMER);
status_change_end(&sd->bl,SC_HAWKEYES,INVALID_TIMER);
status_change_end(&sd->bl,SC_EMERGENCY_MOVE,INVALID_TIMER);
status_change_end(&sd->bl,SC_LEADERSHIP);
status_change_end(&sd->bl,SC_GLORYWOUNDS);
status_change_end(&sd->bl,SC_SOULCOLD);
status_change_end(&sd->bl,SC_HAWKEYES);
status_change_end(&sd->bl,SC_EMERGENCY_MOVE);
}
}

View File

@ -270,7 +270,7 @@ int hom_dead(struct homun_data *hd)
clif_emotion(&sd->bl, ET_CRY);
#ifdef RENEWAL
status_change_end(&sd->bl, SC_HOMUN_TIME, INVALID_TIMER);
status_change_end(&sd->bl, SC_HOMUN_TIME);
#endif
//Remove from map (if it has no intimacy, it is auto-removed from memory)
@ -310,7 +310,7 @@ int hom_vaporize(struct map_session_data *sd, int flag)
hom_save(hd);
#ifdef RENEWAL
status_change_end(&sd->bl, SC_HOMUN_TIME, INVALID_TIMER);
status_change_end(&sd->bl, SC_HOMUN_TIME);
#endif
return unit_remove_map(&hd->bl, CLR_OUTSIGHT);

View File

@ -443,17 +443,17 @@ int map_moveblock(struct block_list *bl, int x1, int y1, t_tick tick)
skill_unit_move(bl,tick,2);
if ( sc && sc->count ) //at least one to cancel
{
status_change_end(bl, SC_CLOSECONFINE, INVALID_TIMER);
status_change_end(bl, SC_CLOSECONFINE2, INVALID_TIMER);
status_change_end(bl, SC_TINDER_BREAKER, INVALID_TIMER);
status_change_end(bl, SC_TINDER_BREAKER2, INVALID_TIMER);
// status_change_end(bl, SC_BLADESTOP, INVALID_TIMER); //Won't stop when you are knocked away, go figure...
status_change_end(bl, SC_TATAMIGAESHI, INVALID_TIMER);
status_change_end(bl, SC_MAGICROD, INVALID_TIMER);
status_change_end(bl, SC_SU_STOOP, INVALID_TIMER);
status_change_end(bl, SC_CLOSECONFINE);
status_change_end(bl, SC_CLOSECONFINE2);
status_change_end(bl, SC_TINDER_BREAKER);
status_change_end(bl, SC_TINDER_BREAKER2);
// status_change_end(bl, SC_BLADESTOP); //Won't stop when you are knocked away, go figure...
status_change_end(bl, SC_TATAMIGAESHI);
status_change_end(bl, SC_MAGICROD);
status_change_end(bl, SC_SU_STOOP);
if (sc->data[SC_PROPERTYWALK] &&
sc->data[SC_PROPERTYWALK]->val3 >= skill_get_maxcount(sc->data[SC_PROPERTYWALK]->val1,sc->data[SC_PROPERTYWALK]->val2) )
status_change_end(bl,SC_PROPERTYWALK,INVALID_TIMER);
status_change_end(bl,SC_PROPERTYWALK);
}
} else
if (bl->type == BL_NPC)
@ -481,7 +481,7 @@ int map_moveblock(struct block_list *bl, int x1, int y1, t_tick tick)
struct block_list *d_bl;
if( (d_bl = map_id2bl(((TBL_PC*)bl)->shadowform_id)) == NULL || !check_distance_bl(bl,d_bl,10) ) {
if( d_bl )
status_change_end(d_bl,SC__SHADOWFORM,INVALID_TIMER);
status_change_end(d_bl,SC__SHADOWFORM);
((TBL_PC*)bl)->shadowform_id = 0;
}
}
@ -491,7 +491,7 @@ int map_moveblock(struct block_list *bl, int x1, int y1, t_tick tick)
skill_unit_move_unit_group(skill_id2group(sc->data[SC_DANCING]->val2), bl->m, x1-x0, y1-y0);
else {
if (sc->data[SC_CLOAKING] && sc->data[SC_CLOAKING]->val1 < 3 && !skill_check_cloaking(bl, NULL))
status_change_end(bl, SC_CLOAKING, INVALID_TIMER);
status_change_end(bl, SC_CLOAKING);
if (sc->data[SC_WARM])
skill_unit_move_unit_group(skill_id2group(sc->data[SC_WARM]->val4), bl->m, x1-x0, y1-y0);
if (sc->data[SC_BANDING])
@ -505,7 +505,7 @@ int map_moveblock(struct block_list *bl, int x1, int y1, t_tick tick)
if( sc->data[SC__SHADOWFORM] ) {//Shadow Form Caster Moving
struct block_list *d_bl;
if( (d_bl = map_id2bl(sc->data[SC__SHADOWFORM]->val2)) == NULL || !check_distance_bl(bl,d_bl,10) )
status_change_end(bl,SC__SHADOWFORM,INVALID_TIMER);
status_change_end(bl,SC__SHADOWFORM);
}
if (sc->data[SC_PROPERTYWALK]
@ -2095,20 +2095,20 @@ int map_quit(struct map_session_data *sd) {
//No need to save infinite status
if (flag[SCF_NOSAVEINFINITE] && sd->sc.data[it.first] && sd->sc.data[it.first]->val4 > 0) {
status_change_end(&sd->bl, static_cast<sc_type>(it.first), INVALID_TIMER);
status_change_end(&sd->bl, static_cast<sc_type>(it.first));
continue;
}
//Status that are not saved
if (flag[SCF_NOSAVE]) {
status_change_end(&sd->bl, static_cast<sc_type>(it.first), INVALID_TIMER);
status_change_end(&sd->bl, static_cast<sc_type>(it.first));
continue;
}
//Removes status by config
if (battle_config.debuff_on_logout&1 && flag[SCF_DEBUFF] || //Removes debuffs
(battle_config.debuff_on_logout&2 && !(flag[SCF_DEBUFF]))) //Removes buffs
{
status_change_end(&sd->bl, static_cast<sc_type>(it.first), INVALID_TIMER);
status_change_end(&sd->bl, static_cast<sc_type>(it.first));
continue;
}
}

View File

@ -281,7 +281,7 @@ int mercenary_delete(s_mercenary_data *md, int reply) {
if( md->devotion_flag )
{
md->devotion_flag = 0;
status_change_end(&sd->bl, SC_DEVOTION, INVALID_TIMER);
status_change_end(&sd->bl, SC_DEVOTION);
}
switch( reply )

View File

@ -3357,8 +3357,8 @@ int mob_class_change (struct mob_data *md, int mob_id)
else
memcpy(md->name,md->db->jname.c_str(),NAME_LENGTH);
status_change_end(&md->bl,SC_KEEPING,INVALID_TIMER); // End before calling status_calc_mob().
status_change_end(&md->bl,SC_BARRIER,INVALID_TIMER);
status_change_end(&md->bl,SC_KEEPING); // End before calling status_calc_mob().
status_change_end(&md->bl,SC_BARRIER);
mob_stop_attack(md);
mob_stop_walking(md, 0);
unit_skillcastcancel(&md->bl, 0);

View File

@ -781,7 +781,7 @@ int pc_delsoulball(map_session_data *sd, int count, bool type)
}else{
sd->soulball -= cap_value(count, 0, sd->soulball);
if (sd->soulball == 0)
status_change_end(&sd->bl, SC_SOULENERGY, INVALID_TIMER);
status_change_end(&sd->bl, SC_SOULENERGY);
else
sc->data[SC_SOULENERGY]->val1 = sd->soulball;
}
@ -2654,9 +2654,9 @@ void pc_updateweightstatus(struct map_session_data *sd)
// stop old status change
if( old_overweight == 1 )
status_change_end(&sd->bl, SC_WEIGHT50, INVALID_TIMER);
status_change_end(&sd->bl, SC_WEIGHT50);
else if( old_overweight == 2 )
status_change_end(&sd->bl, SC_WEIGHT90, INVALID_TIMER);
status_change_end(&sd->bl, SC_WEIGHT90);
// start new status change
if( new_overweight == 1 )
@ -6432,7 +6432,7 @@ enum e_setpos pc_setpos(struct map_session_data* sd, unsigned short mapindex, in
for (const auto &it : status_db) {
if (sc->data[it.first]) {
if (it.second->flag[SCF_REMOVEONMAPWARP])
status_change_end(&sd->bl, static_cast<sc_type>(it.first), INVALID_TIMER);
status_change_end(&sd->bl, static_cast<sc_type>(it.first));
if (it.second->flag[SCF_RESTARTONMAPWARP] && it.second->skill_id > 0) {
status_change_entry *sce = sd->sc.data[it.first];
@ -6875,12 +6875,12 @@ static void pc_checkallowskill(struct map_session_data *sd)
if (status == SC_DANCING && !battle_config.dancing_weaponswitch_fix)
continue;
if (sd->sc.data[status] && !pc_check_weapontype(sd, skill_get_weapontype(it.second->skill_id)))
status_change_end(&sd->bl, status, INVALID_TIMER);
status_change_end(&sd->bl, status);
}
if (flag[SCF_REQUIRESHIELD]) { // Skills requiring a shield
if (sd->sc.data[status] && sd->status.shield <= 0)
status_change_end(&sd->bl, status, INVALID_TIMER);
status_change_end(&sd->bl, status);
}
}
}
@ -8886,9 +8886,9 @@ int pc_resetskill(struct map_session_data* sd, int flag)
hom_vaporize(sd, HOM_ST_ACTIVE);
if (sd->sc.data[SC_SPRITEMABLE] && pc_checkskill(sd, SU_SPRITEMABLE))
status_change_end(&sd->bl, SC_SPRITEMABLE, INVALID_TIMER);
status_change_end(&sd->bl, SC_SPRITEMABLE);
if (sd->sc.data[SC_SOULATTACK] && pc_checkskill(sd, SU_SOULATTACK))
status_change_end(&sd->bl, SC_SOULATTACK, INVALID_TIMER);
status_change_end(&sd->bl, SC_SOULATTACK);
}
for (const auto &skill : skill_db) {
@ -9209,7 +9209,7 @@ int pc_dead(struct map_session_data *sd,struct block_list *src)
if (sd->devotion[k]){
struct map_session_data *devsd = map_id2sd(sd->devotion[k]);
if (devsd)
status_change_end(&devsd->bl, SC_DEVOTION, INVALID_TIMER);
status_change_end(&devsd->bl, SC_DEVOTION);
sd->devotion[k] = 0;
}
}
@ -9219,7 +9219,7 @@ int pc_dead(struct map_session_data *sd,struct block_list *src)
struct map_session_data *smarksd = map_id2sd(sd->stellar_mark[k]);
if (smarksd)
status_change_end(&smarksd->bl, SC_FLASHKICK, INVALID_TIMER);
status_change_end(&smarksd->bl, SC_FLASHKICK);
sd->stellar_mark[k] = 0;
}
}
@ -9229,7 +9229,7 @@ int pc_dead(struct map_session_data *sd,struct block_list *src)
struct map_session_data *usoulsd = map_id2sd(sd->united_soul[k]);
if (usoulsd)
status_change_end(&usoulsd->bl, SC_SOULUNITY, INVALID_TIMER);
status_change_end(&usoulsd->bl, SC_SOULUNITY);
sd->united_soul[k] = 0;
}
}
@ -9239,13 +9239,13 @@ int pc_dead(struct map_session_data *sd,struct block_list *src)
struct map_session_data *ssignsd = map_id2sd(sd->servant_sign[k]);
if (ssignsd)
status_change_end(&ssignsd->bl, SC_SERVANT_SIGN, INVALID_TIMER);
status_change_end(&ssignsd->bl, SC_SERVANT_SIGN);
sd->servant_sign[k] = 0;
}
}
if(sd->shadowform_id) { //if we were target of shadowform
status_change_end(map_id2bl(sd->shadowform_id), SC__SHADOWFORM, INVALID_TIMER);
status_change_end(map_id2bl(sd->shadowform_id), SC__SHADOWFORM);
sd->shadowform_id = 0; //should be remove on status end anyway
}
@ -9591,7 +9591,7 @@ bool pc_revive_item(struct map_session_data *sd) {
return false;
if (item_position < 0)
status_change_end(&sd->bl, SC_LIGHT_OF_REGENE, INVALID_TIMER);
status_change_end(&sd->bl, SC_LIGHT_OF_REGENE);
else
pc_delitem(sd, item_position, 1, 0, 1, LOG_TYPE_CONSUME);
@ -9965,7 +9965,7 @@ bool pc_setparam(struct map_session_data *sd,int64 type,int64 val_tmp)
if( val < 0 )
sc_start(NULL, &sd->bl, SC_NOCHAT, 100, 0, 0);
else {
status_change_end(&sd->bl, SC_NOCHAT, INVALID_TIMER);
status_change_end(&sd->bl, SC_NOCHAT);
clif_manner_message(sd, 5);
}
return true; // status_change_start/status_change_end already sends packets warning the client
@ -10458,11 +10458,11 @@ bool pc_jobchange(struct map_session_data *sd,int job, char upper)
hom_vaporize(sd, HOM_ST_ACTIVE);
if (sd->sc.data[SC_SPRITEMABLE] && !pc_checkskill(sd, SU_SPRITEMABLE))
status_change_end(&sd->bl, SC_SPRITEMABLE, INVALID_TIMER);
status_change_end(&sd->bl, SC_SPRITEMABLE);
if (sd->sc.data[SC_SOULATTACK] && !pc_checkskill(sd, SU_SOULATTACK))
status_change_end(&sd->bl, SC_SOULATTACK, INVALID_TIMER);
status_change_end(&sd->bl, SC_SOULATTACK);
if( sd->sc.data[SC_SPIRIT] ){
status_change_end( &sd->bl, SC_SPIRIT, INVALID_TIMER );
status_change_end( &sd->bl, SC_SPIRIT );
}
if(sd->status.manner < 0)
@ -10637,7 +10637,7 @@ void pc_setoption(struct map_session_data *sd,int type, int subtype)
if( type&OPTION_MADOGEAR && !(p_type&OPTION_MADOGEAR) ) {
sc_start(&sd->bl, &sd->bl, SC_MADOGEAR, 100, subtype, INFINITE_TICK);
} else if( !(type&OPTION_MADOGEAR) && p_type&OPTION_MADOGEAR ) {
status_change_end(&sd->bl, SC_MADOGEAR, INVALID_TIMER);
status_change_end(&sd->bl, SC_MADOGEAR);
}
if (type&OPTION_FLYING && !(p_type&OPTION_FLYING))
@ -10686,7 +10686,7 @@ bool pc_setcart(struct map_session_data *sd,int type) {
case 0:
if( !sd->sc.data[SC_PUSH_CART] )
return 0;
status_change_end(&sd->bl,SC_PUSH_CART,INVALID_TIMER);
status_change_end(&sd->bl,SC_PUSH_CART);
clif_clearcart(sd->fd);
break;
default:/* everything else is an allowed ID so we can move on */
@ -11754,7 +11754,7 @@ static void pc_unequipitem_sub(struct map_session_data *sd, int n, int flag) {
}
if (sd->sc.data[SC_SIGNUMCRUCIS] && !battle_check_undead(sd->battle_status.race, sd->battle_status.def_ele))
status_change_end(&sd->bl, SC_SIGNUMCRUCIS, INVALID_TIMER);
status_change_end(&sd->bl, SC_SIGNUMCRUCIS);
//OnUnEquip script [Skotlex]
if (sd->inventory_data[n]) {
@ -11827,13 +11827,13 @@ bool pc_unequipitem(struct map_session_data *sd, int n, int flag) {
pc_calcweapontype(sd);
clif_changelook(&sd->bl,LOOK_WEAPON,sd->status.weapon);
if( !battle_config.dancing_weaponswitch_fix )
status_change_end(&sd->bl, SC_DANCING, INVALID_TIMER); // Unequipping => stop dancing.
status_change_end(&sd->bl, SC_DANCING); // Unequipping => stop dancing.
#ifdef RENEWAL
if (battle_config.switch_remove_edp&2) {
#else
if (battle_config.switch_remove_edp&1) {
#endif
status_change_end(&sd->bl, SC_EDP, INVALID_TIMER);
status_change_end(&sd->bl, SC_EDP);
}
}
if(pos & EQP_HAND_L) {
@ -11888,12 +11888,12 @@ bool pc_unequipitem(struct map_session_data *sd, int n, int flag) {
// On equipment change
#ifndef RENEWAL
if (!(flag&4))
status_change_end(&sd->bl, SC_CONCENTRATION, INVALID_TIMER);
status_change_end(&sd->bl, SC_CONCENTRATION);
#endif
// On ammo change
if (sd->inventory_data[n]->type == IT_AMMO && (sd->inventory_data[n]->nameid != ITEMID_SILVER_BULLET || sd->inventory_data[n]->nameid != ITEMID_PURIFICATION_BULLET || sd->inventory_data[n]->nameid != ITEMID_SILVER_BULLET_))
status_change_end(&sd->bl, SC_P_ALTER, INVALID_TIMER);
status_change_end(&sd->bl, SC_P_ALTER);
pc_unequipitem_sub(sd, n, flag);
@ -12508,7 +12508,7 @@ bool pc_setstand(struct map_session_data *sd, bool force){
if (!force && (sd->sc.data[SC_SITDOWN_FORCE] || sd->sc.data[SC_BANANA_BOMB_SITDOWN]))
return false;
status_change_end(&sd->bl, SC_TENSIONRELAX, INVALID_TIMER);
status_change_end(&sd->bl, SC_TENSIONRELAX);
clif_status_load(&sd->bl,EFST_SIT,0);
clif_standing(&sd->bl); //Inform area PC is standing
//Reset sitting tick.
@ -12535,8 +12535,8 @@ void pc_overheat(map_session_data &sd, int16 heat) {
sce->val1 = cap_value(sce->val1, 0, 1000);
if (heat < 0 && sce->val1 == 0) { // Cooling device used.
status_change_end(&sd.bl, SC_OVERHEAT_LIMITPOINT, INVALID_TIMER);
status_change_end(&sd.bl, SC_OVERHEAT, INVALID_TIMER);
status_change_end(&sd.bl, SC_OVERHEAT_LIMITPOINT);
status_change_end(&sd.bl, SC_OVERHEAT);
}
} else if (heat > 0)
sc_start(&sd.bl, &sd.bl, SC_OVERHEAT_LIMITPOINT, 100, heat, 1000);
@ -14291,7 +14291,7 @@ void pc_crimson_marker_clear(struct map_session_data *sd) {
for (i = 0; i < MAX_SKILL_CRIMSON_MARKER; i++) {
struct block_list *bl = NULL;
if (sd->c_marker[i] && (bl = map_id2bl(sd->c_marker[i])))
status_change_end(bl,SC_C_MARKER,INVALID_TIMER);
status_change_end(bl,SC_C_MARKER);
sd->c_marker[i] = 0;
}
}
@ -14537,7 +14537,7 @@ void pc_cell_basilica(struct map_session_data *sd) {
if (!map_getcell(sd->bl.m,sd->bl.x,sd->bl.y,CELL_CHKBASILICA)) {
if (sd->sc.data[type])
status_change_end(&sd->bl, type,INVALID_TIMER);
status_change_end(&sd->bl, type);
}
else if (!sd->sc.data[type])
sc_start(&sd->bl,&sd->bl, type,100,0,INFINITE_TICK);

View File

@ -2069,7 +2069,7 @@ TIMER_FUNC(pet_recovery_timer){
//Display a heal animation?
//Detoxify is chosen for now.
clif_skill_nodamage(&pd->bl,&sd->bl,TF_DETOXIFY,1,1);
status_change_end(&sd->bl, pd->recovery->type, INVALID_TIMER);
status_change_end(&sd->bl, pd->recovery->type);
clif_emotion(&pd->bl, ET_OK);
}

View File

@ -12170,7 +12170,7 @@ BUILDIN_FUNC(sc_end)
//This should help status_change_end force disabling the SC in case it has no limit.
sce->val1 = sce->val2 = sce->val3 = sce->val4 = 0;
status_change_end(bl, (sc_type)type, INVALID_TIMER);
status_change_end(bl, (sc_type)type);
} else
status_change_clear(bl, 3); // remove all effects
@ -22201,7 +22201,7 @@ BUILDIN_FUNC(setmounting) {
script_pushint(st, 0); // Silent failure
} else {
if( sd->sc.data[SC_ALL_RIDING] )
status_change_end(&sd->bl, SC_ALL_RIDING, INVALID_TIMER); //release mount
status_change_end(&sd->bl, SC_ALL_RIDING); //release mount
else
sc_start(NULL, &sd->bl, SC_ALL_RIDING, 10000, 1, INFINITE_TICK); //mount
script_pushint(st,1);//in both cases, return 1.
@ -23107,10 +23107,10 @@ BUILDIN_FUNC(montransform) {
}
if (!strcmp(script_getfuncname(st), "active_transform")) {
status_change_end(&sd->bl, SC_ACTIVE_MONSTER_TRANSFORM, INVALID_TIMER); // Clear previous
status_change_end(&sd->bl, SC_ACTIVE_MONSTER_TRANSFORM); // Clear previous
sc_start2(NULL, &sd->bl, SC_ACTIVE_MONSTER_TRANSFORM, 100, mob_id, type, tick);
} else {
status_change_end(&sd->bl, SC_MONSTER_TRANSFORM, INVALID_TIMER); // Clear previous
status_change_end(&sd->bl, SC_MONSTER_TRANSFORM); // Clear previous
sc_start2(NULL, &sd->bl, SC_MONSTER_TRANSFORM, 100, mob_id, type, tick);
}
if (type != SC_NONE)

File diff suppressed because it is too large Load Diff

View File

@ -1049,7 +1049,7 @@ void StatusDatabase::changeSkillTree(map_session_data *sd, int32 class_) {
sc_type sc = skill_get_sc(skill_id);
if (sc > SC_COMMON_MAX && sc < SC_MAX && sd->sc.data[sc])
status_change_end(&sd->bl, sc, INVALID_TIMER);
status_change_end(&sd->bl, sc);
}
}
@ -1086,7 +1086,7 @@ void StatusDatabase::removeByStatusFlag(block_list *bl, std::vector<e_status_cha
if (sc->data[type]) {
for (const auto &flag_it : flag) {
if (status->flag[flag_it])
status_change_end(bl, type, INVALID_TIMER);
status_change_end(bl, type);
}
}
}
@ -1402,7 +1402,7 @@ int status_damage(struct block_list *src,struct block_list *target,int64 dhp, in
sc->lastEffectTimer = add_timer(gettick() + 10, status_clear_lastEffect_timer, target->id, 0);
sc->lastEffect = type;
}
status_change_end(target, type, INVALID_TIMER);
status_change_end(target, type);
}
}
if ((sce=sc->data[SC_ENDURE]) && !sce->val4) {
@ -1411,7 +1411,7 @@ int status_damage(struct block_list *src,struct block_list *target,int64 dhp, in
* val4 signals infinite endure.
**/
if (src && src->type != BL_PC && !map_flag_gvg2(target->m) && !map_getmapflag(target->m, MF_BATTLEGROUND) && --(sce->val2) <= 0)
status_change_end(target, SC_ENDURE, INVALID_TIMER);
status_change_end(target, SC_ENDURE);
}
#ifndef RENEWAL
if ((sce=sc->data[SC_GRAVITATION]) && sce->val3 == BCT_SELF) {
@ -1420,16 +1420,16 @@ int status_damage(struct block_list *src,struct block_list *target,int64 dhp, in
if (sg) {
skill_delunitgroup(sg);
sce->val4 = 0;
status_change_end(target, SC_GRAVITATION, INVALID_TIMER);
status_change_end(target, SC_GRAVITATION);
}
}
#endif
if(sc->data[SC_DANCING] && (unsigned int)hp > status->max_hp>>2)
status_change_end(target, SC_DANCING, INVALID_TIMER);
status_change_end(target, SC_DANCING);
if(sc->data[SC_CLOAKINGEXCEED] && --(sc->data[SC_CLOAKINGEXCEED]->val2) <= 0)
status_change_end(target, SC_CLOAKINGEXCEED, INVALID_TIMER);
status_change_end(target, SC_CLOAKINGEXCEED);
if(sc->data[SC_KAGEMUSYA] && --(sc->data[SC_KAGEMUSYA]->val3) <= 0)
status_change_end(target, SC_KAGEMUSYA, INVALID_TIMER);
status_change_end(target, SC_KAGEMUSYA);
}
if (target->type == BL_PC)
@ -1447,11 +1447,11 @@ int status_damage(struct block_list *src,struct block_list *target,int64 dhp, in
status->hp < status->max_hp>>2)
sc_start4(src,target,SC_PROVOKE,100,10,0,0,1,0);
if (sc->data[SC_BERSERK] && status->hp <= 100)
status_change_end(target, SC_BERSERK, INVALID_TIMER);
status_change_end(target, SC_BERSERK);
if( sc->data[SC_RAISINGDRAGON] && status->hp <= 1000 )
status_change_end(target, SC_RAISINGDRAGON, INVALID_TIMER);
status_change_end(target, SC_RAISINGDRAGON);
if (sc->data[SC_SATURDAYNIGHTFEVER] && status->hp <= 100)
status_change_end(target, SC_SATURDAYNIGHTFEVER, INVALID_TIMER);
status_change_end(target, SC_SATURDAYNIGHTFEVER);
}
switch (target->type) {
@ -1664,7 +1664,7 @@ int status_heal(struct block_list *bl,int64 hhp,int64 hsp, int64 hap, int flag)
sc->data[SC_PROVOKE]->val4==1 &&
status->hp>=status->max_hp>>2
) // End auto berserk.
status_change_end(bl, SC_PROVOKE, INVALID_TIMER);
status_change_end(bl, SC_PROVOKE);
// Send HP update to client
switch(bl->type) {
@ -4029,7 +4029,7 @@ int status_calc_pc_sub(struct map_session_data* sd, uint8 opt)
if (sc->data[SC_ENDURE]) {
if (sc->data[SC_ENDURE]->val4)
sc->data[SC_ENDURE]->val4 = 0;
status_change_end(&sd->bl, SC_ENDURE, INVALID_TIMER);
status_change_end(&sd->bl, SC_ENDURE);
}
clif_status_load(&sd->bl, EFST_ENDURE, 1);
base_status->mdef++;
@ -9670,7 +9670,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
sc_type rem_sc = it;
if (sc->data[rem_sc]) {
status_change_end(bl, rem_sc, INVALID_TIMER);
status_change_end(bl, rem_sc);
isRemoved = true;
}
}
@ -9763,7 +9763,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
if (val3) mode = static_cast<e_mode>(mode | val3); // Add mode
if (mode == bstatus->mode) { // No change.
if (sc->data[type]) // Abort previous status
return status_change_end(bl, type, INVALID_TIMER);
return status_change_end(bl, type);
return 0;
}
}
@ -9942,7 +9942,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
break;
case SC_MADNESSCANCEL:
if (sc->data[type]) { // Toggle the status but still consume requirements.
status_change_end(bl, type, INVALID_TIMER);
status_change_end(bl, type);
return 0;
}
break;
@ -9960,7 +9960,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
if (sc->data[i] && sc->data[i]->val3 == 1) // It doesn't stack or even renew on the target
return 0;
else if (sc->data[i] && sc->data[i]->val3 == 0)
status_change_end(bl, static_cast<sc_type>(i), INVALID_TIMER); // End the bonus part on the caster
status_change_end(bl, static_cast<sc_type>(i)); // End the bonus part on the caster
}
break;
case SC_SPIRIT:
@ -10052,7 +10052,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
sc_type opt1_type = status_it.second->type;
if (sc->data[opt1_type] && status_it.second->opt1 > OPT1_NONE)
status_change_end(bl, opt1_type, INVALID_TIMER);
status_change_end(bl, opt1_type);
}
}
@ -10075,7 +10075,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
case SC_SATURDAYNIGHTFEVER:
sc->data[rem_sc]->val2 = 0; // Mark to not lose hp
default:
status_change_end(bl, rem_sc, INVALID_TIMER);
status_change_end(bl, rem_sc);
break;
}
}
@ -10088,31 +10088,31 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
if (bl->type == BL_PC) {
// Remove Curse first, Stone is only removed if the target is not cursed
if (sc->data[SC_CURSE]) {
status_change_end(bl, SC_CURSE, INVALID_TIMER);
status_change_end(bl, SC_CURSE);
return 1; // End Curse and do not give stat boost
} else if (sc->data[SC_STONE]) {
status_change_end(bl, SC_STONE, INVALID_TIMER);
status_change_end(bl, SC_STONE);
return 1; // End Stone and do not give stat boost
}
}
if(sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_HIGH)
status_change_end(bl, SC_SPIRIT, INVALID_TIMER);
status_change_end(bl, SC_SPIRIT);
break;
case SC_INCREASEAGI:
if(sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_HIGH)
status_change_end(bl, SC_SPIRIT, INVALID_TIMER);
status_change_end(bl, SC_SPIRIT);
break;
case SC_DELUGE:
if (sc->data[SC_FOGWALL] && sc->data[SC_BLIND])
status_change_end(bl, SC_BLIND, INVALID_TIMER);
status_change_end(bl, SC_BLIND);
break;
case SC_SILENCE:
if (sc->data[SC_GOSPEL] && sc->data[SC_GOSPEL]->val4 == BCT_SELF)
status_change_end(bl, SC_GOSPEL, INVALID_TIMER);
status_change_end(bl, SC_GOSPEL);
break;
case SC_IMPOSITIO:
if (sc->data[SC_IMPOSITIO] && sc->data[SC_IMPOSITIO]->val1 > val1) //Replace higher level effect for lower.
status_change_end(bl,SC_IMPOSITIO,INVALID_TIMER);
status_change_end(bl,SC_IMPOSITIO);
break;
case SC_ENDURE:
if (sd && sd->special_state.no_walk_delay)
@ -12450,7 +12450,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
case SC_STONE:
if (sc->data[SC_DANCING]) {
unit_stop_walking(bl, 1);
status_change_end(bl, SC_DANCING, INVALID_TIMER);
status_change_end(bl, SC_DANCING);
}
break;
default:
@ -12711,7 +12711,7 @@ int status_change_clear(struct block_list* bl, int type)
if (type == 3 && it.second->flag[SCF_NOCLEARBUFF])
continue;
status_change_end(bl, status, INVALID_TIMER);
status_change_end(bl, status);
if( type == 1 && sc->data[status] ) { // If for some reason status_change_end decides to still keep the status when quitting. [Skotlex]
(sc->count)--;
if (sc->data[status]->timer != INVALID_TIMER)
@ -12740,7 +12740,7 @@ int status_change_clear(struct block_list* bl, int type)
* @param line: Used for dancing save
* @return 1: Success 0: Fail
*/
int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const char* file, int line)
int status_change_end(struct block_list* bl, enum sc_type type, int tid)
{
struct map_session_data *sd;
struct status_change *sc;
@ -12859,7 +12859,7 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
break;
case SC_AUTOBERSERK:
if (sc->data[SC_PROVOKE] && sc->data[SC_PROVOKE]->val4 == 1)
status_change_end(bl, SC_PROVOKE, INVALID_TIMER);
status_change_end(bl, SC_PROVOKE);
break;
case SC_ENDURE:
@ -12872,13 +12872,13 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
int i;
for( i = 0; i < MAX_DEVOTION; i++ ) {
if( sd->devotion[i] && (tsd = map_id2sd(sd->devotion[i])) && tsd->sc.data[type] )
status_change_end(&tsd->bl, type, INVALID_TIMER);
status_change_end(&tsd->bl, type);
}
}
else if( bl->type == BL_MER && ((TBL_MER*)bl)->devotion_flag ) { // Clear Status from Master
tsd = ((TBL_MER*)bl)->master;
if( tsd && tsd->sc.data[type] )
status_change_end(&tsd->bl, type, INVALID_TIMER);
status_change_end(&tsd->bl, type);
}
}
break;
@ -12893,10 +12893,10 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
clif_devotion(d_bl, NULL);
}
status_change_end(bl, SC_AUTOGUARD, INVALID_TIMER);
status_change_end(bl, SC_DEFENDER, INVALID_TIMER);
status_change_end(bl, SC_REFLECTSHIELD, INVALID_TIMER);
status_change_end(bl, SC_ENDURE, INVALID_TIMER);
status_change_end(bl, SC_AUTOGUARD);
status_change_end(bl, SC_DEFENDER);
status_change_end(bl, SC_REFLECTSHIELD);
status_change_end(bl, SC_ENDURE);
}
break;
@ -12928,7 +12928,7 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
sce->val4 = 0;
if(tbl && tsc && tsc->data[SC_BLADESTOP]) {
tsc->data[SC_BLADESTOP]->val4 = 0;
status_change_end(tbl, SC_BLADESTOP, INVALID_TIMER);
status_change_end(tbl, SC_BLADESTOP);
}
clif_bladestop(bl, tid2, 0);
}
@ -12944,7 +12944,7 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
// This will prevent recursive loops.
dsc->val2 = 0;
dsc->val4 = BCT_SELF;
status_change_end(&dsd->bl, SC_DANCING, INVALID_TIMER);
status_change_end(&dsd->bl, SC_DANCING);
}
}
@ -12960,9 +12960,9 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
clif_status_change(bl,EFST_MOON,0,0,0,0,0);
#ifdef RENEWAL
status_change_end(bl, SC_ENSEMBLEFATIGUE, INVALID_TIMER);
status_change_end(bl, SC_ENSEMBLEFATIGUE);
#else
status_change_end(bl, SC_LONGING, INVALID_TIMER);
status_change_end(bl, SC_LONGING);
#endif
}
break;
@ -12990,7 +12990,7 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
// If status was already ended, do nothing.
// Decrease count
if (--(sc2->data[SC_CLOSECONFINE]->val1) <= 0) // No more holds, free him up.
status_change_end(src, SC_CLOSECONFINE, INVALID_TIMER);
status_change_end(src, SC_CLOSECONFINE);
}
}
case SC_CLOSECONFINE:
@ -13015,24 +13015,24 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
if (sc2 && sc2->data[type2]) {
sc2->data[type2]->val1 = 0;
status_change_end(pbl, type2, INVALID_TIMER);
status_change_end(pbl, type2);
}
}
break;
case SC_CONCENTRATION:
if (sc->data[SC_ENDURE] && !sc->data[SC_ENDURE]->val4)
status_change_end(bl, SC_ENDURE, INVALID_TIMER);
status_change_end(bl, SC_ENDURE);
break;
case SC_BERSERK:
if(status->hp > 200 && sc && sc->data[SC__BLOODYLUST]) {
status_percent_heal(bl, 100, 0);
status_change_end(bl, SC__BLOODYLUST, INVALID_TIMER);
status_change_end(bl, SC__BLOODYLUST);
} else if (status->hp > 100 && sce->val2) // If val2 is removed, no HP penalty (dispelled?) [Skotlex]
status_set_hp(bl, 100, 0);
if(sc->data[SC_ENDURE] && sc->data[SC_ENDURE]->val4) {
sc->data[SC_ENDURE]->val4 = 0;
status_change_end(bl, SC_ENDURE, INVALID_TIMER);
status_change_end(bl, SC_ENDURE);
}
sc_start4(bl, bl, SC_REGENERATION, 100, 10,0,0,(RGN_HP|RGN_SP), skill_get_time(LK_BERSERK, sce->val1));
break;
@ -13107,7 +13107,7 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
struct block_list* tbl = map_id2bl(sce->val2);
sce->val2 = 0;
if( tbl && (sc = status_get_sc(tbl)) && sc->data[SC_STOP] && sc->data[SC_STOP]->val2 == bl->id )
status_change_end(tbl, SC_STOP, INVALID_TIMER);
status_change_end(tbl, SC_STOP);
}
break;
case SC_TENSIONRELAX:
@ -13117,7 +13117,7 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
case SC_MONSTER_TRANSFORM:
case SC_ACTIVE_MONSTER_TRANSFORM:
if (sce->val2)
status_change_end(bl, (sc_type)sce->val2, INVALID_TIMER);
status_change_end(bl, (sc_type)sce->val2);
break;
/* 3rd Stuff */
@ -13173,7 +13173,7 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
if( sd && !pc_isdead(sd) ) {
int i = min(sd->spiritball,5);
pc_delspiritball(sd, sd->spiritball, 0);
status_change_end(bl, SC_EXPLOSIONSPIRITS, INVALID_TIMER);
status_change_end(bl, SC_EXPLOSIONSPIRITS);
while( i > 0 ) {
pc_addspiritball(sd, skill_get_time(MO_CALLSPIRITS, pc_checkskill(sd,MO_CALLSPIRITS)), 5);
--i;
@ -13187,12 +13187,12 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
if( sc2 && sc2->data[SC_CURSEDCIRCLE_ATKER] && --(sc2->data[SC_CURSEDCIRCLE_ATKER]->val2) == 0 ) {
clif_bladestop(bl, sce->val2, 0);
status_change_end(src, SC_CURSEDCIRCLE_ATKER, INVALID_TIMER);
status_change_end(src, SC_CURSEDCIRCLE_ATKER);
}
}
break;
case SC_TEARGAS:
status_change_end(bl,SC_TEARGAS_SOB,INVALID_TIMER);
status_change_end(bl,SC_TEARGAS_SOB);
break;
case SC_SITDOWN_FORCE:
case SC_BANANA_BOMB_SITDOWN:
@ -13208,23 +13208,23 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
break;
case SC_SUNSTANCE:
status_change_end(bl, SC_LIGHTOFSUN, INVALID_TIMER);
status_change_end(bl, SC_LIGHTOFSUN);
break;
case SC_LUNARSTANCE:
status_change_end(bl, SC_NEWMOON, INVALID_TIMER);
status_change_end(bl, SC_LIGHTOFMOON, INVALID_TIMER);
status_change_end(bl, SC_NEWMOON);
status_change_end(bl, SC_LIGHTOFMOON);
break;
case SC_STARSTANCE:
status_change_end(bl, SC_FALLINGSTAR, INVALID_TIMER);
status_change_end(bl, SC_LIGHTOFSTAR, INVALID_TIMER);
status_change_end(bl, SC_FALLINGSTAR);
status_change_end(bl, SC_LIGHTOFSTAR);
break;
case SC_UNIVERSESTANCE:
status_change_end(bl, SC_LIGHTOFSUN, INVALID_TIMER);
status_change_end(bl, SC_NEWMOON, INVALID_TIMER);
status_change_end(bl, SC_LIGHTOFMOON, INVALID_TIMER);
status_change_end(bl, SC_FALLINGSTAR, INVALID_TIMER);
status_change_end(bl, SC_LIGHTOFSTAR, INVALID_TIMER);
status_change_end(bl, SC_DIMENSION, INVALID_TIMER);
status_change_end(bl, SC_LIGHTOFSUN);
status_change_end(bl, SC_NEWMOON);
status_change_end(bl, SC_LIGHTOFMOON);
status_change_end(bl, SC_FALLINGSTAR);
status_change_end(bl, SC_LIGHTOFSTAR);
status_change_end(bl, SC_DIMENSION);
break;
case SC_GRAVITYCONTROL:
status_fix_damage(bl, bl, sce->val2, clif_damage(bl, bl, gettick(), 0, 0, sce->val2, 0, DMG_NORMAL, 0, false), 0);
@ -13304,7 +13304,7 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
case SC_GOLDENMACECLAN:
case SC_CROSSBOWCLAN:
case SC_JUMPINGCLAN:
status_change_end(bl,SC_CLAN_INFO,INVALID_TIMER);
status_change_end(bl,SC_CLAN_INFO);
break;
case SC_DIMENSION1:
case SC_DIMENSION2:
@ -13344,7 +13344,7 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
}
break;
case SC_CHARGINGPIERCE:
status_change_end(bl, SC_CHARGINGPIERCE_COUNT, INVALID_TIMER);
status_change_end(bl, SC_CHARGINGPIERCE_COUNT);
break;
case SC_ABYSSFORCEWEAPON:
if( sd ){
@ -13918,7 +13918,7 @@ TIMER_FUNC(status_change_timer){
if( !status_charge(bl, 0, sce->val2) ) {
int i;
for(i = SC_SPELLBOOK1; i <= SC_MAXSPELLBOOK; i++) // Also remove stored spell as well.
status_change_end(bl, (sc_type)i, INVALID_TIMER);
status_change_end(bl, (sc_type)i);
break;
}
sc_timer_next(10000 + tick);
@ -14059,7 +14059,7 @@ TIMER_FUNC(status_change_timer){
if (sce->val1 > limit[skill_lv])
sce->val2 = 1;
} else {
status_change_end(bl, SC_OVERHEAT, INVALID_TIMER);
status_change_end(bl, SC_OVERHEAT);
if (sce->val2 > 0)
sc_start(bl, bl, SC_OVERHEAT, 100, sce->val1, 975);
}
@ -14154,8 +14154,8 @@ TIMER_FUNC(status_change_timer){
if (bl->type == BL_ELEM)
elemental_change_mode(BL_CAST(BL_ELEM, bl), EL_MODE_PASSIVE);
if( s_bl )
status_change_end(s_bl,static_cast<sc_type>(type+1),INVALID_TIMER);
status_change_end(bl,type,INVALID_TIMER);
status_change_end(s_bl,static_cast<sc_type>(type+1));
status_change_end(bl,type);
break;
}
sc_timer_next(sce->val3 + tick);
@ -14520,29 +14520,29 @@ int status_change_timer_sub(struct block_list* bl, va_list ap)
switch( type ) {
case SC_SIGHT: // Reveal hidden ennemy on 3*3 range
case SC_CONCENTRATE:
status_change_end(bl, SC_HIDING, INVALID_TIMER);
status_change_end(bl, SC_CLOAKING, INVALID_TIMER);
status_change_end(bl, SC_CLOAKINGEXCEED, INVALID_TIMER);
status_change_end(bl, SC_CAMOUFLAGE, INVALID_TIMER);
status_change_end(bl, SC_NEWMOON, INVALID_TIMER);
status_change_end(bl, SC_HIDING);
status_change_end(bl, SC_CLOAKING);
status_change_end(bl, SC_CLOAKINGEXCEED);
status_change_end(bl, SC_CAMOUFLAGE);
status_change_end(bl, SC_NEWMOON);
if (tsc && tsc->data[SC__SHADOWFORM] && (sce && sce->val4 > 0 && sce->val4%2000 == 0) && // For every 2 seconds do the checking
rnd()%100 < 100 - tsc->data[SC__SHADOWFORM]->val1 * 10) // [100 - (Skill Level x 10)] %
status_change_end(bl, SC__SHADOWFORM, INVALID_TIMER);
status_change_end(bl, SC__SHADOWFORM);
break;
case SC_RUWACH: // Reveal hidden target and deal little dammages if enemy
if (tsc && (tsc->data[SC_HIDING] || tsc->data[SC_CLOAKING] ||
tsc->data[SC_CAMOUFLAGE] || tsc->data[SC_NEWMOON] || tsc->data[SC_CLOAKINGEXCEED])) {
status_change_end(bl, SC_HIDING, INVALID_TIMER);
status_change_end(bl, SC_CLOAKING, INVALID_TIMER);
status_change_end(bl, SC_CAMOUFLAGE, INVALID_TIMER);
status_change_end(bl, SC_CLOAKINGEXCEED, INVALID_TIMER);
status_change_end(bl, SC_NEWMOON, INVALID_TIMER);
status_change_end(bl, SC_HIDING);
status_change_end(bl, SC_CLOAKING);
status_change_end(bl, SC_CAMOUFLAGE);
status_change_end(bl, SC_CLOAKINGEXCEED);
status_change_end(bl, SC_NEWMOON);
if(battle_check_target( src, bl, BCT_ENEMY ) > 0)
skill_attack(BF_MAGIC,src,src,bl,AL_RUWACH,1,tick,0);
}
if (tsc && tsc->data[SC__SHADOWFORM] && (sce && sce->val4 > 0 && sce->val4%2000 == 0) && // For every 2 seconds do the checking
rnd()%100 < 100 - tsc->data[SC__SHADOWFORM]->val1 * 10 ) { // [100 - (Skill Level x 10)] %
status_change_end(bl, SC__SHADOWFORM, INVALID_TIMER);
status_change_end(bl, SC__SHADOWFORM);
if (battle_check_target(src, bl, BCT_ENEMY) > 0)
skill_attack(BF_MAGIC, src, src, bl, status_db.getSkill(type), 1, tick, 0);
}
@ -14569,13 +14569,13 @@ int status_change_timer_sub(struct block_list* bl, va_list ap)
// Lock char has released the hold on everyone...
if (tsc && tsc->data[SC_CLOSECONFINE2] && tsc->data[SC_CLOSECONFINE2]->val2 == src->id) {
tsc->data[SC_CLOSECONFINE2]->val2 = 0;
status_change_end(bl, SC_CLOSECONFINE2, INVALID_TIMER);
status_change_end(bl, SC_CLOSECONFINE2);
}
break;
case SC_CURSEDCIRCLE_TARGET:
if( tsc && tsc->data[SC_CURSEDCIRCLE_TARGET] && tsc->data[SC_CURSEDCIRCLE_TARGET]->val2 == src->id ) {
clif_bladestop(bl, tsc->data[SC_CURSEDCIRCLE_TARGET]->val2, 0);
status_change_end(bl, type, INVALID_TIMER);
status_change_end(bl, type);
}
break;
}
@ -14624,7 +14624,7 @@ void status_change_clear_buffs(struct block_list* bl, uint8 type)
continue;
if (status == SC_SATURDAYNIGHTFEVER || status == SC_BERSERK) // Mark to not lose HP
sc->data[status]->val2 = 0;
status_change_end(bl, status, INVALID_TIMER);
status_change_end(bl, status);
}
//Removes bonus_script
@ -14988,7 +14988,7 @@ void status_change_clear_onChangeMap(struct block_list *bl, struct status_change
continue;
if (status_change_isDisabledOnMap_(type, mapIsVS, mapIsPVP, mapIsGVG, mapIsBG, mapdata->zone, mapIsTE))
status_change_end(bl, type, INVALID_TIMER);
status_change_end(bl, type);
}
}
}

View File

@ -3285,8 +3285,7 @@ static int sc_start2(block_list *src, block_list *bl, sc_type type, int32 rate,
static int sc_start4(block_list *src, block_list *bl, sc_type type, int32 rate, int32 val1, int32 val2, int32 val3, int32 val4, t_tick duration, int32 delay = 0) {
return status_change_start(src, bl, type, 100 * rate, val1, val2, val3, val4, duration, SCSTART_NONE, delay);
}
int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const char* file, int line);
#define status_change_end(bl,type,tid) status_change_end_(bl,type,tid,__FILE__,__LINE__)
int status_change_end(struct block_list* bl, enum sc_type type, int tid = INVALID_TIMER);
TIMER_FUNC(status_change_timer);
int status_change_timer_sub(struct block_list* bl, va_list ap);
int status_change_clear(struct block_list* bl, int type);

View File

@ -911,7 +911,7 @@ void unit_run_hit(struct block_list *bl, struct status_change *sc, struct map_se
// Set running to 0 beforehand so status_change_end knows not to enable spurt [Kevin]
unit_bl2ud(bl)->state.running = 0;
status_change_end(bl, type, INVALID_TIMER);
status_change_end(bl, type);
if (type == SC_RUN) {
skill_blown(bl, bl, skill_get_blewcount(TK_RUN, lv), unit_getdir(bl), BLOWN_NONE);
@ -943,7 +943,7 @@ bool unit_run(struct block_list *bl, struct map_session_data *sd, enum sc_type t
return false;
if (!unit_can_move(bl)) {
status_change_end(bl, type, INVALID_TIMER);
status_change_end(bl, type);
return false;
}
@ -1408,8 +1408,8 @@ int unit_stop_walking(struct block_list *bl,int type)
// Re-added, the check in unit_set_walkdelay means dmg during running won't fall through to this place in code [Kevin]
if (ud->state.running) {
status_change_end(bl, SC_RUN, INVALID_TIMER);
status_change_end(bl, SC_WUGDASH, INVALID_TIMER);
status_change_end(bl, SC_RUN);
status_change_end(bl, SC_WUGDASH);
}
return 1;
@ -2049,17 +2049,17 @@ int unit_skilluse_id2(struct block_list *src, int target_id, uint16 skill_id, ui
if( sc ) {
// These 3 status do not stack, so it's efficient to use if-else
if( sc->data[SC_CLOAKING] && !(sc->data[SC_CLOAKING]->val4&4) && skill_id != AS_CLOAKING && skill_id != SHC_SHADOW_STAB) {
status_change_end(src, SC_CLOAKING, INVALID_TIMER);
status_change_end(src, SC_CLOAKING);
if (!src->prev)
return 0; // Warped away!
} else if( sc->data[SC_CLOAKINGEXCEED] && !(sc->data[SC_CLOAKINGEXCEED]->val4&4) && skill_id != GC_CLOAKINGEXCEED && skill_id != SHC_SHADOW_STAB) {
status_change_end(src,SC_CLOAKINGEXCEED, INVALID_TIMER);
status_change_end(src,SC_CLOAKINGEXCEED);
if (!src->prev)
return 0;
} else if (sc->data[SC_NEWMOON] && skill_id != SJ_NEWMOONKICK) {
status_change_end(src, SC_NEWMOON, INVALID_TIMER);
status_change_end(src, SC_NEWMOON);
if (!src->prev)
return 0; // Warped away!
}
@ -2231,17 +2231,17 @@ int unit_skilluse_pos2( struct block_list *src, short skill_x, short skill_y, ui
if( sc ) {
// These 3 status do not stack, so it's efficient to use if-else
if (sc->data[SC_CLOAKING] && !(sc->data[SC_CLOAKING]->val4&4)) {
status_change_end(src, SC_CLOAKING, INVALID_TIMER);
status_change_end(src, SC_CLOAKING);
if (!src->prev)
return 0; // Warped away!
} else if (sc->data[SC_CLOAKINGEXCEED] && !(sc->data[SC_CLOAKINGEXCEED]->val4&4)) {
status_change_end(src, SC_CLOAKINGEXCEED, INVALID_TIMER);
status_change_end(src, SC_CLOAKINGEXCEED);
if (!src->prev)
return 0;
} else if (sc->data[SC_NEWMOON]) {
status_change_end(src, SC_NEWMOON, INVALID_TIMER);
status_change_end(src, SC_NEWMOON);
if (!src->prev)
return 0;
@ -2475,7 +2475,7 @@ int unit_cancel_combo(struct block_list *bl)
{
struct unit_data *ud;
if (!status_change_end(bl, SC_COMBO, INVALID_TIMER))
if (!status_change_end(bl, SC_COMBO))
return 0; // Combo wasn't active.
ud = unit_bl2ud(bl);
@ -3065,13 +3065,13 @@ int unit_remove_map_(struct block_list *bl, clr_type clrtype, const char* file,
// Ensure the bl is a PC; if so, we'll handle the removal of cloaking and cloaking exceed later
if ( bl->type != BL_PC ) {
status_change_end(bl, SC_CLOAKING, INVALID_TIMER);
status_change_end(bl, SC_CLOAKINGEXCEED, INVALID_TIMER);
status_change_end(bl, SC_CLOAKING);
status_change_end(bl, SC_CLOAKINGEXCEED);
}
if (sc->data[SC_GOSPEL] && sc->data[SC_GOSPEL]->val4 == BCT_SELF)
status_change_end(bl, SC_GOSPEL, INVALID_TIMER);
status_change_end(bl, SC_GOSPEL);
if (sc->data[SC_PROVOKE] && sc->data[SC_PROVOKE]->val4 == 1)
status_change_end(bl, SC_PROVOKE, INVALID_TIMER); //End infinite provoke to prevent exploit
status_change_end(bl, SC_PROVOKE); //End infinite provoke to prevent exploit
}
switch( bl->type ) {
@ -3082,7 +3082,7 @@ int unit_remove_map_(struct block_list *bl, clr_type clrtype, const char* file,
struct block_list *d_bl = map_id2bl(sd->shadowform_id);
if( d_bl )
status_change_end(d_bl,SC__SHADOWFORM,INVALID_TIMER);
status_change_end(d_bl,SC__SHADOWFORM);
}
// Leave/reject all invitations.
@ -3122,8 +3122,8 @@ int unit_remove_map_(struct block_list *bl, clr_type clrtype, const char* file,
// Check if warping and not changing the map.
if ( sd->state.warping && !sd->state.changemap ) {
status_change_end(bl, SC_CLOAKING, INVALID_TIMER);
status_change_end(bl, SC_CLOAKINGEXCEED, INVALID_TIMER);
status_change_end(bl, SC_CLOAKING);
status_change_end(bl, SC_CLOAKINGEXCEED);
}
sd->npc_shopid = 0;
@ -3552,7 +3552,7 @@ int unit_free(struct block_list *bl, clr_type clrtype)
sd->status.hom_id = 0;
#ifdef RENEWAL
status_change_end(&sd->bl, SC_HOMUN_TIME, INVALID_TIMER);
status_change_end(&sd->bl, SC_HOMUN_TIME);
#endif
}