diff --git a/src/map/map.cpp b/src/map/map.cpp index abe97788d3..6b923687d3 100644 --- a/src/map/map.cpp +++ b/src/map/map.cpp @@ -413,17 +413,21 @@ int map_moveblock(struct block_list *bl, int x1, int y1, unsigned int tick) sc = status_get_sc(bl); skill_unit_move(bl,tick,2); - 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); - 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); + if ( sc && sc->count ) //at least one to cancel + { + status_change_end(bl, SC_ROLLINGCUTTER, INVALID_TIMER); // If you move, you lose your counters. [malufett] + 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); + 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); + } } else if (bl->type == BL_NPC) npc_unsetcells((TBL_NPC*)bl); diff --git a/src/map/skill.cpp b/src/map/skill.cpp index 547c83a34d..38525284a5 100755 --- a/src/map/skill.cpp +++ b/src/map/skill.cpp @@ -11325,11 +11325,11 @@ int skill_castend_id(int tid, unsigned int tick, int id, intptr_t data) else skill_castend_damage_id(src,target,ud->skill_id,ud->skill_lv,tick,flag); - if (ud->skill_id != RA_CAMOUFLAGE) - status_change_end(src, SC_CAMOUFLAGE, INVALID_TIMER); // Applies to the first skill if active - 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 + if(sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_WIZARD && sc->data[SC_SPIRIT]->val3 == ud->skill_id && @@ -18112,9 +18112,13 @@ int skill_delunitgroup_(struct skill_unit_group *group, const char* file, int li case NC_NEUTRALBARRIER: { struct status_change *sc = NULL; - if( (sc = status_get_sc(src)) != NULL && sc->data[SC_NEUTRALBARRIER_MASTER] ) { - sc->data[SC_NEUTRALBARRIER_MASTER]->val2 = 0; - status_change_end(src,SC_NEUTRALBARRIER_MASTER,INVALID_TIMER); + if( (sc = status_get_sc(src)) != NULL ) { + 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,INVALID_TIMER); } } break; diff --git a/src/map/unit.cpp b/src/map/unit.cpp index 4e0596b727..6d5b5879a9 100644 --- a/src/map/unit.cpp +++ b/src/map/unit.cpp @@ -406,7 +406,6 @@ static int unit_walktoxy_timer(int tid, unsigned int tick, int id, intptr_t data y += dy; map_moveblock(bl, x, y, tick); ud->walk_count++; // Walked cell counter, to be used for walk-triggered skills. [Skotlex] - status_change_end(bl, SC_ROLLINGCUTTER, INVALID_TIMER); // If you move, you lose your counters. [malufett] if (bl->x != x || bl->y != y || ud->walktimer != INVALID_TIMER) return 0; // map_moveblock has altered the object beyond what we expected (moved/warped it) @@ -2878,11 +2877,6 @@ int unit_remove_map_(struct block_list *bl, clr_type clrtype, const char* file, status_change_end(bl, SC_SUHIDE, INVALID_TIMER); } - if (bl->type&(BL_CHAR|BL_PET)) { - skill_unit_move(bl,gettick(),4); - skill_cleartimerskill(bl); - } - switch( bl->type ) { case BL_PC: { struct map_session_data *sd = (struct map_session_data*)bl; @@ -3066,6 +3060,10 @@ int unit_remove_map_(struct block_list *bl, clr_type clrtype, const char* file, break;// do nothing } + if (bl->type&(BL_CHAR|BL_PET)) { + skill_unit_move(bl,gettick(),4); + skill_cleartimerskill(bl); + } // /BL_MOB is handled by mob_dead unless the monster is not dead. if( bl->type != BL_MOB || !status_isdead(bl) ) clif_clearunit_area(bl,clrtype);