Revamp revival code

This commit is contained in:
Gent 2020-09-12 14:21:36 -04:00
parent fe370df534
commit 4880e4af12
2 changed files with 31 additions and 6 deletions

View File

@ -175,7 +175,7 @@ void NanoManager::summonNano(CNSocket *sock, int slot) {
std::cout << "summon nano\n"; std::cout << "summon nano\n";
if (slot > 2 || slot < 0) if (slot > 2 || slot < 0) // TODO: implement proper way to dismiss nano if slot = -1
return; // sanity check return; // sanity check
int nanoId = plr->equippedNanos[slot]; int nanoId = plr->equippedNanos[slot];

View File

@ -619,12 +619,37 @@ void PlayerManager::revivePlayer(CNSocket* sock, CNPacketData* data) {
// players respawn at same spot they died at for now... // players respawn at same spot they died at for now...
sP_CL2FE_REQ_PC_REGEN* reviveData = (sP_CL2FE_REQ_PC_REGEN*)data->buf; sP_CL2FE_REQ_PC_REGEN* reviveData = (sP_CL2FE_REQ_PC_REGEN*)data->buf;
INITSTRUCT(sP_FE2CL_REP_PC_REGEN_SUCC, response); 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.bMoveLocation = reviveData->eIL;
response.PCRegenData.iMapNum = reviveData->iIndex; 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)); sock->sendPacket((void*)&response, P_FE2CL_REP_PC_REGEN_SUCC, sizeof(sP_FE2CL_REP_PC_REGEN_SUCC));
} }