Index: src/map/script.c
===================================================================
--- src/map/script.c (revision 16799)
+++ src/map/script.c (working copy)
@@ -9660,12 +9660,15 @@
int tick;
int val1;
int val4 = 0;
+ int dispell = 0;
type = (sc_type)script_getnum(st,2);
tick = script_getnum(st,3);
val1 = script_getnum(st,4);
if( script_hasdata(st,5) )
- bl = map_id2bl(script_getnum(st,5));
+ dispell = script_getnum(st,5);
+ if( script_hasdata(st,6) )
+ bl = map_id2bl(script_getnum(st,6));
else
bl = map_id2bl(st->rid);
@@ -9682,7 +9685,7 @@
}
if( bl )
- status_change_start(bl, type, 10000, val1, 0, 0, val4, tick, 2);
+ status_change_start(bl, type, 10000, val1, 0, 0, val4, tick, dispell?18:2);
return 0;
}
@@ -17112,7 +17115,7 @@
BUILDIN_DEF(disablenpc,"s"),
BUILDIN_DEF(hideoffnpc,"s"),
BUILDIN_DEF(hideonnpc,"s"),
- BUILDIN_DEF(sc_start,"iii?"),
+ BUILDIN_DEF(sc_start,"iii??"),
BUILDIN_DEF(sc_start2,"iiii?"),
BUILDIN_DEF(sc_start4,"iiiiii?"),
BUILDIN_DEF(sc_end,"i?"),
Index: src/map/status.c
===================================================================
--- src/map/status.c (revision 16799)
+++ src/map/status.c (working copy)
@@ -8581,6 +8584,7 @@
sce->val2 = val2;
sce->val3 = val3;
sce->val4 = val4;
+ sce->dispell = flag&16?1:0;
if (tick >= 0)
sce->timer = add_timer(gettick() + tick, status_change_timer, bl->id, type);
else
@@ -8801,6 +8805,9 @@
if (sce->timer != tid && tid != INVALID_TIMER)
return 0;
+
+ if(sce->dispell)
+ return 0;
if (tid == INVALID_TIMER) {
if (type == SC_ENDURE && sce->val4)
Index: src/map/status.h
===================================================================
--- src/map/status.h (revision 16799)
+++ src/map/status.h (working copy)
@@ -1608,6 +1608,7 @@
struct status_change_entry {
int timer;
int val1,val2,val3,val4;
+ int dispell;
};
struct status_change {