C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using Newtonsoft.Json;
using Oxide.Game.Rust.Cui;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using UnityEngine;
using Facepunch;
using Oxide.Core;
namespace Oxide.Plugins
{
[Info("EventManager", "senyaa & M&B-Studios", "2.2.2")]
class EventManager : RustPlugin
{
#region Constants
const string USE_PERMISSION = "eventmanager.use";
const string SELECTED_CUI_NAME = "EventManager_EventSelected";
const string EDITENTRY_CUI_NAME = "EventManager_EditEntry";
const string SELECT_CUI_NAME = "EventManager_SelectUI";
const string SELECT_CCMD = "EM_SELECT";
const string SET_ENTRY_CCMD = "EM_SETENTRY";
const string SAVE_ENTRY_CCMD = "EM_SAVEENTRY";
const string EDIT_ENTRY_CCMD = "EM_EDITENTRY";
const string SHOW_PAGE_CCMD = "EM_SHOWPAGE";
const string DELETE_ENTRY_CCMD = "EM_DELETEENTRY";
const string NEW_ENTRY_CCMD = "EM_NEWENTRY";
#endregion
#region Fields
static EventManager Instance;
EventController controller;
readonly Dictionary<int, string> DayList = new Dictionary<int, string>()
{
[1] = "Monday",
[2] = "Tuesday",
[3] = "Wednesday",
[4] = "Thursday",
[5] = "Friday",
[6] = "Saturday",
[0] = "Sunday",
};
#endregion
[ConsoleCommand("em_spawn")]
private void cmdSpawn(ConsoleSystem.Arg arg)
{
if (arg.Player() != null)
if (!arg.Player().IsAdmin)
return;
if (arg.Args.IsNullOrEmpty())
return;
var prefabname = String.Join(" ", arg.Args);
var baseEntity = GameManager.server.CreateEntity(prefabname);
if (baseEntity)
{
if (baseEntity.TryGetComponent<CH47HelicopterAIController>(out var ch47))
{
ch47.TriggeredEventSpawn();
}
if (baseEntity.TryGetComponent<CargoShip>(out var cargo))
{
cargo.TriggeredEventSpawn();
}
baseEntity.Spawn();
}
}
#region Event List
static readonly EventSettings RandomStartEv = new EventSettings()
{
displayName = "RANDOM START"
};//
#region Data
private void SaveData()
{
var eventlistb = EventList.ToDictionary(p => $"{p.Key.Name}|{p.Key.Color}|{Guid.NewGuid().ToString()}", p => p.Value);
Interface.Oxide.DataFileSystem.WriteObject($"{Title}/events", eventlistb);
}
private void TryCreateNewDataFile()
{
if (EventList.IsNullOrEmpty())
{
EventList = new Dictionary<AuthorName, List<EventSettings>>()
{
[new AuthorName()
{
Name = "Facepunch",
Color = "1 1 1 1"
}] = new List<EventSettings>()
{
new EventSettings()
{
displayName = "Helicopter",
Command = "em_spawn assets/prefabs/npc/patrol helicopter/patrolhelicopter.prefab",
},
new EventSettings()
{
displayName = "Cargoship",
Command = "em_spawn assets/content/vehicles/boats/cargoship/cargoshiptest.prefab",
},
new EventSettings()
{
displayName = "Airdrop",
Command = "em_spawn assets/prefabs/misc/supply drop/supply_drop.prefab",
},
new EventSettings()
{
displayName = "Chinook 47",
Command = "em_spawn assets/prefabs/npc/ch47/ch47scientists.entity.prefab",
},
},
[new AuthorName()
{
Name = "KpucTaJl",
Color = "0.733 0.122 0.004 1.00"
}] = new List<EventSettings>()
{
new EventSettings()
{
displayName = "Air Event",
Command = "airstart",
},
new EventSettings()
{
displayName = "Water Event",
Command = "waterstart ",
},
new EventSettings()
{
displayName = "Arctic Base Event",
Command = "abstart",
},
new EventSettings()
{
displayName = "Satellite Dish Event",
Command = "satdishstart",
},
new EventSettings()
{
displayName = "Junkyard Event",
Command = "jstart",
},
new EventSettings()
{
displayName = "Power Plant Event",
Command = "ppstart",
},
new EventSettings()
{
displayName = "Harbor Event",
Command = "harborstart",
},
new EventSettings()
{
displayName = "Squid Game",
Command = "rlglstart",
},
},
[new AuthorName()
{
Name = "KpucTaJl",
Color = "0.733 0.122 0.004 1.00"
}] = new List<EventSettings>()
{
new EventSettings()
{
displayName = "GasStation Event",
Command = "gsstart",
},
new EventSettings()
{
displayName = "Defendable-Bases Start",
Command = "warstart",
},
new EventSettings()
{
displayName = "Defendable-Bases Stop",
Command = "warstop",
},
},
[new AuthorName()
{
Name = "Adem",
Color = "0.424 0.000 0.988 1.00"
}] = new List<EventSettings>()
{
new EventSettings()
{
displayName = "Sputnik",
Command = "sputnikstart",
},
new EventSettings()
{
displayName = "Armored Train",
Command = "atrainstart",
},
new EventSettings()
{
displayName = "Space",
Command = "spacestart",
},
new EventSettings()
{
displayName = "Convoy",
Command = "convoystart",
},
new EventSettings()
{
displayName = "Shipwreck",
Command = "shipwreckstart ",
},
},
[new AuthorName()
{
Name = "Mercury",
Color = "1.000 0.573 0.000 1.00"
}] = new List<EventSettings>()
{
new EventSettings()
{
displayName = "IQSphereEvent",
Command = "iqsp start",
},
},
[new AuthorName()
{
Name = "DezLife",
Color = "0.659 1.000 0.000 1.00"
}] = new List<EventSettings>()
{
new EventSettings()
{
displayName = "Cobalt Laboratory",
Command = "cl start",
},
new EventSettings()
{
displayName = "XDChinookEvent",
Command = "chinook call",
},
},
[new AuthorName()
{
Name = "Cashr",
Color = "0.000 0.224 0.863 1.00"
}] = new List<EventSettings>()
{
new EventSettings()
{
displayName = "Rocket Event",
Command = "rocket ||",
},
},
[new AuthorName()
{
Name = "Nikedemos",
Color = "1.000 0.000 0.600 1.00"
}] = new List<EventSettings>()
{
new EventSettings()
{
displayName = "CargoTrainEvent",
Command = "trainevent_now",
},
},
[new AuthorName()
{
Name = "Ridamees",
Color = "0.071 0.478 0.059 1.00"
}] = new List<EventSettings>()
{
new EventSettings()
{
displayName = "Stone Eventt",
Command = "StoneStart",
},
new EventSettings()
{
displayName = "Metal Event",
Command = "MetalStart",
},
new EventSettings()
{
displayName = "Sulfur Event",
Command = "SulfurStart",
},
new EventSettings()
{
displayName = "RaidRush Event",
Command = "raidrush.start",
},
new EventSettings()
{
displayName = "BarrelBash Event",
Command = "StartBarrelBash",
},
new EventSettings()
{
displayName = "BoxBattle Event",
Command = "StartBoxBattle",
},
},
[new AuthorName()
{
Name = "Fruster",
Color = "0.455 0.106 0.059 1.00"
}] = new List<EventSettings>()
{
new EventSettings()
{
displayName = "CargoPlaneEvent",
Command = "callcargoplane",
},
new EventSettings()
{
displayName = "AirfieldEvent",
Command = "afestart",
},
new EventSettings()
{
displayName = "HelipadEvent",
Command = "hpestart",
},
},
[new AuthorName()
{
Name = "Bazz3l",
Color = "0.075 0.682 0.925 1.00"
}] = new List<EventSettings>()
{
new EventSettings()
{
displayName = "GuardedCrate Easy",
Command = "gcrate start Easy",
},
new EventSettings()
{
displayName = "GuardedCrate Medium",
Command = "gcrate start Medium",
},
new EventSettings()
{
displayName = "GuardedCrate Hard",
Command = "gcrate start Hard",
},
new EventSettings()
{
displayName = "GuardedCrate Elite",
Command = "gcrate start Elite",
},
},
[new AuthorName()
{
Name = "Nivex",
Color = "0.949 0.651 0.996 1.00"
}] = new List<EventSettings>()
{
new EventSettings()
{
displayName = "Dangerous Treasures",
Command = "dtevent",
},
new EventSettings()
{
displayName = "RaidableBases Easy",
Command = "rbevent easy",
},
new EventSettings()
{
displayName = "RaidableBases Medium",
Command = "rbevent easy",
},
new EventSettings()
{
displayName = "RaidableBases Hard",
Command = "rbevent easy",
},
new EventSettings()
{
displayName = "RaidableBases Nightmare",
Command = "rbevent easy",
},
},
[new AuthorName()
{
Name = "Dana",
Color = "0.698 0.024 0.678 1.00"
}] = new List<EventSettings>()
{
new EventSettings()
{
displayName = "Heli Regular",
Command = "heli.call Regular",
},
new EventSettings()
{
displayName = "Heli Millitary",
Command = "heli.call Millitary",
},
new EventSettings()
{
displayName = "Heli Elite",
Command = "heli.call Elite",
},
},
[new AuthorName()
{
Name = "Razor",
Color = "0.243 0.204 0.690 1.00"
}] = new List<EventSettings>()
{
new EventSettings()
{
displayName = "Jet Event",
Command = "jet event 2 2 10",
},
},
[new AuthorName()
{
Name = "ThePitereq",
Color = "0.851 0.612 0.208 1.00"
}] = new List<EventSettings>()
{
new EventSettings()
{
displayName = "Meteor-Event-Kill",
Command = "ms kill",
},
new EventSettings()
{
displayName = "Meteor-Event-Start-Amount-10",
Command = "ms run 10",
},
new EventSettings()
{
displayName = "Meteor-Event-Start-Amount-20",
Command = "ms run 20",
},
new EventSettings()
{
displayName = "Meteor-Event-Start-Amount-30",
Command = "ms run 30",
},
new EventSettings()
{
displayName = "Meteor-Event-Start-Amount-40",
Command = "ms run 40",
},
new EventSettings()
{
displayName = "Meteor-Event-Start-Amount-50",
Command = "ms run 50",
},
},
[new AuthorName()
{
Name = " k1lly0u",
Color = "0.455 0.106 0.159 1.00"
}] = new List<EventSettings>()
{
new EventSettings()
{
displayName = "PilotEjec",
Command = "pe call",
},
new EventSettings()
{
displayName = "HeliRefuel",
Command = "hr call",
},
},
[new AuthorName()
{
Name = "Wrecks",
Color = "0.561 0.498 0.718 1.00"
}] = new List<EventSettings>()
{
new EventSettings()
{
displayName = "Bot-Purge-Event",
Command = "Purge",
},
new EventSettings()
{
displayName = "Eradication Event",
Command = "Erad",
},
}
};
SaveData();
}
}
void LoadData()
{
var EventListb = Interface.Oxide?.DataFileSystem?.ReadObject<Dictionary<string, List<EventSettings>>>($"{Title}/events")
?? new Dictionary<string, List<EventSettings>>();
EventList = EventListb.ToDictionary(p => new AuthorName(p.Key.Split('|')[0], p.Key.Split('|')[1]),
p => p.Value);
TryCreateNewDataFile();
}
#endregion
static Dictionary<AuthorName, List<EventSettings>> EventList = new Dictionary<AuthorName, List<EventSettings>>();
static EventSettings GetEventByName(string name)
{
if (name == "RANDOM START")
return RandomStartEv;
foreach (var events in EventList.Values)
{
foreach (var setting in events)
{
if (setting.displayName == name)
{
return setting;
}
}
}
return null;
}
#endregion
#region Configuration
static Configuration config;
class Configuration
{
[JsonProperty(PropertyName = "Time Entries", ObjectCreationHandling = ObjectCreationHandling.Replace)]
public Dictionary<string, EventSettingsEntry> Entries = new Dictionary<string, EventSettingsEntry>();
}
protected override void LoadConfig()
{
base.LoadConfig();
try
{
config = Config.ReadObject<Configuration>();
if (config == null)
{
throw new Exception();
}
SaveConfig();
}
catch
{
PrintError("Your configuration file contains an error.Using default configuration values.");
LoadDefaultConfig();
}
}
protected override void SaveConfig()
{
Config.WriteObject(config);
}
protected override void LoadDefaultConfig()
{
config = new Configuration();
}
#endregion
#region Types
internal class AuthorName
{
public AuthorName(){}
public AuthorName(string name, string color)
{
this.Name = name;
this.Color = color;
}
public string Name;
public string Color;
}
internal class EventSettings
{
[JsonProperty(PropertyName = "Event name", ObjectCreationHandling = ObjectCreationHandling.Replace)]
public string displayName = "Air Event";
[JsonProperty(PropertyName = "The command to launch the event", ObjectCreationHandling = ObjectCreationHandling.Replace)]
public string Command = "airevent start";
[JsonProperty(PropertyName = "Color", ObjectCreationHandling = ObjectCreationHandling.Replace)]
public string Color = "0.1 0.1 0.1 0.95";
}
internal class EventSettingsEntry
{
public string GUID = "";
public string Name = "";
public bool StaticTime = true;
public int Hour = 12;
public int Minute = 30;
public int MinPlayers = 0;
public DateTime LastRun;
public Dictionary<int, bool> DaysActive = new Dictionary<int, bool>()
{
[1] = false,
[2] = false,
[3] = false,
[4] = false,
[5] = false,
[6] = false,
[0] = false,
};
public List<string> RandomStartEvents = new List<string>();
public string PrevStartedEv = "";
public EventSettingsEntry(string guid, string name)
{
GUID = guid;
Name = name;
}
public static string NewEntry(string name)
{
var guid = Guid.NewGuid().ToString();
config.Entries.Add(guid, new EventSettingsEntry(guid, name));
return guid;
}
}
class EventController : FacepunchBehaviour
{
private void Awake()
{
InvokeRepeating(CheckEvents, 5, 5);
}
private List<string> ExecutedEvents = new();
private void CheckEvents()
{
var date = DateTime.Now;
var day = Convert.ToInt32(date.DayOfWeek);
var hour = date.Hour;
var minute = date.Minute;
foreach (var entry in config.Entries.Values)
{
if (!entry.StaticTime)
{
continue;
}
if (!entry.DaysActive[day])
{
continue;
}
if (entry.Hour == hour && entry.Minute == minute)
{
if (entry.LastRun.Minute == minute && entry.LastRun.Hour == hour && entry.LastRun.DayOfWeek == date.DayOfWeek)
continue;
entry.LastRun = date;
if (BasePlayer.activePlayerList.Count < entry.MinPlayers)
continue;
if (entry.Name == "RANDOM START" && entry.RandomStartEvents.Count > 0)
{
// var events = new List<string>();
// events.AddRange(entry.RandomStartEvents.Where(x => x != entry.PrevStartedEv));
// events.Shuffle((uint)UnityEngine.Random.Range(1, 1000000000));
//
// var evToRun = events.GetRandom();
// if(entry.RandomStartEvents.Count > 1)
// {
// while (evToRun == entry.PrevStartedEv)
// evToRun = events.GetRandom();
// }
var validEvents = entry.RandomStartEvents.Where(e => !ExecutedEvents.Contains(e)).ToArray();
if (validEvents.IsNullOrEmpty())
{
if (ExecutedEvents.IsNullOrEmpty())
{
Instance.PrintError("Not founded events to start!");
return;
}
ExecutedEvents.Clear();
CheckEvents();
return;
}
int index = new System.Random().Next(validEvents.Length);
var evToRun = validEvents[index];
ExecutedEvents.Add(evToRun);
entry.PrevStartedEv = evToRun;
Instance.rust.RunServerCommand(GetEventByName(evToRun).Command);
Instance.CallStartedHook(GetEventByName(evToRun).displayName);
continue;
}
Instance.rust.RunServerCommand(GetEventByName(entry.Name).Command);
Instance.CallStartedHook(GetEventByName(entry.Name).displayName);
}
}
foreach (var entry in config.Entries.Values)
{
if (entry.StaticTime)
{
continue;
}
if (!entry.DaysActive[day])
{
continue;
}
if ((date - entry.LastRun).TotalMinutes > ((entry.Hour * 60) + entry.Minute))
{
if (entry.LastRun.Minute == minute && entry.LastRun.Hour == hour && entry.LastRun.DayOfWeek == date.DayOfWeek)
continue;
entry.LastRun = date;
if (BasePlayer.activePlayerList.Count < entry.MinPlayers)
continue;
if (entry.Name == "RANDOM START" && entry.RandomStartEvents.Count > 0)
{
var validEvents = entry.RandomStartEvents.Where(e => !ExecutedEvents.Contains(e)).ToArray();
if (validEvents.IsNullOrEmpty())
{
if (ExecutedEvents.IsNullOrEmpty())
{
Instance.PrintError("Not founded events to start!");
return;
}
ExecutedEvents.Clear();
CheckEvents();
return;
}
int index = new System.Random().Next(validEvents.Length);
var evToRun = validEvents[index];
ExecutedEvents.Add(evToRun);
// var evToRun = entry.RandomStartEvents.GetRandom();
// while(evToRun == entry.PrevStartedEv && entry.RandomStartEvents.Count > 1)
// evToRun = entry.RandomStartEvents.GetRandom();
entry.PrevStartedEv = evToRun;
Instance.rust.RunServerCommand(GetEventByName(evToRun).Command);
Instance.CallStartedHook(GetEventByName(evToRun).displayName);
continue;
}
Instance.rust.RunServerCommand(GetEventByName(entry.Name).Command);
Instance.CallStartedHook(GetEventByName(entry.Name).displayName);
}
}
}
}
#endregion
#region Oxide Hooks
void Init()
{
Instance = this;
}
void OnServerInitialized()
{
LoadData();
permission.RegisterPermission(USE_PERMISSION, this);
timer.Once(3f, () =>
{
controller = ServerMgr.Instance.gameObject.AddComponent<EventController>();
});
}
private void OnServerSave() => SaveData();
void Unload()
{
SaveData();
SaveConfig();
UnityEngine.Object.DestroyImmediate(controller);
Instance = null;
}
private Vector3 GetRandomSpawnPosCh47(){return TerrainMeta.RandomPointOffshore();}
#endregion
#region UI
internal class NewEventData
{
public string Name;
public string Command;
public AuthorName Author;
public EventSettings ToEntry()
{
var entry = new EventSettings
{
displayName = Name,
Command = Command,
Color = "0.1 0.1 0.1 0.95"
};
return entry;
}
}
private Dictionary<ulong, NewEventData> _creatingEvents = new Dictionary<ulong, NewEventData>();
private const string Layer = "ui.EventManager.bg";
[ConsoleCommand("em_createconfirm")]
private void cmdCreateConfirm(ConsoleSystem.Arg arg)
{
if (arg.Player() == null)
return;
if (!arg.Player().IPlayer.HasPermission(USE_PERMISSION))
return;
if (!_creatingEvents.ContainsKey(arg.Player().userID))
return;
var e = _creatingEvents[arg.Player().userID];
EventList[e.Author].Add(e.ToEntry());
_creatingEvents.Remove(arg.Player().userID);
SaveData();
CuiHelper.DestroyUi(arg.Player(), Layer);
}
[ConsoleCommand("em_cancelcreate")]
private void cmdCancelCreate(ConsoleSystem.Arg arg)
{
if (arg.Player() == null)
return;
if (!arg.Player().IPlayer.HasPermission(USE_PERMISSION))
return;
_creatingEvents.Remove(arg.Player().userID);
CuiHelper.DestroyUi(arg.Player(), Layer);
}
[ConsoleCommand("em_setname")]
private void cmdSetName(ConsoleSystem.Arg arg)
{
if (arg.Player() == null)
return;
if (!arg.Player().IPlayer.HasPermission(USE_PERMISSION))
return;
if (!_creatingEvents.TryGetValue(arg.Player().userID, out var ev))
return;
ev.Name = string.Join(" ", arg.Args);
}
[ConsoleCommand("em_setcommand")]
private void cmdSetCommand(ConsoleSystem.Arg arg)
{
if (arg.Player() == null)
return;
if (!arg.Player().IPlayer.HasPermission(USE_PERMISSION))
return;
if (!_creatingEvents.TryGetValue(arg.Player().userID, out var ev))
return;
ev.Command = string.Join(" ", arg.Args);
}
[ConsoleCommand("em_setauthor")]
private void cmdSetAuthor(ConsoleSystem.Arg arg)
{
if (arg.Player() == null)
return;
if (!arg.Player().IPlayer.HasPermission(USE_PERMISSION))
return;
if (!_creatingEvents.TryGetValue(arg.Player().userID, out var ev))
return;
ev.Author = EventList.Select(x => x.Key).FirstOrDefault(x => x.Name.Contains(arg.Args[0]))!;
CuiHelper.DestroyUi(arg.Player(), Layer + ".eventcreator.div");
UI_UpdateCreator(arg.Player());
}
[ConsoleCommand("em_drawcreators")]
private void cmdDrawCreators(ConsoleSystem.Arg arg)
{
if (arg.Player() == null)
return;
UI_DrawCreators(arg.Player());
}
private void UI_UpdateCreator(BasePlayer player)
{
var container = new CuiElementContainer();
if (!_creatingEvents.TryGetValue(player.userID, out var ev))
return;
container.Add(new CuiButton
{
Button = { Color = "0.8078431 0.7803922 0.7411765 0.6588235", Command = "em_drawcreators"},
Text =
{
Text = ev.Author?.Name ?? "Choose event creator...", Font = "robotocondensed-bold.ttf", FontSize = 21,
Align = TextAnchor.MiddleCenter, Color = ev.Author?.Color ?? "0.1 0.1 0.1 0.95"//
},
RectTransform =
{
AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-62.243 95.069",
OffsetMax = "172.248 130.901"
}
}, Layer, Layer + ".eventcreator");
CuiHelper.DestroyUi(player, Layer + ".eventcreator");
CuiHelper.AddUi(player, container);
}
private void UI_DrawCreators(BasePlayer player)
{
var container = new CuiElementContainer();
container.Add(new CuiPanel
{
CursorEnabled = false,
Image = { Color = "0.8078431 0.7803922 0.7411765 0" },
RectTransform =
{
AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-62.242 58.184",
OffsetMax = "172.248 94.016"
}
}, Layer, Layer + ".eventcreator.div");
float minx = -117.245f;
float maxx = 117.245f;
float miny = -17.91578f;
float maxy = 5.91522f;
int i = 0;
foreach (var x in EventList.Where(x => x.Value.Count < 8).Select(x => x.Key))
{
container.Add(new CuiButton
{
Button = { Color = "0.8078431 0.7803922 0.7411765 0.6588235", Command = $"em_setauthor {x.Name}" },
Text =
{
Text = x.Name, Font = "robotocondensed-regular.ttf", FontSize = 14,
Align = TextAnchor.MiddleCenter, Color = x.Color
},
RectTransform =
{
AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = $"{minx} {miny}",
OffsetMax = $"{maxx} {maxy}"
}
}, Layer + ".eventcreator.div", $"creator.{i}");
i++;
miny -= 25.04f;
maxy -= 25.04f;
}
CuiHelper.DestroyUi(player, Layer + ".eventcreator.div");
CuiHelper.AddUi(player, container);
}
private void UI_DrawCreateNewEvent(BasePlayer player)
{
_creatingEvents.Remove(player.userID);
_creatingEvents.Add(player.userID, new NewEventData());
var container = new CuiElementContainer();
container.Add(new CuiPanel
{
CursorEnabled = true,
Image = { Color = "0.317 0.317 0.317 0.7490196" },
RectTransform =
{
AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-353.394 -207.674",
OffsetMax = "353.394 207.674"
}
}, "Overlay", Layer);
container.Add(new CuiElement
{
Name = Layer + ".label",
Parent = Layer,
Components =
{
new CuiTextComponent
{
Text = "NEW EVENT", Font = "robotocondensed-bold.ttf", FontSize = 23,
Align = TextAnchor.MiddleLeft, Color = "0.6470588 0.6235294 0.6 1"
},
new CuiRectTransformComponent
{
AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-344 167.364",
OffsetMax = "-188.991 200.636"
}
}
});
container.Add(new CuiPanel
{
CursorEnabled = false,
Image = { Color = "0.8078431 0.7803922 0.7411765 0.6588235" },
RectTransform =
{
AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-344 95.069", OffsetMax = "-93.687 130.9"
}
}, Layer, Layer + ".name.bg");
container.Add(new CuiElement
{
Name = Layer + ".name.bg" + ".name.input",
Parent = Layer + ".name.bg",
Components =
{
new CuiInputFieldComponent
{
Color = "1 1 1 1", Font = "robotocondensed-bold.ttf", FontSize = 18, Align = TextAnchor.MiddleCenter,
CharsLimit = 0, IsPassword = false, Text = "Enter event name...", Command = "em_setname "
},
new CuiRectTransformComponent
{
AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-125.155 -17.916",
OffsetMax = "125.155 17.916"
}
}
});
container.Add(new CuiPanel
{
CursorEnabled = false,
Image = { Color = "0.8078431 0.7803922 0.7411765 0.6588235" },
RectTransform =
{
AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-344 44.584",
OffsetMax = "-93.687 80.416"
}
}, Layer, Layer + ".command.bg");
container.Add(new CuiElement
{
Name = Layer + ".command.bg" + ".input",
Parent = Layer + ".command.bg",
Components =
{
new CuiInputFieldComponent
{
Color = "1 1 1 1", Font = "robotocondensed-bold.ttf", FontSize = 18, Align = TextAnchor.MiddleCenter,
CharsLimit = 0, IsPassword = false, Text = "Enter command...", Command = "em_setcommand "
},
new CuiRectTransformComponent
{
AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-125.155 -17.916",
OffsetMax = "125.155 17.916"
}
}
});
container.Add(new CuiButton
{
Button = { Color = "0.3882353 0.3960785 0.3098039 1", Command = "em_createconfirm"},
Text =
{
Text = "CREATE", Font = "robotocondensed-bold.ttf", FontSize = 22, Align = TextAnchor.MiddleCenter,
Color = "0.8078431 0.8431373 0.5490196 1"
},
RectTransform =
{
AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "237.359 -198.4",
OffsetMax = "346.2 -165.34"
}
}, Layer, Layer + ".create.btn");
container.Add(new CuiButton
{
Button = { Color = "0.4078432 0.3372549 0.3019608 1", Command = "em_cancelcreate" },
Text =
{
Text = "CANCEL", Font = "robotocondensed-bold.ttf", FontSize = 22, Align = TextAnchor.MiddleCenter,
Color = "0.8156863 0.5568628 0.4745098 1"
},
RectTransform =
{
AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "121.179 -198.4",
OffsetMax = "230.021 -165.34"
}
}, Layer, Layer + ".delete.btn");
CuiHelper.DestroyUi(player, Layer);
CuiHelper.AddUi(player, container);
UI_UpdateCreator(player);
}
[ConsoleCommand("em.closecreatingevent")]
private void cmdCloseCreatingEvent(ConsoleSystem.Arg arg)
{
if (arg.Player() == null)
return;
CuiHelper.DestroyUi(arg.Player(), Layer);
_creatingEvents.Remove(arg.Player().userID);
}
private void ShowMainUI(BasePlayer player, int page = 1, string title = "EVENT MANAGER", bool showRandom = true, string command = SELECT_CCMD)
{
var parsedCommand = string.Join(" ", command.Split(':'));
var container = new CuiElementContainer();
container.Add(new CuiElement
{
Name = SELECT_CUI_NAME,
Parent = "Overlay",
Components =
{
new CuiImageComponent
{
Color = "0 0 0 0.7254902",
Material = "assets/content/ui/uibackgroundblur-ingamemenu.mat",
},
new CuiNeedsCursorComponent(),
new CuiRectTransformComponent
{
AnchorMin = "0.5 0.5",
AnchorMax = "0.5 0.5",
OffsetMin = "-485.471 -287.535",
OffsetMax = "485.463 287.535"
}
}
});
container.Add(new CuiElement
{
Name = SELECT_CUI_NAME + "_Bar",
Parent = SELECT_CUI_NAME,
Components =
{
new CuiImageComponent
{
Color = "1 1 1 1"
},
new CuiRectTransformComponent
{
AnchorMin = "0 0.5",
AnchorMax = "1 0.5",
OffsetMin = "15 226",
OffsetMax = "-15 230"
}
}
});
container.Add(new CuiElement
{
Name = SELECT_CUI_NAME + "_Title",
Parent = SELECT_CUI_NAME,
Components =
{
new CuiTextComponent
{
Text = title,
Font = "robotocondensed-bold.ttf",
FontSize = 24,
Align = TextAnchor.MiddleLeft,
Color = "1 1 1 1"
},
new CuiRectTransformComponent
{
AnchorMin = "0 0.5",
AnchorMax = "1 0.5",
OffsetMin = "15 237.2",
OffsetMax = "15 284.54"
}
}
});
if (showRandom)
{
container.Add(new CuiElement
{
Name = SELECT_CUI_NAME + "_RandomStart",
Parent = SELECT_CUI_NAME,
Components =
{
new CuiButtonComponent
{
Color = "0.1 0.1 0.1 0.95",
Material = "assets/content/ui/uibackgroundblur-ingamemenu.mat",
FadeIn = 0.1f,
Command = $"{SELECT_CCMD} RANDOM START",
},
new CuiRectTransformComponent
{
AnchorMin = "0.5 1",
AnchorMax = "0.5 1",
OffsetMin = "-75 -50",
OffsetMax = "75 -10"
}
}
});
container.Add(new CuiElement
{
Name = SELECT_CUI_NAME + "_RandomStart_Text",
Parent = SELECT_CUI_NAME + "_RandomStart",
Components =
{
new CuiTextComponent
{
Text = "Random Start",
FontSize = 20,
FadeIn = 0.2f,
Font = "robotocondensed-regular.ttf",
Align = TextAnchor.MiddleCenter
}
}
});
}
container.Add(new CuiElement
{
Name = SELECT_CUI_NAME + "_CloseBtn",
Parent = SELECT_CUI_NAME,
Components =
{
new CuiButtonComponent
{
Color = "0.5849056 0.2615521 0.2615521 1",
Close = SELECT_CUI_NAME
},
new CuiRectTransformComponent
{
AnchorMin = "1 1",
AnchorMax = "1 1",
OffsetMin = "-40 -40",
OffsetMax = "-15 -15"
}
}
});
container.Add(new CuiElement
{
Name = SELECT_CUI_NAME + "_CloseBtn_Text",
Parent = SELECT_CUI_NAME + "_CloseBtn",
Components =
{
new CuiTextComponent
{
// ... [Code preview truncated due to length. Full source in attached file] ...