private void RPC_CreateKey(BaseEntity.RPCMessage rpc) { if (!rpc.player.CanInteract()) { return; } if (base.IsLocked() && !this.HasLockPermission(rpc.player)) { return; } ItemDefinition itemDefinition = ItemManager.FindItemDefinition(this.keyItemType.itemid); if (itemDefinition == null) { Debug.LogWarning(string.Concat("RPC_CreateKey: Itemdef is missing! ", this.keyItemType)); return; } ItemBlueprint itemBlueprint = ItemManager.FindBlueprint(itemDefinition); if (!rpc.player.inventory.crafting.CanCraft(itemBlueprint, 1)) { return; } ProtoBuf.Item.InstanceData instanceDatum = Facepunch.Pool.Get <ProtoBuf.Item.InstanceData>(); instanceDatum.dataInt = this.keyCode; rpc.player.inventory.crafting.CraftItem(itemBlueprint, rpc.player, instanceDatum, 1, 0, null); if (!this.firstKeyCreated) { this.LockLock(rpc.player); base.SendNetworkUpdate(BasePlayer.NetworkQueue.Update); this.firstKeyCreated = true; } }
public CraftEvent(ItemCrafter self, ItemBlueprint bp, BasePlayer owner, ProtoBuf.Item.InstanceData instanceData) { Crafter = Server.GetPlayer(owner); Target = bp.targetItem; itemCrafter = self; bluePrint = bp; }
private void RPC_CreateKey(RPCMessage rpc) { if (!rpc.player.CanInteract() || (IsLocked() && !HasLockPermission(rpc.player))) { return; } ItemDefinition itemDefinition = ItemManager.FindItemDefinition(keyItemType.itemid); if (itemDefinition == null) { Debug.LogWarning("RPC_CreateKey: Itemdef is missing! " + keyItemType); return; } ItemBlueprint bp = ItemManager.FindBlueprint(itemDefinition); if (rpc.player.inventory.crafting.CanCraft(bp)) { ProtoBuf.Item.InstanceData instanceData = Facepunch.Pool.Get <ProtoBuf.Item.InstanceData>(); instanceData.dataInt = keyCode; rpc.player.inventory.crafting.CraftItem(bp, rpc.player, instanceData); if (!firstKeyCreated) { LockLock(rpc.player); SendNetworkUpdate(); firstKeyCreated = true; } } }
public CraftEvent(ItemCrafter self, ItemBlueprint bp, BasePlayer owner, ProtoBuf.Item.InstanceData instanceData, int amount, int skinid) { Crafter = Server.GetPlayer(owner); Target = bp.targetItem; itemCrafter = self; Amount = amount; bluePrint = bp; SkinID = skinid; }
private void PopulateContainer(BasePlayer player, ItemContainer container, List <ItemProfile> items = null) { if (items == null) { items = this.items; } foreach (ItemProfile profile in items) { Item item = ItemManager.CreateByItemID(Convert.ToInt32(profile.id), profile.amount); if (item is Item) { item.flags = profile.flags; item.skin = profile.skin; if (item.hasCondition) { item.condition = profile.condition; } var held = item.GetHeldEntity(); if (held is BaseEntity) { held.skinID = profile.skin; } var weapon = held as BaseProjectile; if (weapon != null) { BaseProjectile projectile = weapon as BaseProjectile; projectile.primaryMagazine.contents = profile.primaryMagazine; if (profile.ammoType != 0) { projectile.primaryMagazine.ammoType = ItemManager.FindItemDefinition(profile.ammoType); } } if (profile.contents != null) { if (profile.contents.Count > 0) { PopulateContainer(player, item.contents, profile.contents); } } if (item.info.shortname == "door.key" && profile.dataInt != 0) { ProtoBuf.Item.InstanceData instanceData = Facepunch.Pool.Get <ProtoBuf.Item.InstanceData> (); item.instanceData = instanceData; item.instanceData.ShouldPool = false; item.instanceData.dataInt = profile.dataInt; } item.MoveToContainer(container, profile.slot); } } }
public bool CraftItem(ItemBlueprint bp, BasePlayer owner, ProtoBuf.Item.InstanceData instanceData = null, int amount = 1, int skinID = 0, Item fromTempBlueprint = null, bool free = false) { if (!CanCraft(bp, amount, free)) { return(false); } taskUID++; ItemCraftTask itemCraftTask = Facepunch.Pool.Get <ItemCraftTask>(); itemCraftTask.blueprint = bp; if (!free) { CollectIngredients(bp, itemCraftTask, amount, owner); } itemCraftTask.endTime = 0f; itemCraftTask.taskUID = taskUID; itemCraftTask.owner = owner; itemCraftTask.instanceData = instanceData; if (itemCraftTask.instanceData != null) { itemCraftTask.instanceData.ShouldPool = false; } itemCraftTask.amount = amount; itemCraftTask.skinID = skinID; if (fromTempBlueprint != null && itemCraftTask.takenItems != null) { fromTempBlueprint.RemoveFromContainer(); itemCraftTask.takenItems.Add(fromTempBlueprint); itemCraftTask.conditionScale = 0.5f; } object obj = Interface.CallHook("OnItemCraft", itemCraftTask, owner, fromTempBlueprint); if (obj is bool) { if (itemCraftTask.instanceData != null) { fromTempBlueprint.instanceData = itemCraftTask.instanceData; } return((bool)obj); } queue.AddLast(itemCraftTask); if (itemCraftTask.owner != null) { itemCraftTask.owner.Command("note.craft_add", itemCraftTask.taskUID, itemCraftTask.blueprint.targetItem.itemid, amount, itemCraftTask.skinID); } return(true); }
public bool TryCraftAKey(BasePlayer player, bool free) { if (!isServer) { return(false); } if (!HasALock) { Debug.LogError(GetType().Name + ": Can't create a key: No lock."); return(false); } ItemBlueprint bp = ItemManager.FindBlueprint(owner.carKeyDefinition); if (player.inventory.crafting.CanCraft(bp, 1, free)) { ProtoBuf.Item.InstanceData instanceData = Pool.Get <ProtoBuf.Item.InstanceData>(); instanceData.dataInt = LockID; return(player.inventory.crafting.CraftItem(bp, player, instanceData, 1, 0, null, free)); } return(false); }
public void ReceiveInstanceData(ProtoBuf.Item.InstanceData data) { GrowableGeneEncoding.DecodeIntToGenes(data.dataInt, Genes); GrowableGeneEncoding.DecodeIntToPreviousGenes(data.dataInt, Genes); }
public void ReceiveInstanceData(ProtoBuf.Item.InstanceData data) { this.genetics = data.dataInt; }
public BaseInstanceData(ProtoBuf.Item.InstanceData proto) { protobuf = proto; }
public virtual void Load(ProtoBuf.Item load) { if (this.info == null || this.info.itemid != load.itemid) { this.info = ItemManager.FindItemDefinition(load.itemid); } this.uid = load.UID; this.name = load.name; this.text = load.text; this.amount = load.amount; this.position = load.slot; this.busyTime = load.locktime; this.removeTime = load.removetime; this.flags = (Item.Flag)load.flags; this.worldEnt.uid = load.worldEntity; this.heldEntity.uid = load.heldEntity; if (this.instanceData != null) { this.instanceData.ShouldPool = true; this.instanceData.ResetToPool(); this.instanceData = null; } this.instanceData = load.instanceData; if (this.instanceData != null) { this.instanceData.ShouldPool = false; } this.skin = load.skinid; if (this.info == null || this.info.itemid != load.itemid) { this.info = ItemManager.FindItemDefinition(load.itemid); } if (this.info == null) { return; } this._condition = 0f; this._maxCondition = 0f; if (load.conditionData != null) { this._condition = load.conditionData.condition; this._maxCondition = load.conditionData.maxCondition; } else if (this.info.condition.enabled) { this._condition = this.info.condition.max; this._maxCondition = this.info.condition.max; } if (load.contents != null) { if (this.contents == null) { this.contents = new ItemContainer(); if (this.isServer) { this.contents.ServerInitialize(this, load.contents.slots); } } this.contents.Load(load.contents); } if (this.isServer) { this.removeTime = 0f; this.OnItemCreated(); } }
public void ReceiveInstanceData(ProtoBuf.Item.InstanceData data) { rustWattSeconds = data.dataInt; }
// ItemCrafter.CraftItem() public static bool On_PlayerStartCrafting(ItemCrafter self, ItemBlueprint bp, BasePlayer owner, ProtoBuf.Item.InstanceData instanceData = null, int amount = 1, int skinID = 0) { CraftEvent ce = new CraftEvent(self, bp, owner, instanceData, amount, skinID); OnNext("On_PlayerStartCrafting", ce); if (!self.CanCraft(bp, ce.Amount)) { return(false); } if (ce.Cancel) { if (ce.cancelReason != String.Empty) { ce.Crafter.Message(ce.cancelReason); } return(false); } self.taskUID++; ItemCraftTask itemCraftTask = Facepunch.Pool.Get <ItemCraftTask>(); itemCraftTask.blueprint = bp; self.CallMethod("CollectIngredients", bp, ce.Amount, owner); itemCraftTask.endTime = 0; itemCraftTask.taskUID = self.taskUID; itemCraftTask.owner = owner; itemCraftTask.instanceData = instanceData; if (itemCraftTask.instanceData != null) { itemCraftTask.instanceData.ShouldPool = false; } itemCraftTask.amount = ce.Amount; itemCraftTask.skinID = ce.SkinID; self.queue.Enqueue(itemCraftTask); if (itemCraftTask.owner != null) { itemCraftTask.owner.Command("note.craft_add", new object[] { itemCraftTask.taskUID, itemCraftTask.blueprint.targetItem.itemid, amount }); } return(true); }
// ItemCrafter.CraftItem() public static bool PlayerStartCrafting(ItemCrafter self, ItemBlueprint bp, BasePlayer owner, ProtoBuf.Item.InstanceData instanceData = null) { ItemBlueprint bpcopy = new ItemBlueprint(); bpcopy.amountToCreate = bp.amountToCreate; bpcopy.defaultBlueprint = bp.defaultBlueprint; bpcopy.ingredients = bp.ingredients; bpcopy.rarity = bp.rarity; bpcopy.targetItem = bp.targetItem; bpcopy.time = bp.time / Server.GetInstance().CraftingTimeScale; bpcopy.userCraftable = bp.userCraftable; CraftEvent ce = new CraftEvent(self, bpcopy, owner, instanceData); OnPlayerStartCrafting.OnNext(ce); if (!self.CanCraft(bpcopy, 1)) { return(false); } if (ce.Cancel) { if (ce.cancelReason != "") { owner.SendConsoleCommand("chat.add", 0, String.Format("{0}: {1}", Server.server_message_name.ColorText("fa5"), ce.cancelReason)); } return(false); } self.taskUID++; ItemCraftTask itemCraftTask = new ItemCraftTask(); itemCraftTask.blueprint = bpcopy; if (!ce.FreeCraft) { foreach (ItemAmount current in bpcopy.ingredients) { float amount = current.amount; foreach (ItemContainer current2 in self.containers) { amount -= current2.Take(itemCraftTask.ingredients, current.itemid, (int)amount); } } } itemCraftTask.endTime = 0; itemCraftTask.taskUID = self.taskUID; itemCraftTask.owner = owner; itemCraftTask.instanceData = instanceData; self.queue.Enqueue(itemCraftTask); if (itemCraftTask.owner != null) { itemCraftTask.owner.Command(String.Format("note.craft_add {0} {1}", itemCraftTask.taskUID, itemCraftTask.blueprint.targetItem.itemid)); } return(true); }