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 {