summaryrefslogtreecommitdiff
path: root/src/content_sao.cpp
diff options
context:
space:
mode:
authorBrandon <brandon@bremaweb.com>2014-05-16 23:47:12 -0500
committerest31 <MTest31@outlook.com>2015-05-15 11:09:55 +0200
commitc5b4e541749c50805519ce040d98a0a8e5e0ec03 (patch)
treebbc735720d6ac2e3b27c07c0b6d01ef586d61211 /src/content_sao.cpp
parent86a963caca9604ad57904e9acd9bef7c46ca47d8 (diff)
downloadminetest-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.cpp39
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;
}