From eee1b52722d4e457079c5b88073d7516ed8096e4 Mon Sep 17 00:00:00 2001 From: CPunch Date: Thu, 20 Aug 2020 22:25:39 -0500 Subject: [PATCH] fixed ItemManager --- src/ItemManager.cpp | 73 ++++++++++++++++++++++++++------------------- 1 file changed, 43 insertions(+), 30 deletions(-) diff --git a/src/ItemManager.cpp b/src/ItemManager.cpp index 7937e69..b635a7e 100644 --- a/src/ItemManager.cpp +++ b/src/ItemManager.cpp @@ -12,52 +12,65 @@ void ItemManager::init() { void ItemManager::itemMoveHandler(CNSocket* sock, CNPacketData* data) { if (data->size != sizeof(sP_CL2FE_REQ_ITEM_MOVE)) return; // ignore the malformed packet - + sP_CL2FE_REQ_ITEM_MOVE* itemmove = (sP_CL2FE_REQ_ITEM_MOVE*)data->buf; sP_FE2CL_PC_ITEM_MOVE_SUCC* resp = (sP_FE2CL_PC_ITEM_MOVE_SUCC*)xmalloc(sizeof(sP_FE2CL_PC_ITEM_MOVE_SUCC)); - + PlayerView plr = PlayerManager::players[sock]; - - //weird flip flop but it makes things happen - resp->eFrom = itemmove->eTo; - resp->iFromSlotNum = itemmove->iToSlotNum; - resp->eTo = itemmove->eFrom; - resp->iToSlotNum = itemmove->iFromSlotNum; + sItemBase fromItem; + sItemBase toItem; - //eFrom 0 means from equip, 1 means from inventory + // eFrom 0 means from equip if (itemmove->eFrom == 0) { - resp->FromSlotItem = plr.plr.Equip[itemmove->iFromSlotNum]; + // unequiping an item + std::cout << "unequipting item" << std::endl; + fromItem = plr.plr.Equip[itemmove->iFromSlotNum]; } else { - resp->FromSlotItem = plr.plr.Inven[itemmove->iFromSlotNum]; + fromItem = plr.plr.Inven[itemmove->iFromSlotNum]; } - //eTo 0 means to equip, 1 means to inventory + // eTo 0 means to equip if (itemmove->eTo == 0) { - resp->ToSlotItem = plr.plr.Equip[itemmove->iToSlotNum]; - plr.plr.Equip[itemmove->iToSlotNum] = resp->FromSlotItem; + std::cout << "equipting item" << std::endl; + // equiping an item + toItem = plr.plr.Equip[itemmove->iToSlotNum]; + plr.plr.Equip[itemmove->iToSlotNum] = fromItem; } else { - resp->ToSlotItem = plr.plr.Inven[itemmove->iToSlotNum]; - plr.plr.Inven[itemmove->iToSlotNum] = resp->FromSlotItem; + toItem = plr.plr.Inven[itemmove->iToSlotNum]; + plr.plr.Inven[itemmove->iToSlotNum] = fromItem; } - + if (itemmove->eFrom == 0) { - plr.plr.Equip[itemmove->iFromSlotNum] = resp->ToSlotItem; - - sP_FE2CL_PC_EQUIP_CHANGE* resp2 = (sP_FE2CL_PC_EQUIP_CHANGE*)xmalloc(sizeof(sP_FE2CL_PC_EQUIP_CHANGE)); - - resp2->iPC_ID = plr.plr.iID; - resp2->iEquipSlotNum = resp->iToSlotNum; - resp2->EquipSlotItem = resp->ToSlotItem; - - for (CNSocket* otherSock : plr.viewable) { - otherSock->sendPacket(new CNPacketData((void*)resp2, P_FE2CL_PC_EQUIP_CHANGE, sizeof(sP_FE2CL_PC_EQUIP_CHANGE), otherSock->getFEKey())); - } - + plr.plr.Equip[itemmove->iFromSlotNum] = toItem; } else { - plr.plr.Inven[itemmove->iFromSlotNum] = resp->ToSlotItem; + plr.plr.Inven[itemmove->iFromSlotNum] = toItem; } + if (itemmove->eFrom == 0 || itemmove->eTo == 0) { + for (CNSocket* otherSock : plr.viewable) { + sP_FE2CL_PC_EQUIP_CHANGE* resp2 = (sP_FE2CL_PC_EQUIP_CHANGE*)xmalloc(sizeof(sP_FE2CL_PC_EQUIP_CHANGE)); + + resp2->iPC_ID = plr.plr.iID; + if (itemmove->eFrom == 0) { + resp2->iEquipSlotNum = itemmove->iFromSlotNum; + resp2->EquipSlotItem = toItem; + } + else { + resp2->iEquipSlotNum = itemmove->iToSlotNum; + resp2->EquipSlotItem = fromItem; + } + otherSock->sendPacket(new CNPacketData((void*)resp2, P_FE2CL_PC_EQUIP_CHANGE, sizeof(sP_FE2CL_PC_EQUIP_CHANGE), otherSock->getFEKey())); + } + } + PlayerManager::players[sock] = plr; + resp->eTo = itemmove->eFrom; + resp->iToSlotNum = itemmove->iFromSlotNum; + resp->ToSlotItem = toItem; + resp->eFrom = itemmove->eTo; + resp->iFromSlotNum = itemmove->iToSlotNum; + resp->FromSlotItem = fromItem; + sock->sendPacket(new CNPacketData((void*)resp, P_FE2CL_PC_ITEM_MOVE_SUCC, sizeof(sP_FE2CL_PC_ITEM_MOVE_SUCC), sock->getFEKey())); } \ No newline at end of file