diff options
author | sapier <Sapier at GMX dot net> | 2013-05-05 01:44:55 +0200 |
---|---|---|
committer | PilzAdam <pilzadam@minetest.net> | 2013-05-20 01:18:45 +0200 |
commit | 55a97f4605a263f4b670b447cd4af9ffa1a8d472 (patch) | |
tree | 86b22a0d22480324c1732a883d71f34dbbc6506a | |
parent | 3e2efdf18ab95d3c88f66c7a1f6caf6b1c7231e5 (diff) | |
download | minetest-55a97f4605a263f4b670b447cd4af9ffa1a8d472.tar.gz minetest-55a97f4605a263f4b670b447cd4af9ffa1a8d472.tar.bz2 minetest-55a97f4605a263f4b670b447cd4af9ffa1a8d472.zip |
Allow nil as puncher e.g. to do damage by tnt
-rw-r--r-- | src/content_sao.cpp | 15 | ||||
-rw-r--r-- | src/scriptapi_object.cpp | 23 |
2 files changed, 29 insertions, 9 deletions
diff --git a/src/content_sao.cpp b/src/content_sao.cpp index 24a9186f7..47b94a5d9 100644 --- a/src/content_sao.cpp +++ b/src/content_sao.cpp @@ -673,8 +673,14 @@ int LuaEntitySAO::punch(v3f dir, { setHP(getHP() - result.damage); + + std::string punchername = "nil"; + + if ( puncher != 0 ) + punchername = puncher->getDescription(); + actionstream<<getDescription()<<" punched by " - <<puncher->getDescription()<<", damage "<<result.damage + <<punchername<<", damage "<<result.damage <<" hp, health now "<<getHP()<<" hp"<<std::endl; { @@ -1307,8 +1313,13 @@ int PlayerSAO::punch(v3f dir, HitParams hitparams = getHitParams(m_armor_groups, toolcap, time_from_last_punch); + std::string punchername = "nil"; + + if ( puncher != 0 ) + punchername = puncher->getDescription(); + actionstream<<"Player "<<m_player->getName()<<" punched by " - <<puncher->getDescription()<<", damage "<<hitparams.hp + <<punchername<<", damage "<<hitparams.hp <<" HP"<<std::endl; setHP(getHP() - hitparams.hp); 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; |