diff options
author | Brandon <brandon@bremaweb.com> | 2014-05-16 23:47:12 -0500 |
---|---|---|
committer | est31 <MTest31@outlook.com> | 2015-05-15 11:09:55 +0200 |
commit | c5b4e541749c50805519ce040d98a0a8e5e0ec03 (patch) | |
tree | bbc735720d6ac2e3b27c07c0b6d01ef586d61211 /src/content_sao.cpp | |
parent | 86a963caca9604ad57904e9acd9bef7c46ca47d8 (diff) | |
download | minetest-c5b4e541749c50805519ce040d98a0a8e5e0ec03.tar.gz minetest-c5b4e541749c50805519ce040d98a0a8e5e0ec03.tar.bz2 minetest-c5b4e541749c50805519ce040d98a0a8e5e0ec03.zip |
Add minetest.register_on_punchplayer
Diffstat (limited to 'src/content_sao.cpp')
-rw-r--r-- | src/content_sao.cpp | 39 |
1 files changed, 30 insertions, 9 deletions
diff --git a/src/content_sao.cpp b/src/content_sao.cpp index 0aae7bbc2..c7f4b60c7 100644 --- a/src/content_sao.cpp +++ b/src/content_sao.cpp @@ -1023,15 +1023,15 @@ int PlayerSAO::punch(v3f dir, float time_from_last_punch) { // It's best that attachments cannot be punched - if(isAttached()) + if (isAttached()) return 0; - if(!toolcap) + if (!toolcap) return 0; // No effect if PvP disabled - if(g_settings->getBool("enable_pvp") == false){ - if(puncher->getType() == ACTIVEOBJECT_TYPE_PLAYER){ + if (g_settings->getBool("enable_pvp") == false) { + if (puncher->getType() == ACTIVEOBJECT_TYPE_PLAYER) { std::string str = gob_cmd_punched(0, getHP()); // create message and add to list ActiveObjectMessage aom(getId(), true, str); @@ -1045,14 +1045,35 @@ int PlayerSAO::punch(v3f dir, std::string punchername = "nil"; - if ( puncher != 0 ) + if (puncher != 0) punchername = puncher->getDescription(); - actionstream<<"Player "<<m_player->getName()<<" punched by " - <<punchername<<", damage "<<hitparams.hp - <<" HP"<<std::endl; + PlayerSAO *playersao = m_player->getPlayerSAO(); + + bool damage_handled = m_env->getScriptIface()->on_punchplayer(playersao, + puncher, time_from_last_punch, toolcap, dir, + hitparams.hp); + + if (!damage_handled) { + setHP(getHP() - hitparams.hp); + } else { // override client prediction + if (puncher->getType() == ACTIVEOBJECT_TYPE_PLAYER) { + std::string str = gob_cmd_punched(0, getHP()); + // create message and add to list + ActiveObjectMessage aom(getId(), true, str); + m_messages_out.push(aom); + } + } + - setHP(getHP() - hitparams.hp); + actionstream << "Player " << m_player->getName() << " punched by " + << punchername; + if (!damage_handled) { + actionstream << ", damage " << hitparams.hp << " HP"; + } else { + actionstream << ", damage handled by lua"; + } + actionstream << std::endl; return hitparams.wear; } |