From d87306930d7c7c43acf600f3acfe3deb0b00649d Mon Sep 17 00:00:00 2001 From: kamilprzyb Date: Fri, 25 Sep 2020 02:39:30 +0200 Subject: [PATCH] added nano potions functionality --- src/NanoManager.cpp | 30 ++++++++++++++++++++++++++++++ src/NanoManager.hpp | 1 + 2 files changed, 31 insertions(+) diff --git a/src/NanoManager.cpp b/src/NanoManager.cpp index fbe6217..220bf97 100644 --- a/src/NanoManager.cpp +++ b/src/NanoManager.cpp @@ -49,6 +49,7 @@ void NanoManager::init() { REGISTER_SHARD_PACKET(P_CL2FE_REQ_PC_GIVE_NANO_SKILL, nanoSkillSetGMHandler); REGISTER_SHARD_PACKET(P_CL2FE_REQ_NANO_SKILL_USE, nanoSkillUseHandler); REGISTER_SHARD_PACKET(P_CL2FE_REQ_WARP_USE_RECALL, nanoRecallHandler); + REGISTER_SHARD_PACKET(P_CL2FE_REQ_CHARGE_NANO_STAMINA, nanoPotionHandler); } void NanoManager::nanoEquipHandler(CNSocket* sock, CNPacketData* data) { @@ -171,6 +172,35 @@ void NanoManager::nanoRecallHandler(CNSocket* sock, CNPacketData* data) { // stubbed for now } +void NanoManager::nanoPotionHandler(CNSocket* sock, CNPacketData* data) { + if (data->size != sizeof(sP_CL2FE_REQ_CHARGE_NANO_STAMINA)) + return; + + Player* player = PlayerManager::getPlayer(sock); + //sanity check + if (player->activeNano == -1 || player->batteryN == 0) + return; + + sNano nano = player->Nanos[player->activeNano]; + int difference = 150 - nano.iStamina; + if (player->batteryN < difference) + difference = player->batteryN; + + if (difference == 0) + return; + + INITSTRUCT(sP_FE2CL_REP_CHARGE_NANO_STAMINA, response); + response.iNanoID = nano.iID; + response.iNanoStamina = nano.iStamina + difference; + response.iBatteryN = player->batteryN - difference; + + sock->sendPacket((void*)&response, P_FE2CL_REP_CHARGE_NANO_STAMINA, sizeof(sP_FE2CL_REP_CHARGE_NANO_STAMINA)); + //now update serverside + player->batteryN -= difference; + player->Nanos[nano.iID].iStamina += difference; + +} + #pragma region Helper methods void NanoManager::addNano(CNSocket* sock, int16_t nanoId, int16_t slot) { if (nanoId > 36) diff --git a/src/NanoManager.hpp b/src/NanoManager.hpp index 246474d..13cc2a1 100644 --- a/src/NanoManager.hpp +++ b/src/NanoManager.hpp @@ -52,6 +52,7 @@ namespace NanoManager { void nanoSkillSetHandler(CNSocket* sock, CNPacketData* data); void nanoSkillSetGMHandler(CNSocket* sock, CNPacketData* data); void nanoRecallHandler(CNSocket* sock, CNPacketData* data); + void nanoPotionHandler(CNSocket* sock, CNPacketData* data); // Helper methods void addNano(CNSocket* sock, int16_t nanoId, int16_t slot);