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

FREE CupWars : 1.0.7 1.0.7

Нет прав для скачивания
C#:
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using UnityEngine;
using System.Linq;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using Oxide.Core;
using System.Globalization;
using Newtonsoft.Json.Linq;
using ProtoBuf;
///Скачано с дискорд сервера Rust Edit [PRO+]
///discord.gg/9vyTXsJyKR
namespace Oxide.Plugins {
    [Info("CupWars", "discord.gg/9vyTXsJyKR", "1.0.7")]
    public class CupWars : RustPlugin {
#region [Vars]
        [PluginReference]
        Plugin ImageLibrary, Clans;
        private List<BuildingPrivlidge> Cups = new List<BuildingPrivlidge>();
        private List<ulong> CloseUI = new List<ulong>();
        public class cupData {
            public string OwnerName;
            public int lastCapture;
            public Vector3 position;
            public string Name;
        }
        private static CupWars plugin;
#endregion
#region [Config]
        private PluginConfig config;
        protected override void LoadDefaultConfig() {
            config = PluginConfig.DefaultConfig();
        }
        protected override void LoadConfig() {
            base.LoadConfig();
            config = Config.ReadObject<PluginConfig>();
            if (config.PluginVersion < Version) UpdateConfigValues();
            Config.WriteObject(config, true);
        }
        private void UpdateConfigValues() {
            PluginConfig baseConfig = PluginConfig.DefaultConfig();
            if (config.PluginVersion < Version) {
                config.PluginVersion = Version;
                PrintWarning("Config checked completed!");
            }
            config.PluginVersion = Version;
        }
        protected override void SaveConfig() {
            Config.WriteObject(config);
        }
        private class PluginConfig {
            [JsonProperty("Настройки шкафа")]
            public Settings settings;
            [JsonProperty("Настройки маркера")]
            public MarkersSettings marker;
            [JsonProperty("Config version")]
            public VersionNumber PluginVersion = new VersionNumber();
            public static PluginConfig DefaultConfig() {
                return new PluginConfig() {
                    settings = new Settings() {
                        skinID = 2679214470, rewardRadius = 500, captSeconds = 300, captDelay = 14400, gatherPrecent = 15
                    }
                    , marker = new MarkersSettings() {
                        markerRadius = 0.5f, markerAlpha = 0.4f, markerColorCanCapture = "#10c916", markerColorCantCapture = "#ffb700", markerColorCapture = "#ed0707"
                    }
                    , PluginVersion = new VersionNumber()
                }
                ;
            }
        }
        public class Settings {
            [JsonProperty("skinID выдаваемоего шкафа")]
            public ulong skinID;
            [JsonProperty("Радиус в котором выдаются налоги (в метрах)")]
            public int rewardRadius;
            [JsonProperty("Сколько нужно секунд для захвата")]
            public int captSeconds;
            [JsonProperty("Откат между захватами в секундах")]
            public int captDelay;
            [JsonProperty("Процент налога")]
            public int gatherPrecent;
        }
        public class MarkersSettings {
            [JsonProperty("Радиус маркера")]
            public float markerRadius;
            [JsonProperty("Прозрачность маркера")]
            public float markerAlpha;
            [JsonProperty("Цвет маркера когда можно захватить")]
            public string markerColorCanCapture;
            [JsonProperty("Цвет маркера когда идет захват")]
            public string markerColorCapture;
            [JsonProperty("Цвет маркера когда нельзя захватить")]
            public string markerColorCantCapture;
        }
#endregion
#region [Localization⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠]
        protected override void LoadDefaultMessages() {
            lang.RegisterMessages(new Dictionary<string, string> {
                ["CantCapt"]
                = "Захватить можно будет через {0}ч.{1}м.{2}с.", ["StartCapt"] = "Клан {0} начал захват территории {1}", ["AlreadyCapt"] = "Территория уже захвачена вашим кланом", ["OtherCapt"] = "Клан {0} перехватил вашу территорию", ["AlreadyCapturing"] = "Ваш клан уже захватывает территорию", ["StopCapt"] = "Клан {0} захватил территорию {1}", ["UI_rightPanelText"] = "До конца захвата:\n{0}мин {1}сек", ["UI_Header"] = "Захват зон", ["UI_Footer"] = "Налог составляет {0}%", ["UI_Name"] = "<size=24>Зона:\n {0}</size>", ["UI_Capt"] = "<size=20>Захвачена:</size>\n {0}", ["UI_Free"] = "<size=20>Свободна</size>", ["UI_CanCapt"] = "Можно\nзахватить", ["UI_NextCapt"] = "До повторного захвата\n {0}ч {1}мин",
            }
            , this);
        }
        string GetMsg(string key, BasePlayer player = null) => lang.GetMessage(key, this, player?.UserIDString);
        string GetMsg(string key) => lang.GetMessage(key, this);
#endregion
#region [Oxide]
        private void OnServerInitialized() {
            LoadCupboards();
            ImageLibrary?.Call("AddImage", "https://i.imgur.com/heVYeVD.png", "button_close_right");
            ImageLibrary?.Call("AddImage", "https://i.imgur.com/6xO5e95.png", "button_close");
        }
        private void Init() {
            plugin = this;
        }
        private void Unload() {
            SaveCups(true);
            foreach (var player in BasePlayer.activePlayerList) {
                CuiHelper.DestroyUi(player, "CaptMenuMain");
                CuiHelper.DestroyUi(player, "CaptTableMain");
            }
        }
        private void OnEntitySpawned(BaseLock codeLock) {
            if (codeLock == null) return;
            var parent = codeLock.GetParentEntity();
            if (parent == null) return;
            var cup = parent as BuildingPrivlidge;
            if (cup == null) return;
            if (Cups.Contains(cup)) {
                NextTick(() => {
                    codeLock.Kill();
                }
                );
            }
        }
        private void OnEntityBuilt(Planner plan, GameObject go) {
            if (plan == null) return;
            var player = plan?.GetOwnerPlayer();
            if (player == null) return;
            var codelock = go.GetComponent<CodeLock>();
            if(codelock != null) {
                var parent = codelock.GetParentEntity();
                if (parent == null) return;
                var cup = parent as BuildingPrivlidge;
                if (cup == null) return;
                if (Cups.Contains(cup)) {
                    NextTick(()=> {
                        if(codelock != null) codelock.Kill();
                    }
                    );
                }
                return;
            }
            if (!player.IsAdmin) return;
            var priv = go.GetComponent<BuildingPrivlidge>();
            if (priv != null) {
                var activItem = player.GetActiveItem();
                if (activItem.skin == config.settings.skinID) {
                    var ent = priv as BaseEntity;
                    ent.OwnerID = 0;
                    ent.GetComponent<BaseCombatEntity>().lifestate = BaseCombatEntity.LifeState.Dead;
                    UnityEngine.Object.Destroy(ent.GetComponent<DestroyOnGroundMissing>());
                    UnityEngine.Object.Destroy(ent.GetComponent<GroundWatch>());
                    var comp = priv.gameObject.AddComponent<CupManager>();
                    comp.Initialize("-", Facepunch.Math.Epoch.Current - config.settings.captDelay, activItem.name, GetGrid(ent.transform.position));
                    Cups.Add(priv);
                    SaveCups();
                    player.ChatMessage($"Трерритория с именем {activItem.name} создана");
                }
            }
        }
        private object OnCupboardAuthorize(BuildingPrivlidge privilege, BasePlayer player) {
            if (privilege == null || player == null) return null;
            if (Cups.Contains(privilege)) {
                var clanName = Clans?.Call<string>("GetClanOf", player.userID);
                if (clanName == null) return false;
                var comp = privilege.gameObject.GetComponent<CupManager>();
                if (comp == null) return null;
                foreach(var cup in Cups) {
                    var comp2 = privilege.gameObject.GetComponent<CupManager>();
                    if (comp2 == null) continue;
                    if(comp.ownerName == clanName) {
                        return null;
                    }
                    if(comp.captClan == clanName) {
                        player.ChatMessage(GetMsg("AlreadyCapturing", player));
                        return false;
                    }
                }
                var auth = comp.SetNewCaptClan(clanName, player);
                if (auth) {
                    privilege.authorizedPlayers.Clear();
                    privilege.inventory.Clear();
                }
                return false;
            }
            return null;
        }
        private object OnCupboardDeauthorize(BuildingPrivlidge privilege, BasePlayer player) {
            if (privilege == null || player == null) return null;
            if (Cups.Contains(privilege)) {
                return false;
            }
            return null;
        }
        private object OnCupboardClearList(BuildingPrivlidge privilege, BasePlayer player) {
            if (privilege == null || player == null) return null;
            if (Cups.Contains(privilege)) {
                return false;
            }
            return null;
        }
        private void OnLootEntity(BasePlayer player, BaseEntity entity) {
            if (player == null || entity == null) return;
            var privilege = entity as BuildingPrivlidge;
            if (privilege == null) return;
            if (!Cups.Contains(privilege)) return;
            var comp = privilege.GetComponent<CupManager>();
            if (comp == null) return;
            var clanName = Clans?.Call<string>("GetClanOf", player.userID);
            if (clanName == null) {
                PlayerNameID playerNameID = privilege.authorizedPlayers.FirstOrDefault(p => p.userid == player.userID);
                if (playerNameID != null) privilege.authorizedPlayers.Remove(playerNameID);
                timer.Once(0.01f, player.EndLooting);
                return;
            }
            if (comp.ownerName != clanName) {
                PlayerNameID playerNameID = privilege.authorizedPlayers.FirstOrDefault(p => p.userid == player.userID);
                if (playerNameID != null) privilege.authorizedPlayers.Remove(playerNameID);
                timer.Once(0.01f, player.EndLooting);
            }
        }
        private void OnDispenserGather(ResourceDispenser dispenser, BaseEntity entity, Item item) {
            if (entity.ToPlayer() == null) return;
            if (item == null) return;
            foreach (var cup in Cups) {
                if (Vector3.Distance(cup.transform.position, entity.ToPlayer().transform.position) < config.settings.rewardRadius) {
                    NextTick(() => {
                        var amount = Convert.ToInt32(item.amount * (config.settings.gatherPrecent / 100f));
                        if (amount <= 0) return;
                        var bonusItem = ItemManager.CreateByName(item.info.shortname, amount);
                        if (bonusItem.amount <= 0) return;
                        bonusItem.MoveToContainer(cup.inventory);
                    }
                    );
                }
            }
        }
        private void OnDispenserBonus(ResourceDispenser dispenser, BaseEntity entity, Item item) => OnDispenserGather(dispenser, entity, item);
#endregion
#region [Func]
        private static string GetGrid(Vector3 pos) {
            var letter = 'A';
            var x = Mathf.Floor((pos.x + ConVar.Server.worldsize / 2f) / 146.3f) % 26;
            var z = Mathf.Floor(ConVar.Server.worldsize / 146.3f) - Mathf.Floor((pos.z + ConVar.Server.worldsize / 2f) / 146.3f);
            letter = (char)(letter + x);
            return $"{letter}{z}";
        }
        private void KillCups() {
            foreach(var cup in Cups) {
                if (cup == null) continue;
                var comp = cup.gameObject.GetComponent<CupManager>();
                if (comp == null) continue;
                UnityEngine.Object.Destroy(comp);
            }
        }
#endregion
#region [Data]
        private void LoadCupboards() {
            List<cupData> data = new List<cupData>();
            data = Interface.Oxide.DataFileSystem.ReadObject<List<cupData>>($"CupWars/data");
            foreach (var cup in data) {
                var cupboards = new List<BaseEntity>();
                Vis.Entities(cup.position, 2f, cupboards);
                foreach (var c in cupboards) {
                    if (!c.ShortPrefabName.Contains("cupboard.tool")) continue;
                    var findCup = c;
                    findCup.OwnerID = 0;
                    var combat = findCup.GetComponent<BaseCombatEntity>();
                    if (combat != null) combat.lifestate = BaseCombatEntity.LifeState.Dead;
                    var DGM = findCup.GetComponent<DestroyOnGroundMissing>();
                    if (DGM != null) UnityEngine.Object.Destroy(DGM);
                    var GW = findCup.GetComponent<GroundWatch>();
                    if (GW != null) UnityEngine.Object.Destroy(GW);
                    var bp = findCup as BuildingPrivlidge;
                    var comp = bp.gameObject.AddComponent<CupManager>();
                    comp.Initialize(cup.OwnerName, cup.lastCapture, cup.Name, GetGrid(findCup.transform.position));
                    Cups.Add(bp);
                    break;
                }
            }
        }
        private void SaveCups(bool destoyComp = false) {
            List<cupData> data = new List<cupData>();
            foreach(var cup in Cups) {
                if (cup == null) continue;
                var comp = cup.gameObject.GetComponent<CupManager>();
                if (comp == null) continue;
                cupData addData = new cupData();
                addData.OwnerName = comp.ownerName;
                addData.Name = comp.cupName;
                addData.lastCapture = comp.lastCapture;
                addData.position = cup.transform.position;
                data.Add(addData);
            }
            Interface.Oxide.DataFileSystem.WriteObject($"CupWars/data", data);
            if (destoyComp) KillCups();
        }
        void OnNewSave() {
            Cups.Clear();
            SaveCups();
            PrintWarning("Wipe detected! Data clearing");
        }
#endregion
#region [Comp]
        public class CupManager : MonoBehaviour {
            public string ownerName;
            public int lastCapture;
            public string cupName;
            private bool isCapture;
            public string captClan;
            public int capt;
            private MapMarkerGenericRadius mapMarker;
            private VendingMachineMapMarker vendingMarker;
            public void DestroyComp() => OnDestroy();
            private void OnDestroy() {
                RemoveMarker();
                Destroy(this);
            }
            public void Initialize(string owner, int last, string name, string grid) {
                ownerName = owner;
                lastCapture = last;
                cupName = name;
                isCapture = false;
                captClan = "";
                capt = 0;
                if (Facepunch.Math.Epoch.Current - lastCapture < plugin.config.settings.captDelay) CreateMarker(plugin.config.marker.markerColorCantCapture);
                else CreateMarker(plugin.config.marker.markerColorCanCapture);
                InvokeRepeating("Timer", 1f, 1f);
            }
            private void Timer() {
                if (isCapture) {
                    capt++;
                    if (capt >= plugin.config.settings.captSeconds) {
                        StopCapture();
                    }
                    else {
                        DrawUiCapture();
                    }
                }
                if (Facepunch.Math.Epoch.Current - lastCapture == plugin.config.settings.captDelay && !isCapture) mapMarker.color1 = ConvertToColor(plugin.config.marker.markerColorCanCapture);
                UpdateMarker();
            }
            private void DrawUiCapture() {
                var clan = plugin.Clans?.Call<JObject>("GetClan", captClan);
                if (clan == null) return;
                var members = clan.GetValue("members") as JArray;
                foreach(var member in members) {
                    var id = Convert.ToUInt64(member);
                    if (plugin.CloseUI.Contains(id)) continue;
                    var player = BasePlayer.FindByID(id);
                    if (player == null) continue;
                    if (player.IsConnected) plugin.CreateCaptureTable(player, this);
                }
            }
            public bool SetNewCaptClan(string clan, BasePlayer cPlayer) {
                if (clan == captClan) return true;
                if (Facepunch.Math.Epoch.Current - lastCapture < plugin.config.settings.captDelay) {
                    var time = TimeSpan.FromSeconds(lastCapture + plugin.config.settings.captDelay - Facepunch.Math.Epoch.Current);
                    cPlayer.ChatMessage(String.Format(plugin.GetMsg("CantCapt", cPlayer), time.Hours, time.Minutes, time.Seconds));
                    return false;
                }
                if (isCapture) {
                    var Clan = plugin.Clans?.Call<JObject>("GetClan", captClan);
                    if (Clan == null) return false;
                    var members = Clan.GetValue("members") as JArray;
                    foreach (var member in members) {
                        var id = Convert.ToUInt64(member);
                        var player = BasePlayer.FindByID(id);
                        if (player == null) continue;
                        if (player.IsConnected) {
                            player.ChatMessage(String.Format(plugin.GetMsg("OtherCapt", player), clan));
                            CuiHelper.DestroyUi(player, "CaptTableMain");
                        }
                    }
                }
                else {
                    if(clan == ownerName) {
                        cPlayer.ChatMessage(plugin.GetMsg("AlreadyCapt", cPlayer));
                        return false;
                    }
                    plugin.Server.Broadcast(String.Format(plugin.GetMsg("StartCapt"), clan, cupName));
                    mapMarker.color1 = ConvertToColor(plugin.config.marker.markerColorCapture);
                }
                captClan = clan;
                capt = 0;
                isCapture = true;
                DrawUiCapture();
                return true;
            }
            private void StopCapture() {
                capt = 0;
                isCapture = false;
                var Clan = plugin.Clans?.Call<JObject>("GetClan", captClan);
                if (Clan == null) {
                    captClan = "";
                    mapMarker.color1 = ConvertToColor(plugin.config.marker.markerColorCanCapture);
                    return;
                }
                var members = Clan.GetValue("members") as JArray;
                foreach (var member in members) {
                    var id = Convert.ToUInt64(member);
                    var player = BasePlayer.FindByID(id);
                    if (player == null) continue;
                    if (player.IsConnected) CuiHelper.DestroyUi(player, "CaptTableMain");
                }
                ownerName = captClan;
                vendingMarker.markerShopName = ownerName;
                vendingMarker.SendNetworkUpdate();
                lastCapture = Facepunch.Math.Epoch.Current;
                captClan = "";
                mapMarker.color1 = ConvertToColor(plugin.config.marker.markerColorCantCapture);
                plugin.Server.Broadcast(String.Format(plugin.GetMsg("StopCapt"), ownerName, cupName));
                plugin.SaveCups();
            }
            private void UpdateMarker() {
                mapMarker.SendUpdate();
            }
            private void RemoveMarker() {
                if (mapMarker != null && !mapMarker.IsDestroyed) mapMarker.Kill();
                if (vendingMarker != null && !vendingMarker.IsDestroyed) vendingMarker.Kill();
            }
            private void CreateMarker(string color) {
                RemoveMarker();
                mapMarker = GameManager.server.CreateEntity("assets/prefabs/tools/map/genericradiusmarker.prefab", transform.position).GetComponent<MapMarkerGenericRadius>();
                vendingMarker = GameManager.server.CreateEntity("assets/prefabs/deployable/vendingmachine/vending_mapmarker.prefab", transform.position).GetComponent<VendingMachineMapMarker>();
                mapMarker.radius = plugin.config.marker.markerRadius;
                mapMarker.color1 = ConvertToColor(color);
                var c = ConvertToColor(color);
                mapMarker.alpha = plugin.config.marker.markerAlpha;
                mapMarker.enabled = true;
                mapMarker.OwnerID = 0;
                mapMarker.Spawn();
                mapMarker.SendUpdate();
                vendingMarker.markerShopName = ownerName;
                vendingMarker.OwnerID = 0;
                vendingMarker.Spawn();
                vendingMarker.enabled = false;
            }
            private Color ConvertToColor(string color) {
                if (color.StartsWith("#")) color = color.Substring(1);
                int red = int.Parse(color.Substring(0, 2), NumberStyles.AllowHexSpecifier);
                int green = int.Parse(color.Substring(2, 2), NumberStyles.AllowHexSpecifier);
                int blue = int.Parse(color.Substring(4, 2), NumberStyles.AllowHexSpecifier);
                return new Color((float)red / 255, (float)green / 255, (float)blue / 255);
            }
        }
#endregion
#region [Command]
        [ChatCommand("getCup")]
        private void cmd_GetCup(BasePlayer player, string c, string[] args) {
            if (!player.IsAdmin) return;
            if(args.Length < 1) {
                player.ChatMessage("/getCup НазваниеШкафа");
                return;
            }
            var item = ItemManager.CreateByName("cupboard.tool", 1, config.settings.skinID);
            item.name = args[0];
            player.GiveItem(item);
            player.ChatMessage($"Вам выдан шкаф {args[0]}");
        }
        [ChatCommand("remCup")]
        private void cmd_remCup(BasePlayer player, string c, string[] args) {
            if (!player.IsAdmin) return;
            if (args.Length < 1) {
                player.ChatMessage("/remCup НазваниеШкафа");
                return;
            }
            foreach(var cup in Cups) {
                var comp = cup.gameObject.GetComponent<CupManager>();
                if (comp == null) continue;
                if (comp.cupName.Contains(args[0])) {
                    Cups.Remove(cup);
                    UnityEngine.Object.Destroy(comp);
                    cup.Kill();
                    SaveCups();
                    player.ChatMessage($"Шкаф удален");
                    return;
                }
            }
            player.ChatMessage($"Шкаф {args[0]} не найден");
        }
        [ChatCommand("radCup")]
        private void cmd_radCup(BasePlayer player, string c, string[] args) {
            if (!player.IsAdmin) return;
            if (args.Length < 1) {
                player.ChatMessage("/radCup НазваниеШкафа");
                return;
            }
            foreach (var cup in Cups) {
                var comp = cup.gameObject.GetComponent<CupManager>();
                if (comp == null) continue;
                if (comp.cupName.Contains(args[0])) {
                    player.SendConsoleCommand("ddraw.box", 20f, Color.red, cup.transform.position, config.settings.rewardRadius);
                    return;
                }
            }
            player.ChatMessage($"Шкаф {args[0]} не найден");
        }
        [ChatCommand("cap")]
        private void cmd_ShowCups(BasePlayer player, string c, string[] a) => CreateCaptureMenu(player);
#endregion
#region [UI]
        private void CreateCaptureTable(BasePlayer player, CupManager comp) {
            CuiElementContainer container = new CuiElementContainer();
            container.Add(new CuiElement {
                Parent = "Overlay", Name = "CaptTableMain", Components = {
                    new CuiImageComponent {
                        Color = "0 0 0 0"
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0.7554688 0.5097222", AnchorMax = "0.9906251 0.6486111"
                    }
                }
            }
            );
            CreateImage(ref container, "button_close_right", "CaptTableMain", "1 1 1 1", "button_close_right", "0.8704316 0", "1 1");
            UI.CreateButton(ref container, "button_close_right", "0 0 0 0", "", 0, "0 0", "1 1", "UI_CLOSE_TABLE");
            if (!CloseUI.Contains(player.userID)) {
                UI.CreatePanel(ref container, "CaptTablePanel", "CaptTableMain", $"0.81 0.00 0.00 0.35", "0.15 0.1", "0.89 0.9");
                var time = TimeSpan.FromSeconds(config.settings.captSeconds - comp.capt);
                UI.CreateTextOutLine(ref container, "CaptTablePanel", String.Format(GetMsg("UI_rightPanelText", player), time.Minutes, time.Seconds, comp.cupName), "1 1 1 0.6", $"0 0", $"1 1", TextAnchor.MiddleCenter, 18);
            }
            CuiHelper.DestroyUi(player, "CaptTableMain");
            CuiHelper.AddUi(player, container);
        }
        private void CreateCaptureMenu(BasePlayer player) {
            CuiElementContainer container = new CuiElementContainer();
            container.Add(new CuiElement {
                Parent = "Overlay", Name = "CaptMenuMain", Components = {
                    new CuiImageComponent {
                        Color = "0 0 0 0.8", Material = "assets/content/ui/uibackgroundblur-ingamemenu.mat"
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0 0", AnchorMax = "1 1"
                    }
                    , new CuiNeedsCursorComponent()
                }
            }
            );
            UI.CreateButton(ref container, "CaptMenuMain", "0 0 0 0", "", 0, "0 0", "1 1", "UI_CLOSE_MENU");
            UI.CreatePanel(ref container, "CaptMenuPanel", "CaptMenuMain", $"0.81 0.00 0.00 0.35", "0.1984375 0.2819445", "0.7429687 0.8222222");
            UI.CreateTextOutLine(ref container, "CaptMenuPanel", GetMsg("UI_Header", player), "1 1 1 1", "0.009821426 0.9006174", "0.9900553 0.9900553", TextAnchor.MiddleCenter, 28);
            int i = 0;
            foreach(var cup in Cups) {
                var comp = cup.GetComponent<CupManager>();
                if (comp == null) continue;
                UI.CreatePanel(ref container, "CaptCup" + i, "CaptMenuPanel", $"0.35 0.35 1.00 0.65", $"{0.02569436 + (i * 0.25) } 0.1028278", $"{0.2196413 + (i * 0.25)} 0.8971471");
                UI.CreateTextOutLine(ref container, "CaptCup" + i, String.Format(GetMsg("UI_Name", player), comp.cupName), "1 1 1 1", "0 0.7281784", "1 1", TextAnchor.UpperCenter, 20);
                if (comp.ownerName != "-") {
                    UI.CreateTextOutLine(ref container, "CaptCup" + i, String.Format(GetMsg("UI_Capt", player), comp.ownerName), "1 1 1 1", "0 0.4545436", "1 0.7087604", TextAnchor.MiddleCenter, 20);
                }
                else {
                    UI.CreateTextOutLine(ref container, "CaptCup" + i, GetMsg("UI_Free", player), "1 1 1 1", "0 0.4545436", "1 0.7087604", TextAnchor.MiddleCenter, 20);
                }
                if (Facepunch.Math.Epoch.Current - comp.lastCapture < config.settings.captDelay) {
                    var time = TimeSpan.FromSeconds(comp.lastCapture + plugin.config.settings.captDelay - Facepunch.Math.Epoch.Current);
                    UI.CreateTextOutLine(ref container, "CaptCup" + i, String.Format(GetMsg("UI_NextCapt", player), time.Hours, time.Minutes), "1 1 1 1", "0 0", "1 0.4559983", TextAnchor.LowerCenter, 18);
                }
                else {
                    UI.CreateTextOutLine(ref container, "CaptCup" + i, GetMsg("UI_CanCapt", player), "1 1 1 1", "0 0", "1 0.4059983", TextAnchor.LowerCenter, 18);
                }
                i++;
            }
            UI.CreateTextOutLine(ref container, "CaptMenuPanel", String.Format(GetMsg("UI_Footer", player), config.settings.gatherPrecent), "1 1 1 1", "0.04017222 0.01285341", "0.9784793 0.1131105", TextAnchor.LowerCenter, 18);
            CreateImage(ref container, "button_close", "CaptMenuPanel", "1 1 1 1", "button_close", "0.9350427 0.9169025", "0.9982907 0.998088");
            UI.CreateButton(ref container, "button_close", "0 0 0 0", "", 0, "0 0", "1 1", "UI_CLOSE_MENU");
            CuiHelper.DestroyUi(player, "CaptMenuMain");
            CuiHelper.AddUi(player, container);
        }
        [ConsoleCommand("UI_CLOSE_TABLE")]
        private void cmd_UI_CLOSE_TABLE(ConsoleSystem.Arg arg) {
            BasePlayer player = arg.Player();
            if (player == null) return;
            if(CloseUI.Contains(player.userID)) {
                CloseUI.Remove(player.userID);
            }
            else {
                CloseUI.Add(player.userID);
                CuiHelper.DestroyUi(player, "CaptTablePanel");
            }
        }
        [ConsoleCommand("UI_CLOSE_MENU")]
        private void cmd_UI_CLOSE_MENU(ConsoleSystem.Arg arg) {
            BasePlayer player = arg.Player();
            if (player == null) return;
            CuiHelper.DestroyUi(player, "CaptMenuMain");
        }
#region [UI generator]
        public class UI {
            public static void CreateOutLines(ref CuiElementContainer container, string parent, string color) {
                CreatePanel(ref container, "Line", parent, color, "0 0", "0.001 1");
                CreatePanel(ref container, "Line", parent, color, "0 0", "1 0.001");
                CreatePanel(ref container, "Line", parent, color, "0.999 0", "1 1");
                CreatePanel(ref container, "Line", parent, color, "0 0.999", "1 1");
            }
            public static void CreateButton(ref CuiElementContainer container, string panel, string color, string text, int size, string aMin, string aMax, string command, TextAnchor align = TextAnchor.MiddleCenter, string name = "button", float FadeIn = 0f) {
                container.Add(new CuiButton {
                    Button = {
                        Color = color, Command = command, FadeIn = FadeIn
                    }
                    , RectTransform = {
                        AnchorMin = aMin, AnchorMax = aMax
                    }
                    , Text = {
                        Text = text, FontSize = size, Align = align
                    }
                }
                , panel, name);
            }
            public static void CreatePanel(ref CuiElementContainer container, string name, string parent, string color, string aMin, string aMax, float Fadeout = 0f, float Fadein = 0f) {
                container.Add(new CuiElement {
                    Name = name, Parent = parent, Components = {
                        new CuiImageComponent {
                            Color = color, FadeIn = Fadein
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = aMin, AnchorMax = aMax
                        }
                    }
                    , FadeOut = Fadeout
                }
                );
            }
            public static void CreatePanelBlur(ref CuiElementContainer container, string name, string parent, string color, string aMin, string aMax, float Fadeout = 0f, float Fadein = 0f) {
                container.Add(new CuiPanel() {
                    CursorEnabled = true, RectTransform = {
                        AnchorMin = aMin, AnchorMax = aMax
                    }
                    , Image = {
                        Color = color, Material = "assets/content/ui/uibackgroundblur-ingamemenu.mat", FadeIn = Fadein
                    }
                    , FadeOut = Fadeout
                }
                , parent, name);
            }
            public static void CreateText(ref CuiElementContainer container, string parent, string text, string color, string aMin, string aMax, TextAnchor align = TextAnchor.MiddleLeft, int size = 14, string name = "name", float Fadein = 0f) {
                container.Add(new CuiElement {
                    Parent = parent, Name = name, Components = {
                        new CuiTextComponent() {
                            Color = color, Text = text, FontSize = size, Align = align, FadeIn = Fadein
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = aMin , AnchorMax = aMax
                        }
                    }
                }
                );
            }
            public static void CreateTextOutLine(ref CuiElementContainer container, string parent, string text, string color, string aMin, string aMax, TextAnchor align = TextAnchor.MiddleLeft, int size = 14, string name = "name", float Fadein = 0f) {
                container.Add(new CuiElement {
                    Parent = parent, Name = name, Components = {
                        new CuiTextComponent() {
                            Color = color, Text = text, FontSize = size, Align = align, FadeIn = Fadein
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = aMin , AnchorMax = aMax
                        }
                        , new CuiOutlineComponent {
                            Color = "0 0 0 1"
                        }
                    }
                }
                );
            }
        }
        public void CreateImage(ref CuiElementContainer container, string name, string panel, string color, string image, string aMin, string aMax, float Fadeout = 0f, float Fadein = 0f, ulong skin = 0) {
            container.Add(new CuiElement {
                Name = name, Parent = panel, Components = {
                    new CuiRawImageComponent {
                        Color = color, Png = (string)ImageLibrary.Call("GetImage", image, skin), FadeIn = Fadein
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = aMin, AnchorMax = aMax
                    }
                    ,
                }
                , FadeOut = Fadeout
            }
            );
        }
#endregion
#endregion
    }
}

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

Другие ресурсы пользователя 15FPS

Сверху