Novetus_src/Novetus/NovetusURI/Forms/LoaderForm.cs

195 lines
5.0 KiB
C#

#region Usings
using System;
using System.IO;
using System.Diagnostics;
using System.Threading;
using System.Windows.Forms;
#endregion
namespace NovetusURI
{
#region URI Loader
public partial class LoaderForm : Form
{
#region Private Variables
private DiscordRPC.EventHandlers handlers;
#endregion
#region Discord
public void ReadyCallback()
{
}
public void DisconnectedCallback(int errorCode, string message)
{
}
public void ErrorCallback(int errorCode, string message)
{
}
public void JoinCallback(string secret)
{
}
public void SpectateCallback(string secret)
{
}
public void RequestCallback(DiscordRPC.JoinRequest request)
{
}
void StartDiscord()
{
if (GlobalVars.UserConfiguration.DiscordPresence)
{
handlers = new DiscordRPC.EventHandlers();
handlers.readyCallback = ReadyCallback;
handlers.disconnectedCallback += DisconnectedCallback;
handlers.errorCallback += ErrorCallback;
handlers.joinCallback += JoinCallback;
handlers.spectateCallback += SpectateCallback;
handlers.requestCallback += RequestCallback;
DiscordRPC.Initialize(GlobalVars.appid, ref handlers, true, "");
GlobalFuncs.UpdateRichPresence(GlobalVars.LauncherState.LoadingURI, "", true);
}
}
#endregion
#region Constructor
public LoaderForm()
{
InitializeComponent();
}
#endregion
#region Form Events
void LoaderFormLoad(object sender, EventArgs e)
{
QuickConfigure main = new QuickConfigure();
main.ShowDialog();
System.Threading.Timer timer = new System.Threading.Timer(new TimerCallback(CheckIfFinished), null, 1, 0);
}
void StartGame()
{
string luafile = "";
if (!GlobalVars.SelectedClientInfo.Fix2007)
{
luafile = "rbxasset://scripts\\\\" + GlobalPaths.ScriptName + ".lua";
}
else
{
luafile = GlobalPaths.ClientDir + @"\\" + GlobalVars.UserConfiguration.SelectedClient + @"\\content\\scripts\\" + GlobalPaths.ScriptGenName + ".lua";
}
string rbxexe = "";
if (GlobalVars.SelectedClientInfo.LegacyMode)
{
rbxexe = GlobalPaths.ClientDir + @"\\" + GlobalVars.UserConfiguration.SelectedClient + @"\\RobloxApp.exe";
}
else
{
rbxexe = GlobalPaths.ClientDir + @"\\" + GlobalVars.UserConfiguration.SelectedClient + @"\\RobloxApp_client.exe";
}
string quote = "\"";
string args = "";
if (GlobalVars.SelectedClientInfo.CommandLineArgs.Equals("%args%"))
{
if (!GlobalVars.SelectedClientInfo.Fix2007)
{
args = "-script " + quote + GlobalFuncs.ChangeGameSettings() + " dofile('" + luafile + "'); " + ScriptFuncs.Generator.GetScriptFuncForType(ScriptType.Client) + quote;
}
else
{
ScriptFuncs.Generator.GenerateScriptForClient(ScriptType.Client);
args = "-script " + quote + luafile + quote;
}
}
else
{
args = ScriptFuncs.ClientScript.CompileScript(GlobalVars.SelectedClientInfo.CommandLineArgs, "<client>", "</client>", "", luafile, rbxexe);
}
try
{
if (!GlobalVars.AdminMode)
{
if (!GlobalVars.SelectedClientInfo.AlreadyHasSecurity)
{
if (SecurityFuncs.checkClientMD5(GlobalVars.UserConfiguration.SelectedClient))
{
if (SecurityFuncs.checkScriptMD5(GlobalVars.UserConfiguration.SelectedClient))
{
LaunchClient(rbxexe,args);
}
else
{
label1.Text = "The client has been detected as modified.";
}
}
else
{
label1.Text = "The client has been detected as modified.";
}
}
else
{
LaunchClient(rbxexe,args);
}
}
else
{
LaunchClient(rbxexe,args);
}
}
catch (Exception)
{
label1.Text = "The client has been detected as modified.";
}
}
private void LaunchClient(string rbxexe, string args)
{
Process clientproc = new Process();
clientproc.StartInfo.FileName = rbxexe;
clientproc.StartInfo.Arguments = args;
clientproc.EnableRaisingEvents = true;
clientproc.Exited += new EventHandler(ClientExited);
clientproc.Start();
clientproc.PriorityClass = ProcessPriorityClass.RealTime;
SecurityFuncs.RenameWindow(clientproc, ScriptType.Client, "");
GlobalFuncs.UpdateRichPresence(GlobalVars.LauncherState.InMPGame, "");
Visible = false;
}
void ClientExited(object sender, EventArgs e)
{
GlobalFuncs.UpdateRichPresence(GlobalVars.LauncherState.InLauncher, "");
Close();
}
private void CheckIfFinished(object state)
{
if (!LocalVars.ReadyToLaunch)
{
System.Threading.Timer timer = new System.Threading.Timer(new TimerCallback(CheckIfFinished), null, 1, 0);
}
else
{
Visible = true;
if (GlobalVars.UserConfiguration.DiscordPresence)
{
label1.Text = "Starting Discord Rich Presence...";
StartDiscord();
}
label1.Text = "Launching Game...";
LocalFuncs.SetupURIValues();
StartGame();
}
}
#endregion
}
#endregion
}