diff --git a/plugins/Dfusion/include/lua_Misc.h b/plugins/Dfusion/include/lua_Misc.h index 4df1f3629..b39d60214 100644 --- a/plugins/Dfusion/include/lua_Misc.h +++ b/plugins/Dfusion/include/lua_Misc.h @@ -8,6 +8,7 @@ #include "luamain.h" #include "OutFile.h" #include "functioncall.h" +#include "LuaTools.h" namespace lua { diff --git a/plugins/Dfusion/luafiles/init.lua b/plugins/Dfusion/luafiles/init.lua index 0cab4c31d..57014e510 100644 --- a/plugins/Dfusion/luafiles/init.lua +++ b/plugins/Dfusion/luafiles/init.lua @@ -84,7 +84,15 @@ table.insert(plugins,{"saves","run current worlds's init.lua",RunSaved}) loadall(plugins) dofile_silent("dfusion/initcustom.lua") - +local args={...} +for k,v in pairs(args) do + local f,err=load(v) + if f then + f() + else + Console.printerr(err) + end +end if not INIT then mainmenu(plugins) end diff --git a/plugins/Dfusion/luafiles/onfunction/locations.lua b/plugins/Dfusion/luafiles/onfunction/locations.lua index 7849fc45d..362bfd7ab 100644 --- a/plugins/Dfusion/luafiles/onfunction/locations.lua +++ b/plugins/Dfusion/luafiles/onfunction/locations.lua @@ -8,7 +8,8 @@ if WINDOWS then --windows function defintions onfunction.AddFunction(0x5af826+offsets.base(),"Hurt",{target="esi",attacker={off=0x74,rtype=DWORD,reg="esp"}}) onfunction.AddFunction(0x3D5886+offsets.base(),"Flip",{building="esi"}) onfunction.AddFunction(0x35E340+offsets.base(),"ItemCreate")--]=] - onfunction.AddFunction(4B34B6+offsets.base(),"ReactionFinish") --esp item. Ecx creature, edx? + --onfunction.AddFunction(0x4B34B6+offsets.base(),"ReactionFinish") --esp item. Ecx creature, edx? 0.34.07 + onfunction.AddFunction(0x72aB6+offsets.base(),"Die",{creature="edi"}) --0.34.07 else --linux --[=[onfunction.AddFunction(0x899befe+offsets.base(),"Move") -- found out by attaching watch... onfunction.AddFunction(0x850eecd+offsets.base(),"Die",{creature="ebx"}) -- same--]=] diff --git a/plugins/Dfusion/luafiles/onfunction/plugin.lua b/plugins/Dfusion/luafiles/onfunction/plugin.lua index 7c76af122..60360817c 100644 --- a/plugins/Dfusion/luafiles/onfunction/plugin.lua +++ b/plugins/Dfusion/luafiles/onfunction/plugin.lua @@ -1,8 +1,9 @@ mypos=engine.getmod("functions") function DeathMsg(values) local name - name=engine.peek(values[onfunction.hints["Die"].creature],ptt_dfstring) - print(name:getval().." died") + local u=engine.cast(df.unit,values[onfunction.hints["Die"].creature]) + + print(u.name.first_name.." died") end if mypos then print("Onfunction already installed") diff --git a/plugins/Dfusion/src/lua_Misc.cpp b/plugins/Dfusion/src/lua_Misc.cpp index 0e1bfac0d..b58efc7ac 100644 --- a/plugins/Dfusion/src/lua_Misc.cpp +++ b/plugins/Dfusion/src/lua_Misc.cpp @@ -151,8 +151,6 @@ static size_t __stdcall PushValue(size_t ret,uint32_t eax,uint32_t ebx,uint32_t #endif { lua::state st=lua::glua::Get(); - st.getglobal("err"); - int perr=st.gettop(); st.getglobal("OnFunction"); if(st.is()) return 0; @@ -175,7 +173,7 @@ static size_t __stdcall PushValue(size_t ret,uint32_t eax,uint32_t ebx,uint32_t st.setfield("ebp"); st.push(ret); st.setfield("ret"); - st.pcall(1,1,perr); + DFHack::Lua::SafeCall(DFHack::Core::getInstance().getConsole(),st,1,1); return st.as(); } static int Get_PushValue(lua_State *L) @@ -210,6 +208,17 @@ static int Resume_Df(lua_State *L) DFHack::Core::getInstance().Resume(); return 0; } +static int Cast(lua_State *L) +{ + lua::state st(L); + if(DFHack::Lua::IsDFObject(st,1)!=DFHack::Lua::OBJ_TYPE) + st.error("First argument must be df type!"); + if(!st.is(2)) //todo maybe lightuserdata? + st.error("Second argument must be pointer as a number!"); + st.getfield("_identity",1); + DFHack::Lua::PushDFObject(st,(DFHack::type_identity*)lua_touserdata(st,-1),(void*)st.as(2)); + return 1; +} const luaL_Reg lua_misc_func[]= { {"alloc",lua_malloc}, @@ -224,6 +233,7 @@ const luaL_Reg lua_misc_func[]= {"calldf",Call_Df}, {"suspend",Suspend_Df}, {"resume",Resume_Df}, + {"cast",Cast}, {NULL,NULL} }; void lua::RegisterMisc(lua::state &st)