private void UnequipItem(InventoryItemInstance item, bool postMessage) { if (!item.Equipped) { throw new InvalidOperationException(); } EquipSlot slot = InventoryModel.GetItemSlot(item.ItemModel); if (slot != EquipSlot.None) { Equipped.Remove(slot); } //allow continuing even if it's not actually equippable, for fixing bugs //magazine logic if (item.ItemModel is RangedWeaponItemModel rwim && rwim.UseMagazine) { Inventory.AddItem(rwim.AType.ToString(), AmmoInMagazine[slot]); AmmoInMagazine[slot] = 0; } item.Equipped = false; UpdateStats(); if (postMessage) { QdmsMessageBus.Instance.PushBroadcast(new QdmsKeyValueMessage("RpgChangeWeapon", "Slot", slot)); } }
public void EquipItem(InventoryItemInstance item, EquipSlot?slotOverride) { if (item.Equipped) { throw new InvalidOperationException(); } EquipSlot slot = slotOverride ?? InventoryModel.GetItemSlot(item.ItemModel); if (slot == EquipSlot.None) { throw new InvalidOperationException(); } //unequip what was in the slot if (IsEquipped(slot)) { UnequipItem(Equipped[slot], false); } //if it's a two-handed weapon, also unequip the other slot if (item.ItemModel is WeaponItemModel && item.ItemModel.CheckFlag("TwoHanded") && Equipped.ContainsKey(slot == EquipSlot.LeftWeapon ? EquipSlot.RightWeapon : EquipSlot.LeftWeapon)) { UnequipItem(Equipped[slot == EquipSlot.LeftWeapon ? EquipSlot.RightWeapon : EquipSlot.LeftWeapon], false); } Equipped[slot] = item; //magazine logic if (item.ItemModel is RangedWeaponItemModel rwim && rwim.UseMagazine) { //var rwim = (RangedWeaponItemModel)item.ItemModel; AmmoInMagazine[slot] = Math.Min(rwim.MagazineSize, Inventory.CountItem(rwim.AType.ToString())); Inventory.RemoveItem(rwim.AType.ToString(), AmmoInMagazine[slot]); } item.Equipped = true; if (!string.IsNullOrEmpty(item?.ItemModel?.Scripts?.OnEquip)) { ScriptingModule.Call(item?.ItemModel?.Scripts?.OnEquip, new ScriptExecutionContext() { Caller = this }, item.ItemModel, item); } UpdateStats(); QdmsMessageBus.Instance.PushBroadcast(new QdmsKeyValueMessage("RpgChangeWeapon", "Slot", slot)); }