fixed ItemManager

This commit is contained in:
CPunch 2020-08-20 22:25:39 -05:00
parent aa2adcd9e2
commit eee1b52722
1 changed files with 43 additions and 30 deletions

View File

@ -17,47 +17,60 @@ void ItemManager::itemMoveHandler(CNSocket* sock, CNPacketData* data) {
sP_FE2CL_PC_ITEM_MOVE_SUCC* resp = (sP_FE2CL_PC_ITEM_MOVE_SUCC*)xmalloc(sizeof(sP_FE2CL_PC_ITEM_MOVE_SUCC)); 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]; PlayerView plr = PlayerManager::players[sock];
sItemBase fromItem;
sItemBase toItem;
//weird flip flop but it makes things happen // eFrom 0 means from equip
resp->eFrom = itemmove->eTo;
resp->iFromSlotNum = itemmove->iToSlotNum;
resp->eTo = itemmove->eFrom;
resp->iToSlotNum = itemmove->iFromSlotNum;
//eFrom 0 means from equip, 1 means from inventory
if (itemmove->eFrom == 0) { 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 { } 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) { if (itemmove->eTo == 0) {
resp->ToSlotItem = plr.plr.Equip[itemmove->iToSlotNum]; std::cout << "equipting item" << std::endl;
plr.plr.Equip[itemmove->iToSlotNum] = resp->FromSlotItem; // equiping an item
toItem = plr.plr.Equip[itemmove->iToSlotNum];
plr.plr.Equip[itemmove->iToSlotNum] = fromItem;
} else { } else {
resp->ToSlotItem = plr.plr.Inven[itemmove->iToSlotNum]; toItem = plr.plr.Inven[itemmove->iToSlotNum];
plr.plr.Inven[itemmove->iToSlotNum] = resp->FromSlotItem; plr.plr.Inven[itemmove->iToSlotNum] = fromItem;
} }
if (itemmove->eFrom == 0) { if (itemmove->eFrom == 0) {
plr.plr.Equip[itemmove->iFromSlotNum] = resp->ToSlotItem; plr.plr.Equip[itemmove->iFromSlotNum] = toItem;
} else {
sP_FE2CL_PC_EQUIP_CHANGE* resp2 = (sP_FE2CL_PC_EQUIP_CHANGE*)xmalloc(sizeof(sP_FE2CL_PC_EQUIP_CHANGE)); plr.plr.Inven[itemmove->iFromSlotNum] = toItem;
}
resp2->iPC_ID = plr.plr.iID;
resp2->iEquipSlotNum = resp->iToSlotNum;
resp2->EquipSlotItem = resp->ToSlotItem;
if (itemmove->eFrom == 0 || itemmove->eTo == 0) {
for (CNSocket* otherSock : plr.viewable) { 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())); otherSock->sendPacket(new CNPacketData((void*)resp2, P_FE2CL_PC_EQUIP_CHANGE, sizeof(sP_FE2CL_PC_EQUIP_CHANGE), otherSock->getFEKey()));
} }
} else {
plr.plr.Inven[itemmove->iFromSlotNum] = resp->ToSlotItem;
} }
PlayerManager::players[sock] = plr; 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())); sock->sendPacket(new CNPacketData((void*)resp, P_FE2CL_PC_ITEM_MOVE_SUCC, sizeof(sP_FE2CL_PC_ITEM_MOVE_SUCC), sock->getFEKey()));
} }