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

FREE PvXselector : 0.9.6 0.9.6

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using Oxide.Core;
using Oxide.Core.Libraries;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using Rust;
using System;                      //DateTime
using System.Collections.Generic;  //Required for Whilelist
using Oxide.Core.Libraries.Covalence; //Requrired for IPlayer stuff
//using System.Data;
//using System.Globalization;
using System.Linq;
//using System.Reflection;
using UnityEngine;
//using System.Collections;
//using ConVar;
//using Facepunch;
//using Network;
//using ProtoBuf;
//using System.Runtime.CompilerServices;
//using System.Text.RegularExpressions;
//using Oxide.Plugins;
using Oxide.Core.Configuration;
//using Oxide.Core.CSharp;
//using Rust.Registry;
//using RustNative;
using Oxide.Core.Database;
namespace Oxide.Plugins
{
    [Info("PvXSelector", "Alphawar", "0.9.6", ResourceId = 1817)]
    [Description("Player vs X Selector: Beta version 21/02/2017")]
    class PvXselector : RustPlugin
    {
        #region Data/PlayerJoin/ServerInit
        //Loaded goes first
        public static PvXselector instance;


        public static class Cooldowns
        {
            public static List<ulong> enemyOpModeWarning = new List<ulong>();
            public static List<ulong> menuGui = new List<ulong>();
        }


        void Loaded()
        {
            ModeSwitch.Ticket.Data.Initiate();
            ModeSwitch.Cooldown.Data.Initiate();
            Players.Data.Initiate();
            Containers.Data.Initiate();
            lang.RegisterMessages(Lang.List, this);
            PermissionHandle();
            LoadVariables();
            instance = this;
        }
        void OnServerInitialized()
        {
            LoadData();
            CheckPlayersRegistered();
            foreach (BasePlayer Player in BasePlayer.activePlayerList)
            {
                if (!Players.State.IsNPC(Player))
                {
                    GUI.Create.PlayerIndicator(Player);
                    ModeSwitch.Cooldown.Check(Player.userID);
                    if (HasPerm(Player, "admin"))
                    {
                        Players.Admins.AddPlayer(Player.userID);
                        GUI.Create.AdminIndicator(Player);
                    }
                    if (Players.State.IsNA(Player)) Timers.PvxChatNotification(Player);
                    UpdatePlayerChatTag(Player);
                }
            }
            foreach (ulong _key in Players.Data.playerData.Info.Keys)
            {
                if (Players.Data.playerData.Info[_key].FirstConnection == null) Players.Data.playerData.Info[_key].FirstConnection = DateTimeStamp();
                if (Players.Data.playerData.Info[_key].LatestConnection == null) Players.Data.playerData.Info[_key].LatestConnection = DateTimeStamp();
                if (Players.Data.playerData.Info[_key].FirstConnection == "null") Players.Data.playerData.Info[_key].FirstConnection = DateTimeStamp();
                if (Players.Data.playerData.Info[_key].LatestConnection == "null") Players.Data.playerData.Info[_key].LatestConnection = DateTimeStamp();
            }
            Timers.CooldownTickets();
        }

        void Unloaded()
        {
            foreach (var Player in BasePlayer.activePlayerList)
            {
                DestroyAllPvXUI(Player);
            }
            SaveData.All();
        }

        class SaveData
        {
            public static void All()
            {
                ModeSwitch.Cooldown.Data.Save();
                ModeSwitch.Ticket.Data.Save();
                Players.Data.Save();
                Containers.Data.Save();
            }
            public static void TicketData()
            {
                ModeSwitch.Ticket.Data.Save();
            }
            public static void ModeSwitchData()
            {
                ModeSwitch.Cooldown.Data.Save();
            }
            public static void SharedContainer()
            {
                Containers.Data.Save();
            }
        }

        void LoadData()
        {
            ModeSwitch.Ticket.Data.Load();
            ModeSwitch.Cooldown.Data.Load();
            Players.Data.Load();
            Containers.Data.Load();
        }
        void OnPlayerInit(BasePlayer Player)
        {
            if (Player == null) return;
            else if (Player.HasPlayerFlag(BasePlayer.PlayerFlags.ReceivingSnapshot))
            {
                timer.Once(3f, () =>
                {
                    OnPlayerInit(Player);
                });
                return;
            }
            else PlayerLoaded(Player);
        }
        void PlayerLoaded(BasePlayer Player)
        {
            if (Players.State.IsNPC(Player)) return;
            if (Players.IsNew(Player.userID))
                Players.Add(Player);
            ModeSwitch.Cooldown.Check(Player.userID);
            GUI.Create.PlayerIndicator(Player);
            if (IsAdmin(Player))
            {
                Players.Admins.AddPlayer(Player.userID);
                GUI.Create.AdminIndicator(Player);
            }
            if (Players.Data.playerData.UnknownUsers.Contains(Player.userID))
            {
                UpdatePvXPlayerData(Player);
                Players.Data.playerData.UnknownUsers.Remove(Player.userID);
            }
            if (Players.Data.playerData.Sleepers.Contains(Player.userID))
            {
                UpdatePvXPlayerData(Player);
                Players.Data.playerData.Sleepers.Remove(Player.userID);
            }
            Players.Data.playerData.Info[Player.userID].LatestConnection = DateTimeStamp();
            UpdatePlayerChatTag(Player);
            SaveData.All();
            GUI.Create.PlayerIndicator(Player);
            if (Players.Data.playerData.Info[Player.userID].mode != Mode.NA) return;
            else if (ModeSwitch.Ticket.Data.ticketData.Notification.ContainsKey(Player.userID)) Messages.Chat(Players.Find.Iplayer(Player.userID), "TickClosLogin", ModeSwitch.Ticket.Data.ticketData.Notification[Player.userID]);
            else if (Players.Data.playerData.Info[Player.userID].mode == Mode.NA) Timers.PvxChatNotification(Player);
        }
        void OnPlayerDisconnected(BasePlayer Player)
        {
            if (IsAdmin(Player))
            {
                Players.Admins.RemovePlayer(Player.userID);
            }
            if (Players.Admins.Mode.ContainsPlayer(Player.userID))
            {
                Players.Admins.RemovePlayer(Player.userID);
            }
        }
        void OnPlayerRespawned(BasePlayer Player)
        {
        }

        void CheckPlayersRegistered()
        {
            foreach (BasePlayer Player in BasePlayer.activePlayerList)
                if (!(Players.Data.playerData.Info.ContainsKey(Player.userID)))
                    Players.Add(Player);

            foreach (BasePlayer Player in BasePlayer.sleepingPlayerList)
                if (!(Players.Data.playerData.Info.ContainsKey(Player.userID)))
                    Players.AddSleeper(Player);
        }


        static string pvxIndicator = "PvXPlayerStateIndicator";
        static string pvxMenuBack = "PvXMenu_Main_Background";
        static string pvxMenuBanner = "PvXMenu_Main_Banner";
        static string pvxMenuBannerTitle = "PvXMenu_Main_Banner_Title";
        static string pvxMenuBannerVersion = "PvXMenu_Main_Banner_Version";
        static string pvxMenuBannerModType = "PvXMenu_Main_Banner_ModType";
        static string pvxMenuSide = "PvXMenu_Main_Side";
        static string pvxMenuMain = "PvXMenu_Main";


        static string pvxIndicatorGui = "createPvXModeSelector";
        static string pvxPlayerUI = "pvxPlayerModeUI";
        static string pvxAdminUI = "pvxAdminTicketCountUI";
        static string UIMain = "PvXUI_Main";
        static string UIPanel = "PvXUI_Panel";
        static string[] GuiList = new string[] { pvxIndicatorGui,
            pvxPlayerUI, pvxAdminUI,
            UIMain, UIPanel, pvxMenuBanner,
            pvxIndicator, pvxMenuBack , pvxMenuMain,
            pvxMenuBannerTitle, pvxMenuBannerVersion,
            pvxMenuBannerModType
        };

        #endregion

        #region Config/Permision/Plugin Ref
        //None Adjustable
        private string PvXModtype = "Developer Edition";//Regular Oxide Donator Patreon Developer
        private bool DebugMode;
        //Core
        private bool TicketSystem;
        private bool CooldownSystem;
        private int CooldownTime;
        private float playerIndicatorMinWid;
        private float playerIndicatorMinHei;
        private float adminIndicatorMinWid;
        private float adminIndicatorMinHei;
        //Players
        private bool PvEAttackPvE;
        private bool PvEAttackPvP;
        private bool PvPAttackPvE;
        private bool PvPAttackPvP;
        private bool PvELootPvE;
        private bool PvELootPvP;
        private bool PvPLootPvE;
        private bool PvPLootPvP;
        private bool PvEUsePvPDoor;
        private bool PvPUsePvEDoor;
        private float PvEDamagePvE;
        private float PvEDamagePvP;
        private float PvPDamagePvE;
        private float PvPDamagePvP;
        private float PvEDamagePvEStruct;
        private float PvEDamagePvPStruct;
        private float PvPDamagePvEStruct;
        private float PvPDamagePvPStruct;
        //Metabolism
        private float PvEFoodLossRate;
        private float PvEWaterLossRate;
        private float PvEHealthGainRate;
        private float PvEFoodSpawn;
        private float PvEWaterSpawn;
        private float PvEHealthSpawn;
        private float PvPFoodLossRate;
        private float PvPWaterLossRate;
        private float PvPHealthGainRate;
        private float PvPFoodSpawn;
        private float PvPWaterSpawn;
        private float PvPHealthSpawn;
        //NPC
        private bool NPCAttackPvE;
        private bool NPCAttackPvP;
        private bool PvEAttackNPC;
        private bool PvPAttackNPC;
        private float NPCDamagePvE;
        private float NPCDamagePvP;
        private float PvEDamageNPC;
        private float PvPDamageNPC;
        private bool PvELootNPC;
        private bool PvPLootNPC;
        //Animal
        private float PvEDamageAnimals;
        private float PvPDamageAnimals;
        private float NPCDamageAnimals;
        private float AnimalsDamagePvE;
        private float AnimalsDamagePvP;
        private float AnimalsDamageNPC;
        //Turret
        private bool TurretPvETargetPvE;
        private bool TurretPvETargetPvP;
        private bool TurretPvPTargetPvE;
        private bool TurretPvPTargetPvP;
        private bool TurretPvETargetNPC;
        private bool TurretPvPTargetNPC;
        private bool TurretPvETargetAnimal;
        private bool TurretPvPTargetAnimal;
        private float TurretPvEDamagePvEAmnt;
        private float TurretPvEDamagePvPAmnt;
        private float TurretPvPDamagePvEAmnt;
        private float TurretPvPDamagePvPAmnt;
        private float TurretPvEDamageNPCAmnt;
        private float TurretPvPDamageNPCAmnt;
        private float TurretPvEDamageAnimalAmnt;
        private float TurretPvPDamageAnimalAmnt;
        //Helicopter
        private bool HeliTargetPvE;
        private bool HeliTargetPvP;
        private bool HeliTargetNPC;
        private float HeliDamagePvE;
        private float HeliDamagePvP;
        private float HeliDamageNPC;
        private float HeliDamagePvEStruct;
        private float HeliDamagePvPStruct;
        private float HeliDamageAnimal;
        private float HeliDamageByPvE;
        private float HeliDamageByPvP;
        //Fire
        private float FireDamagePvE;
        private float FireDamagePvP;
        private float FireDamageNPC;
        private float FireDamagePvEStruc;
        private float FireDamagePvPStruc;
        //Others
        public static bool DisableUI_FadeIn;
        private string ChatPrefixColor;
        private string ChatPrefix;
        private string ChatMessageColor;
        private string PvXNAColour;
        private string PvXPvEColour;
        private string PvXPvPColour;
        /*
         *
         * END Of Config
         *  
        */

        protected override void LoadDefaultConfig()
        {
            Puts("Creating a new configuration file!");
            Config.Clear();
            LoadVariables();
        }
        void LoadVariables() //Stores Default Values, calling GetConfig passing: menu, dataValue, defaultValue
        {
            //Core
            TicketSystem = Convert.ToBoolean(GetConfig(ConfigLists.Core, "01: Ticket System", true));
            CooldownSystem = Convert.ToBoolean(GetConfig(ConfigLists.Core, "02: Cooldown System", true));
            CooldownTime = Convert.ToInt32(GetConfig(ConfigLists.Core, "03: Cooldown Time (Seconds)", 3600));
            playerIndicatorMinWid = Convert.ToSingle(GetConfig(ConfigLists.Core, "04: player Gui width anchor", 0.484));
            playerIndicatorMinHei = Convert.ToSingle(GetConfig(ConfigLists.Core, "05: player Gui height anchor", 0.111));
            adminIndicatorMinHei = Convert.ToSingle(GetConfig(ConfigLists.Core, "06: admin Gui height anchor", 0.055));
            adminIndicatorMinWid = Convert.ToSingle(GetConfig(ConfigLists.Core, "07: admin Gui width anchor", 0.166));

            //Players
            PvEAttackPvE = Convert.ToBoolean(GetConfig(ConfigLists.Player, "01: PvE v PvE", false));
            PvEAttackPvP = Convert.ToBoolean(GetConfig(ConfigLists.Player, "02: PvE v PvP", false));
            PvPAttackPvE = Convert.ToBoolean(GetConfig(ConfigLists.Player, "03: PvP v PvE", false));
            PvPAttackPvP = Convert.ToBoolean(GetConfig(ConfigLists.Player, "04: PvP v PvP", true));
            PvELootPvE = Convert.ToBoolean(GetConfig(ConfigLists.Player, "05: PvE Loot PvE", true));
            PvELootPvP = Convert.ToBoolean(GetConfig(ConfigLists.Player, "06: PvE Loot PvP", false));
            PvPLootPvE = Convert.ToBoolean(GetConfig(ConfigLists.Player, "07: PvP Loot PvE", false));
            PvPLootPvP = Convert.ToBoolean(GetConfig(ConfigLists.Player, "08: PvP Loot PvP", true));
            PvEUsePvPDoor = Convert.ToBoolean(GetConfig(ConfigLists.Player, "09: PvE Use PvPDoor", false));
            PvPUsePvEDoor = Convert.ToBoolean(GetConfig(ConfigLists.Player, "10: PvP Use PvEDoor", false));
            PvEDamagePvE = Convert.ToSingle(GetConfig(ConfigLists.Player, "11: PvE Damage PvE", 0.0));
            PvEDamagePvP = Convert.ToSingle(GetConfig(ConfigLists.Player, "12: PvE Damage PvP", 0.0));
            PvPDamagePvE = Convert.ToSingle(GetConfig(ConfigLists.Player, "13: PvP Damage PvE", 0.0));
            PvPDamagePvP = Convert.ToSingle(GetConfig(ConfigLists.Player, "14: PvP Damage PvP", 1.0));
            PvEDamagePvEStruct = Convert.ToSingle(GetConfig(ConfigLists.Player, "18: PvEDamagePvEStruct", 0.0));
            PvEDamagePvPStruct = Convert.ToSingle(GetConfig(ConfigLists.Player, "18: PvEDamagePvPStruct", 0.0));
            PvPDamagePvEStruct = Convert.ToSingle(GetConfig(ConfigLists.Player, "18: PvPDamagePvEStruct", 0.0));
            PvPDamagePvPStruct = Convert.ToSingle(GetConfig(ConfigLists.Player, "18: PvPDamagePvPStruct", 1.0));
            //Metabolism
            PvEFoodLossRate = Convert.ToSingle(GetConfig(ConfigLists.Metabolism, "01: PvEFoodLossRate", 0.03));
            PvEWaterLossRate = Convert.ToSingle(GetConfig(ConfigLists.Metabolism, "02: PvEWaterLossRate", 0.03));
            PvEHealthGainRate = Convert.ToSingle(GetConfig(ConfigLists.Metabolism, "03: PvEHealthGainRate", 0.03));
            PvEFoodSpawn = Convert.ToSingle(GetConfig(ConfigLists.Metabolism, "04: PvEFoodSpawn", 100.0));
            PvEWaterSpawn = Convert.ToSingle(GetConfig(ConfigLists.Metabolism, "05: PvEWaterSpawn", 250.00));
            PvEHealthSpawn = Convert.ToSingle(GetConfig(ConfigLists.Metabolism, "06: PvEHealthSpawn", 500.00));
            PvPFoodLossRate = Convert.ToSingle(GetConfig(ConfigLists.Metabolism, "07: PvPFoodLossRate", 0.03));
            PvPWaterLossRate = Convert.ToSingle(GetConfig(ConfigLists.Metabolism, "08: PvPWaterLossRate", 0.03));
            PvPHealthGainRate = Convert.ToSingle(GetConfig(ConfigLists.Metabolism, "09: PvPHealthGainRate", 0.03));
            PvPFoodSpawn = Convert.ToSingle(GetConfig(ConfigLists.Metabolism, "10: PvPFoodSpawn", 100.0));
            PvPWaterSpawn = Convert.ToSingle(GetConfig(ConfigLists.Metabolism, "11: PvPWaterSpawn", 250.0));
            PvPHealthSpawn = Convert.ToSingle(GetConfig(ConfigLists.Metabolism, "12: PvPHealthSpawn", 500.0));
            //NPC
            NPCAttackPvE = Convert.ToBoolean(GetConfig(ConfigLists.NPC, "01: NPC Attack PvE", true));
            NPCAttackPvP = Convert.ToBoolean(GetConfig(ConfigLists.NPC, "02: NPC Attack PvP", true));
            PvEAttackNPC = Convert.ToBoolean(GetConfig(ConfigLists.NPC, "03: PvE Attack NPC", true));
            PvPAttackNPC = Convert.ToBoolean(GetConfig(ConfigLists.NPC, "04: PvP Attack NPC", true));
            NPCDamagePvE = Convert.ToSingle(GetConfig(ConfigLists.NPC, "05: NPC Damage PvE", 1.0));
            NPCDamagePvP = Convert.ToSingle(GetConfig(ConfigLists.NPC, "06: NPC Damage PvP", 1.0));
            PvEDamageNPC = Convert.ToSingle(GetConfig(ConfigLists.NPC, "07: PvE Damage NPC", 1.0));
            PvPDamageNPC = Convert.ToSingle(GetConfig(ConfigLists.NPC, "08: PvP Damage NPC", 1.0));
            PvELootNPC = Convert.ToBoolean(GetConfig(ConfigLists.NPC, "09: PvE Loot NPC", true));
            PvPLootNPC = Convert.ToBoolean(GetConfig(ConfigLists.NPC, "10: PvP Loot NPC", true));
            //Animal
            PvEDamageAnimals = Convert.ToSingle(GetConfig(ConfigLists.Animals, "1: PvE Damage Animals", 1.0f));
            PvPDamageAnimals = Convert.ToSingle(GetConfig(ConfigLists.Animals, "2: PvP Damage Animals", 1.0f));
            NPCDamageAnimals = Convert.ToSingle(GetConfig(ConfigLists.Animals, "3: NPC Damage Animals", 1.0f));
            AnimalsDamagePvE = Convert.ToSingle(GetConfig(ConfigLists.Animals, "4: Animals Damage PvE", 1.0f));
            AnimalsDamagePvP = Convert.ToSingle(GetConfig(ConfigLists.Animals, "5: Animals Damage PvP", 1.0f));
            AnimalsDamageNPC = Convert.ToSingle(GetConfig(ConfigLists.Animals, "6: Animals Damage NPC", 1.0f));
            //Turret
            TurretPvETargetPvE = Convert.ToBoolean(GetConfig(ConfigLists.Turret, "01: TurretPvETargetPvE", true));
            TurretPvETargetPvP = Convert.ToBoolean(GetConfig(ConfigLists.Turret, "02: TurretPvETargetPvP", false));
            TurretPvPTargetPvE = Convert.ToBoolean(GetConfig(ConfigLists.Turret, "03: TurretPvPTargetPvE", false));
            TurretPvPTargetPvP = Convert.ToBoolean(GetConfig(ConfigLists.Turret, "04: TurretPvPTargetPvP", true));
            TurretPvETargetNPC = Convert.ToBoolean(GetConfig(ConfigLists.Turret, "05: TurretPvETargetNPC", true));
            TurretPvPTargetNPC = Convert.ToBoolean(GetConfig(ConfigLists.Turret, "06: TurretPvPTargetNPC", true));
            TurretPvETargetAnimal = Convert.ToBoolean(GetConfig(ConfigLists.Turret, "07: TurretPvETargetAnimal", true));
            TurretPvPTargetAnimal = Convert.ToBoolean(GetConfig(ConfigLists.Turret, "08: TurretPvPTargetAnimal", true));
            TurretPvEDamagePvEAmnt = Convert.ToSingle(GetConfig(ConfigLists.Turret, "09: TurretPvEDamagePvEAmnt", 1.0f));
            TurretPvEDamagePvPAmnt = Convert.ToSingle(GetConfig(ConfigLists.Turret, "10: TurretPvEDamagePvPAmnt", 0.0f));
            TurretPvPDamagePvEAmnt = Convert.ToSingle(GetConfig(ConfigLists.Turret, "11: TurretPvPDamagePvEAmnt", 0.0f));
            TurretPvPDamagePvPAmnt = Convert.ToSingle(GetConfig(ConfigLists.Turret, "12: TurretPvPDamagePvPAmnt", 1.0f));
            TurretPvEDamageNPCAmnt = Convert.ToSingle(GetConfig(ConfigLists.Turret, "13: TurretPvEDamageNPCAmnt", 1.0f));
            TurretPvPDamageNPCAmnt = Convert.ToSingle(GetConfig(ConfigLists.Turret, "14: TurretPvPDamageNPCAmnt", 1.0f));
            TurretPvEDamageAnimalAmnt = Convert.ToSingle(GetConfig(ConfigLists.Turret, "15: TurretPvEDamageAnimal", 1.0f));
            TurretPvPDamageAnimalAmnt = Convert.ToSingle(GetConfig(ConfigLists.Turret, "16: TurretPvPDamageAnimal", 1.0f));
            //Helicopter
            HeliTargetPvE = Convert.ToBoolean(GetConfig(ConfigLists.Heli, "01: HeliTargetPvE", false));
            HeliTargetPvP = Convert.ToBoolean(GetConfig(ConfigLists.Heli, "02: HeliTargetPvP", true));
            HeliTargetNPC = Convert.ToBoolean(GetConfig(ConfigLists.Heli, "03: HeliTargetNPC", false));
            HeliDamagePvE = Convert.ToSingle(GetConfig(ConfigLists.Heli, "04: HeliDamagePvE", 0.0));
            HeliDamagePvP = Convert.ToSingle(GetConfig(ConfigLists.Heli, "05: HeliDamagePvP", 1.0));
            HeliDamageNPC = Convert.ToSingle(GetConfig(ConfigLists.Heli, "06: HeliDamageNPC", 0.0));
            HeliDamagePvEStruct = Convert.ToSingle(GetConfig(ConfigLists.Heli, "07: HeliDamagePvEStruct", 0.0));
            HeliDamagePvPStruct = Convert.ToSingle(GetConfig(ConfigLists.Heli, "08: HeliDamagePvPStruct", 1.0));
            HeliDamageAnimal = Convert.ToSingle(GetConfig(ConfigLists.Heli, "09: HeliDamageAnimal", 1.0));
            HeliDamageByPvE = Convert.ToSingle(GetConfig(ConfigLists.Heli, "10: HeliDamageByPvE", 0.0));
            HeliDamageByPvP = Convert.ToSingle(GetConfig(ConfigLists.Heli, "11: HeliDamageByPvp", 1.0));
            //fire
            FireDamagePvE = Convert.ToSingle(GetConfig(ConfigLists.Fire, "1: FireDamagePvE", 0.1));
            FireDamagePvP = Convert.ToSingle(GetConfig(ConfigLists.Fire, "2: FireDamagePvP", 1.0));
            FireDamageNPC = Convert.ToSingle(GetConfig(ConfigLists.Fire, "3: FireDamageNPC", 1.0));
            FireDamagePvEStruc = Convert.ToSingle(GetConfig(ConfigLists.Fire, "4: FireDamagePvEStruc", 0.0));
            FireDamagePvPStruc = Convert.ToSingle(GetConfig(ConfigLists.Fire, "5: FireDamagePvPStruc", 1.0));
            //others
            DisableUI_FadeIn = Convert.ToBoolean(GetConfig(ConfigLists.Settings, "01: DisableUI Fadein", false));
            DebugMode = Convert.ToBoolean(GetConfig(ConfigLists.Settings, "02: DebugMode", false));
            ChatPrefix = Convert.ToString(GetConfig(ConfigLists.Core, "03: ChatPrefix", "PvX"));
            ChatPrefixColor = Convert.ToString(GetConfig(ConfigLists.Settings, "04: ChatPrefixColor", "008800"));
            ChatMessageColor = Convert.ToString(GetConfig(ConfigLists.Settings, "05: ChatMessageColor", "yellow"));
            PvXNAColour = Convert.ToString(GetConfig(ConfigLists.Settings, "06: PvXNAColour", "#yellow"));
            PvXPvEColour = Convert.ToString(GetConfig(ConfigLists.Settings, "07: PvXPvEColour", "#green"));
            PvXPvPColour = Convert.ToString(GetConfig(ConfigLists.Settings, "08: PvXPvPColour", "#red"));
        }

        object GetConfig(string menu, string dataValue, object defaultValue)
        {
            var data = Config[menu] as Dictionary<string, object>;
            if (data == null)
            {
                data = new Dictionary<string, object>();
                Config[menu] = data;
            }
            object value;
            if (!data.TryGetValue(dataValue, out value))
            {
                value = defaultValue;
                data[dataValue] = value;
            }
            return value;
        }
        T GetConfig<T>(params object[] args)
        {
            List<string> stringArgs = (from arg in args select arg.ToString()).ToList();
            stringArgs.RemoveAt(args.Length - 1);

            if (Config.Get(stringArgs.ToArray()) == null)
            {
                Config.Set(args);
            }

            return (T)Convert.ChangeType(Config.Get(stringArgs.ToArray()), typeof(T));
        }

        private bool HasPerm(BasePlayer Player, string perm, string reason = null)
        {
            string regPerm = Title.ToLower() + "." + perm; //pvxselector.admin
            if (permission.UserHasPermission(Player.UserIDString, regPerm)) return true;
            if (reason != "null")
                SendReply(Player, reason);
            return false;
        }
        private bool IsMod(BasePlayer Player)
        {
            string regPerm = Title.ToLower() + "." + "moderator";
            if (permission.UserHasPermission(Player.UserIDString, regPerm)) return true;
            else if (IsAdmin(Player)) return true;
            else return false;
        }
        private bool IsAdmin(BasePlayer Player)
        {
            string regPerm = Title.ToLower() + "." + "admin";
            if (permission.UserHasPermission(Player.UserIDString, regPerm)) return true;
            else return false;
        }

        void PermissionHandle()
        {
            string[] Permissionarray = { "admin", "moderator", "wipe" }; //DO NOT EVER TOUCH THIS EVER!!!!!!
            foreach (string i in Permissionarray)
            {
                string regPerm = Title.ToLower() + "." + i;
                Puts("Checking if " + regPerm + " is registered.");
                if (!permission.PermissionExists(regPerm))
                {
                    permission.RegisterPermission(regPerm, this);
                    Puts(regPerm + " is registered.");
                }
                else
                {
                    Puts(regPerm + " is already registered.");
                }
            }
        }

        class ConfigLists
        {
            public static readonly ConfigLists Core = new ConfigLists("1: Core", 1, MenuItemEnum.Core);
            public static readonly ConfigLists Player = new ConfigLists("2: Player", 2, MenuItemEnum.Player);
            public static readonly ConfigLists Metabolism = new ConfigLists("3: Metabolism", 3, MenuItemEnum.Metabolism);
            public static readonly ConfigLists NPC = new ConfigLists("4: NPC", 4, MenuItemEnum.NPC);
            public static readonly ConfigLists Animals = new ConfigLists("5: Animals", 5, MenuItemEnum.Animals);
            public static readonly ConfigLists Turret = new ConfigLists("6: Turrets", 6, MenuItemEnum.Turret);
            public static readonly ConfigLists Heli = new ConfigLists("7: Heli", 7, MenuItemEnum.Heli);
            public static readonly ConfigLists Fire = new ConfigLists("8: Fire", 8, MenuItemEnum.Fire);
            public static readonly ConfigLists Settings = new ConfigLists("9: Settings", 9, MenuItemEnum.Settings);

            public string Value;
            public int Index;
            public MenuItemEnum EnumValue;

            private ConfigLists(string value, int index, MenuItemEnum enumValue)
            {
                Value = value;
                Index = index;
                EnumValue = enumValue; //possible to remove extra value
            }

            public static implicit operator string(ConfigLists configLists)
            {
                return configLists.Value;
            }
        }
        public enum MenuItemEnum //Possible to remove exta value
        {
            Core,
            Player,
            Metabolism,
            NPC,
            Animals,
            Turret,
            Heli,
            Fire,
            Settings
        }
        #endregion

        #region UI Creation
        class QUI
        {
            public static CuiElementContainer CreateElementContainer(string panelName, string color, string aMin, string aMax, bool useCursor = false, string parent = "Hud")
            {
                var NewElement = new CuiElementContainer()
                {
                    {
                        new CuiPanel
                        {
                            Image = {Color = color},
                            RectTransform = {AnchorMin = aMin, AnchorMax = aMax},
                            CursorEnabled = useCursor
                        },
                        new CuiElement().Parent = parent,
                        panelName
                    }
                };
                return NewElement;
            }
            public static void CreatePanel(ref CuiElementContainer container, string panel, string color, string aMin, string aMax, bool cursor = false)
            {
                container.Add(new CuiPanel
                {
                    Image = { Color = color },
                    RectTransform = { AnchorMin = aMin, AnchorMax = aMax },
                    CursorEnabled = cursor
                },
                panel);
            }
            public static void CreateLabel(ref CuiElementContainer container, string panel, string color, string text, int size, string aMin, string aMax, float fadein = 1.0f, TextAnchor align = TextAnchor.MiddleCenter)
            {
                if (DisableUI_FadeIn)
                    fadein = 0;
                container.Add(new CuiLabel
                {
                    Text = { Color = color, FontSize = size, Align = align, FadeIn = fadein, Text = text },
                    RectTransform = { AnchorMin = aMin, AnchorMax = aMax }
                },
                panel);

            }
            public static void CreateButton(ref CuiElementContainer container, string panel, string color, string text, int size, string aMin, string aMax, string command, float fadein = 1.0f, TextAnchor align = TextAnchor.MiddleCenter)
            {
                if (DisableUI_FadeIn)
                    fadein = 0;
                container.Add(new CuiButton
                {
                    Button = { Color = color, Command = command, FadeIn = fadein },
                    RectTransform = { AnchorMin = aMin, AnchorMax = aMax },
                    Text = { Text = text, FontSize = size, Align = align }
                },
                panel);
            }
            public static void LoadImage(ref CuiElementContainer container, string panel, string png, string aMin, string aMax)
            {
                container.Add(new CuiElement
                {
                    Parent = panel,
                    Components =
                    {
                        new CuiRawImageComponent {Png = png },
                        new CuiRectTransformComponent {AnchorMin = aMin, AnchorMax = aMax }
                    }
                });
            }
            public static void CreateTextOverlay(ref CuiElementContainer container, string panel, string text, string color, int size, string aMin, string aMax, TextAnchor align = TextAnchor.MiddleCenter, float fadein = 1.0f)
            {
                if (DisableUI_FadeIn)
                    fadein = 0;
                container.Add(new CuiLabel
                {
                    Text = { Color = color, FontSize = size, Align = align, FadeIn = fadein, Text = text },
                    RectTransform = { AnchorMin = aMin, AnchorMax = aMax }
                },
                panel);

            }
        }
        class UIColours
        {
            public static readonly UIColours Black_100 = new UIColours("0.00 0.00 0.00 1.00"); //Black
            public static readonly UIColours Black_050 = new UIColours("0.00 0.00 0.00 0.50");
            public static readonly UIColours Black_015 = new UIColours("0.00 0.00 0.00 0.15");
            public static readonly UIColours Grey2_100 = new UIColours("0.20 0.20 0.20 1.00"); //Grey 2
            public static readonly UIColours Grey2_050 = new UIColours("0.20 0.20 0.20 0.50");
            public static readonly UIColours Grey2_015 = new UIColours("0.20 0.20 0.20 0.15");
            public static readonly UIColours Grey5_100 = new UIColours("0.50 0.50 0.50 1.00"); //Grey 5
            public static readonly UIColours Grey5_050 = new UIColours("0.50 0.50 0.50 0.50");
            public static readonly UIColours Grey5_015 = new UIColours("0.50 0.50 0.50 0.15");
            public static readonly UIColours Grey8_100 = new UIColours("0.80 0.80 0.80 1.00"); //Grey 8
            public static readonly UIColours Grey8_050 = new UIColours("0.80 0.80 0.80 0.50");
            public static readonly UIColours Grey8_015 = new UIColours("0.80 0.80 0.80 0.15");
            public static readonly UIColours White_100 = new UIColours("1.00 1.00 1.00 1.00"); //White
            public static readonly UIColours White_050 = new UIColours("1.00 1.00 1.00 0.50");
            public static readonly UIColours White_015 = new UIColours("1.00 1.00 1.00 0.15");
            public static readonly UIColours Red_100 = new UIColours("0.70 0.20 0.20 1.00");   //Red
            public static readonly UIColours Red_050 = new UIColours("0.70 0.20 0.20 0.50");
            public static readonly UIColours Red_015 = new UIColours("0.70 0.20 0.20 0.15");
            public static readonly UIColours Green_100 = new UIColours("0.20 0.70 0.20 1.00");  //Green
            public static readonly UIColours Green_050 = new UIColours("0.20 0.70 0.20 0.50");
            public static readonly UIColours Green_015 = new UIColours("0.20 0.70 0.20 0.15");
            public static readonly UIColours Blue_100 = new UIColours("0.20 0.20 0.70 1.00");  //Blue
            public static readonly UIColours Blue_050 = new UIColours("0.20 0.20 0.70 0.50");
            public static readonly UIColours Blue_015 = new UIColours("0.20 0.20 0.70 0.15");
            public static readonly UIColours Yellow_100 = new UIColours("0.90 0.90 0.20 1.00");  //Yellow
            public static readonly UIColours Yellow_050 = new UIColours("0.90 0.90 0.20 0.50");
            public static readonly UIColours Yellow_015 = new UIColours("0.90 0.90 0.20 0.15");
            public static readonly UIColours Gold_100 = new UIColours("0.745 0.550 0.045 1.00"); //Gold

            public string Value;
            public int Index;

            private UIColours(string value)
            {
                Value = value;
            }

            public static implicit operator string(UIColours uiColours)
            {
                return uiColours.Value;
            }
        }

        private void DestroyAllPvXUI(BasePlayer player)
        {
            foreach (string _v in GuiList)
            {
                CuiHelper.DestroyUi(player, _v);
            }
            //DestroyEntries(player);
        }
        private void DestroyPvXUI(BasePlayer player, string _ui)
        {
            CuiHelper.DestroyUi(player, _ui);
        }
        #endregion

        #region GUIs
        class GUI
        {
            public static void CreateSignature(ref CuiElementContainer container, string panel, string color, string text, int size, float fadein = 1.0f, TextAnchor align = TextAnchor.LowerLeft)
            {
                float widthPadding = 0.017f;
                float heightPadding = 0.013f;

                float textWidth = 0.966f;
                float textHeight = 0.040f;

                float minWidth = widthPadding;
                float maxWidth = widthPadding + textWidth;
                float minHeight = heightPadding;
                float maxHeight = heightPadding + textHeight;

                QUI.CreateLabel(ref container,
                    panel,
                    color,
                    text,
                    size,
                    $"{minWidth} {minHeight}",
                    $"{maxWidth} {maxHeight}",
                    fadein,
                    align);
            }

            public static class Create
            {
                public static void AdminIndicator(BasePlayer Player)
                {
                    Vector2 dimension = new Vector2(0.174F, 0.028F);
                    Vector2 posMin = new Vector2(instance.adminIndicatorMinWid, instance.adminIndicatorMinHei);
                    Vector2 posMax = posMin + dimension;
                    var adminCountContainer = QUI.CreateElementContainer(
                        pvxAdminUI,
                        UIColours.Black_050,
                        $"{posMin.x} {posMin.y}",
                        $"{posMax.x} {posMax.y}");
                    QUI.CreateLabel(ref adminCountContainer, pvxAdminUI, UIColours.White_100, "PvX Tickets", 10, "0.0 0.1", "0.3 0.90");
                    QUI.CreateLabel(ref adminCountContainer, pvxAdminUI, UIColours.White_100, string.Format("Open: {0}", ModeSwitch.Ticket.Data.ticketData.Tickets.Count.ToString()), 10, "0.301 0.1", "0.65 0.90");
                    QUI.CreateLabel(ref adminCountContainer, pvxAdminUI, UIColours.White_100, string.Format("Closed: {0}", ModeSwitch.Ticket.Data.logData.Logs.Count.ToString()), 10, "0.651 0.1", "1 0.90");

                    CuiHelper.AddUi(Player, adminCountContainer);
                }
                public static void PlayerIndicator(BasePlayer Player)
                {
                    Vector2 dimension = new Vector2(0.031F, 0.028F);
                    Vector2 posMin = new Vector2(instance.playerIndicatorMinWid, instance.playerIndicatorMinHei);
                    Vector2 posMax = posMin + dimension;
                    var indicatorContainer = QUI.CreateElementContainer(
                        pvxIndicator,
                        UIColours.Black_050,
                        "0.48 0.11",
                        "0.52 0.14"
                        );
                    if (Players.Data.playerData.Info[Player.userID].mode == Mode.NA)
                        indicatorContainer = QUI.CreateElementContainer(
                            pvxIndicator,
                            UIColours.Red_100,
                            "0.48 0.11",
                            "0.52 0.14");
                    else if (ModeSwitch.Ticket.Data.ticketData.Tickets.ContainsKey(Player.userID))
                        indicatorContainer = QUI.CreateElementContainer(
                            pvxIndicator,
                            UIColours.Yellow_015,
                            "0.48 0.11",
                            "0.52 0.14");
                    if (Players.Admins.Mode.ContainsPlayer(Player.userID))
                    {
                        QUI.CreateLabel(
                            ref indicatorContainer,
                            pvxIndicator,
                            UIColours.Green_100,
                            Players.Data.playerData.Info[Player.userID].mode,
                            15,
                            "0.1 0.1",
                            "0.90 0.99");
                    }
                    else
                    {
                        QUI.CreateLabel(ref indicatorContainer,
                            pvxIndicator,
                            UIColours.White_100,
                            Players.Data.playerData.Info[Player.userID].mode,
                            15,
                            "0.1 0.1",
                            "0.90 0.99");
                    }
                    CuiHelper.AddUi(Player, indicatorContainer);
                }

                public static void MenuButton(ref CuiElementContainer container, string panel, string color, string text, int size, int location, string command, float fadein = 1.0f, TextAnchor align = TextAnchor.MiddleCenter)
                {
                    float widthPadding = 0.108f;
                    float heightPadding = 0.013f;

                    float buttonWidth = 0.784f;
                    float buttonHeight = 0.107f;

                    float buttonPadding = 0.027f;

                    float minWidth = widthPadding;
                    float maxWidth = widthPadding + buttonWidth;
                    float minHeight = 1.00f - (buttonHeight + heightPadding + ((buttonHeight + buttonPadding) * location));
                    float maxHeight = 1.00f - (heightPadding + ((buttonHeight + buttonPadding) * location));

                    QUI.CreateButton(ref container,
                        panel,
                        color,
                        text,
                        size,
                        $"{minWidth} {minHeight}",
                        $"{maxWidth} {maxHeight}",
                        command,
                        fadein,
                        align);
                }
                public static void MenuText(ref CuiElementContainer container, string panel, string color, string text, int size, int location, float fadein = 1.0f, TextAnchor align = TextAnchor.LowerLeft)
                {
                    float widthPadding = 0.017f;
                    float heightPadding = 0.013f;

                    float textWidth = 0.966f;
                    float textHeight = 0.040f;

                    float textPadding = 0.001f;

                    float minWidth = widthPadding;
                    float maxWidth = widthPadding + textWidth;
                    float minHeight = 1.00f - (textHeight + heightPadding + ((textHeight + textPadding) * location));
                    float maxHeight = 1.00f - (heightPadding + ((textHeight + textPadding) * location));

                    QUI.CreateLabel(ref container,
                        panel,
                        color,
                        text,
                        size,
                        $"{minWidth} {minHeight}",
                        $"{maxWidth} {maxHeight}",
                        fadein,
                        align);
                }
                public static void ContentButton(ref CuiElementContainer container, string panel, string color, string text, int size, int location, string command, float fadein = 1.0f, TextAnchor align = TextAnchor.MiddleCenter)
                {
                    float widthPadding = 0.017f;
                    float heightPadding = 0.013f;

                    float buttonWidth = 0.1724f;
                    float buttonHeight = 0.068f;

                    float buttonPadding = 0.017f;

                    float minWidth = 1f - (buttonPadding + buttonWidth + ((buttonWidth + buttonPadding) * location));
                    float maxWidth = 1f - (buttonPadding + ((buttonWidth + buttonPadding) * location));
                    float minHeight = heightPadding;
                    float maxHeight = widthPadding + buttonHeight;

                    QUI.CreateButton(ref container,
                        panel,
                        color,
                        text,
                        size,
                        $"{minWidth} {minHeight}",
                        $"{maxWidth} {maxHeight}",
                        command,
                        fadein,
                        align);
                }

                public static class Menu
                {
                    public static void Background(BasePlayer player)
                    {
                        var MainGui = QUI.CreateElementContainer(pvxMenuBack, UIColours.Black_100, "0.297 0.125", "0.703 0.958", true);
                        CuiHelper.AddUi(player, MainGui);
                    }
                    public static void Title(BasePlayer player)
                    {
                        var BannerGui = QUI.CreateElementContainer(pvxMenuBanner, UIColours.Grey2_100, "0.297 0.824", "0.703 0.958", true);

                        var BannerTitle = QUI.CreateElementContainer(pvxMenuBannerTitle, UIColours.Grey5_100, "0.302 0.833", "0.495 0.949");
                        QUI.CreateLabel(ref BannerTitle, pvxMenuBannerTitle, UIColours.Black_100, "PvX Selector", 35, "0 0", "1 1", 1);

                        var BannerVersion = QUI.CreateElementContainer(pvxMenuBannerVersion, UIColours.Grey5_100, "0.500 0.833", "0.594 0.949");
                        QUI.CreateLabel(ref BannerVersion, pvxMenuBannerVersion, UIColours.Black_100, "Version", 25, "0.0 0.6", "1.0 1.0", 1);
                        QUI.CreateLabel(ref BannerVersion, pvxMenuBannerVersion, UIColours.Black_100, instance.Version.ToString(), 21, "0.0 0.0", "1.0 0.6", 1);

                        var BannerModType = QUI.CreateElementContainer(pvxMenuBannerModType, UIColours.Gold_100, "0.599 0.833", "0.698 0.949");
                        QUI.CreateLabel(ref BannerModType, pvxMenuBannerModType, UIColours.Black_100,
                            instance.PvXModtype, 25, "0.0 0.0", "1.0 1.0", 1);

                        CuiHelper.AddUi(player, BannerGui);
                        CuiHelper.AddUi(player, BannerTitle);
                        CuiHelper.AddUi(player, BannerVersion);
                        CuiHelper.AddUi(player, BannerModType);
                    }
                    public static void Selector(BasePlayer player)
                    {
                        var SideMenuGui = QUI.CreateElementContainer(pvxMenuSide, UIColours.Grey2_100, "0.607 0.125", "0.703 0.815", true);

                        GUI.Create.MenuButton(ref SideMenuGui, pvxMenuSide, UIColours.Grey5_100, "<color=black>Welcome</color>", 15, 0, "PvXMenuCmd Welcome");
                        GUI.Create.MenuButton(ref SideMenuGui, pvxMenuSide, UIColours.Grey5_100, "<color=black>Settings</color>", 15, 1, "PvXMenuCmd Settings");
                        GUI.Create.MenuButton(ref SideMenuGui, pvxMenuSide, UIColours.Grey5_100, "<color=black>Character</color>", 15, 2, "PvXMenuCmd Character");
                        GUI.Create.MenuButton(ref SideMenuGui, pvxMenuSide, UIColours.Green_100, "<color=black>Players</color>", 15, 3, "PvXMenuCmd Players");
                        GUI.Create.MenuButton(ref SideMenuGui, pvxMenuSide, UIColours.Green_100, "<color=black>Tickets</color>", 15, 4, "PvXMenuCmd Tickets");
                        GUI.Create.MenuButton(ref SideMenuGui, pvxMenuSide, UIColours.Green_100, "<color=black>Settings</color>", 15, 5, "PvXMenuCmd Admin Settings");
                        GUI.Create.MenuButton(ref SideMenuGui, pvxMenuSide, UIColours.Green_100, "<color=black>Debug</color>", 15, 6, "PvXMenuCmd Admin Debug");
                        QUI.CreateButton(ref SideMenuGui, pvxMenuSide, UIColours.Red_100, "<color=black>X</color>", 15, "0.108 0.013", "0.892 0.047", "PvXMenuCmd Close");
                        CuiHelper.AddUi(player, SideMenuGui);
                    }
                    public static class Content
                    {
                        public static class WelcomePages
                        {
                            public static void Page1(BasePlayer Player)
                            {
                                var MenuGui = QUI.CreateElementContainer(
                                    pvxMenuMain,
                                    UIColours.Grey2_100,
                                    "0.297 0.125",
                                    "0.602 0.815",
                                    true);
                                Create.MenuText(ref MenuGui, pvxMenuMain, UIColours.Black_100, Messages.Get(Lang.Menu.WelcomePage.P1L01), 16, 0);
                                Create.MenuText(ref MenuGui, pvxMenuMain, UIColours.Black_100, Messages.Get(Lang.Menu.WelcomePage.P1L02), 16, 1);
                                Create.MenuText(ref MenuGui, pvxMenuMain, UIColours.Black_100, Messages.Get(Lang.Menu.WelcomePage.P1L03), 16, 2);
                                Create.MenuText(ref MenuGui, pvxMenuMain, UIColours.Black_100, Messages.Get(Lang.Menu.WelcomePage.P1L04), 16, 3);
                                Create.MenuText(ref MenuGui, pvxMenuMain, UIColours.Black_100, Messages.Get(Lang.Menu.WelcomePage.P1L05), 16, 4);
                                Create.MenuText(ref MenuGui, pvxMenuMain, UIColours.Black_100, Messages.Get(Lang.Menu.WelcomePage.P1L06), 16, 5);
                                Create.MenuText(ref MenuGui, pvxMenuMain, UIColours.Black_100, Messages.Get(Lang.Menu.WelcomePage.P1L07), 16, 6);
                                Create.MenuText(ref MenuGui, pvxMenuMain, UIColours.Black_100, Messages.Get(Lang.Menu.WelcomePage.P1L08), 16, 7);
                                Create.MenuText(ref MenuGui, pvxMenuMain, UIColours.Black_100, Messages.Get(Lang.Menu.WelcomePage.P1L09), 16, 8);
                         
// ... [Code preview truncated due to length. Full source in attached file] ...

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