* Removed unconditional redundant status change checks before status_change_end calls (follow up to r12890).

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@14671 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
ai4rei 2011-01-14 22:04:20 +00:00
parent ad4e9bbee1
commit a7810e9646
6 changed files with 61 additions and 122 deletions

View File

@ -1,6 +1,7 @@
Date Added Date Added
2011/01/14 2011/01/14
* Removed unconditional redundant status change checks before status_change_end calls (follow up to r12890). [Ai4rei]
* Replaced remaining occurences of '-1' with 'INVALID_TIMER', where appropriate (follow up to r12998). [Ai4rei] * Replaced remaining occurences of '-1' with 'INVALID_TIMER', where appropriate (follow up to r12998). [Ai4rei]
* Removed 'gui' plug-in (support plug-in for 3rd party eAthena GUI front-ends) (topic:262934). [Ai4rei] * Removed 'gui' plug-in (support plug-in for 3rd party eAthena GUI front-ends) (topic:262934). [Ai4rei]
2011/01/13 2011/01/13

View File

@ -7615,7 +7615,7 @@ static int atcommand_mutearea_sub(struct block_list *bl,va_list ap)
pl_sd->status.manner -= time; pl_sd->status.manner -= time;
if (pl_sd->status.manner < 0) if (pl_sd->status.manner < 0)
sc_start(&pl_sd->bl,SC_NOCHAT,100,0,0); sc_start(&pl_sd->bl,SC_NOCHAT,100,0,0);
else if (pl_sd->sc.data[SC_NOCHAT]) else
status_change_end(&pl_sd->bl, SC_NOCHAT, INVALID_TIMER); status_change_end(&pl_sd->bl, SC_NOCHAT, INVALID_TIMER);
} }
return 0; return 0;

View File

@ -393,19 +393,11 @@ int map_moveblock(struct block_list *bl, int x1, int y1, unsigned int tick)
//TODO: Perhaps some outs of bounds checking should be placed here? //TODO: Perhaps some outs of bounds checking should be placed here?
if (bl->type&BL_CHAR) { if (bl->type&BL_CHAR) {
skill_unit_move(bl,tick,2); skill_unit_move(bl,tick,2);
sc = status_get_sc(bl); status_change_end(bl, SC_CLOSECONFINE, INVALID_TIMER);
if (sc && sc->count) { status_change_end(bl, SC_CLOSECONFINE2, INVALID_TIMER);
if (sc->data[SC_CLOSECONFINE]) // status_change_end(bl, SC_BLADESTOP, INVALID_TIMER); //Won't stop when you are knocked away, go figure...
status_change_end(bl, SC_CLOSECONFINE, INVALID_TIMER); status_change_end(bl, SC_TATAMIGAESHI, INVALID_TIMER);
if (sc->data[SC_CLOSECONFINE2]) status_change_end(bl, SC_MAGICROD, INVALID_TIMER);
status_change_end(bl, SC_CLOSECONFINE2, INVALID_TIMER);
// if (sc->data[SC_BLADESTOP]) //Won't stop when you are knocked away, go figure...
// status_change_end(bl, SC_BLADESTOP, INVALID_TIMER);
if (sc->data[SC_TATAMIGAESHI])
status_change_end(bl, SC_TATAMIGAESHI, INVALID_TIMER);
if (sc->data[SC_MAGICROD])
status_change_end(bl, SC_MAGICROD, INVALID_TIMER);
}
} else } else
if (bl->type == BL_NPC) if (bl->type == BL_NPC)
npc_unsetcells((TBL_NPC*)bl); npc_unsetcells((TBL_NPC*)bl);
@ -1580,64 +1572,40 @@ int map_quit(struct map_session_data *sd)
if( sd->sc.count ) if( sd->sc.count )
{ {
//Status that are not saved... //Status that are not saved...
if(sd->sc.data[SC_BOSSMAPINFO]) status_change_end(&sd->bl, SC_BOSSMAPINFO, INVALID_TIMER);
status_change_end(&sd->bl, SC_BOSSMAPINFO, INVALID_TIMER); status_change_end(&sd->bl, SC_AUTOTRADE, INVALID_TIMER);
if(sd->sc.data[SC_AUTOTRADE]) status_change_end(&sd->bl, SC_SPURT, INVALID_TIMER);
status_change_end(&sd->bl, SC_AUTOTRADE, INVALID_TIMER); status_change_end(&sd->bl, SC_BERSERK, INVALID_TIMER);
if(sd->sc.data[SC_SPURT]) status_change_end(&sd->bl, SC_TRICKDEAD, INVALID_TIMER);
status_change_end(&sd->bl, SC_SPURT, INVALID_TIMER); status_change_end(&sd->bl, SC_GUILDAURA, INVALID_TIMER);
if(sd->sc.data[SC_BERSERK])
status_change_end(&sd->bl, SC_BERSERK, INVALID_TIMER);
if(sd->sc.data[SC_TRICKDEAD])
status_change_end(&sd->bl, SC_TRICKDEAD, INVALID_TIMER);
if(sd->sc.data[SC_GUILDAURA])
status_change_end(&sd->bl, SC_GUILDAURA, INVALID_TIMER);
if(sd->sc.data[SC_ENDURE] && sd->sc.data[SC_ENDURE]->val4) if(sd->sc.data[SC_ENDURE] && sd->sc.data[SC_ENDURE]->val4)
status_change_end(&sd->bl, SC_ENDURE, INVALID_TIMER); //No need to save infinite endure. status_change_end(&sd->bl, SC_ENDURE, INVALID_TIMER); //No need to save infinite endure.
if(sd->sc.data[SC_WEIGHT50]) status_change_end(&sd->bl, SC_WEIGHT50, INVALID_TIMER);
status_change_end(&sd->bl, SC_WEIGHT50, INVALID_TIMER); status_change_end(&sd->bl, SC_WEIGHT90, INVALID_TIMER);
if(sd->sc.data[SC_WEIGHT90])
status_change_end(&sd->bl, SC_WEIGHT90, INVALID_TIMER);
if (battle_config.debuff_on_logout&1) { if (battle_config.debuff_on_logout&1) {
if(sd->sc.data[SC_ORCISH]) status_change_end(&sd->bl, SC_ORCISH, INVALID_TIMER);
status_change_end(&sd->bl, SC_ORCISH, INVALID_TIMER); status_change_end(&sd->bl, SC_STRIPWEAPON, INVALID_TIMER);
if(sd->sc.data[SC_STRIPWEAPON]) status_change_end(&sd->bl, SC_STRIPARMOR, INVALID_TIMER);
status_change_end(&sd->bl, SC_STRIPWEAPON, INVALID_TIMER); status_change_end(&sd->bl, SC_STRIPSHIELD, INVALID_TIMER);
if(sd->sc.data[SC_STRIPARMOR]) status_change_end(&sd->bl, SC_STRIPHELM, INVALID_TIMER);
status_change_end(&sd->bl, SC_STRIPARMOR, INVALID_TIMER); status_change_end(&sd->bl, SC_EXTREMITYFIST, INVALID_TIMER);
if(sd->sc.data[SC_STRIPSHIELD]) status_change_end(&sd->bl, SC_EXPLOSIONSPIRITS, INVALID_TIMER);
status_change_end(&sd->bl, SC_STRIPSHIELD, INVALID_TIMER);
if(sd->sc.data[SC_STRIPHELM])
status_change_end(&sd->bl, SC_STRIPHELM, INVALID_TIMER);
if(sd->sc.data[SC_EXTREMITYFIST])
status_change_end(&sd->bl, SC_EXTREMITYFIST, INVALID_TIMER);
if(sd->sc.data[SC_EXPLOSIONSPIRITS])
status_change_end(&sd->bl, SC_EXPLOSIONSPIRITS, INVALID_TIMER);
if(sd->sc.data[SC_REGENERATION] && sd->sc.data[SC_REGENERATION]->val4) if(sd->sc.data[SC_REGENERATION] && sd->sc.data[SC_REGENERATION]->val4)
status_change_end(&sd->bl, SC_REGENERATION, INVALID_TIMER); status_change_end(&sd->bl, SC_REGENERATION, INVALID_TIMER);
//TO-DO Probably there are way more NPC_type negative status that are removed //TO-DO Probably there are way more NPC_type negative status that are removed
if(sd->sc.data[SC_CHANGEUNDEAD]) status_change_end(&sd->bl, SC_CHANGEUNDEAD, INVALID_TIMER);
status_change_end(&sd->bl, SC_CHANGEUNDEAD, INVALID_TIMER);
// Both these statuses are removed on logout. [L0ne_W0lf] // Both these statuses are removed on logout. [L0ne_W0lf]
if(sd->sc.data[SC_SLOWCAST]) status_change_end(&sd->bl, SC_SLOWCAST, INVALID_TIMER);
status_change_end(&sd->bl, SC_SLOWCAST, INVALID_TIMER); status_change_end(&sd->bl, SC_CRITICALWOUND, INVALID_TIMER);
if(sd->sc.data[SC_CRITICALWOUND])
status_change_end(&sd->bl, SC_CRITICALWOUND, INVALID_TIMER);
} }
if (battle_config.debuff_on_logout&2) if (battle_config.debuff_on_logout&2)
{ {
if(sd->sc.data[SC_MAXIMIZEPOWER]) status_change_end(&sd->bl, SC_MAXIMIZEPOWER, INVALID_TIMER);
status_change_end(&sd->bl, SC_MAXIMIZEPOWER, INVALID_TIMER); status_change_end(&sd->bl, SC_MAXOVERTHRUST, INVALID_TIMER);
if(sd->sc.data[SC_MAXOVERTHRUST]) status_change_end(&sd->bl, SC_STEELBODY, INVALID_TIMER);
status_change_end(&sd->bl, SC_MAXOVERTHRUST, INVALID_TIMER); status_change_end(&sd->bl, SC_PRESERVE, INVALID_TIMER);
if(sd->sc.data[SC_STEELBODY]) status_change_end(&sd->bl, SC_KAAHI, INVALID_TIMER);
status_change_end(&sd->bl, SC_STEELBODY, INVALID_TIMER); status_change_end(&sd->bl, SC_SPIRIT, INVALID_TIMER);
if(sd->sc.data[SC_PRESERVE])
status_change_end(&sd->bl, SC_PRESERVE, INVALID_TIMER);
if(sd->sc.data[SC_KAAHI])
status_change_end(&sd->bl, SC_KAAHI, INVALID_TIMER);
if(sd->sc.data[SC_SPIRIT])
status_change_end(&sd->bl, SC_SPIRIT, INVALID_TIMER);
} }
} }

View File

@ -4101,18 +4101,12 @@ int pc_setpos(struct map_session_data* sd, unsigned short mapindex, int x, int y
{ // Cancel some map related stuff. { // Cancel some map related stuff.
if (sd->sc.data[SC_JAILED]) if (sd->sc.data[SC_JAILED])
return 1; //You may not get out! return 1; //You may not get out!
if (sd->sc.data[SC_BOSSMAPINFO]) status_change_end(&sd->bl, SC_BOSSMAPINFO, INVALID_TIMER);
status_change_end(&sd->bl, SC_BOSSMAPINFO, INVALID_TIMER); status_change_end(&sd->bl, SC_WARM, INVALID_TIMER);
if (sd->sc.data[SC_WARM]) status_change_end(&sd->bl, SC_SUN_COMFORT, INVALID_TIMER);
status_change_end(&sd->bl, SC_WARM, INVALID_TIMER); status_change_end(&sd->bl, SC_MOON_COMFORT, INVALID_TIMER);
if (sd->sc.data[SC_SUN_COMFORT]) status_change_end(&sd->bl, SC_STAR_COMFORT, INVALID_TIMER);
status_change_end(&sd->bl, SC_SUN_COMFORT, INVALID_TIMER); status_change_end(&sd->bl, SC_MIRACLE, INVALID_TIMER);
if (sd->sc.data[SC_MOON_COMFORT])
status_change_end(&sd->bl, SC_MOON_COMFORT, INVALID_TIMER);
if (sd->sc.data[SC_STAR_COMFORT])
status_change_end(&sd->bl, SC_STAR_COMFORT, INVALID_TIMER);
if (sd->sc.data[SC_MIRACLE])
status_change_end(&sd->bl, SC_MIRACLE, INVALID_TIMER);
if (sd->sc.data[SC_KNOWLEDGE]) { if (sd->sc.data[SC_KNOWLEDGE]) {
struct status_change_entry *sce = sd->sc.data[SC_KNOWLEDGE]; struct status_change_entry *sce = sd->sc.data[SC_KNOWLEDGE];
if (sce->timer != INVALID_TIMER) if (sce->timer != INVALID_TIMER)
@ -7241,8 +7235,7 @@ int pc_unequipitem(struct map_session_data *sd,int n,int flag)
sd->status.weapon = sd->weapontype2; sd->status.weapon = sd->weapontype2;
pc_calcweapontype(sd); pc_calcweapontype(sd);
clif_changelook(&sd->bl,LOOK_WEAPON,sd->status.weapon); clif_changelook(&sd->bl,LOOK_WEAPON,sd->status.weapon);
if(sd->sc.data[SC_DANCING]) //When unequipping, stop dancing. [Skotlex] status_change_end(&sd->bl, SC_DANCING, INVALID_TIMER); //When unequipping, stop dancing. [Skotlex]
status_change_end(&sd->bl, SC_DANCING, INVALID_TIMER);
} }
if(sd->status.inventory[n].equip & EQP_HAND_L) { if(sd->status.inventory[n].equip & EQP_HAND_L) {
sd->status.shield = sd->weapontype2 = 0; sd->status.shield = sd->weapontype2 = 0;
@ -7272,10 +7265,8 @@ int pc_unequipitem(struct map_session_data *sd,int n,int flag)
if(sd->status.inventory[n].equip & EQP_ARMOR) { if(sd->status.inventory[n].equip & EQP_ARMOR) {
// On Armor Change... // On Armor Change...
if( sd->sc.data[SC_BENEDICTIO] ) status_change_end(&sd->bl, SC_BENEDICTIO, INVALID_TIMER);
status_change_end(&sd->bl, SC_BENEDICTIO, INVALID_TIMER); status_change_end(&sd->bl, SC_ARMOR_RESIST, INVALID_TIMER);
if( sd->sc.data[SC_ARMOR_RESIST] )
status_change_end(&sd->bl, SC_ARMOR_RESIST, INVALID_TIMER);
} }
if( sd->state.autobonus&sd->status.inventory[n].equip ) if( sd->state.autobonus&sd->status.inventory[n].equip )
@ -7735,8 +7726,7 @@ int map_night_timer(int tid, unsigned int tick, int id, intptr data)
void pc_setstand(struct map_session_data *sd){ void pc_setstand(struct map_session_data *sd){
nullpo_retv(sd); nullpo_retv(sd);
if(sd->sc.data[SC_TENSIONRELAX]) status_change_end(&sd->bl, SC_TENSIONRELAX, INVALID_TIMER);
status_change_end(&sd->bl, SC_TENSIONRELAX, INVALID_TIMER);
//Reset sitting tick. //Reset sitting tick.
sd->ssregen.tick.hp = sd->ssregen.tick.sp = 0; sd->ssregen.tick.hp = sd->ssregen.tick.sp = 0;

View File

@ -2338,8 +2338,7 @@ static int skill_timerskill(int tid, unsigned int tick, int id, intptr data)
} else { } else {
struct status_change *sc = status_get_sc(src); struct status_change *sc = status_get_sc(src);
if(sc) { if(sc) {
if(sc->data[SC_MAGICPOWER]) status_change_end(src, SC_MAGICPOWER, INVALID_TIMER);
status_change_end(src, SC_MAGICPOWER, INVALID_TIMER);
if(sc->data[SC_SPIRIT] && if(sc->data[SC_SPIRIT] &&
sc->data[SC_SPIRIT]->val2 == SL_WIZARD && sc->data[SC_SPIRIT]->val2 == SL_WIZARD &&
sc->data[SC_SPIRIT]->val3 == skl->skill_id) sc->data[SC_SPIRIT]->val3 == skl->skill_id)
@ -2662,16 +2661,14 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
case MO_INVESTIGATE: case MO_INVESTIGATE:
skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag); skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
if (sc && sc->data[SC_BLADESTOP]) status_change_end(src, SC_BLADESTOP, INVALID_TIMER);
status_change_end(src, SC_BLADESTOP, INVALID_TIMER);
break; break;
case RG_BACKSTAP: case RG_BACKSTAP:
{ {
int dir = map_calc_dir(src, bl->x, bl->y), t_dir = unit_getdir(bl); int dir = map_calc_dir(src, bl->x, bl->y), t_dir = unit_getdir(bl);
if ((!check_distance_bl(src, bl, 0) && !map_check_dir(dir, t_dir)) || bl->type == BL_SKILL) { if ((!check_distance_bl(src, bl, 0) && !map_check_dir(dir, t_dir)) || bl->type == BL_SKILL) {
if (sc && sc->data[SC_HIDING]) status_change_end(src, SC_HIDING, INVALID_TIMER);
status_change_end(src, SC_HIDING, INVALID_TIMER);
skill_attack(BF_WEAPON, src, src, bl, skillid, skilllv, tick, flag); skill_attack(BF_WEAPON, src, src, bl, skillid, skilllv, tick, flag);
dir = dir < 4 ? dir+4 : dir-4; // change direction [Celest] dir = dir < 4 ? dir+4 : dir-4; // change direction [Celest]
unit_setdir(bl,dir); unit_setdir(bl,dir);
@ -2688,14 +2685,12 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
for (i = 1; i < sd->spiritball_old; i++) for (i = 1; i < sd->spiritball_old; i++)
skill_addtimerskill(src, tick + i * 200, bl->id, 0, 0, skillid, skilllv, BF_WEAPON, flag); skill_addtimerskill(src, tick + i * 200, bl->id, 0, 0, skillid, skilllv, BF_WEAPON, flag);
} }
if (sc && sc->data[SC_BLADESTOP]) status_change_end(src, SC_BLADESTOP, INVALID_TIMER);
status_change_end(src, SC_BLADESTOP, INVALID_TIMER);
break; break;
case MO_CHAINCOMBO: case MO_CHAINCOMBO:
skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag); skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
if (sc && sc->data[SC_BLADESTOP]) status_change_end(src, SC_BLADESTOP, INVALID_TIMER);
status_change_end(src, SC_BLADESTOP, INVALID_TIMER);
break; break;
case NJ_ISSEN: case NJ_ISSEN:
@ -2991,8 +2986,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
break; break;
case SL_SMA: case SL_SMA:
if (sc && sc->data[SC_SMA]) status_change_end(src, SC_SMA, INVALID_TIMER);
status_change_end(src, SC_SMA, INVALID_TIMER);
case SL_STIN: case SL_STIN:
case SL_STUN: case SL_STUN:
if (sd && !battle_config.allow_es_magic_pc && bl->type != BL_MOB) { if (sd && !battle_config.allow_es_magic_pc && bl->type != BL_MOB) {
@ -3065,8 +3059,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
if (unit_movepos(src, x, y, 0, 0)) if (unit_movepos(src, x, y, 0, 0))
clif_slide(src,src->x,src->y); clif_slide(src,src->x,src->y);
} }
if (sc && sc->data[SC_HIDING]) status_change_end(src, SC_HIDING, INVALID_TIMER);
status_change_end(src, SC_HIDING, INVALID_TIMER);
skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag); skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
break; break;
case 0: case 0:
@ -3698,8 +3691,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
case NJ_BUNSINJYUTSU: case NJ_BUNSINJYUTSU:
clif_skill_nodamage(src,bl,skillid,skilllv, clif_skill_nodamage(src,bl,skillid,skilllv,
sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv)));
if (tsc && tsc->data[SC_NEN]) status_change_end(bl, SC_NEN, INVALID_TIMER);
status_change_end(bl, SC_NEN, INVALID_TIMER);
break; break;
/* Was modified to only affect targetted char. [Skotlex] /* Was modified to only affect targetted char. [Skotlex]
case HP_ASSUMPTIO: case HP_ASSUMPTIO:
@ -3804,12 +3796,10 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
if( tsc && tsc->count ) if( tsc && tsc->count )
{ {
if( tsc->data[SC_FREEZE] ) status_change_end(bl, SC_FREEZE, INVALID_TIMER);
status_change_end(bl, SC_FREEZE, INVALID_TIMER);
if( tsc->data[SC_STONE] && tsc->opt1 == OPT1_STONE ) if( tsc->data[SC_STONE] && tsc->opt1 == OPT1_STONE )
status_change_end(bl, SC_STONE, INVALID_TIMER); status_change_end(bl, SC_STONE, INVALID_TIMER);
if( tsc->data[SC_SLEEP] ) status_change_end(bl, SC_SLEEP, INVALID_TIMER);
status_change_end(bl, SC_SLEEP, INVALID_TIMER);
} }
if( dstmd ) if( dstmd )
@ -4642,8 +4632,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
case AM_CP_HELM: case AM_CP_HELM:
{ {
enum sc_type scid = (sc_type)(SC_STRIPWEAPON + (skillid - AM_CP_WEAPON)); enum sc_type scid = (sc_type)(SC_STRIPWEAPON + (skillid - AM_CP_WEAPON));
if(tsc && tsc->data[scid]) status_change_end(bl, scid, INVALID_TIMER);
status_change_end(bl, scid, INVALID_TIMER);
clif_skill_nodamage(src,bl,skillid,skilllv, clif_skill_nodamage(src,bl,skillid,skilllv,
sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv)));
} }
@ -5226,12 +5215,10 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
unit_skillcastcancel(bl,0); unit_skillcastcancel(bl,0);
if(tsc && tsc->count){ if(tsc && tsc->count){
if(tsc->data[SC_FREEZE]) status_change_end(bl, SC_FREEZE, INVALID_TIMER);
status_change_end(bl, SC_FREEZE, INVALID_TIMER);
if(tsc->data[SC_STONE] && tsc->opt1 == OPT1_STONE) if(tsc->data[SC_STONE] && tsc->opt1 == OPT1_STONE)
status_change_end(bl, SC_STONE, INVALID_TIMER); status_change_end(bl, SC_STONE, INVALID_TIMER);
if(tsc->data[SC_SLEEP]) status_change_end(bl, SC_SLEEP, INVALID_TIMER);
status_change_end(bl, SC_SLEEP, INVALID_TIMER);
} }
if(dstmd) if(dstmd)
@ -5298,8 +5285,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
break; break;
} }
for (i=0; i<4; i++) { for (i=0; i<4; i++) {
if(tsc->data[SC_STRIPWEAPON + i]) status_change_end(bl, (sc_type)(SC_STRIPWEAPON + i), INVALID_TIMER);
status_change_end(bl, (sc_type)(SC_STRIPWEAPON + i), INVALID_TIMER);
sc_start(bl,(sc_type)(SC_CP_WEAPON + i),100,skilllv,skilltime); sc_start(bl,(sc_type)(SC_CP_WEAPON + i),100,skilllv,skilltime);
} }
clif_skill_nodamage(src,bl,skillid,skilllv,1); clif_skill_nodamage(src,bl,skillid,skilllv,1);
@ -5985,10 +5971,8 @@ int skill_castend_id(int tid, unsigned int tick, int id, intptr data)
sc = &sd->sc; sc = &sd->sc;
if (sc->count) if (sc->count)
{ //End states { //End states
if (sc->data[SC_EXPLOSIONSPIRITS]) status_change_end(src, SC_EXPLOSIONSPIRITS, INVALID_TIMER);
status_change_end(src, SC_EXPLOSIONSPIRITS, INVALID_TIMER); status_change_end(src, SC_BLADESTOP, INVALID_TIMER);
if (sc->data[SC_BLADESTOP])
status_change_end(src, SC_BLADESTOP, INVALID_TIMER);
} }
if (target && target->m == src->m) if (target && target->m == src->m)
{ //Move character to target anyway. { //Move character to target anyway.
@ -6409,8 +6393,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, int skillid, int sk
unit_movepos(src, x, y, 1, 0); unit_movepos(src, x, y, 1, 0);
clif_slide(src,x,y); clif_slide(src,x,y);
} }
if (sc && sc->data[SC_HIDING]) status_change_end(src, SC_HIDING, INVALID_TIMER);
status_change_end(src, SC_HIDING, INVALID_TIMER);
break; break;
case AM_SPHEREMINE: case AM_SPHEREMINE:
case AM_CANNIBALIZE: case AM_CANNIBALIZE:
@ -6579,8 +6562,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, int skillid, int sk
return 1; return 1;
} }
if (sc && sc->data[SC_MAGICPOWER]) status_change_end(src, SC_MAGICPOWER, INVALID_TIMER);
status_change_end(src, SC_MAGICPOWER, INVALID_TIMER);
if( sd ) if( sd )
{ {

View File

@ -5001,8 +5001,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
//TO-DO Blessing and Agi up should do 1 damage against players on Undead Status, even on PvM //TO-DO Blessing and Agi up should do 1 damage against players on Undead Status, even on PvM
//but cannot be plagiarized (this requires aegis investigation on packets and official behavior) [Brainstorm] //but cannot be plagiarized (this requires aegis investigation on packets and official behavior) [Brainstorm]
if ((!undead_flag && status->race!=RC_DEMON) || bl->type == BL_PC) { if ((!undead_flag && status->race!=RC_DEMON) || bl->type == BL_PC) {
if (sc->data[SC_CURSE]) status_change_end(bl, SC_CURSE, INVALID_TIMER);
status_change_end(bl, SC_CURSE, INVALID_TIMER);
if (sc->data[SC_STONE] && sc->opt1 == OPT1_STONE) if (sc->data[SC_STONE] && sc->opt1 == OPT1_STONE)
status_change_end(bl, SC_STONE, INVALID_TIMER); status_change_end(bl, SC_STONE, INVALID_TIMER);
} }
@ -7395,8 +7394,7 @@ int status_change_clear_buffs (struct block_list* bl, int type)
if (type&2) //Debuffs if (type&2) //Debuffs
for( i = SC_COMMON_MIN; i <= SC_COMMON_MAX; i++ ) for( i = SC_COMMON_MIN; i <= SC_COMMON_MAX; i++ )
{ {
if(sc->data[i]) status_change_end(bl, (sc_type)i, INVALID_TIMER);
status_change_end(bl, (sc_type)i, INVALID_TIMER);
} }
for( i = SC_COMMON_MAX+1; i < SC_MAX; i++ ) for( i = SC_COMMON_MAX+1; i < SC_MAX; i++ )