From 55a97f4605a263f4b670b447cd4af9ffa1a8d472 Mon Sep 17 00:00:00 2001 From: sapier Date: Sun, 5 May 2013 01:44:55 +0200 Subject: Allow nil as puncher e.g. to do damage by tnt --- src/scriptapi_object.cpp | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) (limited to 'src/scriptapi_object.cpp') diff --git a/src/scriptapi_object.cpp b/src/scriptapi_object.cpp index 4dfdeb8c8..851f1761f 100644 --- a/src/scriptapi_object.cpp +++ b/src/scriptapi_object.cpp @@ -182,21 +182,30 @@ int ObjectRef::l_moveto(lua_State *L) int ObjectRef::l_punch(lua_State *L) { ObjectRef *ref = checkobject(L, 1); - ObjectRef *puncher_ref = checkobject(L, 2); ServerActiveObject *co = getobject(ref); - ServerActiveObject *puncher = getobject(puncher_ref); if(co == NULL) return 0; - if(puncher == NULL) return 0; - v3f dir; - if(lua_type(L, 5) != LUA_TTABLE) + + ServerActiveObject *puncher = 0; + v3f dir(0,0,0); + + if (!lua_isnil(L,2)) { + ObjectRef *puncher_ref = checkobject(L, 2); + puncher = getobject(puncher_ref); + if(puncher == NULL) return 0; + dir = co->getBasePosition() - puncher->getBasePosition(); - else - dir = read_v3f(L, 5); + } + float time_from_last_punch = 1000000; if(lua_isnumber(L, 3)) time_from_last_punch = lua_tonumber(L, 3); + ToolCapabilities toolcap = read_tool_capabilities(L, 4); + + if(lua_type(L, 5) == LUA_TTABLE) + dir = read_v3f(L, 5); dir.normalize(); + // Do it co->punch(dir, &toolcap, puncher, time_from_last_punch); return 0; -- cgit v1.2.3