Esempio n. 1
0
        public void InitForm()
        {
            Parent.Text = "Novetus " + GlobalVars.ProgramInformation.Version;
            GlobalFuncs.ConsolePrint("Novetus version " + GlobalVars.ProgramInformation.Version + " loaded. Initializing config.", 4, ConsoleBox);
            GlobalFuncs.ConsolePrint("Novetus path: " + GlobalPaths.BasePath, 4, ConsoleBox);

            if (File.Exists(GlobalPaths.RootPath + "\\changelog.txt"))
            {
                ChangelogBox.Text = File.ReadAllText(GlobalPaths.RootPath + "\\changelog.txt");
            }
            else
            {
                GlobalFuncs.ConsolePrint("ERROR - " + GlobalPaths.RootPath + "\\changelog.txt not found.", 2, ConsoleBox);
            }

            if (File.Exists(GlobalPaths.RootPath + "\\README-AND-CREDITS.TXT"))
            {
                ReadmeBox.Text = File.ReadAllText(GlobalPaths.RootPath + "\\README-AND-CREDITS.TXT");
            }
            else
            {
                GlobalFuncs.ConsolePrint("ERROR - " + GlobalPaths.RootPath + "\\README-AND-CREDITS.TXT not found.", 2, ConsoleBox);
            }

            if (!File.Exists(GlobalPaths.ConfigDir + "\\" + GlobalPaths.ConfigName))
            {
                GlobalFuncs.ConsolePrint("WARNING - " + GlobalPaths.ConfigDir + "\\" + GlobalPaths.ConfigName + " not found. Creating one with default values.", 5, ConsoleBox);
                WriteConfigValues();
            }
            if (!File.Exists(GlobalPaths.ConfigDir + "\\" + GlobalPaths.ConfigNameCustomization))
            {
                GlobalFuncs.ConsolePrint("WARNING - " + GlobalPaths.ConfigDir + "\\" + GlobalPaths.ConfigNameCustomization + " not found. Creating one with default values.", 5, ConsoleBox);
                WriteCustomizationValues();
            }
            if (!File.Exists(GlobalPaths.ConfigDir + "\\servers.txt"))
            {
                GlobalFuncs.ConsolePrint("WARNING - " + GlobalPaths.ConfigDir + "\\servers.txt not found. Creating empty file.", 5, ConsoleBox);
                File.Create(GlobalPaths.ConfigDir + "\\servers.txt").Dispose();
            }
            if (!File.Exists(GlobalPaths.ConfigDir + "\\ports.txt"))
            {
                GlobalFuncs.ConsolePrint("WARNING - " + GlobalPaths.ConfigDir + "\\ports.txt not found. Creating empty file.", 5, ConsoleBox);
                File.Create(GlobalPaths.ConfigDir + "\\ports.txt").Dispose();
            }

            GlobalFuncs.CreateAssetCacheDirectories();

            ProductVersionLabel.Text = Application.ProductVersion;
            LocalVars.important      = SecurityFuncs.GenerateMD5(Assembly.GetExecutingAssembly().Location);
            NovetusVersionLabel.Text = GlobalVars.ProgramInformation.Version;

            SplashLabel.Text     = SplashReader.GetSplash();
            LocalVars.prevsplash = SplashLabel.Text;

            ReadConfigValues(true);
            InitUPnP();
            StartDiscord();
        }
Esempio n. 2
0
        public static string GetScriptFuncForType(string ClientName, ScriptType type)
        {
            FileFormat.ClientInfo info = GlobalFuncs.GetClientInfoValues(ClientName);

            string rbxexe = "";

            if (info.LegacyMode)
            {
                rbxexe = GlobalPaths.ClientDir + @"\\" + ClientName + @"\\RobloxApp.exe";
            }
            else
            {
                rbxexe = GlobalPaths.ClientDir + @"\\" + ClientName + @"\\RobloxApp_client.exe";
            }

#if LAUNCHER
            string md5dir = !info.AlreadyHasSecurity ? SecurityFuncs.GenerateMD5(Assembly.GetExecutingAssembly().Location) : "";
#else
            string md5dir = !info.AlreadyHasSecurity ? SecurityFuncs.GenerateMD5(GlobalPaths.RootPathLauncher + "\\Novetus.exe") : "";
#endif
            string md5script = !info.AlreadyHasSecurity ? SecurityFuncs.GenerateMD5(GlobalPaths.ClientDir + @"\\" + ClientName + @"\\content\\scripts\\" + GlobalPaths.ScriptName + ".lua") : "";
            string md5exe    = !info.AlreadyHasSecurity ? SecurityFuncs.GenerateMD5(rbxexe) : "";
            string md5s      = "'" + md5exe + "','" + md5dir + "','" + md5script + "'";

            switch (type)
            {
            case ScriptType.Client:
                return("_G.CSConnect("
                       + (info.UsesID ? GlobalVars.UserConfiguration.UserID : 0) + ",'"
                       + GlobalVars.IP + "',"
                       + GlobalVars.UserConfiguration.RobloxPort + ",'"
                       + (info.UsesPlayerName ? GlobalVars.UserConfiguration.PlayerName : "Player") + "',"
                       + GlobalVars.Loadout + ","
                       + md5s + ",'"
                       + GlobalVars.UserConfiguration.PlayerTripcode + "')");

            case ScriptType.Server:
                return("_G.CSServer("
                       + GlobalVars.UserConfiguration.RobloxPort + ","
                       + GlobalVars.UserConfiguration.PlayerLimit + ","
                       + md5s + ")");

            case ScriptType.Solo:
            case ScriptType.EasterEgg:
                return("_G.CSSolo("
                       + (info.UsesID ? GlobalVars.UserConfiguration.UserID : 0) + ",'"
                       + (info.UsesPlayerName ? GlobalVars.UserConfiguration.PlayerName : "Player") + "',"
                       + GlobalVars.soloLoadout + ")");

            case ScriptType.Studio:
                return("_G.CSStudio()");

            default:
                return("");
            }
        }
Esempio n. 3
0
    private void GenerateMD5s()
    {
        if (string.IsNullOrWhiteSpace(SelectedClientInfoPath))
        {
            MessageBox.Show("Please choose the folder where you would like to save your clientinfo file.", "Novetus Client SDK - Error", MessageBoxButtons.OK, MessageBoxIcon.Error);

            FolderBrowserDialog folderBrowserDialog1 = new FolderBrowserDialog();
            if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
            {
                SelectedClientInfoPath = folderBrowserDialog1.SelectedPath;
            }
        }

        string ClientName = "";

        if (SelectedClientInfo.LegacyMode)
        {
            ClientName = "\\RobloxApp.exe";
        }
        else if (SelectedClientInfo.SeperateFolders)
        {
            ClientName = "\\client\\RobloxApp_client.exe";
        }
        else if (SelectedClientInfo.UsesCustomClientEXEName)
        {
            ClientName = @"\\" + SelectedClientInfo.CustomClientEXEName;
        }
        else
        {
            ClientName = "\\RobloxApp_client.exe";
        }

        string ClientMD5 = File.Exists(SelectedClientInfoPath + ClientName) ? SecurityFuncs.GenerateMD5(SelectedClientInfoPath + ClientName) : "";

        if (!string.IsNullOrWhiteSpace(ClientMD5))
        {
            SelectedClientInfo.ClientMD5 = ClientMD5.ToUpper(CultureInfo.InvariantCulture);
        }
        else
        {
            MessageBox.Show("Cannot load '" + ClientName.Trim('/') + "'. Please make sure you saved the clientinfo.nov into the client directory and if the file exists.", "Novetus Client SDK - Error while generating MD5 for client", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

        string ClientScriptMD5 = File.Exists(SelectedClientInfoPath + "\\content\\scripts\\" + GlobalPaths.ScriptName + ".lua") ? SecurityFuncs.GenerateMD5(SelectedClientInfoPath + "\\content\\scripts\\" + GlobalPaths.ScriptName + ".lua") : "";

        if (!string.IsNullOrWhiteSpace(ClientScriptMD5))
        {
            SelectedClientInfo.ScriptMD5 = ClientScriptMD5.ToUpper(CultureInfo.InvariantCulture);
        }

        /*else
         * {
         *      MessageBox.Show("Cannot load '" + GlobalPaths.ScriptName + ".lua'. Please make sure you saved the clientinfo.nov into the client directory and if the file exists.", "Novetus Client SDK - Error while generating MD5 for script", MessageBoxButtons.OK, MessageBoxIcon.Error);
         * }*/
    }
    void Button4Click(object sender, EventArgs e)
    {
        if (string.IsNullOrWhiteSpace(SelectedClientInfoPath))
        {
            FolderBrowserDialog folderBrowserDialog1 = new FolderBrowserDialog();
            if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
            {
                SelectedClientInfoPath = folderBrowserDialog1.SelectedPath;
            }
        }

        string ClientName = "";

        if (!SelectedClientInfo.LegacyMode)
        {
            ClientName = "\\RobloxApp_client.exe";
        }
        else
        {
            ClientName = "\\RobloxApp.exe";
        }

        string ClientMD5 = File.Exists(SelectedClientInfoPath + ClientName) ? SecurityFuncs.GenerateMD5(SelectedClientInfoPath + ClientName) : "";

        if (!string.IsNullOrWhiteSpace(ClientMD5))
        {
            textBox2.Text                = ClientMD5.ToUpper(CultureInfo.InvariantCulture);
            textBox2.BackColor           = System.Drawing.Color.Lime;
            SelectedClientInfo.ClientMD5 = textBox2.Text.ToUpper(CultureInfo.InvariantCulture);
        }
        else
        {
            MessageBox.Show("Cannot load '" + ClientName.Trim('/') + "'. Please make sure you selected the directory", "Novetus Launcher - Error while generating MD5 for client", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

        string ClientScriptMD5 = File.Exists(SelectedClientInfoPath + "\\content\\scripts\\" + GlobalPaths.ScriptName + ".lua") ? SecurityFuncs.GenerateMD5(SelectedClientInfoPath + "\\content\\scripts\\" + GlobalPaths.ScriptName + ".lua") : "";

        if (!string.IsNullOrWhiteSpace(ClientScriptMD5))
        {
            textBox3.Text                = ClientScriptMD5.ToUpper(CultureInfo.InvariantCulture);
            textBox3.BackColor           = System.Drawing.Color.Lime;
            SelectedClientInfo.ScriptMD5 = textBox3.Text.ToUpper(CultureInfo.InvariantCulture);
        }
        else
        {
            MessageBox.Show("Cannot load '" + GlobalPaths.ScriptName + ".lua'. Please make sure you selected the directory", "Novetus Launcher - Error while generating MD5 for script", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

        if (!string.IsNullOrWhiteSpace(ClientMD5) && !string.IsNullOrWhiteSpace(ClientScriptMD5))
        {
            MessageBox.Show("MD5s generated.", "Novetus Launcher - Novetus Client SDK", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
    }
Esempio n. 5
0
    private void addValidateTagsForRelativePathToolStripMenuItem_click(object sender, EventArgs e)
    {
        ClientinfoCreatorValidatePathForm pathForm = new ClientinfoCreatorValidatePathForm(this);

        pathForm.ShowDialog();

        if (!string.IsNullOrWhiteSpace(SelectedClientInfoPath))
        {
            string fullpath = SelectedClientInfoPath + "\\" + RelativePath;

            if (Directory.Exists(fullpath))
            {
                DirectoryInfo dir   = new DirectoryInfo(fullpath);
                FileInfo[]    Files = dir.GetFiles("*.*");
                List <string> text  = new List <string>();

                foreach (FileInfo file in Files)
                {
                    string fileMD5       = SecurityFuncs.GenerateMD5(file.FullName);
                    string filePathStrip = file.FullName.Replace(SelectedClientInfoPath, "");
                    text.Add("<validate>" + filePathStrip.TrimStart('/', '\\') + "|" + fileMD5 + "</validate>");
                }

                string joined = string.Join("\r\n", text);

                AddClientinfoText(joined.Replace(@"\", "/"));
            }
            else
            {
                MessageBox.Show("The directory does not exist. Please use an existing directory path in your client's folder.", "Novetus Client SDK - Error when adding Validate tags.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        else
        {
            MessageBox.Show("This client info file is not saved in your client's directory. Please save it in your client's directory before using.", "Novetus Client SDK - Error when adding Validate tags.", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }
Esempio n. 6
0
        public static string CompileScript(string ClientName, string code, string tag, string endtag, string mapfile, string luafile, string rbxexe, bool usesharedtags = true)
        {
            string start = tag;
            string end   = endtag;

            FileFormat.ClientInfo info = GlobalFuncs.GetClientInfoValues(ClientName);

            ScriptType type = GetTypeFromTag(start);

            //we must have the ending tag before we continue.
            if (string.IsNullOrWhiteSpace(end))
            {
                return("");
            }

            if (usesharedtags)
            {
                string sharedstart = "<shared>";
                string sharedend   = "</shared>";

                if (code.Contains(sharedstart) && code.Contains(sharedend))
                {
                    start = sharedstart;
                    end   = sharedend;
                }
            }

            if (info.Fix2007)
            {
                Generator.GenerateScriptForClient(type);
            }

            string extractedCode = GetArgsFromTag(code, start, end);

            if (extractedCode.Contains("%donothing%"))
            {
                return("");
            }

            string WebServer_CustomPlayerDir = "http://" + GlobalVars.IP + ":" + (GlobalVars.UserConfiguration.WebServerPort.ToString()).ToString() + "/charcustom/";
            string WebServer_HatDir          = WebServer_CustomPlayerDir + "hats/";
            string WebServer_FaceDir         = WebServer_CustomPlayerDir + "faces/";
            string WebServer_HeadDir         = WebServer_CustomPlayerDir + "heads/";
            string WebServer_TShirtDir       = WebServer_CustomPlayerDir + "tshirts/";
            string WebServer_ShirtDir        = WebServer_CustomPlayerDir + "shirts/";
            string WebServer_PantsDir        = WebServer_CustomPlayerDir + "pants/";
            string WebServer_ExtraDir        = WebServer_CustomPlayerDir + "custom/";

#if LAUNCHER
            string md5dir = !info.AlreadyHasSecurity ? SecurityFuncs.GenerateMD5(Assembly.GetExecutingAssembly().Location) : "";
#else
            string md5dir = !info.AlreadyHasSecurity ? SecurityFuncs.GenerateMD5(GlobalPaths.RootPathLauncher + "\\Novetus.exe") : "";
#endif
            string md5script = !info.AlreadyHasSecurity ? SecurityFuncs.GenerateMD5(GlobalPaths.ClientDir + @"\\" + GlobalVars.UserConfiguration.SelectedClient + @"\\content\\scripts\\" + GlobalPaths.ScriptName + ".lua") : "";
            string md5exe    = !info.AlreadyHasSecurity ? SecurityFuncs.GenerateMD5(rbxexe) : "";
            string md5s      = "'" + md5exe + "','" + md5dir + "','" + md5script + "'";
            string compiled  = extractedCode.Replace("%version%", GlobalVars.ProgramInformation.Version)
                               .Replace("%mapfile%", mapfile)
                               .Replace("%luafile%", luafile)
                               .Replace("%charapp%", GlobalVars.UserCustomization.CharacterID)
                               .Replace("%ip%", GlobalVars.IP)
                               .Replace("%port%", GlobalVars.UserConfiguration.RobloxPort.ToString())
                               .Replace("%name%", GlobalVars.UserConfiguration.PlayerName)
                               .Replace("%icone%", ConvertIconStringToInt().ToString())
                               .Replace("%icon%", GlobalVars.UserCustomization.Icon)
                               .Replace("%id%", GlobalVars.UserConfiguration.UserID.ToString())
                               .Replace("%face%", GlobalVars.UserCustomization.Face)
                               .Replace("%head%", GlobalVars.UserCustomization.Head)
                               .Replace("%tshirt%", GlobalVars.UserCustomization.TShirt)
                               .Replace("%shirt%", GlobalVars.UserCustomization.Shirt)
                               .Replace("%pants%", GlobalVars.UserCustomization.Pants)
                               .Replace("%hat1%", GlobalVars.UserCustomization.Hat1)
                               .Replace("%hat2%", GlobalVars.UserCustomization.Hat2)
                               .Replace("%hat3%", GlobalVars.UserCustomization.Hat3)
                               .Replace("%faced%", GlobalVars.UserCustomization.Face.Contains("http://") ? GlobalVars.UserCustomization.Face : GlobalPaths.faceGameDir + GlobalVars.UserCustomization.Face)
                               .Replace("%headd%", GlobalPaths.headGameDir + GlobalVars.UserCustomization.Head)
                               .Replace("%tshirtd%", GlobalVars.UserCustomization.TShirt.Contains("http://") ? GlobalVars.UserCustomization.TShirt : GlobalPaths.tshirtGameDir + GlobalVars.UserCustomization.TShirt)
                               .Replace("%shirtd%", GlobalVars.UserCustomization.Shirt.Contains("http://") ? GlobalVars.UserCustomization.Shirt : GlobalPaths.shirtGameDir + GlobalVars.UserCustomization.Shirt)
                               .Replace("%pantsd%", GlobalVars.UserCustomization.Pants.Contains("http://") ? GlobalVars.UserCustomization.Pants : GlobalPaths.pantsGameDir + GlobalVars.UserCustomization.Pants)
                               .Replace("%hat1d%", GlobalPaths.hatGameDir + GlobalVars.UserCustomization.Hat1)
                               .Replace("%hat2d%", GlobalPaths.hatGameDir + GlobalVars.UserCustomization.Hat2)
                               .Replace("%hat3d%", GlobalPaths.hatGameDir + GlobalVars.UserCustomization.Hat3)
                               .Replace("%headcolor%", GlobalVars.UserCustomization.HeadColorID.ToString())
                               .Replace("%torsocolor%", GlobalVars.UserCustomization.TorsoColorID.ToString())
                               .Replace("%larmcolor%", GlobalVars.UserCustomization.LeftArmColorID.ToString())
                               .Replace("%llegcolor%", GlobalVars.UserCustomization.LeftLegColorID.ToString())
                               .Replace("%rarmcolor%", GlobalVars.UserCustomization.RightArmColorID.ToString())
                               .Replace("%rlegcolor%", GlobalVars.UserCustomization.RightLegColorID.ToString())
                               .Replace("%md5launcher%", md5dir)
                               .Replace("%md5script%", info.ScriptMD5)
                               .Replace("%md5exe%", info.ClientMD5)
                               .Replace("%md5scriptd%", md5script)
                               .Replace("%md5exed%", md5exe)
                               .Replace("%limit%", GlobalVars.UserConfiguration.PlayerLimit.ToString())
                               .Replace("%extra%", GlobalVars.UserCustomization.Extra)
                               .Replace("%hat4%", GlobalVars.UserCustomization.Extra)
                               .Replace("%extrad%", GlobalPaths.extraGameDir + GlobalVars.UserCustomization.Extra)
                               .Replace("%hat4d%", GlobalPaths.hatGameDir + GlobalVars.UserCustomization.Extra)
                               .Replace("%args%", GetRawArgsForType(type, md5s, luafile))
                               .Replace("%facews%", GlobalVars.UserCustomization.Face.Contains("http://") ? GlobalVars.UserCustomization.Face : WebServer_FaceDir + GlobalVars.UserCustomization.Face)
                               .Replace("%headws%", WebServer_HeadDir + GlobalVars.UserCustomization.Head)
                               .Replace("%tshirtws%", GlobalVars.UserCustomization.TShirt.Contains("http://") ? GlobalVars.UserCustomization.TShirt : WebServer_TShirtDir + GlobalVars.UserCustomization.TShirt)
                               .Replace("%shirtws%", GlobalVars.UserCustomization.Shirt.Contains("http://") ? GlobalVars.UserCustomization.Shirt : WebServer_ShirtDir + GlobalVars.UserCustomization.Shirt)
                               .Replace("%pantsws%", GlobalVars.UserCustomization.Pants.Contains("http://") ? GlobalVars.UserCustomization.Pants : WebServer_PantsDir + GlobalVars.UserCustomization.Pants)
                               .Replace("%hat1ws%", WebServer_HatDir + GlobalVars.UserCustomization.Hat1)
                               .Replace("%hat2ws%", WebServer_HatDir + GlobalVars.UserCustomization.Hat2)
                               .Replace("%hat3ws%", WebServer_HatDir + GlobalVars.UserCustomization.Hat3)
                               .Replace("%extraws%", WebServer_ExtraDir + GlobalVars.UserCustomization.Extra)
                               .Replace("%hat4ws%", WebServer_HatDir + GlobalVars.UserCustomization.Extra)
                               .Replace("%mapfiled%", GlobalPaths.BaseGameDir + GlobalVars.UserConfiguration.MapPathSnip.Replace(@"\\", @"\").Replace(@"/", @"\"))
                               .Replace("%mapfilec%", GlobalFuncs.CopyMapToRBXAsset())
                               .Replace("%tripcode%", GlobalVars.UserConfiguration.PlayerTripcode)
                               .Replace("%scripttype%", Generator.GetNameForType(type))
                               .Replace("%addonscriptpath%", GlobalPaths.AddonScriptPath);
            return(compiled);
        }
Esempio n. 7
0
        public static string CompileScript(string ClientName, string code, string tag, string endtag, string mapfile, string luafile, string rbxexe, bool usesharedtags = true)
        {
            string start = tag;
            string end   = endtag;

            FileFormat.ClientInfo info = GlobalFuncs.GetClientInfoValues(ClientName);

            ScriptType type = GetTypeFromTag(start);

            //we must have the ending tag before we continue.
            if (string.IsNullOrWhiteSpace(end))
            {
                return("");
            }

            if (usesharedtags)
            {
                string sharedstart = "<shared>";
                string sharedend   = "</shared>";

                if (code.Contains(sharedstart) && code.Contains(sharedend))
                {
                    start = sharedstart;
                    end   = sharedend;
                }
            }

            if (info.Fix2007)
            {
                Generator.GenerateScriptForClient(type);
            }

            string extractedCode = GetArgsFromTag(code, start, end);

            if (extractedCode.Contains("%donothing%"))
            {
                return("");
            }

#if LAUNCHER
            string md5dir = !info.AlreadyHasSecurity ? SecurityFuncs.GenerateMD5(Assembly.GetExecutingAssembly().Location) : "";
#else
            string md5dir = !info.AlreadyHasSecurity ? SecurityFuncs.GenerateMD5(GlobalPaths.RootPathLauncher + "\\Novetus.exe") : "";
#endif
            string md5script = !info.AlreadyHasSecurity ? SecurityFuncs.GenerateMD5(GlobalPaths.ClientDir + @"\\" + GlobalVars.UserConfiguration.SelectedClient + @"\\content\\scripts\\" + GlobalPaths.ScriptName + ".lua") : "";
            string md5exe    = !info.AlreadyHasSecurity ? SecurityFuncs.GenerateMD5(rbxexe) : "";
            string md5sd     = "'" + md5exe + "','" + md5dir + "','" + md5script + "'";
            string md5s      = "'" + info.ClientMD5 + "','" + md5dir + "','" + info.ScriptMD5 + "'";
            string compiled  = extractedCode.Replace("%version%", GlobalVars.ProgramInformation.Version)
                               .Replace("%mapfile%", mapfile)
                               .Replace("%luafile%", luafile)
                               .Replace("%charapp%", GlobalVars.UserCustomization.CharacterID)
                               .Replace("%ip%", GlobalVars.IP)
                               .Replace("%port%", GlobalVars.UserConfiguration.RobloxPort.ToString())
                               .Replace("%joinport%", GlobalVars.JoinPort.ToString())
                               .Replace("%name%", GlobalVars.UserConfiguration.PlayerName)
                               .Replace("%icone%", ConvertIconStringToInt().ToString())
                               .Replace("%icon%", GlobalVars.UserCustomization.Icon)
                               .Replace("%id%", GlobalVars.UserConfiguration.UserID.ToString())
                               .Replace("%face%", GlobalVars.UserCustomization.Face)
                               .Replace("%head%", GlobalVars.UserCustomization.Head)
                               .Replace("%tshirt%", GlobalVars.UserCustomization.TShirt)
                               .Replace("%shirt%", GlobalVars.UserCustomization.Shirt)
                               .Replace("%pants%", GlobalVars.UserCustomization.Pants)
                               .Replace("%hat1%", GlobalVars.UserCustomization.Hat1)
                               .Replace("%hat2%", GlobalVars.UserCustomization.Hat2)
                               .Replace("%hat3%", GlobalVars.UserCustomization.Hat3)
                               .Replace("%faced%", GlobalVars.UserCustomization.Face.Contains("http://") ? GlobalVars.UserCustomization.Face : GlobalPaths.faceGameDir + GlobalVars.UserCustomization.Face)
                               .Replace("%headd%", GlobalPaths.headGameDir + GlobalVars.UserCustomization.Head)
                               .Replace("%tshirtd%", GlobalVars.UserCustomization.TShirt.Contains("http://") ? GlobalVars.UserCustomization.TShirt : GlobalPaths.tshirtGameDir + GlobalVars.UserCustomization.TShirt)
                               .Replace("%shirtd%", GlobalVars.UserCustomization.Shirt.Contains("http://") ? GlobalVars.UserCustomization.Shirt : GlobalPaths.shirtGameDir + GlobalVars.UserCustomization.Shirt)
                               .Replace("%pantsd%", GlobalVars.UserCustomization.Pants.Contains("http://") ? GlobalVars.UserCustomization.Pants : GlobalPaths.pantsGameDir + GlobalVars.UserCustomization.Pants)
                               .Replace("%hat1d%", GlobalPaths.hatGameDir + GlobalVars.UserCustomization.Hat1)
                               .Replace("%hat2d%", GlobalPaths.hatGameDir + GlobalVars.UserCustomization.Hat2)
                               .Replace("%hat3d%", GlobalPaths.hatGameDir + GlobalVars.UserCustomization.Hat3)
                               .Replace("%headcolor%", GlobalVars.UserCustomization.HeadColorID.ToString())
                               .Replace("%torsocolor%", GlobalVars.UserCustomization.TorsoColorID.ToString())
                               .Replace("%larmcolor%", GlobalVars.UserCustomization.LeftArmColorID.ToString())
                               .Replace("%llegcolor%", GlobalVars.UserCustomization.LeftLegColorID.ToString())
                               .Replace("%rarmcolor%", GlobalVars.UserCustomization.RightArmColorID.ToString())
                               .Replace("%rlegcolor%", GlobalVars.UserCustomization.RightLegColorID.ToString())
                               .Replace("%md5launcher%", md5dir)
                               .Replace("%md5script%", info.ScriptMD5)
                               .Replace("%md5exe%", info.ClientMD5)
                               .Replace("%md5scriptd%", md5script)
                               .Replace("%md5exed%", md5exe)
                               .Replace("%md5s%", md5s)
                               .Replace("%md5sd%", md5sd)
                               .Replace("%limit%", GlobalVars.UserConfiguration.PlayerLimit.ToString())
                               .Replace("%extra%", GlobalVars.UserCustomization.Extra)
                               .Replace("%hat4%", GlobalVars.UserCustomization.Extra)
                               .Replace("%extrad%", GlobalPaths.extraGameDir + GlobalVars.UserCustomization.Extra)
                               .Replace("%hat4d%", GlobalPaths.hatGameDir + GlobalVars.UserCustomization.Extra)
                               .Replace("%mapfiled%", GlobalPaths.BaseGameDir + GlobalVars.UserConfiguration.MapPathSnip.Replace(@"\\", @"\").Replace(@"/", @"\"))
                               .Replace("%mapfilec%", extractedCode.Contains("%mapfilec%") ? GlobalFuncs.CopyMapToRBXAsset() : "")
                               .Replace("%tripcode%", GlobalVars.PlayerTripcode)
                               .Replace("%scripttype%", Generator.GetNameForType(type))
                               .Replace("%addonscriptpath%", GlobalPaths.AddonScriptPath)
                               .Replace("%notifications%", GlobalVars.UserConfiguration.ShowServerNotifications.ToString().ToLower())
                               .Replace("%loadout%", code.Contains("<solo>") ? GlobalVars.soloLoadout : GlobalVars.Loadout)
                               .Replace("%doublequote%", "\"")
                               .Replace("%validatedextrafiles%", GlobalVars.ValidatedExtraFiles.ToString())
                               .Replace("%argstring%", GetRawArgsForType(type, ClientName, luafile))
                               .Replace("%tshirttexid%", GlobalVars.TShirtTextureID)
                               .Replace("%shirttexid%", GlobalVars.ShirtTextureID)
                               .Replace("%pantstexid%", GlobalVars.PantsTextureID)
                               .Replace("%facetexid%", GlobalVars.FaceTextureID)
                               .Replace("%tshirttexidlocal%", GlobalVars.TShirtTextureLocal)
                               .Replace("%shirttexidlocal%", GlobalVars.ShirtTextureLocal)
                               .Replace("%pantstexidlocal%", GlobalVars.PantsTextureLocal)
                               .Replace("%facetexlocal%", GlobalVars.FaceTextureLocal)
                               .Replace("%newgui%", GlobalVars.UserConfiguration.NewGUI.ToString().ToLower());

            if (compiled.Contains("%disabled%"))
            {
                MessageBox.Show("This option has been disabled for this client.", "Novetus - Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return("");
            }

            return(compiled);
        }