From ef4ae4d281127a0b84a73ab034bd22d6281a09ed Mon Sep 17 00:00:00 2001 From: mekolat Date: Thu, 18 Jun 2015 01:56:31 -0500 Subject: implement puppet npcs --- src/map/script-call.cpp | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'src/map/script-call.cpp') diff --git a/src/map/script-call.cpp b/src/map/script-call.cpp index 54f6c01..b8f531a 100644 --- a/src/map/script-call.cpp +++ b/src/map/script-call.cpp @@ -876,7 +876,26 @@ int run_script_l(ScriptPointer sp, BlockId rid, BlockId oid, { struct script_stack stack; ScriptState st; - dumb_ptr sd = map_id2sd(rid); + dumb_ptr bl = map_id2bl(rid); + dumb_ptr sd = bl? bl->is_player(): nullptr; + if (oid) + { + dumb_ptr oid_bl = map_id2bl(oid); + if (oid_bl->bl_type == BL::NPC) + { + dumb_ptr nd = oid_bl->is_npc(); + if(nd->npc_subtype == NpcSubtype::SCRIPT) + { + dumb_ptr nds = nd->is_script(); + if (nds->scr.parent) + { + dumb_ptr parent = map_id2bl(nds->scr.parent)->is_npc()->is_script(); + assert(parent->bl_type == BL::NPC && parent->npc_subtype == NpcSubtype::SCRIPT); + sp = ScriptPointer(borrow(*parent->scr.script), sp.pos); + } + } + } + } P rootscript = TRY_UNWRAP(sp.code, return -1); int i; if (sp.pos >> 24) @@ -892,6 +911,7 @@ int run_script_l(ScriptPointer sp, BlockId rid, BlockId oid, st.scriptp = sp; st.rid = rid; st.oid = oid; + for (i = 0; i < args.size(); i++) { if (args[i].name.back() == '$') -- cgit v1.2.3-60-g2f50