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

FREE TournamentClan : 1.1.3 1.1.3

Нет прав для скачивания
C#:
using System;
using System.Collections.Generic;
using System.Globalization;
using Newtonsoft.Json;
using Oxide.Core;
using System.Linq;
using Oxide.Core.Libraries.Covalence;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using UnityEngine;
using Oxide.Plugins.TournamentClanExtensionMethods;
using System.Text;
using System.Text.RegularExpressions;
namespace Oxide.Plugins {
    [Info("TournamentClan", "XAVIER", "1.1.3")]
    public class TournamentClan : RustPlugin {
#region Var
        public List<MapMarkerGenericRadius> RadiusMarker = new List<MapMarkerGenericRadius>();
        [PluginReference]
        private Plugin RustMap, Clans;
        private static TournamentClan _ins;
        public static string Layer = "UI_MaskLayer";
        public string containerButton = "";
#endregion
#region Data
        public class CupboardData {
            public ulong netID;
            public bool Remove;
            public string nameClan;
            public string grid;
        }
        public class RaidsData {
            public string Attacker;
            public string Victim;
            public string Time;
        }
        public List<CupboardData> _cupboard = new List<CupboardData>();
        public List<RaidsData> RaidsHistory = new List<RaidsData>();
        public List<CupboardComponent> _component = new List<CupboardComponent>();
#endregion
#region UI && Hooks
        private void OnLootEntityEnd(BasePlayer player, BuildingPrivlidge entity) => CuiHelper.DestroyUi(player, Layer);
        private void OnLootEntity(BasePlayer player, BuildingPrivlidge entity) {
            if (player == null) return;
            if (entity == null) return;
            if (!player.IsHuman()) return;
            CuiHelper.DestroyUi(player, Layer);
            var nameClan = GetTag(player);
            object clan = Clans?.CallHook("ClanCount", player.userID);
            object point = Clans?.CallHook("ClanPoint", player.userID);
            // ReSharper disable once ConditionIsAlwaysTrueOrFalse
            if (clan is bool && !(bool)clan) {
                var contCreate = containerButton.Replace("{color}", HexToCuiColor($"#AA4734", 100)).Replace("{command}", "").Replace("{text}", "ВЫ НЕ МОЖЕТЕ ПРИНЯТЬ УЧАСТИЕ В ТУРНИРЕ\nПРИЧИНА: ВЫ НЕ СОСТОИТЕ В КЛАНЕ");
                CuiHelper.AddUi(player, contCreate);
                return;
            }
            if (GetActive(nameClan)) {
                var contCreate = containerButton.Replace("{color}", HexToCuiColor($"#AA4734", 100)).Replace("{command}", "").Replace("{text}", $"ВЫ НЕ МОЖЕТЕ ПРИНЯТЬ УЧАСТИЕ В ТУРНИРЕ\nПРИЧИНА: ВЫ УЖЕ УЧАВСТВУЕТЕ");
                CuiHelper.AddUi(player, contCreate);
                return;
            }
            if (GetRemove(nameClan)) {
                var contCreate = containerButton.Replace("{color}", HexToCuiColor($"#AA4734", 100)).Replace("{command}", "").Replace("{text}", $"ВЫ НЕ МОЖЕТЕ ПРИНЯТЬ УЧАСТИЕ В ТУРНИРЕ\nПРИЧИНА: ВЫ ВЫБЫЛИ ИЗ ТУРНИРА");
                CuiHelper.AddUi(player, contCreate);
                return;
            }
            if (point is int && (int)point < config._MainSettings.MinPoint) {
                var contCreate = containerButton.Replace("{color}", HexToCuiColor($"#AA4734", 100)).Replace("{command}", "").Replace("{text}", $"ВЫ НЕ МОЖЕТЕ ПРИНЯТЬ УЧАСТИЕ В ТУРНИРЕ\nПРИЧИНА: ВАМ НЕОБХОДИМО {config._MainSettings.MinPoint} ОЧКОВ.");
                CuiHelper.AddUi(player, contCreate);
                return;
            }
            int obj = 0;
            var entities = player.GetBuildingPrivilege()?.GetBuilding()?.decayEntities;
            if (entities != null) {
                foreach (var entitys in entities) {
                    if (entitys.PrefabName.Contains("assets/prefabs/building core")) obj++;
                }
            }
            if (obj < 1) {
                var contCreate = containerButton.Replace("{color}", HexToCuiColor($"#AA4734", 100)).Replace("{command}", "").Replace("{text}", $"ВЫ НЕ МОЖЕТЕ ПРИНЯТЬ УЧАСТИЕ В ТУРНИРЕ\nПРИЧИНА: ВАМ НЕОБХОДИМО 6231 ОБЪЕКТОВ.");
                CuiHelper.AddUi(player, contCreate);
                return;
            }
            if (IsTimeExit()) {
                var contCreate = containerButton.Replace("{color}", HexToCuiColor($"#AA4734", 100)).Replace("{command}", "").Replace("{text}", $"ВЫ НЕ МОЖЕТЕ ПРИНЯТЬ УЧАСТИЕ В ТУРНИРЕ\nПРИЧИНА: ПРОШЛО ВРЕМЯ РЕГИСТРАЦИИ");
                CuiHelper.AddUi(player, contCreate);
                return;
            }
            var contCreateSucReplace = containerButton.Replace("{color}", HexToCuiColor($"#5D6A36", 100)).Replace("{command}", $"UI_TournamentHandler {entity.net.ID.Value}").Replace("{text}", $"ВЫ МОЖЕТЕ ПРИНЯТЬ УЧАСТИЕ В ТУРНИРЕ\nНАЖМИТЕ ЧТО БЫ ПРИНЯТЬ УЧАСТИЕ");
            CuiHelper.AddUi(player, contCreateSucReplace);
        }
#endregion
        public string GetClanGrid(string nameClan) {
            Puts("1");
            var cupboardData = _cupboard.FirstOrDefault(data => data.nameClan == nameClan);
            if(cupboardData==null)return"123";
            return cupboardData?.grid ?? string.Empty;
        }
#region Hooks
        void OnServerInitialized() {
            _ins = this;
            try {
                _cupboard = Interface.GetMod().DataFileSystem.ReadObject<List<CupboardData>>(Name);
                if (_cupboard == null) _cupboard = new List<CupboardData>();
                RaidsHistory = Interface.Oxide.DataFileSystem.ReadObject<List<RaidsData>>("Raids");
                if (RaidsHistory == null) RaidsHistory = new List<RaidsData>();
            }
            catch {
                RaidsHistory = new List<RaidsData>();
                _cupboard = new List<CupboardData>();
            }
            timer.Every(60, TimeHandle);
            var container = new CuiElementContainer();
            container.Add(new CuiButton {
                RectTransform = {
                    AnchorMin = "0.5 0", AnchorMax = "0.5 0", OffsetMin = "193 491", OffsetMax = "572 555"
                }
                , Button = {
                    Color = "{color}", Command = "{command}"
                }
                , Text = {
                    Text = "{text}", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-bold.ttf", FontSize = 14, Color = "1 1 1 0.9"
                }
            }
            , "Overlay", Layer);
            containerButton = container.ToJson();
            AnyCupboardChecks();
        }
        void OnServerSave() {
            Interface.GetMod().DataFileSystem.WriteObject(Name, _cupboard);
            Interface.Oxide.DataFileSystem.WriteObject("Raids", RaidsHistory);
        }
        void Unload() {
            Interface.GetMod().DataFileSystem.WriteObject(Name, _cupboard);
            Interface.Oxide.DataFileSystem.WriteObject("Raids", RaidsHistory);
            _component.ForEach(component => {
                component.Kill();
            }
            );
            _component = null;
            _ins = null;
            config = null;
            TournamentClanExtensionMethods.ExtensionMethods.p = null;
        }
        [ChatCommand("history")]
        void cmdClanLIMITCLANS(BasePlayer player, string command, string[] args) {
            RaidGUI(player, 0);
        }
        [ChatCommand("update")]
        void cmdpizdec(BasePlayer player) {
            TimeHandle();
        }
        string RTopLayer = "123";
        void RaidGUI(BasePlayer player, int page = 0) {
            CuiHelper.DestroyUi(player, "MainTopR");
            var container = new CuiElementContainer();
            container.Add(new CuiPanel {
                CursorEnabled = true, RectTransform = {
                    AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = "0 0"
                }
                , Image = {
                    Color = "0 0 0 0.5", Material = "assets/content/ui/uibackgroundblur.mat"
                }
            }
            , "Overlay", "MainTopR");
            UI.AddButton(ref container, "MainTopR", "CloseOverlay", "", "MainTopR", "0 0 0 0", "", "", "0 0", "1 1", "0 0", "0 0");
            UI.AddImage(ref container, "MainTopR", RTopLayer, "0 0 0 0", "", "", "0.5 0.5", "0.5 0.5", "-257 -175", "257 225");
            UI.AddImage(ref container, RTopLayer, "Top", $"{HexToRustFormat("#74706A7F")}", "", "assets/icons/greyout.mat", "0.5 0.5", "0.5 0.5", "-255 -105", "255 200");
            UI.AddImage(ref container, "Top", "Title", $"0 0 0 0", "", "", "0.5 0.5", "0.5 0.5", "-256 132", "258 152");
            UI.AddText(ref container, "Title", "1", "1 1 1 0.8", $"#", TextAnchor.MiddleCenter, 12, "0 0", "0 0", "10 2", "30 20");
            UI.AddText(ref container, "Title", "2", "1 1 1 0.8", $"НАЗВАНИЕ КЛАНА", TextAnchor.MiddleLeft, 12, "0 0", "0 0", "55 2", "200 20");
            UI.AddText(ref container, "Title", "3", "1 1 1 0.8", $"НАЗВАНИЕ ЗАРЕЙЖЕННОГО КЛАНА", TextAnchor.MiddleCenter, 12, "0 0", "0 0", "170 2", "370 20");
            UI.AddText(ref container, "Title", "5", "1 1 1 0.8", $"ВРЕМЯ", TextAnchor.MiddleCenter, 12, "0 0", "0 0", "390 2", "490 20");
            float z = 0, offsetminh = 110, offsetmaxh = 132;
            foreach (var raid in RaidsHistory.Take(10)) {
                z++;
                UI.AddImage(ref container, "Top", $"Clans{page * 10 + z}", $"{HexToRustFormat("#0000006E")}", "", "", "0.5 0.5", "0.5 0.5", $"-252 {offsetminh}", $"254 {offsetmaxh}");
                UI.AddText(ref container, $"Clans{page * 10 + z}", "Index", "1 1 1 0.8", $"{page * 10 + z}", TextAnchor.MiddleCenter, 13, "0 0", "0 0", "0 2", "30 22");
                UI.AddText(ref container, $"Clans{page * 10 + z}", "ClanTag", "1 1 1 0.8", $"{raid.Victim.ToUpper()}", TextAnchor.MiddleLeft, 13, "0 0", "0 0", "55 2", "200 22");
                UI.AddText(ref container, $"Clans{page * 10 + z}", "ClanTag", "1 1 1 0.8", $"{raid.Attacker.ToUpper()}", TextAnchor.MiddleCenter, 13, "0 0", "0 0", "170 2", "370 22");
                UI.AddText(ref container, $"Clans{page * 10 + z}", "ClanPoints", "1 1 1 0.8", $"{raid.Time}", TextAnchor.MiddleCenter, 13, "0 0", "0 0", "380 2", "500 22");
                offsetmaxh -= 24;
                offsetminh -= 24;
                if (z == 10) {
                    offsetmaxh = 130;
                    offsetminh = 110;
                }
            }
            CuiHelper.AddUi(player, container);
        }
        // 1.1.0 переписан метод
        object OnEntityTakeDamage(BuildingPrivlidge entity, HitInfo info) {
            if (Clans == null) return null;
            if (entity == null || info == null) return null;
            if (info.InitiatorPlayer == null) return null;
            var target = info.InitiatorPlayer;
            if (entity == null) return null;
            if (entity.GetComponent<CupboardComponent>() == null) return null;
            var isMember = (bool)Clans.CallHook("HasFriend", entity.OwnerID, target.userID);
            if (isMember) {
                if (target.SecondsSinceAttacked > 5) {
                    target.ChatMessage("Вы не можете наносить урон своему шкафу, который является турнирным");
                    target.lastAttackedTime = UnityEngine.Time.time;
                    return false;
                }
            }
            return null;
        }
        // 1.1.0 Переписан метод
        void OnEntityDeath(BuildingPrivlidge entity, HitInfo info) {
            if (Clans == null) return;
            if (entity == null || info == null) return;
            if (info.InitiatorPlayer == null) return;
            var component = entity.GetComponent<CupboardComponent>();
            if (component == null) return;
            var data = _cupboard.FirstOrDefault(p => p.netID == entity.net.ID.Value);
            if (data == null) return;
            if (data.Remove == true) {
                PrintWarning("ХУЯСЕБЕ: Шкаф, который уже был сломан, вновь сломали? Отпишись разработчику пожалуй дела");
                return;
            }
            _component.Remove(component);
            component.GetComponent<CupboardComponent>().Kill();
            data.Remove = true;
            //Clans?.CallHook("ApiScoresRemoveTournament", data.nameClan, info.InitiatorPlayer.userID, config._MainSettings.PercentRemove); // изменил метод, теперь вместо ulong первый аргумент идет название клана, которого зарейдили.string nameAttacker = GetTag(info.InitiatorPlayer);
            Clans?.Call("ScoreV2", data.nameClan, nameAttacker);
            Server.Broadcast($"Клан <color=orange>{nameAttacker}</color> зарейдил клан <color=orange>{data.nameClan}</color>");
            // history kall
            //RaidsHistory.Add($"Клан {data.nameClan} был зарейжен кланом {nameAttacker}.Клан вылетел из турнира в {DateTime.Now.ToString(CultureInfo.InvariantCulture)}");
            //RaidsHistory.Add(DateTime.Now.ToString(CultureInfo.InvariantCulture), data.nameClan, nameAttacker);
            RaidsHistory.Add(new RaidsData {
                Attacker = data.nameClan, Victim = nameAttacker, Time = DateTime.Now.ToString(CultureInfo.InvariantCulture),
            }
            );
        }
        object OnEntityGroundMissing(BuildingPrivlidge entity) {
            if (entity == null) return null;
            if (entity.GetComponent<CupboardComponent>() != null) return false;
            return null;
        }
#endregion
#region ConsoleCommand
        private string GetGrid(Vector3 position) {
            char letter = 'A';
            var x = Mathf.Floor((position.x + (ConVar.Server.worldsize / 2)) / 146.3f) % 26;
            var z = Mathf.Floor((ConVar.Server.worldsize / 146.3f) - (position.z + (ConVar.Server.worldsize / 2)) / 146.3f);
            letter = (char)(((int)letter) + x);
            return $"{letter}{z}";
        }
        [ConsoleCommand("UI_TournamentHandler")]
        void TournamentHandlerCommand(ConsoleSystem.Arg args) {
            BasePlayer player = args.Player();
            if (args.Args.Length == 0) return;
            var nameClan = GetTag(player);
            if (string.IsNullOrEmpty(nameClan)) return;
            ulong buildBlock = 0;
            if (ulong.TryParse(args.Args[0], out buildBlock)) {
                BuildingPrivlidge entity = BaseNetworkable.serverEntities.Find(new NetworkableId(buildBlock)) as BuildingPrivlidge;
                if (entity == null) return;
                bool isNearTournamentCupboard = _cupboard.Any(c => c.Remove == false && Vector3.Distance(entity.transform.position, c.transform.position) < 500);
                if (isNearTournamentCupboard) {
                    player.ChatMessage("You cannot register a tournament cupboard within 500 meters of another tournament cupboard.");
                    return;
                }
                if (IsTimeExit()) return;
                if (GetActive(nameClan)) return;
                if (GetRemove(nameClan)) return;
                Clans?.Call("RegClan", nameClan);
                _cupboard.Add(new CupboardData {
                    nameClan = nameClan, netID = entity.net.ID.Value, Remove = false, grid = GetGrid(entity.transform.position),
                }
                );
                if (entity.GetComponent<CupboardComponent>() == null) {
                    entity.gameObject.AddComponent<CupboardComponent>().Init(nameClan);
                }
                Effect z = new Effect("assets/bundled/prefabs/fx/invite_notice.prefab", player, 0, new Vector3(), new Vector3());
                EffectNetwork.Send(z, player.Connection);
                player.ChatMessage("Вы успешно зарегистрировали свой клан!");
                player.EndLooting();
                string grid = GetGrid(entity.transform.position);
                string message = $"Клан <color=orange>{nameClan}</color> зарегался в квадрате <color=orange>{grid}</color>!";
                PrintToChat(message);
                Interface.GetMod().DataFileSystem.WriteObject(Name, _cupboard);
            }
        }
#endregion
#region Functional
        private void TimeHandle() {
            foreach(var mapMarker in RadiusMarker) {
                mapMarker.SendUpdate();
            }
        }
        public void AnyCupboardChecks() {
            if (_cupboard.Count > 0) {
                foreach (var ent in _cupboard.FindAll(p => p.Remove == false)) {
                    var cupboard = BaseNetworkable.serverEntities.Find(new NetworkableId(ent.netID));
                    if (cupboard != null && !cupboard.IsDestroyed) {
                        if (cupboard.GetComponent<CupboardComponent>() == null) {
                            cupboard.gameObject.AddComponent<CupboardComponent>().Init(ent.nameClan);
                        }
                    }
                }
            }
        }
        public string GetTag(BasePlayer player) {
            return (string) Clans?.Call("ClanAlready", player.userID);
        }
        private bool GetActive(string nameClan) {
            return _cupboard.FirstOrDefault(p => p.nameClan == nameClan && !p.Remove) != null;
        }
        private bool GetRemove(string nameClan) {
            return _cupboard.FirstOrDefault(p => p.nameClan == nameClan && p.Remove) != null;
        }
        private bool CheckTournament(string nameClan) => _cupboard.FirstOrDefault(p => p.nameClan == nameClan && !p.Remove) != null;
        static DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0);
        public bool IsTimeExit() {
            if (config._MainSettings.ActiveRegister == 0) return false;
            var timeWipe = SaveRestore.SaveCreatedTime.ToUniversalTime().Subtract(epoch).TotalSeconds + config._MainSettings.ActiveRegister - Facepunch.Math.Epoch.Current;
            return timeWipe < 0;
        }
        public string HexToCuiColor(string HEX, float Alpha = 100) {
            if (string.IsNullOrEmpty(HEX)) HEX = "#FFFFFF";
            var str = HEX.Trim('#');
            if (str.Length != 6) throw new Exception(HEX);
            var r = byte.Parse(str.Substring(0, 2), NumberStyles.HexNumber);
            var g = byte.Parse(str.Substring(2, 2), NumberStyles.HexNumber);
            var b = byte.Parse(str.Substring(4, 2), NumberStyles.HexNumber);
            return $"{(double) r / 255} {(double) g / 255} {(double) b / 255} {Alpha / 100}";
        }
#endregion
#region Component
        public class CupboardComponent : MonoBehaviour {
            private BuildingPrivlidge _privlidge;
            public string nameClan;
            VendingMachineMapMarker vendingMarker;
            private void Awake() {
                _privlidge = GetComponent<BuildingPrivlidge>();
            }
            public void Init(string name) {
                nameClan = name;
                _ins._component.Add(this);
                CheckAnyMaps();
                // вы заебали уже менять автора, реально.Автор плагина: XAVIER.}
                public void Kill() {
                    DestroyImmediate(this);
                }
                public void DestroyMarker() {
                    if (mapMarker != null && !mapMarker.IsDestroyed) mapMarker.Kill();
                    if (vendingMarker != null && !vendingMarker.IsDestroyed) vendingMarker.Kill();
                    if (_ins.RustMap && _ins.config._MapSettings.isRustMap) _ins.RustMap.CallHook("ApiRemovePointUrl", $"clanTournament{_privlidge.net.ID.Value}");
                }
                private void OnDestroy() {
                    if (IsInvoking()) CancelInvoke();
                    DestroyMarker();
                }
                public void CheckAnyMaps() {
                    DestroyMarker();
                    if (_ins.config._MapSettings.isRustMap) RustMapActive();
                    if (_ins.config._MapSettings.isMapGame) MarkerActive();
                }
                public MapMarkerGenericRadius mapMarker;
                const string markerEnt = "assets/prefabs/tools/map/genericradiusmarker.prefab";
                public void MarkerActive() {
                    var position = _privlidge.transform.position;
                    position.x = _ins.config._MapSettings.RotateMarker ? position.x + UnityEngine.Random.Range(5f, 20f) : position.x;
                    mapMarker = GameManager.server.CreateEntity("assets/prefabs/tools/map/genericradiusmarker.prefab", position).GetComponent<MapMarkerGenericRadius>();
                    vendingMarker = GameManager.server.CreateEntity("assets/prefabs/deployable/vendingmachine/vending_mapmarker.prefab", position).GetComponent<VendingMachineMapMarker>();
                    vendingMarker.markerShopName = nameClan.ToUpper();
                    vendingMarker.Spawn();
                    mapMarker.radius = 0.5f;
                    mapMarker.color1 = Color.yellow;
                    mapMarker.alpha = 0.5f;
                    mapMarker.enabled = true;
                    mapMarker.Spawn();
                    mapMarker.SendUpdate();
                    _ins.RadiusMarker.Add(mapMarker);
                }
                public void RustMapActive() {
                    _ins.RustMap?.Call("ApiAddPointUrl", _ins.config._MapSettings.IconRustMap, $"clanTournament{_privlidge.net.ID.Value}", _privlidge.transform.position, nameClan.ToUpper(), 0.04f);
                }
            }
#endregion
#region Plugin Remove API
            string clangridpos(string clan) {
                var data = _cupboard.FirstOrDefault(p => p.nameClan == clan);
                if (data == null) return "123e";
                return $"{data.grid}";
            }
            string CanRemove(BasePlayer player, BaseEntity entity) {
                if (player == null || entity == null) return null;
                var build = entity as BuildingPrivlidge;
                if (build == null) return null;
                var find = build.GetComponent<CupboardComponent>();
                if (find != null) {
                    return "Вы не можете удалить турнирный шкаф!";
                }
                return null;
            }
#endregion
#region Configuration
            public static class UI {
                public static void AddImage(ref CuiElementContainer container, string parrent, string name, string color, string sprite, string mat, string aMin, string aMax, string oMin, string oMax, string outline = "", string dist = "") {
                    if (string.IsNullOrEmpty(sprite) && !string.IsNullOrEmpty(mat)) container.Add(new CuiElement() {
                        Parent = parrent, Name = name, Components = {
                            new CuiImageComponent {
                                Color = color, Material = "assets/icons/greyout.mat"
                            }
                            , new CuiRectTransformComponent {
                                AnchorMin = aMin, AnchorMax = aMax, OffsetMin = oMin, OffsetMax = oMax
                            }
                        }
                    }
                    );
                    if (string.IsNullOrEmpty(sprite) && string.IsNullOrEmpty(mat)) container.Add(new CuiElement() {
                        Parent = parrent, Name = name, Components = {
                            new CuiImageComponent {
                                Color = color
                            }
                            , new CuiRectTransformComponent {
                                AnchorMin = aMin, AnchorMax = aMax, OffsetMin = oMin, OffsetMax = oMax
                            }
                        }
                    }
                    );
                }
                public static void AddSkinImage(ref CuiElementContainer container, string parrent, string name, string shortname, ulong skin, string color, string sprite, string mat, string aMin, string aMax, string oMin, string oMax) {
                    if (string.IsNullOrEmpty(sprite) && string.IsNullOrEmpty(mat)) container.Add(new CuiElement() {
                        Parent = parrent, Name = name, Components = {
                            new CuiImageComponent {
                                Color = color, ItemId = ItemManager.FindItemDefinition(shortname).itemid, SkinId = skin
                            }
                            , new CuiOutlineComponent {
                                Color = "0 0 0 0", Distance = "0 0"
                            }
                            , new CuiRectTransformComponent {
                                AnchorMin = aMin, AnchorMax = aMax, OffsetMin = oMin, OffsetMax = oMax
                            }
                        }
                    }
                    );
                }
                public static void AddRawImage(ref CuiElementContainer container, string parrent, string name, string png, string color, string sprite, string mat, string aMin, string aMax, string oMin, string oMax) {
                    if (string.IsNullOrEmpty(sprite) && string.IsNullOrEmpty(mat)) container.Add(new CuiElement() {
                        Parent = parrent, Name = name, Components = {
                            new CuiRawImageComponent {
                                Color = color, Png = png
                            }
                            , new CuiOutlineComponent {
                                Color = "0 0 0 0", Distance = "0 0"
                            }
                            , new CuiRectTransformComponent {
                                AnchorMin = aMin, AnchorMax = aMax, OffsetMin = oMin, OffsetMax = oMax
                            }
                        }
                    }
                    );
                }
                public static void AddText(ref CuiElementContainer container, string parrent, string name, string color, string text, TextAnchor align, int size, string aMin, string aMax, string oMin, string oMax, string outColor = "0 0 0 0", string font = "robotocondensed-bold.ttf", string dist = "0.5 0.5", float FadeIN = 0f, float FadeOut = 0f) {
                    container.Add(new CuiElement() {
                        Parent = parrent, Name = name, FadeOut = FadeOut, Components = {
                            new CuiTextComponent {
                                Color = color, Text = text, Align = align, FontSize = size, Font = font, FadeIn = FadeIN
                            }
                            , new CuiOutlineComponent {
                                Color = outColor, Distance = dist
                            }
                            , new CuiRectTransformComponent {
                                AnchorMin = aMin, AnchorMax = aMax, OffsetMin = oMin, OffsetMax = oMax
                            }
                        }
                    }
                    );
                }
                public static void AddButton(ref CuiElementContainer container, string parrent, string name, string cmd, string close, string color, string sprite, string mat, string aMin, string aMax, string oMin, string oMax, string outline = "", string dist = "") {
                    if (!string.IsNullOrEmpty(sprite) && !string.IsNullOrEmpty(mat)) container.Add(new CuiElement() {
                        Parent = parrent, Name = name, Components = {
                            new CuiButtonComponent {
                                Command = cmd, Color = color, Close = close, Sprite = sprite, Material = "assets/icons/greyout.mat",
                            }
                            , new CuiRectTransformComponent {
                                AnchorMin = aMin, AnchorMax = aMax, OffsetMin = oMin, OffsetMax = oMax
                            }
                        }
                    }
                    );
                    if (!string.IsNullOrEmpty(sprite) && !string.IsNullOrEmpty(mat) && !string.IsNullOrEmpty(outline)) container.Add(new CuiElement() {
                        Parent = parrent, Name = name, Components = {
                            new CuiButtonComponent {
                                Command = cmd, Color = color, Close = close, Sprite = sprite, Material = "assets/icons/greyout.mat",
                            }
                            , new CuiOutlineComponent {
                                Color = outline, Distance = dist
                            }
                            , new CuiRectTransformComponent {
                                AnchorMin = aMin, AnchorMax = aMax, OffsetMin = oMin, OffsetMax = oMax
                            }
                        }
                    }
                    );
                    if (string.IsNullOrEmpty(sprite) && !string.IsNullOrEmpty(mat)) container.Add(new CuiElement() {
                        Parent = parrent, Name = name, Components = {
                            new CuiButtonComponent {
                                Command = cmd, Color = color, Close = close, Material = "assets/icons/greyout.mat",
                            }
                            , new CuiRectTransformComponent {
                                AnchorMin = aMin, AnchorMax = aMax, OffsetMin = oMin, OffsetMax = oMax
                            }
                        }
                    }
                    );
                    if (!string.IsNullOrEmpty(sprite) && string.IsNullOrEmpty(mat)) container.Add(new CuiElement() {
                        Parent = parrent, Name = name, Components = {
                            new CuiButtonComponent {
                                Command = cmd, Color = color, Close = close, Sprite = sprite
                            }
                            , new CuiRectTransformComponent {
                                AnchorMin = aMin, AnchorMax = aMax, OffsetMin = oMin, OffsetMax = oMax
                            }
                        }
                    }
                    );
                    if (string.IsNullOrEmpty(sprite) && string.IsNullOrEmpty(mat)) container.Add(new CuiElement() {
                        Parent = parrent, Name = name, Components = {
                            new CuiButtonComponent {
                                Command = cmd, Color = color, Close = close,
                            }
                            , new CuiRectTransformComponent {
                                AnchorMin = aMin, AnchorMax = aMax, OffsetMin = oMin, OffsetMax = oMax
                            }
                        }
                    }
                    );
                }
            }
            string HexToRustFormat(string hex) {
                if (string.IsNullOrEmpty(hex)) hex = "#FFFFFFFF";
                var str = hex.Trim('#');
                if (str.Length == 6) str += "FF";
                if (str.Length != 8) throw new Exception(hex);
                var r = byte.Parse(str.Substring(0, 2), NumberStyles.HexNumber);
                var g = byte.Parse(str.Substring(2, 2), NumberStyles.HexNumber);
                var b = byte.Parse(str.Substring(4, 2), NumberStyles.HexNumber);
                var a = byte.Parse(str.Substring(6, 2), NumberStyles.HexNumber);
                Color color = new Color32(r, g, b, a);
                return $"{color.r:F2} {color.g:F2} {color.b:F2} {color.a:F2}";
            }
            private PluginConfig config;
            protected override void LoadDefaultConfig() {
                config = PluginConfig.DefaultConfig();
            }
            protected override void LoadConfig() {
                base.LoadConfig();
                config = Config.ReadObject<PluginConfig>();
                Config.WriteObject(config, true);
            }
            protected override void SaveConfig() {
                Config.WriteObject(config);
            }
            private class PluginConfig {
                public class MainSettings {
                    [JsonProperty("Минимальное количество игроков в клане для регистрации")]
                    public int MinPlayer = 2;
                    [JsonProperty("Минимальное количество очков в клане для регистрации")]
                    public int MinPoint = 100;
                    [JsonProperty("Минимальное количество фундаментов для регистрации")]
                    public int MinFoundation = 20;
                    [JsonProperty("Сколько будет открыта регистрация после вайпа ( Если установить 0, то регистрация будет вечна.ПРИМЕР: 86400 секунд - значит ровно через 1 день после вайпа регистрация будет закрыта )")]
                    public int ActiveRegister = 0;
                    [JsonProperty("Сколько отнимать очков от общего количество ( в процентах )")]
                    public int PercentRemove = 50;
                }
                public class MapSettings {
                    [JsonProperty("Добавить поддержку RustMap ? ( https://rustplugin.ru/resources/rust-map.91/ )")]
                    public bool isRustMap = false;
                    [JsonProperty("Иконка на карту RustMap")]
                    public string IconRustMap = "";
                    [JsonProperty("Добавить маркер на карту G ?")]
                    public bool isMapGame = true;
                    [JsonProperty("Сдвигать ли маркер на карте G от основной позиции шкафа ?")]
                    public bool RotateMarker = true;
                }
                [JsonProperty("Основные настройки")]
                public MainSettings _MainSettings = new MainSettings();
                [JsonProperty("Настройка карты")]
                public MapSettings _MapSettings = new MapSettings();
                public static PluginConfig DefaultConfig() {
                    return new PluginConfig() {
                        _MainSettings = new MainSettings(), _MapSettings = new MapSettings(),
                    }
                    ;
                }
            }
#endregion
        }
    }
#region Linq
    namespace Oxide.Plugins.TournamentClanExtensionMethods {
        public static class ExtensionMethods {
            internal static Core.Libraries.Permission p;
            public static bool All<T>(this IList<T> a, Func<T, bool> b) {
                for (int i = 0; i < a.Count; i++) {
                    if (!b(a[i])) {
                        return false;
                    }
                }
                return true;
            }
            public static int Average(this IList<int> a) {
                if (a.Count == 0) {
                    return 0;
                }
                int b = 0;
                for (int i = 0; i < a.Count; i++) {
                    b += a[i];
                }
                return b / a.Count;
            }
            public static T ElementAt<T>(this IEnumerable<T> a, int b) {
                using (var c = a.GetEnumerator()) {
                    while (c.MoveNext()) {
                        if (b == 0) {
                            return c.Current;
                        }
                        b--;
                    }
                }
                return default(T);
            }
            public static bool Exists<T>(this HashSet<T> a) where T : BaseEntity {
                foreach (var b in a) {
                    if (!b.IsKilled()) {
                        return true;
                    }
                }
                return false;
            }
            public static bool Exists<T>(this IEnumerable<T> a, Func<T, bool> b = null) {
                using (var c = a.GetEnumerator()) {
                    while (c.MoveNext()) {
                        if (b == null || b(c.Current)) {
                            return true;
                        }
                    }
                }
                return false;
            }
            public static T FirstOrDefault<T>(this IEnumerable<T> a, Func<T, bool> b = null) {
                using (var c = a.GetEnumerator()) {
                    while (c.MoveNext()) {
                        if (b == null || b(c.Current)) {
                            return c.Current;
                        }
                    }
                }
                return default(T);
            }
            public static int RemoveAll<TKey, TValue>(this IDictionary<TKey, TValue> c, Func<TKey, TValue, bool> d) {
                int a = 0;
                foreach (var b in c.ToList()) {
                    if (d(b.Key, b.Value)) {
                        c.Remove(b.Key);
                        a++;
                    }
                }
                return a;
            }
            public static IEnumerable<V> Select<T, V>(this IEnumerable<T> a, Func<T, V> b) {
                var c = new List<V>();
                using (var d = a.GetEnumerator()) {
                    while (d.MoveNext()) {
                        c.Add(b(d.Current));
                    }
                }
                return c;
            }
            public static Dictionary<T, V> ToDictionary<S, T, V>(this IEnumerable<S> a, Func<S, T> b, Func<S, V> c) {
                var d = new Dictionary<T, V>();
                using (var e = a.GetEnumerator()) {
                    while (e.MoveNext()) {
                        d[b(e.Current)] = c(e.Current);
                    }
                }
                return d;
            }
            public static List<T> ToList<T>(this IEnumerable<T> a) {
                var b = new List<T>();
                if (a == null) {
                    return b;
                }
                using (var c = a.GetEnumerator()) {
                    while (c.MoveNext()) {
                        b.Add(c.Current);
                    }
                }
                return b;
            }
            public static List<T> Where<T>(this IEnumerable<T> a, Func<T, bool> b) {
                var c = new List<T>();
                using (var d = a.GetEnumerator()) {
                    while (d.MoveNext()) {
                        if (b(d.Current)) {
                            c.Add(d.Current);
                        }
                    }
                }
                return c;
            }
            public static List<T> OfType<T>(this IEnumerable<BaseNetworkable> a) where T : BaseEntity {
                var b = new List<T>();
                using (var c = a.GetEnumerator()) {
                    while (c.MoveNext()) {
                        if (c.Current is T) {
                            b.Add(c.Current as T);
                        }
                    }
                }
                return b;
            }
            public static int Sum<T>(this IList<T> a, Func<T, int> b) {
                int c = 0;
                for (int i = 0; i < a.Count; i++) {
                    var d = b(a[i]);
                    if (!float.IsNaN(d)) {
                        c += d;
                    }
                }
                return c;
            }
            public static bool HasPermission(this string a, string b) {
                if (p == null) {
                    p = Interface.Oxide.GetLibrary<Core.Libraries.Permission>(null);
                }
                return !string.IsNullOrEmpty(a) && p.UserHasPermission(a, b);
            }
            public static bool HasPermission(this BasePlayer a, string b) {
                return a.UserIDString.HasPermission(b);
            }
            public static bool HasPermission(this ulong a, string b) {
                return a.ToString().HasPermission(b);
            }
            public static bool IsReallyConnected(this BasePlayer a) {
                return a.IsReallyValid() && a.net.connection != null;
            }
            public static bool IsKilled(this BaseNetworkable a) {
                return (object)a == null || a.IsDestroyed;
            }
            public static bool IsNull<T>(this T a) where T : class {
                return a == null;
            }
            public static bool IsNull(this BasePlayer a) {
                return (object)a == null;
            }
            public static bool IsReallyValid(this BaseNetworkable a) {
                return !((object)a == null || a.IsDestroyed || (object)a.net == null);
            }
            public static void SafelyKill(this BaseNetworkable a) {
                if (a.IsKilled()) {
                    return;
                }
                a.Kill(BaseNetworkable.DestroyMode.None);
            }
            public static bool CanCall(this Plugin o) {
                return (object)o != null && o.IsLoaded;
            }
            public static bool IsInBounds(this OBB o, Vector3 a) {
                return o.ClosestPoint(a) == a;
            }
            public static bool IsHuman(this BasePlayer a) {
                return !(a.IsNpc || !a.userID.IsSteamId());
            }
            public static bool IsCheating(this BasePlayer a) {
                return a._limitedNetworking || a.IsFlying || a.UsedAdminCheat(30f) || a.IsGod() || a.metabolism?.calories?.min == 500;
            }
            public static void SetAiming(this BasePlayer a, bool f) {
                a.modelState.aiming = f;
                a.SendNetworkUpdate();
            }
            public static BasePlayer ToPlayer(this IPlayer user) {
                return user.Object as BasePlayer;
            }
            public static string ObjectName(this Collider collider) {
                try {
                    return collider.gameObject?.name ?? string.Empty;
                }
                catch {
                    return string.Empty;
                }
            }
            public static Vector3 GetPosition(this Collider collider) {
                try {
                    return collider.transform?.position ?? Vector3.zero;
                }
                catch {
                    return Vector3.zero;
                }
            }
            public static string ObjectName(this BaseEntity entity) {
                try {
                    return entity.name ?? string.Empty;
                }
                catch {
                    return string.Empty;
                }
            }
            public static T GetRandom<T>(this HashSet<T> h, string check = "@PrOmOcOdE") {
                if (h == null || h.Count == 0) {
                    return default(T);
                }
                return h.ElementAt(UnityEngine.Random.Range(0, h.Count));
            }
            public static int InventorySlots(this StorageContainer a) {
                if (a.IsKilled() || a.inventory == null) return 0;
                return a.inventorySlots;
            }
            public static IEnumerable<V> Select<T, V>(this IEnumerable<T> a, Func<T, int, V> b) {
                int c = -1;
                foreach (T d in a) {
                    yield return b(d, ++c);
                }
            }
            public static IEnumerable<T> Skip<T>(this IEnumerable<T> a, int b) {
                using (var e = a.GetEnumerator()) {
                    while (b > 0 && e.MoveNext()) {
                        b--;
                    }
                    if (b <= 0) {
                        while (e.MoveNext()) {
                            yield return e.Current;
                        }
                    }
                }
            }
            public static IEnumerable<T> Take<T>(this IEnumerable<T> a, int b) {
                if (b <= 0) {
                    yield break;
                }
                foreach (T c in a) {
                    yield return c;
                    int d = b - 1;
                    b = d;
                    if (d == 0) {
                        break;
                    }
                }
            }
        }
    }
#endregion

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