Пример #1
0
        private static bool Prefix(DragDropCraftingPanel __instance)
        {
            if (!LoaderConfig.Instance.FreeCrafting)
            {
                return(true);
            }
            ProtoCraft instanceField    = Util.GetInstanceField <ProtoCraft>(__instance, "_currentCraft");
            int        _craftMultiplier = Util.GetInstanceField <int>(__instance, "_craftMultiplier");

            if (instanceField != null)
            {
                if (LoaderConfig.Instance.AvoidCraftNotice)
                {
                    GameInventoryHelper.AddItem(instanceField.Result, instanceField.ResultCount * _craftMultiplier, false, false);
                }
                else
                {
                    instanceField.Components.ForEach(delegate(CraftComponent comp)
                    {
                        ProtoItem item = comp.ValidItems.PickRandom <ProtoItem>();
                        int num        = comp.RequiredCount * _craftMultiplier;
                        if (!GameInventoryHelper.ContainsItem(item, num, false))
                        {
                            GameInventoryHelper.AddItem(item, num, false, false);
                        }
                    });
                }
                return(false);
            }
            return(true);
        }
Пример #2
0
 /// <summary>
 /// Set the transmission state of this SyncState object to synced, and recache its Outlook item.
 /// </summary>
 internal void SetSynced()
 {
     lock (this.txStateLock)
     {
         this.Cache         = this.CreateProtoItem(this.OutlookItem);
         this.TxState       = TransmissionState.Synced;
         this.OModifiedDate = DateTime.UtcNow;
     }
 }
        public static ProtoCraft getProtoCraft(ProtoItem item)
        {
            ProtoCraft result = null;

            foreach (ProtoCraft protoCraft in Loader.GetGameCraftings().Values)
            {
                if (protoCraft.Result == item)
                {
                    result = protoCraft;
                    break;
                }
            }
            return(result);
        }
 public static void Postfix(Builder __instance, string protoItemName, Vector3i location, Matrix3i rotation, int quickSlotUsed = -1, JSONClass uniqueData = null, int _buildCount = 0)
 {
     if (__instance == Player.Local.Builder && LoaderConfig.Instance.InfiniteItem)
     {
         UMFGUI.AddConsoleText("Placed: " + protoItemName, false);
         ProtoItem      protoItemByName = ProtoDatabase.GetProtoItemByName(protoItemName, Array.Empty <FindOptions>());
         ProtoItemBlock protoItemBlock  = protoItemByName as ProtoItemBlock;
         if (!protoItemName.Contains("hearthstone_white_item"))
         {
             protoItemBlock.GetProtoBlock();
             GameInventoryHelper.AddItem(protoItemByName, (_buildCount != 0) ? _buildCount : 1, true, false);
         }
     }
 }
 public static bool tryGetItemIndexEnough(ProtoItem protoItem, Inventory inv, out short slot, bool isQuickSlot)
 {
     for (int i = 0; i < (isQuickSlot ? getInventoryQuickSlotItems().Count : getInventoryItems().Count); i++)
     {
         ItemStack itemStack = isQuickSlot ? getInventoryQuickSlotItems()[i] : getInventoryItems()[i];
         int       num       = (itemStack != null) ? ItemStack.MaxStackCountForProtoItem(itemStack.ProtoItem) : 0;
         if (itemStack.ProtoItem != null && (itemStack.ProtoItem == protoItem && itemStack.StackSize < num && num != 0))
         {
             slot = (short)i;
             return(true);
         }
     }
     slot = (isQuickSlot ? inv.FirstEmptyQuickSlot() : inv.GetFirstEmptySlot(false));
     return(false);
 }
        public static bool ContainsItem(ProtoItem Item, bool quickSlot = false)
        {
            bool result = false;

            checked
            {
                for (int i = 0; i < ((!quickSlot) ? getInventoryItems().Count : getInventoryQuickSlotItems().Count); i++)
                {
                    ItemStack itemStack = (!quickSlot) ? getInventoryItems()[i] : getInventoryQuickSlotItems()[i];
                    int       num       = (itemStack != null) ? ItemStack.MaxStackCountForProtoItem(itemStack.ProtoItem) : 0;
                    if (itemStack != null && (itemStack.ProtoItem == Item && itemStack.StackSize < num && num != 0))
                    {
                        result = true;
                        break;
                    }
                }
                return(result);
            }
        }
Пример #7
0
        public void InitializesCorrectly()
        {
            var proto = new ProtoItem
            {
                Vnum        = 25300,
                Keywords    = "several keywords",
                Gender      = Gender.Male,
                Name        = new Name(),
                Look        = "Look",
                Description = "Description"
            };

            var item = new Item(proto);

            Assert.Equal(proto.Vnum, item.Vnum);
            Assert.Equal(proto.Keywords, item.Keywords);
            Assert.Equal(proto.Gender, item.Gender);
            Assert.Equal(proto.Name, item.Name);
            Assert.Equal(proto.Look, item.Look);
            Assert.Equal(proto.Description, item.Description);
        }
Пример #8
0
        public static bool ContainsItem(ProtoItem Item, bool quickSlot = false)
        {
            var result = false;

            checked
            {
                for (var i = 0; i < (!quickSlot ? getInventoryItems().Count : getInventoryQuickSlotItems().Count); i++)
                {
                    var itemStack = !quickSlot?getInventoryItems()[i] : getInventoryQuickSlotItems()[i];

                    var num = itemStack != null?ItemStack.MaxStackCountForProtoItem(itemStack.ProtoItem) : 0;

                    if (itemStack != null && itemStack.ProtoItem == Item && itemStack.StackSize < num && num != 0)
                    {
                        result = true;
                        break;
                    }
                }

                return(result);
            }
        }
Пример #9
0
        public static EntityComponentMessage AddItem(ProtoItem item, int Amount, bool isQuickSlot = false,
                                                     bool simulateCraft = false)
        {
            if (Player.Local == null && !Player.Local.IsConnected)
            {
                return(null);
            }
            var inventory = Player.Local.Inventory;
            var num       = ItemStack.MaxStackCountForProtoItem(item);
            var num2      = Amount >= num ? num : Amount;
            var itemStack = new ItemStack(item, num2);

            if (!ContainsItem(item, isQuickSlot))
            {
                var num3         = isQuickSlot ? inventory.FirstEmptyQuickSlot() : inventory.GetFirstEmptySlot();
                var inventoryAdd = new InventoryAdd(inventory, num3, itemStack, isQuickSlot);
                inventory.SendToServer(inventoryAdd);
                inventory.OnComponentMessage(inventoryAdd);
                if (simulateCraft)
                {
                    AudioController.Play(Player.Local.Crafting.SfxCraft);
                    NotificationCenter.Default.PostNotification(Player.CraftedSomethingEvent, getProtoCraft(item));
                }

                if (inventoryAdd.Item.ProtoItem is ProtoItemEquipment)
                {
                    var protoItemEquipment = (ProtoItemEquipment)inventoryAdd.Item.ProtoItem;
                    var inventoryEquip     = new InventoryEquip(inventory, true, inventoryAdd.Slot, protoItemEquipment.Slot,
                                                                inventoryAdd.SlotIsQuickSlot);
                    inventory.SendToServer(inventoryEquip);
                    inventory.OnComponentMessage(inventoryEquip);
                }

                return(inventoryAdd);
            }

            short num4;

            if (tryGetItemIndexEnough(itemStack.ProtoItem, inventory, out num4, isQuickSlot))
            {
                var inventoryModified = new InventoryModified(inventory, num4, (short)num2, isQuickSlot);
                inventory.SendToServer(inventoryModified);
                inventory.OnComponentMessage(inventoryModified);
                if (simulateCraft)
                {
                    AudioController.Play(Player.Local.Crafting.SfxCraft);
                    NotificationCenter.Default.PostNotification(Player.CraftedSomethingEvent,
                                                                getProtoCraft(itemStack.ProtoItem));
                }

                return(inventoryModified);
            }

            if (!tryGetItemIndexEnough(itemStack.ProtoItem, inventory, out num4, isQuickSlot))
            {
                var inventoryAdd2 = new InventoryAdd(inventory, num4, itemStack, isQuickSlot);
                inventory.OnComponentMessage(inventoryAdd2);
                inventory.SendToServer(inventoryAdd2);
                if (simulateCraft)
                {
                    AudioController.Play(Player.Local.Crafting.SfxCraft);
                    NotificationCenter.Default.PostNotification(Player.CraftedSomethingEvent,
                                                                getProtoCraft(itemStack.ProtoItem));
                }

                if (inventoryAdd2.Item.ProtoItem is ProtoItemEquipment)
                {
                    var protoItemEquipment2 = (ProtoItemEquipment)inventoryAdd2.Item.ProtoItem;
                    var inventoryEquip2     = new InventoryEquip(inventory, true, inventoryAdd2.Slot,
                                                                 protoItemEquipment2.Slot, inventoryAdd2.SlotIsQuickSlot);
                    inventory.SendToServer(inventoryEquip2);
                    inventory.OnComponentMessage(inventoryEquip2);
                }

                return(inventoryAdd2);
            }

            return(null);
        }