Novetus_src/NovetusLauncher/NovetusLauncher/LauncherFuncs.cs

768 lines
26 KiB
C#

/*
* Created by SharpDevelop.
* User: BITL
* Date: 6/13/2017
* Time: 10:24 AM
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using System.IO;
using System.Diagnostics;
using System.Threading;
using System.Reflection;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using Microsoft.Win32;
using System.Runtime.InteropServices;
using System.Security.Principal;
namespace NovetusLauncher
{
/// <summary>
/// Description of LauncherFuncs.
/// </summary>
public class LauncherFuncs
{
public LauncherFuncs()
{
}
public static void ReadConfigValues(string cfgpath)
{
string line1;
string Decryptline1, Decryptline2, Decryptline3, Decryptline4, Decryptline5, Decryptline6, Decryptline7, Decryptline8;
using(StreamReader reader = new StreamReader(cfgpath))
{
line1 = reader.ReadLine();
}
if (!SecurityFuncs.IsBase64String(line1))
return;
string ConvertedLine = SecurityFuncs.Base64Decode(line1);
string[] result = ConvertedLine.Split('|');
Decryptline1 = SecurityFuncs.Base64Decode(result[0]);
Decryptline2 = SecurityFuncs.Base64Decode(result[1]);
Decryptline3 = SecurityFuncs.Base64Decode(result[2]);
Decryptline4 = SecurityFuncs.Base64Decode(result[3]);
Decryptline5 = SecurityFuncs.Base64Decode(result[4]);
Decryptline6 = SecurityFuncs.Base64Decode(result[5]);
Decryptline7 = SecurityFuncs.Base64Decode(result[6]);
Decryptline8 = SecurityFuncs.Base64Decode(result[7]);
bool bline1 = Convert.ToBoolean(Decryptline1);
GlobalVars.CloseOnLaunch = bline1;
int iline2 = Convert.ToInt32(Decryptline2);
GlobalVars.UserID = iline2;
GlobalVars.PlayerName = Decryptline3;
GlobalVars.SelectedClient = Decryptline4;
GlobalVars.Map = Decryptline5;
int iline6 = Convert.ToInt32(Decryptline6);
GlobalVars.RobloxPort = iline6;
int iline7 = Convert.ToInt32(Decryptline7);
GlobalVars.PlayerLimit = iline7;
bool bline8 = Convert.ToBoolean(Decryptline8);
GlobalVars.DisableTeapotTurret = bline8;
ReadCustomizationValues(cfgpath.Replace(".txt","_customization.txt"));
}
public static void WriteConfigValues(string cfgpath)
{
string[] lines = {
SecurityFuncs.Base64Encode(GlobalVars.CloseOnLaunch.ToString()),
SecurityFuncs.Base64Encode(GlobalVars.UserID.ToString()),
SecurityFuncs.Base64Encode(GlobalVars.PlayerName.ToString()),
SecurityFuncs.Base64Encode(GlobalVars.SelectedClient.ToString()),
SecurityFuncs.Base64Encode(GlobalVars.Map.ToString()),
SecurityFuncs.Base64Encode(GlobalVars.RobloxPort.ToString()),
SecurityFuncs.Base64Encode(GlobalVars.PlayerLimit.ToString()),
SecurityFuncs.Base64Encode(GlobalVars.DisableTeapotTurret.ToString())
};
File.WriteAllText(cfgpath, SecurityFuncs.Base64Encode(string.Join("|",lines)));
WriteCustomizationValues(cfgpath.Replace(".txt","_customization.txt"));
}
public static void ResetConfigValues()
{
GlobalVars.CloseOnLaunch = false;
GlobalVars.UserID = 0;
GlobalVars.PlayerName = "Player";
GlobalVars.SelectedClient = GlobalVars.DefaultClient;
GlobalVars.Map = "Baseplate.rbxl";
GlobalVars.RobloxPort = 53640;
GlobalVars.PlayerLimit = 12;
GlobalVars.DisableTeapotTurret = false;
ResetCustomizationValues();
}
public static void ReadCustomizationValues(string cfgpath)
{
string line1;
string Decryptline1, Decryptline2, Decryptline3, Decryptline4, Decryptline5, Decryptline6, Decryptline7, Decryptline8, Decryptline9, Decryptline10, Decryptline11, Decryptline12, Decryptline13, Decryptline14, Decryptline15, Decryptline16, Decryptline17, Decryptline18, Decryptline19, Decryptline20, Decryptline21;
using(StreamReader reader = new StreamReader(cfgpath))
{
line1 = reader.ReadLine();
}
if (!SecurityFuncs.IsBase64String(line1))
return;
string ConvertedLine = SecurityFuncs.Base64Decode(line1);
string[] result = ConvertedLine.Split('|');
Decryptline1 = SecurityFuncs.Base64Decode(result[0]);
Decryptline2 = SecurityFuncs.Base64Decode(result[1]);
Decryptline3 = SecurityFuncs.Base64Decode(result[2]);
Decryptline4 = SecurityFuncs.Base64Decode(result[3]);
Decryptline5 = SecurityFuncs.Base64Decode(result[4]);
Decryptline6 = SecurityFuncs.Base64Decode(result[5]);
Decryptline7 = SecurityFuncs.Base64Decode(result[6]);
Decryptline8 = SecurityFuncs.Base64Decode(result[7]);
Decryptline9 = SecurityFuncs.Base64Decode(result[8]);
Decryptline10 = SecurityFuncs.Base64Decode(result[9]);
Decryptline11 = SecurityFuncs.Base64Decode(result[10]);
Decryptline12 = SecurityFuncs.Base64Decode(result[11]);
Decryptline13 = SecurityFuncs.Base64Decode(result[12]);
Decryptline14 = SecurityFuncs.Base64Decode(result[13]);
Decryptline15 = SecurityFuncs.Base64Decode(result[14]);
Decryptline16 = SecurityFuncs.Base64Decode(result[15]);
Decryptline17 = SecurityFuncs.Base64Decode(result[16]);
Decryptline18 = SecurityFuncs.Base64Decode(result[17]);
Decryptline19 = SecurityFuncs.Base64Decode(result[18]);
Decryptline20 = SecurityFuncs.Base64Decode(result[19]);
Decryptline21 = SecurityFuncs.Base64Decode(result[20]);
GlobalVars.Custom_Hat1ID_Offline = Decryptline1;
GlobalVars.Custom_Hat2ID_Offline = Decryptline2;
GlobalVars.Custom_Hat3ID_Offline = Decryptline3;
int iline4 = Convert.ToInt32(Decryptline4);
GlobalVars.HeadColorID = iline4;
int iline5 = Convert.ToInt32(Decryptline5);
GlobalVars.TorsoColorID = iline5;
int iline6 = Convert.ToInt32(Decryptline6);
GlobalVars.LeftArmColorID = iline6;
int iline7 = Convert.ToInt32(Decryptline7);
GlobalVars.RightArmColorID = iline7;
int iline8 = Convert.ToInt32(Decryptline8);
GlobalVars.LeftLegColorID = iline8;
int iline9 = Convert.ToInt32(Decryptline9);
GlobalVars.RightLegColorID = iline9;
GlobalVars.ColorMenu_HeadColor = Decryptline10;
GlobalVars.ColorMenu_TorsoColor = Decryptline11;
GlobalVars.ColorMenu_LeftArmColor = Decryptline12;
GlobalVars.ColorMenu_RightArmColor = Decryptline13;
GlobalVars.ColorMenu_LeftLegColor = Decryptline14;
GlobalVars.ColorMenu_RightLegColor = Decryptline15;
GlobalVars.Custom_Face_Offline = Decryptline16;
GlobalVars.Custom_Head_Offline = Decryptline17;
GlobalVars.Custom_T_Shirt_Offline = Decryptline18;
GlobalVars.Custom_Shirt_Offline = Decryptline19;
GlobalVars.Custom_Pants_Offline = Decryptline20;
GlobalVars.Custom_Icon_Offline = Decryptline21;
ReloadLoadtextValue();
}
public static void WriteCustomizationValues(string cfgpath)
{
string[] lines = {
SecurityFuncs.Base64Encode(GlobalVars.Custom_Hat1ID_Offline.ToString()),
SecurityFuncs.Base64Encode(GlobalVars.Custom_Hat2ID_Offline.ToString()),
SecurityFuncs.Base64Encode(GlobalVars.Custom_Hat3ID_Offline.ToString()),
SecurityFuncs.Base64Encode(GlobalVars.HeadColorID.ToString()),
SecurityFuncs.Base64Encode(GlobalVars.TorsoColorID.ToString()),
SecurityFuncs.Base64Encode(GlobalVars.LeftArmColorID.ToString()),
SecurityFuncs.Base64Encode(GlobalVars.RightArmColorID.ToString()),
SecurityFuncs.Base64Encode(GlobalVars.LeftLegColorID.ToString()),
SecurityFuncs.Base64Encode(GlobalVars.RightLegColorID.ToString()),
SecurityFuncs.Base64Encode(GlobalVars.ColorMenu_HeadColor.ToString()),
SecurityFuncs.Base64Encode(GlobalVars.ColorMenu_TorsoColor.ToString()),
SecurityFuncs.Base64Encode(GlobalVars.ColorMenu_LeftArmColor.ToString()),
SecurityFuncs.Base64Encode(GlobalVars.ColorMenu_RightArmColor.ToString()),
SecurityFuncs.Base64Encode(GlobalVars.ColorMenu_LeftLegColor.ToString()),
SecurityFuncs.Base64Encode(GlobalVars.ColorMenu_RightLegColor.ToString()),
SecurityFuncs.Base64Encode(GlobalVars.Custom_Face_Offline.ToString()),
SecurityFuncs.Base64Encode(GlobalVars.Custom_Head_Offline.ToString()),
SecurityFuncs.Base64Encode(GlobalVars.Custom_T_Shirt_Offline.ToString()),
SecurityFuncs.Base64Encode(GlobalVars.Custom_Shirt_Offline.ToString()),
SecurityFuncs.Base64Encode(GlobalVars.Custom_Pants_Offline.ToString()),
SecurityFuncs.Base64Encode(GlobalVars.Custom_Icon_Offline.ToString())
};
File.WriteAllText(cfgpath, SecurityFuncs.Base64Encode(string.Join("|",lines)));
ReloadLoadtextValue();
}
public static void ResetCustomizationValues()
{
GlobalVars.Custom_Hat1ID_Offline = "NoHat.rbxm";
GlobalVars.Custom_Hat2ID_Offline = "NoHat.rbxm";
GlobalVars.Custom_Hat3ID_Offline = "NoHat.rbxm";
GlobalVars.Custom_Face_Offline = "DefaultFace.rbxm";
GlobalVars.Custom_Head_Offline = "DefaultHead.rbxm";
GlobalVars.Custom_T_Shirt_Offline = "NoTShirt.rbxm";
GlobalVars.Custom_Shirt_Offline = "NoShirt.rbxm";
GlobalVars.Custom_Pants_Offline = "NoPants.rbxm";
GlobalVars.Custom_Icon_Offline = "NBC";
GlobalVars.HeadColorID = 24;
GlobalVars.TorsoColorID = 23;
GlobalVars.LeftArmColorID = 24;
GlobalVars.RightArmColorID = 24;
GlobalVars.LeftLegColorID = 119;
GlobalVars.RightLegColorID = 119;
GlobalVars.ColorMenu_HeadColor = "Color [A=255, R=245, G=205, B=47]";
GlobalVars.ColorMenu_TorsoColor = "Color [A=255, R=13, G=105, B=172]";
GlobalVars.ColorMenu_LeftArmColor = "Color [A=255, R=245, G=205, B=47]";
GlobalVars.ColorMenu_RightArmColor = "Color [A=255, R=245, G=205, B=47]";
GlobalVars.ColorMenu_LeftLegColor = "Color [A=255, R=164, G=189, B=71]";
GlobalVars.ColorMenu_RightLegColor = "Color [A=255, R=164, G=189, B=71]";
ReloadLoadtextValue();
}
public static void ReloadLoadtextValue()
{
GlobalVars.loadtext = GlobalVars.Custom_Hat1ID_Offline + "','" +
GlobalVars.Custom_Hat2ID_Offline + "','" +
GlobalVars.Custom_Hat3ID_Offline + "'," +
GlobalVars.HeadColorID + "," +
GlobalVars.TorsoColorID + "," +
GlobalVars.LeftArmColorID + "," +
GlobalVars.RightArmColorID + "," +
GlobalVars.LeftLegColorID + "," +
GlobalVars.RightLegColorID + ",'" +
GlobalVars.Custom_T_Shirt_Offline + "','" +
GlobalVars.Custom_Shirt_Offline + "','" +
GlobalVars.Custom_Pants_Offline + "','" +
GlobalVars.Custom_Face_Offline + "','" +
GlobalVars.Custom_Head_Offline + "','" +
GlobalVars.Custom_Icon_Offline + "'";
}
public static void ReadClientValues(string clientpath)
{
string line1;
string Decryptline1, Decryptline2, Decryptline3, Decryptline4, Decryptline5, Decryptline6, Decryptline7;
using(StreamReader reader = new StreamReader(clientpath))
{
line1 = reader.ReadLine();
}
if (!SecurityFuncs.IsBase64String(line1))
return;
string ConvertedLine = SecurityFuncs.Base64Decode(line1);
string[] result = ConvertedLine.Split('|');
Decryptline1 = SecurityFuncs.Base64Decode(result[0]);
Decryptline2 = SecurityFuncs.Base64Decode(result[1]);
Decryptline3 = SecurityFuncs.Base64Decode(result[2]);
Decryptline4 = SecurityFuncs.Base64Decode(result[3]);
Decryptline5 = SecurityFuncs.Base64Decode(result[4]);
Decryptline6 = SecurityFuncs.Base64Decode(result[5]);
Decryptline7 = SecurityFuncs.Base64Decode(result[6]);
bool bline1 = Convert.ToBoolean(Decryptline1);
GlobalVars.UsesPlayerName = bline1;
bool bline2 = Convert.ToBoolean(Decryptline2);
GlobalVars.UsesID = bline2;
bool bline3 = Convert.ToBoolean(Decryptline3);
GlobalVars.LoadsAssetsOnline = bline3;
bool bline4 = Convert.ToBoolean(Decryptline4);
GlobalVars.LegacyMode = bline4;
GlobalVars.SelectedClientMD5 = Decryptline5;
GlobalVars.SelectedClientScriptMD5 = Decryptline6;
GlobalVars.SelectedClientDesc = Decryptline7;
}
public static void GeneratePlayerID()
{
CryptoRandom random = new CryptoRandom();
int randomID = 0;
int randIDmode = random.Next(0,7);
if (randIDmode == 0)
{
randomID = random.Next(0, 99);
}
else if (randIDmode == 1)
{
randomID = random.Next(0, 999);
}
else if (randIDmode == 2)
{
randomID = random.Next(0, 9999);
}
else if (randIDmode == 3)
{
randomID = random.Next(0, 99999);
}
else if (randIDmode == 4)
{
randomID = random.Next(0, 999999);
}
else if (randIDmode == 5)
{
randomID = random.Next(0, 9999999);
}
else if (randIDmode == 6)
{
randomID = random.Next(0, 99999999);
}
else if (randIDmode == 7)
{
randomID = random.Next();
}
//2147483647 is max id.
GlobalVars.UserID = randomID;
}
}
//Discord Rich Presence Integration :D
public class DiscordRpc
{
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void ReadyCallback();
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void DisconnectedCallback(int errorCode, string message);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void ErrorCallback(int errorCode, string message);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void JoinCallback(string secret);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void SpectateCallback(string secret);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void RequestCallback(JoinRequest request);
public struct EventHandlers
{
public ReadyCallback readyCallback;
public DisconnectedCallback disconnectedCallback;
public ErrorCallback errorCallback;
public JoinCallback joinCallback;
public SpectateCallback spectateCallback;
public RequestCallback requestCallback;
}
[System.Serializable]
public struct RichPresence
{
public string state; /* max 128 bytes */
public string details; /* max 128 bytes */
public long startTimestamp;
public long endTimestamp;
public string largeImageKey; /* max 32 bytes */
public string largeImageText; /* max 128 bytes */
public string smallImageKey; /* max 32 bytes */
public string smallImageText; /* max 128 bytes */
public string partyId; /* max 128 bytes */
public int partySize;
public int partyMax;
public string matchSecret; /* max 128 bytes */
public string joinSecret; /* max 128 bytes */
public string spectateSecret; /* max 128 bytes */
public bool instance;
}
[System.Serializable]
public struct JoinRequest
{
public string userId;
public string username;
public string avatar;
}
public enum Reply
{
No = 0,
Yes = 1,
Ignore = 2
}
[DllImport("discord-rpc", EntryPoint = "Discord_Initialize", CallingConvention = CallingConvention.Cdecl)]
public static extern void Initialize(string applicationId, ref EventHandlers handlers, bool autoRegister, string optionalSteamId);
[DllImport("discord-rpc", EntryPoint = "Discord_Shutdown", CallingConvention = CallingConvention.Cdecl)]
public static extern void Shutdown();
[DllImport("discord-rpc", EntryPoint = "Discord_RunCallbacks", CallingConvention = CallingConvention.Cdecl)]
public static extern void RunCallbacks();
[DllImport("discord-rpc", EntryPoint = "Discord_UpdatePresence", CallingConvention = CallingConvention.Cdecl)]
public static extern void UpdatePresence(ref RichPresence presence);
[DllImport("discord-rpc", EntryPoint = "Discord_Respond", CallingConvention = CallingConvention.Cdecl)]
public static extern void Respond(string userId, Reply reply);
}
public static class TextLineRemover
{
public static void RemoveTextLines(IList<string> linesToRemove, string filename, string tempFilename)
{
// Initial values
int lineNumber = 0;
int linesRemoved = 0;
DateTime startTime = DateTime.Now;
// Read file
using (var sr = new StreamReader(filename))
{
// Write new file
using (var sw = new StreamWriter(tempFilename))
{
// Read lines
string line;
while ((line = sr.ReadLine()) != null)
{
lineNumber++;
// Look for text to remove
if (!ContainsString(line, linesToRemove))
{
// Keep lines that does not match
sw.WriteLine(line);
}
else
{
// Ignore lines that DO match
linesRemoved++;
InvokeOnRemovedLine(new RemovedLineArgs { RemovedLine = line, RemovedLineNumber = lineNumber});
}
}
}
}
// Delete original file
File.Delete(filename);
// ... and put the temp file in its place.
File.Move(tempFilename, filename);
// Final calculations
DateTime endTime = DateTime.Now;
InvokeOnFinished(new FinishedArgs {LinesRemoved = linesRemoved, TotalLines = lineNumber, TotalTime = endTime.Subtract(startTime)});
}
private static bool ContainsString(string line, IEnumerable<string> linesToRemove)
{
foreach (var lineToRemove in linesToRemove)
{
if(line.Contains(lineToRemove))
return true;
}
return false;
}
public static event RemovedLine OnRemovedLine;
public static event Finished OnFinished;
public static void InvokeOnFinished(FinishedArgs args)
{
Finished handler = OnFinished;
if (handler != null) handler(null, args);
}
public static void InvokeOnRemovedLine(RemovedLineArgs args)
{
RemovedLine handler = OnRemovedLine;
if (handler != null) handler(null, args);
}
}
public delegate void Finished(object sender, FinishedArgs args);
public class FinishedArgs
{
public int TotalLines { get; set; }
public int LinesRemoved { get; set; }
public TimeSpan TotalTime { get; set; }
}
public delegate void RemovedLine(object sender, RemovedLineArgs args);
public class RemovedLineArgs
{
public string RemovedLine { get; set; }
public int RemovedLineNumber { get; set; }
}
/// <summary>
/// Description of SecurityFuncs.
/// </summary>
public class SecurityFuncs
{
public SecurityFuncs()
{
}
public static string Base64Decode(string base64EncodedData)
{
var base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData);
return System.Text.Encoding.UTF8.GetString(base64EncodedBytes);
}
public static string Base64Encode(string plainText)
{
var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText);
return System.Convert.ToBase64String(plainTextBytes);
}
public static bool IsBase64String(string s)
{
s = s.Trim();
return (s.Length % 4 == 0) && Regex.IsMatch(s, @"^[a-zA-Z0-9\+/]*={0,3}$", RegexOptions.None);
}
public static void RegisterURLProtocol(string protocolName, string applicationPath, string description)
{
RegistryKey subKey = Registry.ClassesRoot.CreateSubKey(protocolName);
subKey.SetValue((string) null, (object) description);
subKey.SetValue("URL Protocol", (object) string.Empty);
Registry.ClassesRoot.CreateSubKey(protocolName + "\\Shell");
Registry.ClassesRoot.CreateSubKey(protocolName + "\\Shell\\open");
Registry.ClassesRoot.CreateSubKey(protocolName + "\\Shell\\open\\command").SetValue((string) null, (object) ("\"" + applicationPath + "\" \"%1\""));
}
public static long UnixTimeNow()
{
var timeSpan = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0));
return (long)timeSpan.TotalSeconds;
}
public static bool checkClientMD5(string client)
{
if (GlobalVars.AdminMode != true)
{
string rbxexe = "";
if (GlobalVars.LegacyMode == true)
{
rbxexe = GlobalVars.BasePath + "\\clients\\" + client + "\\RobloxApp.exe";
}
else
{
rbxexe = GlobalVars.BasePath + "\\clients\\" + client + "\\RobloxApp_client.exe";
}
using (var md5 = MD5.Create())
{
using (var stream = File.OpenRead(rbxexe))
{
byte[] hash = md5.ComputeHash(stream);
string clientMD5 = BitConverter.ToString(hash).Replace("-", "");
if (clientMD5.Equals(GlobalVars.SelectedClientMD5))
{
return true;
}
else
{
return false;
}
}
}
}
else
{
return true;
}
}
public static bool checkScriptMD5(string client)
{
if (GlobalVars.AdminMode != true)
{
string rbxscript = GlobalVars.BasePath + "\\clients\\" + client + "\\content\\scripts\\CSMPFunctions.lua";
using (var md5 = MD5.Create())
{
using (var stream = File.OpenRead(rbxscript))
{
byte[] hash = md5.ComputeHash(stream);
string clientMD5 = BitConverter.ToString(hash).Replace("-", "");
if (clientMD5.Equals(GlobalVars.SelectedClientScriptMD5))
{
return true;
}
else
{
return false;
}
}
}
}
else
{
return true;
}
}
public static string CalculateMD5(string filename)
{
using (var md5 = MD5.Create())
{
using (var stream = File.OpenRead(filename))
{
return BitConverter.ToString(md5.ComputeHash(stream)).Replace("-","");
}
}
}
public static bool IsElevated
{
get
{
return WindowsIdentity.GetCurrent().Owner.IsWellKnown(WellKnownSidType.BuiltinAdministratorsSid);
}
}
}
public static class RichTextBoxExtensions
{
public static void AppendText(this RichTextBox box, string text, Color color)
{
box.SelectionStart = box.TextLength;
box.SelectionLength = 0;
box.SelectionColor = color;
box.AppendText(text);
box.SelectionColor = box.ForeColor;
}
}
public class CryptoRandom : RandomNumberGenerator
{
private static RandomNumberGenerator r;
public CryptoRandom()
{
r = RandomNumberGenerator.Create();
}
///<param name=”buffer”>An array of bytes to contain random numbers.</param>
public override void GetBytes(byte[] buffer)
{
r.GetBytes(buffer);
}
public override void GetNonZeroBytes(byte[] data)
{
r.GetNonZeroBytes(data);
}
public double NextDouble()
{
byte[] b = new byte[4];
r.GetBytes(b);
return (double)BitConverter.ToUInt32(b, 0) / UInt32.MaxValue;
}
///<param name=”minValue”>The inclusive lower bound of the random number returned.</param>
///<param name=”maxValue”>The exclusive upper bound of the random number returned. maxValue must be greater than or equal to minValue.</param>
public int Next(int minValue, int maxValue)
{
return (int)Math.Round(NextDouble() * (maxValue - minValue - 1)) + minValue;
}
public int Next()
{
return Next(0, Int32.MaxValue);
}
///<param name=”maxValue”>The inclusive upper bound of the random number returned. maxValue must be greater than or equal 0</param>
public int Next(int maxValue)
{
return Next(0, maxValue);
}
}
public static class GlobalVars
{
public static string BasePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
public static string ClientDir = (BasePath + "\\clients").Replace(@"\",@"\\");
public static string MapsDir = (BasePath + "\\maps").Replace(@"\",@"\\");
public static string CustomPlayerDir = (BasePath + "\\charcustom").Replace(@"\",@"\\");
public static string AddonDir = (BasePath + "\\addons").Replace(@"\",@"\\");
public static string IP = "localhost";
public static string Version = "";
public static string SharedArgs = "";
//vars for loader
public static bool ReadyToLaunch = false;
//server settings.
public static string Map = "Baseplate.rbxl";
public static int RobloxPort = 53640;
public static int DefaultRobloxPort = 53640;
public static int PlayerLimit = 12;
public static bool DisableTeapotTurret = false;
//player settings
public static int UserID = 0;
public static string PlayerName = "Player";
//launcher settings.
public static bool CloseOnLaunch = false;
public static bool LocalPlayMode = false;
//client shit
public static string SelectedClient = "";
public static string DefaultClient = "";
public static bool UsesPlayerName = false;
public static bool UsesID = true;
public static string SelectedClientDesc = "";
public static bool LoadsAssetsOnline = false;
public static bool LegacyMode = false;
public static string SelectedClientMD5 = "";
public static string SelectedClientScriptMD5 = "";
//charcustom
public static string Custom_Hat1ID_Offline = "NoHat.rbxm";
public static string Custom_Hat2ID_Offline = "NoHat.rbxm";
public static string Custom_Hat3ID_Offline = "NoHat.rbxm";
public static string Custom_Face_Offline = "DefaultFace.rbxm";
public static string Custom_Head_Offline = "DefaultHead.rbxm";
public static string Custom_T_Shirt_Offline = "NoTShirt.rbxm";
public static string Custom_Shirt_Offline = "NoShirt.rbxm";
public static string Custom_Pants_Offline = "NoPants.rbxm";
public static string Custom_Icon_Offline = "NBC";
public static int HeadColorID = 24;
public static int TorsoColorID = 23;
public static int LeftArmColorID = 24;
public static int RightArmColorID = 24;
public static int LeftLegColorID = 119;
public static int RightLegColorID = 119;
public static string loadtext = "";
//color menu.
public static string ColorMenu_HeadColor = "Color [A=255, R=245, G=205, B=47]";
public static string ColorMenu_TorsoColor = "Color [A=255, R=13, G=105, B=172]";
public static string ColorMenu_LeftArmColor = "Color [A=255, R=245, G=205, B=47]";
public static string ColorMenu_RightArmColor = "Color [A=255, R=245, G=205, B=47]";
public static string ColorMenu_LeftLegColor = "Color [A=255, R=164, G=189, B=71]";
public static string ColorMenu_RightLegColor = "Color [A=255, R=164, G=189, B=71]";
public static bool AdminMode = false;
public static string important = "";
//discord
public static DiscordRpc.RichPresence presence;
public static string appid = "505955125727330324";
public static string imagekey_large = "novetus_large";
}
}