allow overwriting equips on DC NTE and 11/2000
This commit is contained in:
@@ -563,11 +563,11 @@ bool PlayerInventory::has_equipped_item(EquipSlot slot) const {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlayerInventory::equip_item_id(uint32_t item_id, EquipSlot slot) {
|
void PlayerInventory::equip_item_id(uint32_t item_id, EquipSlot slot, bool allow_overwrite) {
|
||||||
this->equip_item_index(this->find_item(item_id), slot);
|
this->equip_item_index(this->find_item(item_id), slot, allow_overwrite);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlayerInventory::equip_item_index(size_t index, EquipSlot slot) {
|
void PlayerInventory::equip_item_index(size_t index, EquipSlot slot, bool allow_overwrite) {
|
||||||
auto& item = this->items[index];
|
auto& item = this->items[index];
|
||||||
|
|
||||||
if (slot == EquipSlot::UNKNOWN) {
|
if (slot == EquipSlot::UNKNOWN) {
|
||||||
@@ -578,8 +578,12 @@ void PlayerInventory::equip_item_index(size_t index, EquipSlot slot) {
|
|||||||
throw runtime_error("incorrect item type for equip slot");
|
throw runtime_error("incorrect item type for equip slot");
|
||||||
}
|
}
|
||||||
if (this->has_equipped_item(slot)) {
|
if (this->has_equipped_item(slot)) {
|
||||||
|
if (allow_overwrite) {
|
||||||
|
this->unequip_item_slot(slot);
|
||||||
|
} else {
|
||||||
throw runtime_error("equip slot is already in use");
|
throw runtime_error("equip slot is already in use");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
item.flags |= 0x00000008;
|
item.flags |= 0x00000008;
|
||||||
// Units store which slot they're equipped in within the item data itself
|
// Units store which slot they're equipped in within the item data itself
|
||||||
|
|||||||
@@ -82,8 +82,8 @@ struct PlayerInventory {
|
|||||||
|
|
||||||
size_t find_equipped_item(EquipSlot slot) const;
|
size_t find_equipped_item(EquipSlot slot) const;
|
||||||
bool has_equipped_item(EquipSlot slot) const;
|
bool has_equipped_item(EquipSlot slot) const;
|
||||||
void equip_item_id(uint32_t item_id, EquipSlot slot);
|
void equip_item_id(uint32_t item_id, EquipSlot slot, bool allow_overwrite);
|
||||||
void equip_item_index(size_t index, EquipSlot slot);
|
void equip_item_index(size_t index, EquipSlot slot, bool allow_overwrite);
|
||||||
void unequip_item_id(uint32_t item_id);
|
void unequip_item_id(uint32_t item_id);
|
||||||
void unequip_item_slot(EquipSlot slot);
|
void unequip_item_slot(EquipSlot slot);
|
||||||
void unequip_item_index(size_t index);
|
void unequip_item_index(size_t index);
|
||||||
|
|||||||
@@ -1436,7 +1436,7 @@ static void on_equip_item(shared_ptr<Client> c, uint8_t command, uint8_t flag, v
|
|||||||
auto l = c->require_lobby();
|
auto l = c->require_lobby();
|
||||||
EquipSlot slot = static_cast<EquipSlot>(cmd.equip_slot.load());
|
EquipSlot slot = static_cast<EquipSlot>(cmd.equip_slot.load());
|
||||||
auto p = c->character();
|
auto p = c->character();
|
||||||
p->inventory.equip_item_id(cmd.item_id, slot);
|
p->inventory.equip_item_id(cmd.item_id, slot, is_pre_v1(c->version()));
|
||||||
c->log.info("Equipped item %08" PRIX32, cmd.item_id.load());
|
c->log.info("Equipped item %08" PRIX32, cmd.item_id.load());
|
||||||
|
|
||||||
forward_subcommand(c, command, flag, data, size);
|
forward_subcommand(c, command, flag, data, size);
|
||||||
|
|||||||
Reference in New Issue
Block a user