diff --git a/src/game.cpp b/src/game.cpp index c8f1d2187..bed99837d 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -2099,7 +2099,8 @@ void the_game( { break; } - else if(event.type == CE_PLAYER_DAMAGE) + else if(event.type == CE_PLAYER_DAMAGE && + client.getHP() != 0) { //u16 damage = event.player_damage.amount; //infostream<<"Player damage: "<getHP() == 0 && playersao->m_hp_not_sent) - DiePlayer(client->peer_id); + if(playersao->m_hp_not_sent && g_settings->getBool("enable_damage")) + { + if(playersao->getHP() == 0) + DiePlayer(client->peer_id); + else + SendPlayerHP(client->peer_id); + } /* - Send player inventories and HPs if necessary + Send player inventories if necessary */ if(playersao->m_moved){ SendMovePlayer(client->peer_id); @@ -1382,9 +1387,6 @@ void Server::AsyncRunStep() UpdateCrafting(client->peer_id); SendInventory(client->peer_id); } - if(playersao->m_hp_not_sent){ - SendPlayerHP(client->peer_id); - } } } @@ -2311,7 +2313,8 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) SendInventory(peer_id); // Send HP - SendPlayerHP(peer_id); + if(g_settings->getBool("enable_damage")) + SendPlayerHP(peer_id); // Send detached inventories sendDetachedInventories(peer_id); @@ -2764,17 +2767,20 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) std::istringstream is(datastring, std::ios_base::binary); u8 damage = readU8(is); - actionstream<getName()<<" damaged by " - <<(int)damage<<" hp at "<getPosition()/BS) - <getBool("enable_damage")) + { + actionstream<getName()<<" damaged by " + <<(int)damage<<" hp at "<getPosition()/BS) + <setHP(playersao->getHP() - damage); + playersao->setHP(playersao->getHP() - damage); - if(playersao->getHP() == 0 && playersao->m_hp_not_sent) - DiePlayer(peer_id); + if(playersao->getHP() == 0 && playersao->m_hp_not_sent) + DiePlayer(peer_id); - if(playersao->m_hp_not_sent) - SendPlayerHP(peer_id); + if(playersao->m_hp_not_sent) + SendPlayerHP(peer_id); + } } else if(command == TOSERVER_PASSWORD) { @@ -2850,7 +2856,7 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) } else if(command == TOSERVER_RESPAWN) { - if(player->hp != 0) + if(player->hp != 0 || !g_settings->getBool("enable_damage")) return; RespawnPlayer(peer_id);