From 7851866d139d8f5e63518f23fe84dc1e4577813b Mon Sep 17 00:00:00 2001 From: Gent S Date: Thu, 26 Nov 2020 22:01:49 -0500 Subject: [PATCH] Fix nanos making sound when they run out of stamina --- src/MobManager.cpp | 13 ++++++++++++- src/NanoManager.cpp | 19 +++++++++++-------- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/MobManager.cpp b/src/MobManager.cpp index a5f4757..8e926a9 100644 --- a/src/MobManager.cpp +++ b/src/MobManager.cpp @@ -951,8 +951,19 @@ void MobManager::playerTick(CNServer *serv, time_t currTime) { plr->Nanos[plr->activeNano].iStamina -= 1 + plr->nanoDrainRate * 2 / 5; if (plr->Nanos[plr->activeNano].iStamina <= 0) { + // passive nano unbuffing + int skillID = plr->Nanos[plr->activeNano].iSkillID; + if (NanoManager::SkillTable[skillID].drainType == 2) { + int* targetData = NanoManager::findTargets(plr, skillID); + + for (auto& pwr : NanoManager::NanoPowers) + if (pwr.skillType == NanoManager::SkillTable[skillID].skillType) + NanoManager::nanoUnbuff(sock, targetData, pwr.bitFlag, pwr.timeBuffID, 0, (NanoManager::SkillTable[skillID].targetType == 3)); + } + plr->Nanos[plr->activeNano].iStamina = 0; - NanoManager::summonNano(PlayerManager::getSockFromID(plr->iID), -1); + plr->activeNano = 0; + plr->nanoDrainRate = 0; } transmit = true; diff --git a/src/NanoManager.cpp b/src/NanoManager.cpp index 2739783..b1175ce 100644 --- a/src/NanoManager.cpp +++ b/src/NanoManager.cpp @@ -142,8 +142,11 @@ void NanoManager::nanoSkillUseHandler(CNSocket* sock, CNPacketData* data) { boost = 1; plr->Nanos[plr->activeNano].iStamina -= SkillTable[skillID].batteryUse[boost*3]; - if (plr->Nanos[plr->activeNano].iStamina < 0) + if (plr->Nanos[plr->activeNano].iStamina < 0) { plr->Nanos[plr->activeNano].iStamina = 0; + plr->activeNano = 0; + plr->nanoDrainRate = 0; + } for (auto& pwr : NanoPowers) if (pwr.skillType == SkillTable[skillID].skillType) @@ -303,9 +306,9 @@ void NanoManager::summonNano(CNSocket *sock, int slot) { if (SkillTable[skillID].drainType == 2) { int *targetData = findTargets(plr, skillID); - for (auto& pwr : NanoPowers) - if (pwr.skillType == SkillTable[skillID].skillType) - nanoUnbuff(sock, targetData, pwr.bitFlag, pwr.timeBuffID, 0,(SkillTable[skillID].targetType == 3)); + for (auto& pwr : NanoPowers) + if (pwr.skillType == SkillTable[skillID].skillType) + nanoUnbuff(sock, targetData, pwr.bitFlag, pwr.timeBuffID, 0,(SkillTable[skillID].targetType == 3)); } int16_t nanoID = slot == -1 ? 0 : plr->equippedNanos[slot]; @@ -321,9 +324,9 @@ void NanoManager::summonNano(CNSocket *sock, int slot) { if (SkillTable[skillID].drainType == 2) { int *targetData = findTargets(plr, skillID); - int boost = 0; - if (getNanoBoost(plr)) - boost = 1; + int boost = 0; + if (getNanoBoost(plr)) + boost = 1; for (auto& pwr : NanoPowers) { if (pwr.skillType == SkillTable[skillID].skillType) { @@ -904,4 +907,4 @@ std::vector NanoPowers = { }; }; // namespace -#pragma endregion \ No newline at end of file +#pragma endregion