diff options
-rw-r--r-- | src/map/script-fun.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/map/script-fun.cpp b/src/map/script-fun.cpp index e1866bc..8292bdb 100644 --- a/src/map/script-fun.cpp +++ b/src/map/script-fun.cpp @@ -1121,6 +1121,7 @@ void builtin_foreach(ScriptState *st) x1, y1, block_type); } + /*======================================== * Destructs a temp NPC *---------------------------------------- @@ -1129,6 +1130,8 @@ static void builtin_destroy(ScriptState *st) { BlockId id; + dumb_ptr<map_session_data> sd; + if (HARG(0)) id = wrap<BlockId>(conv_num(st, &AARG(0))); else @@ -1138,6 +1141,14 @@ void builtin_destroy(ScriptState *st) if(!nd || nd->npc_subtype != NpcSubtype::SCRIPT) return; + /* If we have a player attached, make sure it is cleared. */ + /* Not safe to call destroy if others may also be paused on this NPC! */ + if (st->rid) { + sd = script_rid2sd(st); + nullpo_retv(sd); + npc_event_dequeue(sd); + } + nd = nd->is_script(); npc_free(nd); st->oid = BlockId(); |