summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorInkfish <Inkfish@54d463be-8e91-2dee-dedb-b68131a5f0ec>2009-05-22 15:36:41 +0000
committerInkfish <Inkfish@54d463be-8e91-2dee-dedb-b68131a5f0ec>2009-05-22 15:36:41 +0000
commita4238c21464e3bf61150795d49f9478293cae586 (patch)
tree6a57b1b11073ef6175de38fb37a3c1d334366e56 /src
parent4b9b06cc7dad8a7dd9ba729fbed753b7acd49367 (diff)
downloadhercules-a4238c21464e3bf61150795d49f9478293cae586.tar.gz
hercules-a4238c21464e3bf61150795d49f9478293cae586.tar.bz2
hercules-a4238c21464e3bf61150795d49f9478293cae586.tar.xz
hercules-a4238c21464e3bf61150795d49f9478293cae586.zip
NPC_STOP now stops both sides and will be canceled if either side teleports or dies.(bugreport:3099)
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@13803 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src')
-rw-r--r--src/map/skill.c6
-rw-r--r--src/map/status.c9
-rw-r--r--src/map/unit.c3
3 files changed, 16 insertions, 2 deletions
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) {