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:
parent
a03644fc53
commit
b1b371f4b8
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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 )
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user