示例#1
0
    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;
        }
    }
示例#2
0
 public CraftEvent(ItemCrafter self, ItemBlueprint bp, BasePlayer owner, ProtoBuf.Item.InstanceData instanceData)
 {
     Crafter     = Server.GetPlayer(owner);
     Target      = bp.targetItem;
     itemCrafter = self;
     bluePrint   = bp;
 }
示例#3
0
    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;
            }
        }
    }
示例#4
0
 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;
 }
示例#5
0
            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);
                    }
                }
            }
示例#6
0
    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);
    }
示例#7
0
    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);
    }
示例#8
0
 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;
 }
示例#10
0
 public BaseInstanceData(ProtoBuf.Item.InstanceData proto)
 {
     protobuf = proto;
 }
示例#11
0
 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();
     }
 }
示例#12
0
 public void ReceiveInstanceData(ProtoBuf.Item.InstanceData data)
 {
     rustWattSeconds = data.dataInt;
 }
示例#13
0
        // 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);
        }
示例#14
0
        // 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);
        }