C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using Oxide.Core;
using Oxide.Core.Libraries;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using Rust;
using System; //DateTime
using System.Collections.Generic; //Required for Whilelist
using Oxide.Core.Libraries.Covalence; //Requrired for IPlayer stuff
//using System.Data;
//using System.Globalization;
using System.Linq;
//using System.Reflection;
using UnityEngine;
//using System.Collections;
//using ConVar;
//using Facepunch;
//using Network;
//using ProtoBuf;
//using System.Runtime.CompilerServices;
//using System.Text.RegularExpressions;
//using Oxide.Plugins;
using Oxide.Core.Configuration;
//using Oxide.Core.CSharp;
//using Rust.Registry;
//using RustNative;
using Oxide.Core.Database;
namespace Oxide.Plugins
{
[Info("PvXSelector", "Alphawar", "0.9.6", ResourceId = 1817)]
[Description("Player vs X Selector: Beta version 21/02/2017")]
class PvXselector : RustPlugin
{
#region Data/PlayerJoin/ServerInit
//Loaded goes first
public static PvXselector instance;
public static class Cooldowns
{
public static List<ulong> enemyOpModeWarning = new List<ulong>();
public static List<ulong> menuGui = new List<ulong>();
}
void Loaded()
{
ModeSwitch.Ticket.Data.Initiate();
ModeSwitch.Cooldown.Data.Initiate();
Players.Data.Initiate();
Containers.Data.Initiate();
lang.RegisterMessages(Lang.List, this);
PermissionHandle();
LoadVariables();
instance = this;
}
void OnServerInitialized()
{
LoadData();
CheckPlayersRegistered();
foreach (BasePlayer Player in BasePlayer.activePlayerList)
{
if (!Players.State.IsNPC(Player))
{
GUI.Create.PlayerIndicator(Player);
ModeSwitch.Cooldown.Check(Player.userID);
if (HasPerm(Player, "admin"))
{
Players.Admins.AddPlayer(Player.userID);
GUI.Create.AdminIndicator(Player);
}
if (Players.State.IsNA(Player)) Timers.PvxChatNotification(Player);
UpdatePlayerChatTag(Player);
}
}
foreach (ulong _key in Players.Data.playerData.Info.Keys)
{
if (Players.Data.playerData.Info[_key].FirstConnection == null) Players.Data.playerData.Info[_key].FirstConnection = DateTimeStamp();
if (Players.Data.playerData.Info[_key].LatestConnection == null) Players.Data.playerData.Info[_key].LatestConnection = DateTimeStamp();
if (Players.Data.playerData.Info[_key].FirstConnection == "null") Players.Data.playerData.Info[_key].FirstConnection = DateTimeStamp();
if (Players.Data.playerData.Info[_key].LatestConnection == "null") Players.Data.playerData.Info[_key].LatestConnection = DateTimeStamp();
}
Timers.CooldownTickets();
}
void Unloaded()
{
foreach (var Player in BasePlayer.activePlayerList)
{
DestroyAllPvXUI(Player);
}
SaveData.All();
}
class SaveData
{
public static void All()
{
ModeSwitch.Cooldown.Data.Save();
ModeSwitch.Ticket.Data.Save();
Players.Data.Save();
Containers.Data.Save();
}
public static void TicketData()
{
ModeSwitch.Ticket.Data.Save();
}
public static void ModeSwitchData()
{
ModeSwitch.Cooldown.Data.Save();
}
public static void SharedContainer()
{
Containers.Data.Save();
}
}
void LoadData()
{
ModeSwitch.Ticket.Data.Load();
ModeSwitch.Cooldown.Data.Load();
Players.Data.Load();
Containers.Data.Load();
}
void OnPlayerInit(BasePlayer Player)
{
if (Player == null) return;
else if (Player.HasPlayerFlag(BasePlayer.PlayerFlags.ReceivingSnapshot))
{
timer.Once(3f, () =>
{
OnPlayerInit(Player);
});
return;
}
else PlayerLoaded(Player);
}
void PlayerLoaded(BasePlayer Player)
{
if (Players.State.IsNPC(Player)) return;
if (Players.IsNew(Player.userID))
Players.Add(Player);
ModeSwitch.Cooldown.Check(Player.userID);
GUI.Create.PlayerIndicator(Player);
if (IsAdmin(Player))
{
Players.Admins.AddPlayer(Player.userID);
GUI.Create.AdminIndicator(Player);
}
if (Players.Data.playerData.UnknownUsers.Contains(Player.userID))
{
UpdatePvXPlayerData(Player);
Players.Data.playerData.UnknownUsers.Remove(Player.userID);
}
if (Players.Data.playerData.Sleepers.Contains(Player.userID))
{
UpdatePvXPlayerData(Player);
Players.Data.playerData.Sleepers.Remove(Player.userID);
}
Players.Data.playerData.Info[Player.userID].LatestConnection = DateTimeStamp();
UpdatePlayerChatTag(Player);
SaveData.All();
GUI.Create.PlayerIndicator(Player);
if (Players.Data.playerData.Info[Player.userID].mode != Mode.NA) return;
else if (ModeSwitch.Ticket.Data.ticketData.Notification.ContainsKey(Player.userID)) Messages.Chat(Players.Find.Iplayer(Player.userID), "TickClosLogin", ModeSwitch.Ticket.Data.ticketData.Notification[Player.userID]);
else if (Players.Data.playerData.Info[Player.userID].mode == Mode.NA) Timers.PvxChatNotification(Player);
}
void OnPlayerDisconnected(BasePlayer Player)
{
if (IsAdmin(Player))
{
Players.Admins.RemovePlayer(Player.userID);
}
if (Players.Admins.Mode.ContainsPlayer(Player.userID))
{
Players.Admins.RemovePlayer(Player.userID);
}
}
void OnPlayerRespawned(BasePlayer Player)
{
}
void CheckPlayersRegistered()
{
foreach (BasePlayer Player in BasePlayer.activePlayerList)
if (!(Players.Data.playerData.Info.ContainsKey(Player.userID)))
Players.Add(Player);
foreach (BasePlayer Player in BasePlayer.sleepingPlayerList)
if (!(Players.Data.playerData.Info.ContainsKey(Player.userID)))
Players.AddSleeper(Player);
}
static string pvxIndicator = "PvXPlayerStateIndicator";
static string pvxMenuBack = "PvXMenu_Main_Background";
static string pvxMenuBanner = "PvXMenu_Main_Banner";
static string pvxMenuBannerTitle = "PvXMenu_Main_Banner_Title";
static string pvxMenuBannerVersion = "PvXMenu_Main_Banner_Version";
static string pvxMenuBannerModType = "PvXMenu_Main_Banner_ModType";
static string pvxMenuSide = "PvXMenu_Main_Side";
static string pvxMenuMain = "PvXMenu_Main";
static string pvxIndicatorGui = "createPvXModeSelector";
static string pvxPlayerUI = "pvxPlayerModeUI";
static string pvxAdminUI = "pvxAdminTicketCountUI";
static string UIMain = "PvXUI_Main";
static string UIPanel = "PvXUI_Panel";
static string[] GuiList = new string[] { pvxIndicatorGui,
pvxPlayerUI, pvxAdminUI,
UIMain, UIPanel, pvxMenuBanner,
pvxIndicator, pvxMenuBack , pvxMenuMain,
pvxMenuBannerTitle, pvxMenuBannerVersion,
pvxMenuBannerModType
};
#endregion
#region Config/Permision/Plugin Ref
//None Adjustable
private string PvXModtype = "Developer Edition";//Regular Oxide Donator Patreon Developer
private bool DebugMode;
//Core
private bool TicketSystem;
private bool CooldownSystem;
private int CooldownTime;
private float playerIndicatorMinWid;
private float playerIndicatorMinHei;
private float adminIndicatorMinWid;
private float adminIndicatorMinHei;
//Players
private bool PvEAttackPvE;
private bool PvEAttackPvP;
private bool PvPAttackPvE;
private bool PvPAttackPvP;
private bool PvELootPvE;
private bool PvELootPvP;
private bool PvPLootPvE;
private bool PvPLootPvP;
private bool PvEUsePvPDoor;
private bool PvPUsePvEDoor;
private float PvEDamagePvE;
private float PvEDamagePvP;
private float PvPDamagePvE;
private float PvPDamagePvP;
private float PvEDamagePvEStruct;
private float PvEDamagePvPStruct;
private float PvPDamagePvEStruct;
private float PvPDamagePvPStruct;
//Metabolism
private float PvEFoodLossRate;
private float PvEWaterLossRate;
private float PvEHealthGainRate;
private float PvEFoodSpawn;
private float PvEWaterSpawn;
private float PvEHealthSpawn;
private float PvPFoodLossRate;
private float PvPWaterLossRate;
private float PvPHealthGainRate;
private float PvPFoodSpawn;
private float PvPWaterSpawn;
private float PvPHealthSpawn;
//NPC
private bool NPCAttackPvE;
private bool NPCAttackPvP;
private bool PvEAttackNPC;
private bool PvPAttackNPC;
private float NPCDamagePvE;
private float NPCDamagePvP;
private float PvEDamageNPC;
private float PvPDamageNPC;
private bool PvELootNPC;
private bool PvPLootNPC;
//Animal
private float PvEDamageAnimals;
private float PvPDamageAnimals;
private float NPCDamageAnimals;
private float AnimalsDamagePvE;
private float AnimalsDamagePvP;
private float AnimalsDamageNPC;
//Turret
private bool TurretPvETargetPvE;
private bool TurretPvETargetPvP;
private bool TurretPvPTargetPvE;
private bool TurretPvPTargetPvP;
private bool TurretPvETargetNPC;
private bool TurretPvPTargetNPC;
private bool TurretPvETargetAnimal;
private bool TurretPvPTargetAnimal;
private float TurretPvEDamagePvEAmnt;
private float TurretPvEDamagePvPAmnt;
private float TurretPvPDamagePvEAmnt;
private float TurretPvPDamagePvPAmnt;
private float TurretPvEDamageNPCAmnt;
private float TurretPvPDamageNPCAmnt;
private float TurretPvEDamageAnimalAmnt;
private float TurretPvPDamageAnimalAmnt;
//Helicopter
private bool HeliTargetPvE;
private bool HeliTargetPvP;
private bool HeliTargetNPC;
private float HeliDamagePvE;
private float HeliDamagePvP;
private float HeliDamageNPC;
private float HeliDamagePvEStruct;
private float HeliDamagePvPStruct;
private float HeliDamageAnimal;
private float HeliDamageByPvE;
private float HeliDamageByPvP;
//Fire
private float FireDamagePvE;
private float FireDamagePvP;
private float FireDamageNPC;
private float FireDamagePvEStruc;
private float FireDamagePvPStruc;
//Others
public static bool DisableUI_FadeIn;
private string ChatPrefixColor;
private string ChatPrefix;
private string ChatMessageColor;
private string PvXNAColour;
private string PvXPvEColour;
private string PvXPvPColour;
/*
*
* END Of Config
*
*/
protected override void LoadDefaultConfig()
{
Puts("Creating a new configuration file!");
Config.Clear();
LoadVariables();
}
void LoadVariables() //Stores Default Values, calling GetConfig passing: menu, dataValue, defaultValue
{
//Core
TicketSystem = Convert.ToBoolean(GetConfig(ConfigLists.Core, "01: Ticket System", true));
CooldownSystem = Convert.ToBoolean(GetConfig(ConfigLists.Core, "02: Cooldown System", true));
CooldownTime = Convert.ToInt32(GetConfig(ConfigLists.Core, "03: Cooldown Time (Seconds)", 3600));
playerIndicatorMinWid = Convert.ToSingle(GetConfig(ConfigLists.Core, "04: player Gui width anchor", 0.484));
playerIndicatorMinHei = Convert.ToSingle(GetConfig(ConfigLists.Core, "05: player Gui height anchor", 0.111));
adminIndicatorMinHei = Convert.ToSingle(GetConfig(ConfigLists.Core, "06: admin Gui height anchor", 0.055));
adminIndicatorMinWid = Convert.ToSingle(GetConfig(ConfigLists.Core, "07: admin Gui width anchor", 0.166));
//Players
PvEAttackPvE = Convert.ToBoolean(GetConfig(ConfigLists.Player, "01: PvE v PvE", false));
PvEAttackPvP = Convert.ToBoolean(GetConfig(ConfigLists.Player, "02: PvE v PvP", false));
PvPAttackPvE = Convert.ToBoolean(GetConfig(ConfigLists.Player, "03: PvP v PvE", false));
PvPAttackPvP = Convert.ToBoolean(GetConfig(ConfigLists.Player, "04: PvP v PvP", true));
PvELootPvE = Convert.ToBoolean(GetConfig(ConfigLists.Player, "05: PvE Loot PvE", true));
PvELootPvP = Convert.ToBoolean(GetConfig(ConfigLists.Player, "06: PvE Loot PvP", false));
PvPLootPvE = Convert.ToBoolean(GetConfig(ConfigLists.Player, "07: PvP Loot PvE", false));
PvPLootPvP = Convert.ToBoolean(GetConfig(ConfigLists.Player, "08: PvP Loot PvP", true));
PvEUsePvPDoor = Convert.ToBoolean(GetConfig(ConfigLists.Player, "09: PvE Use PvPDoor", false));
PvPUsePvEDoor = Convert.ToBoolean(GetConfig(ConfigLists.Player, "10: PvP Use PvEDoor", false));
PvEDamagePvE = Convert.ToSingle(GetConfig(ConfigLists.Player, "11: PvE Damage PvE", 0.0));
PvEDamagePvP = Convert.ToSingle(GetConfig(ConfigLists.Player, "12: PvE Damage PvP", 0.0));
PvPDamagePvE = Convert.ToSingle(GetConfig(ConfigLists.Player, "13: PvP Damage PvE", 0.0));
PvPDamagePvP = Convert.ToSingle(GetConfig(ConfigLists.Player, "14: PvP Damage PvP", 1.0));
PvEDamagePvEStruct = Convert.ToSingle(GetConfig(ConfigLists.Player, "18: PvEDamagePvEStruct", 0.0));
PvEDamagePvPStruct = Convert.ToSingle(GetConfig(ConfigLists.Player, "18: PvEDamagePvPStruct", 0.0));
PvPDamagePvEStruct = Convert.ToSingle(GetConfig(ConfigLists.Player, "18: PvPDamagePvEStruct", 0.0));
PvPDamagePvPStruct = Convert.ToSingle(GetConfig(ConfigLists.Player, "18: PvPDamagePvPStruct", 1.0));
//Metabolism
PvEFoodLossRate = Convert.ToSingle(GetConfig(ConfigLists.Metabolism, "01: PvEFoodLossRate", 0.03));
PvEWaterLossRate = Convert.ToSingle(GetConfig(ConfigLists.Metabolism, "02: PvEWaterLossRate", 0.03));
PvEHealthGainRate = Convert.ToSingle(GetConfig(ConfigLists.Metabolism, "03: PvEHealthGainRate", 0.03));
PvEFoodSpawn = Convert.ToSingle(GetConfig(ConfigLists.Metabolism, "04: PvEFoodSpawn", 100.0));
PvEWaterSpawn = Convert.ToSingle(GetConfig(ConfigLists.Metabolism, "05: PvEWaterSpawn", 250.00));
PvEHealthSpawn = Convert.ToSingle(GetConfig(ConfigLists.Metabolism, "06: PvEHealthSpawn", 500.00));
PvPFoodLossRate = Convert.ToSingle(GetConfig(ConfigLists.Metabolism, "07: PvPFoodLossRate", 0.03));
PvPWaterLossRate = Convert.ToSingle(GetConfig(ConfigLists.Metabolism, "08: PvPWaterLossRate", 0.03));
PvPHealthGainRate = Convert.ToSingle(GetConfig(ConfigLists.Metabolism, "09: PvPHealthGainRate", 0.03));
PvPFoodSpawn = Convert.ToSingle(GetConfig(ConfigLists.Metabolism, "10: PvPFoodSpawn", 100.0));
PvPWaterSpawn = Convert.ToSingle(GetConfig(ConfigLists.Metabolism, "11: PvPWaterSpawn", 250.0));
PvPHealthSpawn = Convert.ToSingle(GetConfig(ConfigLists.Metabolism, "12: PvPHealthSpawn", 500.0));
//NPC
NPCAttackPvE = Convert.ToBoolean(GetConfig(ConfigLists.NPC, "01: NPC Attack PvE", true));
NPCAttackPvP = Convert.ToBoolean(GetConfig(ConfigLists.NPC, "02: NPC Attack PvP", true));
PvEAttackNPC = Convert.ToBoolean(GetConfig(ConfigLists.NPC, "03: PvE Attack NPC", true));
PvPAttackNPC = Convert.ToBoolean(GetConfig(ConfigLists.NPC, "04: PvP Attack NPC", true));
NPCDamagePvE = Convert.ToSingle(GetConfig(ConfigLists.NPC, "05: NPC Damage PvE", 1.0));
NPCDamagePvP = Convert.ToSingle(GetConfig(ConfigLists.NPC, "06: NPC Damage PvP", 1.0));
PvEDamageNPC = Convert.ToSingle(GetConfig(ConfigLists.NPC, "07: PvE Damage NPC", 1.0));
PvPDamageNPC = Convert.ToSingle(GetConfig(ConfigLists.NPC, "08: PvP Damage NPC", 1.0));
PvELootNPC = Convert.ToBoolean(GetConfig(ConfigLists.NPC, "09: PvE Loot NPC", true));
PvPLootNPC = Convert.ToBoolean(GetConfig(ConfigLists.NPC, "10: PvP Loot NPC", true));
//Animal
PvEDamageAnimals = Convert.ToSingle(GetConfig(ConfigLists.Animals, "1: PvE Damage Animals", 1.0f));
PvPDamageAnimals = Convert.ToSingle(GetConfig(ConfigLists.Animals, "2: PvP Damage Animals", 1.0f));
NPCDamageAnimals = Convert.ToSingle(GetConfig(ConfigLists.Animals, "3: NPC Damage Animals", 1.0f));
AnimalsDamagePvE = Convert.ToSingle(GetConfig(ConfigLists.Animals, "4: Animals Damage PvE", 1.0f));
AnimalsDamagePvP = Convert.ToSingle(GetConfig(ConfigLists.Animals, "5: Animals Damage PvP", 1.0f));
AnimalsDamageNPC = Convert.ToSingle(GetConfig(ConfigLists.Animals, "6: Animals Damage NPC", 1.0f));
//Turret
TurretPvETargetPvE = Convert.ToBoolean(GetConfig(ConfigLists.Turret, "01: TurretPvETargetPvE", true));
TurretPvETargetPvP = Convert.ToBoolean(GetConfig(ConfigLists.Turret, "02: TurretPvETargetPvP", false));
TurretPvPTargetPvE = Convert.ToBoolean(GetConfig(ConfigLists.Turret, "03: TurretPvPTargetPvE", false));
TurretPvPTargetPvP = Convert.ToBoolean(GetConfig(ConfigLists.Turret, "04: TurretPvPTargetPvP", true));
TurretPvETargetNPC = Convert.ToBoolean(GetConfig(ConfigLists.Turret, "05: TurretPvETargetNPC", true));
TurretPvPTargetNPC = Convert.ToBoolean(GetConfig(ConfigLists.Turret, "06: TurretPvPTargetNPC", true));
TurretPvETargetAnimal = Convert.ToBoolean(GetConfig(ConfigLists.Turret, "07: TurretPvETargetAnimal", true));
TurretPvPTargetAnimal = Convert.ToBoolean(GetConfig(ConfigLists.Turret, "08: TurretPvPTargetAnimal", true));
TurretPvEDamagePvEAmnt = Convert.ToSingle(GetConfig(ConfigLists.Turret, "09: TurretPvEDamagePvEAmnt", 1.0f));
TurretPvEDamagePvPAmnt = Convert.ToSingle(GetConfig(ConfigLists.Turret, "10: TurretPvEDamagePvPAmnt", 0.0f));
TurretPvPDamagePvEAmnt = Convert.ToSingle(GetConfig(ConfigLists.Turret, "11: TurretPvPDamagePvEAmnt", 0.0f));
TurretPvPDamagePvPAmnt = Convert.ToSingle(GetConfig(ConfigLists.Turret, "12: TurretPvPDamagePvPAmnt", 1.0f));
TurretPvEDamageNPCAmnt = Convert.ToSingle(GetConfig(ConfigLists.Turret, "13: TurretPvEDamageNPCAmnt", 1.0f));
TurretPvPDamageNPCAmnt = Convert.ToSingle(GetConfig(ConfigLists.Turret, "14: TurretPvPDamageNPCAmnt", 1.0f));
TurretPvEDamageAnimalAmnt = Convert.ToSingle(GetConfig(ConfigLists.Turret, "15: TurretPvEDamageAnimal", 1.0f));
TurretPvPDamageAnimalAmnt = Convert.ToSingle(GetConfig(ConfigLists.Turret, "16: TurretPvPDamageAnimal", 1.0f));
//Helicopter
HeliTargetPvE = Convert.ToBoolean(GetConfig(ConfigLists.Heli, "01: HeliTargetPvE", false));
HeliTargetPvP = Convert.ToBoolean(GetConfig(ConfigLists.Heli, "02: HeliTargetPvP", true));
HeliTargetNPC = Convert.ToBoolean(GetConfig(ConfigLists.Heli, "03: HeliTargetNPC", false));
HeliDamagePvE = Convert.ToSingle(GetConfig(ConfigLists.Heli, "04: HeliDamagePvE", 0.0));
HeliDamagePvP = Convert.ToSingle(GetConfig(ConfigLists.Heli, "05: HeliDamagePvP", 1.0));
HeliDamageNPC = Convert.ToSingle(GetConfig(ConfigLists.Heli, "06: HeliDamageNPC", 0.0));
HeliDamagePvEStruct = Convert.ToSingle(GetConfig(ConfigLists.Heli, "07: HeliDamagePvEStruct", 0.0));
HeliDamagePvPStruct = Convert.ToSingle(GetConfig(ConfigLists.Heli, "08: HeliDamagePvPStruct", 1.0));
HeliDamageAnimal = Convert.ToSingle(GetConfig(ConfigLists.Heli, "09: HeliDamageAnimal", 1.0));
HeliDamageByPvE = Convert.ToSingle(GetConfig(ConfigLists.Heli, "10: HeliDamageByPvE", 0.0));
HeliDamageByPvP = Convert.ToSingle(GetConfig(ConfigLists.Heli, "11: HeliDamageByPvp", 1.0));
//fire
FireDamagePvE = Convert.ToSingle(GetConfig(ConfigLists.Fire, "1: FireDamagePvE", 0.1));
FireDamagePvP = Convert.ToSingle(GetConfig(ConfigLists.Fire, "2: FireDamagePvP", 1.0));
FireDamageNPC = Convert.ToSingle(GetConfig(ConfigLists.Fire, "3: FireDamageNPC", 1.0));
FireDamagePvEStruc = Convert.ToSingle(GetConfig(ConfigLists.Fire, "4: FireDamagePvEStruc", 0.0));
FireDamagePvPStruc = Convert.ToSingle(GetConfig(ConfigLists.Fire, "5: FireDamagePvPStruc", 1.0));
//others
DisableUI_FadeIn = Convert.ToBoolean(GetConfig(ConfigLists.Settings, "01: DisableUI Fadein", false));
DebugMode = Convert.ToBoolean(GetConfig(ConfigLists.Settings, "02: DebugMode", false));
ChatPrefix = Convert.ToString(GetConfig(ConfigLists.Core, "03: ChatPrefix", "PvX"));
ChatPrefixColor = Convert.ToString(GetConfig(ConfigLists.Settings, "04: ChatPrefixColor", "008800"));
ChatMessageColor = Convert.ToString(GetConfig(ConfigLists.Settings, "05: ChatMessageColor", "yellow"));
PvXNAColour = Convert.ToString(GetConfig(ConfigLists.Settings, "06: PvXNAColour", "#yellow"));
PvXPvEColour = Convert.ToString(GetConfig(ConfigLists.Settings, "07: PvXPvEColour", "#green"));
PvXPvPColour = Convert.ToString(GetConfig(ConfigLists.Settings, "08: PvXPvPColour", "#red"));
}
object GetConfig(string menu, string dataValue, object defaultValue)
{
var data = Config[menu] as Dictionary<string, object>;
if (data == null)
{
data = new Dictionary<string, object>();
Config[menu] = data;
}
object value;
if (!data.TryGetValue(dataValue, out value))
{
value = defaultValue;
data[dataValue] = value;
}
return value;
}
T GetConfig<T>(params object[] args)
{
List<string> stringArgs = (from arg in args select arg.ToString()).ToList();
stringArgs.RemoveAt(args.Length - 1);
if (Config.Get(stringArgs.ToArray()) == null)
{
Config.Set(args);
}
return (T)Convert.ChangeType(Config.Get(stringArgs.ToArray()), typeof(T));
}
private bool HasPerm(BasePlayer Player, string perm, string reason = null)
{
string regPerm = Title.ToLower() + "." + perm; //pvxselector.admin
if (permission.UserHasPermission(Player.UserIDString, regPerm)) return true;
if (reason != "null")
SendReply(Player, reason);
return false;
}
private bool IsMod(BasePlayer Player)
{
string regPerm = Title.ToLower() + "." + "moderator";
if (permission.UserHasPermission(Player.UserIDString, regPerm)) return true;
else if (IsAdmin(Player)) return true;
else return false;
}
private bool IsAdmin(BasePlayer Player)
{
string regPerm = Title.ToLower() + "." + "admin";
if (permission.UserHasPermission(Player.UserIDString, regPerm)) return true;
else return false;
}
void PermissionHandle()
{
string[] Permissionarray = { "admin", "moderator", "wipe" }; //DO NOT EVER TOUCH THIS EVER!!!!!!
foreach (string i in Permissionarray)
{
string regPerm = Title.ToLower() + "." + i;
Puts("Checking if " + regPerm + " is registered.");
if (!permission.PermissionExists(regPerm))
{
permission.RegisterPermission(regPerm, this);
Puts(regPerm + " is registered.");
}
else
{
Puts(regPerm + " is already registered.");
}
}
}
class ConfigLists
{
public static readonly ConfigLists Core = new ConfigLists("1: Core", 1, MenuItemEnum.Core);
public static readonly ConfigLists Player = new ConfigLists("2: Player", 2, MenuItemEnum.Player);
public static readonly ConfigLists Metabolism = new ConfigLists("3: Metabolism", 3, MenuItemEnum.Metabolism);
public static readonly ConfigLists NPC = new ConfigLists("4: NPC", 4, MenuItemEnum.NPC);
public static readonly ConfigLists Animals = new ConfigLists("5: Animals", 5, MenuItemEnum.Animals);
public static readonly ConfigLists Turret = new ConfigLists("6: Turrets", 6, MenuItemEnum.Turret);
public static readonly ConfigLists Heli = new ConfigLists("7: Heli", 7, MenuItemEnum.Heli);
public static readonly ConfigLists Fire = new ConfigLists("8: Fire", 8, MenuItemEnum.Fire);
public static readonly ConfigLists Settings = new ConfigLists("9: Settings", 9, MenuItemEnum.Settings);
public string Value;
public int Index;
public MenuItemEnum EnumValue;
private ConfigLists(string value, int index, MenuItemEnum enumValue)
{
Value = value;
Index = index;
EnumValue = enumValue; //possible to remove extra value
}
public static implicit operator string(ConfigLists configLists)
{
return configLists.Value;
}
}
public enum MenuItemEnum //Possible to remove exta value
{
Core,
Player,
Metabolism,
NPC,
Animals,
Turret,
Heli,
Fire,
Settings
}
#endregion
#region UI Creation
class QUI
{
public static CuiElementContainer CreateElementContainer(string panelName, string color, string aMin, string aMax, bool useCursor = false, string parent = "Hud")
{
var NewElement = new CuiElementContainer()
{
{
new CuiPanel
{
Image = {Color = color},
RectTransform = {AnchorMin = aMin, AnchorMax = aMax},
CursorEnabled = useCursor
},
new CuiElement().Parent = parent,
panelName
}
};
return NewElement;
}
public static void CreatePanel(ref CuiElementContainer container, string panel, string color, string aMin, string aMax, bool cursor = false)
{
container.Add(new CuiPanel
{
Image = { Color = color },
RectTransform = { AnchorMin = aMin, AnchorMax = aMax },
CursorEnabled = cursor
},
panel);
}
public static void CreateLabel(ref CuiElementContainer container, string panel, string color, string text, int size, string aMin, string aMax, float fadein = 1.0f, TextAnchor align = TextAnchor.MiddleCenter)
{
if (DisableUI_FadeIn)
fadein = 0;
container.Add(new CuiLabel
{
Text = { Color = color, FontSize = size, Align = align, FadeIn = fadein, Text = text },
RectTransform = { AnchorMin = aMin, AnchorMax = aMax }
},
panel);
}
public static void CreateButton(ref CuiElementContainer container, string panel, string color, string text, int size, string aMin, string aMax, string command, float fadein = 1.0f, TextAnchor align = TextAnchor.MiddleCenter)
{
if (DisableUI_FadeIn)
fadein = 0;
container.Add(new CuiButton
{
Button = { Color = color, Command = command, FadeIn = fadein },
RectTransform = { AnchorMin = aMin, AnchorMax = aMax },
Text = { Text = text, FontSize = size, Align = align }
},
panel);
}
public static void LoadImage(ref CuiElementContainer container, string panel, string png, string aMin, string aMax)
{
container.Add(new CuiElement
{
Parent = panel,
Components =
{
new CuiRawImageComponent {Png = png },
new CuiRectTransformComponent {AnchorMin = aMin, AnchorMax = aMax }
}
});
}
public static void CreateTextOverlay(ref CuiElementContainer container, string panel, string text, string color, int size, string aMin, string aMax, TextAnchor align = TextAnchor.MiddleCenter, float fadein = 1.0f)
{
if (DisableUI_FadeIn)
fadein = 0;
container.Add(new CuiLabel
{
Text = { Color = color, FontSize = size, Align = align, FadeIn = fadein, Text = text },
RectTransform = { AnchorMin = aMin, AnchorMax = aMax }
},
panel);
}
}
class UIColours
{
public static readonly UIColours Black_100 = new UIColours("0.00 0.00 0.00 1.00"); //Black
public static readonly UIColours Black_050 = new UIColours("0.00 0.00 0.00 0.50");
public static readonly UIColours Black_015 = new UIColours("0.00 0.00 0.00 0.15");
public static readonly UIColours Grey2_100 = new UIColours("0.20 0.20 0.20 1.00"); //Grey 2
public static readonly UIColours Grey2_050 = new UIColours("0.20 0.20 0.20 0.50");
public static readonly UIColours Grey2_015 = new UIColours("0.20 0.20 0.20 0.15");
public static readonly UIColours Grey5_100 = new UIColours("0.50 0.50 0.50 1.00"); //Grey 5
public static readonly UIColours Grey5_050 = new UIColours("0.50 0.50 0.50 0.50");
public static readonly UIColours Grey5_015 = new UIColours("0.50 0.50 0.50 0.15");
public static readonly UIColours Grey8_100 = new UIColours("0.80 0.80 0.80 1.00"); //Grey 8
public static readonly UIColours Grey8_050 = new UIColours("0.80 0.80 0.80 0.50");
public static readonly UIColours Grey8_015 = new UIColours("0.80 0.80 0.80 0.15");
public static readonly UIColours White_100 = new UIColours("1.00 1.00 1.00 1.00"); //White
public static readonly UIColours White_050 = new UIColours("1.00 1.00 1.00 0.50");
public static readonly UIColours White_015 = new UIColours("1.00 1.00 1.00 0.15");
public static readonly UIColours Red_100 = new UIColours("0.70 0.20 0.20 1.00"); //Red
public static readonly UIColours Red_050 = new UIColours("0.70 0.20 0.20 0.50");
public static readonly UIColours Red_015 = new UIColours("0.70 0.20 0.20 0.15");
public static readonly UIColours Green_100 = new UIColours("0.20 0.70 0.20 1.00"); //Green
public static readonly UIColours Green_050 = new UIColours("0.20 0.70 0.20 0.50");
public static readonly UIColours Green_015 = new UIColours("0.20 0.70 0.20 0.15");
public static readonly UIColours Blue_100 = new UIColours("0.20 0.20 0.70 1.00"); //Blue
public static readonly UIColours Blue_050 = new UIColours("0.20 0.20 0.70 0.50");
public static readonly UIColours Blue_015 = new UIColours("0.20 0.20 0.70 0.15");
public static readonly UIColours Yellow_100 = new UIColours("0.90 0.90 0.20 1.00"); //Yellow
public static readonly UIColours Yellow_050 = new UIColours("0.90 0.90 0.20 0.50");
public static readonly UIColours Yellow_015 = new UIColours("0.90 0.90 0.20 0.15");
public static readonly UIColours Gold_100 = new UIColours("0.745 0.550 0.045 1.00"); //Gold
public string Value;
public int Index;
private UIColours(string value)
{
Value = value;
}
public static implicit operator string(UIColours uiColours)
{
return uiColours.Value;
}
}
private void DestroyAllPvXUI(BasePlayer player)
{
foreach (string _v in GuiList)
{
CuiHelper.DestroyUi(player, _v);
}
//DestroyEntries(player);
}
private void DestroyPvXUI(BasePlayer player, string _ui)
{
CuiHelper.DestroyUi(player, _ui);
}
#endregion
#region GUIs
class GUI
{
public static void CreateSignature(ref CuiElementContainer container, string panel, string color, string text, int size, float fadein = 1.0f, TextAnchor align = TextAnchor.LowerLeft)
{
float widthPadding = 0.017f;
float heightPadding = 0.013f;
float textWidth = 0.966f;
float textHeight = 0.040f;
float minWidth = widthPadding;
float maxWidth = widthPadding + textWidth;
float minHeight = heightPadding;
float maxHeight = heightPadding + textHeight;
QUI.CreateLabel(ref container,
panel,
color,
text,
size,
$"{minWidth} {minHeight}",
$"{maxWidth} {maxHeight}",
fadein,
align);
}
public static class Create
{
public static void AdminIndicator(BasePlayer Player)
{
Vector2 dimension = new Vector2(0.174F, 0.028F);
Vector2 posMin = new Vector2(instance.adminIndicatorMinWid, instance.adminIndicatorMinHei);
Vector2 posMax = posMin + dimension;
var adminCountContainer = QUI.CreateElementContainer(
pvxAdminUI,
UIColours.Black_050,
$"{posMin.x} {posMin.y}",
$"{posMax.x} {posMax.y}");
QUI.CreateLabel(ref adminCountContainer, pvxAdminUI, UIColours.White_100, "PvX Tickets", 10, "0.0 0.1", "0.3 0.90");
QUI.CreateLabel(ref adminCountContainer, pvxAdminUI, UIColours.White_100, string.Format("Open: {0}", ModeSwitch.Ticket.Data.ticketData.Tickets.Count.ToString()), 10, "0.301 0.1", "0.65 0.90");
QUI.CreateLabel(ref adminCountContainer, pvxAdminUI, UIColours.White_100, string.Format("Closed: {0}", ModeSwitch.Ticket.Data.logData.Logs.Count.ToString()), 10, "0.651 0.1", "1 0.90");
CuiHelper.AddUi(Player, adminCountContainer);
}
public static void PlayerIndicator(BasePlayer Player)
{
Vector2 dimension = new Vector2(0.031F, 0.028F);
Vector2 posMin = new Vector2(instance.playerIndicatorMinWid, instance.playerIndicatorMinHei);
Vector2 posMax = posMin + dimension;
var indicatorContainer = QUI.CreateElementContainer(
pvxIndicator,
UIColours.Black_050,
"0.48 0.11",
"0.52 0.14"
);
if (Players.Data.playerData.Info[Player.userID].mode == Mode.NA)
indicatorContainer = QUI.CreateElementContainer(
pvxIndicator,
UIColours.Red_100,
"0.48 0.11",
"0.52 0.14");
else if (ModeSwitch.Ticket.Data.ticketData.Tickets.ContainsKey(Player.userID))
indicatorContainer = QUI.CreateElementContainer(
pvxIndicator,
UIColours.Yellow_015,
"0.48 0.11",
"0.52 0.14");
if (Players.Admins.Mode.ContainsPlayer(Player.userID))
{
QUI.CreateLabel(
ref indicatorContainer,
pvxIndicator,
UIColours.Green_100,
Players.Data.playerData.Info[Player.userID].mode,
15,
"0.1 0.1",
"0.90 0.99");
}
else
{
QUI.CreateLabel(ref indicatorContainer,
pvxIndicator,
UIColours.White_100,
Players.Data.playerData.Info[Player.userID].mode,
15,
"0.1 0.1",
"0.90 0.99");
}
CuiHelper.AddUi(Player, indicatorContainer);
}
public static void MenuButton(ref CuiElementContainer container, string panel, string color, string text, int size, int location, string command, float fadein = 1.0f, TextAnchor align = TextAnchor.MiddleCenter)
{
float widthPadding = 0.108f;
float heightPadding = 0.013f;
float buttonWidth = 0.784f;
float buttonHeight = 0.107f;
float buttonPadding = 0.027f;
float minWidth = widthPadding;
float maxWidth = widthPadding + buttonWidth;
float minHeight = 1.00f - (buttonHeight + heightPadding + ((buttonHeight + buttonPadding) * location));
float maxHeight = 1.00f - (heightPadding + ((buttonHeight + buttonPadding) * location));
QUI.CreateButton(ref container,
panel,
color,
text,
size,
$"{minWidth} {minHeight}",
$"{maxWidth} {maxHeight}",
command,
fadein,
align);
}
public static void MenuText(ref CuiElementContainer container, string panel, string color, string text, int size, int location, float fadein = 1.0f, TextAnchor align = TextAnchor.LowerLeft)
{
float widthPadding = 0.017f;
float heightPadding = 0.013f;
float textWidth = 0.966f;
float textHeight = 0.040f;
float textPadding = 0.001f;
float minWidth = widthPadding;
float maxWidth = widthPadding + textWidth;
float minHeight = 1.00f - (textHeight + heightPadding + ((textHeight + textPadding) * location));
float maxHeight = 1.00f - (heightPadding + ((textHeight + textPadding) * location));
QUI.CreateLabel(ref container,
panel,
color,
text,
size,
$"{minWidth} {minHeight}",
$"{maxWidth} {maxHeight}",
fadein,
align);
}
public static void ContentButton(ref CuiElementContainer container, string panel, string color, string text, int size, int location, string command, float fadein = 1.0f, TextAnchor align = TextAnchor.MiddleCenter)
{
float widthPadding = 0.017f;
float heightPadding = 0.013f;
float buttonWidth = 0.1724f;
float buttonHeight = 0.068f;
float buttonPadding = 0.017f;
float minWidth = 1f - (buttonPadding + buttonWidth + ((buttonWidth + buttonPadding) * location));
float maxWidth = 1f - (buttonPadding + ((buttonWidth + buttonPadding) * location));
float minHeight = heightPadding;
float maxHeight = widthPadding + buttonHeight;
QUI.CreateButton(ref container,
panel,
color,
text,
size,
$"{minWidth} {minHeight}",
$"{maxWidth} {maxHeight}",
command,
fadein,
align);
}
public static class Menu
{
public static void Background(BasePlayer player)
{
var MainGui = QUI.CreateElementContainer(pvxMenuBack, UIColours.Black_100, "0.297 0.125", "0.703 0.958", true);
CuiHelper.AddUi(player, MainGui);
}
public static void Title(BasePlayer player)
{
var BannerGui = QUI.CreateElementContainer(pvxMenuBanner, UIColours.Grey2_100, "0.297 0.824", "0.703 0.958", true);
var BannerTitle = QUI.CreateElementContainer(pvxMenuBannerTitle, UIColours.Grey5_100, "0.302 0.833", "0.495 0.949");
QUI.CreateLabel(ref BannerTitle, pvxMenuBannerTitle, UIColours.Black_100, "PvX Selector", 35, "0 0", "1 1", 1);
var BannerVersion = QUI.CreateElementContainer(pvxMenuBannerVersion, UIColours.Grey5_100, "0.500 0.833", "0.594 0.949");
QUI.CreateLabel(ref BannerVersion, pvxMenuBannerVersion, UIColours.Black_100, "Version", 25, "0.0 0.6", "1.0 1.0", 1);
QUI.CreateLabel(ref BannerVersion, pvxMenuBannerVersion, UIColours.Black_100, instance.Version.ToString(), 21, "0.0 0.0", "1.0 0.6", 1);
var BannerModType = QUI.CreateElementContainer(pvxMenuBannerModType, UIColours.Gold_100, "0.599 0.833", "0.698 0.949");
QUI.CreateLabel(ref BannerModType, pvxMenuBannerModType, UIColours.Black_100,
instance.PvXModtype, 25, "0.0 0.0", "1.0 1.0", 1);
CuiHelper.AddUi(player, BannerGui);
CuiHelper.AddUi(player, BannerTitle);
CuiHelper.AddUi(player, BannerVersion);
CuiHelper.AddUi(player, BannerModType);
}
public static void Selector(BasePlayer player)
{
var SideMenuGui = QUI.CreateElementContainer(pvxMenuSide, UIColours.Grey2_100, "0.607 0.125", "0.703 0.815", true);
GUI.Create.MenuButton(ref SideMenuGui, pvxMenuSide, UIColours.Grey5_100, "<color=black>Welcome</color>", 15, 0, "PvXMenuCmd Welcome");
GUI.Create.MenuButton(ref SideMenuGui, pvxMenuSide, UIColours.Grey5_100, "<color=black>Settings</color>", 15, 1, "PvXMenuCmd Settings");
GUI.Create.MenuButton(ref SideMenuGui, pvxMenuSide, UIColours.Grey5_100, "<color=black>Character</color>", 15, 2, "PvXMenuCmd Character");
GUI.Create.MenuButton(ref SideMenuGui, pvxMenuSide, UIColours.Green_100, "<color=black>Players</color>", 15, 3, "PvXMenuCmd Players");
GUI.Create.MenuButton(ref SideMenuGui, pvxMenuSide, UIColours.Green_100, "<color=black>Tickets</color>", 15, 4, "PvXMenuCmd Tickets");
GUI.Create.MenuButton(ref SideMenuGui, pvxMenuSide, UIColours.Green_100, "<color=black>Settings</color>", 15, 5, "PvXMenuCmd Admin Settings");
GUI.Create.MenuButton(ref SideMenuGui, pvxMenuSide, UIColours.Green_100, "<color=black>Debug</color>", 15, 6, "PvXMenuCmd Admin Debug");
QUI.CreateButton(ref SideMenuGui, pvxMenuSide, UIColours.Red_100, "<color=black>X</color>", 15, "0.108 0.013", "0.892 0.047", "PvXMenuCmd Close");
CuiHelper.AddUi(player, SideMenuGui);
}
public static class Content
{
public static class WelcomePages
{
public static void Page1(BasePlayer Player)
{
var MenuGui = QUI.CreateElementContainer(
pvxMenuMain,
UIColours.Grey2_100,
"0.297 0.125",
"0.602 0.815",
true);
Create.MenuText(ref MenuGui, pvxMenuMain, UIColours.Black_100, Messages.Get(Lang.Menu.WelcomePage.P1L01), 16, 0);
Create.MenuText(ref MenuGui, pvxMenuMain, UIColours.Black_100, Messages.Get(Lang.Menu.WelcomePage.P1L02), 16, 1);
Create.MenuText(ref MenuGui, pvxMenuMain, UIColours.Black_100, Messages.Get(Lang.Menu.WelcomePage.P1L03), 16, 2);
Create.MenuText(ref MenuGui, pvxMenuMain, UIColours.Black_100, Messages.Get(Lang.Menu.WelcomePage.P1L04), 16, 3);
Create.MenuText(ref MenuGui, pvxMenuMain, UIColours.Black_100, Messages.Get(Lang.Menu.WelcomePage.P1L05), 16, 4);
Create.MenuText(ref MenuGui, pvxMenuMain, UIColours.Black_100, Messages.Get(Lang.Menu.WelcomePage.P1L06), 16, 5);
Create.MenuText(ref MenuGui, pvxMenuMain, UIColours.Black_100, Messages.Get(Lang.Menu.WelcomePage.P1L07), 16, 6);
Create.MenuText(ref MenuGui, pvxMenuMain, UIColours.Black_100, Messages.Get(Lang.Menu.WelcomePage.P1L08), 16, 7);
Create.MenuText(ref MenuGui, pvxMenuMain, UIColours.Black_100, Messages.Get(Lang.Menu.WelcomePage.P1L09), 16, 8);
// ... [Code preview truncated due to length. Full source in attached file] ...