Reverting back some changes + Tweaks

This commit is contained in:
Jade 2020-11-17 03:30:01 +00:00 committed by Gent S
parent 2b25b17bd8
commit 28276d2229
4 changed files with 31 additions and 41 deletions

View File

@ -286,13 +286,7 @@ void ItemManager::itemUseHandler(CNSocket* sock, CNPacketData* data) {
resp->RemainItem = gumball; resp->RemainItem = gumball;
resp->iTargetCnt = 1; resp->iTargetCnt = 1;
resp->eST = EST_NANOSTIMPAK; resp->eST = EST_NANOSTIMPAK;
resp->iSkillID = 144;
if (request->iNanoSlot == 1)
resp->iSkillID = 191;
else if (request->iNanoSlot == 2)
resp->iSkillID = 197;
else
resp->iSkillID = 144;
int value1 = CSB_BIT_STIMPAKSLOT1 << request->iNanoSlot; int value1 = CSB_BIT_STIMPAKSLOT1 << request->iNanoSlot;
int value2 = ECSB_STIMPAKSLOT1 + request->iNanoSlot; int value2 = ECSB_STIMPAKSLOT1 + request->iNanoSlot;
@ -312,8 +306,8 @@ void ItemManager::itemUseHandler(CNSocket* sock, CNPacketData* data) {
// update inventory serverside // update inventory serverside
player->Inven[resp->iSlotNum] = resp->RemainItem; player->Inven[resp->iSlotNum] = resp->RemainItem;
std::pair<CNSocket*, int32_t> key = std::make_pair(sock, resp->iSkillID); std::pair<CNSocket*, int32_t> key = std::make_pair(sock, value1);
time_t until = getTime() + (time_t)NanoManager::SkillTable[resp->iSkillID].durationTime[0] * 10; time_t until = getTime() + (time_t)NanoManager::SkillTable[144].durationTime[0] * 10;
NPCManager::EggBuffs[key] = until; NPCManager::EggBuffs[key] = until;
} }

View File

@ -578,12 +578,14 @@ int NPCManager::eggBuffPlayer(CNSocket* sock, int skillId, int eggId) {
if (otherPlr == nullptr) if (otherPlr == nullptr)
return -1; return -1;
std::pair<CNSocket*, int32_t> key = std::make_pair(sock, skillId); int CBFlag = 0;
int bitFlag = GroupManager::getGroupFlags(otherPlr); int bitFlag = GroupManager::getGroupFlags(otherPlr);
if (EggBuffs.find(key) == EggBuffs.end()) CBFlag = NanoManager::applyBuff(sock, skillId, 1, 3, bitFlag);
if (!NanoManager::applyBuff(sock, skillId, 1, 3, bitFlag)) if (CBFlag == 0)
return -1; return -1;
std::pair<CNSocket*, int32_t> key = std::make_pair(sock, CBFlag);
// save the buff serverside; // save the buff serverside;
// if you get the same buff again, new duration will override the previous one // if you get the same buff again, new duration will override the previous one
@ -629,15 +631,25 @@ void NPCManager::eggStep(CNServer* serv, time_t currTime) {
// if time reached 0 // if time reached 0
else { else {
CNSocket* sock = it->first.first; CNSocket* sock = it->first.first;
int32_t skillId = it->first.second; int32_t CBFlag = it->first.second;
Player* plr = PlayerManager::getPlayer(sock); Player* plr = PlayerManager::getPlayer(sock);
Player* otherPlr = PlayerManager::getPlayerFromID(plr->iIDGroup); Player* otherPlr = PlayerManager::getPlayerFromID(plr->iIDGroup);
if (otherPlr == nullptr) if (otherPlr == nullptr)
return; continue;
int bitFlag = GroupManager::getGroupFlags(otherPlr); int groupFlags = GroupManager::getGroupFlags(otherPlr);
NanoManager::applyBuff(sock, skillId, 2, 3, bitFlag); for (auto& pwr : NanoManager::NanoPowers) {
if (pwr.bitFlag == CBFlag) {
INITSTRUCT(sP_FE2CL_PC_BUFF_UPDATE, resp);
resp.eCSTB = pwr.timeBuffID;
resp.eTBU = 2;
resp.eTBT = 3; // for egg buffs
plr->iConditionBitFlag &= ~CBFlag;
resp.iConditionBitFlag = plr->iConditionBitFlag |= groupFlags | plr->iSelfConditionBitFlag;
sock->sendPacket((void*)&resp, P_FE2CL_PC_BUFF_UPDATE, sizeof(sP_FE2CL_PC_BUFF_UPDATE));
}
}
// remove buff from the map // remove buff from the map
it = EggBuffs.erase(it); it = EggBuffs.erase(it);
} }

View File

@ -305,15 +305,9 @@ void NanoManager::summonNano(CNSocket *sock, int slot) {
if (SkillTable[skillID].drainType == 2) { if (SkillTable[skillID].drainType == 2) {
int *targetData = findTargets(plr, skillID); int *targetData = findTargets(plr, skillID);
int boost = 0; for (auto& pwr : NanoPowers)
for (int i = 0; i < 3; i++) if (pwr.skillType == SkillTable[skillID].skillType)
if (plr->equippedNanos[i] == plr->activeNano) nanoUnbuff(sock, targetData, pwr.bitFlag, pwr.timeBuffID, 0,(SkillTable[skillID].targetType == 3));
if (plr->iConditionBitFlag & (CSB_BIT_STIMPAKSLOT1 << i))
boost = 1;
for (auto& pwr : NanoPowers)
if (pwr.skillType == SkillTable[skillID].skillType)
nanoUnbuff(sock, targetData, pwr.bitFlag, pwr.timeBuffID, SkillTable[skillID].powerIntensity[boost],(SkillTable[skillID].targetType == 3));
} }
int16_t nanoID = slot == -1 ? 0 : plr->equippedNanos[slot]; int16_t nanoID = slot == -1 ? 0 : plr->equippedNanos[slot];
@ -480,9 +474,9 @@ void NanoManager::nanoUnbuff(CNSocket* sock, int targetData[], int32_t bitFlag,
} }
} }
bool NanoManager::applyBuff(CNSocket* sock, int skillID, int eTBU, int eTBT, int32_t groupFlags) { int NanoManager::applyBuff(CNSocket* sock, int skillID, int eTBU, int eTBT, int32_t groupFlags) {
if (SkillTable[skillID].drainType == 1) if (SkillTable[skillID].drainType == 1)
return false; return 0;
int32_t bitFlag = 0; int32_t bitFlag = 0;
@ -496,30 +490,20 @@ bool NanoManager::applyBuff(CNSocket* sock, int skillID, int eTBU, int eTBT, int
resp.eTBU = eTBU; resp.eTBU = eTBU;
resp.eTBT = eTBT; resp.eTBT = eTBT;
if (skillID == 191) { // dealing with gumballs
resp.eCSTB = pwr.timeBuffID + 1;
bitFlag = bitFlag << 1;
} else if (skillID == 197) {
resp.eCSTB = pwr.timeBuffID + 2;
bitFlag = bitFlag << 2;
}
if (eTBU == 1) if (eTBU == 1)
plr->iConditionBitFlag |= bitFlag; plr->iConditionBitFlag |= bitFlag;
else else
plr->iConditionBitFlag &= ~bitFlag; plr->iConditionBitFlag &= ~bitFlag;
resp.iConditionBitFlag = plr->iConditionBitFlag |= groupFlags | plr->iSelfConditionBitFlag; resp.iConditionBitFlag = plr->iConditionBitFlag |= groupFlags | plr->iSelfConditionBitFlag;
resp.TimeBuff.iValue = SkillTable[skillID].powerIntensity[0]; resp.TimeBuff.iValue = SkillTable[skillID].powerIntensity[0];
sock->sendPacket((void*)&resp, P_FE2CL_PC_BUFF_UPDATE, sizeof(sP_FE2CL_PC_BUFF_UPDATE)); sock->sendPacket((void*)&resp, P_FE2CL_PC_BUFF_UPDATE, sizeof(sP_FE2CL_PC_BUFF_UPDATE));
} }
return true; return bitFlag;
} }
} }
return false; return 0;
} }
// 0=A 1=B 2=C -1=Not found // 0=A 1=B 2=C -1=Not found

View File

@ -65,7 +65,7 @@ namespace NanoManager {
void setNanoSkill(CNSocket* sock, sP_CL2FE_REQ_NANO_TUNE* skill); void setNanoSkill(CNSocket* sock, sP_CL2FE_REQ_NANO_TUNE* skill);
void resetNanoSkill(CNSocket* sock, int16_t nanoID); void resetNanoSkill(CNSocket* sock, int16_t nanoID);
void nanoUnbuff(CNSocket* sock, int* targetData, int32_t bitFlag, int16_t timeBuffID, int16_t amount, bool groupPower); void nanoUnbuff(CNSocket* sock, int* targetData, int32_t bitFlag, int16_t timeBuffID, int16_t amount, bool groupPower);
bool applyBuff(CNSocket* sock, int skillID, int eTBU, int eTBT, int32_t groupFlags); int applyBuff(CNSocket* sock, int skillID, int eTBU, int eTBT, int32_t groupFlags);
int nanoStyle(int nanoID); int nanoStyle(int nanoID);
int* findTargets(Player* plr, int skillID, CNPacketData* data = nullptr); int* findTargets(Player* plr, int skillID, CNPacketData* data = nullptr);
} }