예제 #1
0
        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));
            }
        }
예제 #2
0
        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));
        }