diff options
-rw-r--r-- | Changelog-Trunk.txt | 1 | ||||
-rw-r--r-- | src/map/skill.c | 6 | ||||
-rw-r--r-- | src/map/status.c | 9 | ||||
-rw-r--r-- | src/map/unit.c | 3 |
4 files changed, 17 insertions, 2 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 2c945eea3..23096c3b1 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -12,6 +12,7 @@ IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. - Splash attack doesn't cause any status effects or autocasts any more. * The delay icon doesn't appear during casting now. * Status icon of ASPD potions doesn't overriding each other now. + * NPC_STOP now stops both sides and will be canceled if either side teleports or dies.(bugreport:3099) 09/05/20 * Now fiberlocking a fiberlocked target doesn't renew the timer but instead increases its fireweakness [Inkfish] - This makes doublecasting firebolts on a double fiberlocked target having double damage from both 2 bolts possible = =(bugreport:3061) diff --git a/src/map/skill.c b/src/map/skill.c index 208b6afd5..8baf27b95 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -3604,7 +3604,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in case PF_MEMORIZE: case PA_SACRIFICE: case ASC_EDP: - case NPC_STOP: case PF_DOUBLECASTING: case SG_SUN_COMFORT: case SG_MOON_COMFORT: @@ -3621,6 +3620,11 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in clif_skill_nodamage(src,bl,skillid,skilllv, sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); break; + case NPC_STOP: + if( clif_skill_nodamage(src,bl,skillid,skilllv, + sc_start2(bl,type,100,skilllv,src->id,skill_get_time(skillid,skilllv)) ) ) + sc_start2(src,type,100,skilllv,bl->id,skill_get_time(skillid,skilllv)); + break; case HP_ASSUMPTIO: if( sd && dstmd ) clif_skill_fail(sd,skillid,0,0); diff --git a/src/map/status.c b/src/map/status.c index 7fe6b2326..7839330e4 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -6553,6 +6553,15 @@ int status_change_end(struct block_list* bl, enum sc_type type, int tid) // from here it's not neccesary to continue return 1; break; + case SC_STOP: + if( sce->val2 ) + { + 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, -1); + } + break; } opt_flag = 1; diff --git a/src/map/unit.c b/src/map/unit.c index 3dd1b30e4..44dbaf741 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -1750,7 +1750,7 @@ int unit_remove_map_(struct block_list *bl, int clrtype, const char* file, int l status_change_end(bl,SC_BASILICA,-1); status_change_end(bl,SC_ANKLE,-1); status_change_end(bl,SC_TRICKDEAD,-1); - status_change_end(bl,SC_BLADESTOP,-1); + status_change_end(bl,SC_BLADESTOP_WAIT,-1); status_change_end(bl,SC_RUN,-1); skill_stop_dancing(bl); status_change_end(bl,SC_WARM,-1); @@ -1765,6 +1765,7 @@ int unit_remove_map_(struct block_list *bl, int clrtype, const char* file, int l if (sc->data[SC_GOSPEL] && sc->data[SC_GOSPEL]->val4 == BCT_SELF) status_change_end(bl,SC_GOSPEL,-1); status_change_end(bl,SC_CHANGE,-1); + status_change_end(bl,SC_STOP,-1); } if (bl->type&BL_CHAR) { |