From 89eb0b140b0b8a414f815b5e86447d9852e47440 Mon Sep 17 00:00:00 2001 From: dongresource Date: Tue, 9 Mar 2021 21:23:57 +0100 Subject: [PATCH] Use the right packet for when a player falls out of the world SUDDEN_DEAD is more appropriate than goo damage for this. Also made it so other players can see when someone does a /health 0, for comedic effect. --- src/MobManager.cpp | 12 ++++++++++-- src/PlayerManager.cpp | 13 +++++++++++-- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/MobManager.cpp b/src/MobManager.cpp index 7da4924..d2f4531 100644 --- a/src/MobManager.cpp +++ b/src/MobManager.cpp @@ -1002,8 +1002,16 @@ void MobManager::playerTick(CNServer *serv, time_t currTime) { } // check if the player has fallen out of the world - if (plr->z < -30000) - dealGooDamage(sock, PC_MAXHEALTH(36) * 2); + if (plr->z < -30000) { + INITSTRUCT(sP_FE2CL_PC_SUDDEN_DEAD, dead); + + dead.iPC_ID = plr->iID; + dead.iDamage = plr->HP; + dead.iHP = plr->HP = 0; + + sock->sendPacket((void*)&dead, P_FE2CL_PC_SUDDEN_DEAD, sizeof(sP_FE2CL_PC_SUDDEN_DEAD)); + PlayerManager::sendToViewable(sock, (void*)&dead, P_FE2CL_PC_SUDDEN_DEAD, sizeof(sP_FE2CL_PC_SUDDEN_DEAD)); + } if (transmit) { INITSTRUCT(sP_FE2CL_REP_PC_TICK, pkt); diff --git a/src/PlayerManager.cpp b/src/PlayerManager.cpp index 89ab828..24e26d0 100644 --- a/src/PlayerManager.cpp +++ b/src/PlayerManager.cpp @@ -733,8 +733,6 @@ void PlayerManager::setValuePlayer(CNSocket* sock, CNPacketData* data) { case 5: plr->money = setData->iSetValue; break; - default: - break; } response.iPC_ID = setData->iPC_ID; @@ -742,6 +740,17 @@ void PlayerManager::setValuePlayer(CNSocket* sock, CNPacketData* data) { response.iSetValueType = setData->iSetValueType; sock->sendPacket((void*)&response, P_FE2CL_GM_REP_PC_SET_VALUE, sizeof(sP_FE2CL_GM_REP_PC_SET_VALUE)); + + // if one lowers their own health to 0, make sure others can see it + if (plr->HP <= 0) { + INITSTRUCT(sP_FE2CL_PC_SUDDEN_DEAD, dead); + + dead.iPC_ID = plr->iID; + dead.iDamage = plr->HP; + dead.iHP = plr->HP = 0; + + sendToViewable(sock, (void*)&dead, P_FE2CL_PC_SUDDEN_DEAD, sizeof(sP_FE2CL_PC_SUDDEN_DEAD)); + } } void PlayerManager::heartbeatPlayer(CNSocket* sock, CNPacketData* data) {