Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Fix damage flash when damage disabled
  • Loading branch information
kwolekr committed Jul 10, 2015
1 parent 8eb272c commit 1a1774a
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 15 deletions.
10 changes: 4 additions & 6 deletions src/network/serverpackethandler.cpp
Expand Up @@ -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);
}
}

Expand Down Expand Up @@ -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
Expand Down
12 changes: 5 additions & 7 deletions src/script/lua_api/l_object.cpp
Expand Up @@ -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;
}
Expand Down Expand Up @@ -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;
}
Expand Down
16 changes: 15 additions & 1 deletion src/server.cpp
Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand Down
2 changes: 1 addition & 1 deletion src/server.h
Expand Up @@ -374,7 +374,7 @@ class Server : public con::PeerHandler, public MapEventReceiver,
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);
Expand Down

2 comments on commit 1a1774a

@nerzhul
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

@C1ffisme
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

Please sign in to comment.