summaryrefslogtreecommitdiff
path: root/src/map/script-call.cpp
diff options
context:
space:
mode:
authormekolat <mekolat@users.noreply.github.com>2015-06-18 01:56:31 -0500
committermekolat <mekolat@users.noreply.github.com>2016-04-15 11:45:02 -0400
commitef4ae4d281127a0b84a73ab034bd22d6281a09ed (patch)
tree9c85593f052f354fa88c633c1b0cdd5ebad7ceb4 /src/map/script-call.cpp
parent87312fe719956671a77a3c78021e821c679764fe (diff)
downloadtmwa-ef4ae4d281127a0b84a73ab034bd22d6281a09ed.tar.gz
tmwa-ef4ae4d281127a0b84a73ab034bd22d6281a09ed.tar.bz2
tmwa-ef4ae4d281127a0b84a73ab034bd22d6281a09ed.tar.xz
tmwa-ef4ae4d281127a0b84a73ab034bd22d6281a09ed.zip
implement puppet npcs
Diffstat (limited to 'src/map/script-call.cpp')
-rw-r--r--src/map/script-call.cpp22
1 files changed, 21 insertions, 1 deletions
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<map_session_data> sd = map_id2sd(rid);
+ dumb_ptr<block_list> bl = map_id2bl(rid);
+ dumb_ptr<map_session_data> sd = bl? bl->is_player(): nullptr;
+ if (oid)
+ {
+ dumb_ptr<block_list> oid_bl = map_id2bl(oid);
+ if (oid_bl->bl_type == BL::NPC)
+ {
+ dumb_ptr<npc_data> nd = oid_bl->is_npc();
+ if(nd->npc_subtype == NpcSubtype::SCRIPT)
+ {
+ dumb_ptr<npc_data_script> nds = nd->is_script();
+ if (nds->scr.parent)
+ {
+ dumb_ptr<npc_data_script> 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<const ScriptBuffer> 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() == '$')