Fix damage flash when damage disabled

This commit is contained in:
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;
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 (src_original_hp != pointed_object->getHP() &&
pointed_object->getType() == ACTIVEOBJECT_TYPE_PLAYER) {
SendPlayerHPOrDie(((PlayerSAO*)pointed_object)->getPeerID(),
pointed_object->getHP() == 0);
SendPlayerHPOrDie((PlayerSAO *)pointed_object);
}
// If the puncher is a player and its HP changed
if (dst_origin_hp != playersao->getHP()) {
SendPlayerHPOrDie(playersao->getPeerID(), playersao->getHP() == 0);
}
if (dst_origin_hp != playersao->getHP())
SendPlayerHPOrDie(playersao);
}
} // 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 (src_original_hp != co->getHP() &&
co->getType() == ACTIVEOBJECT_TYPE_PLAYER) {
getServer(L)->SendPlayerHPOrDie(((PlayerSAO*)co)->getPeerID(),
co->getHP() == 0);
getServer(L)->SendPlayerHPOrDie((PlayerSAO *)co);
}
// If the puncher is a player, and its HP changed
if (dst_origin_hp != puncher->getHP() &&
puncher->getType() == ACTIVEOBJECT_TYPE_PLAYER) {
getServer(L)->SendPlayerHPOrDie(((PlayerSAO*)puncher)->getPeerID(),
puncher->getHP() == 0);
getServer(L)->SendPlayerHPOrDie((PlayerSAO *)puncher);
}
return 0;
}
@ -265,9 +263,9 @@ int ObjectRef::l_set_hp(lua_State *L)
<<" hp="<<hp<<std::endl;*/
// Do it
co->setHP(hp);
if (co->getType() == ACTIVEOBJECT_TYPE_PLAYER) {
getServer(L)->SendPlayerHPOrDie(((PlayerSAO*)co)->getPeerID(), co->getHP() == 0);
}
if (co->getType() == ACTIVEOBJECT_TYPE_PLAYER)
getServer(L)->SendPlayerHPOrDie((PlayerSAO *)co);
// Return
return 0;
}

View File

@ -1108,7 +1108,7 @@ PlayerSAO* Server::StageTwoClientInit(u16 peer_id)
SendInventory(playersao);
// Send HP
SendPlayerHPOrDie(peer_id, playersao->getHP() == 0);
SendPlayerHPOrDie(playersao);
// Send Breath
SendPlayerBreath(peer_id);
@ -1487,6 +1487,20 @@ void Server::SendMovement(u16 peer_id)
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)
{
DSTACK(__FUNCTION_NAME);

View File

@ -374,7 +374,7 @@ public:
u8* ser_vers, u16* prot_vers, u8* major, u8* minor, u8* patch,
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 SendInventory(PlayerSAO* playerSAO);
void SendMovePlayer(u16 peer_id);