Example #1
0
        private void GiveBackpackWorldmodel(BasePlayer player)
        {
            SphereEntity sph = GameManager.server.CreateEntity(spherePrefab, player.eyes.position, player.transform.rotation) as SphereEntity;

            sph.Spawn();
            sph.lerpSpeed     = 0f;
            sph.currentRadius = 0.6f;
            sph.SetParent(player, "spine3");
            sph.transform.localPosition = new Vector3(-0.08f, 0, 0);
            sph.transform.rotation      = Quaternion.Euler(0, 270, 180);
            DroppedItemContainer gObj = GameManager.server.CreateEntity(itemWorldModel, player.transform.position) as DroppedItemContainer;

            //PrintComponents(sph);
            gObj.ResetRemovalTime(9999999999999);
            //gObj.transform.localPosition = new Vector3(0, 0, 0);
            //gObj.transform.rotation = Quaternion.Euler(0, 270, 180);
            gObj.Spawn();
            UnityEngine.Object.DestroyImmediate(gObj.GetComponent <Rigidbody>());
            gObj.SetParent(sph);
            gObj.transform.localPosition = new Vector3(0, 0, 0);
            gObj.SendNetworkUpdateImmediate();
            timer.Once(1.0f, () => {
                gObj.SetParent(player, "spine3");
                gObj.transform.localPosition = new Vector3(-0.08f, 0.0f, 0);
                gObj.transform.rotation      = Quaternion.Euler(0, 270, 180);
                timer.Once(0.2f, () => {
                    sph?.Kill();
                });
            });
        }
Example #2
0
            public void Drop(Vector3 position)
            {
                if (Inventory.Items.Count > 0)
                {
                    BaseEntity           entity    = GameManager.server.CreateEntity(BackpackPrefab, position, Quaternion.identity);
                    DroppedItemContainer container = entity as DroppedItemContainer;

                    container.inventory = new ItemContainer();
                    container.inventory.ServerInitialize(null, Inventory.Items.Count);
                    container.inventory.GiveUID();
                    container.inventory.entityOwner = container;
                    container.inventory.SetFlag(ItemContainer.Flag.NoItemInput, true);

                    foreach (Item item in Inventory.Items.Select(i => i.ToItem()))
                    {
                        if (!item.MoveToContainer(container.inventory))
                        {
                            item.Remove();
                        }
                    }

                    container.ResetRemovalTime();

                    container.Spawn();

                    container.playerName    = "Backpack";
                    container.playerSteamID = ownerID;

                    entity.name = "droppedbackpack";
                }

                EraseContents();
            }
Example #3
0
            public void Drop(Vector3 position)
            {
                if (_itemContainer.itemList.Count > 0)
                {
                    BaseEntity           entity    = GameManager.server.CreateEntity(BackpackPrefab, position, Quaternion.identity);
                    DroppedItemContainer container = entity as DroppedItemContainer;

                    container.playerName    = $"{FindOwnerPlayer()?.Name ?? "Somebody"}'s Backpack";
                    container.playerSteamID = _ownerId;

                    container.inventory = new ItemContainer();
                    container.inventory.ServerInitialize(null, _itemDataCollection.Count);
                    container.inventory.GiveUID();
                    container.inventory.entityOwner = container;
                    container.inventory.SetFlag(ItemContainer.Flag.NoItemInput, true);

                    foreach (Item item in _itemContainer.itemList.ToArray())
                    {
                        if (!item.MoveToContainer(container.inventory))
                        {
                            item.Remove();
                            item.DoRemove();
                        }
                    }

                    container.ResetRemovalTime();
                    container.Spawn();

                    if (!_instance._config.SaveBackpacksOnServerSave)
                    {
                        SaveData();
                    }
                }
            }
        void SetDespawnTime(DroppedItemContainer container)
        {
            float despawnTime = container.inventory.itemList.Max(x => settings.Instance.GetDespawnTime(x));

            timer.In(1f, () => //Time to make sure that despawn time isnt reset by the float.max value
            {
                container?.ResetRemovalTime(despawnTime);
            });
        }
Example #5
0
        /// <param name="recycler">The recycler entity we're "overwriting".</param>
        public Crafter(Recycler recycler)
        {
            CreationTime = DateTime.UtcNow;

            Recycler = recycler;

            CreateOutputContainer();

            // Reset despawn timer on loot bag once per minute.
            resetDespawnTimer = Utility.Timer.Every(60, () =>
            {
                if (!outputContainer.IsDestroyed)
                {
                    outputContainer.ResetRemovalTime();
                }
            });

            recycler.gameObject.AddComponent <GroundWatch>();
            recycler.gameObject.AddComponent <DestroyOnGroundMissing>();

            recycler.repair.enabled    = true;
            recycler.repair.itemTarget = ItemManager.FindItemDefinition("wall.frame.shopfront.metal");

            // Set health to 1000
            Recycler._maxHealth = 1000;
            Recycler.health     = recycler.MaxHealth();

            // Set up damage protection
            Recycler.baseProtection.density = 4;

            for (int i = 0; i < Recycler.baseProtection.amounts.Length; ++i)
            {
                Recycler.baseProtection.amounts[i] = Utility.Config.CrafterProtectionProperties[i];
            }

            // Set up decay
            var researchPrefab = GameManager.server.FindPrefab(Constants.DeployedResearchTablePrefab);             // Copying decay settings from research table

            if (researchPrefab == null)
            {
                Utility.LogWarning("Could not find research table prefab, skipping decay setup");
            }
            else
            {
                uint prefabID    = researchPrefab.GetComponent <BaseEntity>().prefabID;
                var  decay       = PrefabAttribute.server.Find <Decay>(prefabID);
                var  decayPoints = PrefabAttribute.server.FindAll <DecayPoint>(prefabID);

                typeof(DecayEntity).GetField("decay", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(Recycler, decay);
                typeof(DecayEntity).GetField("decayPoints", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(Recycler, decayPoints);
                BuildingManager.DecayEntities.Add(Recycler);
            }
        }
Example #6
0
            public DroppedItemContainer Drop(Vector3 position)
            {
                object hookResult = Interface.CallHook("CanDropBackpack", OwnerId, position);

                if (hookResult is bool && (bool)hookResult == false)
                {
                    return(null);
                }

                if (_itemContainer.itemList.Count == 0)
                {
                    return(null);
                }

                BaseEntity           entity    = GameManager.server.CreateEntity(BackpackPrefab, position, Quaternion.identity);
                DroppedItemContainer container = entity as DroppedItemContainer;

                // This needs to be set to "genericlarge" to allow up to 7 rows to be displayed.
                container.lootPanelName = "genericlarge";

                // The player name is being ignore due to the panelName being "genericlarge".
                // TODO: Try to figure out a way to have 7 rows with custom name.
                container.playerName    = $"{FindOwnerPlayer()?.Name ?? "Somebody"}'s Backpack";
                container.playerSteamID = OwnerId;

                container.inventory = new ItemContainer();
                container.inventory.ServerInitialize(null, _itemContainer.itemList.Count);
                container.inventory.GiveUID();
                container.inventory.entityOwner = container;
                container.inventory.SetFlag(ItemContainer.Flag.NoItemInput, true);

                foreach (Item item in _itemContainer.itemList.ToArray())
                {
                    if (!item.MoveToContainer(container.inventory))
                    {
                        item.Remove();
                        item.DoRemove();
                    }
                }

                container.ResetRemovalTime();
                container.Spawn();

                ItemManager.DoRemoves();

                if (!_instance._config.SaveBackpacksOnServerSave)
                {
                    SaveData();
                }

                return(container);
            }
Example #7
0
        private object CheckAction(Item item, string action, BasePlayer player)
        {
            if (item.skin != skinID)
            {
                return(null);
            }

            if (string.Equals(action, "drop", StringComparison.OrdinalIgnoreCase))
            {
                BaseEntity           entity    = GameManager.server.CreateEntity(itemWorldModel, player.transform.position + Vector3.up, Quaternion.identity);
                DroppedItemContainer container = entity as DroppedItemContainer;

                container.lootPanelName = "genericlarge";

                if (player != null)
                {
                    container.playerName    = $"_back";
                    container.playerSteamID = player.userID;
                }
                container.inventory = new ItemContainer();
                container.inventory.ServerInitialize(null, 42);
                container.inventory.GiveUID();
                container.inventory.entityOwner = container;
                container.inventory.SetFlag(ItemContainer.Flag.NoItemInput, true);
                if (item.MoveToContainer(container.inventory))
                {
                    container.ResetRemovalTime();
                    container.Spawn();

                    ItemManager.DoRemoves();
                    DeleteBackpackWorldmodel(player);
                    return(true);
                }
                return(null);
            }

            NextTick(() => { OpenContainer(player, item.contents); });
            return(true);
        }