bool Equipment::equip(SPItem item, unsigned int skillBase, unsigned int magicBase, bool checkCanEquip) { if (item->getUsageType() == ItemUsageType::equip && (!checkCanEquip || item->getEquippedStatus() == ItemEquippedStatus::not_equipped)) { // check required skill / magic, check unequip as on client EquipmentType et = getEquipmentType(item); //bool canEquip1 = canEquip(item, skillBase, magicBase); //std::cout << "eq type: " << et << (canEquip1 ? " e ok" : " enok ") << std::endl; if (et != et_invalid && (!checkCanEquip || canEquip(item, skillBase, magicBase))) { if (items[et].get() != 0) { unequip(item, skillBase, magicBase, false); } items[et] = item; item->setEquippedStatus(ItemEquippedStatus::equipped); calculateEffects(); return true; } } return false; }
bool Equipment::unequip(SPItem item, unsigned int skillBase, unsigned int magicBase, bool removeOnly) { if (item->getUsageType() == ItemUsageType::equip && item->getEquippedStatus() == ItemEquippedStatus::equipped) { // check required skill / magic, check unequip as on client EquipmentType et = getEquipmentType(item); std::cout << "et: " << et << ((items[et].get()!=0) ? " not null" : "null") << std::endl; if (et != et_invalid && items[et].get()!=0 && items[et]->getId() == item->getId()) { if (!removeOnly) { items[et]->setEquippedStatus(ItemEquippedStatus::not_equipped); } items[et] = SPItem(); // null item // check if other items need to be unequipped as a consequence of this item being removed (skill / magic might have dropped) checkUnequipUnsupportedItems(skillBase, magicBase, removeOnly); calculateEffects(); return true; } } return false; }