ulong GetRandomSkin(ItemDefinition idef)
        {
            if (!idef)
            {
                return(0);
            }

            List <int> skins = Pool.GetList <int>();

            if (idef.skins != null && idef.skins.Length > 0)
            {
                skins.AddRange(from skin in idef.skins select skin.id);
            }

            if (idef.skins2 != null && idef.skins2.Length > 0)
            {
                skins.AddRange(from skin in idef.skins2 where skin != null select skin.Id);
            }

            var randomSkin = skins.GetRandom();

            Pool.FreeList(ref skins);

            return(randomSkin == 0 ? 0 : ItemDefinition.FindSkin(idef.itemid, randomSkin));
        }
        private void GiveItem(BasePlayer player, ItemDefinition item, List <int> stacks, int craftSkin)
        {
            var skin = ItemDefinition.FindSkin(item.itemid, craftSkin);

            if (skin == 0 && HasPerm(player, permRandom))
            {
                skin = GetRandomSkin(item);
            }

            if (!config.split)
            {
                var final = 0;

                foreach (var i in stacks)
                {
                    final += i;
                }

                var x = ItemManager.Create(item, final, skin);
                player.GiveItem(x);
                return;
            }

            foreach (var stack in stacks)
            {
                var x = ItemManager.Create(item, stack, skin);
                player.GiveItem(x);
            }
        }
Esempio n. 3
0
        private void GiveItem(BasePlayer player, ItemCraftTask task, ItemDefinition def, List <int> stacks, int taskSkinID)
        {
            var skin = ItemDefinition.FindSkin(def.itemid, taskSkinID);

            if (config.split == false)
            {
                var final = 0;

                foreach (var stack in stacks)
                {
                    final += stack;
                }

                var item = ItemManager.Create(def, final, skin);
                player.GiveItem(item);
                Interface.CallHook("OnItemCraftFinished", task, item);
            }
            else
            {
                foreach (var stack in stacks)
                {
                    var item = ItemManager.Create(def, stack, skin);
                    player.GiveItem(item);
                    Interface.CallHook("OnItemCraftFinished", task, item);
                }
            }
        }
Esempio n. 4
0
    public void FinishCrafting(ItemCraftTask task)
    {
        task.amount--;
        task.numCrafted++;
        ulong skin = ItemDefinition.FindSkin(task.blueprint.targetItem.itemid, task.skinID);
        Item  item = ItemManager.CreateByItemID(task.blueprint.targetItem.itemid, 1, skin);

        item.amount = task.blueprint.amountToCreate;
        if (item.hasCondition && task.conditionScale != 1f)
        {
            item.maxCondition *= task.conditionScale;
            item.condition     = item.maxCondition;
        }
        item.OnVirginSpawn();
        foreach (ItemAmount ingredient in task.blueprint.ingredients)
        {
            int num = (int)ingredient.amount;
            if (task.takenItems == null)
            {
                continue;
            }
            foreach (Item takenItem in task.takenItems)
            {
                if (takenItem.info == ingredient.itemDef)
                {
                    int num2 = Mathf.Min(takenItem.amount, num);
                    takenItem.UseItem(num);
                    num -= num2;
                }
                int num3 = 0;
            }
        }
        Facepunch.Rust.Analytics.Crafting(task.blueprint.targetItem.shortname, task.skinID);
        task.owner.Command("note.craft_done", task.taskUID, 1, task.amount);
        Interface.CallHook("OnItemCraftFinished", task, item);
        if (task.instanceData != null)
        {
            item.instanceData = task.instanceData;
        }
        if (!string.IsNullOrEmpty(task.blueprint.UnlockAchievment))
        {
            task.owner.GiveAchievement(task.blueprint.UnlockAchievment);
        }
        if (task.owner.inventory.GiveItem(item))
        {
            task.owner.Command("note.inv", item.info.itemid, item.amount);
            return;
        }
        ItemContainer itemContainer = containers.First();

        task.owner.Command("note.inv", item.info.itemid, item.amount);
        task.owner.Command("note.inv", item.info.itemid, -item.amount);
        item.Drop(itemContainer.dropPosition, itemContainer.dropVelocity);
    }
Esempio n. 5
0
    public void FinishCrafting(ItemCraftTask task)
    {
        --task.amount;
        ++task.numCrafted;
        ulong skin     = ItemDefinition.FindSkin(task.blueprint.targetItem.itemid, task.skinID);
        Item  byItemId = ItemManager.CreateByItemID(task.blueprint.targetItem.itemid, 1, skin);

        byItemId.amount = task.blueprint.amountToCreate;
        if (byItemId.hasCondition && (double)task.conditionScale != 1.0)
        {
            byItemId.maxCondition *= task.conditionScale;
            byItemId.condition     = byItemId.maxCondition;
        }
        byItemId.OnVirginSpawn();
        foreach (ItemAmount ingredient in task.blueprint.ingredients)
        {
            int amount = (int)ingredient.amount;
            if (task.takenItems != null)
            {
                foreach (Item takenItem in task.takenItems)
                {
                    if (Object.op_Equality((Object)takenItem.info, (Object)ingredient.itemDef))
                    {
                        int num = Mathf.Min(takenItem.amount, amount);
                        takenItem.UseItem(amount);
                        amount -= num;
                    }
                }
            }
        }
        Analytics.Crafting(task.blueprint.targetItem.shortname, task.skinID);
        task.owner.Command("note.craft_done", (object)task.taskUID, (object)1, (object)task.amount);
        Interface.CallHook("OnItemCraftFinished", (object)task, (object)byItemId);
        if (task.instanceData != null)
        {
            byItemId.instanceData = task.instanceData;
        }
        if (!string.IsNullOrEmpty(task.blueprint.UnlockAchievment))
        {
            task.owner.GiveAchievement(task.blueprint.UnlockAchievment);
        }
        if (task.owner.inventory.GiveItem(byItemId, (ItemContainer)null))
        {
            task.owner.Command("note.inv", (object)byItemId.info.itemid, (object)byItemId.amount);
        }
        else
        {
            ItemContainer itemContainer = this.containers.First <ItemContainer>();
            task.owner.Command("note.inv", (object)byItemId.info.itemid, (object)byItemId.amount);
            task.owner.Command("note.inv", (object)byItemId.info.itemid, (object)-byItemId.amount);
            byItemId.Drop(itemContainer.dropPosition, itemContainer.dropVelocity, (Quaternion)null);
        }
    }
        private void GiveItem(BasePlayer player, ItemDefinition item, int skinid, int amount)
        {
            if (!player.IsConnected)
            {
                return;
            }
            Item itemToGive = ItemManager.Create(item, amount, ItemDefinition.FindSkin(item.itemid, skinid));

            if (itemToGive != null)
            {
                player.GiveItem(itemToGive);
            }
        }
Esempio n. 7
0
        private ulong GetRandomSkin(ItemDefinition idef)
        {
            if (idef.skins.Length < 1 && idef.skins2.Length < 1)
            {
                return(0);
            }
            var skins = new List <int>();

            skins.AddRange(from sk in idef.skins select sk.id);
            skins.AddRange(from sk in idef.skins2 select sk.Id);

            return(ItemDefinition.FindSkin(idef.itemid, skins.GetRandom()));
        }
Esempio n. 8
0
        //

        private void InstantBulkCraft(BasePlayer player, ItemDefinition item, List <int> stacks, int craftSkin)
        {
            var skin = ItemDefinition.FindSkin(item.itemid, craftSkin);

            foreach (var stack in stacks)
            {
                var x = ItemManager.Create(item, stack, craftSkin != 0 && skin == 0uL ? (ulong)craftSkin : skin);
                player.GiveItem(x);
                if (ShowCraftNotes)
                {
                    player.Command(string.Concat(new object[] { "note.inv ", item.itemid, " ", stack }), new object[0]);
                }
            }
        }
Esempio n. 9
0
    public void ChangeSkin(BaseEntity.RPCMessage msg)
    {
        if ((double)Time.get_realtimeSinceStartup() < (double)this.nextSkinChangeTime)
        {
            return;
        }
        BasePlayer player = msg.player;
        int        num    = msg.read.Int32();
        Item       slot   = this.inventory.GetSlot(0);

        if (slot == null)
        {
            return;
        }
        if (num != 0 && !player.blueprints.steamInventory.HasItem(num))
        {
            this.debugprint("RepairBench.ChangeSkin player does not have item :" + (object)num + ":");
        }
        else
        {
            ulong skin = ItemDefinition.FindSkin(slot.info.itemid, num);
            if ((long)skin == (long)slot.skin)
            {
                this.debugprint("RepairBench.ChangeSkin cannot apply same skin twice : " + (object)skin + ": " + (object)slot.skin);
            }
            else
            {
                this.nextSkinChangeTime = Time.get_realtimeSinceStartup() + 0.75f;
                slot.skin = skin;
                slot.MarkDirty();
                BaseEntity heldEntity = slot.GetHeldEntity();
                if (Object.op_Inequality((Object)heldEntity, (Object)null))
                {
                    heldEntity.skinID = skin;
                    heldEntity.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);
                }
                if (!this.skinchangeEffect.isValid)
                {
                    return;
                }
                Effect.server.Run(this.skinchangeEffect.resourcePath, (BaseEntity)this, 0U, new Vector3(0.0f, 1.5f, 0.0f), Vector3.get_zero(), (Connection)null, false);
            }
        }
    }
Esempio n. 10
0
    public void ChangeSkin(BaseEntity.RPCMessage msg)
    {
        if (UnityEngine.Time.realtimeSinceStartup < this.nextSkinChangeTime)
        {
            return;
        }
        BasePlayer basePlayer = msg.player;
        int        num        = msg.read.Int32();
        Item       slot       = this.inventory.GetSlot(0);

        if (slot == null)
        {
            return;
        }
        if (num != 0 && !basePlayer.blueprints.steamInventory.HasItem(num))
        {
            this.debugprint(string.Concat("RepairBench.ChangeSkin player does not have item :", num, ":"));
            return;
        }
        ulong num1 = ItemDefinition.FindSkin(slot.info.itemid, num);

        if (num1 == slot.skin)
        {
            this.debugprint(string.Concat(new object[] { "RepairBench.ChangeSkin cannot apply same skin twice : ", num1, ": ", slot.skin }));
            return;
        }
        this.nextSkinChangeTime = UnityEngine.Time.realtimeSinceStartup + 0.75f;
        slot.skin = num1;
        slot.MarkDirty();
        BaseEntity heldEntity = slot.GetHeldEntity();

        if (heldEntity != null)
        {
            heldEntity.skinID = num1;
            heldEntity.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);
        }
        if (this.skinchangeEffect.isValid)
        {
            Effect.server.Run(this.skinchangeEffect.resourcePath, this, 0, new Vector3(0f, 1.5f, 0f), Vector3.zero, null, false);
        }
    }
Esempio n. 11
0
        private object OnItemCraft(ItemCraftTask task)
        {
            if (task.cancelled == true)
            {
                return(null);
            }
            var player     = task.owner;
            var target     = task.blueprint.targetItem;
            var targetName = target.shortname;

            if (targetName.Contains("key"))
            {
                return(null);
            }
            var stacks = GetStacks(target, task.amount * task.blueprint.amountToCreate);
            var slots  = player.inventory.containerMain.capacity + player.inventory.containerBelt.capacity - player.inventory.containerMain.itemList.Count + player.inventory.containerBelt.itemList.Count;

            if (slots < 0)
            {
                foreach (var item in task.takenItems)
                {
                    player.GiveItem(item);
                }
                task.cancelled = true;
            }
            else
            {
                foreach (var stack in stacks)
                {
                    var item = ItemManager.Create(target, stack, ItemDefinition.FindSkin(target.itemid, task.skinID));

                    player.GiveItem(item);
                    Interface.CallHook("OnItemCraftFinished", task, item);
                }
                task.cancelled = true;
            }
            return(null);
        }
        private ulong GetRandomSkin(ItemDefinition def)
        {
            if (def.skins.Length == 0 && def.skins2.Length == 0)
            {
                return(0);
            }
            var skins = new List <int> {
                0
            };

            if (def.skins != null)
            {
                skins.AddRange(def.skins.Select(skin => skin.id));
            }
            if (def.skins2 != null)
            {
                skins.AddRange(def.skins2.Select(skin => skin.Id));
            }
            var value = ItemDefinition.FindSkin(def.itemid, skins.GetRandom());
            var final = Convert.ToUInt64(value);

            return(final);
        }
Esempio n. 13
0
 private void InstantBulkCraft(BasePlayer player, ItemCraftTask task, ItemDefinition item, List <int> stacks, int craftSkin, ulong skin)
 {
     if (skin == 0uL)
     {
         skin = ItemDefinition.FindSkin(item.itemid, craftSkin);
     }
     foreach (var stack in stacks)
     {
         var itemtogive = ItemManager.Create(item, stack, craftSkin != 0 && skin == 0uL ? (ulong)craftSkin : skin);
         var held       = itemtogive.GetHeldEntity();
         if (held != null)
         {
             held.skinID = skin == 0uL ? (ulong)craftSkin : skin;
             held.SendNetworkUpdate();
         }
         player.GiveItem(itemtogive);
         if (config.ShowCraftNotes)
         {
             player.Command(string.Concat(new object[] { "note.inv ", item.itemid, " ", stack }), new object[0]);
         }
         Interface.CallHook("OnItemCraftFinished", task, itemtogive);
     }
 }
        private ulong GetRandomSkin(ItemDefinition def)
        {
            var skins = new List <int>();

            if (cache.TryGetValue(def.shortname, out skins) == false)
            {
                skins = new List <int>();
                if (def.skins != null)
                {
                    skins.AddRange(def.skins.Select(x => x.id));
                }
                if (def.skins2 != null)
                {
                    skins.AddRange(def.skins2.Select(x => x.Id));
                }
                cache.Add(def.shortname, skins);
            }

            if (skins.Count == 0)
            {
                return(0);
            }

            var ticks  = 0;
            var skin   = skins.GetRandom();
            var skinUL = ItemDefinition.FindSkin(def.itemid, skin);

            while (ticks < 20 && config.blocked.Contains(skinUL))
            {
                skin   = skins.GetRandom();
                skinUL = ItemDefinition.FindSkin(def.itemid, skin);
                ticks++;
            }

            return(ticks > 20 ? 0 : skinUL);
        }