add <validate>

This commit is contained in:
Bitl 2021-11-02 18:17:54 -07:00
parent ca96aa32a4
commit 889ba4a72e
13 changed files with 2777 additions and 103 deletions

View File

@ -1837,7 +1837,7 @@ public class GlobalFuncs
else if (GlobalVars.UserConfiguration.FirstServerLaunch)
{
#if LAUNCHER
MessageBox.Show("For your first time hosting a server, make sure your server's port forwarded (set up in your router), going through a tunnel server, or running from UPnP.\nIf your port is forwarded or you are going through a tunnel server, make sure your port is set up as UDP, not TCP.\nRoblox does NOT use TCP, only UDP.", "Novetus - Hosting Tips", MessageBoxButtons.OK, MessageBoxIcon.Error);
MessageBox.Show("For your first time hosting a server, make sure your server's port forwarded (set up in your router), going through a tunnel server, or running from UPnP.\nIf your port is forwarded or you are going through a tunnel server, make sure your port is set up as UDP, not TCP.\nRoblox does NOT use TCP, only UDP.", "Novetus - Hosting Tips", MessageBoxButtons.OK, MessageBoxIcon.Information);
#elif CMD
ConsolePrint("For your first time hosting a server, make sure your server's port forwarded (set up in your router), going through a tunnel server, or running from UPnP.\nIf your port is forwarded or you are going through a tunnel server, make sure your port is set up as UDP, not TCP.\nRoblox does NOT use TCP, only UDP.\nPress any key to continue...", 4);
Console.ReadKey();
@ -1878,8 +1878,69 @@ public class GlobalFuncs
FileFormat.ClientInfo info = GetClientInfoValues(ClientName);
string quote = "\"";
string args = "";
GlobalVars.ValidatedExtraFiles = 0;
if (info.CommandLineArgs.Equals("%args%"))
if (!info.AlreadyHasSecurity)
{
string validstart = "<validate>";
string validend = "</validate>";
foreach (string line in info.CommandLineArgs.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries))
{
if (line.Contains(validstart) && line.Contains(validend))
{
string extractedFile = ScriptFuncs.ClientScript.GetArgsFromTag(line, validstart, validend);
if (!string.IsNullOrWhiteSpace(extractedFile))
{
try
{
string[] parsedFileParams = extractedFile.Split('|');
string filePath = parsedFileParams[0];
string fileMD5 = parsedFileParams[1];
string fullFilePath = GlobalPaths.ClientDir + @"\\" + GlobalVars.UserConfiguration.SelectedClient + @"\\" + filePath;
if (!SecurityFuncs.CheckMD5(fileMD5, fullFilePath))
{
#if URI
if (label != null)
{
label.Text = "The client has been detected as modified.";
}
#elif LAUNCHER
if (box != null)
{
ConsolePrint("ERROR - Failed to launch Novetus. (The client has been detected as modified.)", 2, box);
}
#elif CMD
ConsolePrint("ERROR - Failed to launch Novetus. (The client has been detected as modified.)", 2);
#endif
#if URI || LAUNCHER
MessageBox.Show("Failed to launch Novetus. (Error: The client has been detected as modified.)", "Novetus - Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
#endif
return;
}
else
{
GlobalVars.ValidatedExtraFiles += 1;
}
}
#if URI || LAUNCHER || CMD
catch (Exception ex)
{
LogExceptions(ex);
#else
catch (Exception)
{
#endif
continue;
}
}
}
}
}
if (info.CommandLineArgs.Contains("%args%"))
{
if (!info.Fix2007)
{
@ -1997,6 +2058,8 @@ public class GlobalFuncs
GlobalVars.GameOpened = GlobalVars.OpenedGame.Client;
break;
}
GlobalVars.ValidatedExtraFiles = 0;
}
#if URI || LAUNCHER || CMD
catch (Exception ex)

View File

@ -66,13 +66,6 @@ public static class GlobalVars
public static string soloLoadout = "";
#endregion
#region Booleans
public static bool ExtendedVersionNumber = false;
public static bool LocalPlayMode = false;
public static bool AdminMode = false;
public static bool ColorsLoaded = false;
#endregion
#region Discord Variables
//discord
public static DiscordRPC.RichPresence presence;
@ -83,5 +76,13 @@ public static class GlobalVars
public static string image_instudio = "instudio_small";
public static string image_incustomization = "incustomization_small";
#endregion
#region Other
public static bool ExtendedVersionNumber = false;
public static bool LocalPlayMode = false;
public static bool AdminMode = false;
public static bool ColorsLoaded = false;
public static int ValidatedExtraFiles = 0;
#endregion
}
#endregion

View File

@ -67,13 +67,15 @@ public class ScriptFuncs
+ (info.UsesPlayerName ? GlobalVars.UserConfiguration.PlayerName : "Player") + "',"
+ GlobalVars.Loadout + ","
+ md5s + ",'"
+ GlobalVars.UserConfiguration.PlayerTripcode + "');";
+ GlobalVars.UserConfiguration.PlayerTripcode
+ ((GlobalVars.ValidatedExtraFiles > 0) ? "'," + GlobalVars.ValidatedExtraFiles.ToString() + ");" : "');");
case ScriptType.Server:
return "_G.CSServer("
+ GlobalVars.UserConfiguration.RobloxPort + ","
+ GlobalVars.UserConfiguration.PlayerLimit + ","
+ md5s + ","
+ GlobalVars.UserConfiguration.ShowServerNotifications.ToString().ToLower() + ");";
+ GlobalVars.UserConfiguration.ShowServerNotifications.ToString().ToLower()
+ ((GlobalVars.ValidatedExtraFiles > 0) ? "," + GlobalVars.ValidatedExtraFiles.ToString() : "") + ");";
case ScriptType.Solo:
case ScriptType.EasterEgg:
return "_G.CSSolo("
@ -203,11 +205,6 @@ public class ScriptFuncs
}
}
public static string GetRawArgsForType(ScriptType type, string ClientName, string luafile)
{
return "dofile('" + luafile + "'); " + Generator.GetScriptFuncForType(ClientName, type);
}
public static int ConvertIconStringToInt()
{
switch (GlobalVars.UserCustomization.Icon)
@ -256,6 +253,20 @@ public class ScriptFuncs
return GetFolderAndMapName(source, " -");
}
public static string GetRawArgsForType(ScriptType type, string ClientName, string luafile)
{
FileFormat.ClientInfo info = GlobalFuncs.GetClientInfoValues(ClientName);
if (!info.Fix2007)
{
return Generator.GetScriptFuncForType(ClientName, type);
}
else
{
return luafile;
}
}
public static string CompileScript(string code, string tag, string endtag, string mapfile, string luafile, string rbxexe, bool usesharedtags = true)
{
return CompileScript(GlobalVars.UserConfiguration.SelectedClient, code, tag, endtag, mapfile, luafile, rbxexe, usesharedtags);
@ -310,43 +321,43 @@ public class ScriptFuncs
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("%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("%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())
@ -354,7 +365,6 @@ public class ScriptFuncs
.Replace("%hat4%", GlobalVars.UserCustomization.Extra)
.Replace("%extrad%", GlobalPaths.extraGameDir + GlobalVars.UserCustomization.Extra)
.Replace("%hat4d%", GlobalPaths.hatGameDir + GlobalVars.UserCustomization.Extra)
.Replace("%args%", GetRawArgsForType(type, ClientName, luafile))
.Replace("%mapfiled%", GlobalPaths.BaseGameDir + GlobalVars.UserConfiguration.MapPathSnip.Replace(@"\\", @"\").Replace(@"/", @"\"))
.Replace("%mapfilec%", extractedCode.Contains("%mapfilec%") ? GlobalFuncs.CopyMapToRBXAsset() : "")
.Replace("%tripcode%", GlobalVars.UserConfiguration.PlayerTripcode)
@ -362,7 +372,9 @@ public class ScriptFuncs
.Replace("%addonscriptpath%", GlobalPaths.AddonScriptPath)
.Replace("%notifications%", GlobalVars.UserConfiguration.ShowServerNotifications.ToString().ToLower())
.Replace("%loadout%", code.Contains("<solo>") ? GlobalVars.soloLoadout : GlobalVars.Loadout)
.Replace("%doublequote%", "\"");
.Replace("%doublequote%", "\"")
.Replace("%validatedextrafiles%", GlobalVars.ValidatedExtraFiles.ToString())
.Replace("%argstring%", GetRawArgsForType(type, ClientName, luafile));
if (compiled.Contains("%disabled%"))
{

View File

@ -135,6 +135,9 @@ public class SecurityFuncs
public static bool CheckMD5(string MD5Hash, string path)
{
if (!File.Exists(path))
return false;
using (var md5 = MD5.Create())
{
using (var stream = File.OpenRead(path))

View File

@ -144,6 +144,10 @@ partial class ClientinfoEditor
this.comboBox1 = new System.Windows.Forms.ComboBox();
this.label10 = new System.Windows.Forms.Label();
this.checkBox5 = new System.Windows.Forms.CheckBox();
this.validatedextrafilesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.validateToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.argstringToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.addValidateTagsForRelativePathToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.menuStrip1.SuspendLayout();
this.SuspendLayout();
//
@ -326,50 +330,51 @@ partial class ClientinfoEditor
this.soloToolStripMenuItem,
this.studioToolStripMenuItem,
this.no3dToolStripMenuItem,
this.sharedToolStripMenuItem});
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
//
this.clientToolStripMenuItem.Name = "clientToolStripMenuItem";
this.clientToolStripMenuItem.Size = new System.Drawing.Size(125, 22);
this.clientToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.clientToolStripMenuItem.Text = "<client>";
this.clientToolStripMenuItem.Click += new System.EventHandler(this.clientToolStripMenuItem_Click);
//
// serverToolStripMenuItem
//
this.serverToolStripMenuItem.Name = "serverToolStripMenuItem";
this.serverToolStripMenuItem.Size = new System.Drawing.Size(125, 22);
this.serverToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.serverToolStripMenuItem.Text = "<server>";
this.serverToolStripMenuItem.Click += new System.EventHandler(this.serverToolStripMenuItem_Click);
//
// soloToolStripMenuItem
//
this.soloToolStripMenuItem.Name = "soloToolStripMenuItem";
this.soloToolStripMenuItem.Size = new System.Drawing.Size(125, 22);
this.soloToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.soloToolStripMenuItem.Text = "<solo>";
this.soloToolStripMenuItem.Click += new System.EventHandler(this.soloToolStripMenuItem_Click);
//
// studioToolStripMenuItem
//
this.studioToolStripMenuItem.Name = "studioToolStripMenuItem";
this.studioToolStripMenuItem.Size = new System.Drawing.Size(125, 22);
this.studioToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.studioToolStripMenuItem.Text = "<studio>";
this.studioToolStripMenuItem.Click += new System.EventHandler(this.studioToolStripMenuItem_Click);
//
// no3dToolStripMenuItem
//
this.no3dToolStripMenuItem.Name = "no3dToolStripMenuItem";
this.no3dToolStripMenuItem.Size = new System.Drawing.Size(125, 22);
this.no3dToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.no3dToolStripMenuItem.Text = "<no3d>";
this.no3dToolStripMenuItem.Click += new System.EventHandler(this.no3dToolStripMenuItem_Click);
//
// sharedToolStripMenuItem
//
this.sharedToolStripMenuItem.Name = "sharedToolStripMenuItem";
this.sharedToolStripMenuItem.Size = new System.Drawing.Size(125, 22);
this.sharedToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.sharedToolStripMenuItem.Text = "<shared>";
this.sharedToolStripMenuItem.Click += new System.EventHandler(this.sharedToolStripMenuItem_Click);
//
@ -383,7 +388,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
@ -399,85 +404,87 @@ partial class ClientinfoEditor
this.scripttypeToolStripMenuItem,
this.versionToolStripMenuItem,
this.doublequoteToolStripMenuItem,
this.joinportToolStripMenuItem});
this.joinportToolStripMenuItem,
this.validatedextrafilesToolStripMenuItem,
this.argstringToolStripMenuItem});
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(181, 22);
this.mapfileToolStripMenuItem.Size = new System.Drawing.Size(189, 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(181, 22);
this.mapfiledToolStripMenuItem.Size = new System.Drawing.Size(189, 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(181, 22);
this.mapfilecToolStripMenuItem.Size = new System.Drawing.Size(189, 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(181, 22);
this.luafileToolStripMenuItem.Size = new System.Drawing.Size(189, 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(181, 22);
this.ipToolStripMenuItem.Size = new System.Drawing.Size(189, 22);
this.ipToolStripMenuItem.Text = "%ip%";
this.ipToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click);
//
// portToolStripMenuItem
//
this.portToolStripMenuItem.Name = "portToolStripMenuItem";
this.portToolStripMenuItem.Size = new System.Drawing.Size(181, 22);
this.portToolStripMenuItem.Size = new System.Drawing.Size(189, 22);
this.portToolStripMenuItem.Text = "%port%";
this.portToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click);
//
// addonscriptpathToolStripMenuItem
//
this.addonscriptpathToolStripMenuItem.Name = "addonscriptpathToolStripMenuItem";
this.addonscriptpathToolStripMenuItem.Size = new System.Drawing.Size(181, 22);
this.addonscriptpathToolStripMenuItem.Size = new System.Drawing.Size(189, 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(181, 22);
this.scripttypeToolStripMenuItem.Size = new System.Drawing.Size(189, 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(181, 22);
this.versionToolStripMenuItem.Size = new System.Drawing.Size(189, 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(181, 22);
this.doublequoteToolStripMenuItem.Size = new System.Drawing.Size(189, 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(181, 22);
this.joinportToolStripMenuItem.Size = new System.Drawing.Size(189, 22);
this.joinportToolStripMenuItem.Text = "%joinport%";
this.joinportToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click);
//
@ -487,20 +494,20 @@ partial class ClientinfoEditor
this.limitToolStripMenuItem,
this.notificationsToolStripMenuItem});
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
//
this.limitToolStripMenuItem.Name = "limitToolStripMenuItem";
this.limitToolStripMenuItem.Size = new System.Drawing.Size(160, 22);
this.limitToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.limitToolStripMenuItem.Text = "%limit%";
this.limitToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click);
//
// notificationsToolStripMenuItem
//
this.notificationsToolStripMenuItem.Name = "notificationsToolStripMenuItem";
this.notificationsToolStripMenuItem.Size = new System.Drawing.Size(160, 22);
this.notificationsToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.notificationsToolStripMenuItem.Text = "%notifications%";
this.notificationsToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click);
//
@ -515,55 +522,55 @@ 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
//
this.md5launcherToolStripMenuItem.Name = "md5launcherToolStripMenuItem";
this.md5launcherToolStripMenuItem.Size = new System.Drawing.Size(164, 22);
this.md5launcherToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.md5launcherToolStripMenuItem.Text = "%md5launcher%";
this.md5launcherToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click);
//
// md5scriptToolStripMenuItem
//
this.md5scriptToolStripMenuItem.Name = "md5scriptToolStripMenuItem";
this.md5scriptToolStripMenuItem.Size = new System.Drawing.Size(164, 22);
this.md5scriptToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.md5scriptToolStripMenuItem.Text = "%md5script%";
this.md5scriptToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click);
//
// md5exeToolStripMenuItem
//
this.md5exeToolStripMenuItem.Name = "md5exeToolStripMenuItem";
this.md5exeToolStripMenuItem.Size = new System.Drawing.Size(164, 22);
this.md5exeToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.md5exeToolStripMenuItem.Text = "%md5exe%";
this.md5exeToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click);
//
// md5scriptdToolStripMenuItem
//
this.md5scriptdToolStripMenuItem.Name = "md5scriptdToolStripMenuItem";
this.md5scriptdToolStripMenuItem.Size = new System.Drawing.Size(164, 22);
this.md5scriptdToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.md5scriptdToolStripMenuItem.Text = "%md5scriptd%";
this.md5scriptdToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click);
//
// md5exedToolStripMenuItem
//
this.md5exedToolStripMenuItem.Name = "md5exedToolStripMenuItem";
this.md5exedToolStripMenuItem.Size = new System.Drawing.Size(164, 22);
this.md5exedToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.md5exedToolStripMenuItem.Text = "%md5exed%";
this.md5exedToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click);
//
// md5sToolStripMenuItem
//
this.md5sToolStripMenuItem.Name = "md5sToolStripMenuItem";
this.md5sToolStripMenuItem.Size = new System.Drawing.Size(164, 22);
this.md5sToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.md5sToolStripMenuItem.Text = "%md5s%";
this.md5sToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click);
//
// md5sdToolStripMenuItem
//
this.md5sdToolStripMenuItem.Name = "md5sdToolStripMenuItem";
this.md5sdToolStripMenuItem.Size = new System.Drawing.Size(164, 22);
this.md5sdToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.md5sdToolStripMenuItem.Text = "%md5sd%";
this.md5sdToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click);
//
@ -575,7 +582,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
@ -592,7 +599,7 @@ partial class ClientinfoEditor
this.charappToolStripMenuItem,
this.loadoutToolStripMenuItem});
this.customizationToolStripMenuItem.Name = "customizationToolStripMenuItem";
this.customizationToolStripMenuItem.Size = new System.Drawing.Size(151, 22);
this.customizationToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.customizationToolStripMenuItem.Text = "Customization";
//
// bodyColorsToolStripMenuItem
@ -892,21 +899,21 @@ partial class ClientinfoEditor
// nameToolStripMenuItem
//
this.nameToolStripMenuItem.Name = "nameToolStripMenuItem";
this.nameToolStripMenuItem.Size = new System.Drawing.Size(151, 22);
this.nameToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.nameToolStripMenuItem.Text = "%name%";
this.nameToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click);
//
// idToolStripMenuItem
//
this.idToolStripMenuItem.Name = "idToolStripMenuItem";
this.idToolStripMenuItem.Size = new System.Drawing.Size(151, 22);
this.idToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.idToolStripMenuItem.Text = "%id%";
this.idToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click);
//
// tripcodeToolStripMenuItem
//
this.tripcodeToolStripMenuItem.Name = "tripcodeToolStripMenuItem";
this.tripcodeToolStripMenuItem.Size = new System.Drawing.Size(151, 22);
this.tripcodeToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.tripcodeToolStripMenuItem.Text = "%tripcode%";
this.tripcodeToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click);
//
@ -916,34 +923,34 @@ 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
//
this.donothingToolStripMenuItem.Name = "donothingToolStripMenuItem";
this.donothingToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
this.donothingToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.donothingToolStripMenuItem.Text = "%donothing%";
this.donothingToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click);
//
// disabledToolStripMenuItem
//
this.disabledToolStripMenuItem.Name = "disabledToolStripMenuItem";
this.disabledToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
this.disabledToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.disabledToolStripMenuItem.Text = "%disabled%";
this.disabledToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click);
//
// 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);
//
@ -1070,6 +1077,36 @@ partial class ClientinfoEditor
this.checkBox5.UseVisualStyleBackColor = true;
this.checkBox5.CheckedChanged += new System.EventHandler(this.checkBox5_CheckedChanged);
//
// validatedextrafilesToolStripMenuItem
//
this.validatedextrafilesToolStripMenuItem.Name = "validatedextrafilesToolStripMenuItem";
this.validatedextrafilesToolStripMenuItem.Size = new System.Drawing.Size(189, 22);
this.validatedextrafilesToolStripMenuItem.Text = "%validatedextrafiles%";
this.validatedextrafilesToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click);
//
// validateToolStripMenuItem
//
this.validateToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.addValidateTagsForRelativePathToolStripMenuItem});
this.validateToolStripMenuItem.Name = "validateToolStripMenuItem";
this.validateToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.validateToolStripMenuItem.Text = "<validate>";
this.validateToolStripMenuItem.Click += new System.EventHandler(this.validateToolStripMenuItem_Click);
//
// argstringToolStripMenuItem
//
this.argstringToolStripMenuItem.Name = "argstringToolStripMenuItem";
this.argstringToolStripMenuItem.Size = new System.Drawing.Size(189, 22);
this.argstringToolStripMenuItem.Text = "%argstring%";
this.argstringToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click);
//
// addValidateTagsForRelativePathToolStripMenuItem
//
this.addValidateTagsForRelativePathToolStripMenuItem.Name = "addValidateTagsForRelativePathToolStripMenuItem";
this.addValidateTagsForRelativePathToolStripMenuItem.Size = new System.Drawing.Size(255, 22);
this.addValidateTagsForRelativePathToolStripMenuItem.Text = "Add Validate Tags for Relative Path";
this.addValidateTagsForRelativePathToolStripMenuItem.Click += new System.EventHandler(this.addValidateTagsForRelativePathToolStripMenuItem_click);
//
// ClientinfoEditor
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@ -1216,4 +1253,8 @@ partial class ClientinfoEditor
private System.Windows.Forms.ToolStripMenuItem notificationsToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem joinportToolStripMenuItem;
private System.Windows.Forms.CheckBox checkBox5;
private System.Windows.Forms.ToolStripMenuItem validateToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem validatedextrafilesToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem argstringToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem addValidateTagsForRelativePathToolStripMenuItem;
}

View File

@ -3,6 +3,7 @@ using System;
using System.Windows.Forms;
using System.IO;
using System.Globalization;
using System.Collections.Generic;
#endregion
#region Client SDK
@ -12,10 +13,11 @@ public partial class ClientinfoEditor : Form
private FileFormat.ClientInfo SelectedClientInfo = new FileFormat.ClientInfo();
private string SelectedClientInfoPath = "";
private bool Locked = false;
#endregion
public string RelativePath = "";
#endregion
#region Constructor
public ClientinfoEditor()
public ClientinfoEditor()
{
InitializeComponent();
}
@ -262,7 +264,7 @@ public partial class ClientinfoEditor : Form
}
else
{
MessageBox.Show("You must save the into a seperate directory with a client in it, generate the IDs, then use this option.", "Novetus Client SDK - Error when saving to client.", MessageBoxButtons.OK, MessageBoxIcon.Error);
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 saving to client.", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
@ -378,6 +380,11 @@ public partial class ClientinfoEditor : Form
AddClientinfoText("<shared></shared>");
}
private void validateToolStripMenuItem_Click(object sender, EventArgs e)
{
AddClientinfoText("<validate>[FILE PATH IN CLIENT DIRECTORY]|[FILE MD5]</validate>");
}
private void variableToolStripMenuItem_Click(object sender, EventArgs e)
{
ToolStripMenuItem senderitem = (ToolStripMenuItem)sender;
@ -394,6 +401,37 @@ public partial class ClientinfoEditor : Form
{
SelectedClientInfo.SeperateFolders = checkBox5.Checked;
}
private void addValidateTagsForRelativePathToolStripMenuItem_click(object sender, EventArgs e)
{
ClientinfoCreatorValidatePathForm pathForm = new ClientinfoCreatorValidatePathForm(this);
pathForm.ShowDialog();
if (!string.IsNullOrWhiteSpace(SelectedClientInfoPath))
{
string fullpath = SelectedClientInfoPath + "\\" + RelativePath;
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, "");
string filePathStripCheck = (string.IsNullOrWhiteSpace(RelativePath) ? filePathStrip.Replace(@"/", "").Replace(@"\", "") : filePathStrip);
text.Add("<validate>" + filePathStripCheck + "|" + fileMD5 + "</validate>");
}
string joined = string.Join("\r\n", text);
AddClientinfoText(joined.Replace(@"\", "/"));
}
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);
}
}
#endregion
#region Functions

View File

@ -0,0 +1,87 @@

partial class ClientinfoCreatorValidatePathForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ClientinfoCreatorValidatePathForm));
this.TextEntry = new System.Windows.Forms.TextBox();
this.infoLabel = new System.Windows.Forms.Label();
this.applyButton = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// TextEntry
//
this.TextEntry.Location = new System.Drawing.Point(12, 25);
this.TextEntry.Name = "TextEntry";
this.TextEntry.Size = new System.Drawing.Size(295, 20);
this.TextEntry.TabIndex = 0;
//
// infoLabel
//
this.infoLabel.AutoSize = true;
this.infoLabel.Location = new System.Drawing.Point(75, 9);
this.infoLabel.Name = "infoLabel";
this.infoLabel.Size = new System.Drawing.Size(179, 13);
this.infoLabel.TabIndex = 1;
this.infoLabel.Text = "Enter path relative to client directory.";
//
// applyButton
//
this.applyButton.Location = new System.Drawing.Point(122, 51);
this.applyButton.Name = "applyButton";
this.applyButton.Size = new System.Drawing.Size(75, 23);
this.applyButton.TabIndex = 2;
this.applyButton.Text = "OK";
this.applyButton.UseVisualStyleBackColor = true;
this.applyButton.Click += new System.EventHandler(this.applyButton_Click);
//
// ClientinfoCreatorValidatePathForm
//
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(320, 80);
this.Controls.Add(this.applyButton);
this.Controls.Add(this.infoLabel);
this.Controls.Add(this.TextEntry);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.Name = "ClientinfoCreatorValidatePathForm";
this.Text = "Add Validate Tags for Relative Path";
this.Load += new System.EventHandler(this.ClientinfoCreatorValidatePathForm_Load);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
public System.Windows.Forms.TextBox TextEntry;
private System.Windows.Forms.Label infoLabel;
private System.Windows.Forms.Button applyButton;
}

View File

@ -0,0 +1,23 @@
using System.Windows.Forms;
public partial class ClientinfoCreatorValidatePathForm : Form
{
private ClientinfoEditor FormParent;
public ClientinfoCreatorValidatePathForm(ClientinfoEditor par)
{
InitializeComponent();
FormParent = par;
}
private void ClientinfoCreatorValidatePathForm_Load(object sender, System.EventArgs e)
{
CenterToScreen();
}
private void applyButton_Click(object sender, System.EventArgs e)
{
FormParent.RelativePath = TextEntry.Text;
Close();
}
}

File diff suppressed because it is too large Load Diff

View File

@ -111,6 +111,7 @@ public partial class NovetusSDK : Form
#else
GlobalFuncs.LaunchRBXClient("ClientScriptTester", ScriptType.Client, false, false, null);
#endif
GlobalVars.GameOpened = GlobalVars.OpenedGame.None;
break;
case SDKApps.XMLContentEditor:
XMLContentEditor xml = new XMLContentEditor();

View File

@ -221,6 +221,12 @@
<Compile Include="Forms\SDK\ClientScriptDocumentation.Designer.cs">
<DependentUpon>ClientScriptDocumentation.cs</DependentUpon>
</Compile>
<Compile Include="Forms\SDK\ClientinfoCreatorValidatePathForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\SDK\ClientinfoCreatorValidatePathForm.Designer.cs">
<DependentUpon>ClientinfoCreatorValidatePathForm.cs</DependentUpon>
</Compile>
<Compile Include="Forms\SDK\DiogenesEditor.cs">
<SubType>Form</SubType>
</Compile>
@ -316,6 +322,9 @@
<EmbeddedResource Include="Forms\SDK\ClientScriptDocumentation.resx">
<DependentUpon>ClientScriptDocumentation.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\SDK\ClientinfoCreatorValidatePathForm.resx">
<DependentUpon>ClientinfoCreatorValidatePathForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\SDK\DiogenesEditor.resx">
<DependentUpon>DiogenesEditor.cs</DependentUpon>
</EmbeddedResource>

View File

@ -58,11 +58,19 @@ Changes from Pre-Release 5:
- You can no longer change clients when a game is open.
- Novetus will not let you close the launcher unless the currently running game is closed.
- Novetus will not let you change styles unless the currently running game is closed.
- Nonetus will not let you restart the launcher after changing a setting that requires it to restart.
- Novetus will not let you restart the launcher after changing a setting that requires it to restart.
- These changes were done so master server lists can have valid servers, and to reduce accidential closings of Novetus.
- Novetus will show hosting tips when hosting servers for the first time.
- Added proper core scripts to 2011M and 2011E.
- Credits go to Nostal-ia for getting 2011M corescripts working and helping me with 2011E corescripts.
- Clientscript changes:
- Added the following tags:
<validate> - Validates a file via MD5 in the following format: [FILE PATH IN CLIENT DIRECTORY]|[FILE MD5]. Only tag compatible with %args%.
- Added the following variables:
%validatedextrafiles% - Returns the total number of files that have been validated with <validate>.
%argstring% - Gets the default script arguments for a tag.
- ClientScript will no longer load %args% as a variable. If %args% is detected in any way, the client will NOT use any tag except for <validate>. Use %argstring% if you need %args% as a variable.
- The Client SDK now allows users to create <validate> tags for a directory relative to a client's directory.
Changes from 1.2.4.1:
- The OBJ2MeshV1GUI, The Asset Localizer, and the Item SDK have been merged to form the Asset SDK!
- Works with the Roblox Asset Delivery API! Note: Script assets wil have to be downloaded manually in order to be used in scripts.

View File

@ -6,6 +6,7 @@ List of tags:
<solo> - Tag for Solo.
<studio> - Tag for Studio.
<shared> - Shared tag used for all types.
<validate> - Validates a file via MD5 in the following format: [FILE PATH IN CLIENT DIRECTORY]|[FILE MD5]. Only tag compatible with %args%.
List of variables:
------------------
@ -14,14 +15,17 @@ General:
%mapfiled% - Returns the rbxasset:// file path of the selected map.
%mapfilec% - Copies the map file to the base rbxasset:// directory then returns the rbxasset:// path to the map. Returns empty if unsuccessful. Useful for newer clients.
%luafile% - Selected client's script filename + path.
%args% - Default arguments provided by Novetus for launching clients. Use only this without any tags if you want default Novetus arguments or use with tags to get the default arguments for a tag (requires quotation marks for the latter).
%args% - Default arguments provided by Novetus for launching clients. Use only this without any tags (except for <validate>) if you want default Novetus arguments.
%argstring% - Gets the default script arguments for a tag.
%ip% - Current IP address.
%port% - Returns the port when hosting a server.
%addonscriptpath% - The path to an additional server script used by NovetusCMD.
%scripttype% - Returns the type of script we are using as a string.
%version% - Returns Novetus' version.
%doublequote% - Returns a double-quote character. Use in place of a normal double quote (").
Returns the port when joining a server. - Returns the port when joining a server.
%joinport% - Returns the port when joining a server.
%validatedfiles% - Returns the total number of files that have been validated.
%validatedextrafiles% - Returns the total number of files that have been validated with <validate>.
Server:
%limit% - Max Player limit.