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

FREE SmartHomes : 0.1.3 0.1.3

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System.Collections.Generic;
using Oxide.Core;
using Oxide.Game.Rust.Cui;
using UnityEngine;
using System.Linq;
using System.Reflection;
using Facepunch;
using System;

namespace Oxide.Plugins
{
    [Info("SmartHomes", "k1lly0u & DylanSMR", "0.1.3", ResourceId = 2051)]
    class SmartHomes : RustPlugin
    {
        // / ////// / //   
        // / Fields / //
        // / ////// / //    
        static MethodInfo updatelayer;

        List<ulong> setupUI = new List<ulong>();
        List<ulong> barUI = new List<ulong>();
        List<ulong> isEditing = new List<ulong>();
        Dictionary<ulong, newData> newD = new Dictionary<ulong, newData>();
        class newData
        {
            public uint entKey;
            public string entName;
            public bool entStatus;
            public string entType;
            public Vector3 entLocation;

            public newData(){ }
        }

        // / ////// / //   
        // / OxideH / //
        // / ////// / //    
        void Loaded()
        {
            homeData = Interface.GetMod().DataFileSystem.ReadObject<HomeData>(this.Title);
            lang.RegisterMessages(messages, this);
        }
        void Unload()
        {
            foreach(var player in BasePlayer.activePlayerList){
            CuiHelper.DestroyUi(player, PublicSideBar);
            CuiHelper.DestroyUi(player, PublicSetupName);
            CuiHelper.DestroyUi(player, PublicObjectSetup);
            CuiHelper.DestroyUi(player, PublicControlSetup);
            CuiHelper.DestroyUi(player, PublicControlSetupTurret);
            CuiHelper.DestroyUi(player, PublicControlSetupDoor);
            CuiHelper.DestroyUi(player, PublicControlSetupLight);
            barUI.Remove(player.userID);
            setupUI.Remove(player.userID);}
            SaveData();
        }
        void OnServerSave()
        {
            SaveData();
        }
        void OnPlayerInit(BasePlayer player)
        {
            if (Homes.Find(player) == null){
                var info = new Homes()
                {
                    locx = 0.0f,
                    locy = 0.0f,
                    locz = 0.0f,
                    playerID = player.userID
                };
                homeData.homeD.Add(player.userID, info);
                SaveData();  
            }        
        }
        void SaveData() => Interface.Oxide.DataFileSystem.WriteObject(this.Title, homeData);
        void OnServerInitialized()
        {
            updatelayer = typeof(BuildingBlock).GetMethod("UpdateLayer", (BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance | BindingFlags.NonPublic));
            LoadVariables();
        }   
        // / ////// / //   
        // / data s / //
        // / ////// / // 

        static HomeData homeData;

        class HomeData
        {
            public Dictionary<ulong, Homes> homeD = new Dictionary<ulong, Homes>();
        }

        class Homes
        {
            public float locx;
            public float locy;
            public float locz;

            public ulong playerID;

            public Dictionary<string, TurretData> tData = new Dictionary<string, TurretData>();
            public Dictionary<string, LightData> lData = new Dictionary<string, LightData>();
            public Dictionary<string, DoorData> dData = new Dictionary<string, DoorData>();

            public List<float> objectX = new List<float>();
            public Homes(){}
            internal static Homes Find(BasePlayer player)
            {
                return homeData.homeD.Values.ToList().Find((d) => d.playerID == player.userID);
            }
        }       
        public class TurretData
        {   
            public float locx;
            public float locy;
            public float locz;
            public uint key;
            public bool status;
            public string name;
            public TurretData(){}
        }
        public class LightData
        {
            public float locx;
            public float locy;
            public float locz;
            public uint key;
            public bool status;
            public string name;
            public LightData(){}
        }
        public class DoorData
        {
            public float locx;
            public float locy;
            public float locz;
            public uint key;
            public bool status;
            public string name;
            public DoorData(){}
        }

        // / ////// / //   
        // / Config / //
        // / ////// / //       
        private ConfigData configData;
        class Options
        {
            public float ActivationDistance { get; set; }
        }
        class ConfigData
        {
            public Options Options { get; set; }
        }
        private void LoadVariables()
        {
            LoadConfigVariables();
            SaveConfig();
        }
        protected override void LoadDefaultConfig()
        {
            var config = new ConfigData
            {
                Options = new Options
                {
                    ActivationDistance = 30
                }
            };
            SaveConfig(config);
        }
        private void LoadConfigVariables() => configData = Config.ReadObject<ConfigData>();
        void SaveConfig(ConfigData config) => Config.WriteObject(config, true);
        // / ////// / //   
        // / GUIMai / //
        // / ////// / //    

        [ConsoleCommand("CloseCUIMain")]
        private void destroyUI(ConsoleSystem.Arg arg)
        {
            var player = arg.connection.player as BasePlayer;
            if (player == null)
                return;
            CuiHelper.DestroyUi(player, PublicSideBar);
            CuiHelper.DestroyUi(player, PublicSetupName);
            CuiHelper.DestroyUi(player, PublicObjectSetup);
            CuiHelper.DestroyUi(player, PublicControlSetup);
            CuiHelper.DestroyUi(player, PublicControlSetupTurret);
            CuiHelper.DestroyUi(player, PublicControlSetupDoor);
            CuiHelper.DestroyUi(player, PublicControlSetupLight);
            barUI.Remove(player.userID);
            setupUI.Remove(player.userID);
        }

        void destroyUIN(ConsoleSystem.Arg arg)
        {
            var player = arg.connection.player as BasePlayer;
            if (player == null)
                return;          
            CuiHelper.DestroyUi(player, PublicSetupName);
            CuiHelper.DestroyUi(player, PublicObjectSetup);
            CuiHelper.DestroyUi(player, PublicControlSetup);
            CuiHelper.DestroyUi(player, PublicControlSetupTurret);
            CuiHelper.DestroyUi(player, PublicControlSetupDoor);
            CuiHelper.DestroyUi(player, PublicControlSetupLight);
            barUI.Remove(player.userID);
            setupUI.Remove(player.userID);  
        }

        [ChatCommand("rem")]
        void openUI(BasePlayer player)
        {
            barUI.Add(player.userID);
            RemoteBar(player);
        }   

        // / ////// / //   
        // / GUI Co / //
        // / ////// / //    

        [ConsoleCommand("CUI_ControlMenu")]
        void ControlMenu(ConsoleSystem.Arg arg)
        {
            var player = arg.connection.player as BasePlayer;
            if (player == null)
                return;
                destroyUIN(arg);

            var element = UI.CreateElementContainer(PublicControlSetup, UIColors["dark"], "0.21 0.1", "0.9 0.9", true);
            UI.CreatePanel(ref element, PublicControlSetup, UIColors["light"], "0.01 0.02", "0.99 0.98", true);
            UI.CreateLabel(ref element, PublicControlSetup, UIColors["header"], lang.GetMessage("CtrlMenu", this, player.UserIDString), 100, "0.01 0.01", "0.99 0.99", TextAnchor.MiddleCenter);

            UI.CreateLabel(ref element, PublicControlSetup, UIColors["dark"], lang.GetMessage("SelectMenu", this, player.UserIDString), 20, "0.9", "1 1");
            UI.CreatePanel(ref element, PublicControlSetup, UIColors["dark"], "0.14 0.05", "0.38 0.15", true);
            UI.CreateButton(ref element, PublicControlSetup, UIColors["buttongreen"], lang.GetMessage("OpenTurret", this, player.UserIDString), 20, "0.15 0.06", "0.37 0.14", $"CUI_ControlOpen Turret");
            UI.CreatePanel(ref element, PublicControlSetup, UIColors["dark"], "0.39 0.05", "0.63 0.15", true);
            UI.CreateButton(ref element, PublicControlSetup, UIColors["buttongreen"], lang.GetMessage("OpenLight", this, player.UserIDString), 20, "0.40 0.06", "0.62 0.14", $"CUI_ControlOpen Light");
            UI.CreatePanel(ref element, PublicControlSetup, UIColors["dark"], "0.64 0.05", "0.88 0.15", true);
            UI.CreateButton(ref element, PublicControlSetup, UIColors["buttongreen"], lang.GetMessage("OpenDoor", this, player.UserIDString), 20, "0.65 0.06", "0.87 0.14", $"CUI_ControlOpen Door");
            CuiHelper.AddUi(player, element);    
        } 

        [ConsoleCommand("CUI_ControlOpen")]
        void ControlOpen(ConsoleSystem.Arg arg)
        {
            var player = arg.connection.player as BasePlayer;
            if (player == null)
                return;  
            switch(arg.Args[0])
            {
                case "Turret":
                    destroyUIN(arg);
                    player.SendConsoleCommand("CUI_OpenTurret");
                break;
                case "Light":
                    destroyUIN(arg);
                    player.SendConsoleCommand("CUI_OpenLight");
                break;
                case "Door":
                    destroyUIN(arg);
                    player.SendConsoleCommand("CUI_OpenDoor");
                break;
            }
        } 

        [ConsoleCommand("CUI_ChangeElement")]
        private void ChangeElement(ConsoleSystem.Arg arg)
        {
            var player = arg.connection.player as BasePlayer;
            if (player == null)
                return;
            var panelName = arg.GetString(0);
            switch (panelName)
            {
                case "listpage":
                    {
                        if(arg.GetString(1) == "turret"){
                            var pageNumber = arg.GetString(2);
                            ControlTurret(arg, int.Parse(pageNumber));
                        }
                        if(arg.GetString(1) == "light"){
                            var pageNumber = arg.GetString(2);
                            ControlLight(arg, int.Parse(pageNumber));
                        }
                        if(arg.GetString(1) == "door"){
                            var pageNumber = arg.GetString(2);
                            ControlDoor(arg, int.Parse(pageNumber));
                        }
                    }
                    return;
            }
        }

        [ConsoleCommand("CUI_OpenTurret")]
        void ControlTurret(ConsoleSystem.Arg arg, int page = 0)
        {
            destroyUIN(arg);
            var player = arg.connection.player as BasePlayer;
            if (player == null)
                return;   

            var i = homeData.homeD[player.userID].tData.Count;
            var element = UI.CreateElementContainer(PublicControlSetupTurret, UIColors["dark"], "0.21 0.1", "0.9 0.9", true);
            UI.CreatePanel(ref element, PublicControlSetupTurret, UIColors["light"], "0.01 0.02", "0.99 0.98", true);
            UI.CreateLabel(ref element, PublicControlSetupTurret, UIColors["header"], lang.GetMessage("TList", this, player.UserIDString), 100, "0.01 0.01", "0.99 0.99", TextAnchor.MiddleCenter);

            if(i >= 18){ 
                var maxpages = (i - 1) / 18 + 1;
                if (page < maxpages - 1){
                    UI.CreatePanel(ref element, PublicControlSetupTurret, UIColors["dark"], "0.64 0.05", "0.88 0.15", true); 
                    UI.CreateButton(ref element, PublicControlSetupTurret, UIColors["buttongreen"], lang.GetMessage("Next", this, player.UserIDString), 20, "0.65 0.06", "0.87 0.14", $"CUI_ChangeElement listpage turret {page + 1}"); 
                }
                if(page > 0){
                    UI.CreatePanel(ref element, PublicControlSetupTurret, UIColors["dark"], "0.14 0.05", "0.38 0.15", true);
                    UI.CreateButton(ref element, PublicControlSetupTurret, UIColors["buttongreen"], lang.GetMessage("Back", this, player.UserIDString), 20, "0.15 0.06", "0.37 0.14", $"CUI_ChangeElement listpage turret {page - 1}");
                }
            }

            int maxentries = (18 * (page + 1));
            if (maxentries > i)
                maxentries = i;

            int rewardcount = 18 * page;

            var k = 0;
            var entries = homeData.homeD[player.userID].tData;

            List <string> questNames = new List<string>();
            foreach (var entry in homeData.homeD[player.userID].tData)
                questNames.Add(entry.Key);

            for (int n = rewardcount; n < maxentries; n++)
            {                
                CreateTurretButton(ref element, PublicControlSetupTurret, entries[questNames[n]], player, k); k++;
            }
            CuiHelper.AddUi(player, element);
        } 

        private void CreateTurretButton(ref CuiElementContainer container, string panelName, TurretData data, BasePlayer player, int num)
        {

            string name = homeData.homeD[player.userID].tData[data.name].name;
            var status = "<color='#818884'>Disabled</color>";
            if(homeData.homeD[player.userID].tData[name].status) status = "<color='#818884'>Enabled</color>";
            else status = "<color='#818884'>Disabled</color>";
            var color = "";
            if(homeData.homeD[player.userID].tData[data.name].status) color = "0.06 0.47 0.39 1.0";
            else color = "0.91 0.0 0.0 1.0";
            string cmd = $"CUI_ToggleTurret {homeData.homeD[player.userID].tData[data.name].name}";
            var pos = CalcButtonPos(num);
            UI.CreatePanel(ref container, panelName, UIColors["dark"], $"{pos[0]} {pos[1]}", $"{pos[2]} {pos[3]}", true);
            UI.CreateButton(ref container, panelName, color, $"<color='#818884'>{name}</color>\n{status}", 13, $"{pos[0] + 0.01} {pos[1] + 0.01}", $"{pos[2] - 0.01} {pos[3] - 0.01}", cmd);
        }

        [ConsoleCommand("CUI_ToggleTurret")]
        void toggle(ConsoleSystem.Arg arg)
        {
            var player = arg.connection.player as BasePlayer;
            var name = arg.Args[0];
            if (player == null)
                return;   
            if(homeData.homeD[player.userID].tData[name].status)
            {
                var newLocation = new Vector3(homeData.homeD[player.userID].tData[name].locx, homeData.homeD[player.userID].tData[name].locy, homeData.homeD[player.userID].tData[name].locz);
                homeData.homeD[player.userID].tData[name].status = false;
                    List<BaseEntity> turretnear= new List<BaseEntity>();
                    Vis.Entities(newLocation, 0.2f, turretnear);
                var i = 0;
                foreach(var turret in turretnear)
                {
                    if(turret.ToString().Contains("turret")){
                        if (turret is AutoTurret) turret.GetComponent<AutoTurret>().target = null;
                        i++;
                        turret.SetFlag(BaseEntity.Flags.On, false);
                        turret.SendNetworkUpdateImmediate();
                    }else{}
                }
                if(i == 0)
                {
                    homeData.homeD[player.userID].objectX.Remove(homeData.homeD[player.userID].tData[name].locx);
                    homeData.homeD[player.userID].tData.Remove(name);
                    SaveData();
                    SendReply(player, lang.GetMessage("LostObject", this, player.UserIDString).Replace("0", name).Replace("1", "World"));
                }
            }
            else
            {
                var newLocation = new Vector3(homeData.homeD[player.userID].tData[name].locx, homeData.homeD[player.userID].tData[name].locy, homeData.homeD[player.userID].tData[name].locz);
                homeData.homeD[player.userID].tData[name].status = true;
                    List<BaseEntity> turretnear= new List<BaseEntity>();
                    Vis.Entities(newLocation, 0.2f, turretnear);
                var i = 0;
                foreach(var turret in turretnear)
                {
                    if(turret.ToString().Contains("turret")){
                        if (turret is AutoTurret) turret.GetComponent<AutoTurret>().target = null;
                        i++;
                        turret.SetFlag(BaseEntity.Flags.On, true);
                        turret.SendNetworkUpdateImmediate();
                    }else{}
                }
                if(i == 0)
                {
                    homeData.homeD[player.userID].objectX.Remove(homeData.homeD[player.userID].tData[name].locx);
                    homeData.homeD[player.userID].tData.Remove(name);
                    SaveData();
                    SendReply(player, lang.GetMessage("LostObject", this, player.UserIDString).Replace("0", name).Replace("1", "World"));
                }       
            }
            ControlTurret(arg);
            SaveData();
        }

        void OnEntityDeath(BaseCombatEntity entity, HitInfo info)
        {
            if(entity is BasePlayer) return;
            if(entity.OwnerID == null) return;
            if(entity.ToString().Contains("autoturret"))
            {
                foreach(var entry in homeData.homeD[entity.OwnerID].tData)
                {
                    if(homeData.homeD[entity.OwnerID].tData[entry.Key] == null) return;
                    if(homeData.homeD[entity.OwnerID].tData[entry.Key].locx == entity.transform.position.x)
                    {
                        var namen = homeData.homeD[entity.OwnerID].tData[entry.Key].name;
                        homeData.homeD[entity.OwnerID].objectX.Remove(entity.transform.position.x);
                        homeData.homeD[entity.OwnerID].tData.Remove(homeData.homeD[entity.OwnerID].tData[entry.Key].name);
                        SaveData();
                        SendReply(BasePlayer.FindByID(entity.OwnerID), lang.GetMessage("LostObject", this, BasePlayer.FindByID(entity.OwnerID).UserIDString).Replace("0", namen).Replace("1", info.Initiator.ToPlayer().displayName));
                        return;
                    }
                    else continue;
                }
            }
            else if(entity.ToString().Contains("hinged"))
            {
                foreach(var entry2 in homeData.homeD[entity.OwnerID].dData)
                {
                    if(homeData.homeD[entity.OwnerID].dData[entry2.Key] == null) return;
                    if(homeData.homeD[entity.OwnerID].dData[entry2.Key].locx == entity.transform.position.x)
                    {
                        var namenew = homeData.homeD[entity.OwnerID].dData[entry2.Key].name;
                        homeData.homeD[entity.OwnerID].objectX.Remove(entity.transform.position.x);
                        homeData.homeD[entity.OwnerID].dData.Remove(homeData.homeD[entity.OwnerID].dData[entry2.Key].name);
                        SaveData();
                        SendReply(BasePlayer.FindByID(entity.OwnerID), lang.GetMessage("LostObject", this, BasePlayer.FindByID(entity.OwnerID).UserIDString).Replace("0", namenew).Replace("1", info.Initiator.ToPlayer().displayName));
                        return;
                    }
                    else continue;
                }
            }
            else if(entity.ToString().Contains("lantern") || entity.ToString().Contains("ceilinglight"))
            {
                foreach(var entry3 in homeData.homeD[entity.OwnerID].lData)
                {
                    if(homeData.homeD[entity.OwnerID].lData[entry3.Key] == null) return;
                    if(homeData.homeD[entity.OwnerID].lData[entry3.Key].locx == entity.transform.position.x)
                    {
                        var namenew = homeData.homeD[entity.OwnerID].lData[entry3.Key].name;
                        homeData.homeD[entity.OwnerID].objectX.Remove(entity.transform.position.x);
                        homeData.homeD[entity.OwnerID].lData.Remove(homeData.homeD[entity.OwnerID].lData[entry3.Key].name);
                        SaveData();
                        SendReply(BasePlayer.FindByID(entity.OwnerID), lang.GetMessage("LostObject", this, BasePlayer.FindByID(entity.OwnerID).UserIDString).Replace("0", namenew).Replace("1", info.Initiator.ToPlayer().displayName));
                        return;
                    }
                    else continue;
                }
            }
            else return;
        }

        // / ////// / //   
        // / Light / //
        // / ////// / //   

        [ConsoleCommand("CUI_OpenLight")]
        void ControlLight(ConsoleSystem.Arg arg, int page = 0)
        {
            destroyUIN(arg);
            var player = arg.connection.player as BasePlayer;
            if (player == null)
                return;   

            var i = homeData.homeD[player.userID].lData.Count;
            var element = UI.CreateElementContainer(PublicControlSetupLight, UIColors["dark"], "0.21 0.1", "0.9 0.9", true);
            UI.CreatePanel(ref element, PublicControlSetupLight, UIColors["light"], "0.01 0.02", "0.99 0.98", true);
            UI.CreateLabel(ref element, PublicControlSetupLight, UIColors["header"], lang.GetMessage("LList", this, player.UserIDString), 100, "0.01 0.01", "0.99 0.99", TextAnchor.MiddleCenter);

            if(i >= 18){ 
                var maxpages = (i - 1) / 18 + 1;
                if (page < maxpages - 1){
                    UI.CreatePanel(ref element, PublicControlSetupLight, UIColors["dark"], "0.64 0.05", "0.88 0.15", true); 
                    UI.CreateButton(ref element, PublicControlSetupLight, UIColors["buttongreen"], lang.GetMessage("Next", this, player.UserIDString), 20, "0.65 0.06", "0.87 0.14", $"CUI_ChangeElement listpage light {page + 1}"); 
                }
                if(page > 0){
                    UI.CreatePanel(ref element, PublicControlSetupLight, UIColors["dark"], "0.14 0.05", "0.38 0.15", true);
                    UI.CreateButton(ref element, PublicControlSetupLight, UIColors["buttongreen"], lang.GetMessage("Back", this, player.UserIDString), 20, "0.15 0.06", "0.37 0.14", $"CUI_ChangeElement listpage light {page - 1}");
                }
            }

            int maxentries = (18 * (page + 1));
            if (maxentries > i)
                maxentries = i;

            int rewardcount = 18 * page;

            var k = 0;
            var entries2 = homeData.homeD[player.userID].lData;

            List <string> questNames = new List<string>();
            foreach (var entry in homeData.homeD[player.userID].lData)
                questNames.Add(entry.Key);

            for (int n = rewardcount; n < maxentries; n++)
            {                
                CreateLightButton(ref element, PublicControlSetupLight, entries2[questNames[n]], player, k); k++;
            }
            CuiHelper.AddUi(player, element);
        } 

        private void CreateLightButton(ref CuiElementContainer container, string panelName, LightData light, BasePlayer player, int num)
        {
            string name = light.name;
            var status = "<color='#818884'>Disabled</color>";
            if(homeData.homeD[player.userID].lData[name].status) status = "<color='#818884'>Enabled</color>";
            else status = "<color='#818884'>Disabled</color>";
            var color = "";
            if(homeData.homeD[player.userID].lData[light.name].status) color = "0.06 0.47 0.39 1.0";
            else color = "0.91 0.0 0.0 1.0";
            string cmd = $"CUI_ToggleLight {homeData.homeD[player.userID].lData[light.name].name}";
            var pos = CalcButtonPos(num);
            UI.CreatePanel(ref container, panelName, UIColors["dark"], $"{pos[0]} {pos[1]}", $"{pos[2]} {pos[3]}", true);
            UI.CreateButton(ref container, panelName, color, $"<color='#818884'>{name}</color>\n{status}", 13, $"{pos[0] + 0.01} {pos[1] + 0.01}", $"{pos[2] - 0.01} {pos[3] - 0.01}", cmd);          
        }

        [ConsoleCommand("CUI_ToggleLight")]
        void toggleLight(ConsoleSystem.Arg arg)
        {
            var player = arg.connection.player as BasePlayer;
            var name = arg.Args[0];
            if (player == null)
                return;   
            if(homeData.homeD[player.userID].lData[name].status)
            {
                var newLocation = new Vector3(homeData.homeD[player.userID].lData[name].locx, homeData.homeD[player.userID].lData[name].locy, homeData.homeD[player.userID].lData[name].locz);
                homeData.homeD[player.userID].lData[name].status = false;
                    List<BaseEntity> lightnear = new List<BaseEntity>();
                    Vis.Entities(newLocation, 0.2f, lightnear);
                var i = 0;
                foreach(var light in lightnear)
                {
                    if(light.ToString().Contains("lantern") || light.ToString().Contains("ceilinglight")){
                        i++;
                        light.SetFlag(BaseEntity.Flags.On, false);
                        light.SendNetworkUpdateImmediate();}
                    else{}
                }
                if(i == 0)
                {
                    homeData.homeD[player.userID].objectX.Remove(homeData.homeD[player.userID].lData[name].locx);
                    homeData.homeD[player.userID].lData.Remove(name);
                    SaveData();
                    SendReply(player, lang.GetMessage("LostObject", this, player.UserIDString).Replace("0", name).Replace("1", "World"));
                }  
            }
            else
            {
                var newLocation = new Vector3(homeData.homeD[player.userID].lData[name].locx, homeData.homeD[player.userID].lData[name].locy, homeData.homeD[player.userID].lData[name].locz);
                homeData.homeD[player.userID].lData[name].status = true;
                    List<BaseEntity> lightnear = new List<BaseEntity>();
                    Vis.Entities(newLocation, 0.2f, lightnear);
                var i = 0;
                foreach(var light in lightnear)
                {
                    if(light.ToString().Contains("lantern") || light.ToString().Contains("ceilinglight")){
                        i++;
                        light.SetFlag(BaseEntity.Flags.On, true);
                        light.SendNetworkUpdateImmediate();}
                    else{}
                }
                if(i == 0)
                {
                    homeData.homeD[player.userID].objectX.Remove(homeData.homeD[player.userID].lData[name].locx);
                    homeData.homeD[player.userID].lData.Remove(name);
                    SaveData();
                    SendReply(player, lang.GetMessage("LostObject", this, player.UserIDString).Replace("0", name).Replace("1", "World"));
                }
            }
            ControlLight(arg);
            SaveData();
        }

        // / ////// / //   
        // / Doors / //
        // / ////// / //   

        [ConsoleCommand("CUI_OpenDoor")]
        void ControlDoor(ConsoleSystem.Arg arg, int page = 0)
        {
            destroyUIN(arg);
            var player = arg.connection.player as BasePlayer;
            if (player == null)
                return;   

            var i = homeData.homeD[player.userID].dData.Count;
            var element = UI.CreateElementContainer(PublicControlSetupDoor, UIColors["dark"], "0.21 0.1", "0.9 0.9", true);
            UI.CreatePanel(ref element, PublicControlSetupDoor, UIColors["light"], "0.01 0.02", "0.99 0.98", true);
            UI.CreateLabel(ref element, PublicControlSetupDoor, UIColors["header"], lang.GetMessage("LList", this, player.UserIDString), 100, "0.01 0.01", "0.99 0.99", TextAnchor.MiddleCenter);

            if(i >= 18){ 
                var maxpages = (i - 1) / 18 + 1;
                if (page < maxpages - 1){
                    UI.CreatePanel(ref element, PublicControlSetupDoor, UIColors["dark"], "0.64 0.05", "0.88 0.15", true); 
                    UI.CreateButton(ref element, PublicControlSetupDoor, UIColors["buttongreen"], lang.GetMessage("Next", this, player.UserIDString), 20, "0.65 0.06", "0.87 0.14", $"CUI_ChangeElement listpage door{page + 1}"); 
                }
                if(page > 0){
                    UI.CreatePanel(ref element, PublicControlSetupDoor, UIColors["dark"], "0.14 0.05", "0.38 0.15", true);
                    UI.CreateButton(ref element, PublicControlSetupDoor, UIColors["buttongreen"], lang.GetMessage("Back", this, player.UserIDString), 20, "0.15 0.06", "0.37 0.14", $"CUI_ChangeElement listpage door {page - 1}");
                }
            }

            int maxentries = (18 * (page + 1));
            if (maxentries > i)
                maxentries = i;

            int rewardcount = 18 * page;

            var k = 0;
            var entries3 = homeData.homeD[player.userID].dData;

            List <string> questNames = new List<string>();
            foreach (var entry in homeData.homeD[player.userID].dData)
                questNames.Add(entry.Key);

            for (int n = rewardcount; n < maxentries; n++)
            {                
                CreateDoorButton(ref element, PublicControlSetupDoor, entries3[questNames[n]], player, k); k++;
            }
            CuiHelper.AddUi(player, element);
        } 

        private void CreateDoorButton(ref CuiElementContainer container, string panelName, DoorData door, BasePlayer player, int num)
        {
            string name = door.name;
            var status = "<color='#818884'>Disabled</color>";
            if(homeData.homeD[player.userID].dData[name].status) status = "<color='#818884'>Enabled</color>";
            else status = "<color='#818884'>Disabled</color>";
            var color = "";
            if(homeData.homeD[player.userID].dData[door.name].status) color = "0.06 0.47 0.39 1.0";
            else color = "0.91 0.0 0.0 1.0";
            string cmd = $"CUI_ToggleDoor {homeData.homeD[player.userID].dData[door.name].name}";
            var pos = CalcButtonPos(num);
            UI.CreatePanel(ref container, panelName, UIColors["dark"], $"{pos[0]} {pos[1]}", $"{pos[2]} {pos[3]}", true);
            UI.CreateButton(ref container, panelName, color, $"<color='#818884'>{name}</color>\n{status}", 13, $"{pos[0] + 0.01} {pos[1] + 0.01}", $"{pos[2] - 0.01} {pos[3] - 0.01}", cmd);
        }

        [ConsoleCommand("CUI_ToggleDoor")]
        void toggleDoor(ConsoleSystem.Arg arg)
        {
            var player = arg.connection.player as BasePlayer;
            var name = arg.Args[0];
            if (player == null)
                return;   
            if(homeData.homeD[player.userID].dData[name].status)
            {
                var newLocation = new Vector3(homeData.homeD[player.userID].dData[name].locx, homeData.homeD[player.userID].dData[name].locy, homeData.homeD[player.userID].dData[name].locz);
                homeData.homeD[player.userID].dData[name].status = false;
                    List<BaseEntity> doornear = new List<BaseEntity>();
                    Vis.Entities(newLocation, 1.0f, doornear);
                var i = 0;
                foreach(var door in doornear)
                {
                    if (door.ToString().Contains("hinged")){
                    i++;
                    door.SetFlag(BaseEntity.Flags.Open, false);
                    door.SendNetworkUpdateImmediate();}
                    else{}
                }
                if(i == 0)
                {
                    homeData.homeD[player.userID].objectX.Remove(homeData.homeD[player.userID].dData[name].locx);
                    homeData.homeD[player.userID].dData.Remove(name);
                    SaveData();
                    SendReply(player, lang.GetMessage("LostObject", this, player.UserIDString).Replace("0", name).Replace("1", "World"));
                }
            }
            else
            {
                var newLocation = new Vector3(homeData.homeD[player.userID].dData[name].locx, homeData.homeD[player.userID].dData[name].locy, homeData.homeD[player.userID].dData[name].locz);
                homeData.homeD[player.userID].dData[name].status = true;
                    List<BaseEntity> doornear = new List<BaseEntity>();
                    Vis.Entities(newLocation, 1.0f, doornear);
                var i = 0;
                foreach(var door in doornear)
                {
                    if (door.ToString().Contains("hinged")){
                    i++;
                    door.SetFlag(BaseEntity.Flags.Open, true);
                    door.SendNetworkUpdateImmediate();}
                    else{}
                }
                if(i == 0)
                {
                    homeData.homeD[player.userID].objectX.Remove(homeData.homeD[player.userID].dData[name].locx);
                    homeData.homeD[player.userID].dData.Remove(name);
                    SaveData();
                    SendReply(player, lang.GetMessage("LostObject", this, player.UserIDString).Replace("0", name).Replace("1", "World"));
                }
            }
            ControlDoor(arg);
            SaveData();
        }

        // / ////// / //   
        // / calcbt / //
        // / ////// / //   

        private float[] CalcButtonPos(int number)
        {
            Vector2 position = new Vector2(0.05f, 0.8f);
            Vector2 dimensions = new Vector2(0.125f, 0.125f);
            float offsetY = 0;
            float offsetX = 0;
            if (number >= 0 && number < 6)
            {
                offsetX = (0.03f + dimensions.x) * number;
            }
            if (number > 5 && number < 12)
            {
                offsetX = (0.03f + dimensions.x) * (number - 6);
                offsetY = (-0.05f - dimensions.y) * 1;
            }
            if (number > 11 && number < 18)
            {
                offsetX = (0.03f + dimensions.x) * (number - 12);
                offsetY = (-0.05f - dimensions.y) * 2;
            }
            Vector2 offset = new Vector2(offsetX, offsetY);
            Vector2 posMin = position + offset;
            Vector2 posMax = posMin + dimensions;
            return new float[] { posMin.x, posMin.y, posMax.x, posMax.y };
        }

        // / ////// / //   
        // / GUIOth / //
        // / ////// / //    

        [ConsoleCommand("CUI_Homes")]
        void SetUP(ConsoleSystem.Arg arg)
        {
            var player = arg.connection.player as BasePlayer;
            if (player == null)
                return;
            if (!player.CanBuild()){
                SendReply(player, lang.GetMessage("BuildingAuth", this, player.UserIDString));
                return;
            }
            if(setupUI.Contains(player.userID)){
                destroyUIN(arg);
                setupUI.Remove(player.userID);}
            setupUI.Add(player.userID);

            var element = UI.CreateElementContainer(PublicSetupName, UIColors["dark"], "0.21 0.1", "0.9 0.9", true);
            UI.CreatePanel(ref element, PublicSetupName, UIColors["light"], "0.01 0.02", "0.99 0.98", true);
            UI.CreateLabel(ref element, PublicSetupName, UIColors["header"], lang.GetMessage("SHomes", this, player.UserIDString), 100, "0.01 0.01", "0.99 0.99", TextAnchor.MiddleCenter);

            UI.CreateLabel(ref element, PublicSetupName, UIColors["dark"], lang.GetMessage("WalkThrough", this, player.UserIDString), 20, "0.9", "1 1");
            UI.CreatePanel(ref element, PublicSetupName, UIColors["dark"], "0.39 0.05", "0.63 0.15", true);
            UI.CreateButton(ref element, PublicSetupName, UIColors["buttongreen"], lang.GetMessage("BeginProcess", this, player.UserIDString), 20, "0.40 0.06", "0.62 0.14", $"CUI_Homesetup2");
            CuiHelper.AddUi(player, element);    
        } 

        [ConsoleCommand("CUI_HomesNew")]
        void SetUPB(ConsoleSystem.Arg arg)
        {
            var player = arg.connection.player as BasePlayer;
            if (player == null)
                return;
            if (!player.CanBuild()){
                SendReply(player, lang.GetMessage("BuildingAuth", this, player.UserIDString).Replace("0", configData.Options.ActivationDistance.ToString()));
                return;
            }
            var i = 0;
            List<BaseEntity> nearby = new List<BaseEntity>();
            Vis.Entities(player.transform.position, configData.Options.ActivationDistance, nearby);
            foreach(BaseEntity entity in nearby)
            {
                if (entity is BuildingPrivlidge)
                { 
                    List<string> authedPlayers = new List<string>();
                    var tc = entity.GetComponent<BuildingPrivlidge>();       
                    if (tc != null)
                    {
                        if(tc.IsAuthed(player)) break;
                        else
                        {
                            SendReply(player, lang.GetMessage("BuildingAuth", this, player.UserIDString).Replace("0", configData.Options.ActivationDistance.ToString()));
                            return;       
                        }
                    }
                }
            }
            if(setupUI.Contains(player.userID)){
                destroyUIN(arg);
                setupUI.Remove(player.userID);}
            setupUI.Add(player.userID);

            var element = UI.CreateElementContainer(PublicSetupName, UIColors["dark"], "0.21 0.1", "0.9 0.9", true);
            UI.CreatePanel(ref element, PublicSetupName, UIColors["light"], "0.01 0.02", "0.99 0.98", true);
            UI.CreateLabel(ref element, PublicSetupName, UIColors["header"], lang.GetMessage("SHomes", this, player.UserIDString), 100, "0.01 0.01", "0.99 0.99", TextAnchor.MiddleCenter);

            UI.CreateLabel(ref element, PublicSetupName, UIColors["dark"], lang.GetMessage("WalkThroughNew", this, player.UserIDString), 20, "0.9", "1 1");
            UI.CreatePanel(ref element, PublicSetupName, UIColors["dark"], "0.39 0.05", "0.63 0.15", true);
            UI.CreateButton(ref element, PublicSetupName, UIColors["buttongreen"], lang.GetMessage("BeginProcessNew", this, player.UserIDString), 20, "0.40 0.06", "0.62 0.14", $"CUI_HomeNew2");
            CuiHelper.AddUi(player, element);    
        } 

        [ConsoleCommand("CUI_HomeNew2")]
        void SetUP2B(ConsoleSystem.Arg arg)
        {
            var player = arg.connection.player as BasePlayer;
            if (player == null)
                return;
                destroyUIN(arg);

            var element = UI.CreateElementContainer(PublicSetupName, UIColors["dark"], "0.21 0.1", "0.9 0.9", true);
            UI.CreatePanel(ref element, PublicSetupName, UIColors["light"], "0.01 0.02", "0.99 0.98", true);
            UI.CreateLabel(ref element, PublicSetupName, UIColors["header"], lang.GetMessage("SHomes", this, player.UserIDString), 100, "0.01 0.01", "0.99 0.99", TextAnchor.MiddleCenter);

            UI.CreateLabel(ref element, PublicSetupName, UIColors["dark"], lang.GetMessage("StandWhereNew", this, player.UserIDString), 20, "0.9", "1 1");
            UI.CreatePanel(ref element, PublicSetupName, UIColors["dark"], "0.39 0.05", "0.63 0.15", true);
            UI.CreateButton(ref element, PublicSetupName, UIColors["buttongreen"], lang.GetMessage("NextRe", this, player.UserIDString), 20, "0.40 0.06", "0.62 0.14", $"CUI_HomeNew3");
            CuiHelper.AddUi(player, element);    
        } 

        [ConsoleCommand("CUI_Homesetup2")]
        void SetUP2(ConsoleSystem.Arg arg)
        {
            var player = arg.connection.player as BasePlayer;
            if (player == null)
                return;
                destroyUIN(arg);

            var element = UI.CreateElementContainer(PublicSetupName, UIColors["dark"], "0.21 0.1", "0.9 0.9", true);
            UI.CreatePanel(ref element, PublicSetupName, UIColors["light"], "0.01 0.02", "0.99 0.98", true);
            UI.CreateLabel(ref element, PublicSetupName, UIColors["header"], lang.GetMessage("SHomes", this, player.UserIDString), 100, "0.01 0.01", "0.99 0.99", TextAnchor.MiddleCenter);

            UI.CreateLabel(ref element, PublicSetupName, UIColors["dark"], lang.GetMessage("StandWhere", this, player.UserIDString), 20, "0.9", "1 1");
            UI.CreatePanel(ref element, PublicSetupName, UIColors["dark"], "0.39 0.05", "0.63 0.15", true);
            UI.CreateButton(ref element, PublicSetupName, UIColors["buttongreen"], lang.GetMessage("NextNext", this, player.UserIDString), 20, "0.40 0.06", "0.62 0.14", $"CUI_Homesetup3");
            CuiHelper.AddUi(player, element);    
        } 

        [ConsoleCommand("CUI_HomeNew3")]
        void SetUP3B(ConsoleSystem.Arg arg)
        {
            var player = arg.connection.player as BasePlayer;
            if (player == null)
                return;
                destroyUIN(arg);
            Homes playerData = Homes.Find(player);
            playerData.locx = player.transform.position.x;
            playerData.locy = player.transform.position.y;
            playerData.locz = player.transform.position.z;

            playerData.tData.Clear();
            playerData.dData.Clear();
            playerData.lData.Clear();
            playerData.objectX.Clear();

            SaveData();

            var element = UI.CreateElementContainer(PublicSetupName, UIColors["dark"], "0.21 0.1", "0.9 0.9", true);
            UI.CreatePanel(ref element, PublicSetupName, UIColors["light"], "0.01 0.02", "0.99 0.98", true);
            UI.CreateLabel(ref element, PublicSetupName, UIColors["header"], lang.GetMessage("SHomes", this, player.UserIDString), 100, "0.01 0.01", "0.99 0.99", TextAnchor.MiddleCenter);

            UI.CreateLabel(ref element, PublicSetupName, UIColors["dark"], lang.GetMessage("SmartHomeNew", this, player.UserIDString).Replace("0", configData.Options.ActivationDistance.ToString()), 20, "0.9", "1 1");

            CuiHelper.DestroyUi(player, PublicSideBar);
            barUI.Remove(player.userID);
            barUI.Add(player.userID);
            RemoteBar(player);

            CuiHelper.AddUi(player, element);    
        } 

        [ConsoleCommand("CUI_Homesetup3")]
        void SetUP3(ConsoleSystem.Arg arg)
        {
            var player = arg.connection.player as BasePlayer;
            if (player == null)
                return;
                destroyUIN(arg);
            Homes playerData = Homes.Find(player);
            playerData.locx = player.transform.position.x;
            playerData.locy = player.transform.position.y;
            playerData.locz = player.transform.position.z;
            SaveData();

            var element = UI.CreateElementContainer(PublicSetupName, UIColors["dark"], "0.21 0.1", "0.9 0.9", true);
            UI.CreatePanel(ref element, PublicSetupName, UIColors["light"], "0.01 0.02", "0.99 0.98", true);
            UI.CreateLabel(ref element, PublicSetupName, UIColors["header"], "Smart Homes", 100, "0.01 0.01", "0.99 0.99", TextAnchor.MiddleCenter);

            CuiHelper.DestroyUi(player, PublicSideBar);
            barUI.Remove(player.userID);
            barUI.Add(player.userID);
            RemoteBar(player);

            UI.CreateLabel(ref element, PublicSetupName, UIColors["dark"], lang.GetMessage("SmartHome", this, player.UserIDString).Replace("0", configData.Options.ActivationDistance.ToString()), 20, "0.9", "1 1");
            CuiHelper.AddUi(player, element);    
        } 
        [ConsoleCommand("CUI_ObjectSetup")]
        void ObjectSetup(ConsoleSystem.Arg arg)
        {
            var player = arg.connection.player as BasePlayer;
            if (player == null)
                return;
            if (!player.CanBuild()){
                SendReply(player, lang.GetMessage("BuildingAuth", this, player.UserIDString));
                return;
            }
                destroyUIN(arg);

            var element = UI.CreateElementContainer(PublicObjectSetup, UIColors["dark"], "0.21 0.1", "0.9 0.9", true);
            UI.CreatePanel(ref element, PublicObjectSetup, UIColors["light"], "0.01 0.02", "0.99 0.98", true);
            UI.CreateLabel(ref element, PublicObjectSetup, UIColors["header"], lang.GetMessage("ObjConfig", this, player.UserIDString), 100, "0.01 0.01", "0.99 0.99", TextAnchor.MiddleCenter);

            UI.CreateLabel(ref element, PublicObjectSetup, UIColors["dark"], lang.GetMessage("InstructAdd", this, player.UserIDString), 20, "0.9", "1 1");
            UI.CreatePanel(ref element, PublicObjectSetup, UIColors["dark"], $"0.14 0.05", $"0.38 0.15", true);
            UI.CreateButton(ref element, PublicObjectSetup, UIColors["buttongreen"], "<color='#818884'>Add</color>", 20, "0.15 0.06", "0.37 0.14", $"CUI_ObjectSetup2");
            UI.CreatePanel(ref element, PublicObjectSetup, UIColors["dark"], $"0.64 0.05", $"0.88 0.15", true);
            UI.CreateButton(ref element, PublicObjectSetup, UIColors["buttongreen"], "<color='#818884'>Remove</color>", 20, "0.65 0.06", "0.87 0.14", $"CUI_ObjectRemove1");
            CuiHelper.AddUi(player, element);    
        } 

        [ConsoleCommand("CUI_ObjectRemove1")]
        void ObjectRemove(ConsoleSystem.Arg arg)
        {
            var player = arg.connection.player as BasePlayer;
            if (player == null)
                return;
                destroyUIN(arg);

            var element = UI.CreateElementContainer(PublicObjectSetup, UIColors["dark"], "0.21 0.1", "0.9 0.9", true);
            UI.CreatePanel(ref element, PublicObjectSetup, UIColors["light"], "0.01 0.02", "0.99 0.98", true);
            UI.CreateLabel(ref element, PublicObjectSetup, UIColors["header"], lang.GetMessage("ObjConfig", this, player.UserIDString), 100, "0.01 0.01", "0.99 0.99", TextAnchor.MiddleCenter);

            UI.CreateLabel(ref element, PublicObjectSetup, UIColors["dark"], lang.GetMessage("OnceNear", this, player.UserIDString), 20, "0.9", "1 1");
            UI.CreatePanel(ref element, PublicObjectSetup, UIColors["dark"], "0.14 0.05", "0.38 0.15", true);
            UI.CreateButton(ref element, PublicObjectSetup, UIColors["buttongreen"], "Remove Turret", 20, "0.15 0.06", "0.37 0.14", $"CUI_ObjectRemove2 Turret");
            UI.CreatePanel(ref element, PublicObjectSetup, UIColors["dark"], "0.39 0.05", "0.63 0.15", true);
            UI.CreateButton(ref element, PublicObjectSetup, UIColors["buttongreen"], "Remove Light", 20, "0.40 0.06", "0.62 0.14", $"CUI_ObjectRemove2 Light");
            UI.CreatePanel(ref element, PublicObjectSetup, UIColors["dark"], "0.64 0.05", "0.88 0.15", true);
            UI.CreateButton(ref element, PublicObjectSetup, UIColors["buttongreen"], "Remove Door", 20, "0.65 0.06", "0.87 0.14", $"CUI_ObjectRemove2 Door");
            CuiHelper.AddUi(player, element);    
        } 

        [ConsoleCommand("CUI_ObjectRemove2")]
        void ObjectRemove2(ConsoleSystem.Arg arg)
        {
            var player = arg.connection.player as BasePlayer;
            if (player == null)
                return;
                destroyUIN(arg);
            switch(arg.Args[0])
            {
                case "Turret":
                    if(homeData.homeD[player.userID].tData.Count == 0)
                    {
                        SendReply(player, "You have no turrets.");
                        return;
                    }
                    List<BaseEntity> turretnear = new List<BaseEntity>();
                    Vis.Entities(player.transform.position, 1.5f, turretnear);
                    var locationT = new Vector3();
                    foreach(var turr
// ... [Code preview truncated due to length. Full source in attached file] ...

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