Иконка ресурса

FREE OGBarrels : 1.0.0 1.0.0

Нет прав для скачивания
C#:
using System.Linq;
using System.Collections.Generic;
using UnityEngine;
using Newtonsoft.Json;

namespace Oxide.Plugins
{
    [Info("OG Barrels", "Ridamees", "1.0.0")]
    class OGBarrels : RustPlugin
    {
        private class RewardItem
        {
            [JsonProperty("shortname")]
            public string Shortname { get; set; }
            [JsonProperty("min")]
            public int MinAmount { get; set; } = 1;
            [JsonProperty("max")]
            public int MaxAmount { get; set; } = 1;
            [JsonProperty("drop chance")]
            public float Chance { get; set; } = 0.75f;
            [JsonProperty("drop as bp chance")]
            public float BPChance { get; set; }
        }

        private class Configuration
        {
            [JsonProperty("Barrel shortnames")]
            public List<string> ValidBarrelShortnames { get; set; }
            [JsonProperty("Items drop amount")]
            public MinMaxConfig ItemsToSelectAtOnce { get; set; } = new MinMaxConfig();
            [JsonProperty("LootTable")]
            public List<RewardItem> RewardItems { get; set; }
        }

        public class MinMaxConfig
        {
            [JsonProperty("min")]
            public int MinAmount { get; set; } = 1;
            [JsonProperty("max")]
            public int MaxAmount { get; set; } = 3;
        }

        private Configuration config;

        private void OnServerInitialized()
        {
            LoadConfig();
            permission.RegisterPermission("ogbarrels.use", this);
            Subscribe(nameof(OnEntityDeath));
        }

        private void OnEntityDeath(BaseEntity entity, HitInfo hitInfo)
        {
            if (entity != null && config.ValidBarrelShortnames.Contains(entity.ShortPrefabName) && hitInfo != null && hitInfo.InitiatorPlayer != null)
            {
                BasePlayer initiator = hitInfo.InitiatorPlayer;

                if (permission.UserHasPermission(initiator.UserIDString, "ogbarrels.use"))
                {
                    SpawnRewardItems(entity.transform.position);
                }
            }
        }

        private void LoadConfig()
        {
            try
            {
                config = Config.ReadObject<Configuration>();
            }
            catch
            {
                Puts("Creating default configuration...");
                LoadDefaultConfig();
            }
            if (config == null || config.RewardItems == null || config.RewardItems.Count == 0)
            {
                LoadDefaultConfig();
            }
            if (config.ValidBarrelShortnames == null || config.ValidBarrelShortnames.Count == 0)
            {
                config.ValidBarrelShortnames = new List<string>
                {
                    "loot-barrel-1",
                    "loot-barrel-2",
                    "loot_barrel_1",
                    "loot_barrel_2"
                };
            }
            SaveConfig();
        }

        private void SaveConfig()
        {
            Config.WriteObject(config, true);
        }

        private RewardItem SelectRandomItem()
        {
            List<RewardItem> possibleItems = new List<RewardItem>();
            foreach (var rewardItem in config.RewardItems)
            {
                if (Random.Range(0f, 1f) <= rewardItem.Chance)
                {
                    possibleItems.Add(rewardItem);
                }
            }
            if (possibleItems.Count > 0)
            {
                int selectedIndex = Random.Range(0, possibleItems.Count);
                RewardItem selectedItem = possibleItems[selectedIndex];
                
                if (selectedItem.BPChance > 0.0f)
                {
                    float bpRoll = Random.Range(0f, 1f);
                    if (bpRoll <= selectedItem.BPChance)
                    {
                        return selectedItem;
                    }
                    else
                    {
                        return selectedItem;
                    }
                }
                else
                {
                    return selectedItem;
                }
            }
            return null;
        }

        private void SpawnRewardItems(Vector3 position)
        {
            List<RewardItem> selectedItems = new List<RewardItem>();
            int itemCount = UnityEngine.Random.Range(config.ItemsToSelectAtOnce.MinAmount, config.ItemsToSelectAtOnce.MaxAmount + 1);
            while (selectedItems.Count < itemCount)
            {
                RewardItem selectedItem = SelectRandomItem();
                if (selectedItem != null)
                {
                    selectedItems.Add(selectedItem);
                }
            }
            foreach (var selectedItem in selectedItems)
            {
                Vector3 spawnPosition = position + new Vector3(Random.Range(-0.2f, 0.2f), 0.8f, Random.Range(-0.2f, 0.2f));
                SpawnRewardItem(spawnPosition, selectedItem);
            }
        }

        private void SpawnRewardItem(Vector3 position, RewardItem rewardItem)
        {
            ItemDefinition itemDef = ItemManager.FindItemDefinition(rewardItem.Shortname);
            if (itemDef == null)
                return;
            int amount = Random.Range(rewardItem.MinAmount, rewardItem.MaxAmount + 1);
            if (Random.Range(0f, 1f) <= rewardItem.BPChance && itemDef.Blueprint != null && itemDef.Blueprint.isResearchable)
            {
                var blueprintBaseDef = ItemManager.FindItemDefinition("blueprintbase");
                if (blueprintBaseDef != null)
                {
                    Item blueprintItem = ItemManager.Create(blueprintBaseDef, 1, 0uL);
                    if (blueprintItem != null)
                    {
                        blueprintItem.blueprintTarget = itemDef.itemid;
                        blueprintItem.Drop(position, Vector3.zero);
                    }
                    else
                    {
                        Debug.LogError("Failed to create blueprint item for: " + rewardItem.Shortname);
                    }
                }
                else
                {
                    Debug.LogError("Blueprint base definition not found.");
                }
            }
            else
            {
                Item item = ItemManager.Create(itemDef, amount);
                if (item != null)
                {
                    item.Drop(position, Vector3.zero);
                }
            }
        }

        private void LoadDefaultConfig()
        {
            config = new Configuration
            {
                RewardItems = new List<RewardItem>
                {
                    new RewardItem { Shortname = "rifle.ak", Chance = 0.25f, BPChance = 0.15f},
                    new RewardItem { Shortname = "ammo.pistol", MinAmount = 1, MaxAmount = 20},
                    new RewardItem { Shortname = "ammo.pistol.fire", MinAmount = 1, MaxAmount = 20},
                    new RewardItem { Shortname = "ammo.pistol.hv", MinAmount = 1, MaxAmount = 20},
                    new RewardItem { Shortname = "ammo.rifle", MinAmount = 1, MaxAmount = 30},
                    new RewardItem { Shortname = "ammo.rifle.explosive", MinAmount = 1, MaxAmount = 30},
                    new RewardItem { Shortname = "ammo.rifle.incendiary", MinAmount = 1, MaxAmount = 30},
                    new RewardItem { Shortname = "ammo.rifle.hv", MinAmount = 1, MaxAmount = 30},
                    new RewardItem { Shortname = "ammo.rocket.basic", MinAmount = 1, MaxAmount = 2, Chance = 0.25f},
                    new RewardItem { Shortname = "ammo.rocket.hv", MinAmount = 1, MaxAmount = 2, Chance = 0.25f},
                    new RewardItem { Shortname = "ammo.shotgun", MinAmount = 1, MaxAmount = 15},
                    new RewardItem { Shortname = "ammo.shotgun.slug", MinAmount = 1, MaxAmount = 15},
                    new RewardItem { Shortname = "antiradpills", MinAmount = 1, MaxAmount = 5},
                    new RewardItem { Shortname = "apple"},
                    new RewardItem { Shortname = "apple.spoiled"},
                    new RewardItem { Shortname = "arrow.hv", MinAmount = 1, MaxAmount = 5},
                    new RewardItem { Shortname = "axe.salvaged"},
                    new RewardItem { Shortname = "barricade.concrete"},
                    new RewardItem { Shortname = "barricade.metal"},
                    new RewardItem { Shortname = "barricade.sandbags"},
                    new RewardItem { Shortname = "barricade.stone"},
                    new RewardItem { Shortname = "barricade.woodwire"},
                    new RewardItem { Shortname = "trap.bear"},
                    new RewardItem { Shortname = "bed"},
                    new RewardItem { Shortname = "black.raspberries"},
                    new RewardItem { Shortname = "blueberries", MinAmount = 1, MaxAmount = 5},
                    new RewardItem { Shortname = "rifle.bolt", Chance = 0.25f, BPChance = 0.15f},
                    new RewardItem { Shortname = "bone.armor.jacket"},
                    new RewardItem { Shortname = "bone.armor.pants"},
                    new RewardItem { Shortname = "bone.fragments"},
                    new RewardItem { Shortname = "box.wooden.large"},
                    new RewardItem { Shortname = "bucket.water"},
                    new RewardItem { Shortname = "bucket.helmet"},
                    new RewardItem { Shortname = "burlap.gloves"},
                    new RewardItem { Shortname = "tool.camera"},
                    new RewardItem { Shortname = "can.beans", MinAmount = 1, MaxAmount = 3},
                    new RewardItem { Shortname = "can.beans.empty"},
                    new RewardItem { Shortname = "can.tuna", MinAmount = 1, MaxAmount = 3},
                    new RewardItem { Shortname = "can.tuna.empty"},
                    new RewardItem { Shortname = "candycane"},
                    new RewardItem { Shortname = "cctv.camera"},
                    new RewardItem { Shortname = "ceilinglight"},
                    new RewardItem { Shortname = "charcoal"},
                    new RewardItem { Shortname = "chicken.burned"},
                    new RewardItem { Shortname = "chicken.cooked", MinAmount = 1, MaxAmount = 3},
                    new RewardItem { Shortname = "chicken.raw"},
                    new RewardItem { Shortname = "chicken.spoiled"},
                    new RewardItem { Shortname = "chocolate"},
                    new RewardItem { Shortname = "cloth", MinAmount = 1, MaxAmount = 50},
                    new RewardItem { Shortname = "coffeecan.helmet"},
                    new RewardItem { Shortname = "corn", MinAmount = 1, MaxAmount = 5},
                    new RewardItem { Shortname = "seed.corn", MinAmount = 1, MaxAmount = 5},
                    new RewardItem { Shortname = "crossbow"},
                    new RewardItem { Shortname = "crude.oil", MinAmount = 1, MaxAmount = 50},
                    new RewardItem { Shortname = "explosive.timed", MinAmount = 1, MaxAmount = 2, Chance = 0.25f },
                    new RewardItem { Shortname = "explosive.satchel", MinAmount = 1, MaxAmount = 3, Chance = 0.25f },
                    new RewardItem { Shortname = "explosives", MinAmount = 1, MaxAmount = 15, Chance = 0.25f},
                    new RewardItem { Shortname = "fat.animal", MinAmount = 1, MaxAmount = 50},
                    new RewardItem { Shortname = "fish.cooked", MinAmount = 1, MaxAmount = 3},
                    new RewardItem { Shortname = "fish.raw", MinAmount = 1, MaxAmount = 3},
                    new RewardItem { Shortname = "flamethrower", Chance = 0.25f, BPChance = 0.15f},
                    new RewardItem { Shortname = "weapon.mod.flashlight"},
                    new RewardItem { Shortname = "weapon.mod.burstmodule"},
                    new RewardItem { Shortname = "furnace.large"},
                    new RewardItem { Shortname = "gates.external.high.stone"},
                    new RewardItem { Shortname = "gates.external.high.wood"},
                    new RewardItem { Shortname = "granolabar", MinAmount = 1, MaxAmount = 3},
                    new RewardItem { Shortname = "grenade.beancan", MinAmount = 1, MaxAmount = 3},
                    new RewardItem { Shortname = "grenade.f1", MinAmount = 1, MaxAmount = 3},
                    new RewardItem { Shortname = "fun.guitar"},
                    new RewardItem { Shortname = "hammer.salvaged"},
                    new RewardItem { Shortname = "hat.boonie"},
                    new RewardItem { Shortname = "hat.miner"},
                    new RewardItem { Shortname = "hatchet"},
                    new RewardItem { Shortname = "hazmatsuit"},
                    new RewardItem { Shortname = "seed.hemp", MinAmount = 1, MaxAmount = 3},
                    new RewardItem { Shortname = "weapon.mod.holosight"},
                    new RewardItem { Shortname = "hq.metal.ore", MinAmount = 1, MaxAmount = 50},
                    new RewardItem { Shortname = "humanmeat.burned"},
                    new RewardItem { Shortname = "humanmeat.cooked", MinAmount = 1, MaxAmount = 3},
                    new RewardItem { Shortname = "humanmeat.raw", MinAmount = 1, MaxAmount = 3},
                    new RewardItem { Shortname = "humanmeat.spoiled"},
                    new RewardItem { Shortname = "icepick.salvaged"},
                    new RewardItem { Shortname = "jacket.snow"},
                    new RewardItem { Shortname = "jacket"},
                    new RewardItem { Shortname = "jackolantern.angry"},
                    new RewardItem { Shortname = "jackolantern.happy"},
                    new RewardItem { Shortname = "trap.landmine"},
                    new RewardItem { Shortname = "lantern"},
                    new RewardItem { Shortname = "largemedkit"},
                    new RewardItem { Shortname = "weapon.mod.lasersight"},
                    new RewardItem { Shortname = "leather"},
                    new RewardItem { Shortname = "longsword"},
                    new RewardItem { Shortname = "mace"},
                    new RewardItem { Shortname = "machete"},
                    new RewardItem { Shortname = "mask.balaclava"},
                    new RewardItem { Shortname = "bearmeat.burned"},
                    new RewardItem { Shortname = "bearmeat.cooked", MinAmount = 1, MaxAmount = 3},
                    new RewardItem { Shortname = "bearmeat", MinAmount = 1, MaxAmount = 3},
                    new RewardItem { Shortname = "meat.pork.burned"},
                    new RewardItem { Shortname = "meat.pork.cooked", MinAmount = 1, MaxAmount = 3},
                    new RewardItem { Shortname = "meat.boar", MinAmount = 1, MaxAmount = 3},
                    new RewardItem { Shortname = "wolfmeat.burned"},
                    new RewardItem { Shortname = "wolfmeat.cooked", MinAmount = 1, MaxAmount = 3},
                    new RewardItem { Shortname = "wolfmeat.raw", MinAmount = 1, MaxAmount = 3},
                    new RewardItem { Shortname = "wolfmeat.spoiled"},
                    new RewardItem { Shortname = "metal.facemask", Chance = 0.25f, BPChance = 0.15f},
                    new RewardItem { Shortname = "metal.fragments", MinAmount = 100, MaxAmount = 300},
                    new RewardItem { Shortname = "metal.ore", MinAmount = 100, MaxAmount = 300},
                    new RewardItem { Shortname = "metal.plate.torso", Chance = 0.25f, BPChance = 0.15f},
                    new RewardItem { Shortname = "metal.refined", MinAmount = 10, MaxAmount = 30},
                    new RewardItem { Shortname = "fish.minnows"},
                    new RewardItem { Shortname = "mushroom", MinAmount = 1, MaxAmount = 3},
                    new RewardItem { Shortname = "weapon.mod.muzzleboost"},
                    new RewardItem { Shortname = "weapon.mod.muzzlebrake"},
                    new RewardItem { Shortname = "pickaxe"},
                    new RewardItem { Shortname = "pistol.revolver", Chance = 0.25f, BPChance = 0.15f},
                    new RewardItem { Shortname = "pistol.semiauto", Chance = 0.25f, BPChance = 0.15f},
                    new RewardItem { Shortname = "pookie.bear"},
                    new RewardItem { Shortname = "xmas.present.large"},
                    new RewardItem { Shortname = "xmas.present.medium"},
                    new RewardItem { Shortname = "xmas.present.small"},
                    new RewardItem { Shortname = "pumpkin"},
                    new RewardItem { Shortname = "seed.pumpkin"},
                    new RewardItem { Shortname = "target.reactive"},
                    new RewardItem { Shortname = "riot.helmet"},
                    new RewardItem { Shortname = "roadsign.jacket"},
                    new RewardItem { Shortname = "roadsign.kilt"},
                    new RewardItem { Shortname = "rocket.launcher", Chance = 0.25f, BPChance = 0.15f},
                    new RewardItem { Shortname = "salvaged.cleaver"},
                    new RewardItem { Shortname = "salvaged.sword"},
                    new RewardItem { Shortname = "santahat"},
                    new RewardItem { Shortname = "weapon.mod.small.scope"},
                    new RewardItem { Shortname = "rifle.semiauto", Chance = 0.25f, BPChance = 0.15f},
                    new RewardItem { Shortname = "shelves" },
                    new RewardItem { Shortname = "shotgun.pump", Chance = 0.25f, BPChance = 0.15f},
                    new RewardItem { Shortname = "shotgun.waterpipe", Chance = 0.25f, BPChance = 0.15f},
                    new RewardItem { Shortname = "shotgun.double", Chance = 0.25f, BPChance = 0.15f},
                    new RewardItem { Shortname = "shutter.metal.embrasure.a"},
                    new RewardItem { Shortname = "shutter.metal.embrasure.b"},
                    new RewardItem { Shortname = "shutter.wood.a"},
                    new RewardItem { Shortname = "sign.hanging.banner.large"},
                    new RewardItem { Shortname = "sign.hanging"},
                    new RewardItem { Shortname = "sign.hanging.ornate"},
                    new RewardItem { Shortname = "sign.pictureframe.landscape"},
                    new RewardItem { Shortname = "sign.pictureframe.portrait"},
                    new RewardItem { Shortname = "sign.pictureframe.tall"},
                    new RewardItem { Shortname = "sign.pictureframe.xl"},
                    new RewardItem { Shortname = "sign.pictureframe.xxl"},
                    new RewardItem { Shortname = "sign.pole.banner.large"},
                    new RewardItem { Shortname = "sign.post.double"},
                    new RewardItem { Shortname = "sign.post.single"},
                    new RewardItem { Shortname = "sign.post.town"},
                    new RewardItem { Shortname = "sign.post.town.roof"},
                    new RewardItem { Shortname = "sign.wooden.huge"},
                    new RewardItem { Shortname = "sign.wooden.large"},
                    new RewardItem { Shortname = "sign.wooden.medium"},
                    new RewardItem { Shortname = "weapon.mod.silencer"},
                    new RewardItem { Shortname = "skull.human"},
                    new RewardItem { Shortname = "skull.wolf"},
                    new RewardItem { Shortname = "small.oil.refinery"},
                    new RewardItem { Shortname = "fish.troutsmall"},
                    new RewardItem { Shortname = "smallwaterbottle"},
                    new RewardItem { Shortname = "smg.2", Chance = 0.25f, BPChance = 0.15f},
                    new RewardItem { Shortname = "spear.stone"},
                    new RewardItem { Shortname = "spikes.floor"},
                    new RewardItem { Shortname = "stocking.large"},
                    new RewardItem { Shortname = "stocking.small"},
                    new RewardItem { Shortname = "stones", MinAmount = 100, MaxAmount = 300},
                    new RewardItem { Shortname = "sulfur", MinAmount = 100, MaxAmount = 300},
                    new RewardItem { Shortname = "sulfur.ore", MinAmount = 100, MaxAmount = 300},
                    new RewardItem { Shortname = "surveycharge"},
                    new RewardItem { Shortname = "syringe.medical" },
                    new RewardItem { Shortname = "targeting.computer"},
                    new RewardItem { Shortname = "smg.thompson", Chance = 0.25f, BPChance = 0.15f},
                    new RewardItem { Shortname = "wall.external.high.stone"},
                    new RewardItem { Shortname = "wall.external.high"},
                    new RewardItem { Shortname = "wall.window.bars.toptier"},
                    new RewardItem { Shortname = "water.catcher.large"},
                    new RewardItem { Shortname = "water.barrel"},
                    new RewardItem { Shortname = "waterjug"},
                    new RewardItem { Shortname = "wood", MinAmount = 100, MaxAmount = 300},
                    new RewardItem { Shortname = "wood.armor.jacket"},
                    new RewardItem { Shortname = "wood.armor.pants"}
                }

            };
        }

        private void Unload()
        {
            Unsubscribe(nameof(OnEntityDeath));
        }
    }
}

Автор
15FPS
Скачиваний
0
Просмотры
1
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок
Сверху