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

FREE MultiEvents : 1.1.2 1.1.2

Нет прав для скачивания
C#:
using System;
using System.Collections.Generic;
using Oxide.Core;
using UnityEngine;
using Newtonsoft.Json;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using System.Collections;
using System.Linq;
using Random = UnityEngine.Random;
using Oxide.Core.Libraries;
namespace Oxide.Plugins {
    [Info("MultiEvents", "Mevent", "1.1.2")]
    [Description("Maded by Mevent#4546")]
    class MultiEvents : RustPlugin {
#region Fields
        [PluginReference]
        private readonly Plugin ImageLibrary;
        private static string Layer = "UI_MultiEvents";
        private double time;
        public Timer Main;
        public Timer DestroyTimer;
        public Timer HelicopterStrafeTarget;
        public Timer HelicopterTarget;
        public BasePlayer winner = null;
        public BasePlayer runner = null;
        public List<string> Winners = new List<string>();
        private bool hasStarted;
        public string nowEvent = null;
        private Dictionary<BasePlayer, float> PlayersTop = new Dictionary<BasePlayer, float>();
        private List<LootContainer> LookingLoot = new List<LootContainer>();
        private static MultiEvents instance;
        private static Vector3 EventPosition = new Vector3(-(float)World.Size / 2, 400, -(float)World.Size / 2);
        private static FoundationDrop cEvent = null;
        MonumentInfo beginning_mission = null;
        MonumentInfo end_mission = null;
        public Item ItemForWinner = null;
#endregion
#region Config
        private static ConfigData config;
        private class ConfigData {
            public class Interface {
                [JsonProperty("Цвет фона")]
                public string color;
                [JsonProperty("Offset Min")]
                public string oMin;
                [JsonProperty("Offset Max")]
                public string oMax;
            }
            public class EventSettings {
                [JsonProperty("Настройка интерфейса ивента")]
                public Interface ui;
                [JsonProperty("Сколько игроков требуется для начала эвента?")]
                public int MinPlayers;
                [JsonProperty("Время продолжительности эвента (в секундах)")]
                public int TimeDelay;
                [JsonProperty("Ссылка на картинку")]
                public string ImageUrl;
                [JsonProperty("Настройка приза для победителя")]
                public List<Loot> loot;
            }
            public class CollectionResourcesSettings : EventSettings {
            }
            public class HuntAnimalSettings : EventSettings {
                [JsonProperty("Сколько очков даётся за курицу?")]
                public int chicken;
                [JsonProperty("Сколько очков даётся за волка?")]
                public int wolf;
                [JsonProperty("Сколько очков даётся за кабана?")]
                public int boar;
                [JsonProperty("Сколько очков даётся за оленя?")]
                public int deer;
                [JsonProperty("Сколько очков даётся за лошадь?")]
                public int horse;
                [JsonProperty("Сколько очков даётся за медведя?")]
                public int bear;
            }
            public class LookingLootSettings : EventSettings {
                [JsonProperty("Лутание каких бочек считаются в эвенте?")]
                public List<string> Barrels;
            }
            public class SpecialCargoSettings : EventSettings {
                [JsonProperty("Время показа уведомления о запуске ивента")]
                public float timeStart;
                [JsonProperty("Время показа уведомления об объявлении бегущего")]
                public float timeNewRunner;
                [JsonProperty("Название маркера для карты")]
                public string MarkerName;
            }
            public class HelicopterPetSettings : EventSettings {
            }
            public class KingMountainSettings : EventSettings {
            }
            public class FoundationDropSettings : EventSettings {
                [JsonProperty("Настройка интерфейса с информацией о количестве игроков и блоков")]
                public Interface infoUI;
                [JsonProperty("Размер арены в квадратах")]
                public int ArenaSize;
                [JsonProperty("Интвервал между удалениями блоков")]
                public float DelayDestroy;
                [JsonProperty("Время ожидания игроков с момента объявления ивента")]
                public int WaitTime;
                [JsonProperty("Интенсивность созданой радиации")]
                public float IntensityRadiation;
                [JsonProperty("Отключить стандартную радиацию на РТ (Это нужно в случае если у Вас отключена радиация, плагин включит её обратно но уберёт на РТ)")]
                public bool DisableDefaultRadiation;
                [JsonProperty("Заблокированные команды")]
                public List<string> commands;
            }
            public class Loot {
                [JsonProperty("Выдавать предмет?")]
                public bool itemenabled;
                [JsonProperty("Выдавать баланс?")]
                public bool cashenabled;
                [JsonProperty("Настройка предмета")]
                public List<List<Items>> items;
                [JsonProperty("Настройка баланса")]
                public Cash cash;
            }
            public class Items {
                [JsonProperty("Название предмета (ShortName)")]
                public string shortname;
                [JsonProperty("Минимальное количество предмета")]
                public int minrate;
                [JsonProperty("Максимальное  количество предмета")]
                public int maxrate;
                [JsonProperty("Это чертеж?")]
                public bool blueprint;
                [JsonProperty("Имя предмета (оставьте пустым для стандартного)")]
                public string displayname;
                [JsonProperty("ID Скина (0 - стандартный)")]
                public ulong skinid;
                [JsonProperty("Целостность предмета в % от 1 до 100 (0 - стандартная)")]
                public int condition;
            }
            public class Cash {
                [JsonProperty("Название функции для вызова")]
                public string function;
                [JsonProperty("Название плагина")]
                public string plugin;
                [JsonProperty("Количество денег")]
                public int amount;
            }
            [JsonProperty("Задержка между эвентами")]
            public int Delay;
            [JsonProperty("Эвенты доступные для игроков")]
            public List<string> EnabledEvents;
            [JsonProperty("Право на запуск ивента")]
            public string perm_admin;
            [JsonProperty("Настройка эвента ЛЮБИМЧИК ВЕРТОЛЁТА")]
            public HelicopterPetSettings HelicopterPet;
            [JsonProperty("Настройка эвента ОХОТА НА ЖИВОТНЫХ")]
            public HuntAnimalSettings HuntAnimal;
            [JsonProperty("Настройка эвента КОРОЛЬ ГОРЫ")]
            public KingMountainSettings KingMountain;
            [JsonProperty("Настройка эвента СБОР РЕСУРСОВ")]
            public CollectionResourcesSettings CollectionResources;
            [JsonProperty("Настройка эвента В ПОИСКАХ ЛУТА")]
            public LookingLootSettings LookingLoot;
            [JsonProperty("Настройка эвента ДОСТАВКА ОСОБОГО ГРУЗА")]
            public SpecialCargoSettings SpecialCargo;
            [JsonProperty("Настройка эвента ПАДАЮЩИЕ ПЛАТФОРМЫ")]
            public FoundationDropSettings FoundationDrop;
        }
        private ConfigData GetDefaultConfig() {
            return new ConfigData {
                Delay = 3600, EnabledEvents = new List<string> {
                    "KingMountain", "CollectionResources", "HuntAnimal", "HelicopterPet", "LookingLoot", "SpecialCargo", "FoundationDrop"
                }
                , perm_admin = "multievents.admin", FoundationDrop = new ConfigData.FoundationDropSettings {
                    loot = new List<ConfigData.Loot> {
                        new ConfigData.Loot {
                            itemenabled = true, cashenabled = true, items = new List<List<ConfigData.Items>> {
                                new List<ConfigData.Items> {
                                    new ConfigData.Items {
                                        shortname = "autoturret", minrate = 1, maxrate = 1, blueprint = false, displayname = "", skinid = 0, condition = 0,
                                    }
                                    , new ConfigData.Items {
                                        shortname = "metal.refined", minrate = 50, maxrate = 150, blueprint = false, displayname = "", skinid = 0, condition = 0,
                                    }
                                }
                            }
                            , cash = new ConfigData.Cash {
                                function = "Deposit", plugin = "Economics", amount = 400,
                            }
                        }
                        ,
                    }
                    , MinPlayers = 4, TimeDelay = 1800, ImageUrl = "https://i.imgur.com/B4DCBs2.png", ArenaSize = 10, DelayDestroy = 5f, WaitTime = 60, IntensityRadiation = 10f, DisableDefaultRadiation = false, ui = new ConfigData.Interface {
                        color = "0.024 0.016 0.17 0.7", oMin = "-225 -305", oMax = "-5 -5"
                    }
                    , infoUI = new ConfigData.Interface {
                        color = "0.024 0.016 0.17 0.7", oMin = "-225 -100", oMax = "-5 -5"
                    }
                    , commands = new List<string> {
                        "bp", "backpack", "skin", "skinbox", "rec", "tpa", "tpr", "sethome", "home", "kit", "remove"
                    }
                }
                , SpecialCargo = new ConfigData.SpecialCargoSettings {
                    MarkerName = "ОСОБЫЙ ГРУЗ", MinPlayers = 4, TimeDelay = 1800, ImageUrl = "https://i.imgur.com/Dp9bMSl.png", timeNewRunner = 6, timeStart = 4, ui = new ConfigData.Interface {
                        color = "0.024 0.016 0.17 0.7", oMin = "-225 -305", oMax = "-5 -5"
                    }
                    , loot = new List<ConfigData.Loot> {
                        new ConfigData.Loot {
                            itemenabled = true, cashenabled = true, items = new List<List<ConfigData.Items>> {
                                new List<ConfigData.Items> {
                                    new ConfigData.Items {
                                        shortname = "autoturret", minrate = 1, maxrate = 1, blueprint = false, displayname = "", skinid = 0, condition = 0,
                                    }
                                    , new ConfigData.Items {
                                        shortname = "metal.refined", minrate = 50, maxrate = 150, blueprint = false, displayname = "", skinid = 0, condition = 0,
                                    }
                                }
                            }
                            , cash = new ConfigData.Cash {
                                function = "Deposit", plugin = "Economics", amount = 400,
                            }
                        }
                        ,
                    }
                    ,
                }
                , LookingLoot = new ConfigData.LookingLootSettings {
                    MinPlayers = 4, TimeDelay = 300, ImageUrl = "https://i.imgur.com/4ZOIs33.png", Barrels = new List<string> {
                        "assets/bundled/prefabs/autospawn/resource/loot/loot-barrel-1.prefab", "assets/bundled/prefabs/autospawn/resource/loot/loot-barrel-2.prefab", "assets/bundled/prefabs/radtown/loot_barrel_1.prefab", "assets/bundled/prefabs/radtown/loot_barrel_2.prefab", "assets/bundled/prefabs/radtown/oil_barrel.prefab"
                    }
                    , ui = new ConfigData.Interface {
                        color = "0.024 0.016 0.17 0.7", oMin = "-225 -305", oMax = "-5 -5"
                    }
                    , loot = new List<ConfigData.Loot> {
                        new ConfigData.Loot {
                            itemenabled = true, cashenabled = true, items = new List<List<ConfigData.Items>> {
                                new List<ConfigData.Items> {
                                    new ConfigData.Items {
                                        shortname = "autoturret", minrate = 1, maxrate = 1, blueprint = false, displayname = "", skinid = 0, condition = 0,
                                    }
                                    , new ConfigData.Items {
                                        shortname = "metal.refined", minrate = 50, maxrate = 150, blueprint = false, displayname = "", skinid = 0, condition = 0,
                                    }
                                }
                            }
                            , cash = new ConfigData.Cash {
                                function = "Deposit", plugin = "Economics", amount = 400,
                            }
                        }
                        ,
                    }
                    ,
                }
                , HelicopterPet = new ConfigData.HelicopterPetSettings {
                    MinPlayers = 4, TimeDelay = 300, ImageUrl = "https://i.imgur.com/owDanC1.png", ui = new ConfigData.Interface {
                        color = "0.024 0.016 0.17 0.7", oMin = "-225 -305", oMax = "-5 -5"
                    }
                    , loot = new List<ConfigData.Loot> {
                        new ConfigData.Loot {
                            itemenabled = true, cashenabled = true, items = new List<List<ConfigData.Items>> {
                                new List<ConfigData.Items> {
                                    new ConfigData.Items {
                                        shortname = "autoturret", minrate = 1, maxrate = 1, blueprint = false, displayname = "", skinid = 0, condition = 0,
                                    }
                                    , new ConfigData.Items {
                                        shortname = "metal.refined", minrate = 50, maxrate = 150, blueprint = false, displayname = "", skinid = 0, condition = 0,
                                    }
                                }
                            }
                            , cash = new ConfigData.Cash {
                                function = "Deposit", plugin = "Economics", amount = 400,
                            }
                        }
                        ,
                    }
                    ,
                }
                , HuntAnimal = new ConfigData.HuntAnimalSettings {
                    MinPlayers = 4, TimeDelay = 300, ImageUrl = "https://i.imgur.com/9gTw3kN.png", chicken = 1, wolf = 4, boar = 4, deer = 4, horse = 4, bear = 10, ui = new ConfigData.Interface {
                        color = "0.024 0.016 0.17 0.7", oMin = "-225 -305", oMax = "-5 -5"
                    }
                    , loot = new List<ConfigData.Loot> {
                        new ConfigData.Loot {
                            itemenabled = true, cashenabled = true, items = new List<List<ConfigData.Items>> {
                                new List<ConfigData.Items> {
                                    new ConfigData.Items {
                                        shortname = "autoturret", minrate = 1, maxrate = 1, blueprint = false, displayname = "", skinid = 0, condition = 0,
                                    }
                                    , new ConfigData.Items {
                                        shortname = "metal.refined", minrate = 50, maxrate = 150, blueprint = false, displayname = "", skinid = 0, condition = 0,
                                    }
                                }
                            }
                            , cash = new ConfigData.Cash {
                                function = "Deposit", plugin = "Economics", amount = 400,
                            }
                        }
                        , new ConfigData.Loot {
                            itemenabled = true, cashenabled = true, items = new List<List<ConfigData.Items>> {
                                new List<ConfigData.Items> {
                                    new ConfigData.Items {
                                        shortname = "autoturret", minrate = 1, maxrate = 1, blueprint = false, displayname = "", skinid = 0, condition = 0,
                                    }
                                    , new ConfigData.Items {
                                        shortname = "metal.refined", minrate = 50, maxrate = 150, blueprint = false, displayname = "", skinid = 0, condition = 0,
                                    }
                                }
                            }
                            , cash = new ConfigData.Cash {
                                function = "Deposit", plugin = "Economics", amount = 400,
                            }
                        }
                        , new ConfigData.Loot {
                            itemenabled = true, cashenabled = true, items = new List<List<ConfigData.Items>> {
                                new List<ConfigData.Items> {
                                    new ConfigData.Items {
                                        shortname = "autoturret", minrate = 1, maxrate = 1, blueprint = false, displayname = "", skinid = 0, condition = 0,
                                    }
                                    , new ConfigData.Items {
                                        shortname = "metal.refined", minrate = 50, maxrate = 150, blueprint = false, displayname = "", skinid = 0, condition = 0,
                                    }
                                }
                            }
                            , cash = new ConfigData.Cash {
                                function = "Deposit", plugin = "Economics", amount = 400,
                            }
                        }
                        ,
                    }
                    ,
                }
                , CollectionResources = new ConfigData.CollectionResourcesSettings {
                    MinPlayers = 4, TimeDelay = 300, ImageUrl = "https://i.imgur.com/FggJeaH.png", ui = new ConfigData.Interface {
                        color = "0.024 0.016 0.17 0.7", oMin = "-225 -305", oMax = "-5 -5"
                    }
                    , loot = new List<ConfigData.Loot> {
                        new ConfigData.Loot {
                            itemenabled = true, cashenabled = true, items = new List<List<ConfigData.Items>> {
                                new List<ConfigData.Items> {
                                    new ConfigData.Items {
                                        shortname = "autoturret", minrate = 1, maxrate = 1, blueprint = false, displayname = "", skinid = 0, condition = 0,
                                    }
                                    , new ConfigData.Items {
                                        shortname = "metal.refined", minrate = 50, maxrate = 150, blueprint = false, displayname = "", skinid = 0, condition = 0,
                                    }
                                }
                            }
                            , cash = new ConfigData.Cash {
                                function = "Deposit", plugin = "Economics", amount = 400,
                            }
                        }
                        , new ConfigData.Loot {
                            itemenabled = true, cashenabled = true, items = new List<List<ConfigData.Items>> {
                                new List<ConfigData.Items> {
                                    new ConfigData.Items {
                                        shortname = "autoturret", minrate = 1, maxrate = 1, blueprint = false, displayname = "", skinid = 0, condition = 0,
                                    }
                                    , new ConfigData.Items {
                                        shortname = "metal.refined", minrate = 50, maxrate = 150, blueprint = false, displayname = "", skinid = 0, condition = 0,
                                    }
                                }
                            }
                            , cash = new ConfigData.Cash {
                                function = "Deposit", plugin = "Economics", amount = 400,
                            }
                        }
                        , new ConfigData.Loot {
                            itemenabled = true, cashenabled = true, items = new List<List<ConfigData.Items>> {
                                new List<ConfigData.Items> {
                                    new ConfigData.Items {
                                        shortname = "autoturret", minrate = 1, maxrate = 1, blueprint = false, displayname = "", skinid = 0, condition = 0,
                                    }
                                    , new ConfigData.Items {
                                        shortname = "metal.refined", minrate = 50, maxrate = 150, blueprint = false, displayname = "", skinid = 0, condition = 0,
                                    }
                                }
                            }
                            , cash = new ConfigData.Cash {
                                function = "Deposit", plugin = "Economics", amount = 400,
                            }
                        }
                        ,
                    }
                    ,
                }
                , KingMountain = new ConfigData.KingMountainSettings {
                    MinPlayers = 4, TimeDelay = 300, ImageUrl = "https://i.imgur.com/dLWgxg7.png", ui = new ConfigData.Interface {
                        color = "0.024 0.016 0.17 0.7", oMin = "-225 -305", oMax = "-5 -5"
                    }
                    , loot = new List<ConfigData.Loot> {
                        new ConfigData.Loot {
                            itemenabled = true, cashenabled = true, items = new List<List<ConfigData.Items>> {
                                new List<ConfigData.Items> {
                                    new ConfigData.Items {
                                        shortname = "autoturret", minrate = 1, maxrate = 1, blueprint = false, displayname = "", skinid = 0, condition = 0,
                                    }
                                    , new ConfigData.Items {
                                        shortname = "metal.refined", minrate = 50, maxrate = 150, blueprint = false, displayname = "", skinid = 0, condition = 0,
                                    }
                                }
                            }
                            , cash = new ConfigData.Cash {
                                function = "Deposit", plugin = "Economics", amount = 400,
                            }
                        }
                    }
                    ,
                }
                ,
            }
            ;
        }
        protected override void LoadConfig() {
            base.LoadConfig();
            try {
                config = Config.ReadObject<ConfigData>();
                if (config == null) LoadDefaultConfig();
            }
            catch {
                LoadDefaultConfig();
            }
            SaveConfig();
        }
        protected override void LoadDefaultConfig() {
            PrintWarning("Configuration file is corrupt(or not exists), creating new one!");
            config = GetDefaultConfig();
        }
        protected override void SaveConfig() => Config.WriteObject(config);
#endregion
#region Initialization
        void OnServerInitialized() {
            PrintWarning("  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
            PrintWarning($"     {Name} v{Version} loading");
            if (!ImageLibrary) {
                PrintError("   Install plugin: 'ImageLibrary'");
                Interface.Oxide.UnloadPlugin(Title);
                return;
            }
            PrintWarning($"        Plugin loaded - OK");
            PrintWarning("  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
            timer.Every(config.Delay + Random.Range(0, 1800), () => {
                StartEvent(config.EnabledEvents.GetRandom());
            }
            );
            permission.RegisterPermission(config.perm_admin, this);
            ImageLibrary.Call("AddImage", config.CollectionResources.ImageUrl, "CollectionResources");
            ImageLibrary.Call("AddImage", config.FoundationDrop.ImageUrl, "FoundationDrop");
            ImageLibrary.Call("AddImage", config.HelicopterPet.ImageUrl, "HelicopterPet");
            ImageLibrary.Call("AddImage", config.HuntAnimal.ImageUrl, "HuntAnimal");
            ImageLibrary.Call("AddImage", config.KingMountain.ImageUrl, "KingMountain");
            ImageLibrary.Call("AddImage", config.LookingLoot.ImageUrl, "LookingLoot");
            ImageLibrary.Call("AddImage", config.SpecialCargo.ImageUrl, "SpecialCargo");
            ImageLibrary.Call("AddImage", "https://i.imgur.com/Okt1BMH.png", "ME_Background_image");
            ImageLibrary.Call("AddImage", "https://i.imgur.com/DpLldC8.png", "ME_Logo_image");
            Unsubscribe(nameof(OnCollectiblePickup));
            Unsubscribe(nameof(OnCropGather));
            Unsubscribe(nameof(OnDispenserBonus));
            Unsubscribe(nameof(OnDispenserGather));
            Unsubscribe(nameof(OnEntityDeath));
            Unsubscribe(nameof(OnLootEntity));
            Unsubscribe(nameof(OnPlayerDie));
            Unsubscribe(nameof(OnEntityKill));
            Unsubscribe(nameof(ClearTeleport));
            Unsubscribe(nameof(FoundationDrop));
            Unsubscribe(nameof(InitializeFoundation));
            Unsubscribe(nameof(DropFoundation));
            Unsubscribe(nameof(Downgrader));
            Unsubscribe(nameof(HeliPet));
            Unsubscribe(nameof(SCmarker));
            Unsubscribe(nameof(OnPlayerCommand));
            instance = this;
        }
        void Unload() {
            if (hasStarted) {
                try {
                    DestroyEvent(nowEvent);
                    NextTick(() => {
                        PlayersTop.Clear();
                        for (int i = 0; i < BasePlayer.activePlayerList.Count; i++) {
                            var player = BasePlayer.activePlayerList[i];
                            CuiHelper.DestroyUi(player, Layer);
                            CuiHelper.DestroyUi(player, Layer + ".Notification");
                            CuiHelper.DestroyUi(player, Layer + ".SpecialCargo");
                            CuiHelper.DestroyUi(player, Layer + ".FoundationDrop.Play");
                        }
                    }
                    );
                }
                catch (NullReferenceException) {
                    if (PlayersTop.Count > 1) PlayersTop.Clear();
                    for (int i = 0; i < BasePlayer.activePlayerList.Count; i++) {
                        var player = BasePlayer.activePlayerList[i];
                        CuiHelper.DestroyUi(player, Layer);
                        CuiHelper.DestroyUi(player, Layer + ".Notification");
                        CuiHelper.DestroyUi(player, Layer + ".SpecialCargo");
                        CuiHelper.DestroyUi(player, Layer + ".FoundationDrop.Play");
                    }
                    UnityEngine.Object.FindObjectsOfType<BaseEntity>().Where(p => p.OwnerID == 98596 && !p.IsDestroyed).ToList().ForEach(s => s?.Kill());
                    UnityEngine.Object.FindObjectsOfType<Downgrader>().ToList().ForEach(s => s?.Kill());
                    UnityEngine.Object.FindObjectsOfType<SCmarker>().ToList().ForEach(s => s?.Kill());
                    if (RadiationZones.ContainsKey(cEvent.BlockList.SelectMany(p => p).Last().GetInstanceID())) {
                        UnityEngine.Object.Destroy(RadiationZones[cEvent.BlockList.SelectMany(p => p).Last().GetInstanceID()].zone);
                        RadiationZones.Remove(cEvent.BlockList.SelectMany(p => p).Last().GetInstanceID());
                    }
                }
            }
        }
#endregion
#region Functions
        void StartEvent(string type, BasePlayer target = null) {
            if (hasStarted && !string.IsNullOrEmpty(nowEvent)) DestroyEvent(nowEvent);
            nowEvent = type;
            Main?.Destroy();
            DestroyTimer?.Destroy();
            switch (type) {
                case "KingMountain" : {
                    if (BasePlayer.activePlayerList.Count < config.KingMountain.MinPlayers && target == null) return;
                    for (int i = 0; i < BasePlayer.activePlayerList.Count; i++) TopUI(BasePlayer.activePlayerList[i], "all", GetMessage(type, BasePlayer.activePlayerList[i].UserIDString), oMin : config.KingMountain.ui.oMin, oMax : config.KingMountain.ui.oMax, color : config.KingMountain.ui.color);
                    time = config.KingMountain.TimeDelay + GrabCurrentTime();
                    Main = timer.Repeat(1, (int)(time - GrabCurrentTime()), () => {
                        var list = PlayersTop.OrderByDescending(p => p.Value).Take(8).ToList();
                        for (int i = 0; i < BasePlayer.activePlayerList.Count; i++) {
                            var player = BasePlayer.activePlayerList[i];
                            if (!player.IsBuildingAuthed() && !player.GetMounted() && !player.IsFlying) {
                                if (!PlayersTop.ContainsKey(player)) PlayersTop.Add(player, player.transform.position.y);
                                else PlayersTop[player] = player.transform.position.y;
                            }
                            TopUI(player, "refresh", list : list);
                        }
                    }
                    );
                    DestroyTimer = timer.Once(config.KingMountain.TimeDelay, () => {
                        DestroyEvent(nowEvent);
                    }
                    );
                }
                break;
                case "CollectionResources" : {
                    if (BasePlayer.activePlayerList.Count < config.CollectionResources.MinPlayers && target == null) return;
                    Subscribe(nameof(OnCollectiblePickup));
                    Subscribe(nameof(OnCropGather));
                    Subscribe(nameof(OnDispenserBonus));
                    Subscribe(nameof(OnDispenserGather));
                    for (int i = 0; i < BasePlayer.activePlayerList.Count; i++) TopUI(BasePlayer.activePlayerList[i], "all", GetMessage(type, BasePlayer.activePlayerList[i].UserIDString), oMin : config.CollectionResources.ui.oMin, oMax : config.CollectionResources.ui.oMax, color : config.CollectionResources.ui.color);
                    time = config.CollectionResources.TimeDelay + GrabCurrentTime();
                    Main = timer.Repeat(1, (int)(time - GrabCurrentTime()), () => {
                        var list = PlayersTop.OrderByDescending(p => p.Value).Take(8).ToList();
                        for (int i = 0; i < BasePlayer.activePlayerList.Count; i++) TopUI(BasePlayer.activePlayerList[i], "refresh", list : list);
                    }
                    );
                    DestroyTimer = timer.Once(config.CollectionResources.TimeDelay, () => {
                        DestroyEvent(nowEvent);
                    }
                    );
                }
                break;
                case "HuntAnimal" : {
                    if (BasePlayer.activePlayerList.Count < config.HuntAnimal.MinPlayers && target == null) return;
                    Subscribe(nameof(OnEntityDeath));
                    for (int i = 0; i < BasePlayer.activePlayerList.Count; i++) TopUI(BasePlayer.activePlayerList[i], "all", GetMessage(type, BasePlayer.activePlayerList[i].UserIDString), oMin : config.HuntAnimal.ui.oMin, oMax : config.HuntAnimal.ui.oMax, color : config.HuntAnimal.ui.color);
                    time = config.HuntAnimal.TimeDelay + GrabCurrentTime();
                    Main = timer.Repeat(1, (int)(time - GrabCurrentTime()), () => {
                        var list = PlayersTop.OrderByDescending(p => p.Value).Take(8).ToList();
                        for (int i = 0; i < BasePlayer.activePlayerList.Count; i++) TopUI(BasePlayer.activePlayerList[i], "refresh", list : list);
                    }
                    );
                    DestroyTimer = timer.Once(config.HuntAnimal.TimeDelay, () => {
                        DestroyEvent(nowEvent);
                    }
                    );
                }
                break;
                case "HelicopterPet" : {
                    if (BasePlayer.activePlayerList.Count < config.HelicopterPet.MinPlayers && target == null) return;
                    Subscribe(nameof(OnEntityKill));
                    Subscribe(nameof(HeliPet));
                    for (int i = 0; i < BasePlayer.activePlayerList.Count; i++) TopUI(BasePlayer.activePlayerList[i], "all", GetMessage(type, BasePlayer.activePlayerList[i].UserIDString), oMin : config.HelicopterPet.ui.oMin, oMax : config.HelicopterPet.ui.oMax, color : config.HelicopterPet.ui.color);
                    time = config.HelicopterPet.TimeDelay + GrabCurrentTime();
                    BaseHelicopter heli = GameManager.server.CreateEntity("assets/prefabs/npc/patrol helicopter/patrolhelicopter.prefab", new Vector3(), new Quaternion(), true) as BaseHelicopter;
                    heli.OwnerID = 999999999;
                    heli.Spawn();
                    heli.transform.position = new Vector3(0, 350, 0);
                    heli.gameObject.AddComponent<HeliPet>();
                    Main = timer.Repeat(1, (int)(time - GrabCurrentTime()), () => {
                        var list = PlayersTop.OrderByDescending(p => p.Value).Take(8).ToList();
                        for (int i = 0; i < BasePlayer.activePlayerList.Count; i++) TopUI(BasePlayer.activePlayerList[i], "refresh", list : list);
                    }
                    );
                    DestroyTimer = timer.Once(config.HelicopterPet.TimeDelay, () => {
                        DestroyEvent(nowEvent);
                    }
                    );
                }
                break;
                case "LookingLoot" : {
                    if (BasePlayer.activePlayerList.Count < config.LookingLoot.MinPlayers && target == null) return;
                    Subscribe(nameof(OnLootEntity));
                    Subscribe(nameof(OnEntityDeath));
                    for (int i = 0; i < BasePlayer.activePlayerList.Count; i++) TopUI(BasePlayer.activePlayerList[i], "all", GetMessage(type, BasePlayer.activePlayerList[i].UserIDString), oMin : config.LookingLoot.ui.oMin, oMax : config.LookingLoot.ui.oMax, color : config.LookingLoot.ui.color);
                    time = config.LookingLoot.TimeDelay + GrabCurrentTime();
                    Main = timer.Repeat(1, (int)(time - GrabCurrentTime()), () => {
                        var list = PlayersTop.OrderByDescending(p => p.Value).Take(8).ToList();
                        for (int i = 0; i < BasePlayer.activePlayerList.Count; i++) TopUI(BasePlayer.activePlayerList[i], "refresh", list : list);
                    }
                    );
                    DestroyTimer = timer.Once(config.LookingLoot.TimeDelay, () => {
                        DestroyEvent(nowEvent);
                    }
                    );
                }
                break;
                case "SpecialCargo" : {
                    if (BasePlayer.activePlayerList.Count < config.SpecialCargo.MinPlayers && target == null) return;
                    Subscribe(nameof(OnPlayerDie));
                    Subscribe(nameof(SCmarker));
                    time = config.SpecialCargo.TimeDelay + GrabCurrentTime();
                    List<MonumentInfo> monuments = new List<MonumentInfo>();
                    foreach (var monument in UnityEngine.Object.FindObjectsOfType<MonumentInfo>()) {
                        monuments.Add(monument);
                    }
                    beginning_mission = monuments.GetRandom();
                    monuments.Remove(beginning_mission);
                    end_mission = monuments.GetRandom();
                    for (int i = 0; i < BasePlayer.activePlayerList.Count; i++) UI_Notification(BasePlayer.activePlayerList[i], GetMessage("SpecialCargo.New", BasePlayer.activePlayerList[i].UserIDString, beginning_mission.displayPhrase.english), ".Notification.New");
                    timer.Once(config.SpecialCargo.timeStart, () => {
                        for (int i = 0; i < BasePlayer.activePlayerList.Count; i++) CuiHelper.DestroyUi(BasePlayer.activePlayerList[i], Layer + ".Notification.New");
                    }
                    );
                    //add image to map
                    beginning_mission.gameObject.AddComponent<SCmarker>().spawnMarker();
                    Main = timer.Repeat(1, (int)(time - GrabCurrentTime()), () => {
                        for (int i = 0; i < BasePlayer.activePlayerList.Count; i++) {
                            var player = BasePlayer.activePlayerList[i];
                            if (runner == null) if (Vector3.Distance(beginning_mission.transform.position, player.transform.position) < 100f) {
                                runner = player;
                                UI_Notification(runner, GetMessage("SpecialCargo.CreateRunner", runner.UserIDString, end_mission.displayPhrase.english, GetGridString(end_mission.transform.position)), ".Notification.CreateRunner");
                                timer.Once(config.SpecialCargo.timeNewRunner, () => CuiHelper.DestroyUi(runner, Layer + ".Notification.CreateRunner"));
                                beginning_mission.gameObject.GetComponent<SCmarker>()?.Kill();
                                player.gameObject.AddComponent<SCPlayerMarker>()?.SpawnMarker();
                                TopUI(runner, nowEvent);
                            }
                            if (runner == player && Vector3.Distance(end_mission.transform.position, player.transform.position) < 100f) DestroyEvent(nowEvent);
                        }
                    }
                    );
                    DestroyTimer = timer.Once(config.SpecialCargo.TimeDelay, () => {
                        DestroyEvent(nowEvent);
                    }
                    );
                }
                break;
                case "FoundationDrop" : {
                    if (BasePlayer.activePlayerList.Count < config.FoundationDrop.MinPlayers && target == null) return;
                    Subscribe(nameof(ClearTeleport));
                    Subscribe(nameof(FoundationDrop));
                    Subscribe(nameof(InitializeFoundation));
                    Subscribe(nameof(DropFoundation));
                    Subscribe(nameof(Downgrader));
                    Subscribe(nameof(OnPlayerCommand));
                    time = config.FoundationDrop.WaitTime + GrabCurrentTime();
                    cEvent = new FoundationDrop {
                        Started = false, StartTime = time
                    }
                    ;
                    ServerMgr.Instance.StartCoroutine(InitializeFoundation(config.FoundationDrop.WaitTime));
                }
                break;
                default : break;
            }
            hasStarted = true;
        }
        void DestroyEvent(string type) {
            Main?.Destroy();
            DestroyTimer?.Destroy();
            var messageKEY = string.Empty;
            var winns = string.Empty;
            switch (type) {
                case "KingMountain" : if (PlayersTop.Count != 0) {
                    var list = PlayersTop.OrderByDescending(p => p.Value).Take(config.KingMountain.loot.Count).ToList();
                    for (int i = 0; i < list.Count; i++) {
                        var winner = list[i];
                        DropItem(winner.Key, nowEvent, i);
                        Winners.Add(winner.Key.displayName);
                    }
                }
                break;
                case "CollectionResources" : Unsubscribe(nameof(OnCollectiblePickup));
                Unsubscribe(nameof(OnCropGather));
                Unsubscribe(nameof(OnDispenserBonus));
                Unsubscribe(nameof(OnDispenserGather));
                if (PlayersTop.Count != 0) {
                    var list = PlayersTop.OrderByDescending(p => p.Value).Take(config.CollectionResources.loot.Count).ToList();
                    for (int i = 0; i < list.Count; i++) {
                        var winner = list[i];
                        DropItem(winner.Key, nowEvent, i);
                        Winners.Add(winner.Key.displayName);
                    }
                }
                break;
                case "HuntAnimal" : Unsubscribe(nameof(OnEntityDeath));
                if (PlayersTop.Count != 0) {
                    var list = PlayersTop.OrderByDescending(p => p.Value).Take(config.HuntAnimal.loot.Count).ToList();
                    for (int i = 0; i < list.Count; i++) {
                        var winner = list[i];
                        DropItem(winner.Key, nowEvent, i);
                        Winners.Add(winner.Key.displayName);
                    }
                }
                break;
                case "HelicopterPet" : Unsubscribe(nameof(OnEntityKill));
                Unsubscribe(nameof(HeliPet));
                foreach (var check in BaseNetworkable.serverEntities) {
                    if (check is BaseHelicopter && (check as BaseHelicopter).OwnerID == 999999999) {
                        check?.Kill();
                    }
                }
                if (PlayersTop.Count != 0) {
                    var list = PlayersTop.OrderByDescending(p => p.Value).Take(config.HelicopterPet.loot.Count).ToList();
                    for (int i = 0; i < list.Count; i++) {
                        var winner = list[i];
                        DropItem(winner.Key, nowEvent, i);
                        Winners.Add(winner.Key.displayName);
                    }
                }
                break;
                case "LookingLoot" : Unsubscribe(nameof(OnLootEntity));
                Unsubscribe(nameof(OnEntityDeath));
                if (PlayersTop.Count != 0) {
                    var list = PlayersTop.OrderByDescending(p => p.Value).Take(config.LookingLoot.loot.Count).ToList();
                    for (int i = 0; i < list.Count; i++) {
                        var winner = list[i];
                        DropItem(winner.Key, nowEvent, i);
                        Winners.Add(winner.Key.displayName);
                    }
                }
                break;
                case "SpecialCargo" : UnityEngine.Object.FindObjectsOfType<SCmarker>().ToList().ForEach(s => s?.Kill());
                Unsubscribe(nameof(OnPlayerDie));
                Unsubscribe(nameof(SCmarker));
                if (runner != null) {
                    winner = runner;
                    DropItem(winner, type);
                    runner.gameObject.GetComponent<SCPlayerMarker>()?.Kill();
                }
                break;
                case "FoundationDrop" : cEvent.FinishEvent();
                cEvent = null;
                Unsubscribe(nameof(ClearTeleport));
                Unsubscribe(nameof(FoundationDrop));
                Unsubscribe(nameof(InitializeFoundation));
                Unsubscribe(nameof(DropFoundation));
                Unsubscribe(nameof(Downgrader));
                Unsubscribe(nameof(OnPlayerCommand));
                break;
            }
            if (PlayersTop.Count == 0 && winner == null) {
                for (int i = 0; i < BasePlayer.activePlayerList.Count; i++) {
                    var player = BasePlayer.activePlayerList[i];
                    CuiHelper.DestroyUi(player, Layer);
                    UI_Notification(player, GetMessage("WINNER.NOTFOUND", player.UserIDString));
                }
                timer.Once(4, () => {
                    for (int i = 0; i < BasePlayer.activePlayerList.Count; i++) CuiHelper.DestroyUi(BasePlayer.activePlayerList[i], Layer + ".Notification");
                }
                );
            }
            else {
                messageKEY = Winners.Count > 1 ? "EVENT.END.MULTI" : "EVENT.END";
                winns = Winners.Count > 1 ? string.Join(", ", Winners.ToArray()) : Winners.First();
                for (int i = 0; i < BasePlayer.activePlayerList.Count; i++) {
                    var player = BasePlayer.activePlayerList[i];
                    CuiHelper.DestroyUi(player, Layer);
                    CuiHelper.DestroyUi(player, Layer + ".SpecialCargo");
                    CuiHelper.DestroyUi(player, Layer + ".FoundationDrop.Play");
                    UI_Notification(player, winner == player ? GetMessage("EVENT.YOUWINNER", player.UserIDString) : GetMessage(messageKEY, player.UserIDString, GetMessage(type, player.UserIDString), winns));
                }
                timer.Once(4, () => {
                    PlayersTop.Clear();
                    for (int i = 0; i < BasePlayer.activePlayerList.Count; i++) CuiHelper.DestroyUi(BasePlayer.activePlayerList[i], Layer + ".Notification");
                }
                );
            }
            NextTick(() => {
                if (type != "FoundationDrop") {
                    winner = null;
                    nowEvent = null;
                    hasStarted = false;
                }
                else {
                    if (winner == null) {
                        nowEvent = null;
                        hasStarted = false;
                    }
                }
                runner = null;
                beginning_mission = null;
                end_mission = null;
                winns = string.Empty;
                PlayersTop.Clear();
                LookingLoot.Clear();
                Winners.Clear();
                messageKEY = "EVENT.END";
                HelicopterStrafeTarget?.Destroy();
                HelicopterTarget?.Destroy();
            }
            );
        }
        private void DropItem(BasePlayer player, string type, int temp = 0) {
            ConfigData.Items item = null;
            ConfigData.Cash cash = null;
            switch (type) {
                case "KingMountain" : if (config.KingMountain.loot[temp].itemenabled) {
                    for (int i = 0; i < config.KingMountain.loot[temp].items.Count; i++) {
                        item = config.KingMountain.loot[temp].items[i].GetRandom();
                    }
                }
                if (config.KingMountain.loot[temp].cashenabled) cash = config.KingMountain.loot[temp].cash;
                break;
                case "CollectionResources" : if (config.CollectionResources.loot[temp].itemenabled) {
                    for (int i = 0; i < config.CollectionResources.loot[temp].items.Count;
// ... [Code preview truncated due to length. Full source in attached file] ...

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