summaryrefslogtreecommitdiff
path: root/plugins/Dfusion
diff options
context:
space:
mode:
authorWarmist2012-04-03 16:17:43 +0300
committerWarmist2012-04-03 16:17:43 +0300
commit8e1d26ff97d6f709cb95387c91d6dc581472fd4a (patch)
tree06cc9e02d1d721a7819c8b9de6016791ab9d8309 /plugins/Dfusion
parent59d1971df163ffeb97873b9290e3fc6864d5bf50 (diff)
downloaddfhack-8e1d26ff97d6f709cb95387c91d6dc581472fd4a.tar.gz
dfhack-8e1d26ff97d6f709cb95387c91d6dc581472fd4a.tar.bz2
dfhack-8e1d26ff97d6f709cb95387c91d6dc581472fd4a.tar.xz
Added ability to call dfuse as a hotkey.
E.g. calling dfuse "tools.empregnate()" now works.
Diffstat (limited to 'plugins/Dfusion')
-rw-r--r--plugins/Dfusion/include/lua_Misc.h1
-rw-r--r--plugins/Dfusion/luafiles/init.lua10
-rw-r--r--plugins/Dfusion/luafiles/onfunction/locations.lua3
-rw-r--r--plugins/Dfusion/luafiles/onfunction/plugin.lua5
-rw-r--r--plugins/Dfusion/src/lua_Misc.cpp16
5 files changed, 28 insertions, 7 deletions
diff --git a/plugins/Dfusion/include/lua_Misc.h b/plugins/Dfusion/include/lua_Misc.h
index 4df1f362..b39d6021 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 0cab4c31..57014e51 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 7849fc45..362bfd7a 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 7c76af12..60360817 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 0e1bfac0..b58efc7a 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<lua::nil>())
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<uint32_t>();
}
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<lua::number>(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<int>(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)