Fix damage flash when damage disabled

master
kwolekr 2015-07-10 15:58:32 -04:00
parent 8eb272cea3
commit 1a1774a105
4 changed files with 25 additions and 15 deletions

View File

@ -1151,7 +1151,7 @@ void Server::handleCommand_Damage(NetworkPacket* pkt)
<< std::endl; << std::endl;
playersao->setHP(playersao->getHP() - damage); playersao->setHP(playersao->getHP() - damage);
SendPlayerHPOrDie(playersao->getPeerID(), playersao->getHP() == 0); SendPlayerHPOrDie(playersao);
} }
} }
@ -1510,14 +1510,12 @@ void Server::handleCommand_Interact(NetworkPacket* pkt)
// If the object is a player and its HP changed // If the object is a player and its HP changed
if (src_original_hp != pointed_object->getHP() && if (src_original_hp != pointed_object->getHP() &&
pointed_object->getType() == ACTIVEOBJECT_TYPE_PLAYER) { pointed_object->getType() == ACTIVEOBJECT_TYPE_PLAYER) {
SendPlayerHPOrDie(((PlayerSAO*)pointed_object)->getPeerID(), SendPlayerHPOrDie((PlayerSAO *)pointed_object);
pointed_object->getHP() == 0);
} }
// If the puncher is a player and its HP changed // If the puncher is a player and its HP changed
if (dst_origin_hp != playersao->getHP()) { if (dst_origin_hp != playersao->getHP())
SendPlayerHPOrDie(playersao->getPeerID(), playersao->getHP() == 0); SendPlayerHPOrDie(playersao);
}
} }
} // action == 0 } // action == 0

View File

@ -222,15 +222,13 @@ int ObjectRef::l_punch(lua_State *L)
// If the punched is a player, and its HP changed // If the punched is a player, and its HP changed
if (src_original_hp != co->getHP() && if (src_original_hp != co->getHP() &&
co->getType() == ACTIVEOBJECT_TYPE_PLAYER) { co->getType() == ACTIVEOBJECT_TYPE_PLAYER) {
getServer(L)->SendPlayerHPOrDie(((PlayerSAO*)co)->getPeerID(), getServer(L)->SendPlayerHPOrDie((PlayerSAO *)co);
co->getHP() == 0);
} }
// If the puncher is a player, and its HP changed // If the puncher is a player, and its HP changed
if (dst_origin_hp != puncher->getHP() && if (dst_origin_hp != puncher->getHP() &&
puncher->getType() == ACTIVEOBJECT_TYPE_PLAYER) { puncher->getType() == ACTIVEOBJECT_TYPE_PLAYER) {
getServer(L)->SendPlayerHPOrDie(((PlayerSAO*)puncher)->getPeerID(), getServer(L)->SendPlayerHPOrDie((PlayerSAO *)puncher);
puncher->getHP() == 0);
} }
return 0; return 0;
} }
@ -265,9 +263,9 @@ int ObjectRef::l_set_hp(lua_State *L)
<<" hp="<<hp<<std::endl;*/ <<" hp="<<hp<<std::endl;*/
// Do it // Do it
co->setHP(hp); co->setHP(hp);
if (co->getType() == ACTIVEOBJECT_TYPE_PLAYER) { if (co->getType() == ACTIVEOBJECT_TYPE_PLAYER)
getServer(L)->SendPlayerHPOrDie(((PlayerSAO*)co)->getPeerID(), co->getHP() == 0); getServer(L)->SendPlayerHPOrDie((PlayerSAO *)co);
}
// Return // Return
return 0; return 0;
} }

View File

@ -1108,7 +1108,7 @@ PlayerSAO* Server::StageTwoClientInit(u16 peer_id)
SendInventory(playersao); SendInventory(playersao);
// Send HP // Send HP
SendPlayerHPOrDie(peer_id, playersao->getHP() == 0); SendPlayerHPOrDie(playersao);
// Send Breath // Send Breath
SendPlayerBreath(peer_id); SendPlayerBreath(peer_id);
@ -1487,6 +1487,20 @@ void Server::SendMovement(u16 peer_id)
Send(&pkt); Send(&pkt);
} }
void Server::SendPlayerHPOrDie(PlayerSAO *playersao)
{
if (!g_settings->getBool("enable_damage"))
return;
u16 peer_id = playersao->getPeerID();
bool is_alive = playersao->getHP() > 0;
if (is_alive)
SendPlayerHP(peer_id);
else
DiePlayer(peer_id);
}
void Server::SendHP(u16 peer_id, u8 hp) void Server::SendHP(u16 peer_id, u8 hp)
{ {
DSTACK(__FUNCTION_NAME); DSTACK(__FUNCTION_NAME);

View File

@ -374,7 +374,7 @@ public:
u8* ser_vers, u16* prot_vers, u8* major, u8* minor, u8* patch, u8* ser_vers, u16* prot_vers, u8* major, u8* minor, u8* patch,
std::string* vers_string); std::string* vers_string);
void SendPlayerHPOrDie(u16 peer_id, bool die) { die ? DiePlayer(peer_id) : SendPlayerHP(peer_id); } void SendPlayerHPOrDie(PlayerSAO *player);
void SendPlayerBreath(u16 peer_id); void SendPlayerBreath(u16 peer_id);
void SendInventory(PlayerSAO* playerSAO); void SendInventory(PlayerSAO* playerSAO);
void SendMovePlayer(u16 peer_id); void SendMovePlayer(u16 peer_id);