void Pony::removeInventoryItem(quint32 id, quint32 qty) { for (int i=0; i<inv.size(); i++) { if (inv[i].id == id) { sendDeleteItemRPC(owner, inv[i].index, qty); if (qty < inv[i].amount) { inv[i].amount -= qty; return; } else if (qty == inv[i].amount) { inv.removeAt(i); return; } else { qty -= inv[i].amount; inv.removeAt(i); } } } }
bool Pony::tryWearItem(quint8 invSlot) { //win.logMessage("Invslot is "+QString().setNum(invSlot)); uint32_t id = -1; uint32_t itemSlots; for (int i=0; i<inv.size(); i++) { if (inv[i].index == invSlot) { id = inv[i].id; itemSlots = win.wearablePositionsMap[id]; if (wornSlots & itemSlots) { win.logMessage("Can't wear item: slots occupied", udpTag); return false; } sendDeleteItemRPC(owner,inv[i].index,1); if (inv[i].amount>1) inv[i].amount--; else inv.removeAt(i); break; } } if (id == (uint32_t)-1) { // wtf? win.logMessage("Index not found", sysTag); return false; } wornSlots |= itemSlots; WearableItem item; item.id = id; item.index = wearablePositionsToSlot(itemSlots); //win.logMessage("Wearing at slot "+QString().setNum(item.index)); worn << item; sendWearItemRPC(owner, item); Scene* scene = findScene(sceneName); if (scene->name.isEmpty()) win.logMessage("UDP: Can't find the scene for wearItem RPC, aborting", udpTag); else { for (Player* dest : scene->players) if (dest->pony.netviewId != netviewId) sendWearItemRPC(this, dest, item); } return true; }