//----[ hasEquipped ]-------------------------------------------------------- bool ClientItemsInterface::hasEquipped(unsigned int item_type, int quantity) { for (unsigned int i = 0; i < items_in_inventory_; ++i) { if (inventory_[i].equipped == false) continue; ItemInstance* item = inventory_[i].item.dereference(); if (!item) { repackInventory(); return false; } else { if (item->getDescription()->type_index == item_type) { quantity -= item->getQuantity(); if (quantity <= 0) return true; } } } return false; }
//----[ isCarryingNew ]------------------------------------------------------ bool ClientItemsInterface::isCarryingNew(unsigned int item_type, int quantity, ItemIDType oldest_id) { for (unsigned int i = 0; i < items_in_inventory_; ++i) { ItemInstance* item = inventory_[i].item.dereference(); if (!item) { repackInventory(); return false; } else { if (item->getDescription()->type_index == item_type && item->getUniqueID() >= oldest_id) { // consider only new items quantity -= item->getQuantity(); if (quantity <= 0) return true; } } } return false; }
//----[ changeEquipped ]----------------------------------------------------- bool ClientItemsInterface::changeEquipped(unsigned int item_index) { if (!inventoryItemIsValid(item_index)) return false; ItemInstance* item = inventory_[item_index].item.dereference(); int quantity = item->getQuantity(); if (!canHoldItems(1) && quantity > 1) return false; equipment_changed_ = true; inventory_[item_index].equipped = !inventory_[item_index].equipped; update_inventory_ = true; inventory_dirty_bits_.set(item_index); if (quantity > 1) { int quantity_to_remove = quantity - 1; item->removeQuantity(quantity_to_remove); ItemPointer new_item; bool succeeded = false; if (GlobalItemManager::singleton()->acquireNewItem( quantity_to_remove, item->getDescription()->type_index, &new_item)) { unsigned int new_index; if (giveItem(&new_item, &new_index)) { succeeded = true; } } if (!succeeded) { // put the quantity back since this new item doesn't exist item->addQuantity(quantity_to_remove); // make the item unequipped inventory_[item_index].equipped = false; } } return true; }