From 4880e4af12cee86f913a22287c7573a36bc6f511 Mon Sep 17 00:00:00 2001 From: Gent Date: Sat, 12 Sep 2020 14:21:36 -0400 Subject: [PATCH] Revamp revival code --- src/NanoManager.cpp | 4 ++-- src/PlayerManager.cpp | 33 +++++++++++++++++++++++++++++---- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/src/NanoManager.cpp b/src/NanoManager.cpp index 160c0b7..81bb019 100644 --- a/src/NanoManager.cpp +++ b/src/NanoManager.cpp @@ -175,8 +175,8 @@ void NanoManager::summonNano(CNSocket *sock, int slot) { std::cout << "summon nano\n"; - if (slot > 2 || slot < 0) - return; //sanity check + if (slot > 2 || slot < 0) // TODO: implement proper way to dismiss nano if slot = -1 + return; // sanity check int nanoId = plr->equippedNanos[slot]; diff --git a/src/PlayerManager.cpp b/src/PlayerManager.cpp index 755c179..b7eba9b 100644 --- a/src/PlayerManager.cpp +++ b/src/PlayerManager.cpp @@ -619,12 +619,37 @@ void PlayerManager::revivePlayer(CNSocket* sock, CNPacketData* data) { // players respawn at same spot they died at for now... sP_CL2FE_REQ_PC_REGEN* reviveData = (sP_CL2FE_REQ_PC_REGEN*)data->buf; INITSTRUCT(sP_FE2CL_REP_PC_REGEN_SUCC, response); + + /* + * Update player state + */ + // Nanos + for (int n = 0; n < 3; n++) { + int nanoID = plr->equippedNanos[n]; + if (nanoID > 0 && nanoID < 37) { // sanity check + plr->Nanos[nanoID].iStamina = 75; // max is 150, so 75 is half + response.PCRegenData.Nanos[n] = plr->Nanos[nanoID]; + } + } + plr->activeNano = -1; + + // Position + plr->x = target.x; + plr->y = target.y; + plr->z = target.z; + // HP and FM + plr->HP = 1000 * plr->level; + plr->fusionmatter = plr->fusionmatter; // TODO: does this actually change? + + // Response parameters + response.PCRegenData.iActiveNanoSlotNum = plr->activeNano; + response.PCRegenData.iX = plr->x; + response.PCRegenData.iY = plr->y; + response.PCRegenData.iZ = plr->z; + response.PCRegenData.iHP = plr->HP; + response.iFusionMatter = plr->fusionmatter; response.bMoveLocation = reviveData->eIL; response.PCRegenData.iMapNum = reviveData->iIndex; - response.PCRegenData.iHP = 1000 * plr->level; - response.PCRegenData.iX = target.x; - response.PCRegenData.iY = target.y; - response.PCRegenData.iZ = target.z; sock->sendPacket((void*)&response, P_FE2CL_REP_PC_REGEN_SUCC, sizeof(sP_FE2CL_REP_PC_REGEN_SUCC)); }