Пример #1
0
 public InventoryData(LootableCorpse corpse)
 {
     for (int i = 0; i < corpse.containers.Length; i++)
     {
         items.AddRange(GetItems(corpse.containers[i], (ContainerType)i));
     }
 }
 private object CanLootEntity(BasePlayer player, LootableCorpse corpse)
 {
     if (CanLootCorpse)
     {
         return(null);
     }
     if (CheckHelper(player, corpse as BaseEntity))
     {
         return(null);
     }
     if (IsFriend(corpse.playerSteamID, player.userID))
     {
         return(null);
     }
     if (UsePermission && !permission.UserHasPermission(corpse.playerSteamID.ToString(), CorpsePerm))
     {
         return(null);
     }
     if (corpse.playerSteamID < 76561197960265728L || player.userID == corpse.playerSteamID)
     {
         return(null);
     }
     SendReply(player, lang.GetMessage("OnTryLootCorpse", this, player.UserIDString));
     return(true);
 }
Пример #3
0
    public virtual void SetupCorpse(BaseCorpse corpse)
    {
        corpse.flags = flags;
        LootableCorpse component = corpse.GetComponent <LootableCorpse>();

        if ((bool)component)
        {
            component.TakeFrom(inventory);
        }
    }
Пример #4
0
        private void OnEntitySpawned(BaseNetworkable entity)
        {
            LootableCorpse corpse = entity?.GetComponent <LootableCorpse>();

            if (corpse == null || corpse is NPCPlayerCorpse)
            {
                return;
            }

            TakePlayerItems(corpse);
        }
Пример #5
0
 private object CanLootEntity(BasePlayer player, LootableCorpse corpse)
 {
     if (!(corpse is PlayerCorpse))
     {
         return(null);
     }
     if (player.serverInput.IsDown(BUTTON.FIRE_PRIMARY) == false)
     {
         return(null);
     }
     PlayerData.Get(player).StartDragingCorpse(corpse);
     return(false);
 }
Пример #6
0
        private void DropBodyOfPlayer(BasePlayer player)
        {
            BaseCorpse corpse = player.DropCorpse("assets/prefabs/player/player_corpse.prefab");

            if (corpse != null)
            {
                LootableCorpse lootable = corpse as LootableCorpse;
                if (lootable != null)
                {
                    ItemContainer[] source = new ItemContainer[] { player.inventory?.containerMain, player.inventory?.containerWear, player.inventory?.containerBelt };
                    lootable.TakeFrom(source);
                    lootable.playerName    = player.displayName;
                    lootable.playerSteamID = player.userID;
                }
                corpse.SpawnAsMapEntity();
            }
        }
 private void OnEntitySpawned(LootableCorpse corpse)
 {
     if (corpse == null || corpse.IsDestroyed)
     {
         return;
     }
     foreach (var container in corpse.containers)
     {
         if (container == null)
         {
             continue;
         }
         foreach (var item in container.itemList.ToArray())
         {
             item.GetHeldEntity()?.Kill();
             item.DoRemove();
         }
     }
     corpse.Kill();
 }
Пример #8
0
            public void StartInspecting(BasePlayer p, BasePlayer t)
            {
                player = p;
                target = t;

                var corpse = GameManager.server.CreateEntity("assets/prefabs/player/player_corpse.prefab") as BaseCorpse;

                if (corpse == null)
                {
                    return;
                }
                corpse.parentEnt          = null;
                corpse.transform.position = new Vector3(player.transform.position.x, -100, player.transform.position.z);
                corpse.CancelInvoke("RemoveCorpse");

                view = corpse as LootableCorpse;

                if (view == null)
                {
                    return;
                }

                var source = new[] { target.inventory.containerMain, target.inventory.containerWear, target.inventory.containerBelt };

                view.containers = new ItemContainer[source.Length];
                for (var i = 0; i < source.Length; i++)
                {
                    view.containers[i]             = source[i];
                    view.containers[i].playerOwner = target;
                }

                view.playerName    = $"Inspecting {target.displayName}";
                view.playerSteamID = 0;
                view.enableSaving  = false;
                view.Spawn();
                view.GetComponentInChildren <Rigidbody>().useGravity = false;

                BeginLooting();

                InvokeRepeating("Inspect", 0f, 0.1f);
            }
Пример #9
0
        private void ProcessItems(LootableCorpse corpse, int container)
        {
            string cont = "";

            switch (container)
            {
            case 1:
                cont = "wear";
                break;

            case 2:
                cont = "belt";
                break;

            default:
                cont = "main";
                break;
            }

            ulong  ID         = corpse.playerSteamID;
            var    plyrInv    = playerInv[ID];
            var    items      = corpse.containers[container].itemList;
            var    percentage = GetPercentage(ID);
            double amount     = (float)(items.Count * percentage) / 100;

            amount = items.Count - amount;
            if (percentage == 0)
            {
                amount = items.Count;
            }
            amount = Math.Round(Convert.ToDouble(amount), 0, MidpointRounding.AwayFromZero);
            for (int i = 0; i < amount; i++)
            {
                var num       = UnityEngine.Random.Range(0, items.Count);
                var item      = items[num];
                var savedItem = ProcessItem(item, cont);
                plyrInv.Add(savedItem);
                items.Remove(item);
            }
            ;
        }
Пример #10
0
        private void RemoveInfiniteComponentsFromCorpse(LootableCorpse corpse)
        {
            //TODO : WTF how compo + map are removed if nothing is available here ????????????????

            Debug($"Corpse");
            //var container = corpse.containers[0];
            ////var containerList = new List<Item>();

            //Debug($"Remove comp : Corpse {container.capacity} slots");
            ////containerList.AddRange(container.itemList.Where(item => !_compo.Contains(item.info.itemid)));
            //container.itemList.AddRange(container.itemList.Where(item => _compo.Contains(item.info.itemid)));
            ////container.itemList.Clear();
            ////container.capacity = BasicInventorySlots;

            //foreach (var item in container.itemList)
            //{
            //	item.position = item.position - _compo.Count;
            //	//container.Take(null, componentToRemove, container.GetAmount(componentToRemove, false));
            //}
            ////container.itemList = containerList;
        }
Пример #11
0
        void CloseInventoryView(BasePlayer player, LootableCorpse view)
        {
            if (onlinePlayers[player].View == null)
            {
                return;
            }

            for (int i = 0; i < view.containers.Length; i++)
            {
                view.containers[i] = new ItemContainer();
            }

            if (player.inventory.loot.IsLooting())
            {
                player.SendConsoleCommand("inventory.endloot", null);
            }

            onlinePlayers[player].View   = null;
            onlinePlayers[player].Target = null;

            view.KillMessage();
        }
Пример #12
0
            void Awake()
            {
                corpse    = GetComponent <LootableCorpse>();
                container = corpse.containers[0];

                container.onItemAddedRemoved += (item, insert) =>
                {
                    if (!insert)
                    {
                        return;
                    }
                    var batteryCount = instance.batteries[cupboardId];
                    if (batteryCount >= instance.maxBatteryCount)
                    {
                        return;
                    }
                    int maxAccept = Convert.ToInt32(instance.maxBatteryCount - batteryCount);
                    if (item.amount > maxAccept)
                    {
                        batteryCount = instance.maxBatteryCount;
                        item.amount -= maxAccept;
                        if (!item.MoveToContainer(player.inventory.containerMain))
                        {
                            item.Drop(player.GetDropPosition(), player.GetDropVelocity());
                        }
                        instance.NextTick(Close);
                    }
                    else
                    {
                        batteryCount += item.amount;
                        item.Remove();
                    }
                    instance.batteries[cupboardId] = batteryCount;
                    instance.UpdateSelected(cupboardId);
                };
                container.canAcceptItem += item => item.info.shortname == "battery.small";
            }
Пример #13
0
 private object CanLootEntity(BasePlayer player, LootableCorpse corpse)
 {
     return(CanLoot(corpse.ShortPrefabName, player));
 }
Пример #14
0
 public void StartDragingCorpse(LootableCorpse corpse)
 {
     Corpse = corpse;
     _timer?.Destroy();
     _timer = _plugin.timer.Every(0.1f, TimerLoop);
 }
Пример #15
0
        private void TakePlayerItems(LootableCorpse corpse)
        {
            Dictionary <ContainerType, float> lossPercentage = GetLossPercentage(corpse.playerSteamID);

            if (lossPercentage == null || lossPercentage.Sum(x => x.Value) == 300)
            {
                return;
            }

            if (lossPercentage.Sum(x => x.Value) == 0)
            {
                storedData.AddData(corpse);

                foreach (ItemContainer container in corpse.containers)
                {
                    StripContainer(container);
                }
            }
            else
            {
                StoredData.InventoryData inventoryData = new StoredData.InventoryData();

                for (int i = 0; i < corpse.containers.Length; i++)
                {
                    ItemContainer container  = corpse.containers[i];
                    float         percentage = Mathf.Clamp(lossPercentage[(ContainerType)i], 0, 100);

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

                    if (percentage == 0)
                    {
                        for (int y = container.itemList.Count - 1; y >= 0; y--)
                        {
                            Item item = container.itemList[y];
                            inventoryData.AddItem(item, (ContainerType)i);
                            item.RemoveFromContainer();
                            item.Remove();
                            container.itemList.Remove(item);
                        }
                    }
                    else
                    {
                        int amount = container.itemList.Count - Convert.ToInt32(((float)container.itemList.Count * (float)percentage) / 100);

                        for (int y = 0; y < amount; y++)
                        {
                            Item item = container.itemList.GetRandom();
                            inventoryData.AddItem(item, (ContainerType)i);
                            item.RemoveFromContainer();
                            item.Remove();
                            container.itemList.Remove(item);
                        }
                    }
                }
                storedData.AddData(corpse.playerSteamID, inventoryData);
            }
            ItemManager.DoRemoves();
        }
Пример #16
0
 public void AddData(LootableCorpse corpse) => storedInventory[corpse.playerSteamID] = new InventoryData(corpse);
Пример #17
0
            void Awake()
            {
                corpse    = GetComponent <LootableCorpse>();
                container = corpse.containers[0];

                container.onItemAddedRemoved += (item, b) =>
                {
                    if (b == false)
                    {
                        if (!removed)
                        {
                            removed = true;
                            return;
                        }
                        container.itemList.ToList().ForEach(p =>
                        {
                            removed = false;
                            p.RemoveFromContainer();
                            p.Remove();
                        });

                        if (ammo > 0)
                        {
                            ((BaseProjectile)item.GetHeldEntity()).primaryMagazine.contents = ammo;
                            ammo = -1;
                        }
                        if (mods != null)
                        {
                            foreach (var mod in mods)
                            {
                                mod.MoveToContainer(item.contents);
                            }
                            mods = null;
                        }
                        insert    = false;
                        removed   = false;
                        canAccept = true;
                        if (ui && player != null)
                        {
                            instance.DestroyUI(player);
                            ui = false;
                        }
                    }
                    else
                    {
                        if (!insert)
                        {
                            page = 0;
                            def  = item.info;
                            item.RemoveFromContainer();
                            insert = true;
                            skins  = instance.GetSkins(def);
                            if (skins.Count > 1)
                            {
                                if (!ui)
                                {
                                    instance.DrawUI(player);
                                    ui = true;
                                }
                                else if (ui)
                                {
                                    instance.DestroyUI(player);
                                    ui = false;
                                }
                            }
                            container.capacity = 19;

                            var heldEntity = item.GetHeldEntity() as BaseProjectile;
                            if (heldEntity?.primaryMagazine != null)
                            {
                                ammo = heldEntity.primaryMagazine.contents;
                                heldEntity.primaryMagazine.contents = 0;
                            }
                            item.amount = 1;

                            if (item.contents != null && item.contents.itemList.Count > 0)
                            {
                                mods = new List <Item>();
                                for (int i = item.contents.itemList.Count - 1; i >= 0; i--)
                                {
                                    var mod = item.contents.itemList[i];
                                    if (mod == null)
                                    {
                                        continue;
                                    }
                                    mod.RemoveFromContainer();
                                    mods.Add(mod);
                                }
                            }
                            for (int i = 0; i < skins[0].Count; i++)
                            {
                                var skin = skins[0][i];
                                insertItem = InventoryUtils.CloneItem(item, skin);
                                insertItem.MoveToContainer(container, i, false);
                            }
                            this.item  = item;
                            insertItem = null;
                            canAccept  = false;
                            removed    = true;
                        }
                    }
                };
                container.canAcceptItem += item =>
                {
                    if (insertItem != item && instance.GetSkins(item.info)[0].Count <= 1)
                    {
                        return(false);
                    }
                    return(canAccept || insertItem == item);
                };
            }