C#:
using Newtonsoft.Json;
using Oxide.Core;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using Oxide.Core.Configuration;
using Oxide.Core.Libraries.Covalence;
using System;
using System.IO;
using System.Linq;
using System.Collections.Generic;
using UnityEngine;
namespace Oxide.Plugins {
[Info("WelcomePanel", "Sempai#3239", "3.0.7")]
[Description("Welcome Panel")]
public class WelcomePanel : RustPlugin {
#region [Dependencies]
[PluginReference]
Plugin ImageLibrary, WPKits, WPSocialLinks, WPVipRanks, WPWipeCycle, VoteMap;
private void DependencyWarnings() {
timer.Once(1f, () => {
if (ImageLibrary == null) Puts($"(! MISSING) ImageLibrary not found, image load speed will be significantly slower.");
string loadedAddons = LoadedAddons();
if (loadedAddons != null) Puts($"(ADDONS LOADED){loadedAddons}");
string addonsAvailable = AvailableAddons();
if (addonsAvailable != null) Puts($"(NOT FOUND){addonsAvailable}");
}
);
}
private string LoadedAddons() {
string addonsLoaded = null;
if (WPKits != null) addonsLoaded = addonsLoaded + " WPKits,";
if (WPSocialLinks != null) addonsLoaded = addonsLoaded + " WPSocialLinks,";
if (WPVipRanks != null) addonsLoaded = addonsLoaded + " WPVipRanks,";
if (WPWipeCycle != null) addonsLoaded = addonsLoaded + " WPWipeCycle,";
if (VoteMap != null) addonsLoaded = addonsLoaded + " VoteMap";
return addonsLoaded;
}
private string AvailableAddons() {
string addonsAvailable = null;
if (WPKits == null) addonsAvailable = addonsAvailable + " WPKits,";
if (WPSocialLinks == null) addonsAvailable = addonsAvailable + " WPSocialLinks,";
if (WPVipRanks == null) addonsAvailable = addonsAvailable + " WPVipRanks,";
if (WPWipeCycle == null) addonsAvailable = addonsAvailable + " WPWipeCycle,";
if (VoteMap == null) addonsAvailable = addonsAvailable + " VoteMap";
return addonsAvailable;
}
#region API Calls
private void OpenAddOn_API(BasePlayer player, string _apiName) {
if(_apiName == "WPKits") {
WPKits.CallHook("ShowKits_Page1_API", player);
return;
}
if(_apiName == "WPSocialLinks") {
WPSocialLinks.CallHook("ShowLinks_API", player);
return;
}
if(_apiName == "WPVipRanks") {
WPVipRanks.CallHook("ShowVipRanks_API", player);
return;
}
if(_apiName == "WPWipeCycle") {
WPWipeCycle.CallHook("ShowWipeCycle_API", player);
return;
}
if(_apiName == "VoteMap") {
VoteMap.CallHook("ContentCui", player, 1, 0, true);
return;
}
}
private void CloseAddOn_API(BasePlayer player) {
if (WPKits != null) WPKits.CallHook("CloseKits_API", player);
if (WPSocialLinks != null) WPSocialLinks.CallHook("CloseLinks_API", player);
if (WPVipRanks != null) WPVipRanks.CallHook("CloseVip_API", player);
if (WPWipeCycle != null) WPWipeCycle.CallHook("CloseWipeCycle_API", player);
}
#endregion
#endregion
#region [Fields]
private List<string> cuiList = new List<string>() {
"background", "background2", "offsetContainer", "mainPanel", "sidePanel", "titlePanel", "logoPanel", "closeButton", "contentPanel", "highlightBtn", "menuBtn1", "menuBtn2", "menuBtn3", "menuBtn4", "menuBtn5", "menuBtn6", "menuBtn7", "menuBtn8", "menuBtn9", "menuBtn10", "nextButton", "previousButton"
}
;
private List<string> tabList = new List<string>() {
"Tab1", "Tab2", "Tab3", "Tab4", "Tab5", "Tab6", "Tab7", "Tab8", "Tab9", "Tab10"
}
;
private Dictionary<ulong, bool> isPlayerEditing = new Dictionary<ulong, bool>();
private string panelNameEdit = null;
private int anchor = 0;
private float moveValue = 0.01f;
#endregion
#region [Hooks]
private void OnServerInitialized() {
PrintWarning("\n-----------------------------\n" + " Author - Sempai#3239\n" + " VK - https://vk.com/rustnastroika/n" + " Forum - https://whiteplugins.ru/n" + " Discord - https://discord.gg/5DPTsRmd3G/n" + "-----------------------------");
LoadData();
LoadPresetData();
LoadPageData();
LoadConfig();
WriteCuiEntry();
WritePageEntry();
DependencyWarnings();
RegisterCommands();
RegisterPerms();
//SetPresetValues(5);
DownloadImages();
foreach (var _player in BasePlayer.activePlayerList) {
if (!_player.IsAdmin) return;
WriteAdminEntry(_player);
}
//{CreateCui(_player); CreateTab(_player, 1, 1);}
}
private void OnPlayerConnected(BasePlayer player) {
WriteAdminEntry(player);
if (config.generalSettings.openOnConnect && presetData[$"{Name}"].presetInit) {
if (config.generalSettings.openOnce) {
if (!presetData[$"{Name}"].seen.Contains(player.userID)) {
presetData[$"{Name}"].seen.Add(player.userID);
SavePresetData();
CreateCui(player, true);
CreateTab(player, config.generalSettings.openTab, 1);
return;
}
else return;
}
CreateCui(player, true);
CreateTab(player, config.generalSettings.openTab, 1);
}
}
void OnPlayerDisconnected(BasePlayer player) => BlockInput(player, false);
private void OnNewSave() {
presetData[$"{Name}"].seen.Clear();
SavePresetData();
}
private void Unload() {
foreach (var _player in BasePlayer.activePlayerList) {
DestroyCui(_player);
DestroyEditPanelUi(_player);
CuiHelper.DestroyUi(_player, "l_offsetContainer");
CuiHelper.DestroyUi(_player, "l_background");
CloseAddOn_API(_player);
DestroyPopUi(_player);
}
}
#endregion
#region [Image Handling]
private void DownloadImages() {
if (ImageLibrary == null) return;
//image from data
foreach (string element in cuiData.Keys) {
if (CI(element)) ImageLibrary.Call("AddImage", cuiData[element].image, element);
}
//images from config
//📝"Could have been solved better but customers got used to old config file so I didnt want to change it."
if (config.tab1Settings.tabImageUrl.StartsWith("http") || config.tab1Settings.tabImageUrl.StartsWith("www")) ImageLibrary.Call("AddImage", config.tab1Settings.tabImageUrl, "tab1bg");
if (config.tab2Settings.tabImageUrl.StartsWith("http") || config.tab2Settings.tabImageUrl.StartsWith("www")) ImageLibrary.Call("AddImage", config.tab2Settings.tabImageUrl, "tab2bg");
if (config.tab3Settings.tabImageUrl.StartsWith("http") || config.tab3Settings.tabImageUrl.StartsWith("www")) ImageLibrary.Call("AddImage", config.tab3Settings.tabImageUrl, "tab3bg");
if (config.tab4Settings.tabImageUrl.StartsWith("http") || config.tab4Settings.tabImageUrl.StartsWith("www")) ImageLibrary.Call("AddImage", config.tab4Settings.tabImageUrl, "tab4bg");
if (config.tab5Settings.tabImageUrl.StartsWith("http") || config.tab5Settings.tabImageUrl.StartsWith("www")) ImageLibrary.Call("AddImage", config.tab5Settings.tabImageUrl, "tab5bg");
if (config.tab6Settings.tabImageUrl.StartsWith("http") || config.tab6Settings.tabImageUrl.StartsWith("www")) ImageLibrary.Call("AddImage", config.tab6Settings.tabImageUrl, "tab6bg");
if (config.tab7Settings.tabImageUrl.StartsWith("http") || config.tab7Settings.tabImageUrl.StartsWith("www")) ImageLibrary.Call("AddImage", config.tab7Settings.tabImageUrl, "tab7bg");
if (config.tab8Settings.tabImageUrl.StartsWith("http") || config.tab8Settings.tabImageUrl.StartsWith("www")) ImageLibrary.Call("AddImage", config.tab8Settings.tabImageUrl, "tab8bg");
if (config.tab9Settings.tabImageUrl.StartsWith("http") || config.tab9Settings.tabImageUrl.StartsWith("www")) ImageLibrary.Call("AddImage", config.tab9Settings.tabImageUrl, "tab9bg");
if (config.tab10Settings.tabImageUrl.StartsWith("http") || config.tab10Settings.tabImageUrl.StartsWith("www")) ImageLibrary.Call("AddImage", config.tab10Settings.tabImageUrl, "tab10bg");
//my images
ImageLibrary.Call("AddImage", "https://rustplugins.net/products/welcomepanel/keyicons.png", "wasd_panelsText3");
ImageLibrary.Call("AddImage", "https://rustplugins.net/products/welcomepanel/mouseicon.png", "mouse_panelsText3");
ImageLibrary.Call("AddImage", "https://rustplugins.net/products/welcomepanel/Rkeyicon.png", "back_panelsText3");
//wp layouts
ImageLibrary.Call("AddImage", "https://rustplugins.net/products/welcomepanel/empty_template.png", "https://rustplugins.net/products/welcomepanel/empty_template.png");
ImageLibrary.Call("AddImage", "https://rustplugins.net/products/welcomepanel/5/template5.jpg", "https://rustplugins.net/products/welcomepanel/5/template5.jpg");
ImageLibrary.Call("AddImage", "https://rustplugins.net/products/welcomepanel/4/template_4.png", "https://rustplugins.net/products/welcomepanel/4/template_4.png");
ImageLibrary.Call("AddImage", "https://rustplugins.net/products/welcomepanel/3/template3.png", "https://rustplugins.net/products/welcomepanel/3/template3.png");
ImageLibrary.Call("AddImage", "https://rustplugins.net/products/welcomepanel/2/template2.png", "https://rustplugins.net/products/welcomepanel/2/template2.png");
ImageLibrary.Call("AddImage", "https://codefling.com/uploads/monthly_2021_07/2.PNG.393e12443a8a8186523b2dcef616ee0c.PNG", "https://codefling.com/uploads/monthly_2021_07/2.PNG.393e12443a8a8186523b2dcef616ee0c.PNG");
}
private string Img(string name) {
if (ImageLibrary != null) {
if (!(bool) ImageLibrary.Call("HasImage", name)) return cuiData[name].image;
else return (string) ImageLibrary?.Call("GetImage", name);
}
else return cuiData[name].image;
}
private string Img2(int tabNumber) {
string[] images = {
"empty", config.tab1Settings.tabImageUrl, config.tab2Settings.tabImageUrl, config.tab3Settings.tabImageUrl, config.tab4Settings.tabImageUrl, config.tab5Settings.tabImageUrl, config.tab6Settings.tabImageUrl, config.tab7Settings.tabImageUrl, config.tab8Settings.tabImageUrl, config.tab9Settings.tabImageUrl, config.tab10Settings.tabImageUrl
}
;
if (ImageLibrary != null) {
if (!(bool) ImageLibrary.Call("HasImage", $"tab{tabNumber}bg")) return images[tabNumber];
else return (string) ImageLibrary?.Call("GetImage", $"tab{tabNumber}bg");
}
else return images[tabNumber];
}
private string Img3(string url) {
//img url been used as image names
if (ImageLibrary != null) {
if (!(bool) ImageLibrary.Call("HasImage", url)) return url;
else return (string) ImageLibrary?.Call("GetImage", url);
}
else return url;
}
private bool CI(string name) {
if (cuiData[name].image == null) {
return false;
}
else {
if (cuiData[name].image == "") return false;
return true;
}
}
#endregion
#region [Commands]
private void RegisterCommands() {
int count = config.generalSettings.customCommands.Count();
for (int i = 0; i < count; i++) {
cmd.AddChatCommand(config.generalSettings.customCommands[i], this, "Wp_CustomCommands");
}
}
private object Wp_CustomCommands(BasePlayer player, string command, string[] args) {
if (!presetData[$"{Name}"].presetInit) {
SendReply(player, "<size=15>You have to select template first.Please type <color=#cd412b>/wp_template</color>.</size> \n\nChanging template presets will overwrite 'cuiData.json' file, together with button names and title in config file! \nAlways backup your configs!.");
return null;
}
int pageNumber = 1;
if (args.Length > 0) {
if (IsDigitsOnly(args[0])) pageNumber = Convert.ToInt32(args[0]);
}
if (config.generalSettings.customCommands.Contains(command)) {
int index = config.generalSettings.customCommands.IndexOf(command);
int tab = index + 1;
CreateCui(player, true);
CreateTab(player, tab, pageNumber);
}
return null;
}
[ConsoleCommand("welcomepanel_open")]
private void welcomepanel_open(ConsoleSystem.Arg arg) {
var player = arg?.Player();
var args = arg.Args;
if (arg.Player() == null) return;
if (args.Length < 2) return;
int tab = Convert.ToInt32(args[0]);
int page = Convert.ToInt32(args[1]);
DestroyPage(player);
CreateTab(player, tab, page);
}
[ConsoleCommand("welcomepanel_close")]
private void welcomepanel_close(ConsoleSystem.Arg arg) {
var player = arg?.Player();
if (arg.Player() == null) return;
DestroyPage(player);
DestroyCui(player);
CuiHelper.DestroyUi(player, "l_offsetContainer");
CuiHelper.DestroyUi(player, "l_background");
DestroyPopUi(player);
DestroyEditPanelUi(player);
CloseAddOn_API(player);
}
[ConsoleCommand("welcomepanel_editpanel")]
private void welcomepanel_editpanel(ConsoleSystem.Arg arg) {
var player = arg?.Player();
var args = arg.Args;
if (arg.Player() == null) return;
if (args.Length < 1) return;
if (!player.IsAdmin) return;
isPlayerEditing[player.userID] = true;
panelNameEdit = args[0];
DestroyEditPanelUi(player);
CreateCui(player, false);
CreateTab(player, 1, 1);
//Puts($"{isPlayerEditing[player.userID]}");
}
[ConsoleCommand("wp_color")]
private void wp_color(ConsoleSystem.Arg arg) {
var player = arg?.Player();
var args = arg.Args;
if (arg.Player() == null) return;
if (!player.IsAdmin) return;
if (args == null) {
player.ConsoleMessage($"Wrong usage.Example: wp_color \"0.16 0.34 0.49 1.0\" ");
return;
}
if (args.Length > 1) {
player.ConsoleMessage($"Wrong usage.Example: wp_color \"0.16 0.34 0.49 1.0\" ");
return;
}
if (panelNameEdit == null) {
player.ConsoleMessage($"You are not editing any panel currently.Type /wp_edit to start editing");
return;
}
cuiData[panelNameEdit].color = args[0];
SaveData();
player.ConsoleMessage($"{panelNameEdit} color changed to {cuiData[panelNameEdit].color}");
}
[ConsoleCommand("wp_movevalue")]
private void wp_movevalue(ConsoleSystem.Arg arg) {
var player = arg?.Player();
var args = arg.Args;
if (arg.Player() == null) return;
if (args.Length < 1) return;
if (!player.IsAdmin) return;
moveValue = Convert.ToSingle(args[0]);
if (moveValue > 0.3) player.ConsoleMessage($"(!) High value, your panels will move significantly.");
player.ConsoleMessage($"Moving value set to {moveValue}");
}
[ChatCommand("wp_edit")]
private void wp_edit(BasePlayer player) {
if (player == null) return;
if (!player.IsAdmin) return;
CreateEditPanelMenu(player);
}
[ChatCommand("wp_template")]
private void wp_layout(BasePlayer player) {
if (player == null) return;
if (!player.IsAdmin) return;
CreateLayoutMenu(player);
}
[ChatCommand("wp_populatepages")]
private void populatepages(BasePlayer player) {
if (player == null) return;
if (!player.IsAdmin) return;
foreach (string tab in pageData.Keys) {
pageData[tab].page2.Add($"{tab} Page 2");
pageData[tab].page3.Add($"{tab} Page 3");
pageData[tab].page4.Add($"{tab} Page 4");
pageData[tab].page5.Add($"{tab} Page 5");
}
SavePageData();
}
#endregion
#region [Functions & Methods]
private void RegisterPerms() {
if (!config.generalSettings.permsEnabled) return;
for (int i = 1; i < 11; i++) {
permission.RegisterPermission($"welcomepanel.tab{i}", this);
}
}
private bool CheckPerms(BasePlayer player, int tabNumber) {
if (!config.generalSettings.permsEnabled) return true;
if (permission.UserHasPermission(player.UserIDString, $"welcomepanel.tab{tabNumber}")) {
return true;
}
else {
return false;
}
}
private void WriteCuiEntry() {
foreach (string elementName in cuiList) {
if (!cuiData.ContainsKey(elementName)) {
cuiData.Add(elementName, new CuiData());
}
}
SaveData();
}
private void WritePageEntry() {
foreach (string tab in tabList) {
if (!pageData.ContainsKey(tab)) {
pageData.Add(tab, new PageData());
}
}
SavePageData();
}
private void WriteAdminEntry(BasePlayer player) {
if (!player.IsAdmin) return;
if (!isPlayerEditing.ContainsKey(player.userID)) {
isPlayerEditing.Add(player.userID, false);
}
else {
isPlayerEditing[player.userID] = false;
}
}
void OnPlayerInput(BasePlayer player, InputState input) {
if (!player.IsAdmin) return;
if (!isPlayerEditing.ContainsKey(player.userID)) return;
if (isPlayerEditing[player.userID]) {
if (input.WasJustPressed(BUTTON.FIRE_PRIMARY)) {
float anchorValue = 0f;
if (anchor == 1) {
anchorValue = GetSingleAnchor(cuiData[panelNameEdit].anchorMin, 0);
anchorValue = anchorValue + moveValue;
cuiData[panelNameEdit].anchorMin = $"{anchorValue} {GetSingleAnchor(cuiData[panelNameEdit].anchorMin, 1)}";
SaveData();
}
if (anchor == 2) {
anchorValue = GetSingleAnchor(cuiData[panelNameEdit].anchorMin, 1);
anchorValue = anchorValue + moveValue;
cuiData[panelNameEdit].anchorMin = $"{GetSingleAnchor(cuiData[panelNameEdit].anchorMin, 0)} {anchorValue}";
SaveData();
}
if (anchor == 3) {
anchorValue = GetSingleAnchor(cuiData[panelNameEdit].anchorMax, 0);
anchorValue = anchorValue + moveValue;
cuiData[panelNameEdit].anchorMax = $"{anchorValue} {GetSingleAnchor(cuiData[panelNameEdit].anchorMax, 1)}";
SaveData();
}
if (anchor == 4) {
anchorValue = GetSingleAnchor(cuiData[panelNameEdit].anchorMax, 1);
anchorValue = anchorValue + moveValue;
cuiData[panelNameEdit].anchorMax = $"{GetSingleAnchor(cuiData[panelNameEdit].anchorMax, 0)} {anchorValue}";
SaveData();
}
CreateCui(player, false, true);
CreateTab(player, 1, 2);
return;
}
if (input.WasJustPressed(BUTTON.FIRE_SECONDARY)) {
float anchorValue = 0f;
if (anchor == 1) {
anchorValue = GetSingleAnchor(cuiData[panelNameEdit].anchorMin, 0);
anchorValue = anchorValue - moveValue;
cuiData[panelNameEdit].anchorMin = $"{anchorValue} {GetSingleAnchor(cuiData[panelNameEdit].anchorMin, 1)}";
SaveData();
}
if (anchor == 2) {
anchorValue = GetSingleAnchor(cuiData[panelNameEdit].anchorMin, 1);
anchorValue = anchorValue - moveValue;
cuiData[panelNameEdit].anchorMin = $"{GetSingleAnchor(cuiData[panelNameEdit].anchorMin, 0)} {anchorValue}";
SaveData();
}
if (anchor == 3) {
anchorValue = GetSingleAnchor(cuiData[panelNameEdit].anchorMax, 0);
anchorValue = anchorValue - moveValue;
cuiData[panelNameEdit].anchorMax = $"{anchorValue} {GetSingleAnchor(cuiData[panelNameEdit].anchorMax, 1)}";
SaveData();
}
if (anchor == 4) {
anchorValue = GetSingleAnchor(cuiData[panelNameEdit].anchorMax, 1);
anchorValue = anchorValue - moveValue;
cuiData[panelNameEdit].anchorMax = $"{GetSingleAnchor(cuiData[panelNameEdit].anchorMax, 0)} {anchorValue}";
SaveData();
}
CreateCui(player, false, true);
CreateTab(player, 1, 2);
return;
}
if (input.WasJustPressed(BUTTON.FORWARD)) {
anchor = 4;
return;
}
if (input.WasJustPressed(BUTTON.BACKWARD)) {
anchor = 2;
return;
}
if (input.WasJustPressed(BUTTON.LEFT)) {
anchor = 1;
return;
}
if (input.WasJustPressed(BUTTON.RIGHT)) {
anchor = 3;
return;
}
if (input.WasJustPressed(BUTTON.RELOAD)) {
DestroyPage(player);
DestroyCui(player);
CreateEditPanelMenu(player);
isPlayerEditing[player.userID] = false;
return;
}
return;
}
}
private float GetSingleAnchor(string anchor, int index) {
//if (anchor == null) return null;
string[] splitter = anchor.Split(' ');
float converted = 0;
if (splitter[index] != null) {
converted = Convert.ToSingle(splitter[index]);
}
return converted;
}
#endregion
#region [Utilities]
[PluginReference]
Plugin Economics, ServerRewards, WipeCountdown;
List<ulong> isBlocked = new List<ulong>();
//Replace Text
private string R(BasePlayer player, string _text) {
string text = _text;
if (text.Contains("{playername}")) {
string playerName = player.displayName;
text = text.Replace("{playername}", playerName);
}
if (text.Contains("{pvp/pve}")) {
bool pve = ConVar.Server.pve;
if (pve) text = text.Replace("{pvp/pve}", "PVE");
else text = text.Replace("{pvp/pve}", "PVP");
}
if (text.Contains("{maxplayers}")) {
string max = $"{(int) ConVar.Server.maxplayers}";
text = text.Replace("{maxplayers}", max);
}
if (text.Contains("{online}")) {
string online = $"{(int) BasePlayer.activePlayerList.Count()}";
text = text.Replace("{online}", online);
}
if (text.Contains("{sleeping}")) {
string sleeping = $"{(int) BasePlayer.sleepingPlayerList.Count()}";
text = text.Replace("{sleeping}", sleeping);
}
if (text.Contains("{joining}")) {
string joining = $"{(int) ServerMgr.Instance.connectionQueue.Joining}";
text = text.Replace("{joining}", joining);
}
if (text.Contains("{queued}")) {
string queued = $"{(int) ServerMgr.Instance.connectionQueue.Queued}";
text = text.Replace("{queued}", queued);
}
if (text.Contains("{worldsize}")) {
string worldsize = $"{(int) ConVar.Server.worldsize}";
text = text.Replace("{worldsize}", worldsize);
}
if (text.Contains("{hostname}")) {
string hostname = ConVar.Server.hostname;
text = text.Replace("{hostname}", hostname);
}
if (WipeCountdown != null) {
if (text.Contains("{wipecountdown}")) {
string wipe = Convert.ToString(WipeCountdown.CallHook("GetCountdownFormated_API"));
text = text.Replace("{wipecountdown}", wipe);
}
}
if (Economics != null) {
if (text.Contains("{economics}")) {
string playersBalance = $"{Economics.Call<double>("Balance", player.UserIDString)}";
text = text.Replace("{economics}", playersBalance);
}
}
if (ServerRewards != null) {
if (text.Contains("{rp}")) {
string playersRP = $"{ServerRewards?.Call<int>("CheckPoints", player.userID)}";
text = text.Replace("{rp}", playersRP);
}
}
return text;
}
//Editing Mode (disable fade while editing)
private float Em(bool enabled, float fade) {
if (enabled) return 0f;
else return fade;
}
private void BlockInput(BasePlayer player, bool state) {
/*
if (!state) {
if (isBlocked.Contains(player.userID)) isBlocked.Remove(player.userID);
player.SetPlayerFlag(BasePlayer.PlayerFlags.Spectating, false); }
else {
if (!isBlocked.Contains(player.userID)) isBlocked.Add(player.userID);
player.SetPlayerFlag(BasePlayer.PlayerFlags.Spectating, true); }
*/
}
object CanSpectateTarget(BasePlayer player) {
if (isBlocked.Contains(player.userID)) return false;
return null;
}
bool IsDigitsOnly(string str) {
foreach (char c in str) {
if (c < '0' || c > '9') return false;
}
return true;
}
#endregion
#region [CUI]
private void CreateCui(BasePlayer player, bool cursor, bool eM = false) {
#region Base
//background
var createBase = CUIClass.CreateOverlay("background", $"{cuiData["background"].color}", $"{cuiData["background"].anchorMin}", $"{cuiData["background"].anchorMax}", cursor, Em(eM, cuiData["background"].fade), $"{cuiData["background"].material}");
if (CI("background")) CUIClass.CreateImage(ref createBase, "background", Img("background"), "0 0", "1 1", Em(eM, cuiData["background"].fade));
CUIClass.CreatePanel(ref createBase, "background2", "Overlay", $"{cuiData["background2"].color}", $"{cuiData["background2"].anchorMin}", $"{cuiData["background2"].anchorMax}", false, Em(eM, cuiData["background2"].fade), $"{cuiData["background2"].material}");
if (CI("background2")) CUIClass.CreateImage(ref createBase, "background2", Img("background2"), "0 0", "1 1", Em(eM, cuiData["background2"].fade));
//container
CUIClass.CreatePanel(ref createBase, "offsetContainer", "Overlay", $"{cuiData["offsetContainer"].color}", $"{cuiData["offsetContainer"].anchorMin}", $"{cuiData["offsetContainer"].anchorMax}", false, Em(eM, cuiData["offsetContainer"].fade), $"{cuiData["offsetContainer"].material}", "", "-680 -360", "680 360");
if (CI("offsetContainer")) CUIClass.CreateImage(ref createBase, "offsetContainer", Img("offsetContainer"), "0.02 0", "1 1", Em(eM, cuiData["offsetContainer"].fade));
//main panel
CUIClass.CreatePanel(ref createBase, "mainPanel", "offsetContainer", $"{cuiData["mainPanel"].color}", $"{cuiData["mainPanel"].anchorMin}", $"{cuiData["mainPanel"].anchorMax}", false, Em(eM, cuiData["mainPanel"].fade), $"{cuiData["mainPanel"].material}");
if (CI("mainPanel")) CUIClass.CreateImage(ref createBase, "mainPanel", Img("mainPanel"), "0 0", "1 1", Em(eM, cuiData["mainPanel"].fade));
//side panel
CUIClass.CreatePanel(ref createBase, "sidePanel", "offsetContainer", $"{cuiData["sidePanel"].color}", $"{cuiData["sidePanel"].anchorMin}", $"{cuiData["sidePanel"].anchorMax}", false, Em(eM, cuiData["sidePanel"].fade), $"{cuiData["sidePanel"].material}");
if (CI("sidePanel")) CUIClass.CreateImage(ref createBase, "sidePanel", Img("sidePanel"), "0 0", "1 1", Em(eM, cuiData["sidePanel"].fade));
//title panel
CUIClass.CreatePanel(ref createBase, "titlePanel", "offsetContainer", $"{cuiData["titlePanel"].color}", $"{cuiData["titlePanel"].anchorMin}", $"{cuiData["titlePanel"].anchorMax}", false, Em(eM, cuiData["titlePanel"].fade), $"{cuiData["titlePanel"].material}");
if (CI("titlePanel")) CUIClass.CreateImage(ref createBase, "titlePanel", Img("titlePanel"), "0 0", "1 1", Em(eM, cuiData["titlePanel"].fade));
CUIClass.CreateText(ref createBase, "titleText", "titlePanel", $"{config.titleSettings.titleColor}", $"{R(player, config.titleSettings.titleText)}", 15, "0.00 0", "1 1", TextAnchor.MiddleLeft, $"{config.titleSettings.titleFontStyle}", $"{config.titleSettings.titleOutlineColor}", $"{config.titleSettings.titleOutlineThick} {config.titleSettings.titleOutlineThick}");
//logo panel
CUIClass.CreatePanel(ref createBase, "logoPanel", "offsetContainer", $"{cuiData["logoPanel"].color}", $"{cuiData["logoPanel"].anchorMin}", $"{cuiData["logoPanel"].anchorMax}", false, Em(eM, cuiData["logoPanel"].fade), $"{cuiData["logoPanel"].material}");
if (CI("logoPanel")) CUIClass.CreateImage(ref createBase, "logoPanel", Img("logoPanel"), "0 0", "1 1", Em(eM, cuiData["logoPanel"].fade));
//close button
CUIClass.CreateButton(ref createBase, "closeButton", "offsetContainer", $"{cuiData["closeButton"].color}", $"{config.buttonSettings.closeBtnText}", 11, $"{cuiData["closeButton"].anchorMin}", $"{cuiData["closeButton"].anchorMax}", $"welcomepanel_close", "", "1 1 1 0.7", Em(eM, cuiData["closeButton"].fade), TextAnchor.MiddleCenter, $"robotocondensed-bold.ttf", $"{cuiData["closeButton"].material}");
if (CI("closeButton")) CUIClass.CreateImage(ref createBase, "closeButton", Img("closeButton"), "0 0", "1 1", Em(eM, cuiData["closeButton"].fade));
#endregion
#region Buttons
//Button 1
if (config.tab1Settings.btnEnabled) {
CUIClass.CreateButton(ref createBase, "menuBtn1", "offsetContainer", $"{cuiData["menuBtn1"].color}", $"{config?.tab1Settings.btnTitle}", 16, $"{cuiData["menuBtn1"].anchorMin}", $"{cuiData["menuBtn1"].anchorMax}", $"welcomepanel_open 1 1", "", "1 1 1 0.7", cuiData["menuBtn1"].fade, config.buttonSettings.mainAlign, $"{config?.buttonSettings.btnFontStyle}", $"{cuiData["menuBtn1"].material}");
if (CI("menuBtn1")) CUIClass.CreateImage(ref createBase, "menuBtn1", Img("menuBtn1"), $"{config.buttonSettings.btnIconAnchor[0]}", $"{config.buttonSettings.btnIconAnchor[1]}", cuiData["menuBtn1"].fade);
}
//Button 2
if (config.tab2Settings.btnEnabled) {
CUIClass.CreateButton(ref createBase, "menuBtn2", "offsetContainer", $"{cuiData["menuBtn2"].color}", $"{config?.tab2Settings.btnTitle}", 16, $"{cuiData["menuBtn2"].anchorMin}", $"{cuiData["menuBtn2"].anchorMax}", $"welcomepanel_open 2 1", "", "1 1 1 0.7", cuiData["menuBtn2"].fade, config.buttonSettings.mainAlign, $"{config?.buttonSettings.btnFontStyle}", $"{cuiData["menuBtn2"].material}");
if (CI("menuBtn2")) CUIClass.CreateImage(ref createBase, "menuBtn2", Img("menuBtn2"), $"{config.buttonSettings.btnIconAnchor[0]}", $"{config.buttonSettings.btnIconAnchor[1]}", cuiData["menuBtn2"].fade);
}
//Button 3
if (config.tab3Settings.btnEnabled) {
CUIClass.CreateButton(ref createBase, "menuBtn3", "offsetContainer", $"{cuiData["menuBtn3"].color}", $"{config?.tab3Settings.btnTitle}", 16, $"{cuiData["menuBtn3"].anchorMin}", $"{cuiData["menuBtn3"].anchorMax}", $"welcomepanel_open 3 1", "", "1 1 1 0.7", cuiData["menuBtn3"].fade, config.buttonSettings.mainAlign, $"{config?.buttonSettings.btnFontStyle}", $"{cuiData["menuBtn3"].material}");
if (CI("menuBtn3")) CUIClass.CreateImage(ref createBase, "menuBtn3", Img("menuBtn3"), $"{config.buttonSettings.btnIconAnchor[0]}", $"{config.buttonSettings.btnIconAnchor[1]}", cuiData["menuBtn3"].fade);
}
//Button 4
if (config.tab4Settings.btnEnabled) {
CUIClass.CreateButton(ref createBase, "menuBtn4", "offsetContainer", $"{cuiData["menuBtn4"].color}", $"{config?.tab4Settings.btnTitle}", 16, $"{cuiData["menuBtn4"].anchorMin}", $"{cuiData["menuBtn4"].anchorMax}", $"welcomepanel_open 4 1", "", "1 1 1 0.7", cuiData["menuBtn4"].fade, config.buttonSettings.mainAlign, $"{config?.buttonSettings.btnFontStyle}", $"{cuiData["menuBtn4"].material}");
if (CI("menuBtn4")) CUIClass.CreateImage(ref createBase, "menuBtn4", Img("menuBtn4"), $"{config.buttonSettings.btnIconAnchor[0]}", $"{config.buttonSettings.btnIconAnchor[1]}", cuiData["menuBtn4"].fade);
}
//Button 5
if (config.tab5Settings.btnEnabled) {
CUIClass.CreateButton(ref createBase, "menuBtn5", "offsetContainer", $"{cuiData["menuBtn5"].color}", $"{config?.tab5Settings.btnTitle}", 16, $"{cuiData["menuBtn5"].anchorMin}", $"{cuiData["menuBtn5"].anchorMax}", $"welcomepanel_open 5 1", "", "1 1 1 0.7", cuiData["menuBtn5"].fade, config.buttonSettings.mainAlign, $"{config?.buttonSettings.btnFontStyle}", $"{cuiData["menuBtn5"].material}");
if (CI("menuBtn5")) CUIClass.CreateImage(ref createBase, "menuBtn5", Img("menuBtn5"), $"{config.buttonSettings.btnIconAnchor[0]}", $"{config.buttonSettings.btnIconAnchor[1]}", cuiData["menuBtn5"].fade);
}
//Button 6
if (config.tab6Settings.btnEnabled) {
CUIClass.CreateButton(ref createBase, "menuBtn6", "offsetContainer", $"{cuiData["menuBtn6"].color}", $"{config?.tab6Settings.btnTitle}", 16, $"{cuiData["menuBtn6"].anchorMin}", $"{cuiData["menuBtn6"].anchorMax}", $"welcomepanel_open 6 1", "", "1 1 1 0.7", cuiData["menuBtn6"].fade, config.buttonSettings.mainAlign, $"{config?.buttonSettings.btnFontStyle}", $"{cuiData["menuBtn6"].material}");
if (CI("menuBtn6")) CUIClass.CreateImage(ref createBase, "menuBtn6", Img("menuBtn6"), $"{config.buttonSettings.btnIconAnchor[0]}", $"{config.buttonSettings.btnIconAnchor[1]}", cuiData["menuBtn6"].fade);
}
//Button 7
if (config.tab7Settings.btnEnabled) {
CUIClass.CreateButton(ref createBase, "menuBtn7", "offsetContainer", $"{cuiData["menuBtn7"].color}", $"{config?.tab7Settings.btnTitle}", 16, $"{cuiData["menuBtn7"].anchorMin}", $"{cuiData["menuBtn7"].anchorMax}", $"welcomepanel_open 7 1", "", "1 1 1 0.7", cuiData["menuBtn7"].fade, config.buttonSettings.mainAlign, $"{config?.buttonSettings.btnFontStyle}", $"{cuiData["menuBtn7"].material}");
if (CI("menuBtn7")) CUIClass.CreateImage(ref createBase, "menuBtn7", Img("menuBtn7"), $"{config.buttonSettings.btnIconAnchor[0]}", $"{config.buttonSettings.btnIconAnchor[1]}", cuiData["menuBtn7"].fade);
}
//BUttom 8
if (config.tab8Settings.btnEnabled) {
CUIClass.CreateButton(ref createBase, "menuBtn8", "offsetContainer", $"{cuiData["menuBtn8"].color}", $"{config?.tab8Settings.btnTitle}", 16, $"{cuiData["menuBtn8"].anchorMin}", $"{cuiData["menuBtn8"].anchorMax}", $"welcomepanel_open 8 1", "", "1 1 1 0.7", cuiData["menuBtn8"].fade, config.buttonSettings.mainAlign, $"{config?.buttonSettings.btnFontStyle}", $"{cuiData["menuBtn8"].material}");
if (CI("menuBtn8")) CUIClass.CreateImage(ref createBase, "menuBtn8", Img("menuBtn8"), $"{config.buttonSettings.btnIconAnchor[0]}", $"{config.buttonSettings.btnIconAnchor[1]}", cuiData["menuBtn8"].fade);
}
//Button 9
if (config.tab9Settings.btnEnabled) {
CUIClass.CreateButton(ref createBase, "menuBtn9", "offsetContainer", $"{cuiData["menuBtn9"].color}", $"{config?.tab9Settings.btnTitle}", 16, $"{cuiData["menuBtn9"].anchorMin}", $"{cuiData["menuBtn9"].anchorMax}", $"welcomepanel_open 9 1", "", "1 1 1 0.7", cuiData["menuBtn9"].fade, config.buttonSettings.mainAlign, $"{config?.buttonSettings.btnFontStyle}", $"{cuiData["menuBtn9"].material}");
if (CI("menuBtn9")) CUIClass.CreateImage(ref createBase, "menuBtn9", Img("menuBtn9"), $"{config.buttonSettings.btnIconAnchor[0]}", $"{config.buttonSettings.btnIconAnchor[1]}", cuiData["menuBtn9"].fade);
}
//Button 10
if (config.tab10Settings.btnEnabled) {
CUIClass.CreateButton(ref createBase, "menuBtn10", "offsetContainer", $"{cuiData["menuBtn10"].color}", $"{config?.tab10Settings.btnTitle}", 16, $"{cuiData["menuBtn10"].anchorMin}", $"{cuiData["menuBtn10"].anchorMax}", $"welcomepanel_open 10 1", "", "1 1 1 0.7", cuiData["menuBtn10"].fade, config.buttonSettings.mainAlign, $"{config?.buttonSettings.btnFontStyle}", $"{cuiData["menuBtn10"].material}");
if (CI("menuBtn10")) CUIClass.CreateImage(ref createBase, "menuBtn10", Img("menuBtn10"), $"{config.buttonSettings.btnIconAnchor[0]}", $"{config.buttonSettings.btnIconAnchor[1]}", cuiData["menuBtn10"].fade);
}
#endregion
DestroyCui(player);
CuiHelper.AddUi(player, createBase);
BlockInput(player, true);
}
private void DestroyCui(BasePlayer player) {
BlockInput(player, false);
CuiHelper.DestroyUi(player, "empty");
CuiHelper.DestroyUi(player, "background");
CuiHelper.DestroyUi(player, "background2");
CuiHelper.DestroyUi(player, "offsetContainer");
}
private void CreateTab(BasePlayer player, int tabNumber, int pageNumber) {
#region Fields
string bgImage = "def";
string bgImage_Amin = "def";
string bgImage_Amax = "def";
string btn_Title = "def";
string btn_FontStyle = "def";
string btn_Icon = "def";
List<string> tabText = new List<string>();
string fontColor = "def";
int fontSize = 0;
string fontStyle = "def";
string fontOutColor = "def";
string fontOutThic = "def";
TextAnchor textAnchor = TextAnchor.MiddleCenter;
string addonName = "def";
#endregion
#region Config Container
if(tabNumber == 1) {
btn_Title = config.tab1Settings.btnTitle;
bgImage = config.tab1Settings.tabImageUrl;
bgImage_Amin = config.tab1Settings.tabImageAnchor[0];
bgImage_Amax = config?.tab1Settings.tabImageAnchor[1];
fontColor = config.tab1Settings.mainFontColor;
tabText = config.tab1Settings.textLines;
fontSize = config.tab1Settings.mainFontSize;
textAnchor = config.tab1Settings.mainAlign;
fontStyle = config.tab1Settings.mainFontStyle;
fontOutColor = config.tab1Settings.fontOutlineColor;
fontOutThic = config.tab1Settings.fontOutlineThick;
btn_Icon = config.tab1Settings.btnIcon;
addonName = config.extension.tab1;
}
if(tabNumber == 2) {
btn_Title = config.tab2Settings.btnTitle;
bgImage = config.tab2Settings.tabImageUrl;
bgImage_Amin = config.tab2Settings.tabImageAnchor[0];
bgImage_Amax = config?.tab2Settings.tabImageAnchor[1];
fontColor = config.tab2Settings.mainFontColor;
tabText = config.tab2Settings.textLines;
fontSize = config.tab2Settings.mainFontSize;
textAnchor = config.tab2Settings.mainAlign;
fontStyle = config.tab2Settings.mainFontStyle;
fontOutColor = config.tab2Settings.fontOutlineColor;
fontOutThic = config.tab2Settings.fontOutlineThick;
btn_Icon = config.tab2Settings.btnIcon;
addonName = config.extension.tab2;
}
if(tabNumber == 3) {
btn_Title = config.tab3Settings.btnTitle;
bgImage = config.tab3Settings.tabImageUrl;
bgImage_Amin = config.tab3Settings.tabImageAnchor[0];
bgImage_Amax = config?.tab3Settings.tabImageAnchor[1];
fontColor = config.tab3Settings.mainFontColor;
tabText = config.tab3Settings.textLines;
fontSize = config.tab3Settings.mainFontSize;
textAnchor = config.tab3Settings.mainAlign;
fontStyle = config.tab3Settings.mainFontStyle;
fontOutColor = config.tab3Settings.fontOutlineColor;
fontOutThic = config.tab3Settings.fontOutlineThick;
btn_Icon = config.tab3Settings.btnIcon;
addonName = config.extension.tab3;
}
if(tabNumber == 4) {
btn_Title = config.tab4Settings.btnTitle;
bgImage = config.tab4Settings.tabImageUrl;
bgImage_Amin = config.tab4Settings.tabImageAnchor[0];
bgImage_Amax = config?.tab4Settings.tabImageAnchor[1];
fontColor = config.tab4Settings.mainFontColor;
tabText = config.tab4Settings.textLines;
fontSize = config.tab4Settings.mainFontSize;
textAnchor = config.tab4Settings.mainAlign;
fontStyle = config.tab4Settings.mainFontStyle;
fontOutColor = config.tab4Settings.fontOutlineColor;
fontOutThic = config.tab4Settings.fontOutlineThick;
btn_Icon = config.tab4Settings.btnIcon;
addonName = config.extension.tab4;
}
if(tabNumber == 5) {
btn_Title = config.tab5Settings.btnTitle;
bgImage = config.tab5Settings.tabImageUrl;
bgImage_Amin = config.tab5Settings.tabImageAnchor[0];
bgImage_Amax = config?.tab5Settings.tabImageAnchor[1];
fontColor = config.tab5Settings.mainFontColor;
tabText = config.tab5Settings.textLines;
fontSize = config.tab5Settings.mainFontSize;
textAnchor = config.tab5Settings.mainAlign;
fontStyle = config.tab5Settings.mainFontStyle;
fontOutColor = config.tab5Settings.fontOutlineColor;
fontOutThic = config.tab5Settings.fontOutlineThick;
btn_Icon = config.tab5Settings.btnIcon;
addonName = config.extension.tab5;
}
if(tabNumber == 6) {
btn_Title = config.tab6Settings.btnTitle;
bgImage = config.tab6Settings.tabImageUrl;
bgImage_Amin = config.tab6Settings.tabImageAnchor[0];
bgImage_Amax = config?.tab6Settings.tabImageAnchor[1];
fontColor = config.tab6Settings.mainFontColor;
tabText = config.tab6Settings.textLines;
fontSize = config.tab6Settings.mainFontSize;
textAnchor = config.tab6Settings.mainAlign;
fontStyle = config.tab6Settings.mainFontStyle;
fontOutColor = config.tab6Settings.fontOutlineColor;
fontOutThic = config.tab6Settings.fontOutlineThick;
btn_Icon = config.tab6Settings.btnIcon;
addonName = config.extension.tab6;
}
if(tabNumber == 7) {
btn_Title = config.tab7Settings.btnTitle;
bgImage = config.tab7Settings.tabImageUrl;
bgImage_Amin = config.tab7Settings.tabImageAnchor[0];
bgImage_Amax = config?.tab7Settings.tabImageAnchor[1];
fontColor = config.tab7Settings.mainFontColor;
tabText = config.tab7Settings.textLines;
fontSize = config.tab7Settings.mainFontSize;
textAnchor = config.tab7Settings.mainAlign;
fontStyle = config.tab7Settings.mainFontStyle;
fontOutColor = config.tab7Settings.fontOutlineColor;
fontOutThic = config.tab7Settings.fontOutlineThick;
btn_Icon = config.tab7Settings.btnIcon;
addonName = config.extension.tab7;
}
if(tabNumber == 8) {
btn_Title = config.tab8Settings.btnTitle;
bgImage = config.tab8Settings.tabImageUrl;
bgImage_Amin = config.tab8Settings.tabImageAnchor[0];
bgImage_Amax = config?.tab8Settings.tabImageAnchor[1];
fontColor = config.tab8Settings.mainFontColor;
tabText = config.tab8Settings.textLines;
fontSize = config.tab8Settings.mainFontSize;
textAnchor = config.tab8Settings.mainAlign;
fontStyle = config.tab8Settings.
// ... [Code preview truncated due to length. Full source in attached file] ...