From 26a8224430501fe8dab90bc1e4cb648d3626c0d2 Mon Sep 17 00:00:00 2001 From: Bitl Date: Sat, 10 Nov 2018 12:50:06 -0700 Subject: [PATCH] 2007 support, more clientinfo stuff --- .../ClientinfoCreator.Designer.cs | 37 +- .../NovetusLauncher/ClientinfoCreator.cs | 59 ++- .../NovetusLauncher/LauncherFuncs.cs | 461 ++++-------------- NovetusLauncher/NovetusLauncher/LoaderForm.cs | 64 ++- NovetusLauncher/NovetusLauncher/MainForm.cs | 210 +++++--- ...ovetusLauncher.csproj.FileListAbsolute.txt | 12 + ...etusLauncher.csproj.GenerateResource.Cache | Bin 1305 -> 1305 bytes .../obj/Release/NovetusLauncher.exe | Bin 6262784 -> 6266880 bytes 8 files changed, 363 insertions(+), 480 deletions(-) diff --git a/NovetusLauncher/NovetusLauncher/ClientinfoCreator.Designer.cs b/NovetusLauncher/NovetusLauncher/ClientinfoCreator.Designer.cs index e908a61..790a749 100644 --- a/NovetusLauncher/NovetusLauncher/ClientinfoCreator.Designer.cs +++ b/NovetusLauncher/NovetusLauncher/ClientinfoCreator.Designer.cs @@ -54,6 +54,7 @@ namespace NovetusLauncher this.button4 = new System.Windows.Forms.Button(); this.checkBox4 = new System.Windows.Forms.CheckBox(); this.checkBox6 = new System.Windows.Forms.CheckBox(); + this.checkBox7 = new System.Windows.Forms.CheckBox(); this.SuspendLayout(); // // checkBox1 @@ -78,16 +79,16 @@ namespace NovetusLauncher // // textBox1 // - this.textBox1.Location = new System.Drawing.Point(9, 259); + this.textBox1.Location = new System.Drawing.Point(9, 280); this.textBox1.Multiline = true; this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(310, 116); + this.textBox1.Size = new System.Drawing.Size(310, 128); this.textBox1.TabIndex = 4; this.textBox1.TextChanged += new System.EventHandler(this.TextBox1TextChanged); // // label1 // - this.label1.Location = new System.Drawing.Point(8, 240); + this.label1.Location = new System.Drawing.Point(8, 261); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(92, 16); this.label1.TabIndex = 5; @@ -103,7 +104,7 @@ namespace NovetusLauncher // // button1 // - this.button1.Location = new System.Drawing.Point(167, 410); + this.button1.Location = new System.Drawing.Point(167, 443); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(154, 30); this.button1.TabIndex = 7; @@ -113,7 +114,7 @@ namespace NovetusLauncher // // button2 // - this.button2.Location = new System.Drawing.Point(8, 410); + this.button2.Location = new System.Drawing.Point(8, 443); this.button2.Name = "button2"; this.button2.Size = new System.Drawing.Size(150, 30); this.button2.TabIndex = 10; @@ -133,7 +134,7 @@ namespace NovetusLauncher // // button3 // - this.button3.Location = new System.Drawing.Point(9, 381); + this.button3.Location = new System.Drawing.Point(9, 414); this.button3.Name = "button3"; this.button3.Size = new System.Drawing.Size(312, 23); this.button3.TabIndex = 12; @@ -153,7 +154,7 @@ namespace NovetusLauncher // // label3 // - this.label3.Location = new System.Drawing.Point(8, 134); + this.label3.Location = new System.Drawing.Point(8, 155); this.label3.Name = "label3"; this.label3.Size = new System.Drawing.Size(92, 13); this.label3.TabIndex = 14; @@ -161,7 +162,7 @@ namespace NovetusLauncher // // textBox2 // - this.textBox2.Location = new System.Drawing.Point(10, 150); + this.textBox2.Location = new System.Drawing.Point(10, 171); this.textBox2.Name = "textBox2"; this.textBox2.ReadOnly = true; this.textBox2.Size = new System.Drawing.Size(311, 20); @@ -170,7 +171,7 @@ namespace NovetusLauncher // // textBox3 // - this.textBox3.Location = new System.Drawing.Point(8, 189); + this.textBox3.Location = new System.Drawing.Point(8, 210); this.textBox3.Name = "textBox3"; this.textBox3.ReadOnly = true; this.textBox3.Size = new System.Drawing.Size(312, 20); @@ -179,7 +180,7 @@ namespace NovetusLauncher // // label4 // - this.label4.Location = new System.Drawing.Point(8, 173); + this.label4.Location = new System.Drawing.Point(8, 194); this.label4.Name = "label4"; this.label4.Size = new System.Drawing.Size(92, 13); this.label4.TabIndex = 17; @@ -187,7 +188,7 @@ namespace NovetusLauncher // // button4 // - this.button4.Location = new System.Drawing.Point(8, 215); + this.button4.Location = new System.Drawing.Point(8, 236); this.button4.Name = "button4"; this.button4.Size = new System.Drawing.Size(312, 22); this.button4.TabIndex = 18; @@ -216,12 +217,23 @@ namespace NovetusLauncher this.checkBox6.UseVisualStyleBackColor = true; this.checkBox6.CheckedChanged += new System.EventHandler(this.CheckBox6CheckedChanged); // + // checkBox7 + // + this.checkBox7.Location = new System.Drawing.Point(9, 125); + this.checkBox7.Name = "checkBox7"; + this.checkBox7.Size = new System.Drawing.Size(307, 24); + this.checkBox7.TabIndex = 21; + this.checkBox7.Text = "Already has security options"; + this.checkBox7.UseVisualStyleBackColor = true; + this.checkBox7.CheckedChanged += new System.EventHandler(this.CheckBox7CheckedChanged); + // // ClientinfoEditor // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackColor = System.Drawing.SystemColors.ControlLightLight; - this.ClientSize = new System.Drawing.Size(332, 452); + this.ClientSize = new System.Drawing.Size(332, 485); + this.Controls.Add(this.checkBox7); this.Controls.Add(this.checkBox6); this.Controls.Add(this.checkBox4); this.Controls.Add(this.button4); @@ -248,6 +260,7 @@ namespace NovetusLauncher this.ResumeLayout(false); this.PerformLayout(); } + private System.Windows.Forms.CheckBox checkBox7; private System.Windows.Forms.CheckBox checkBox6; private System.Windows.Forms.CheckBox checkBox4; private System.Windows.Forms.Button button4; diff --git a/NovetusLauncher/NovetusLauncher/ClientinfoCreator.cs b/NovetusLauncher/NovetusLauncher/ClientinfoCreator.cs index cff4d41..bf7cc46 100644 --- a/NovetusLauncher/NovetusLauncher/ClientinfoCreator.cs +++ b/NovetusLauncher/NovetusLauncher/ClientinfoCreator.cs @@ -30,6 +30,8 @@ namespace NovetusLauncher private string SelectedClientScriptMD5 = ""; private string SelectedClientInfoPath = ""; private bool Locked = false; + private bool FixScriptMapMode = false; + private bool AlreadyHasSecurity = false; public ClientinfoEditor() { @@ -103,34 +105,29 @@ namespace NovetusLauncher 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]); - try + if (GlobalVars.AdminMode != true) { - Decryptline8 = SecurityFuncs.Base64Decode(result[7]); - - if (GlobalVars.AdminMode != true) + Boolean bline8 = Convert.ToBoolean(Decryptline8); + if (bline8 == true) { - Boolean bline8 = Convert.ToBoolean(Decryptline8); - if (bline8 == true) - { - MessageBox.Show("This client is locked and therefore it cannot be loaded.","Novetus Launcher - Error when loading client", MessageBoxButtons.OK, MessageBoxIcon.Error); - return; - } - else - { - Locked = bline8; - checkBox4.Checked = false; - } + MessageBox.Show("This client is locked and therefore it cannot be loaded.","Novetus Launcher - Error when loading client", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; } else { - Boolean bline8 = Convert.ToBoolean(Decryptline8); Locked = bline8; checkBox4.Checked = false; } } - catch(IndexOutOfRangeException) + else { + Boolean bline8 = Convert.ToBoolean(Decryptline8); + Locked = bline8; + checkBox4.Checked = false; } Boolean bline1 = Convert.ToBoolean(Decryptline1); @@ -151,10 +148,18 @@ namespace NovetusLauncher SelectedClientDesc = Decryptline7; + //bool bline9 = Convert.ToBoolean(Decryptline9); + //FixScriptMapMode = Decryptline9; + + //bool bline10 = Convert.ToBoolean(Decryptline10); + //AlreadyHasSecurity = Decryptline10; + checkBox1.Checked = UsesPlayerName; checkBox2.Checked = UsesID; checkBox5.Checked = LoadsAssetsOnline; checkBox3.Checked = LegacyMode; + //checkBox6.Checked = FixScriptMapMode; + //checkBox7.Checked = AlreadyHasSecurity; textBox3.Text = SelectedClientScriptMD5.ToUpper(); textBox2.Text = SelectedClientMD5.ToUpper(); textBox1.Text = SelectedClientDesc; @@ -181,7 +186,9 @@ namespace NovetusLauncher SecurityFuncs.Base64Encode(SelectedClientMD5.ToString()), SecurityFuncs.Base64Encode(SelectedClientScriptMD5.ToString()), SecurityFuncs.Base64Encode(SelectedClientDesc.ToString()), - SecurityFuncs.Base64Encode(Locked.ToString()) + SecurityFuncs.Base64Encode(Locked.ToString()), + SecurityFuncs.Base64Encode(FixScriptMapMode.ToString()), + SecurityFuncs.Base64Encode(AlreadyHasSecurity.ToString()) }; File.WriteAllText(sfd.FileName, SecurityFuncs.Base64Encode(string.Join("|",lines))); } @@ -218,6 +225,8 @@ namespace NovetusLauncher UsesID = false; LoadsAssetsOnline = false; LegacyMode = false; + FixScriptMapMode = false; + AlreadyHasSecurity = false; SelectedClientDesc = ""; SelectedClientMD5 = ""; SelectedClientScriptMD5 = ""; @@ -225,6 +234,8 @@ namespace NovetusLauncher checkBox2.Checked = UsesID; checkBox5.Checked = LoadsAssetsOnline; checkBox3.Checked = LegacyMode; + checkBox6.Checked = FixScriptMapMode; + checkBox7.Checked = AlreadyHasSecurity; textBox3.Text = SelectedClientScriptMD5.ToUpper(); textBox2.Text = SelectedClientMD5.ToUpper(); textBox1.Text = SelectedClientDesc; @@ -317,5 +328,17 @@ namespace NovetusLauncher FixScriptMapMode = false; } } + + void CheckBox7CheckedChanged(object sender, EventArgs e) + { + if (checkBox7.Checked == true) + { + AlreadyHasSecurity = true; + } + else if (checkBox7.Checked == false) + { + AlreadyHasSecurity = false; + } + } } } diff --git a/NovetusLauncher/NovetusLauncher/LauncherFuncs.cs b/NovetusLauncher/NovetusLauncher/LauncherFuncs.cs index 23ed8a8..326f1de 100644 --- a/NovetusLauncher/NovetusLauncher/LauncherFuncs.cs +++ b/NovetusLauncher/NovetusLauncher/LauncherFuncs.cs @@ -282,6 +282,8 @@ namespace NovetusLauncher Decryptline5 = SecurityFuncs.Base64Decode(result[4]); Decryptline6 = SecurityFuncs.Base64Decode(result[5]); Decryptline7 = SecurityFuncs.Base64Decode(result[6]); + //Decryptline9 = SecurityFuncs.Base64Decode(result[8]); + //Decryptline10 = SecurityFuncs.Base64Decode(result[9]); bool bline1 = Convert.ToBoolean(Decryptline1); GlobalVars.UsesPlayerName = bline1; @@ -300,6 +302,12 @@ namespace NovetusLauncher GlobalVars.SelectedClientScriptMD5 = Decryptline6; GlobalVars.SelectedClientDesc = Decryptline7; + + //bool bline9 = Convert.ToBoolean(Decryptline9); + //GlobalVars.FixScriptMapMode = Decryptline9; + + //bool bline10 = Convert.ToBoolean(Decryptline10); + //GlobalVars.AlreadyHasSecurity = Decryptline10; } public static void GeneratePlayerID() @@ -709,381 +717,116 @@ namespace NovetusLauncher * * now, we have to call the funtion associated for the action, such as starting the main client or something * we also need to make sure that when we add the option, we'll need to adapt map loading to work RBX2007 style for the clients using the script generator. - * / + */ - /* public class ScriptGenerator { public ScriptGenerator() { } + + public enum ScriptType + { + Client = 0, + Server = 1, + Solo = 2, + Studio = 3 + } + + public static bool TypeSupportsCustom(ScriptType type) + { + if (type == ScriptType.Server || type == ScriptType.Studio) + { + return false; + } + else + { + return true; + } + } + + public static string GetScriptFuncForType(ScriptType type) + { + string md5dir = SecurityFuncs.CalculateMD5(Assembly.GetExecutingAssembly().Location); + if (type == ScriptType.Client) + { + if (GlobalVars.UsesPlayerName == true && GlobalVars.UsesID == true) + { + return "_G.CSConnect(" + GlobalVars.UserID + ",'" + GlobalVars.IP + "'," + GlobalVars.RobloxPort + ",'" + GlobalVars.PlayerName + "','" + GlobalVars.loadtext + ",'" + GlobalVars.SelectedClientMD5 + "','" + md5dir + "','" + GlobalVars.SelectedClientScriptMD5 + "')"; + } + else if (GlobalVars.UsesPlayerName == false && GlobalVars.UsesID == true) + { + return "_G.CSConnect(" + GlobalVars.UserID + ",'" + GlobalVars.IP + "'," + GlobalVars.RobloxPort + ",'Player','" + GlobalVars.loadtext + ",'" + GlobalVars.SelectedClientMD5 + "','" + md5dir + "','" + GlobalVars.SelectedClientScriptMD5 + "')"; + } + else if (GlobalVars.UsesPlayerName == true && GlobalVars.UsesID == false) + { + return "_G.CSConnect(0,'" + GlobalVars.IP + "'," + GlobalVars.RobloxPort + ",'" + GlobalVars.PlayerName + "','" + GlobalVars.loadtext + ",'" + GlobalVars.SelectedClientMD5 + "','" + md5dir + "','" + GlobalVars.SelectedClientScriptMD5 + "')"; + } + else if (GlobalVars.UsesPlayerName == false && GlobalVars.UsesID == false) + { + return "_G.CSConnect(0,'" + GlobalVars.IP + "'," + GlobalVars.RobloxPort + ",'Player','" + GlobalVars.loadtext + ",'" + GlobalVars.SelectedClientMD5 + "','" + md5dir + "','" + GlobalVars.SelectedClientScriptMD5 + "')"; + } + } + else if (type == ScriptType.Server) + { + return "_G.CSServer(" + GlobalVars.RobloxPort + "," + GlobalVars.PlayerLimit + ",'" + GlobalVars.SelectedClientMD5 + "','" + md5dir + "','" + GlobalVars.SelectedClientScriptMD5 + "'," + GlobalVars.DisableTeapotTurret.ToString().ToLower() + ")"; + } + else if (type == ScriptType.Solo) + { + if (GlobalVars.UsesPlayerName == true && GlobalVars.UsesID == true) + { + return "_G.CSSolo(" + GlobalVars.UserID + ",'" + GlobalVars.PlayerName + "','" + GlobalVars.loadtext + ")"; + } + else if (GlobalVars.UsesPlayerName == false && GlobalVars.UsesID == true) + { + return "_G.CSSolo(" + GlobalVars.UserID + ",'Player','" + GlobalVars.loadtext + ")"; + } + else if (GlobalVars.UsesPlayerName == true && GlobalVars.UsesID == false) + { + return "_G.CSSolo(0,'" + GlobalVars.PlayerName + "','" + GlobalVars.loadtext + ")"; + } + else if (GlobalVars.UsesPlayerName == false && GlobalVars.UsesID == false ) + { + return "_G.CSSolo(0,'Player','" + GlobalVars.loadtext + ")"; + } + } + else if (type == ScriptType.Studio) + { + return ""; + } + else + { + return ""; + } + + return ""; + } + + private static void ReadConfigValues() + { + LauncherFuncs.ReadConfigValues(GlobalVars.BasePath + "\\config.txt"); + } - public static void GenerateScriptForClient() + public static void GenerateScriptForClient(ScriptType type) { //next, generate the header functions. - SecurityFuncs.ReadConfigValues(); - - int aasamples = GlobalVars.AASamples.Equals(0) ? 1 : GlobalVars.AASamples.Equals(1) ? 4 : GlobalVars.AASamples.Equals(2) ? 8 : 1; - - string header = MultiLine( - "--Header", - "function newWaitForChild(newParent,name)", - "local returnable = nil", - "if newParent:FindFirstChild(name) then", - "returnable = newParent:FindFirstChild(name)", - "else", - "repeat wait() returnable = newParent:FindFirstChild(name) until returnable ~= nil", - "end", - "return returnable", - "end", - "settings().Rendering.Shadows = " + GlobalVars.Shadows.ToString().ToLower(), - "settings().Rendering.AASamples = " + aasamples, - "AnimatedCharacter = " + GlobalVars.AnimatedCharacter.ToString().ToLower() - ); - - string playersettings = MultiLine( - "--Player Settings", - "UserID = " + GlobalVars.UserID, - "PlayerName = '" + GlobalVars.Name + "'" - ); - - string customizationsettings = ""; - - if (GlobalVars.AnimatedCharacter == false) - { - customizationsettings = MultiLine( - "--Customization Settings", - "Hat1ID = 'NoHat.rbxm'" - ); - } - else - { - customizationsettings = MultiLine( - "--Customization Settings", - "Hat1ID = '" + GlobalVars.HatName + "'" - ); - } - - string colorsettings = ""; - - if (GlobalVars.AnimatedCharacter == false) - { - if (GlobalVars.UseRandomColors) - { - colorsettings = GeneratePlayerColorString(); - } - else - { - colorsettings = GeneratePlayerColorPresetString(GlobalVars.PlayerColorPreset); - } - } - else - { - colorsettings = MultiLine( - "--Color Settings", - "HeadColorID = " + GlobalVars.HeadColor, - "TorsoColorID = " + GlobalVars.TorsoColor, - "LeftArmColorID = " + GlobalVars.LeftArmColor, - "RightArmColorID = " + GlobalVars.RightArmColor, - "LeftLegColorID = " + GlobalVars.LeftLegColor, - "RightLegColorID = " + GlobalVars.RightLegColor - ); - } - - //add customization funcs - string customizationgen = MultiLine( - "--Customization Code", - "function InitalizeClientAppearance(Player,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,HatID)", - "local newCharApp = Instance.new('IntValue',Player)", - "newCharApp.Name = 'Appearance'", - "for i=1,6,1 do", - "local BodyColor = Instance.new('BrickColorValue',newCharApp)", - "if (i == 1) then", - "if (HeadColorID ~= nil) then", - "BodyColor.Value = BrickColor.new(HeadColorID)", - "BodyColor.Name = 'HeadColor (ID: '..HeadColorID..')'", - "else", - "BodyColor.Value = BrickColor.new(1)", - "BodyColor.Name = 'HeadColor (ID: 1)'", - "end", - "elseif (i == 2) then", - "if (TorsoColorID ~= nil) then", - "BodyColor.Value = BrickColor.new(TorsoColorID)", - "BodyColor.Name = 'TorsoColor (ID: '..TorsoColorID..')'", - "else", - "BodyColor.Value = BrickColor.new(1)", - "BodyColor.Name = 'TorsoColor (ID: 1)'", - "end", - "elseif (i == 3) then", - "if (LeftArmColorID ~= nil) then", - "BodyColor.Value = BrickColor.new(LeftArmColorID)", - "BodyColor.Name = 'LeftArmColor (ID: '..LeftArmColorID..')'", - "else", - "BodyColor.Value = BrickColor.new(1)", - "BodyColor.Name = 'LeftArmColor (ID: 1)'", - "end", - "elseif (i == 4) then", - "if (RightArmColorID ~= nil) then", - "BodyColor.Value = BrickColor.new(RightArmColorID)", - "BodyColor.Name = 'RightArmColor (ID: '..RightArmColorID..')'", - "else", - "BodyColor.Value = BrickColor.new(1)", - "BodyColor.Name = 'RightArmColor (ID: 1)'", - "end", - "elseif (i == 5) then", - "if (LeftLegColorID ~= nil) then", - "BodyColor.Value = BrickColor.new(LeftLegColorID)", - "BodyColor.Name = 'LeftLegColor (ID: '..LeftLegColorID..')'", - "else", - "BodyColor.Value = BrickColor.new(1)", - "BodyColor.Name = 'LeftLegColor (ID: 1)'", - "end", - "elseif (i == 6) then", - "if (RightLegColorID ~= nil) then", - "BodyColor.Value = BrickColor.new(RightLegColorID)", - "BodyColor.Name = 'RightLegColor (ID: '..RightLegColorID..')'", - "else", - "BodyColor.Value = BrickColor.new(1)", - "BodyColor.Name = 'RightLegColor (ID: 1)'", - "end", - "end", - "local typeValue = Instance.new('NumberValue')", - "typeValue.Name = 'CustomizationType'", - "typeValue.Parent = BodyColor", - "typeValue.Value = 1", - "local indexValue = Instance.new('NumberValue')", - "indexValue.Name = 'ColorIndex'", - "indexValue.Parent = BodyColor", - "indexValue.Value = i", - "end", - "local newHat = Instance.new('StringValue',newCharApp)", - "if (HatID ~= nil) then", - "newHat.Value = HatID", - "newHat.Name = HatID", - "else", - "newHat.Value = 'NoHat.rbxm'", - "newHat.Name = 'NoHat.rbxm'", - "end", - "local typeValue = Instance.new('NumberValue')", - "typeValue.Name = 'CustomizationType'", - "typeValue.Parent = newHat", - "typeValue.Value = 2", - "end", - "function LoadCharacterNew(playerApp,newChar)", - "local charparts = {[1] = newWaitForChild(newChar,'Head'),[2] = newWaitForChild(newChar,'Torso'),[3] = newWaitForChild(newChar,'Left Arm'),[4] = newWaitForChild(newChar,'Right Arm'),[5] = newWaitForChild(newChar,'Left Leg'),[6] = newWaitForChild(newChar,'Right Leg')}", - "for _,newVal in pairs(playerApp:GetChildren()) do", - "newWaitForChild(newVal,'CustomizationType')", - "local customtype = newVal:FindFirstChild('CustomizationType')", - "if (customtype.Value == 1) then ", - "pcall(function()", - "newWaitForChild(newVal,'ColorIndex')", - "local colorindex = newVal:FindFirstChild('ColorIndex')", - "charparts[colorindex.Value].BrickColor = newVal.Value ", - "end)", - "elseif (customtype.Value == 2) then", - "pcall(function()", - "local newHat = game.Workspace:InsertContent('rbxasset://hats/'..newVal.Value)", - "if newHat[1] then ", - "if newHat[1].className == 'Hat' then", - "newHat[1].Parent = newChar", - "else", - "newHat[1]:remove()", - "end", - "end", - "end)", - "end", - "end", - "end" - ); - - //finally, we generate the actual script code. + ReadConfigValues(); string code = MultiLine( - "--Game Code", - "game:GetService('RunService'):run()", - "local plr = game.Players:CreateLocalPlayer(UserID)", - "plr.Name = PlayerName", - "plr:LoadCharacter()", - "pcall(function() plr:SetUnder13(false) end)", - "pcall(function() plr:SetAccountAge(365) end)", - "if (AnimatedCharacter == false) then", - "if plr.Character:FindFirstChild('Animate') then", - "plr.Character.Animate:Remove()", - "end", - "end", - "InitalizeClientAppearance(plr,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,Hat1ID)", - "LoadCharacterNew(newWaitForChild(plr,'Appearance'),plr.Character)", - "game:GetService('Visit')", - "while true do", - "wait(0.001)", - "if (plr.Character ~= nil) then", - "if (plr.Character.Humanoid.Health == 0) then", - "wait(5)", - "plr:LoadCharacter()", - "LoadCharacterNew(newWaitForChild(plr,'Appearance'),plr.Character,plr.Backpack)", - "if (AnimatedCharacter == false) then", - "if plr.Character:FindFirstChild('Animate') then", - "plr.Character.Animate:Remove()", - "end", - "end", - "elseif (plr.Character.Parent == nil) then", - "wait(5)", - "plr:LoadCharacter()", - "LoadCharacterNew(newWaitForChild(plr,'Appearance'),plr.Character,plr.Backpack)", - "if (AnimatedCharacter == false) then", - "if plr.Character:FindFirstChild('Animate') then", - "plr.Character.Animate:Remove()", - "end", - "end", - "end", - "end", - "end" + "--Load Script", + "dofile('rbxasset://scripts/" + GlobalVars.ScriptName + ".lua')", + GetScriptFuncForType(type) ); - - string scriptfile = MultiLine( - header, - playersettings, - customizationsettings, - colorsettings, - customizationgen, - code - ); - List list = new List(Regex.Split(scriptfile, Environment.NewLine)); + List list = new List(Regex.Split(code, Environment.NewLine)); string[] convertedList = list.ToArray(); - File.WriteAllLines(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + GlobalVars.ScriptLuaFile, convertedList); + File.WriteAllLines(GlobalVars.ClientDir + @"\\" + GlobalVars.SelectedClient + @"\\content\\scripts\\" + GlobalVars.ScriptGenName + ".lua", convertedList); } - public static string GeneratePlayerColorString() - { - CryptoRandom random = new CryptoRandom(); - int SkinPattern = random.Next(1,7); - int LegsPattern = random.Next(1,5); - int TorsoPattern = random.Next(1,8); - - int HeadColor = 0; - int TorsoColor= 0; - int LArmColor = 0; - int RArmColor = 0; - int LLegColor = 0; - int RLegColor = 0; - - if (SkinPattern == 1) - { - HeadColor = 24; - LArmColor = 24; - RArmColor = 24; - } - else if (SkinPattern == 2) - { - HeadColor = 226; - LArmColor = 226; - RArmColor = 226; - } - else if (SkinPattern == 3) - { - HeadColor = 101; - LArmColor = 101; - RArmColor = 101; - } - else if (SkinPattern == 4) - { - HeadColor = 9; - LArmColor = 9; - RArmColor = 9; - } - else if (SkinPattern == 5) - { - HeadColor = 38; - LArmColor = 38; - RArmColor = 38; - } - else if (SkinPattern == 6) - { - HeadColor = 18; - LArmColor = 18; - RArmColor = 18; - } - else if (SkinPattern == 7) - { - HeadColor = 128; - LArmColor = 128; - RArmColor = 128; - } - - if (LegsPattern == 1) - { - RLegColor = 119; - LLegColor = 119; - } - else if (LegsPattern == 2) - { - LLegColor = 11; - RLegColor = 11; - } - else if (LegsPattern == 3) - { - LLegColor = 23; - RLegColor = 23; - } - else if (LegsPattern == 4) - { - LLegColor = 1; - RLegColor = 1; - } - else if (LegsPattern == 5) - { - LLegColor = 45; - RLegColor = 45; - } - - if (TorsoPattern == 1) - { - TorsoColor = 194; - } - else if (TorsoPattern == 2) - { - TorsoColor = 199; - } - else if (TorsoPattern == 3) - { - TorsoColor = 1; - } - else if (TorsoPattern == 4) - { - TorsoColor = 21; - } - else if (TorsoPattern == 5) - { - TorsoColor = 37; - } - else if (TorsoPattern == 6) - { - TorsoColor = 23; - } - else if (TorsoPattern == 7) - { - TorsoColor = 45; - } - else if (TorsoPattern == 8) - { - TorsoColor = 11; - } - - string output = MultiLine( - "--Color Settings", - "HeadColorID = " + HeadColor, - "TorsoColorID = " + TorsoColor, - "LeftArmColorID = " + LArmColor, - "RightArmColorID = " + RArmColor, - "LeftLegColorID = " + LLegColor, - "RightLegColorID = " + RLegColor - ); - - return output; - } + // using this for a possible 2006 preset feature?? + /* public static string GeneratePlayerColorPresetString(int preset) { int HeadColor = 0; @@ -1178,13 +921,13 @@ namespace NovetusLauncher return output; } + */ public static string MultiLine(params string[] args) { return string.Join(Environment.NewLine, args); } } - */ public static class GlobalVars { @@ -1222,6 +965,8 @@ namespace NovetusLauncher public static bool LegacyMode = false; public static string SelectedClientMD5 = ""; public static string SelectedClientScriptMD5 = ""; + public static bool FixScriptMapMode = false; + public static bool AlreadyHasSecurity = false; //charcustom public static string Custom_Hat1ID_Offline = "NoHat.rbxm"; public static string Custom_Hat2ID_Offline = "NoHat.rbxm"; diff --git a/NovetusLauncher/NovetusLauncher/LoaderForm.cs b/NovetusLauncher/NovetusLauncher/LoaderForm.cs index adfc37a..9715ca3 100644 --- a/NovetusLauncher/NovetusLauncher/LoaderForm.cs +++ b/NovetusLauncher/NovetusLauncher/LoaderForm.cs @@ -55,7 +55,15 @@ namespace NovetusLauncher string port = SecurityFuncs.Base64Decode(SplitArg[1]); string client = SecurityFuncs.Base64Decode(SplitArg[2]); ReadClientValues(client); - string luafile = "rbxasset://scripts\\\\" + GlobalVars.ScriptName + ".lua"; + string luafile = ""; + if (!GlobalVars.FixScriptMapMode) + { + luafile = "rbxasset://scripts\\\\" + GlobalVars.ScriptName + ".lua"; + } + else + { + luafile = GlobalVars.ClientDir + @"\\" + GlobalVars.SelectedClient + @"\\content\\scripts\\" + GlobalVars.ScriptGenName + ".lua"; + } string rbxexe = ""; if (GlobalVars.LegacyMode == true) { @@ -68,35 +76,55 @@ namespace NovetusLauncher string quote = "\""; string args = ""; string md5dir = SecurityFuncs.CalculateMD5(Assembly.GetExecutingAssembly().Location); - if (GlobalVars.UsesPlayerName == true && GlobalVars.UsesID == true) + if (!GlobalVars.FixScriptMapMode) { - args = "-script " + quote + "dofile('" + luafile + "'); _G.CSConnect(" + GlobalVars.UserID + ",'" + ip + "'," + port + ",'" + GlobalVars.PlayerName + "','" + GlobalVars.loadtext + ",'" + GlobalVars.SelectedClientMD5 + "','" + md5dir + "','" + GlobalVars.SelectedClientScriptMD5 + "');" + quote; + if (GlobalVars.UsesPlayerName == true && GlobalVars.UsesID == true) + { + args = "-script " + quote + "dofile('" + luafile + "'); _G.CSConnect(" + GlobalVars.UserID + ",'" + ip + "'," + port + ",'" + GlobalVars.PlayerName + "','" + GlobalVars.loadtext + ",'" + GlobalVars.SelectedClientMD5 + "','" + md5dir + "','" + GlobalVars.SelectedClientScriptMD5 + "');" + quote; + } + else if (GlobalVars.UsesPlayerName == false && GlobalVars.UsesID == true) + { + args = "-script " + quote + "dofile('" + luafile + "'); _G.CSConnect(" + GlobalVars.UserID + ",'" + ip + "'," + port + ",'Player','" + GlobalVars.loadtext + ",'" + GlobalVars.SelectedClientMD5 + "','" + md5dir + "','" + GlobalVars.SelectedClientScriptMD5 + "');" + quote; + } + else if (GlobalVars.UsesPlayerName == true && GlobalVars.UsesID == false) + { + args = "-script " + quote + "dofile('" + luafile + "'); _G.CSConnect(0,'" + ip + "'," + port + ",'" + GlobalVars.PlayerName + "','" + GlobalVars.loadtext + ",'" + GlobalVars.SelectedClientMD5 + "','" + md5dir + "','" + GlobalVars.SelectedClientScriptMD5 + "');" + quote; + } + else if (GlobalVars.UsesPlayerName == false && GlobalVars.UsesID == false) + { + args = "-script " + quote + "dofile('" + luafile + "'); _G.CSConnect(0,'" + ip + "'," + port + ",'Player','" + GlobalVars.loadtext + ",'" + GlobalVars.SelectedClientMD5 + "','" + md5dir + "','" + GlobalVars.SelectedClientScriptMD5 + "');" + quote; + } } - else if (GlobalVars.UsesPlayerName == false && GlobalVars.UsesID == true) + else { - args = "-script " + quote + "dofile('" + luafile + "'); _G.CSConnect(" + GlobalVars.UserID + ",'" + ip + "'," + port + ",'Player','" + GlobalVars.loadtext + ",'" + GlobalVars.SelectedClientMD5 + "','" + md5dir + "','" + GlobalVars.SelectedClientScriptMD5 + "');" + quote; - } - else if (GlobalVars.UsesPlayerName == true && GlobalVars.UsesID == false) - { - args = "-script " + quote + "dofile('" + luafile + "'); _G.CSConnect(0,'" + ip + "'," + port + ",'" + GlobalVars.PlayerName + "','" + GlobalVars.loadtext + ",'" + GlobalVars.SelectedClientMD5 + "','" + md5dir + "','" + GlobalVars.SelectedClientScriptMD5 + "');" + quote; - } - else if (GlobalVars.UsesPlayerName == false && GlobalVars.UsesID == false) - { - args = "-script " + quote + "dofile('" + luafile + "'); _G.CSConnect(0,'" + ip + "'," + port + ",'Player','" + GlobalVars.loadtext + ",'" + GlobalVars.SelectedClientMD5 + "','" + md5dir + "','" + GlobalVars.SelectedClientScriptMD5 + "');" + quote; + ScriptGenerator.GenerateScriptForClient(ScriptGenerator.ScriptType.Client); + args = "-script " + quote + luafile + quote; } try { - if (SecurityFuncs.checkClientMD5(client) == true) + if (!GlobalVars.AlreadyHasSecurity) { - if (SecurityFuncs.checkScriptMD5(client) == true) + if (SecurityFuncs.checkClientMD5(client) == true) { - Process.Start(rbxexe, args); - this.Close(); + if (SecurityFuncs.checkScriptMD5(client) == true) + { + Process.Start(rbxexe, args); + this.Close(); + } + else + { + label1.Text = "The client has been detected as modified."; + } + } + else + { + label1.Text = "The client has been detected as modified."; } } else { - label1.Text = "The client has been detected as modified."; + Process.Start(rbxexe, args); + this.Close(); } } catch (Exception) diff --git a/NovetusLauncher/NovetusLauncher/MainForm.cs b/NovetusLauncher/NovetusLauncher/MainForm.cs index 188a845..c16d831 100644 --- a/NovetusLauncher/NovetusLauncher/MainForm.cs +++ b/NovetusLauncher/NovetusLauncher/MainForm.cs @@ -151,7 +151,7 @@ namespace NovetusLauncher void Button2Click(object sender, EventArgs e) { WriteConfigValues(); - StartServer(); + StartServer(false); if (GlobalVars.CloseOnLaunch == true) { @@ -509,7 +509,7 @@ namespace NovetusLauncher void Button18Click(object sender, EventArgs e) { WriteConfigValues(); - StartServerNo3D(); + StartServer(true); if (GlobalVars.CloseOnLaunch == true) { @@ -604,7 +604,16 @@ namespace NovetusLauncher void StartClient() { - string luafile = "rbxasset://scripts\\\\" + GlobalVars.ScriptName + ".lua"; + string luafile = ""; + if (!GlobalVars.FixScriptMapMode) + { + luafile = "rbxasset://scripts\\\\" + GlobalVars.ScriptName + ".lua"; + } + else + { + luafile = GlobalVars.ClientDir + @"\\" + GlobalVars.SelectedClient + @"\\content\\scripts\\" + GlobalVars.ScriptGenName + ".lua"; + } + string rbxexe = ""; if (GlobalVars.LegacyMode == true) { @@ -617,44 +626,71 @@ namespace NovetusLauncher string quote = "\""; string args = ""; string md5dir = SecurityFuncs.CalculateMD5(Assembly.GetExecutingAssembly().Location); - if (GlobalVars.UsesPlayerName == true && GlobalVars.UsesID == true) + if (!GlobalVars.FixScriptMapMode) { - args = "-script " + quote + "dofile('" + luafile + "'); _G.CSConnect(" + GlobalVars.UserID + ",'" + GlobalVars.IP + "'," + GlobalVars.RobloxPort + ",'" + GlobalVars.PlayerName + "','" + GlobalVars.loadtext + ",'" + GlobalVars.SelectedClientMD5 + "','" + md5dir + "','" + GlobalVars.SelectedClientScriptMD5 + "');" + quote; + if (GlobalVars.UsesPlayerName == true && GlobalVars.UsesID == true) + { + args = "-script " + quote + "dofile('" + luafile + "'); _G.CSConnect(" + GlobalVars.UserID + ",'" + GlobalVars.IP + "'," + GlobalVars.RobloxPort + ",'" + GlobalVars.PlayerName + "','" + GlobalVars.loadtext + ",'" + GlobalVars.SelectedClientMD5 + "','" + md5dir + "','" + GlobalVars.SelectedClientScriptMD5 + "');" + quote; + } + else if (GlobalVars.UsesPlayerName == false && GlobalVars.UsesID == true) + { + args = "-script " + quote + "dofile('" + luafile + "'); _G.CSConnect(" + GlobalVars.UserID + ",'" + GlobalVars.IP + "'," + GlobalVars.RobloxPort + ",'Player','" + GlobalVars.loadtext + ",'" + GlobalVars.SelectedClientMD5 + "','" + md5dir + "','" + GlobalVars.SelectedClientScriptMD5 + "');" + quote; + } + else if (GlobalVars.UsesPlayerName == true && GlobalVars.UsesID == false) + { + args = "-script " + quote + "dofile('" + luafile + "'); _G.CSConnect(0,'" + GlobalVars.IP + "'," + GlobalVars.RobloxPort + ",'" + GlobalVars.PlayerName + "','" + GlobalVars.loadtext + ",'" + GlobalVars.SelectedClientMD5 + "','" + md5dir + "','" + GlobalVars.SelectedClientScriptMD5 + "');" + quote; + } + else if (GlobalVars.UsesPlayerName == false && GlobalVars.UsesID == false) + { + args = "-script " + quote + "dofile('" + luafile + "'); _G.CSConnect(0,'" + GlobalVars.IP + "'," + GlobalVars.RobloxPort + ",'Player','" + GlobalVars.loadtext + ",'" + GlobalVars.SelectedClientMD5 + "','" + md5dir + "','" + GlobalVars.SelectedClientScriptMD5 + "');" + quote; + } } - else if (GlobalVars.UsesPlayerName == false && GlobalVars.UsesID == true) + else { - args = "-script " + quote + "dofile('" + luafile + "'); _G.CSConnect(" + GlobalVars.UserID + ",'" + GlobalVars.IP + "'," + GlobalVars.RobloxPort + ",'Player','" + GlobalVars.loadtext + ",'" + GlobalVars.SelectedClientMD5 + "','" + md5dir + "','" + GlobalVars.SelectedClientScriptMD5 + "');" + quote; - } - else if (GlobalVars.UsesPlayerName == true && GlobalVars.UsesID == false) - { - args = "-script " + quote + "dofile('" + luafile + "'); _G.CSConnect(0,'" + GlobalVars.IP + "'," + GlobalVars.RobloxPort + ",'" + GlobalVars.PlayerName + "','" + GlobalVars.loadtext + ",'" + GlobalVars.SelectedClientMD5 + "','" + md5dir + "','" + GlobalVars.SelectedClientScriptMD5 + "');" + quote; - } - else if (GlobalVars.UsesPlayerName == false && GlobalVars.UsesID == false) - { - args = "-script " + quote + "dofile('" + luafile + "'); _G.CSConnect(0,'" + GlobalVars.IP + "'," + GlobalVars.RobloxPort + ",'Player','" + GlobalVars.loadtext + ",'" + GlobalVars.SelectedClientMD5 + "','" + md5dir + "','" + GlobalVars.SelectedClientScriptMD5 + "');" + quote; + ScriptGenerator.GenerateScriptForClient(ScriptGenerator.ScriptType.Client); + args = "-script " + quote + luafile + quote; } try { ConsolePrint("Client Loaded.", 4); - if (SecurityFuncs.checkClientMD5(GlobalVars.SelectedClient) == true) + if (!GlobalVars.AlreadyHasSecurity) { - if (SecurityFuncs.checkScriptMD5(GlobalVars.SelectedClient) == true) + if (SecurityFuncs.checkClientMD5(GlobalVars.SelectedClient) == true) { - Process client = new Process(); - client.StartInfo.FileName = rbxexe; - client.StartInfo.Arguments = args; - client.EnableRaisingEvents = true; - ReadClientValues(GlobalVars.SelectedClient); - client.Exited += new EventHandler(ClientExited); - client.Start(); - GlobalVars.presence.largeImageKey = GlobalVars.imagekey_large; - GlobalVars.presence.details = ""; - GlobalVars.presence.state = "In " + GlobalVars.SelectedClient + " Game"; - GlobalVars.presence.startTimestamp = SecurityFuncs.UnixTimeNow(); - GlobalVars.presence.largeImageText = GlobalVars.PlayerName + " | In " + GlobalVars.SelectedClient + " Game"; - DiscordRpc.UpdatePresence(ref GlobalVars.presence); + if (SecurityFuncs.checkScriptMD5(GlobalVars.SelectedClient) == true) + { + Process client = new Process(); + client.StartInfo.FileName = rbxexe; + client.StartInfo.Arguments = args; + client.EnableRaisingEvents = true; + ReadClientValues(GlobalVars.SelectedClient); + client.Exited += new EventHandler(ClientExited); + client.Start(); + GlobalVars.presence.largeImageKey = GlobalVars.imagekey_large; + GlobalVars.presence.details = ""; + GlobalVars.presence.state = "In " + GlobalVars.SelectedClient + " Game"; + GlobalVars.presence.startTimestamp = SecurityFuncs.UnixTimeNow(); + GlobalVars.presence.largeImageText = GlobalVars.PlayerName + " | In " + GlobalVars.SelectedClient + " Game"; + DiscordRpc.UpdatePresence(ref GlobalVars.presence); + } } } + else + { + Process client = new Process(); + client.StartInfo.FileName = rbxexe; + client.StartInfo.Arguments = args; + client.EnableRaisingEvents = true; + ReadClientValues(GlobalVars.SelectedClient); + client.Exited += new EventHandler(ClientExited); + client.Start(); + GlobalVars.presence.largeImageKey = GlobalVars.imagekey_large; + GlobalVars.presence.details = ""; + GlobalVars.presence.state = "In " + GlobalVars.SelectedClient + " Game"; + GlobalVars.presence.startTimestamp = SecurityFuncs.UnixTimeNow(); + GlobalVars.presence.largeImageText = GlobalVars.PlayerName + " | In " + GlobalVars.SelectedClient + " Game"; + DiscordRpc.UpdatePresence(ref GlobalVars.presence); + } } catch (Exception ex) { @@ -675,26 +711,42 @@ namespace NovetusLauncher void StartSolo() { - string luafile = "rbxasset://scripts\\\\" + GlobalVars.ScriptName + ".lua"; + string luafile = ""; + if (!GlobalVars.FixScriptMapMode) + { + luafile = "rbxasset://scripts\\\\" + GlobalVars.ScriptName + ".lua"; + } + else + { + luafile = GlobalVars.ClientDir + @"\\" + GlobalVars.SelectedClient + @"\\content\\scripts\\" + GlobalVars.ScriptGenName + ".lua"; + } string mapfile = GlobalVars.MapsDir + @"\\" + GlobalVars.Map; string rbxexe = GlobalVars.ClientDir + @"\\" + GlobalVars.SelectedClient + @"\\RobloxApp.exe"; string quote = "\""; string args = ""; - if (GlobalVars.UsesPlayerName == true && GlobalVars.UsesID == true) + if (!GlobalVars.FixScriptMapMode) { - args = quote + mapfile + "\" -script \"dofile('" + luafile + "'); _G.CSSolo(" + GlobalVars.UserID + ",'" + GlobalVars.PlayerName + "','" + GlobalVars.loadtext + ");" + quote; + if (GlobalVars.UsesPlayerName == true && GlobalVars.UsesID == true) + { + args = quote + mapfile + "\" -script \"dofile('" + luafile + "'); _G.CSSolo(" + GlobalVars.UserID + ",'" + GlobalVars.PlayerName + "','" + GlobalVars.loadtext + ");" + quote; + } + else if (GlobalVars.UsesPlayerName == false && GlobalVars.UsesID == true) + { + args = quote + mapfile + "\" -script \"dofile('" + luafile + "'); _G.CSSolo(" + GlobalVars.UserID + ",'Player','" + GlobalVars.loadtext + ");" + quote; + } + else if (GlobalVars.UsesPlayerName == true && GlobalVars.UsesID == false) + { + args = quote + mapfile + "\" -script \"dofile('" + luafile + "'); _G.CSSolo(0,'" + GlobalVars.PlayerName + "','" + GlobalVars.loadtext + ");" + quote; + } + else if (GlobalVars.UsesPlayerName == false && GlobalVars.UsesID == false ) + { + args = quote + mapfile + "\" -script \"dofile('" + luafile + "'); _G.CSSolo(0,'Player','" + GlobalVars.loadtext + ");" + quote; + } } - else if (GlobalVars.UsesPlayerName == false && GlobalVars.UsesID == true) + else { - args = quote + mapfile + "\" -script \"dofile('" + luafile + "'); _G.CSSolo(" + GlobalVars.UserID + ",'Player','" + GlobalVars.loadtext + ");" + quote; - } - else if (GlobalVars.UsesPlayerName == true && GlobalVars.UsesID == false) - { - args = quote + mapfile + "\" -script \"dofile('" + luafile + "'); _G.CSSolo(0,'" + GlobalVars.PlayerName + "','" + GlobalVars.loadtext + ");" + quote; - } - else if (GlobalVars.UsesPlayerName == false && GlobalVars.UsesID == false ) - { - args = quote + mapfile + "\" -script \"dofile('" + luafile + "'); _G.CSSolo(0,'Player','" + GlobalVars.loadtext + ");" + quote; + ScriptGenerator.GenerateScriptForClient(ScriptGenerator.ScriptType.Solo); + args = "-script " + quote + luafile + quote + " " + quote + mapfile + quote; } try { @@ -720,17 +772,34 @@ namespace NovetusLauncher } } - void StartServer() + void StartServer(bool no3d) { - string luafile = "rbxasset://scripts\\\\" + GlobalVars.ScriptName + ".lua"; + string luafile = ""; + if (!GlobalVars.FixScriptMapMode) + { + luafile = "rbxasset://scripts\\\\" + GlobalVars.ScriptName + ".lua"; + } + else + { + luafile = GlobalVars.ClientDir + @"\\" + GlobalVars.SelectedClient + @"\\content\\scripts\\" + GlobalVars.ScriptGenName + ".lua"; + } string mapfile = GlobalVars.MapsDir + @"\\" + GlobalVars.Map; string rbxexe = GlobalVars.ClientDir + @"\\" + GlobalVars.SelectedClient + @"\\RobloxApp.exe"; string quote = "\""; string args = ""; string md5dir = SecurityFuncs.CalculateMD5(Assembly.GetExecutingAssembly().Location); - args = quote + mapfile + "\" -script \"dofile('" + luafile + "'); _G.CSServer(" + GlobalVars.RobloxPort + "," + GlobalVars.PlayerLimit + ",'" + GlobalVars.SelectedClientMD5 + "','" + md5dir + "','" + GlobalVars.SelectedClientScriptMD5 + "'," + GlobalVars.DisableTeapotTurret.ToString().ToLower() + "); " + quote; + if (!GlobalVars.FixScriptMapMode) + { + args = quote + mapfile + "\" -script \"dofile('" + luafile + "'); _G.CSServer(" + GlobalVars.RobloxPort + "," + GlobalVars.PlayerLimit + ",'" + GlobalVars.SelectedClientMD5 + "','" + md5dir + "','" + GlobalVars.SelectedClientScriptMD5 + "'," + GlobalVars.DisableTeapotTurret.ToString().ToLower() + "); " + quote + (no3d ? " -no3d" : ""); + } + else + { + ScriptGenerator.GenerateScriptForClient(ScriptGenerator.ScriptType.Server); + args = "-script " + quote + luafile + quote + (no3d ? " -no3d" : "") + " " + quote + mapfile + quote; + } try { + //when we add upnp, change this ConsolePrint("Server Loaded.", 4); Process.Start(rbxexe, args); } @@ -741,37 +810,30 @@ namespace NovetusLauncher } } - void StartServerNo3D() - { - string luafile = "rbxasset://scripts\\\\" + GlobalVars.ScriptName + ".lua"; - string mapfile = GlobalVars.MapsDir + @"\\" + GlobalVars.Map; - string rbxexe = GlobalVars.ClientDir + @"\\" + GlobalVars.SelectedClient + @"\\RobloxApp.exe"; - string quote = "\""; - string args = ""; - string md5dir = SecurityFuncs.CalculateMD5(Assembly.GetExecutingAssembly().Location); - args = quote + mapfile + "\" -script \"dofile('" + luafile + "'); _G.CSServer(" + GlobalVars.RobloxPort + "," + GlobalVars.PlayerLimit + ",'" + GlobalVars.SelectedClientMD5 + "','" + md5dir + "','" + GlobalVars.SelectedClientScriptMD5 + "'," + GlobalVars.DisableTeapotTurret.ToString().ToLower() + "); " + quote + " -no3d"; - try - { - ConsolePrint("Server Loaded in No3d.", 4); - Process.Start(rbxexe, args); - } - catch (Exception ex) - { - ConsolePrint("ERROR 2 - Failed to launch Novetus. (" + ex.Message + ")", 2); - DialogResult result2 = MessageBox.Show("Failed to launch Novetus. (Error: " + ex.Message + ")","Novetus - Error", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - - //sometext - void StartStudio() { - string luafile = "rbxasset://scripts\\\\" + GlobalVars.ScriptName + ".lua"; + string luafile = ""; + if (!GlobalVars.FixScriptMapMode) + { + luafile = "rbxasset://scripts\\\\" + GlobalVars.ScriptName + ".lua"; + } + else + { + luafile = GlobalVars.ClientDir + @"\\" + GlobalVars.SelectedClient + @"\\content\\scripts\\" + GlobalVars.ScriptGenName + ".lua"; + } string mapfile = GlobalVars.MapsDir + @"\\" + GlobalVars.Map; string rbxexe = GlobalVars.ClientDir + @"\\" + GlobalVars.SelectedClient + @"\\RobloxApp.exe"; string quote = "\""; string args = ""; - args = quote + mapfile + "\" -script \"dofile('" + luafile + "');" + quote; + if (!GlobalVars.FixScriptMapMode) + { + args = quote + mapfile + "\" -script \"dofile('" + luafile + "');" + quote; + } + else + { + ScriptGenerator.GenerateScriptForClient(ScriptGenerator.ScriptType.Studio); + args = "-script " + quote + luafile + quote + " " + quote + mapfile + quote; + } try { ConsolePrint("Studio Loaded.", 4); @@ -810,15 +872,15 @@ namespace NovetusLauncher { if (command.Equals("server")) { - StartServer(); + StartServer(false); } else if (command.Equals("server no3d")) { - StartServerNo3D(); + StartServer(true); } else if (command.Equals("no3d")) { - StartServerNo3D(); + StartServer(true); } else if (command.Equals("client")) { diff --git a/NovetusLauncher/NovetusLauncher/obj/Release/NovetusLauncher.csproj.FileListAbsolute.txt b/NovetusLauncher/NovetusLauncher/obj/Release/NovetusLauncher.csproj.FileListAbsolute.txt index e6ebd03..bab40f3 100644 --- a/NovetusLauncher/NovetusLauncher/obj/Release/NovetusLauncher.csproj.FileListAbsolute.txt +++ b/NovetusLauncher/NovetusLauncher/obj/Release/NovetusLauncher.csproj.FileListAbsolute.txt @@ -10,3 +10,15 @@ C:\Users\BITL\Desktop\RBXLegacy-src-749b4965ca0c1d0e87b5902a59c70a68ab6942e1\RBX C:\Users\BITL\Desktop\RBXLegacy-src-749b4965ca0c1d0e87b5902a59c70a68ab6942e1\RBXLegacy-src-749b4965ca0c1d0e87b5902a59c70a68ab6942e1\NovetusLauncher\NovetusLauncher\obj\Release\NovetusLauncher.csproj.GenerateResource.Cache C:\Users\BITL\Desktop\RBXLegacy-src-749b4965ca0c1d0e87b5902a59c70a68ab6942e1\RBXLegacy-src-749b4965ca0c1d0e87b5902a59c70a68ab6942e1\NovetusLauncher\NovetusLauncher\obj\Release\NovetusLauncher.exe C:\Users\BITL\Desktop\RBXLegacy-src-749b4965ca0c1d0e87b5902a59c70a68ab6942e1\RBXLegacy-src-749b4965ca0c1d0e87b5902a59c70a68ab6942e1\NovetusLauncher\NovetusLauncher\obj\Release\NovetusLauncher.ItemMaker.resources +C:\Users\BITL\Documents\GitHub\Novetus_src\NovetusLauncher\NovetusLauncher\bin\Release\NovetusLauncher.exe.config +C:\Users\BITL\Documents\GitHub\Novetus_src\NovetusLauncher\NovetusLauncher\bin\Release\NovetusLauncher.exe +C:\Users\BITL\Documents\GitHub\Novetus_src\NovetusLauncher\NovetusLauncher\obj\Release\NovetusLauncher.csprojResolveAssemblyReference.cache +C:\Users\BITL\Documents\GitHub\Novetus_src\NovetusLauncher\NovetusLauncher\obj\Release\NovetusLauncher.CharacterCustomization.resources +C:\Users\BITL\Documents\GitHub\Novetus_src\NovetusLauncher\NovetusLauncher\obj\Release\NovetusLauncher.ClientinfoEditor.resources +C:\Users\BITL\Documents\GitHub\Novetus_src\NovetusLauncher\NovetusLauncher\obj\Release\NovetusLauncher.ItemMaker.resources +C:\Users\BITL\Documents\GitHub\Novetus_src\NovetusLauncher\NovetusLauncher\obj\Release\NovetusLauncher.LoaderForm.resources +C:\Users\BITL\Documents\GitHub\Novetus_src\NovetusLauncher\NovetusLauncher\obj\Release\NovetusLauncher.MainForm.resources +C:\Users\BITL\Documents\GitHub\Novetus_src\NovetusLauncher\NovetusLauncher\obj\Release\NovetusLauncher.QuickConfigure.resources +C:\Users\BITL\Documents\GitHub\Novetus_src\NovetusLauncher\NovetusLauncher\obj\Release\NovetusLauncher.ServerInfo.resources +C:\Users\BITL\Documents\GitHub\Novetus_src\NovetusLauncher\NovetusLauncher\obj\Release\NovetusLauncher.csproj.GenerateResource.Cache +C:\Users\BITL\Documents\GitHub\Novetus_src\NovetusLauncher\NovetusLauncher\obj\Release\NovetusLauncher.exe diff --git a/NovetusLauncher/NovetusLauncher/obj/Release/NovetusLauncher.csproj.GenerateResource.Cache b/NovetusLauncher/NovetusLauncher/obj/Release/NovetusLauncher.csproj.GenerateResource.Cache index 7eb1d49b841b35493f2f3aae94e6553e20b85611..25b9e684d77a54722aeeafedaad0e9e74b1777bd 100644 GIT binary patch delta 64 zcmbQqHIr*Y0u!U==0v8)j7qa@e%1uLUF%?E6k%Xs5CUROSrEYsBzPVcd<$}$oW_#H Prm3;L@w?mPYb?$HIyw>* delta 64 zcmbQqHIr*Y0u!V1=0v8)j7kyOovY0pu5~aniZC!R2mvvtEQsI*65^rj)6MNCr?F(Q PF`Yg2aJR$cYb?$H3j7fg diff --git a/NovetusLauncher/NovetusLauncher/obj/Release/NovetusLauncher.exe b/NovetusLauncher/NovetusLauncher/obj/Release/NovetusLauncher.exe index aeef9044a93e06750ad7cf2ef4384ce6de55f5ac..f99263307ae1e9bd82af670854d341069ee8c266 100644 GIT binary patch delta 73083 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 P*!oiN1pYKE87lu5Gpq~R delta 69196 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%0AS{r0 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