diff --git a/Novetus/NovetusCore/StorageAndFunctions/ClientManagement.cs b/Novetus/NovetusCore/StorageAndFunctions/ClientManagement.cs index 5e33925..f1b2e4c 100644 --- a/Novetus/NovetusCore/StorageAndFunctions/ClientManagement.cs +++ b/Novetus/NovetusCore/StorageAndFunctions/ClientManagement.cs @@ -1024,6 +1024,48 @@ public class ClientManagement #endif } +#if URI + public static void ValidateFiles(string line, string validstart, string validend, Label label) +#else + public static void ValidateFiles(string line, string validstart, string validend) +#endif + { + string extractedFile = ScriptFuncs.ClientScript.GetArgsFromTag(line, validstart, validend); + if (!string.IsNullOrWhiteSpace(extractedFile)) + { + string[] parsedFileParams = extractedFile.Split('|'); + string filePath = parsedFileParams[0]; + string fileMD5 = parsedFileParams[1]; + string fullFilePath = GlobalPaths.ClientDir + @"\\" + GlobalVars.UserConfiguration.SelectedClient + @"\\" + filePath; + + if (!SecurityFuncs.CheckMD5(fileMD5, fullFilePath)) + { +#if URI + UpdateStatus(label, "The client has been detected as modified."); +#elif LAUNCHER + Util.ConsolePrint("ERROR - Failed to launch Novetus. (The client has been detected as modified.)", 2); +#endif + +#if LAUNCHER + if (!GlobalVars.isConsoleOnly) + { + MessageBox.Show("Failed to launch Novetus. (Error: The client has been detected as modified.)", "Novetus - Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } +#endif + +#if URI + throw new IOException("The client has been detected as modified."); +#else + return; +#endif + } + else + { + GlobalVars.ValidatedExtraFiles += 1; + } + } + } + #if URI public static void LaunchRBXClient(string ClientName, ScriptType type, bool no3d, bool nomap, EventHandler e, Label label) #else @@ -1110,61 +1152,63 @@ public class ClientManagement string args = ""; GlobalVars.ValidatedExtraFiles = 0; + bool v1 = false; + + if (info.CommandLineArgs.Contains("<") && + info.CommandLineArgs.Contains("")) + { + v1 = true; + } + if (!GlobalVars.AdminMode && !info.AlreadyHasSecurity) { string validstart = ""; string validend = ""; + string validv2 = "validate="; foreach (string line in info.CommandLineArgs.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)) { - if (line.Contains(validstart) && line.Contains(validend)) + if (v1 && line.Contains(validstart) && line.Contains(validend)) { - string extractedFile = ScriptFuncs.ClientScript.GetArgsFromTag(line, validstart, validend); - if (!string.IsNullOrWhiteSpace(extractedFile)) + try { - try - { - string[] parsedFileParams = extractedFile.Split('|'); - string filePath = parsedFileParams[0]; - string fileMD5 = parsedFileParams[1]; - string fullFilePath = GlobalPaths.ClientDir + @"\\" + GlobalVars.UserConfiguration.SelectedClient + @"\\" + filePath; - - if (!SecurityFuncs.CheckMD5(fileMD5, fullFilePath)) - { #if URI - UpdateStatus(label, "The client has been detected as modified."); -#elif LAUNCHER - Util.ConsolePrint("ERROR - Failed to launch Novetus. (The client has been detected as modified.)", 2); -#endif - -#if LAUNCHER - if (!GlobalVars.isConsoleOnly) - { - MessageBox.Show("Failed to launch Novetus. (Error: The client has been detected as modified.)", "Novetus - Error", MessageBoxButtons.OK, MessageBoxIcon.Error); - } -#endif - -#if URI - throw new IOException("The client has been detected as modified."); + ValidateFiles(line, validstart, validend, label); #else - return; + ValidateFiles(line, validstart, validend); #endif - } - else - { - GlobalVars.ValidatedExtraFiles += 1; - } - } + } #if URI || LAUNCHER || BASICLAUNCHER - catch (Exception ex) - { - Util.LogExceptions(ex); + catch (Exception ex) + { + Util.LogExceptions(ex); #else - catch (Exception) - { + catch (Exception) + { #endif - continue; - } + continue; + } + } + else if (line.Contains(validv2)) + { + try + { +#if URI + ValidateFiles(line, validv2, "", label); +#else + ValidateFiles(line, validv2, ""); +#endif + } +#if URI || LAUNCHER || BASICLAUNCHER + catch (Exception ex) + { + Util.LogExceptions(ex); +#else + catch (Exception) + { +#endif + continue; } } } @@ -1198,8 +1242,8 @@ public class ClientManagement else { args = ScriptFuncs.ClientScript.CompileScript(ClientName, info.CommandLineArgs, - ScriptFuncs.ClientScript.GetTagFromType(type, false, no3d), - ScriptFuncs.ClientScript.GetTagFromType(type, true, no3d), + ScriptFuncs.ClientScript.GetTagFromType(type, false, no3d, v1), + ScriptFuncs.ClientScript.GetTagFromType(type, true, no3d, v1), mapfile, luafile, rbxexe); @@ -1552,10 +1596,19 @@ public class ScriptFuncs { try { - int pFrom = code.IndexOf(tag) + tag.Length; - int pTo = code.LastIndexOf(endtag); - string result = code.Substring(pFrom, pTo - pFrom); - return result; + if (string.IsNullOrEmpty(endtag)) + { + //VERSION 2!! + string result = code.Substring(code.IndexOf(tag) + tag.Length); + return result; + } + else + { + int pFrom = code.IndexOf(tag) + tag.Length; + int pTo = code.LastIndexOf(endtag); + string result = code.Substring(pFrom, pTo - pFrom); + return result; + } } #if URI || LAUNCHER || BASICLAUNCHER catch (Exception ex) @@ -1587,20 +1640,45 @@ public class ScriptFuncs } } - public static string GetTagFromType(ScriptType type, bool endtag, bool no3d) + public static string GetTagFromType(ScriptType type, bool endtag, bool no3d, bool v1) { - switch (type) + if (v1) { - case ScriptType.Client: - return endtag ? "" : ""; - case ScriptType.Server: - return no3d ? (endtag ? "" : "") : (endtag ? "" : ""); - case ScriptType.Solo: - return endtag ? "" : ""; - case ScriptType.Studio: - return endtag ? "" : ""; - default: + switch (type) + { + case ScriptType.Client: + return endtag ? "" : ""; + case ScriptType.Server: + return no3d ? (endtag ? "" : "") : (endtag ? "" : ""); + case ScriptType.Solo: + return endtag ? "" : ""; + case ScriptType.Studio: + return endtag ? "" : ""; + default: + return ""; + } + } + else + { + if (endtag == true) + { + //NO END TAGS. return ""; + } + + switch (type) + { + case ScriptType.Client: + return "client="; + case ScriptType.Server: + return no3d ? "no3d=" : "server="; + case ScriptType.Solo: + return "solo="; + case ScriptType.Studio: + return "studio="; + default: + return ""; + } } } @@ -1676,25 +1754,54 @@ public class ScriptFuncs string start = tag; string end = endtag; + bool v1 = false; + + if (code.Contains("<") && + code.Contains("")) + { + v1 = true; + } + else + { + //make sure we have no end tags. + if (!string.IsNullOrWhiteSpace(end)) + { + end = ""; + } + } + FileFormat.ClientInfo info = ClientManagement.GetClientInfoValues(ClientName); ScriptType type = GetTypeFromTag(start); //we must have the ending tag before we continue. - if (string.IsNullOrWhiteSpace(end)) + if (v1 && string.IsNullOrWhiteSpace(end)) { return ""; } if (usesharedtags) { - string sharedstart = ""; - string sharedend = ""; - - if (code.Contains(sharedstart) && code.Contains(sharedend)) + if (v1) { - start = sharedstart; - end = sharedend; + string sharedstart = ""; + string sharedend = ""; + + if (code.Contains(sharedstart) && code.Contains(sharedend)) + { + start = sharedstart; + end = sharedend; + } + } + else + { + string sharedstart = "shared="; + + if (code.Contains(sharedstart)) + { + start = sharedstart; + } } }