diff --git a/src/map/atcommand.cpp b/src/map/atcommand.cpp index 95815f2136..4b4f9db1a4 100644 --- a/src/map/atcommand.cpp +++ b/src/map/atcommand.cpp @@ -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; } } diff --git a/src/map/battle.cpp b/src/map/battle.cpp index 69c26d4bc9..67d5eea665 100644 --- a/src/map/battle.cpp +++ b/src/map/battle.cpp @@ -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(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(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); } } diff --git a/src/map/clif.cpp b/src/map/clif.cpp index 61924a564f..8aee68d9de 100644 --- a/src/map/clif.cpp +++ b/src/map/clif.cpp @@ -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); } diff --git a/src/map/guild.cpp b/src/map/guild.cpp index 1c6788d114..a2444a2aa6 100644 --- a/src/map/guild.cpp +++ b/src/map/guild.cpp @@ -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 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); } } diff --git a/src/map/homunculus.cpp b/src/map/homunculus.cpp index 0785c103d5..3901c3c0c5 100644 --- a/src/map/homunculus.cpp +++ b/src/map/homunculus.cpp @@ -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); diff --git a/src/map/map.cpp b/src/map/map.cpp index 22792ee543..f48f1aa1b4 100644 --- a/src/map/map.cpp +++ b/src/map/map.cpp @@ -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(it.first), INVALID_TIMER); + status_change_end(&sd->bl, static_cast(it.first)); continue; } //Status that are not saved if (flag[SCF_NOSAVE]) { - status_change_end(&sd->bl, static_cast(it.first), INVALID_TIMER); + status_change_end(&sd->bl, static_cast(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(it.first), INVALID_TIMER); + status_change_end(&sd->bl, static_cast(it.first)); continue; } } diff --git a/src/map/mercenary.cpp b/src/map/mercenary.cpp index 1382f64d4e..9f0939e82c 100644 --- a/src/map/mercenary.cpp +++ b/src/map/mercenary.cpp @@ -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 ) diff --git a/src/map/mob.cpp b/src/map/mob.cpp index 6b876e7d09..57705bf185 100644 --- a/src/map/mob.cpp +++ b/src/map/mob.cpp @@ -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); diff --git a/src/map/pc.cpp b/src/map/pc.cpp index 11b4ec263a..038257a0bb 100755 --- a/src/map/pc.cpp +++ b/src/map/pc.cpp @@ -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(it.first), INVALID_TIMER); + status_change_end(&sd->bl, static_cast(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); diff --git a/src/map/pet.cpp b/src/map/pet.cpp index b81457c2f9..457e6a09b7 100644 --- a/src/map/pet.cpp +++ b/src/map/pet.cpp @@ -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); } diff --git a/src/map/script.cpp b/src/map/script.cpp index b27dbfa71f..4f8c06a934 100644 --- a/src/map/script.cpp +++ b/src/map/script.cpp @@ -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) diff --git a/src/map/skill.cpp b/src/map/skill.cpp index 48c0056b83..b483733928 100755 --- a/src/map/skill.cpp +++ b/src/map/skill.cpp @@ -1251,7 +1251,7 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1 rate = 20; if (sc->data[SC_SKILLRATE_UP] && sc->data[SC_SKILLRATE_UP]->val1 == TK_COUNTER) { rate += rate*sc->data[SC_SKILLRATE_UP]->val2 / 100; - status_change_end(src, SC_SKILLRATE_UP, INVALID_TIMER); + status_change_end(src, SC_SKILLRATE_UP); } sc_start4(src, src, SC_COMBO, rate, TK_COUNTER, 0, 2, 0, @@ -1485,7 +1485,7 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1 break; case WZ_HEAVENDRIVE: - status_change_end(bl, SC_SV_ROOTTWIST, INVALID_TIMER); + status_change_end(bl, SC_SV_ROOTTWIST); break; case HT_FREEZINGTRAP: @@ -1731,19 +1731,19 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1 case TK_JUMPKICK: // debuff the following statuses if( dstsd && dstsd->class_ != MAPID_SOUL_LINKER && !tsc->data[SC_PRESERVE] ) { - status_change_end(bl, SC_SPIRIT, INVALID_TIMER); - status_change_end(bl, SC_ADRENALINE2, INVALID_TIMER); - status_change_end(bl, SC_KAITE, INVALID_TIMER); - status_change_end(bl, SC_KAAHI, INVALID_TIMER); - status_change_end(bl, SC_ONEHAND, INVALID_TIMER); - status_change_end(bl, SC_ASPDPOTION2, INVALID_TIMER); + status_change_end(bl, SC_SPIRIT); + status_change_end(bl, SC_ADRENALINE2); + status_change_end(bl, SC_KAITE); + status_change_end(bl, SC_KAAHI); + status_change_end(bl, SC_ONEHAND); + status_change_end(bl, SC_ASPDPOTION2); // New soul links confirmed to not dispell with this skill // but thats likely a bug since soul links can't stack and // soul cutter skill works on them. So ill add this here for now. [Rytech] - status_change_end(bl, SC_SOULGOLEM, INVALID_TIMER); - status_change_end(bl, SC_SOULSHADOW, INVALID_TIMER); - status_change_end(bl, SC_SOULFALCON, INVALID_TIMER); - status_change_end(bl, SC_SOULFAIRY, INVALID_TIMER); + status_change_end(bl, SC_SOULGOLEM); + status_change_end(bl, SC_SOULSHADOW); + status_change_end(bl, SC_SOULFALCON); + status_change_end(bl, SC_SOULFAIRY); } break; case TK_TURNKICK: @@ -1823,17 +1823,17 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1 break; case NC_PILEBUNKER: if( rnd()%100 < 25 + 15*skill_lv ) { - status_change_end(bl, SC_KYRIE, INVALID_TIMER); - status_change_end(bl, SC_ASSUMPTIO, INVALID_TIMER); - status_change_end(bl, SC_STEELBODY, INVALID_TIMER); - status_change_end(bl, SC_GT_CHANGE, INVALID_TIMER); - status_change_end(bl, SC_GT_REVITALIZE, INVALID_TIMER); - status_change_end(bl, SC_AUTOGUARD, INVALID_TIMER); - status_change_end(bl, SC_REFLECTDAMAGE, INVALID_TIMER); - status_change_end(bl, SC_DEFENDER, INVALID_TIMER); - status_change_end(bl, SC_PRESTIGE, INVALID_TIMER); - status_change_end(bl, SC_BANDING, INVALID_TIMER); - status_change_end(bl, SC_MILLENNIUMSHIELD, INVALID_TIMER); + status_change_end(bl, SC_KYRIE); + status_change_end(bl, SC_ASSUMPTIO); + status_change_end(bl, SC_STEELBODY); + status_change_end(bl, SC_GT_CHANGE); + status_change_end(bl, SC_GT_REVITALIZE); + status_change_end(bl, SC_AUTOGUARD); + status_change_end(bl, SC_REFLECTDAMAGE); + status_change_end(bl, SC_DEFENDER); + status_change_end(bl, SC_PRESTIGE); + status_change_end(bl, SC_BANDING); + status_change_end(bl, SC_MILLENNIUMSHIELD); } break; case NC_FLAMELAUNCHER: @@ -1905,7 +1905,7 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1 case SR_EARTHSHAKER: sc_start(src,bl,SC_STUN, 25 + 5 * skill_lv,skill_lv,skill_get_time(skill_id,skill_lv)); sc_start(src, bl, SC_EARTHSHAKER, 100, skill_lv, skill_get_time2(skill_id, skill_lv)); - status_change_end(bl, SC_SV_ROOTTWIST, INVALID_TIMER); + status_change_end(bl, SC_SV_ROOTTWIST); break; case SO_EARTHGRAVE: sc_start2(src,bl, SC_BLEEDING, 5 * skill_lv, skill_lv, src->id, skill_get_time2(skill_id, skill_lv)); // Need official rate. [LimitLine] @@ -1972,11 +1972,11 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1 break; case SP_SOULEXPLOSION: case KO_SETSUDAN: // Remove soul link when hit. - status_change_end(bl, SC_SPIRIT, INVALID_TIMER); - status_change_end(bl, SC_SOULGOLEM, INVALID_TIMER); - status_change_end(bl, SC_SOULSHADOW, INVALID_TIMER); - status_change_end(bl, SC_SOULFALCON, INVALID_TIMER); - status_change_end(bl, SC_SOULFAIRY, INVALID_TIMER); + status_change_end(bl, SC_SPIRIT); + status_change_end(bl, SC_SOULGOLEM); + status_change_end(bl, SC_SOULSHADOW); + status_change_end(bl, SC_SOULFALCON); + status_change_end(bl, SC_SOULFAIRY); break; case KO_MAKIBISHI: sc_start(src,bl, SC_STUN, 10 * skill_lv, skill_lv, skill_get_time2(skill_id,skill_lv)); @@ -1987,7 +1987,7 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1 if (hd) { sc_start2(src, bl, SC_STUN, 100, skill_lv, bl->id, 1000 * hd->homunculus.level / 50 + 500 * skill_lv); - status_change_end(bl, SC_TINDER_BREAKER2, INVALID_TIMER); + status_change_end(bl, SC_TINDER_BREAKER2); } } break; @@ -2058,7 +2058,7 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1 } if( status == SC_BERSERK || status == SC_SATURDAYNIGHTFEVER ) tsc->data[status]->val2 = 0; - status_change_end(bl,status,INVALID_TIMER); + status_change_end(bl,status); n--; } //Remove bonus_script by Banishing Buster @@ -2095,7 +2095,7 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1 sc_start(src, bl, SC_SILENCE, 50 + 10 * skill_lv, skill_lv, skill_get_time(skill_id, skill_lv)); break; case SP_CURSEEXPLOSION: - status_change_end(bl, SC_SOULCURSE, INVALID_TIMER); + status_change_end(bl, SC_SOULCURSE); break; case SP_SHA: sc_start(src, bl, SC_SP_SHA, 100, skill_lv, skill_get_time(skill_id, skill_lv)); @@ -2124,7 +2124,7 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1 case IQ_THIRD_PUNISH: case IQ_THIRD_FLAME_BOMB: case IQ_THIRD_CONSECRATION: - status_change_end(bl, SC_SECOND_BRAND, INVALID_TIMER); + status_change_end(bl, SC_SECOND_BRAND); break; case CD_ARBITRIUM:// Target is Deep Silenced by chance and is then dealt a 2nd splash hit. sc_start(src, bl, SC_HANDICAPSTATE_DEEPSILENCE, 20 + 5 * skill_lv, skill_lv, skill_get_time(skill_id, skill_lv)); @@ -2157,7 +2157,7 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1 case WM_REVERBERATION: case TR_RHYTHMSHOOTING: case TR_METALIC_FURY: - status_change_end(bl, SC_SOUNDBLEND, INVALID_TIMER); + status_change_end(bl, SC_SOUNDBLEND); break; case EM_DIAMOND_STORM: sc_start(src, bl, SC_HANDICAPSTATE_FROSTBITE, 40 + 10 * skill_lv, skill_lv, skill_get_time2(skill_id, skill_lv)); @@ -3022,11 +3022,11 @@ short skill_blown(struct block_list* src, struct block_list* target, char count, if (tsc) { if (tsc->data[SC_SU_STOOP]) // Any knockback will cancel it. - status_change_end(target, SC_SU_STOOP, INVALID_TIMER); + status_change_end(target, SC_SU_STOOP); if (tsc->data[SC_ROLLINGCUTTER]) - status_change_end(target, SC_ROLLINGCUTTER, INVALID_TIMER); + status_change_end(target, SC_ROLLINGCUTTER); if (tsc->data[SC_CRESCIVEBOLT]) - status_change_end(target, SC_CRESCIVEBOLT, INVALID_TIMER); + status_change_end(target, SC_CRESCIVEBOLT); if (tsc->data[SC_SV_ROOTTWIST]) // Shouldn't move. return 0; } @@ -3075,7 +3075,7 @@ static int skill_magic_reflect(struct block_list* src, struct block_list* bl, in // Kyomu doesn't disable Kaite, but the "skill fail chance" part of Kyomu applies to it. clif_specialeffect(bl, EF_ATTACKENERGY2, AREA); if( --sc->data[SC_KAITE]->val2 <= 0 ) - status_change_end(bl, SC_KAITE, INVALID_TIMER); + status_change_end(bl, SC_KAITE); return 2; } @@ -3184,7 +3184,7 @@ void skill_combo(struct block_list* src,struct block_list *dsrc, struct block_li break; default: if( src == dsrc ) // Ground skills are exceptions. [Inkfish] - status_change_end(src, SC_COMBO, INVALID_TIMER); + status_change_end(src, SC_COMBO); } } @@ -3576,7 +3576,7 @@ int64 skill_attack (int attack_type, struct block_list* src, struct block_list * 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); //Reduction: 6% + 6% every 20% dmg.damage -= dmg.damage * (6 * (1+per)) / 100; } @@ -3678,7 +3678,7 @@ int64 skill_attack (int attack_type, struct block_list* src, struct block_list * sc_start(src, src, SC_CHARGINGPIERCE_COUNT, 100, sc->data[SC_CHARGINGPIERCE_COUNT]->val1 + 1, skill_get_time2(DK_CHARGINGPIERCE, 1)); else { // If charge count is 10, bonus damage is applied for 1 attack and then the count status ends. clif_specialeffect(bl, 1767, AREA); - status_change_end(src, SC_CHARGINGPIERCE_COUNT, INVALID_TIMER); + status_change_end(src, SC_CHARGINGPIERCE_COUNT); } } else // No count status detected? Start charge count at 1. sc_start(src, src, SC_CHARGINGPIERCE_COUNT, 100, 1, skill_get_time2(DK_CHARGINGPIERCE, 1)); @@ -3938,7 +3938,7 @@ int64 skill_attack (int attack_type, struct block_list* src, struct block_list * status_fix_damage(bl, (!isDevotRdamage) ? bl : d_bl, devotion_damage, 0, 0); } } else { - status_change_end(bl, SC_DEVOTION, INVALID_TIMER); + status_change_end(bl, SC_DEVOTION); if (!dmg.amotion) status_fix_damage(src, bl, damage, dmg.dmotion, 0); } @@ -3994,7 +3994,7 @@ int64 skill_attack (int attack_type, struct block_list* src, struct block_list * struct status_change *ssc = status_get_sc(src); if( ssc && ssc->data[SC_POISONINGWEAPON] && rnd()%100 < 70 + 5*skill_lv ) { sc_start4(src, bl, (sc_type)ssc->data[SC_POISONINGWEAPON]->val2, 100, ssc->data[SC_POISONINGWEAPON]->val1, 0, 1, 0, skill_get_time2(GC_POISONINGWEAPON, 1)); - status_change_end(src,SC_POISONINGWEAPON,INVALID_TIMER); + status_change_end(src,SC_POISONINGWEAPON); clif_skill_nodamage(src,bl,skill_id,skill_lv,1); } } @@ -4946,7 +4946,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint { //GTB makes all targetted magic display miss with a single bolt. sc_type sct = skill_get_sc(skill_id); if(sct != SC_NONE) - status_change_end(bl, sct, INVALID_TIMER); + status_change_end(bl, sct); clif_skill_damage(src, bl, tick, status_get_amotion(src), status_get_dmotion(bl), 0, 1, skill_id, skill_lv, skill_get_hit(skill_id)); return 1; } @@ -5129,8 +5129,8 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint if (sc && (sc->data[SC_CLOAKING] || sc->data[SC_CLOAKINGEXCEED])) flag |= 2;// Flag to deal 2 hits. - status_change_end(src, SC_CLOAKING, INVALID_TIMER); - status_change_end(src, SC_CLOAKINGEXCEED, INVALID_TIMER); + status_change_end(src, SC_CLOAKING); + status_change_end(src, SC_CLOAKINGEXCEED); clif_skill_nodamage(src, bl, skill_id, skill_lv, 1); skill_attack(BF_WEAPON, src, src, bl, skill_id, skill_lv, tick, flag); @@ -5280,7 +5280,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint case MO_INVESTIGATE: skill_attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag); - status_change_end(src, SC_BLADESTOP, INVALID_TIMER); + status_change_end(src, SC_BLADESTOP); break; case RG_BACKSTAP: @@ -5310,7 +5310,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint if (!map_check_dir(dir, t_dir) || bl->type == BL_SKILL) { #endif - status_change_end(src, SC_HIDING, INVALID_TIMER); + status_change_end(src, SC_HIDING); dir = dir < 4 ? dir+4 : dir-4; // change direction [Celest] unit_setdir(bl,dir); #ifdef RENEWAL @@ -5330,12 +5330,12 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint for (int i = 1; i < sd->spiritball_old; i++) skill_addtimerskill(src, tick + i * 200, bl->id, 0, 0, skill_id, skill_lv, BF_WEAPON, flag); } - status_change_end(src, SC_BLADESTOP, INVALID_TIMER); + status_change_end(src, SC_BLADESTOP); break; case MO_CHAINCOMBO: skill_attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag); - status_change_end(src, SC_BLADESTOP, INVALID_TIMER); + status_change_end(src, SC_BLADESTOP); break; #ifndef RENEWAL @@ -5354,15 +5354,15 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint skill_attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag); if (skill_id == MO_EXTREMITYFIST) { status_set_sp(src, 0, 0); - status_change_end(src, SC_EXPLOSIONSPIRITS, INVALID_TIMER); - status_change_end(src, SC_BLADESTOP, INVALID_TIMER); + status_change_end(src, SC_EXPLOSIONSPIRITS); + status_change_end(src, SC_BLADESTOP); #ifdef RENEWAL sc_start(src,src,SC_EXTREMITYFIST2,100,skill_lv,skill_get_time(skill_id,skill_lv)); #endif } else { status_set_hp(src, 1, 0); - status_change_end(src, SC_NEN, INVALID_TIMER); - status_change_end(src, SC_HIDING, INVALID_TIMER); + status_change_end(src, SC_NEN); + status_change_end(src, SC_HIDING); } if (skill_id == MO_EXTREMITYFIST) { mbl = src; // For MO_EXTREMITYFIST @@ -5579,7 +5579,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint break; #ifdef RENEWAL case SN_SHARPSHOOTING: - status_change_end(src, SC_CAMOUFLAGE, INVALID_TIMER); + status_change_end(src, SC_CAMOUFLAGE); break; #endif case SJ_PROMINENCEKICK: // Trigger the 2nd hit. (100% fire damage.) @@ -5600,7 +5600,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint } if (skill_id == SP_SWHOO) - status_change_end(src, SC_USE_SKILL_SP_SPA, INVALID_TIMER); + status_change_end(src, SC_USE_SKILL_SP_SPA); switch ( skill_id ) { case LG_EARTHDRIVE: @@ -5710,7 +5710,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint map_foreachinrange(skill_area_sub, bl, splash_size, starget, src, skill_id, skill_lv, tick, flag|BCT_ENEMY|SD_SPLASH|1, skill_castend_damage_id); if (skill_id == RA_ARROWSTORM) - status_change_end(src, SC_CAMOUFLAGE, INVALID_TIMER); + status_change_end(src, SC_CAMOUFLAGE); if( skill_id == AS_SPLASHER ) { map_freeblock_unlock(); // Don't consume a second gemstone. return 0; @@ -5900,7 +5900,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint break; case AL_HOLYLIGHT: - status_change_end(bl, SC_P_ALTER, INVALID_TIMER); + status_change_end(bl, SC_P_ALTER); case MG_SOULSTRIKE: case NPC_DARKSTRIKE: case MG_COLDBOLT: @@ -5984,7 +5984,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint // We can end Dimension here since the cooldown code is processed before this point. if (sc && sc->data[SC_DIMENSION]) - status_change_end(src, SC_DIMENSION, INVALID_TIMER); + status_change_end(src, SC_DIMENSION); else // Dimension not active? Activate the 2 second skill block penalty. sc_start(src, &sd->bl, SC_NOVAEXPLOSING, 100, skill_lv, skill_get_time(skill_id, skill_lv)); break; @@ -6002,7 +6002,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint break; case SL_SMA: - status_change_end(src, SC_SMA, INVALID_TIMER); + status_change_end(src, SC_SMA); case SL_STIN: case SL_STUN: case SP_SPA: @@ -6056,8 +6056,8 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint } skill_attack(BF_MISC, src, src, bl, skill_id, skill_lv, tick, flag); status_set_hp(src, umax(status_get_max_hp(src) / 100, 1), 0); - status_change_end(src, SC_NEN, INVALID_TIMER); - status_change_end(src, SC_HIDING, INVALID_TIMER); + status_change_end(src, SC_NEN); + status_change_end(src, SC_HIDING); } break; #endif @@ -6123,7 +6123,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint clif_blown(src); } } - status_change_end(src, SC_HIDING, INVALID_TIMER); + status_change_end(src, SC_HIDING); skill_attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag); break; case RK_PHANTOMTHRUST: @@ -6187,11 +6187,11 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint case GC_PHANTOMMENACE: if (flag&1) { // Only Hits Invisible Targets if(tsc && (tsc->option&(OPTION_HIDE|OPTION_CLOAK|OPTION_CHASEWALK) || tsc->data[SC_CAMOUFLAGE] || tsc->data[SC_STEALTHFIELD])) { - status_change_end(bl, SC_CLOAKINGEXCEED, INVALID_TIMER); + status_change_end(bl, SC_CLOAKINGEXCEED); skill_attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag); } if (tsc && tsc->data[SC__SHADOWFORM] && rnd() % 100 < 100 - tsc->data[SC__SHADOWFORM]->val1 * 10) // [100 - (Skill Level x 10)] % - status_change_end(bl, SC__SHADOWFORM, INVALID_TIMER); // Should only end, no damage dealt. + status_change_end(bl, SC__SHADOWFORM); // Should only end, no damage dealt. } break; @@ -6246,7 +6246,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint int i, k = 0; if (sc->data[SC_SPHERE_5]) // If 5 spheres, remove last one (based on reverse order) and only do 4 actions (Official behavior) - status_change_end(src, SC_SPHERE_1, INVALID_TIMER); + status_change_end(src, SC_SPHERE_1); for (i = SC_SPHERE_5; i >= SC_SPHERE_1; i--) { // Loop should always be 4 for regular players, but unconditional_skill could be less if (sc->data[static_cast(i)] == nullptr) @@ -6279,7 +6279,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint map_foreachinallrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), BL_CHAR, src, subskill, skill_lv, tick, flag | BCT_ENEMY, skill_castend_damage_id); } else skill_addtimerskill(src, tick + abs(i - SC_SPHERE_5) * 200, bl->id, k, 0, subskill, skill_lv, abs(i - SC_SPHERE_5), flag); - status_change_end(src, static_cast(i), INVALID_TIMER); + status_change_end(src, static_cast(i)); } } break; @@ -6314,12 +6314,12 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint uint16 pres_skill_lv = sc->data[i]->val2; uint16 point = sc->data[i]->val3; - status_change_end(src, static_cast(i), INVALID_TIMER); + status_change_end(src, static_cast(i)); if( sc->data[SC_FREEZE_SP]->val2 > point ) sc->data[SC_FREEZE_SP]->val2 -= point; else // Last spell to be released - status_change_end(src, SC_FREEZE_SP, INVALID_TIMER); + status_change_end(src, SC_FREEZE_SP); if( !skill_check_condition_castbegin(sd, pres_skill_id, pres_skill_lv) ) break; @@ -6356,7 +6356,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint // WL_SUMMON_ATK_FIRE, WL_SUMMON_ATK_WIND, WL_SUMMON_ATK_WATER, WL_SUMMON_ATK_GROUND skill_addtimerskill(src, tick + (t_tick)status_get_adelay(src) * abs(i - SC_SPHERE_1), bl->id, 0, 0, skele, sc->data[static_cast(i)]->val2, BF_MAGIC, flag | SD_LEVEL); - status_change_end(src, static_cast(i), INVALID_TIMER); // Eliminate ball + status_change_end(src, static_cast(i)); // Eliminate ball } clif_skill_nodamage(src, bl, skill_id, 0, 1); } @@ -6402,11 +6402,11 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint case RA_SENSITIVEKEEN: if( bl->type != BL_SKILL ) { // Only Hits Invisible Targets if (tsc && ((tsc->option&(OPTION_HIDE|OPTION_CLOAK|OPTION_CHASEWALK)) || tsc->data[SC_CAMOUFLAGE] || tsc->data[SC_STEALTHFIELD])) { - status_change_end(bl, SC_CLOAKINGEXCEED, INVALID_TIMER); + status_change_end(bl, SC_CLOAKINGEXCEED); skill_attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag); } if (tsc && tsc->data[SC__SHADOWFORM] && rnd() % 100 < 100 - tsc->data[SC__SHADOWFORM]->val1 * 10) // [100 - (Skill Level x 10)] % - status_change_end(bl, SC__SHADOWFORM, INVALID_TIMER); // Should only end, no damage dealt. + status_change_end(bl, SC__SHADOWFORM); // Should only end, no damage dealt. } else { skill_unit *su = BL_CAST(BL_SKILL, bl); std::shared_ptr sg; @@ -6427,13 +6427,13 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint break; case NC_INFRAREDSCAN: if( flag&1 ) { - 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] && 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); sc_start(src,bl, SC_INFRAREDSCAN, 10000, skill_lv, skill_get_time(skill_id, skill_lv)); } else { clif_skill_damage(src,bl,tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE); @@ -6480,34 +6480,34 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint break; case SR_HOWLINGOFLION: - status_change_end(bl, SC_SWINGDANCE, INVALID_TIMER); - status_change_end(bl, SC_SYMPHONYOFLOVER, INVALID_TIMER); - status_change_end(bl, SC_MOONLITSERENADE, INVALID_TIMER); - status_change_end(bl, SC_RUSHWINDMILL, INVALID_TIMER); - status_change_end(bl, SC_ECHOSONG, INVALID_TIMER); - status_change_end(bl, SC_HARMONIZE, INVALID_TIMER); - status_change_end(bl, SC_NETHERWORLD, INVALID_TIMER); - status_change_end(bl, SC_VOICEOFSIREN, INVALID_TIMER); - status_change_end(bl, SC_DEEPSLEEP, INVALID_TIMER); - status_change_end(bl, SC_SIRCLEOFNATURE, INVALID_TIMER); - status_change_end(bl, SC_GLOOMYDAY, INVALID_TIMER); - status_change_end(bl, SC_GLOOMYDAY_SK, INVALID_TIMER); - status_change_end(bl, SC_SONGOFMANA, INVALID_TIMER); - status_change_end(bl, SC_DANCEWITHWUG, INVALID_TIMER); - status_change_end(bl, SC_SATURDAYNIGHTFEVER, INVALID_TIMER); - status_change_end(bl, SC_LERADSDEW, INVALID_TIMER); - status_change_end(bl, SC_MELODYOFSINK, INVALID_TIMER); - status_change_end(bl, SC_BEYONDOFWARCRY, INVALID_TIMER); - status_change_end(bl, SC_UNLIMITEDHUMMINGVOICE, INVALID_TIMER); + status_change_end(bl, SC_SWINGDANCE); + status_change_end(bl, SC_SYMPHONYOFLOVER); + status_change_end(bl, SC_MOONLITSERENADE); + status_change_end(bl, SC_RUSHWINDMILL); + status_change_end(bl, SC_ECHOSONG); + status_change_end(bl, SC_HARMONIZE); + status_change_end(bl, SC_NETHERWORLD); + status_change_end(bl, SC_VOICEOFSIREN); + status_change_end(bl, SC_DEEPSLEEP); + status_change_end(bl, SC_SIRCLEOFNATURE); + status_change_end(bl, SC_GLOOMYDAY); + status_change_end(bl, SC_GLOOMYDAY_SK); + status_change_end(bl, SC_SONGOFMANA); + status_change_end(bl, SC_DANCEWITHWUG); + status_change_end(bl, SC_SATURDAYNIGHTFEVER); + status_change_end(bl, SC_LERADSDEW); + status_change_end(bl, SC_MELODYOFSINK); + status_change_end(bl, SC_BEYONDOFWARCRY); + status_change_end(bl, SC_UNLIMITEDHUMMINGVOICE); skill_attack(BF_WEAPON, src, src, bl, skill_id, skill_lv, tick, flag|SD_ANIMATION); break; case SR_EARTHSHAKER: if( flag&1 ) { //by default cloaking skills are remove by aoe skills so no more checking/removing except hiding and cloaking exceed. skill_attack(BF_WEAPON, src, src, bl, skill_id, skill_lv, tick, flag); - status_change_end(bl, SC_CLOAKINGEXCEED, INVALID_TIMER); + status_change_end(bl, SC_CLOAKINGEXCEED); if (tsc && tsc->data[SC__SHADOWFORM] && 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); } else { map_foreachinrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), BL_CHAR|BL_SKILL, src, skill_id, skill_lv, tick, flag|BCT_ENEMY|SD_SPLASH|1, skill_castend_damage_id); clif_skill_damage(src, src, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE); @@ -6537,7 +6537,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint case NPC_POISON_BUSTER: if( tsc && tsc->data[SC_POISON] ) { skill_attack(skill_get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, flag); - status_change_end(bl, SC_POISON, INVALID_TIMER); + status_change_end(bl, SC_POISON); } else if( sd ) clif_skill_fail(sd, skill_id, USESKILL_FAIL_LEVEL, 0); @@ -6625,8 +6625,8 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint clif_skill_nodamage(src,battle_get_master(src),skill_id,skill_lv,1); clif_skill_damage(src, src, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE); if( (tsc_ele && tsc_ele->data[type2]) || (tsc && tsc->data[type]) ) { - status_change_end(battle_get_master(src),type,INVALID_TIMER); - status_change_end(src,type2,INVALID_TIMER); + status_change_end(battle_get_master(src),type); + status_change_end(src,type2); } if( rnd()%100 < 50 ) skill_attack(skill_get_type(skill_id),src,src,bl,skill_id,skill_lv,tick,flag); @@ -6697,7 +6697,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint src, skill_id, skill_lv, tick, flag|BCT_ENEMY|1, skill_castend_damage_id); flag |= 1; // Don't consume requirement tsc->data[SC_H_MINE]->val3 = 1; // Mark the SC end because not expired - status_change_end(bl, SC_H_MINE, INVALID_TIMER); + status_change_end(bl, SC_H_MINE); sc_start4(src, bl, SC_BURNING, 10 * skill_lv, skill_lv, 1000, src->id, 0, skill_get_time2(skill_id,skill_lv)); } } @@ -6848,7 +6848,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint } if( sc && sc->data[SC_CURSEDCIRCLE_ATKER] ) //Should only remove after the skill has been casted. - status_change_end(src,SC_CURSEDCIRCLE_ATKER,INVALID_TIMER); + status_change_end(src,SC_CURSEDCIRCLE_ATKER); map_freeblock_unlock(); @@ -7080,7 +7080,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui if( tsc && tsc->count ) { if( tsc->data[SC_KAITE] && !status_has_mode(sstatus,MD_STATUSIMMUNE) ) { //Bounce back heal if (--tsc->data[SC_KAITE]->val2 <= 0) - status_change_end(bl, SC_KAITE, INVALID_TIMER); + status_change_end(bl, SC_KAITE); if (src == bl) heal=0; //When you try to heal yourself under Kaite, the heal is voided. else { @@ -7092,7 +7092,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui heal = 0; //Needed so that it actually displays 0 when healing. } if (skill_id == AL_HEAL) - status_change_end(bl, SC_BITESCAR, INVALID_TIMER); + status_change_end(bl, SC_BITESCAR); clif_skill_nodamage (src, bl, skill_id, heal, 1); if( tsc && tsc->data[SC_AKAITSUKI] && heal && skill_id != HLIF_HEAL ) heal = ~heal + 1; @@ -7231,7 +7231,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui case PR_LEXDIVINA: case MER_LEXDIVINA: if (tsce) - status_change_end(bl, type, INVALID_TIMER); + status_change_end(bl, type); else skill_addtimerskill(src, tick+1000, bl->id, 0, 0, skill_id, skill_lv, 100, flag); clif_skill_nodamage (src, bl, skill_id, skill_lv, 1); @@ -7355,9 +7355,9 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui if( tsc && status_has_mode(&dstmd->status,MD_STATUSIMMUNE) ) { const enum sc_type scs[] = { SC_QUAGMIRE, SC_PROVOKE, SC_ROKISWEIL, SC_GRAVITATION, SC_SUITON, SC_STRIPWEAPON, SC_STRIPSHIELD, SC_STRIPARMOR, SC_STRIPHELM, SC_BLADESTOP }; for (i = SC_COMMON_MIN; i <= SC_COMMON_MAX; i++) - if (tsc->data[i]) status_change_end(bl, (sc_type)i, INVALID_TIMER); + if (tsc->data[i]) status_change_end(bl, (sc_type)i); for (i = 0; i < ARRAYLENGTH(scs); i++) - if (tsc->data[scs[i]]) status_change_end(bl, scs[i], INVALID_TIMER); + if (tsc->data[scs[i]]) status_change_end(bl, scs[i]); } } break; @@ -7420,8 +7420,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui if( sc->data[SC_MARIONETTE ] && sc->data[SC_MARIONETTE ]->val1 == bl->id && tsc->data[SC_MARIONETTE2] && tsc->data[SC_MARIONETTE2]->val1 == src->id ) { - status_change_end(src, SC_MARIONETTE, INVALID_TIMER); - status_change_end(bl, SC_MARIONETTE2, INVALID_TIMER); + status_change_end(src, SC_MARIONETTE); + status_change_end(bl, SC_MARIONETTE2); } else { @@ -7876,10 +7876,10 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui clif_skill_nodamage(src,src,skill_id,skill_lv,sc_start(src,src,type,100,skill_lv,skill_get_time(skill_id,skill_lv))); // Homunc break; case NJ_BUNSINJYUTSU: - status_change_end(bl, SC_BUNSINJYUTSU, INVALID_TIMER); // on official recasting cancels existing mirror image [helvetica] + status_change_end(bl, SC_BUNSINJYUTSU); // on official recasting cancels existing mirror image [helvetica] clif_skill_nodamage(src,bl,skill_id,skill_lv, sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv))); - status_change_end(bl, SC_NEN, INVALID_TIMER); + status_change_end(bl, SC_NEN); break; /* Was modified to only affect targetted char. [Skotlex] case HP_ASSUMPTIO: @@ -8220,7 +8220,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui skill_get_splash(skill_id, skill_lv), BL_CHAR|BL_SKILL, src,skill_id,skill_lv,tick, flag|BCT_ENEMY|1, skill_castend_damage_id); - status_change_end(src, SC_HIDING, INVALID_TIMER); + status_change_end(src, SC_HIDING); break; //List of self skills that give damage around caster @@ -8261,7 +8261,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui starget = splash_target(src); if (skill_id == SJ_NEWMOONKICK) { if (tsce) { - status_change_end(bl, type, INVALID_TIMER); + status_change_end(bl, type); clif_skill_nodamage(src, bl, skill_id, skill_lv, 1); break; } else @@ -8274,7 +8274,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui sc_start2(src, bl, SC_DIMENSION1, 100, skill_lv, status_get_max_sp(src), skill_get_time2(SJ_BOOKOFDIMENSION, 1)); sc_start2(src, bl, SC_DIMENSION2, 100, skill_lv, status_get_max_sp(src), skill_get_time2(SJ_BOOKOFDIMENSION, 1)); } - status_change_end(src, SC_DIMENSION, INVALID_TIMER); + status_change_end(src, SC_DIMENSION); } if (skill_id == IQ_MASSIVE_F_BLASTER || skill_id == SHC_IMPACT_CRATER || skill_id == MT_AXE_STOMP || skill_id == ABC_ABYSS_DAGGER) sc_start(src, bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv)); @@ -8412,7 +8412,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui case WZ_SIGHTRASHER: //Passive side of the attack. - status_change_end(src, SC_SIGHT, INVALID_TIMER); + status_change_end(src, SC_SIGHT); clif_skill_nodamage(src,bl,skill_id,skill_lv,1); map_foreachinshootrange(skill_area_sub,src, skill_get_splash(skill_id, skill_lv),BL_CHAR|BL_SKILL, @@ -8545,7 +8545,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui case IG_ATTACK_STANCE: if( tsce ) { - clif_skill_nodamage(src,bl,skill_id,skill_lv,status_change_end(bl, type, INVALID_TIMER)); + clif_skill_nodamage(src,bl,skill_id,skill_lv,status_change_end(bl, type)); map_freeblock_unlock(); return 0; } @@ -8589,7 +8589,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui case SM_AUTOBERSERK: case MER_AUTOBERSERK: if( tsce ) - i = status_change_end(bl, type, INVALID_TIMER); + i = status_change_end(bl, type); else i = sc_start(src,bl,type,100,skill_lv,60000); clif_skill_nodamage(src,bl,skill_id,skill_lv,i); @@ -8599,7 +8599,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui case KO_YAMIKUMO: if (tsce) { - clif_skill_nodamage(src,bl,skill_id,-1,status_change_end(bl, type, INVALID_TIMER)); //Hide skill-scream animation. + clif_skill_nodamage(src,bl,skill_id,-1,status_change_end(bl, type)); //Hide skill-scream animation. map_freeblock_unlock(); return 0; } @@ -8608,7 +8608,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui case TK_RUN: if (tsce) { - clif_skill_nodamage(src,bl,skill_id,skill_lv,status_change_end(bl, type, INVALID_TIMER)); + clif_skill_nodamage(src,bl,skill_id,skill_lv,status_change_end(bl, type)); map_freeblock_unlock(); return 0; } @@ -8624,7 +8624,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui case SC_INVISIBILITY: case RA_CAMOUFLAGE: if (tsce) { - i = status_change_end(bl, type, INVALID_TIMER); + i = status_change_end(bl, type); if( i ) clif_skill_nodamage(src,bl,skill_id,( skill_id == LG_FORCEOFVANGUARD || skill_id == RA_CAMOUFLAGE ) ? skill_lv : -1,i); else if( sd ) @@ -8642,7 +8642,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui case CG_SPECIALSINGER: if (tsc && tsc->data[SC_ENSEMBLEFATIGUE]) { clif_skill_nodamage(src, bl, skill_id, skill_lv, 1); - status_change_end(bl, SC_ENSEMBLEFATIGUE, INVALID_TIMER); + status_change_end(bl, SC_ENSEMBLEFATIGUE); } break; @@ -8653,7 +8653,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui #else if(tsc && tsc->data[SC_DANCING]){ clif_skill_nodamage(src,bl,skill_id,skill_lv,1); - status_change_end(bl, SC_DANCING, INVALID_TIMER); + status_change_end(bl, SC_DANCING); } #endif break; @@ -8785,17 +8785,17 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui clif_skill_nodamage(src,bl,skill_id,skill_lv,0); break; } - status_change_end(bl, SC_SILENCE, INVALID_TIMER); - status_change_end(bl, SC_BLIND, INVALID_TIMER); - status_change_end(bl, SC_CONFUSION, INVALID_TIMER); - status_change_end(bl, SC_BITESCAR, INVALID_TIMER); + status_change_end(bl, SC_SILENCE); + status_change_end(bl, SC_BLIND); + status_change_end(bl, SC_CONFUSION); + status_change_end(bl, SC_BITESCAR); clif_skill_nodamage(src,bl,skill_id,skill_lv,1); break; case TF_DETOXIFY: clif_skill_nodamage(src,bl,skill_id,skill_lv,1); - status_change_end(bl, SC_POISON, INVALID_TIMER); - status_change_end(bl, SC_DPOISON, INVALID_TIMER); + status_change_end(bl, SC_POISON); + status_change_end(bl, SC_DPOISON); break; case PR_STRECOVERY: @@ -8804,14 +8804,14 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui break; } if (tsc && tsc->opt1) { - status_change_end(bl, SC_FREEZE, INVALID_TIMER); - status_change_end(bl, SC_STONE, INVALID_TIMER); - status_change_end(bl, SC_SLEEP, INVALID_TIMER); - status_change_end(bl, SC_STUN, INVALID_TIMER); - status_change_end(bl, SC_WHITEIMPRISON, INVALID_TIMER); + status_change_end(bl, SC_FREEZE); + status_change_end(bl, SC_STONE); + status_change_end(bl, SC_SLEEP); + status_change_end(bl, SC_STUN); + status_change_end(bl, SC_WHITEIMPRISON); } - status_change_end(bl, SC_STASIS, INVALID_TIMER); - status_change_end(bl, SC_NETHERWORLD, INVALID_TIMER); + status_change_end(bl, SC_STASIS); + status_change_end(bl, SC_NETHERWORLD); if(battle_check_undead(tstatus->race,tstatus->def_ele)) skill_addtimerskill(src, tick+1000, bl->id, 0, 0, skill_id, skill_lv, 100, flag); clif_skill_nodamage(src,bl,skill_id,skill_lv,1); @@ -8821,32 +8821,32 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui // Mercenary Supportive Skills case MER_BENEDICTION: - status_change_end(bl, SC_CURSE, INVALID_TIMER); - status_change_end(bl, SC_BLIND, INVALID_TIMER); + status_change_end(bl, SC_CURSE); + status_change_end(bl, SC_BLIND); clif_skill_nodamage(src,bl,skill_id,skill_lv,1); break; case MER_COMPRESS: - status_change_end(bl, SC_BLEEDING, INVALID_TIMER); + status_change_end(bl, SC_BLEEDING); clif_skill_nodamage(src,bl,skill_id,skill_lv,1); break; case MER_MENTALCURE: - status_change_end(bl, SC_CONFUSION, INVALID_TIMER); + status_change_end(bl, SC_CONFUSION); clif_skill_nodamage(src,bl,skill_id,skill_lv,1); break; case MER_RECUPERATE: - status_change_end(bl, SC_POISON, INVALID_TIMER); - status_change_end(bl, SC_DPOISON, INVALID_TIMER); - status_change_end(bl, SC_SILENCE, INVALID_TIMER); + status_change_end(bl, SC_POISON); + status_change_end(bl, SC_DPOISON); + status_change_end(bl, SC_SILENCE); clif_skill_nodamage(src,bl,skill_id,skill_lv,1); break; case MER_REGAIN: - status_change_end(bl, SC_SLEEP, INVALID_TIMER); - status_change_end(bl, SC_STUN, INVALID_TIMER); + status_change_end(bl, SC_SLEEP); + status_change_end(bl, SC_STUN); clif_skill_nodamage(src,bl,skill_id,skill_lv,1); break; case MER_TENDER: - status_change_end(bl, SC_FREEZE, INVALID_TIMER); - status_change_end(bl, SC_STONE, INVALID_TIMER); + status_change_end(bl, SC_FREEZE); + status_change_end(bl, SC_STONE); clif_skill_nodamage(src,bl,skill_id,skill_lv,1); break; @@ -9269,7 +9269,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui } if (i == SC_BERSERK || i == SC_SATURDAYNIGHTFEVER) tsc->data[status]->val2 = 0; //Mark a dispelled berserk to avoid setting hp to 100 by setting hp penalty to 0. - status_change_end(bl, status, INVALID_TIMER); + status_change_end(bl, status); } break; } @@ -9562,7 +9562,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui { clif_emotion(bl, md->db->skill[md->skill_idx]->val[0]); if(md->db->skill[md->skill_idx]->val[4] && tsce) - status_change_end(bl, type, INVALID_TIMER); + status_change_end(bl, type); //If mode gets set by NPC_EMOTION then the target should be reset [Playtester] if(!battle_config.npc_emotion_behavior && skill_id == NPC_EMOTION && md->db->skill[md->skill_idx]->val[1]) @@ -10060,11 +10060,11 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui break; } status_heal(bl, 0, 50*skill_lv, 2); - status_change_end(bl, SC_SPIRIT, INVALID_TIMER); - status_change_end(bl, SC_SOULGOLEM, INVALID_TIMER); - status_change_end(bl, SC_SOULSHADOW, INVALID_TIMER); - status_change_end(bl, SC_SOULFALCON, INVALID_TIMER); - status_change_end(bl, SC_SOULFAIRY, INVALID_TIMER); + status_change_end(bl, SC_SPIRIT); + status_change_end(bl, SC_SOULGOLEM); + status_change_end(bl, SC_SOULSHADOW); + status_change_end(bl, SC_SOULFALCON); + status_change_end(bl, SC_SOULFAIRY); break; case SL_SWOO: @@ -10072,7 +10072,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui if(sd) clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0); status_change_start(src,src,SC_STUN,10000,skill_lv,0,0,0,10000,SCSTART_NORATEDEF); - status_change_end(bl, SC_SWOO, INVALID_TIMER); + status_change_end(bl, SC_SWOO); break; } case SL_SKA: // [marquis007] @@ -10496,7 +10496,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui count += (short)tsc->data[SC_ROLLINGCUTTER]->val1; if( count > 10 ) count = 10; // Max coounter - status_change_end(bl, SC_ROLLINGCUTTER, INVALID_TIMER); + status_change_end(bl, SC_ROLLINGCUTTER); } sc_start(src,bl,SC_ROLLINGCUTTER,100,count,skill_get_time(skill_id,skill_lv)); clif_skill_nodamage(src,src,skill_id,skill_lv,1); @@ -10505,7 +10505,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui case GC_WEAPONBLOCKING: if( tsc && tsc->data[SC_WEAPONBLOCKING] ) - status_change_end(bl, SC_WEAPONBLOCKING, INVALID_TIMER); + status_change_end(bl, SC_WEAPONBLOCKING); else sc_start(src,bl,SC_WEAPONBLOCKING,100,skill_lv,skill_get_time(skill_id,skill_lv)); clif_skill_nodamage(src,bl,skill_id,skill_lv,1); @@ -10530,14 +10530,14 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui clif_skill_nodamage(src,bl,skill_id,skill_lv,1); if( tsc ) { - status_change_end(bl, SC_PARALYSE, INVALID_TIMER); - status_change_end(bl, SC_PYREXIA, INVALID_TIMER); - status_change_end(bl, SC_DEATHHURT, INVALID_TIMER); - status_change_end(bl, SC_LEECHESEND, INVALID_TIMER); - status_change_end(bl, SC_VENOMBLEED, INVALID_TIMER); - status_change_end(bl, SC_MAGICMUSHROOM, INVALID_TIMER); - status_change_end(bl, SC_TOXIN, INVALID_TIMER); - status_change_end(bl, SC_OBLIVIONCURSE, INVALID_TIMER); + status_change_end(bl, SC_PARALYSE); + status_change_end(bl, SC_PYREXIA); + status_change_end(bl, SC_DEATHHURT); + status_change_end(bl, SC_LEECHESEND); + status_change_end(bl, SC_VENOMBLEED); + status_change_end(bl, SC_MAGICMUSHROOM); + status_change_end(bl, SC_TOXIN); + status_change_end(bl, SC_OBLIVIONCURSE); } break; @@ -10651,12 +10651,12 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui tsc->data[SC_BURNING] || tsc->data[SC_FREEZING] || tsc->data[SC_CRYSTALIZE])) { // Success Chance: (60 + 10 * Skill Level) % if( rnd()%100 > 60+10*skill_lv ) break; - status_change_end(bl, SC_FREEZE, INVALID_TIMER); - status_change_end(bl, SC_STONE, INVALID_TIMER); - status_change_end(bl, SC_BLIND, INVALID_TIMER); - status_change_end(bl, SC_BURNING, INVALID_TIMER); - status_change_end(bl, SC_FREEZING, INVALID_TIMER); - status_change_end(bl, SC_CRYSTALIZE, INVALID_TIMER); + status_change_end(bl, SC_FREEZE); + status_change_end(bl, SC_STONE); + status_change_end(bl, SC_BLIND); + status_change_end(bl, SC_BURNING); + status_change_end(bl, SC_FREEZING); + status_change_end(bl, SC_CRYSTALIZE); } else //Success rate only applies to the curing effect and not stat bonus. Bonus status only applies to non infected targets clif_skill_nodamage(bl, bl, skill_id, skill_lv, sc_start(src,bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv))); @@ -10670,11 +10670,11 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui if( tsc && (tsc->data[SC_SLEEP] || tsc->data[SC_STUN] || tsc->data[SC_MANDRAGORA] || tsc->data[SC_SILENCE] || tsc->data[SC_DEEPSLEEP]) ){ // Success Chance: (60 + 10 * Skill Level) % if( rnd()%100 > 60+10*skill_lv ) break; - status_change_end(bl, SC_SLEEP, INVALID_TIMER); - status_change_end(bl, SC_STUN, INVALID_TIMER); - status_change_end(bl, SC_MANDRAGORA, INVALID_TIMER); - status_change_end(bl, SC_SILENCE, INVALID_TIMER); - status_change_end(bl, SC_DEEPSLEEP, INVALID_TIMER); + status_change_end(bl, SC_SLEEP); + status_change_end(bl, SC_STUN); + status_change_end(bl, SC_MANDRAGORA); + status_change_end(bl, SC_SILENCE); + status_change_end(bl, SC_DEEPSLEEP); } else // Success rate only applies to the curing effect and not stat bonus. Bonus status only applies to non infected targets clif_skill_nodamage(bl, bl, skill_id, skill_lv, sc_start(src,bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv))); @@ -10731,7 +10731,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui } if (i == SC_BERSERK || i == SC_SATURDAYNIGHTFEVER) tsc->data[status]->val2 = 0; //Mark a dispelled berserk to avoid setting hp to 100 by setting hp penalty to 0. - status_change_end(bl,status,INVALID_TIMER); + status_change_end(bl,status); } break; } @@ -10864,7 +10864,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui sc_start2(src, src, sphere, 100, element, skill_lv, skill_get_time(skill_id, skill_lv)); } else { for (i = SC_SPHERE_1; i <= SC_SPHERE_5; i++) { - status_change_end(src, static_cast(i), INVALID_TIMER); // Removes previous type + status_change_end(src, static_cast(i)); // Removes previous type sc_start2(src, src, static_cast(i), 100, element, skill_lv, skill_get_time(skill_id, skill_lv)); } } @@ -10915,7 +10915,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui case RA_WUGDASH: if( tsce ) { - clif_skill_nodamage(src,bl,skill_id,skill_lv,status_change_end(bl, type, INVALID_TIMER)); + clif_skill_nodamage(src,bl,skill_id,skill_lv,status_change_end(bl, type)); map_freeblock_unlock(); return 0; } @@ -11039,13 +11039,13 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui case SC_BODYPAINT: if( flag&1 ) { if (tsc && ((tsc->option&(OPTION_HIDE|OPTION_CLOAK)) || tsc->data[SC_CAMOUFLAGE] || tsc->data[SC_STEALTHFIELD])) { - 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] && 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); } // Attack Speed decrease and Blind happen to everyone around caster, not just hidden targets. sc_start(src, bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv)); @@ -11103,12 +11103,12 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui clif_skill_damage(src,bl,tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE); if (rnd()%100 < (25 + 25 * skill_lv)) map_foreachinallrange(skill_destroy_trap,bl,skill_get_splash(skill_id,skill_lv),BL_SKILL,tick); - status_change_end(bl, SC_SV_ROOTTWIST, INVALID_TIMER); + status_change_end(bl, SC_SV_ROOTTWIST); break; case LG_REFLECTDAMAGE: if( tsc && tsc->data[type] ) - status_change_end(bl,type,INVALID_TIMER); + status_change_end(bl,type); else sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)); clif_skill_nodamage(src,bl,skill_id,skill_lv,1); @@ -11224,13 +11224,13 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui } if( tsc && tsc->count && rnd_chance( ( skill_lv * 5 + ( status_get_dex( src ) + status_get_lv( src ) ) / 4 ) - rnd_value( 1, 10 ), 100 ) ){ - status_change_end(bl, SC_STONE, INVALID_TIMER); - status_change_end(bl, SC_FREEZE, INVALID_TIMER); - status_change_end(bl, SC_STUN, INVALID_TIMER); - status_change_end(bl, SC_POISON, INVALID_TIMER); - status_change_end(bl, SC_SILENCE, INVALID_TIMER); - status_change_end(bl, SC_BLIND, INVALID_TIMER); - status_change_end(bl, SC_HALLUCINATION, INVALID_TIMER); + status_change_end(bl, SC_STONE); + status_change_end(bl, SC_FREEZE); + status_change_end(bl, SC_STUN); + status_change_end(bl, SC_POISON); + status_change_end(bl, SC_SILENCE); + status_change_end(bl, SC_BLIND); + status_change_end(bl, SC_HALLUCINATION); } clif_skill_nodamage(src,bl,skill_id,skill_lv,1); @@ -11378,14 +11378,14 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui case WM_RANDOMIZESPELL: if (rnd() % 100 < 30 + (10 * skill_lv)) { - status_change_end(bl, SC_SONGOFMANA, INVALID_TIMER); - status_change_end(bl, SC_DANCEWITHWUG, INVALID_TIMER); - status_change_end(bl, SC_LERADSDEW, INVALID_TIMER); - status_change_end(bl, SC_SATURDAYNIGHTFEVER, INVALID_TIMER); - status_change_end(bl, SC_BEYONDOFWARCRY, INVALID_TIMER); - status_change_end(bl, SC_MELODYOFSINK, INVALID_TIMER); - status_change_end(bl, SC_BEYONDOFWARCRY, INVALID_TIMER); - status_change_end(bl, SC_UNLIMITEDHUMMINGVOICE, INVALID_TIMER); + status_change_end(bl, SC_SONGOFMANA); + status_change_end(bl, SC_DANCEWITHWUG); + status_change_end(bl, SC_LERADSDEW); + status_change_end(bl, SC_SATURDAYNIGHTFEVER); + status_change_end(bl, SC_BEYONDOFWARCRY); + status_change_end(bl, SC_MELODYOFSINK); + status_change_end(bl, SC_BEYONDOFWARCRY); + status_change_end(bl, SC_UNLIMITEDHUMMINGVOICE); clif_skill_nodamage(src, bl, skill_id, skill_lv, 1); } @@ -11446,29 +11446,29 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui case ECL_SEQUOIADUST: switch(skill_id){ case ECL_SNOWFLIP: - status_change_end(bl, SC_SLEEP, INVALID_TIMER); - status_change_end(bl, SC_BLEEDING, INVALID_TIMER); - status_change_end(bl, SC_BURNING, INVALID_TIMER); - status_change_end(bl, SC_DEEPSLEEP, INVALID_TIMER); + status_change_end(bl, SC_SLEEP); + status_change_end(bl, SC_BLEEDING); + status_change_end(bl, SC_BURNING); + status_change_end(bl, SC_DEEPSLEEP); break; case ECL_PEONYMAMY: - status_change_end(bl, SC_FREEZE, INVALID_TIMER); - status_change_end(bl, SC_FREEZING, INVALID_TIMER); - status_change_end(bl, SC_CRYSTALIZE, INVALID_TIMER); + status_change_end(bl, SC_FREEZE); + status_change_end(bl, SC_FREEZING); + status_change_end(bl, SC_CRYSTALIZE); break; case ECL_SADAGUI: - status_change_end(bl, SC_STUN, INVALID_TIMER); - status_change_end(bl, SC_CONFUSION, INVALID_TIMER); - status_change_end(bl, SC_HALLUCINATION, INVALID_TIMER); - status_change_end(bl, SC_FEAR, INVALID_TIMER); + status_change_end(bl, SC_STUN); + status_change_end(bl, SC_CONFUSION); + status_change_end(bl, SC_HALLUCINATION); + status_change_end(bl, SC_FEAR); break; case ECL_SEQUOIADUST: - status_change_end(bl, SC_STONE, INVALID_TIMER); - status_change_end(bl, SC_POISON, INVALID_TIMER); - status_change_end(bl, SC_CURSE, INVALID_TIMER); - status_change_end(bl, SC_BLIND, INVALID_TIMER); - status_change_end(bl, SC_ORCISH, INVALID_TIMER); - status_change_end(bl, SC_DECREASEAGI, INVALID_TIMER); + status_change_end(bl, SC_STONE); + status_change_end(bl, SC_POISON); + status_change_end(bl, SC_CURSE); + status_change_end(bl, SC_BLIND); + status_change_end(bl, SC_ORCISH); + status_change_end(bl, SC_DECREASEAGI); break; } clif_skill_damage(src, bl, tick, status_get_amotion(src), 0, -30000, 1, skill_id, 1, DMG_SINGLE); @@ -11726,8 +11726,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui struct status_change *sc = status_get_sc(&ele->bl); if( (sc && sc->data[type2]) || (tsc && tsc->data[type]) ) { - status_change_end(src,type,INVALID_TIMER); - status_change_end(bl,type2,INVALID_TIMER); + status_change_end(src,type); + status_change_end(bl,type2); } else { clif_skill_nodamage(src,src,skill_id,skill_lv,1); if (!(skill_id >= EM_EL_FLAMETECHNIC && skill_id <= EM_EL_DEADLY_POISON)) @@ -11755,8 +11755,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui clif_skill_nodamage(src,src,skill_id,skill_lv,1); if( (sc && sc->data[type2]) || (tsc && tsc->data[type]) ) { - status_change_end(bl,type,INVALID_TIMER); - status_change_end(src,type2,INVALID_TIMER); + status_change_end(bl,type); + status_change_end(src,type2); } else { // This not heals at the end. clif_skill_damage(src, src, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE); @@ -11869,15 +11869,15 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui if (bl->type != BL_PC) break; if (tsc && (tsc->option & (OPTION_CLOAK | OPTION_HIDE) || tsc->data[SC_CAMOUFLAGE] || tsc->data[SC__SHADOWFORM] || tsc->data[SC_MARIONETTE] || tsc->data[SC_HARMONIZE])) { - 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] && 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_MARIONETTE, INVALID_TIMER); - status_change_end(bl, SC_HARMONIZE, INVALID_TIMER); + status_change_end(bl, SC__SHADOWFORM); + status_change_end(bl, SC_MARIONETTE); + status_change_end(bl, SC_HARMONIZE); sc_start(src, bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv)); } }else{ @@ -11908,7 +11908,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui SC_MANDRAGORA, SC_HARMONIZE, SC_DEEPSLEEP, SC_VOICEOFSIREN, SC_SLEEP, SC_CONFUSION, SC_HALLUCINATION }; for (i = 0; i < ARRAYLENGTH(scs); i++) - if (tsc->data[scs[i]]) status_change_end(bl, scs[i], INVALID_TIMER); + if (tsc->data[scs[i]]) status_change_end(bl, scs[i]); } if (hd) skill_blockhomun_start(hd, skill_id, skill_get_cooldown(skill_id, skill_lv)); @@ -12006,7 +12006,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui if (sd) { // If marked by someone else remove it if (tsce && tsce->val2 != src->id) - status_change_end(bl, type, INVALID_TIMER); + status_change_end(bl, type); // Check if marked before ARR_FIND(0, MAX_SKILL_CRIMSON_MARKER, i, sd->c_marker[i] == bl->id); @@ -12044,7 +12044,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui clif_skill_nodamage(src, src, skill_id, skill_lv, 1); map_foreachinrange(skill_area_sub, src, skill_get_splash(skill_id, skill_lv), BL_CHAR, src, skill_id, skill_lv, tick, flag|BCT_ENEMY|SD_SPLASH|1, skill_castend_damage_id); } - status_change_end(src, SC_QD_SHOT_READY, INVALID_TIMER); // End here to prevent spamming of the skill onto the target. + status_change_end(src, SC_QD_SHOT_READY); // End here to prevent spamming of the skill onto the target. skill_area_temp[0] = 0; skill_area_temp[1] = 0; break; @@ -12084,7 +12084,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui case SU_HIDE: if (tsce) { clif_skill_nodamage(src, bl, skill_id, skill_lv, 1); - status_change_end(bl, type, INVALID_TIMER); + status_change_end(bl, type); map_freeblock_unlock(); return 0; } @@ -12459,7 +12459,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui struct status_change *sc = status_get_sc(src); if (sc && sc->data[SC_CURSEDCIRCLE_ATKER]) // Should only remove after the skill had been casted. - status_change_end(src,SC_CURSEDCIRCLE_ATKER,INVALID_TIMER); + status_change_end(src,SC_CURSEDCIRCLE_ATKER); } if (dstmd) { //Mob skill event for no damage skills (damage ones are handled in battle_damage/skill_attack) [Skotlex] @@ -12832,7 +12832,7 @@ TIMER_FUNC(skill_castend_id){ if (ud->state.running && ud->skill_id == TK_JUMPKICK){ ud->state.running = 0; - status_change_end(src, SC_RUN, INVALID_TIMER); + status_change_end(src, SC_RUN); flag = 1; } @@ -12896,7 +12896,7 @@ TIMER_FUNC(skill_castend_id){ sc = status_get_sc(src); if(sc && sc->count) { if (ud->skill_id != RA_CAMOUFLAGE) - status_change_end(src, SC_CAMOUFLAGE, INVALID_TIMER); // Applies to the first skill if active + status_change_end(src, SC_CAMOUFLAGE); // Applies to the first skill if active if(sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_WIZARD && @@ -12930,8 +12930,8 @@ TIMER_FUNC(skill_castend_id){ sc = &sd->sc; if (sc->count) { //End states - status_change_end(src, SC_EXPLOSIONSPIRITS, INVALID_TIMER); - status_change_end(src, SC_BLADESTOP, INVALID_TIMER); + status_change_end(src, SC_EXPLOSIONSPIRITS); + status_change_end(src, SC_BLADESTOP); #ifdef RENEWAL sc_start(src,src, SC_EXTREMITYFIST2, 100, ud->skill_lv, skill_get_time(ud->skill_id, ud->skill_lv)); #endif @@ -13096,7 +13096,7 @@ TIMER_FUNC(skill_castend_pos){ skill_castend_pos2(src,ud->skillx,ud->skilly,ud->skill_id,ud->skill_lv,tick,0); if (ud->skill_id != RA_CAMOUFLAGE) - status_change_end(src, SC_CAMOUFLAGE, INVALID_TIMER); // Applies to the first skill if active + status_change_end(src, SC_CAMOUFLAGE); // Applies to the first skill if active if( sd && sd->skillitem != AL_WARP ) // Warp-Portal thru items will clear data in skill_castend_map. [Inkfish] sd->skillitem = sd->skillitemlv = sd->skillitem_keep_requirement = 0; @@ -13398,7 +13398,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui #ifndef RENEWAL case HP_BASILICA: if( sc->data[SC_BASILICA] ) { - status_change_end(src, SC_BASILICA, INVALID_TIMER); // Cancel Basilica and return so requirement isn't consumed again + status_change_end(src, SC_BASILICA); // Cancel Basilica and return so requirement isn't consumed again return 0; } else { // Create Basilica. Start SC on caster. Unit timer start SC on others. if( map_getcell(src->m, x, y, CELL_CHKLANDPROTECTOR) ) { @@ -13476,7 +13476,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui ); } if( sc && sc->data[SC_CURSEDCIRCLE_ATKER] ) //Should only remove after the skill has been casted. - status_change_end(src,SC_CURSEDCIRCLE_ATKER,INVALID_TIMER); + status_change_end(src,SC_CURSEDCIRCLE_ATKER); return 0; // not to consume item. case MO_BODYRELOCATION: @@ -13493,7 +13493,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui case NJ_SHADOWJUMP: if( map_getcell(src->m,x,y,CELL_CHKREACH) && skill_check_unit_movepos(5, src, x, y, 1, 0) ) //You don't move on GVG grounds. clif_blown(src); - status_change_end(src, SC_HIDING, INVALID_TIMER); + status_change_end(src, SC_HIDING); break; case AM_SPHEREMINE: case AM_CANNIBALIZE: @@ -13661,7 +13661,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui case PA_GOSPEL: if (sce && sce->val4 == BCT_SELF) { - status_change_end(src, SC_GOSPEL, INVALID_TIMER); + status_change_end(src, SC_GOSPEL); return 0; } else @@ -13669,7 +13669,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui sg = skill_unitsetting(src,skill_id,skill_lv,src->x,src->y,0); if (!sg) break; if (sce) - status_change_end(src, type, INVALID_TIMER); //Was under someone else's Gospel. [Skotlex] + status_change_end(src, type); //Was under someone else's Gospel. [Skotlex] sc_start4(src,src,type,100,skill_lv,0,sg->group_id,BCT_SELF,skill_get_time(skill_id,skill_lv)); clif_skill_poseffect(src, skill_id, skill_lv, 0, 0, tick); // PA_GOSPEL music packet } @@ -13691,7 +13691,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui break; case AC_SHOWER: - status_change_end(src, SC_CAMOUFLAGE, INVALID_TIMER); + status_change_end(src, SC_CAMOUFLAGE); case MA_SHOWER: case NC_COLDSLOWER: case RK_DRAGONBREATH: @@ -13808,7 +13808,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui case LG_BANDING: if( sc && sc->data[SC_BANDING] ) - status_change_end(src,SC_BANDING,INVALID_TIMER); + status_change_end(src,SC_BANDING); else if( (sg = skill_unitsetting(src,skill_id,skill_lv,src->x,src->y,0)) != NULL ) sc_start4(src,src,SC_BANDING,100,skill_lv,0,0,sg->group_id,skill_get_time(skill_id,skill_lv)); clif_skill_nodamage(src,src,skill_id,skill_lv,1); @@ -13896,7 +13896,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui case NPC_FIREWALK: case NPC_ELECTRICWALK: if( sc && sc->data[type] ) - status_change_end(src,type,INVALID_TIMER); + status_change_end(src,type); sc_start2(src, src, type, 100, skill_id, skill_lv, skill_get_time(skill_id, skill_lv)); break; @@ -14049,7 +14049,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui } if( sc && sc->data[SC_CURSEDCIRCLE_ATKER] ) //Should only remove after the skill has been casted. - status_change_end(src,SC_CURSEDCIRCLE_ATKER,INVALID_TIMER); + status_change_end(src,SC_CURSEDCIRCLE_ATKER); if( sd ) {// ensure that the skill last-cast tick is recorded @@ -14934,7 +14934,7 @@ static int skill_unit_onplace(struct skill_unit *unit, struct block_list *bl, t_ return 0; //Hidden characters are immune to AoE skills except to these. [Skotlex] if (sc && sc->data[SC_VACUUM_EXTREME] && map_getcell(bl->m, bl->x, bl->y, CELL_CHKLANDPROTECTOR)) - status_change_end(bl, SC_VACUUM_EXTREME, INVALID_TIMER); + status_change_end(bl, SC_VACUUM_EXTREME); if (sc && sc->data[SC_HOVERING] && skill->inf2[INF2_IGNOREHOVERING]) return 0; // Under Hovering characters are immune to select trap and ground target skills. @@ -15793,13 +15793,13 @@ int skill_unit_onplace_timer(struct skill_unit *unit, struct block_list *bl, t_t } if (sg->val1 % 5 == 0) { // Reveal hidden players every 5 seconds // Doesn't remove Invisibility or Chase Walk. - 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] && 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); } sc_start(ss, bl, type, 100, sg->skill_lv, sg->interval + 100); } @@ -16053,19 +16053,19 @@ int skill_unit_onout(struct skill_unit *src, struct block_list *bl, t_tick tick) case UNT_PNEUMA: case UNT_EPICLESIS://Arch Bishop if (sce) - status_change_end(bl, type, INVALID_TIMER); + status_change_end(bl, type); break; #ifndef RENEWAL case UNT_BASILICA: if (sce && sce->val4 != bl->id) - status_change_end(bl, type, INVALID_TIMER); + status_change_end(bl, type); break; #endif case UNT_HERMODE: //Clear Hermode if the owner moved. if (sce && sce->val3 == BCT_SELF && sce->val4 == sg->group_id) - status_change_end(bl, type, INVALID_TIMER); + status_change_end(bl, type); break; case UNT_DISSONANCE: @@ -16119,7 +16119,7 @@ int skill_unit_onleft(uint16 skill_id, struct block_list *bl, t_tick tick) if (bl->type==BL_MOB) break; if (sce) - status_change_end(bl, type, INVALID_TIMER); + status_change_end(bl, type); break; case BD_LULLABY: @@ -16137,7 +16137,7 @@ int skill_unit_onleft(uint16 skill_id, struct block_list *bl, t_tick tick) //it only checks if you are doing the same ensemble. So if there's two chars doing an ensemble //which overlaps, by stepping outside of the other parther's ensemble will cause you to cancel //your own. Let's pray that scenario is pretty unlikely and noone will complain too much about it. - status_change_end(bl, SC_DANCING, INVALID_TIMER); + status_change_end(bl, SC_DANCING); } case MH_STEINWAND: case MG_SAFETYWALL: @@ -16169,7 +16169,7 @@ int skill_unit_onleft(uint16 skill_id, struct block_list *bl, t_tick tick) case NC_NEUTRALBARRIER: case SU_NYANGGRASS: if (sce) - status_change_end(bl, type, INVALID_TIMER); + status_change_end(bl, type); break; case BA_DISSONANCE: case DC_UGLYDANCE: //Used for updating song timers in overlap instances @@ -16207,11 +16207,11 @@ int skill_unit_onleft(uint16 skill_id, struct block_list *bl, t_tick tick) case PF_FOGWALL: if (sce) { - status_change_end(bl, type, INVALID_TIMER); + status_change_end(bl, type); if ((sce=sc->data[SC_BLIND])) { if (bl->type == BL_PC) //Players get blind ended inmediately, others have it still for 30 secs. [Skotlex] - status_change_end(bl, SC_BLIND, INVALID_TIMER); + status_change_end(bl, SC_BLIND); else { delete_timer(sce->timer, status_change_timer); sce->timer = add_timer(30000+tick, status_change_timer, bl->id, SC_BLIND); @@ -16224,7 +16224,7 @@ int skill_unit_onleft(uint16 skill_id, struct block_list *bl, t_tick tick) case GD_SOULCOLD: case GD_HAWKEYES: if( !(sce && sce->val4) ) - status_change_end(bl, type, INVALID_TIMER); + status_change_end(bl, type); break; } @@ -16918,7 +16918,7 @@ bool skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_i //Do not repeat a kick. if (sc->data[SC_COMBO]->val3 != skill_id) break; - status_change_end(&sd->bl, SC_COMBO, INVALID_TIMER); + status_change_end(&sd->bl, SC_COMBO); return false; } if(sc->data[SC_COMBO]->val1 != skill_id && !pc_is_taekwon_ranker(sd)) { //Cancel combo wait. @@ -18486,7 +18486,7 @@ int skill_castfix(struct block_list *bl, uint16 skill_id, uint16 skill_lv) { time -= time * 50 / 100; // Foresight counter gets reduced even if the skill is not affected by it if ((--sc->data[SC_MEMORIZE]->val2) <= 0) - status_change_end(bl, SC_MEMORIZE, INVALID_TIMER); + status_change_end(bl, SC_MEMORIZE); } } } @@ -18535,7 +18535,7 @@ int skill_castfix_sc(struct block_list *bl, double time, uint8 flag) if(!(flag&2)) time -= time * sc->data[SC_SUFFRAGIUM]->val2 / 100; //Suffragium ends even if the skill is not affected by it - status_change_end(bl, SC_SUFFRAGIUM, INVALID_TIMER); + status_change_end(bl, SC_SUFFRAGIUM); } } @@ -18636,7 +18636,7 @@ int skill_vfcastfix(struct block_list *bl, double time, uint16 skill_id, uint16 if (!sd || pc_checkskill(sd, skill_id) > 0) { // Foresight only decreases cast times from learned skills, not skills granted by items reduce_cast_rate += 50; if ((--sc->data[SC_MEMORIZE]->val2) <= 0) - status_change_end(bl, SC_MEMORIZE, INVALID_TIMER); + status_change_end(bl, SC_MEMORIZE); } } if (sc->data[SC_POEMBRAGI]) @@ -19829,7 +19829,7 @@ bool skill_check_cloaking(struct block_list *bl, struct status_change_entry *sce if( sce ) { if( !wall ) { if( sce->val1 < 3 ) //End cloaking. - status_change_end(bl, SC_CLOAKING, INVALID_TIMER); + status_change_end(bl, SC_CLOAKING); else if( sce->val4&1 ) { //Remove wall bonus sce->val4&=~1; status_calc_bl(bl, { SCB_SPEED }); @@ -19866,20 +19866,20 @@ bool skill_check_shadowform(struct block_list *bl, int64 damage, int hit) struct block_list *src = map_id2bl(sc->data[SC__SHADOWFORM]->val2); if( !src || src->m != bl->m ) { - status_change_end(bl, SC__SHADOWFORM, INVALID_TIMER); + status_change_end(bl, SC__SHADOWFORM); return false; } if( src && (status_isdead(src) || !battle_check_target(bl,src,BCT_ENEMY)) ) { if( src->type == BL_PC ) ((TBL_PC*)src)->shadowform_id = 0; - status_change_end(bl, SC__SHADOWFORM, INVALID_TIMER); + status_change_end(bl, SC__SHADOWFORM); return false; } status_damage(bl, src, damage, 0, clif_damage(src, src, gettick(), 500, 500, damage, hit, (hit > 1 ? DMG_MULTI_HIT : DMG_NORMAL), 0, false), 0, SC__SHADOWFORM); if( sc && sc->data[SC__SHADOWFORM] && (--sc->data[SC__SHADOWFORM]->val3) <= 0 ) { - status_change_end(bl, SC__SHADOWFORM, INVALID_TIMER); + status_change_end(bl, SC__SHADOWFORM); if( src->type == BL_PC ) ((TBL_PC*)src)->shadowform_id = 0; } @@ -19910,7 +19910,7 @@ bool skill_check_camouflage(struct block_list *bl, struct status_change_entry *s if( sce ) { if( !wall && sce->val1 < 3 ) //End camouflage. - status_change_end(bl, SC_CAMOUFLAGE, INVALID_TIMER); + status_change_end(bl, SC_CAMOUFLAGE); status_calc_bl(bl, { SCB_SPEED }); } @@ -20092,7 +20092,7 @@ int skill_delunit(struct skill_unit* unit) struct block_list* target = map_id2bl(group->val2); if( target ) - status_change_end(target, SC_ANKLE, INVALID_TIMER); + status_change_end(target, SC_ANKLE); } break; case WZ_ICEWALL: @@ -20112,7 +20112,7 @@ int skill_delunit(struct skill_unit* unit) struct block_list* target = map_id2bl(group->val2); if( target ) - status_change_end(target, SC_ELECTRICSHOCKER, INVALID_TIMER); + status_change_end(target, SC_ELECTRICSHOCKER); } break; case SC_MAELSTROM: @@ -20274,7 +20274,7 @@ int skill_delunitgroup_(std::shared_ptr group, const char* f struct status_change* sc = status_get_sc(src); if (sc && sc->data[SC_DANCING]) { sc->data[SC_DANCING]->val2 = 0 ; //This prevents status_change_end attempting to redelete the group. [Skotlex] - status_change_end(src, SC_DANCING, INVALID_TIMER); + status_change_end(src, SC_DANCING); } } @@ -20290,7 +20290,7 @@ int skill_delunitgroup_(std::shared_ptr group, const char* f struct status_change *sc = status_get_sc(src); if (sc && sc->data[i]) { sc->data[i]->val3 = 0; //Remove reference to this group. [Skotlex] - status_change_end(src, (sc_type)i, INVALID_TIMER); + status_change_end(src, (sc_type)i); } } @@ -20313,7 +20313,7 @@ int skill_delunitgroup_(std::shared_ptr group, const char* f //The last group was cleared, end status change if(removed && sc->data[SC_SPIDERWEB]->val2 == 0 && sc->data[SC_SPIDERWEB]->val3 == 0 && sc->data[SC_SPIDERWEB]->val4 == 0) - status_change_end(target, SC_SPIDERWEB, INVALID_TIMER); + status_change_end(target, SC_SPIDERWEB); } } break; @@ -20324,7 +20324,7 @@ int skill_delunitgroup_(std::shared_ptr group, const char* f if (sc && sc->data[SC_WARM]) { sc->data[SC_WARM]->val4 = 0; - status_change_end(src, SC_WARM, INVALID_TIMER); + status_change_end(src, SC_WARM); } } break; @@ -20333,7 +20333,7 @@ int skill_delunitgroup_(std::shared_ptr group, const char* f if (sc && sc->data[SC_BANDING]) { sc->data[SC_BANDING]->val4 = 0; - status_change_end(src, SC_BANDING, INVALID_TIMER); + status_change_end(src, SC_BANDING); } } break; @@ -20344,9 +20344,9 @@ int skill_delunitgroup_(std::shared_ptr group, const char* f if ( sc->data[SC_NEUTRALBARRIER_MASTER] ) { sc->data[SC_NEUTRALBARRIER_MASTER]->val2 = 0; - status_change_end(src,SC_NEUTRALBARRIER_MASTER,INVALID_TIMER); + status_change_end(src,SC_NEUTRALBARRIER_MASTER); } - status_change_end(src,SC_NEUTRALBARRIER,INVALID_TIMER); + status_change_end(src,SC_NEUTRALBARRIER); } } break; @@ -20355,7 +20355,7 @@ int skill_delunitgroup_(std::shared_ptr group, const char* f struct status_change *sc = NULL; if( (sc = status_get_sc(src)) != NULL && sc->data[SC_STEALTHFIELD_MASTER] ) { sc->data[SC_STEALTHFIELD_MASTER]->val2 = 0; - status_change_end(src,SC_STEALTHFIELD_MASTER,INVALID_TIMER); + status_change_end(src,SC_STEALTHFIELD_MASTER); } } break; @@ -21882,7 +21882,7 @@ int skill_poisoningweapon(struct map_session_data *sd, t_itemid nameid) return 0; } - status_change_end(&sd->bl, SC_POISONINGWEAPON, INVALID_TIMER); // End the status so a new poison can be applied (if changed) + status_change_end(&sd->bl, SC_POISONINGWEAPON); // End the status so a new poison can be applied (if changed) chance = 2 + 2 * sd->menuskill_val; // 2 + 2 * skill_lv sc_start4(&sd->bl,&sd->bl, SC_POISONINGWEAPON, 100, pc_checkskill(sd, GC_RESEARCHNEWPOISON), //in Aegis it store the level of GC_RESEARCHNEWPOISON in val1 type, chance, 0, skill_get_time(GC_POISONINGWEAPON, sd->menuskill_val)); @@ -21912,7 +21912,7 @@ void skill_toggle_magicpower(struct block_list *bl, uint16 skill_id) if (sc && sc->count && sc->data[SC_MAGICPOWER]) { if (sc->data[SC_MAGICPOWER]->val4) { - status_change_end(bl, SC_MAGICPOWER, INVALID_TIMER); + status_change_end(bl, SC_MAGICPOWER); } else { sc->data[SC_MAGICPOWER]->val4 = 1; status_calc_bl_(bl, status_db.getCalcFlag(SC_MAGICPOWER)); @@ -22036,7 +22036,7 @@ int skill_select_menu(struct map_session_data *sd,uint16 skill_id) { if (sd->sc.data[SC_STOP]) { aslvl = sd->sc.data[SC_STOP]->val1; - status_change_end(&sd->bl,SC_STOP,INVALID_TIMER); + status_change_end(&sd->bl,SC_STOP); } if (!skill_id || !(sk_idx = skill_get_index(skill_id))) diff --git a/src/map/status.cpp b/src/map/status.cpp index 41ae32a59d..42005bdae0 100644 --- a/src/map/status.cpp +++ b/src/map/status.cpp @@ -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::vectordata[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(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(i), INVALID_TIMER); // End the bonus part on the caster + status_change_end(bl, static_cast(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(type+1),INVALID_TIMER); - status_change_end(bl,type,INVALID_TIMER); + status_change_end(s_bl,static_cast(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); } } } diff --git a/src/map/status.hpp b/src/map/status.hpp index 06162ee1d6..f103cd0188 100644 --- a/src/map/status.hpp +++ b/src/map/status.hpp @@ -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); diff --git a/src/map/unit.cpp b/src/map/unit.cpp index ece3a0a046..6c5b1ca732 100644 --- a/src/map/unit.cpp +++ b/src/map/unit.cpp @@ -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 }