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] ...