aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/content_sao.cpp4
-rw-r--r--src/network/serverpackethandler.cpp7
-rw-r--r--src/server.cpp11
3 files changed, 14 insertions, 8 deletions
diff --git a/src/content_sao.cpp b/src/content_sao.cpp
index 69f80d356..ea2a4ebf6 100644
--- a/src/content_sao.cpp
+++ b/src/content_sao.cpp
@@ -919,8 +919,8 @@ void PlayerSAO::step(float dtime, bool send_recommended)
MapNode n = m_env->getMap().getNodeNoEx(p);
const ContentFeatures &c = m_env->getGameDef()->ndef()->get(n);
// If node generates drown
- if (c.drowning > 0) {
- if (m_hp > 0 && m_breath > 0)
+ if (c.drowning > 0 && m_hp > 0) {
+ if (m_breath > 0)
setBreath(m_breath - 1);
// No more breath, damage player
diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp
index e0ea4bf83..95df6fc4f 100644
--- a/src/network/serverpackethandler.cpp
+++ b/src/network/serverpackethandler.cpp
@@ -1107,6 +1107,13 @@ void Server::handleCommand_Damage(NetworkPacket* pkt)
}
if (g_settings->getBool("enable_damage")) {
+ if (playerSAO->isDead()) {
+ verbosestream << "Server::ProcessData(): Info: "
+ "Ignoring damage as player " << player->getName()
+ << " is already dead." << std::endl;
+ return;
+ }
+
actionstream << player->getName() << " damaged by "
<< (int)damage << " hp at " << PP(playersao->getBasePosition() / BS)
<< std::endl;
diff --git a/src/server.cpp b/src/server.cpp
index 0daa61054..224af47a7 100644
--- a/src/server.cpp
+++ b/src/server.cpp
@@ -1111,16 +1111,15 @@ PlayerSAO* Server::StageTwoClientInit(u16 peer_id)
// Send inventory
SendInventory(playersao);
- // Send HP
- SendPlayerHPOrDie(playersao);
+ // Send HP or death screen
+ if (playersao->isDead())
+ SendDeathscreen(peer_id, false, v3f(0,0,0));
+ else
+ SendPlayerHPOrDie(playersao);
// Send Breath
SendPlayerBreath(playersao);
- // Show death screen if necessary
- if (playersao->isDead())
- SendDeathscreen(peer_id, false, v3f(0,0,0));
-
// Note things in chat if not in simple singleplayer mode
if (!m_simple_singleplayer_mode && g_settings->getBool("show_statusline_on_connect")) {
// Send information about server to player in chat