From cecab706b53a8dfd44dc9dcb546ad9782db286bb Mon Sep 17 00:00:00 2001 From: Bitl Date: Sun, 20 Feb 2022 09:10:34 -0700 Subject: [PATCH] Script signing --- .../StorageAndFunctions/ScriptFuncs.cs | 65 +++++++++++-- .../Forms/SDK/ClientinfoCreator.Designer.cs | 94 ++++++++++++------- .../Forms/SDK/ClientinfoCreator.cs | 26 +++++ README-AND-CREDITS.TXT | 1 + changelog.txt | 28 +++++- documentation.txt | 2 + scripts/launcher/ContentProviders.xml | 4 +- scripts/launcher/splashes.txt | 18 +++- 8 files changed, 192 insertions(+), 46 deletions(-) diff --git a/Novetus/NovetusCore/StorageAndFunctions/ScriptFuncs.cs b/Novetus/NovetusCore/StorageAndFunctions/ScriptFuncs.cs index b2d05ae..8f195bc 100644 --- a/Novetus/NovetusCore/StorageAndFunctions/ScriptFuncs.cs +++ b/Novetus/NovetusCore/StorageAndFunctions/ScriptFuncs.cs @@ -4,6 +4,9 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; +using System.Runtime.InteropServices; +using System.Security.Cryptography; +using System.Text; using System.Text.RegularExpressions; using System.Windows.Forms; using System.Xml.Linq; @@ -12,9 +15,51 @@ using System.Xml.Linq; #region Script Functions public class ScriptFuncs { - #region Script Generator + #region Script Generator/Signer public class Generator { + public static void SignGeneratedScript(string scriptFileName, bool newSigFormat = false, bool encodeInBase64 = true) + { + string privateKeyPath = Path.GetDirectoryName(scriptFileName) + "//privatekey.txt"; + + if (File.Exists(privateKeyPath)) + { + //init vars + string format = newSigFormat ? "--rbxsig%{0}%{1}" : "%{0}%{1}"; + byte[] blob = Encoding.Default.GetBytes(File.ReadAllText(privateKeyPath)); + + if (encodeInBase64) + { + blob = Convert.FromBase64String(Encoding.Default.GetString(blob)); + } + + //create cryptography providers + var shaCSP = new SHA1CryptoServiceProvider(); + var rsaCSP = new RSACryptoServiceProvider(); + rsaCSP.ImportCspBlob(blob); + + // sign script + string script = "\r\n" + File.ReadAllText(scriptFileName); + byte[] signature = rsaCSP.SignData(Encoding.Default.GetBytes(script), shaCSP); + // override file. + GlobalFuncs.FixedFileDelete(scriptFileName); + File.WriteAllText(scriptFileName, string.Format(format, Convert.ToBase64String(signature), script)); + } + else + { + //create the signature file if it doesn't exist + var signingRSACSP = new RSACryptoServiceProvider(1024); + byte[] privateKeyBlob = signingRSACSP.ExportCspBlob(true); + signingRSACSP.Dispose(); + + // save our text file in the script's directory + File.WriteAllText(privateKeyPath, encodeInBase64 ? Convert.ToBase64String(privateKeyBlob) : Encoding.Default.GetString(privateKeyBlob)); + + // try signing again. + SignGeneratedScript(scriptFileName, encodeInBase64); + } + } + public static string GetScriptFuncForType(ScriptType type) { return GetScriptFuncForType(GlobalVars.UserConfiguration.SelectedClient, type); @@ -132,11 +177,19 @@ public class ScriptFuncs } } - File.WriteAllLines( - (GlobalVars.SelectedClientInfo.SeperateFolders ? - GlobalPaths.ClientDir + @"\\" + ClientName + @"\\" + GlobalFuncs.GetClientSeperateFolderName(type) + @"\\content\\scripts\\" + GlobalPaths.ScriptGenName + ".lua": - GlobalPaths.ClientDir + @"\\" + ClientName + @"\\content\\scripts\\" + GlobalPaths.ScriptGenName + ".lua"), - code); + string outputPath = (GlobalVars.SelectedClientInfo.SeperateFolders ? + GlobalPaths.ClientDir + @"\\" + ClientName + @"\\" + GlobalFuncs.GetClientSeperateFolderName(type) + @"\\content\\scripts\\" + GlobalPaths.ScriptGenName + ".lua" : + GlobalPaths.ClientDir + @"\\" + ClientName + @"\\content\\scripts\\" + GlobalPaths.ScriptGenName + ".lua"); + + File.WriteAllLines(outputPath, code); + + bool shouldSign = GlobalVars.SelectedClientInfo.CommandLineArgs.Contains("%signgeneratedjoinscript%"); + bool shouldUseNewSigFormat = GlobalVars.SelectedClientInfo.CommandLineArgs.Contains("%usenewsignformat%"); + + if (shouldSign) + { + SignGeneratedScript(outputPath, shouldUseNewSigFormat); + } } } #endregion diff --git a/Novetus/NovetusLauncher/Forms/SDK/ClientinfoCreator.Designer.cs b/Novetus/NovetusLauncher/Forms/SDK/ClientinfoCreator.Designer.cs index 7b5393e..5fc46eb 100644 --- a/Novetus/NovetusLauncher/Forms/SDK/ClientinfoCreator.Designer.cs +++ b/Novetus/NovetusLauncher/Forms/SDK/ClientinfoCreator.Designer.cs @@ -161,6 +161,9 @@ partial class ClientinfoEditor this.checkBox8 = new System.Windows.Forms.CheckBox(); this.textBox2 = new System.Windows.Forms.TextBox(); this.label3 = new System.Windows.Forms.Label(); + this.signScriptManuallyModernClientsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.signgeneratedjoinscriptToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.usenewsignformatToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.menuStrip1.SuspendLayout(); this.SuspendLayout(); // @@ -241,9 +244,9 @@ partial class ClientinfoEditor // this.checkBox6.Location = new System.Drawing.Point(10, 88); this.checkBox6.Name = "checkBox6"; - this.checkBox6.Size = new System.Drawing.Size(262, 21); + this.checkBox6.Size = new System.Drawing.Size(279, 21); this.checkBox6.TabIndex = 20; - this.checkBox6.Text = "Fix scripts and map loading for 2007-Early 2008"; + this.checkBox6.Text = "Generate scripts and fix map loading for 2007/2012+"; this.checkBox6.UseVisualStyleBackColor = true; this.checkBox6.CheckedChanged += new System.EventHandler(this.CheckBox6CheckedChanged); // @@ -278,7 +281,8 @@ partial class ClientinfoEditor this.newToolStripMenuItem, this.loadToolStripMenuItem, this.saveToolStripMenuItem, - this.saveAsTextFileToolStripMenuItem}); + this.saveAsTextFileToolStripMenuItem, + this.signScriptManuallyModernClientsToolStripMenuItem}); this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20); this.fileToolStripMenuItem.Text = "File"; @@ -286,21 +290,21 @@ partial class ClientinfoEditor // newToolStripMenuItem // this.newToolStripMenuItem.Name = "newToolStripMenuItem"; - this.newToolStripMenuItem.Size = new System.Drawing.Size(114, 22); + this.newToolStripMenuItem.Size = new System.Drawing.Size(294, 22); this.newToolStripMenuItem.Text = "New"; this.newToolStripMenuItem.Click += new System.EventHandler(this.NewToolStripMenuItemClick); // // loadToolStripMenuItem // this.loadToolStripMenuItem.Name = "loadToolStripMenuItem"; - this.loadToolStripMenuItem.Size = new System.Drawing.Size(114, 22); + this.loadToolStripMenuItem.Size = new System.Drawing.Size(294, 22); this.loadToolStripMenuItem.Text = "Load"; this.loadToolStripMenuItem.Click += new System.EventHandler(this.LoadToolStripMenuItemClick); // // saveToolStripMenuItem // this.saveToolStripMenuItem.Name = "saveToolStripMenuItem"; - this.saveToolStripMenuItem.Size = new System.Drawing.Size(114, 22); + this.saveToolStripMenuItem.Size = new System.Drawing.Size(294, 22); this.saveToolStripMenuItem.Text = "Save"; this.saveToolStripMenuItem.Click += new System.EventHandler(this.SaveToClientToolStripMenuItemClick); // @@ -310,20 +314,20 @@ partial class ClientinfoEditor this.textToolStripMenuItem, this.iNIToolStripMenuItem}); this.saveAsTextFileToolStripMenuItem.Name = "saveAsTextFileToolStripMenuItem"; - this.saveAsTextFileToolStripMenuItem.Size = new System.Drawing.Size(114, 22); + this.saveAsTextFileToolStripMenuItem.Size = new System.Drawing.Size(294, 22); this.saveAsTextFileToolStripMenuItem.Text = "Save As"; // // textToolStripMenuItem // this.textToolStripMenuItem.Name = "textToolStripMenuItem"; - this.textToolStripMenuItem.Size = new System.Drawing.Size(95, 22); + this.textToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.textToolStripMenuItem.Text = "Text"; this.textToolStripMenuItem.Click += new System.EventHandler(this.saveAsTextFileToolStripMenuItem_Click); // // iNIToolStripMenuItem // this.iNIToolStripMenuItem.Name = "iNIToolStripMenuItem"; - this.iNIToolStripMenuItem.Size = new System.Drawing.Size(95, 22); + this.iNIToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.iNIToolStripMenuItem.Text = "INI"; this.iNIToolStripMenuItem.Click += new System.EventHandler(this.saveAsINIFileToolStripMenuItem_Click); // @@ -348,7 +352,7 @@ partial class ClientinfoEditor this.sharedToolStripMenuItem, this.validateToolStripMenuItem}); this.tagsToolStripMenuItem.Name = "tagsToolStripMenuItem"; - this.tagsToolStripMenuItem.Size = new System.Drawing.Size(157, 22); + this.tagsToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.tagsToolStripMenuItem.Text = "Add Tags"; // // clientToolStripMenuItem @@ -419,7 +423,7 @@ partial class ClientinfoEditor this.debuggingToolStripMenuItem, this.argsToolStripMenuItem}); this.variablesToolStripMenuItem.Name = "variablesToolStripMenuItem"; - this.variablesToolStripMenuItem.Size = new System.Drawing.Size(157, 22); + this.variablesToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.variablesToolStripMenuItem.Text = "Add Variables"; // // generalToolStripMenuItem @@ -437,99 +441,101 @@ partial class ClientinfoEditor this.joinportToolStripMenuItem, this.validatedextrafilesToolStripMenuItem, this.argstringToolStripMenuItem, - this.newguiToolStripMenuItem}); + this.newguiToolStripMenuItem, + this.signgeneratedjoinscriptToolStripMenuItem, + this.usenewsignformatToolStripMenuItem}); this.generalToolStripMenuItem.Name = "generalToolStripMenuItem"; - this.generalToolStripMenuItem.Size = new System.Drawing.Size(163, 22); + this.generalToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.generalToolStripMenuItem.Text = "General"; // // mapfileToolStripMenuItem // this.mapfileToolStripMenuItem.Name = "mapfileToolStripMenuItem"; - this.mapfileToolStripMenuItem.Size = new System.Drawing.Size(189, 22); + this.mapfileToolStripMenuItem.Size = new System.Drawing.Size(218, 22); this.mapfileToolStripMenuItem.Text = "%mapfile%"; this.mapfileToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); // // mapfiledToolStripMenuItem // this.mapfiledToolStripMenuItem.Name = "mapfiledToolStripMenuItem"; - this.mapfiledToolStripMenuItem.Size = new System.Drawing.Size(189, 22); + this.mapfiledToolStripMenuItem.Size = new System.Drawing.Size(218, 22); this.mapfiledToolStripMenuItem.Text = "%mapfiled%"; this.mapfiledToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); // // mapfilecToolStripMenuItem // this.mapfilecToolStripMenuItem.Name = "mapfilecToolStripMenuItem"; - this.mapfilecToolStripMenuItem.Size = new System.Drawing.Size(189, 22); + this.mapfilecToolStripMenuItem.Size = new System.Drawing.Size(218, 22); this.mapfilecToolStripMenuItem.Text = "%mapfilec%"; this.mapfilecToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); // // luafileToolStripMenuItem // this.luafileToolStripMenuItem.Name = "luafileToolStripMenuItem"; - this.luafileToolStripMenuItem.Size = new System.Drawing.Size(189, 22); + this.luafileToolStripMenuItem.Size = new System.Drawing.Size(218, 22); this.luafileToolStripMenuItem.Text = "%luafile%"; this.luafileToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); // // ipToolStripMenuItem // this.ipToolStripMenuItem.Name = "ipToolStripMenuItem"; - this.ipToolStripMenuItem.Size = new System.Drawing.Size(189, 22); + this.ipToolStripMenuItem.Size = new System.Drawing.Size(218, 22); this.ipToolStripMenuItem.Text = "%ip%"; this.ipToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); // // addonscriptpathToolStripMenuItem // this.addonscriptpathToolStripMenuItem.Name = "addonscriptpathToolStripMenuItem"; - this.addonscriptpathToolStripMenuItem.Size = new System.Drawing.Size(189, 22); + this.addonscriptpathToolStripMenuItem.Size = new System.Drawing.Size(218, 22); this.addonscriptpathToolStripMenuItem.Text = "%addonscriptpath%"; this.addonscriptpathToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); // // scripttypeToolStripMenuItem // this.scripttypeToolStripMenuItem.Name = "scripttypeToolStripMenuItem"; - this.scripttypeToolStripMenuItem.Size = new System.Drawing.Size(189, 22); + this.scripttypeToolStripMenuItem.Size = new System.Drawing.Size(218, 22); this.scripttypeToolStripMenuItem.Text = "%scripttype%"; this.scripttypeToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); // // versionToolStripMenuItem // this.versionToolStripMenuItem.Name = "versionToolStripMenuItem"; - this.versionToolStripMenuItem.Size = new System.Drawing.Size(189, 22); + this.versionToolStripMenuItem.Size = new System.Drawing.Size(218, 22); this.versionToolStripMenuItem.Text = "%version%"; this.versionToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); // // doublequoteToolStripMenuItem // this.doublequoteToolStripMenuItem.Name = "doublequoteToolStripMenuItem"; - this.doublequoteToolStripMenuItem.Size = new System.Drawing.Size(189, 22); + this.doublequoteToolStripMenuItem.Size = new System.Drawing.Size(218, 22); this.doublequoteToolStripMenuItem.Text = "%doublequote%"; this.doublequoteToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); // // joinportToolStripMenuItem // this.joinportToolStripMenuItem.Name = "joinportToolStripMenuItem"; - this.joinportToolStripMenuItem.Size = new System.Drawing.Size(189, 22); + this.joinportToolStripMenuItem.Size = new System.Drawing.Size(218, 22); this.joinportToolStripMenuItem.Text = "%joinport%"; this.joinportToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); // // validatedextrafilesToolStripMenuItem // this.validatedextrafilesToolStripMenuItem.Name = "validatedextrafilesToolStripMenuItem"; - this.validatedextrafilesToolStripMenuItem.Size = new System.Drawing.Size(189, 22); + this.validatedextrafilesToolStripMenuItem.Size = new System.Drawing.Size(218, 22); this.validatedextrafilesToolStripMenuItem.Text = "%validatedextrafiles%"; this.validatedextrafilesToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); // // argstringToolStripMenuItem // this.argstringToolStripMenuItem.Name = "argstringToolStripMenuItem"; - this.argstringToolStripMenuItem.Size = new System.Drawing.Size(189, 22); + this.argstringToolStripMenuItem.Size = new System.Drawing.Size(218, 22); this.argstringToolStripMenuItem.Text = "%argstring%"; this.argstringToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); // // newguiToolStripMenuItem // this.newguiToolStripMenuItem.Name = "newguiToolStripMenuItem"; - this.newguiToolStripMenuItem.Size = new System.Drawing.Size(189, 22); + this.newguiToolStripMenuItem.Size = new System.Drawing.Size(218, 22); this.newguiToolStripMenuItem.Text = "%newgui%"; this.newguiToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); // @@ -540,7 +546,7 @@ partial class ClientinfoEditor this.notificationsToolStripMenuItem, this.portToolStripMenuItem}); this.serverToolStripMenuItem1.Name = "serverToolStripMenuItem1"; - this.serverToolStripMenuItem1.Size = new System.Drawing.Size(163, 22); + this.serverToolStripMenuItem1.Size = new System.Drawing.Size(180, 22); this.serverToolStripMenuItem1.Text = "Server"; // // limitToolStripMenuItem @@ -575,7 +581,7 @@ partial class ClientinfoEditor this.md5sToolStripMenuItem, this.md5sdToolStripMenuItem}); this.securityToolStripMenuItem.Name = "securityToolStripMenuItem"; - this.securityToolStripMenuItem.Size = new System.Drawing.Size(163, 22); + this.securityToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.securityToolStripMenuItem.Text = "Security"; // // md5launcherToolStripMenuItem @@ -635,7 +641,7 @@ partial class ClientinfoEditor this.idToolStripMenuItem, this.tripcodeToolStripMenuItem}); this.playerToolStripMenuItem.Name = "playerToolStripMenuItem"; - this.playerToolStripMenuItem.Size = new System.Drawing.Size(163, 22); + this.playerToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.playerToolStripMenuItem.Text = "Player"; // // customizationToolStripMenuItem @@ -1048,7 +1054,7 @@ partial class ClientinfoEditor this.donothingToolStripMenuItem, this.disabledToolStripMenuItem}); this.debuggingToolStripMenuItem.Name = "debuggingToolStripMenuItem"; - this.debuggingToolStripMenuItem.Size = new System.Drawing.Size(163, 22); + this.debuggingToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.debuggingToolStripMenuItem.Text = "Debugging/Misc"; // // donothingToolStripMenuItem @@ -1068,14 +1074,14 @@ partial class ClientinfoEditor // argsToolStripMenuItem // this.argsToolStripMenuItem.Name = "argsToolStripMenuItem"; - this.argsToolStripMenuItem.Size = new System.Drawing.Size(163, 22); + this.argsToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.argsToolStripMenuItem.Text = "%args%"; this.argsToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); // // documentationToolStripMenuItem1 // this.documentationToolStripMenuItem1.Name = "documentationToolStripMenuItem1"; - this.documentationToolStripMenuItem1.Size = new System.Drawing.Size(157, 22); + this.documentationToolStripMenuItem1.Size = new System.Drawing.Size(180, 22); this.documentationToolStripMenuItem1.Text = "Documentation"; this.documentationToolStripMenuItem1.Click += new System.EventHandler(this.documentationToolStripMenuItem_Click); // @@ -1232,6 +1238,27 @@ partial class ClientinfoEditor this.label3.TabIndex = 37; this.label3.Text = "EXE Name:"; // + // signScriptManuallyModernClientsToolStripMenuItem + // + this.signScriptManuallyModernClientsToolStripMenuItem.Name = "signScriptManuallyModernClientsToolStripMenuItem"; + this.signScriptManuallyModernClientsToolStripMenuItem.Size = new System.Drawing.Size(294, 22); + this.signScriptManuallyModernClientsToolStripMenuItem.Text = "Sign Script Manually (For Modern Clients)"; + this.signScriptManuallyModernClientsToolStripMenuItem.Click += new System.EventHandler(this.signScriptManuallyModernClientsToolStripMenuItem_click); + // + // signgeneratedjoinscriptToolStripMenuItem + // + this.signgeneratedjoinscriptToolStripMenuItem.Name = "signgeneratedjoinscriptToolStripMenuItem"; + this.signgeneratedjoinscriptToolStripMenuItem.Size = new System.Drawing.Size(218, 22); + this.signgeneratedjoinscriptToolStripMenuItem.Text = "%signgeneratedjoinscript%"; + this.signgeneratedjoinscriptToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); + // + // usenewsignformatToolStripMenuItem + // + this.usenewsignformatToolStripMenuItem.Name = "usenewsignformatToolStripMenuItem"; + this.usenewsignformatToolStripMenuItem.Size = new System.Drawing.Size(218, 22); + this.usenewsignformatToolStripMenuItem.Text = "%usenewsignformat%"; + this.usenewsignformatToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); + // // ClientinfoEditor // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -1398,4 +1425,7 @@ partial class ClientinfoEditor private System.Windows.Forms.CheckBox checkBox8; private System.Windows.Forms.TextBox textBox2; private System.Windows.Forms.Label label3; + private System.Windows.Forms.ToolStripMenuItem signScriptManuallyModernClientsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem signgeneratedjoinscriptToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem usenewsignformatToolStripMenuItem; } diff --git a/Novetus/NovetusLauncher/Forms/SDK/ClientinfoCreator.cs b/Novetus/NovetusLauncher/Forms/SDK/ClientinfoCreator.cs index a6051f3..0d105aa 100644 --- a/Novetus/NovetusLauncher/Forms/SDK/ClientinfoCreator.cs +++ b/Novetus/NovetusLauncher/Forms/SDK/ClientinfoCreator.cs @@ -463,6 +463,32 @@ public partial class ClientinfoEditor : Form 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); } } + + void signScriptManuallyModernClientsToolStripMenuItem_click(object sender, EventArgs e) + { + using (var ofd = new OpenFileDialog()) + { + ofd.Filter = "Lua Script (*.lua)|*.lua"; + ofd.FilterIndex = 1; + ofd.Title = "Load Lua Script"; + + if (ofd.ShowDialog() == DialogResult.OK) + { + bool newFormat = false; + + DialogResult res = MessageBox.Show("Would you like to use the newer client signing format featured in newer clients (2014+)?", "Novetus Client SDK - Use New Format?", MessageBoxButtons.YesNo, MessageBoxIcon.Information); + + if (res == DialogResult.Yes) + { + newFormat = true; + } + + ScriptFuncs.Generator.SignGeneratedScript(ofd.FileName, newFormat); + + MessageBox.Show("Script signed!", "Novetus Client SDK - Script Signed", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + } #endregion #region Functions diff --git a/README-AND-CREDITS.TXT b/README-AND-CREDITS.TXT index de7d4db..e62575e 100644 --- a/README-AND-CREDITS.TXT +++ b/README-AND-CREDITS.TXT @@ -300,6 +300,7 @@ All credit for the LUA code used with "non-modern" clients goes to Scripter John All credit for the LUA code used for character customization goes to RBXBanLand. Parts of the codebase use bits and pieces of code from Stack Overflow, MSDN Forums, the Novetus GitHub Pull Requests and Codeproject. The original concept for the Diogenes editor was suggested by Carrot. The concept code was then modified to be smaller, more efficient, and more customizable. +The script signing and key generation code was created by Carrot, but was slimmed down to work properly in Novetus and modified to be more efficient. ObjToRBXMesh was made by coke. Modified to support 1.00 and 1.01. (https://github.com/Novetus/ObjToRBXMesh) Roblox Legacy Place Converter was made by BakonBot. (https://github.com/BakonBot/legacy-place-converter) ROBLOX Script Generator was made by S. Costeira. diff --git a/changelog.txt b/changelog.txt index f102461..5e5419c 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,18 +1,38 @@ 1.3 v?.2022.1 -Changes from v12.2021.2: -New Features: - +Changes from 1.3 v2.2022.1: Enhancements: +- Added the ability to sign scripts. + - There are 2 ways to sign scripts, use the new ClientScript variables for generated join scripts, or use the File -> Sign Script Manually (For Modern Clients) option. + - New ClientScript variables: + - %signgeneratedjoinscript% - Signs the generated join script if "Generate scripts and fix map loading for 2007/2012+" is enabled. + - %usenewsignformat% - for %signgeneratedjoinscript%, uses the new client signature format found on newer clients. + +---------------------------------------------------------------------------- +1.3 v2.2022.1 +Changes from v12.2021.2: +Enhancements: +- All places will now use the Novetus asset redirect. + - All assets are now fixed on places. + - Note that some places may crash Novetus. Let Bitl know on the Discord server or the Forums if such crashes occur. + +- The Asset Fixer in the asset SDK now properly shows an error when an invalid file (i.e, a modern Roblox place file) is loaded. Added items: Hats: - Snowman Teapot +- 2012 Roblox Visor +- 2012 Roblox Visor (Original) Fixes: - Fixed characters not loading up in medium to large size maps in 2011E and 2011M. +- Fixed the Wintertime R&R&R Hoodie being the TBC hoodie. +- Remade the Blue Flame Jacket's texture from scratch as the original was broken. Misc: - +- Removed epicgamers.xyz from the Content Providers as it is no longer functional. +- Rise of the Killbots: Reverted Killbot behaviors to how they were in 1.3 v11.2021.1. +- Added a background image behind the character shown in the color select screen in the Stylish style. + - The background image is replaceable by changing the image in bin/data to something else. ---------------------------------------------------------------------------- 1.3 v12.2021.2 Changes from v12.2021.1: diff --git a/documentation.txt b/documentation.txt index f37332b..307a549 100644 --- a/documentation.txt +++ b/documentation.txt @@ -26,6 +26,8 @@ General: %validatedfiles% - Returns the total number of files that have been validated. %validatedextrafiles% - Returns the total number of files that have been validated with . %newgui% - Returns if the 2011L interface is enabled on 2011M clients. Can be used as a toggle switch for other client-side CoreScript features. +%signgeneratedjoinscript% - Signs the generated join script if "Generate scripts and fix map loading for 2007/2012+" is enabled. +%usenewsignformat% - for %signgeneratedjoinscript%, uses the new client signature format found on newer clients. Server: %limit% - Max Player limit. diff --git a/scripts/launcher/ContentProviders.xml b/scripts/launcher/ContentProviders.xml index 46cf61d..6989503 100644 --- a/scripts/launcher/ContentProviders.xml +++ b/scripts/launcher/ContentProviders.xml @@ -7,11 +7,11 @@ http://novetus.mygamesonline.org/asset?id= robloxnovetus.png - + Roblox (Asset Delivery, Incompatible w/ older clients) https://assetdelivery.roblox.com/v1/asset/?id= diff --git a/scripts/launcher/splashes.txt b/scripts/launcher/splashes.txt index e4e1b42..8471ab8 100644 --- a/scripts/launcher/splashes.txt +++ b/scripts/launcher/splashes.txt @@ -171,7 +171,7 @@ Not a metaverse! [stylish]We both know that there are a thousand ways I could destroy you right now.|And 941 of them hurt. IT WAS 99 CENTS! PRETTY PRETTY NINE!|DEATH GRIPS IS ONLINE! -I AM GONNA TAKE YOUR COAT|SAY THANKS +I AM GONNA TAKE YOUR COAT.|SAY THANKS. [normal]Wear your heart on your sleeve!|It's the only way to live! Everything will fall into place, you'll see! [stylish]Wear your heart on your sleeve! It's the only way to live!|Everything will fall into place, you'll see! [normal]If the entire world is getting banned by admins...|I'm taking a physgun with me. @@ -190,4 +190,18 @@ gib t1x pl0x [stylish]Friendly reminder: Rocket jumping is physically impossible. I play Novetus more than Roblox|Minecraft too! Lego/brick game, not block game! -Why do we all have to wear these ridiculous ties?|From Half-Life \ No newline at end of file +Why do we all have to wear these ridiculous ties?|From Half-Life +It just ain't right! +HOW VERY DARE YOU|BEHAVE YOURSPELF! +Trying to feel alive. +Portable! +[normal]Gordon doesn't need to hear all this.|He's a highly trained professional. From Half-Life +[stylish]Gordon doesn't need to hear all this, he's a highly trained professional.|From Half-Life +No NFTs! +Látom. +[normal]print(error())|The biggest mystery in Lua programming. +[stylish]print(error()) The biggest mystery in Lua programming. +[normal]Tell me how it felt when you walked on water.|Did you get your wish? +[stylish]Tell me how it felt when you walked on water. Did you get your wish? +[normal]GET TO THE SHIPS! IT'S OUR ONLY CHANCE!|From the 1986 Transformers movie. +Standing here, I realize... \ No newline at end of file