diff --git a/NovetusLauncher/NovetusCMD/LocalVars.cs b/NovetusLauncher/NovetusCMD/LocalVars.cs index 0ec27c9..51af91f 100644 --- a/NovetusLauncher/NovetusCMD/LocalVars.cs +++ b/NovetusLauncher/NovetusCMD/LocalVars.cs @@ -11,5 +11,7 @@ namespace NovetusCMD public static bool StartInNo3D = false; public static bool OverrideINI = false; public static bool RequestToOutputInfo = false; + public static bool DebugMode = false; + public static int ProcessID = 0; } } diff --git a/NovetusLauncher/NovetusCMD/NovetusCMD.csproj b/NovetusLauncher/NovetusCMD/NovetusCMD.csproj index 7a2c70d..a11cabe 100644 --- a/NovetusLauncher/NovetusCMD/NovetusCMD.csproj +++ b/NovetusLauncher/NovetusCMD/NovetusCMD.csproj @@ -68,6 +68,7 @@ + diff --git a/NovetusLauncher/NovetusCMD/Program.cs b/NovetusLauncher/NovetusCMD/Program.cs index a411f3c..22eb70b 100644 --- a/NovetusLauncher/NovetusCMD/Program.cs +++ b/NovetusLauncher/NovetusCMD/Program.cs @@ -151,6 +151,14 @@ namespace NovetusCMD { StopWebServer(); } + if (LocalVars.ProcessID != 0) + { + if (GlobalVars.ProcessExists(LocalVars.ProcessID)) + { + Process proc = Process.GetProcessById(LocalVars.ProcessID); + proc.Kill(); + } + } } static void ReadConfigValues() @@ -201,6 +209,7 @@ namespace NovetusCMD ConsolePrint("-script | Loads an additional server script.", 4); ConsolePrint("-outputinfo | Outputs all information about the running server to a text file.", 4); ConsolePrint("-overrideconfig | Override the launcher settings.", 4); + ConsolePrint("-debug | Disables launching of the server for debugging purposes.", 4); ConsolePrint("---------", 1); ConsolePrint("Custom server options", 3); ConsolePrint("-overrideconfig must be added in order for the below commands to function.", 5); @@ -266,6 +275,11 @@ namespace NovetusCMD LocalVars.RequestToOutputInfo = true; } + if (CommandLine["debug"] != null) + { + LocalVars.DebugMode = true; + } + if (CommandLine["script"] != null) { GlobalVars.AddonScriptPath = CommandLine["script"].Replace(@"\", @"\\"); @@ -292,12 +306,19 @@ namespace NovetusCMD InitUPnP(); StartWebServer(); - AppDomain.CurrentDomain.ProcessExit += new EventHandler(ProgramClose); ConsolePrint("Launching a " + GlobalVars.SelectedClient + " server on " + GlobalVars.Map + " with " + GlobalVars.PlayerLimit + " players.", 1); - StartServer(LocalVars.StartInNo3D); + + if (!LocalVars.DebugMode) + { + StartServer(LocalVars.StartInNo3D); + } + else + { + CreateTXT(); + } Console.ReadKey(); } @@ -359,7 +380,8 @@ namespace NovetusCMD client.Exited += new EventHandler(ServerExited); client.Start(); SecurityFuncs.RenameWindow(client, ScriptGenerator.ScriptType.Server); - CreateTXT(client); + LocalVars.ProcessID = client.Id; + CreateTXT(); } catch (Exception ex) when (!Env.Debugging) { @@ -372,7 +394,7 @@ namespace NovetusCMD Environment.Exit(0); } - static void CreateTXT(Process process) + static void CreateTXT() { if (LocalVars.RequestToOutputInfo) { @@ -389,10 +411,9 @@ namespace NovetusCMD SecurityFuncs.Base64Encode(GlobalVars.SelectedClient) }; string URI2 = "novetus://" + SecurityFuncs.Base64Encode(string.Join("|", lines2)); - int pid = process.Id; string text = GlobalVars.MultiLine( - "Process ID: " + pid.ToString(), + "Process ID: " + (LocalVars.ProcessID == 0 ? "N/A" : LocalVars.ProcessID.ToString()), "Don't copy the Process ID when sharing the server.", "--------------------", "Server Info:", diff --git a/NovetusLauncher/NovetusFuncs/GlobalVars.cs b/NovetusLauncher/NovetusFuncs/GlobalVars.cs index 441ae7f..dffe1b7 100644 --- a/NovetusLauncher/NovetusFuncs/GlobalVars.cs +++ b/NovetusLauncher/NovetusFuncs/GlobalVars.cs @@ -8,7 +8,9 @@ */ using System; +using System.Diagnostics; using System.IO; +using System.Linq; using System.Reflection; using System.Text.RegularExpressions; @@ -234,4 +236,9 @@ public static class GlobalVars { return Regex.Replace(lines, @"^\s*$\n|\r", string.Empty, RegexOptions.Multiline).TrimEnd(); } + + public static bool ProcessExists(int id) + { + return Process.GetProcesses().Any(x => x.Id == id); + } } \ No newline at end of file diff --git a/NovetusLauncher/NovetusFuncs/ScriptGenerator.cs b/NovetusLauncher/NovetusFuncs/ScriptGenerator.cs index 346ffa8..4ee66c3 100644 --- a/NovetusLauncher/NovetusFuncs/ScriptGenerator.cs +++ b/NovetusLauncher/NovetusFuncs/ScriptGenerator.cs @@ -48,7 +48,7 @@ public class ScriptGenerator rbxexe = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\clients\\" + client + @"\\RobloxApp_client.exe"; } - string md5dir = SecurityFuncs.CalculateMD5(Assembly.GetExecutingAssembly().Location); + string md5dir = SecurityFuncs.CalculateMD5(GlobalVars.BasePath + @"\\Novetus.exe"); string md5script = SecurityFuncs.CalculateMD5(GlobalVars.ClientDir + @"\\" + GlobalVars.SelectedClient + @"\\content\\scripts\\" + GlobalVars.ScriptName + ".lua"); string md5exe = SecurityFuncs.CalculateMD5(rbxexe); string md5s = "'" + md5exe + "','" + md5dir + "','" + md5script + "'"; diff --git a/NovetusLauncher/NovetusFuncs/SecurityFuncs.cs b/NovetusLauncher/NovetusFuncs/SecurityFuncs.cs index bfaa082..41117d6 100644 --- a/NovetusLauncher/NovetusFuncs/SecurityFuncs.cs +++ b/NovetusLauncher/NovetusFuncs/SecurityFuncs.cs @@ -187,16 +187,22 @@ public class SecurityFuncs public static string GetExternalIPAddress() { string ipAddress; - using (WebClient wc = new WebClient()) + + try { - try - { - ipAddress = wc.DownloadString("http://ipv4.icanhazip.com/"); - } - catch (Exception) when (!Env.Debugging) - { - ipAddress = "localhost" + Environment.NewLine; - } + string url = "http://checkip.dyndns.org"; + WebRequest req = WebRequest.Create(url); + WebResponse resp = req.GetResponse(); + StreamReader sr = new StreamReader(resp.GetResponseStream()); + string response = sr.ReadToEnd().Trim(); + string[] a = response.Split(':'); + string a2 = a[1].Substring(1); + string[] a3 = a2.Split('<'); + ipAddress = a3[0]; + } + catch (Exception) + { + ipAddress = "localhost"; } return ipAddress; diff --git a/NovetusLauncher/NovetusLauncher/LocalVars.cs b/NovetusLauncher/NovetusLauncher/LocalVars.cs new file mode 100644 index 0000000..4feab6c --- /dev/null +++ b/NovetusLauncher/NovetusLauncher/LocalVars.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace NovetusLauncher +{ + class LocalVars + { + } +} diff --git a/NovetusLauncher/NovetusLauncher/NovetusLauncher.csproj b/NovetusLauncher/NovetusLauncher/NovetusLauncher.csproj index cb2e8a7..39376af 100644 --- a/NovetusLauncher/NovetusLauncher/NovetusLauncher.csproj +++ b/NovetusLauncher/NovetusLauncher/NovetusLauncher.csproj @@ -69,6 +69,7 @@ + @@ -82,6 +83,7 @@ CharacterCustomization.cs + Form diff --git a/NovetusLauncher/NovetusLauncher/URI/LoaderForm.cs b/NovetusLauncher/NovetusLauncher/URI/LoaderForm.cs index 6e576c3..133c73c 100644 --- a/NovetusLauncher/NovetusLauncher/URI/LoaderForm.cs +++ b/NovetusLauncher/NovetusLauncher/URI/LoaderForm.cs @@ -66,7 +66,7 @@ namespace NovetusLauncher GlobalVars.DefaultClient = lines[1]; GlobalVars.DefaultMap = lines[2]; GlobalVars.SelectedClient = GlobalVars.DefaultClient; - GlobalVars.Map = GlobalVars.DefaultMap; + GlobalVars.Map = GlobalVars.DefaultMap; QuickConfigure main = new QuickConfigure(); main.ShowDialog(); System.Threading.Timer timer = new System.Threading.Timer(new TimerCallback(CheckIfFinished), null, 1, 0); @@ -94,7 +94,8 @@ namespace NovetusLauncher string ip = SecurityFuncs.Base64Decode(SplitArg[0]); string port = SecurityFuncs.Base64Decode(SplitArg[1]); string client = SecurityFuncs.Base64Decode(SplitArg[2]); - GlobalVars.IP = ip; + GlobalVars.SelectedClient = client; + GlobalVars.IP = ip; GlobalVars.RobloxPort = Convert.ToInt32(port); ReadClientValues(client); string luafile = "";