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); } }
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); } } }
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); }
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); } }
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())); }
// 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]); } } }
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); } } }
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); } }
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); }
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); }