diff --git a/Novetus/NovetusLauncher/Classes/SDK/Downloader.cs b/Novetus/NovetusCore/Classes/Downloader.cs similarity index 95% rename from Novetus/NovetusLauncher/Classes/SDK/Downloader.cs rename to Novetus/NovetusCore/Classes/Downloader.cs index 6018b33..32919bf 100644 --- a/Novetus/NovetusLauncher/Classes/SDK/Downloader.cs +++ b/Novetus/NovetusCore/Classes/Downloader.cs @@ -10,10 +10,10 @@ using System.Windows.Forms; class Downloader { - private readonly string fileURL; - private readonly string fileName; - private readonly string fileFilter; - private readonly string filePath; + public readonly string fileURL; + public readonly string fileName; + public readonly string fileFilter; + public readonly string filePath; private string downloadOutcome; private static string downloadOutcomeException; @@ -96,16 +96,21 @@ class Downloader { read = DownloadFile(fileURL, name); } +#if URI || LAUNCHER || CMD || BASICLAUNCHER catch (Exception ex) { GlobalFuncs.LogExceptions(ex); +#else + catch (Exception) + { +#endif downloadOutcome = "Error when downloading file: " + ex.Message; } finally { //wait a few seconds for the download to finish - Thread.Sleep(2000); - if (File.Exists(name)) + //Thread.Sleep(2000); + if (/*File.Exists(name)*/ read > 0) { downloadOutcome = "File " + Path.GetFileName(name) + " downloaded! " + GlobalFuncs.SizeSuffix(Convert.ToInt64(read), 2) + " written (" + read + " bytes)! " + additionalText; } @@ -195,7 +200,9 @@ class Downloader } catch (Exception e) { +#if URI || LAUNCHER || CMD || BASICLAUNCHER GlobalFuncs.LogExceptions(e); +#endif if (e is WebException && bytesProcessed == 0) { WebException ex = (WebException)e; diff --git a/Novetus/NovetusLauncher/Classes/SDK/ROBLOXHelpers.cs b/Novetus/NovetusCore/Classes/ROBLOXHelpers.cs similarity index 97% rename from Novetus/NovetusLauncher/Classes/SDK/ROBLOXHelpers.cs rename to Novetus/NovetusCore/Classes/ROBLOXHelpers.cs index b2dbe6e..21cc354 100644 --- a/Novetus/NovetusLauncher/Classes/SDK/ROBLOXHelpers.cs +++ b/Novetus/NovetusCore/Classes/ROBLOXHelpers.cs @@ -34,20 +34,28 @@ public enum RobloxFileType #endregion #region Asset Cache Definition -public class AssetCacheDef +public class AssetCacheDefBasic { - public AssetCacheDef(string clas, string[] id, string[] ext, - string[] dir, string[] gamedir) + public AssetCacheDefBasic(string clas, string[] id) { Class = clas; Id = id; + } + + public string Class { get; set; } + public string[] Id { get; set; } +} + +public class AssetCacheDef : AssetCacheDefBasic +{ + public AssetCacheDef(string clas, string[] id, string[] ext, + string[] dir, string[] gamedir) : base(clas, id) + { Ext = ext; Dir = dir; GameDir = gamedir; } - public string Class { get; set; } - public string[] Id { get; set; } public string[] Ext { get; set; } public string[] Dir { get; set; } public string[] GameDir { get; set; } diff --git a/Novetus/NovetusCore/Classes/RobloxXML.cs b/Novetus/NovetusCore/Classes/RobloxXML.cs index b53203e..85c1a4e 100644 --- a/Novetus/NovetusCore/Classes/RobloxXML.cs +++ b/Novetus/NovetusCore/Classes/RobloxXML.cs @@ -1,4 +1,5 @@ #region Usings +using System; using System.Linq; using System.Text.RegularExpressions; using System.Windows.Forms; @@ -134,6 +135,351 @@ public static class RobloxXML return ""; } + private static void DownloadFilesFromNode(string url, string path, string fileext, string id) + { + if (!string.IsNullOrWhiteSpace(id)) + { + Downloader download = new Downloader(url, id); + + try + { + download.InitDownload(path, fileext, "", true); + } +#if URI || LAUNCHER || CMD || BASICLAUNCHER + catch (Exception ex) + { + GlobalFuncs.LogExceptions(ex); +#else + catch (Exception) + { +#endif + MessageBox.Show("The download has experienced an error: " + ex.Message, "Novetus Asset SDK - Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + + public static void DownloadOrFixURLS(XDocument doc, bool remote, string url, AssetCacheDef assetdef, string name = "", string meshname = "") + { + DownloadOrFixURLS(doc, remote, url, assetdef, 0, 0, 0, 0, name, meshname); + } + + public static void DownloadOrFixURLS(XDocument doc, bool remote, string url, AssetCacheDef assetdef, int idIndex, int extIndex, int outputPathIndex, int inGameDirIndex, string name = "", string meshname = "") + { + DownloadOrFixURLS(doc, remote, url, assetdef.Class, assetdef.Id[idIndex], assetdef.Ext[extIndex], assetdef.Dir[outputPathIndex], assetdef.GameDir[inGameDirIndex], name, meshname); + } + + public static void DownloadOrFixURLS(XDocument doc, bool remote, string url, string itemClassValue, string itemIdValue, string fileext, string outputPath, string inGameDir, string name = "", string meshname = "") + { + if (remote) + { + FixURLInNodes(doc, itemClassValue, itemIdValue, url); + } + else + { + DownloadFromNodes(doc, itemClassValue, itemIdValue, fileext, outputPath, inGameDir, name, meshname); + } + } + + public static void DownloadFromNodes(XDocument doc, string itemClassValue, string itemIdValue, string fileext, string outputPath, string inGameDir, string name = "", string meshname = "") + { + var v = from nodes in doc.Descendants("Item") + where nodes.Attribute("class").Value == itemClassValue + select nodes; + + foreach (var item in v) + { + var v2 = from nodes in item.Descendants("Content") + where nodes.Attribute("name").Value == itemIdValue + select nodes; + + foreach (var item2 in v2) + { + var v3 = from nodes in item2.Descendants("url") + select nodes; + + foreach (var item3 in v3) + { + if (!item3.Value.Contains("rbxassetid")) + { + if (!item3.Value.Contains("rbxasset")) + { + if (string.IsNullOrWhiteSpace(meshname)) + { + string url = item3.Value; + string newurl = "assetdelivery.roblox.com/v1/asset/?id="; + string urlFixed = url.Replace("http://", "https://") + .Replace("?version=1&id=", "?id=") + .Replace("www.roblox.com/asset/?id=", newurl) + .Replace("www.roblox.com/asset?id=", newurl) + .Replace("assetgame.roblox.com/asset/?id=", newurl) + .Replace("assetgame.roblox.com/asset?id=", newurl) + .Replace("roblox.com/asset/?id=", newurl) + .Replace("roblox.com/asset?id=", newurl) + .Replace("&", "&") + .Replace("amp;", "&"); + string peram = "id="; + + if (string.IsNullOrWhiteSpace(name)) + { + if (urlFixed.Contains(peram)) + { + string IDVal = urlFixed.After(peram); + DownloadFilesFromNode(urlFixed, outputPath, fileext, IDVal); + item3.Value = (inGameDir + IDVal + fileext).Replace(" ", ""); + } + } + else + { + DownloadFilesFromNode(urlFixed, outputPath, fileext, name); + item3.Value = inGameDir + name + fileext; + } + } + else + { + item3.Value = inGameDir + meshname; + } + } + } + else + { + if (string.IsNullOrWhiteSpace(meshname)) + { + string url = item3.Value; + string rbxassetid = "rbxassetid://"; + string urlFixed = "https://assetdelivery.roblox.com/v1/asset/?id=" + url.After(rbxassetid); + string peram = "id="; + + if (string.IsNullOrWhiteSpace(name)) + { + if (urlFixed.Contains(peram)) + { + string IDVal = urlFixed.After(peram); + DownloadFilesFromNode(urlFixed, outputPath, fileext, IDVal); + item3.Value = inGameDir + IDVal + fileext; + } + } + else + { + DownloadFilesFromNode(urlFixed, outputPath, fileext, name); + item3.Value = inGameDir + name + fileext; + } + } + else + { + item3.Value = inGameDir + meshname; + } + } + } + } + } + } + + public static void FixURLInNodes(XDocument doc, string itemClassValue, string itemIdValue, string url) + { + var v = from nodes in doc.Descendants("Item") + where nodes.Attribute("class").Value == itemClassValue + select nodes; + + foreach (var item in v) + { + var v2 = from nodes in item.Descendants("Content") + where nodes.Attribute("name").Value == itemIdValue + select nodes; + + foreach (var item2 in v2) + { + var v3 = from nodes in item2.Descendants("url") + select nodes; + + foreach (var item3 in v3) + { + if (!item3.Value.Contains("rbxassetid")) + { + if (!item3.Value.Contains("rbxasset")) + { + string oldurl = item3.Value; + string urlFixed = oldurl.Replace("http://", "") + .Replace("https://", "") + .Replace("?version=1&id=", "?id=") + .Replace("www.roblox.com/asset/?id=", url) + .Replace("www.roblox.com/asset?id=", url) + .Replace("assetgame.roblox.com/asset/?id=", url) + .Replace("assetgame.roblox.com/asset?id=", url) + .Replace("roblox.com/asset/?id=", url) + .Replace("roblox.com/asset?id=", url) + .Replace("&", "&") + .Replace("amp;", "&"); + string peram = "id="; + + if (urlFixed.Contains(peram)) + { + item3.Value = urlFixed; + } + } + } + else + { + string oldurl = item3.Value; + string rbxassetid = "rbxassetid://"; + string urlFixed = url + oldurl.After(rbxassetid); + string peram = "id="; + + if (urlFixed.Contains(peram)) + { + item3.Value = urlFixed; + } + } + } + } + } + } + + public static string GetURLInNodes(XDocument doc, string itemClassValue, string itemIdValue, string url) + { + var v = from nodes in doc.Descendants("Item") + where nodes.Attribute("class").Value == itemClassValue + select nodes; + + foreach (var item in v) + { + var v2 = from nodes in item.Descendants("Content") + where nodes.Attribute("name").Value == itemIdValue + select nodes; + + foreach (var item2 in v2) + { + var v3 = from nodes in item2.Descendants("url") + select nodes; + + foreach (var item3 in v3) + { + if (!item3.Value.Contains("rbxassetid")) + { + if (!item3.Value.Contains("rbxasset")) + { + string oldurl = item3.Value; + string urlFixed = oldurl.Replace("http://", "") + .Replace("https://", "") + .Replace("?version=1&id=", "?id=") + .Replace("www.roblox.com/asset/?id=", url) + .Replace("www.roblox.com/asset?id=", url) + .Replace("assetgame.roblox.com/asset/?id=", url) + .Replace("assetgame.roblox.com/asset?id=", url) + .Replace("roblox.com/asset/?id=", url) + .Replace("roblox.com/asset?id=", url) + .Replace("&", "&") + .Replace("amp;", "&"); + string peram = "id="; + + if (urlFixed.Contains(peram)) + { + return urlFixed; + } + } + } + else + { + string oldurl = item3.Value; + string rbxassetid = "rbxassetid://"; + string urlFixed = url + oldurl.After(rbxassetid); + string peram = "id="; + + if (urlFixed.Contains(peram)) + { + return urlFixed; + } + } + } + } + } + + return ""; + } + + //TODO: actually download the script assets instead of fixing the scripts lol. fixing the scripts won't work anyways because we don't support https natively. + /* + public static void DownloadScriptFromNodes(string filepath, string itemClassValue) + { + string oldfile = File.ReadAllText(filepath); + string fixedfile = RemoveInvalidXmlChars(ReplaceHexadecimalSymbols(oldfile)); + XDocument doc = XDocument.Parse(fixedfile); + + try + { + var v = from nodes in doc.Descendants("Item") + where nodes.Attribute("class").Value == itemClassValue + select nodes; + + foreach (var item in v) + { + var v2 = from nodes in item.Descendants("Properties") + select nodes; + + foreach (var item2 in v2) + { + var v3 = from nodes in doc.Descendants("ProtectedString") + where nodes.Attribute("name").Value == "Source" + select nodes; + + foreach (var item3 in v3) + { + string newurl = "assetdelivery.roblox.com/v1/asset/?id="; + item3.Value.Replace("http://", "https://") + .Replace("?version=1&id=", "?id=") + .Replace("www.roblox.com/asset/?id=", newurl) + .Replace("www.roblox.com/asset?id=", newurl) + .Replace("assetgame.roblox.com/asset/?id=", newurl) + .Replace("assetgame.roblox.com/asset?id=", newurl) + .Replace("roblox.com/asset/?id=", newurl) + .Replace("roblox.com/asset?id=", newurl); + } + } + } + } + catch (Exception ex) + { + GlobalFuncs.LogExceptions(ex); + MessageBox.Show("The download has experienced an error: " + ex.Message, "Novetus Asset SDK - Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + finally + { + doc.Save(filepath); + } + } + + public static void DownloadFromScript(string filepath) + { + string[] file = File.ReadAllLines(filepath); + + try + { + foreach (var line in file) + { + if (line.Contains("www.roblox.com/asset/?id=") || line.Contains("assetgame.roblox.com/asset/?id=")) + { + string newurl = "assetdelivery.roblox.com/v1/asset/?id="; + line.Replace("http://", "https://") + .Replace("?version=1&id=", "?id=") + .Replace("www.roblox.com/asset/?id=", newurl) + .Replace("www.roblox.com/asset?id=", newurl) + .Replace("assetgame.roblox.com/asset/?id=", newurl) + .Replace("assetgame.roblox.com/asset?id=", newurl) + .Replace("roblox.com/asset/?id=", newurl) + .Replace("roblox.com/asset?id=", newurl); + } + } + } + catch (Exception ex) + { + GlobalFuncs.LogExceptions(ex); + MessageBox.Show("The download has experienced an error: " + ex.Message, "Novetus Asset SDK - Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + finally + { + File.WriteAllLines(filepath, file); + } + }*/ + public static string RemoveInvalidXmlChars(string content) { return new string(content.Where(ch => XmlConvert.IsXmlChar(ch)).ToArray()); diff --git a/Novetus/NovetusCore/NovetusCore.projitems b/Novetus/NovetusCore/NovetusCore.projitems index 3f36769..9fa3d72 100644 --- a/Novetus/NovetusCore/NovetusCore.projitems +++ b/Novetus/NovetusCore/NovetusCore.projitems @@ -9,6 +9,7 @@ NovetusCore + @@ -17,6 +18,7 @@ + diff --git a/Novetus/NovetusCore/StorageAndFunctions/GlobalFuncs.cs b/Novetus/NovetusCore/StorageAndFunctions/GlobalFuncs.cs index c114c55..4a44dde 100644 --- a/Novetus/NovetusCore/StorageAndFunctions/GlobalFuncs.cs +++ b/Novetus/NovetusCore/StorageAndFunctions/GlobalFuncs.cs @@ -16,6 +16,7 @@ using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; +using System.Xml; using System.Xml.Linq; #endregion @@ -1094,7 +1095,7 @@ public class GlobalFuncs ReloadLoadoutValue(); } - public static void ReloadLoadoutValue() + public static void ReloadLoadoutValue(bool localizeOnlineClothing = false) { string hat1 = (!GlobalVars.UserCustomization.Hat1.EndsWith("-Solo.rbxm")) ? GlobalVars.UserCustomization.Hat1 : "NoHat.rbxm"; string hat2 = (!GlobalVars.UserCustomization.Hat2.EndsWith("-Solo.rbxm")) ? GlobalVars.UserCustomization.Hat2 : "NoHat.rbxm"; @@ -1134,9 +1135,105 @@ public class GlobalFuncs GlobalVars.UserCustomization.Head + "','" + GlobalVars.UserCustomization.Icon + "','" + GlobalVars.UserCustomization.Extra + "'"; + + if (localizeOnlineClothing) + { + GlobalVars.TShirtTextureID = GetItemTextureID(GlobalVars.UserCustomization.TShirt, "TShirt", new AssetCacheDefBasic("ShirtGraphic", new string[] { "Graphic" })); + GlobalVars.ShirtTextureID = GetItemTextureID(GlobalVars.UserCustomization.Shirt, "Shirt", new AssetCacheDefBasic("Shirt", new string[] { "ShirtTemplate" })); + GlobalVars.PantsTextureID = GetItemTextureID(GlobalVars.UserCustomization.Pants, "Pants", new AssetCacheDefBasic("Pants", new string[] { "PantsTemplate" })); + GlobalVars.FaceTextureID = GetItemTextureID(GlobalVars.UserCustomization.Face, "Face", new AssetCacheDefBasic("Decal", new string[] { "Texture" })); + + GlobalVars.TShirtTextureLocal = GetItemTextureLocalPath(GlobalVars.TShirtTextureID); + GlobalVars.ShirtTextureLocal = GetItemTextureLocalPath(GlobalVars.ShirtTextureID); + GlobalVars.PantsTextureLocal = GetItemTextureLocalPath(GlobalVars.PantsTextureID); + GlobalVars.FaceTextureLocal = GetItemTextureLocalPath(GlobalVars.FaceTextureID); + } } - - public static void GeneratePlayerID() + + public static string GetItemTextureLocalPath(string item) + { + //don't bother, we're offline. + if (GlobalVars.ExternalIP.Equals("localhost")) + return ""; + + if (!GlobalVars.SelectedClientInfo.CommandLineArgs.Contains("%localizeonlineclothing%")) + return ""; + + string peram = "id="; + string id = item.After(peram); + if (item.Contains(peram)) + { + Downloader download = new Downloader(item, id + ".png", "", GlobalPaths.AssetCacheDirTextures); + + try + { + string path = download.GetFullDLPath(); + download.InitDownloadNoDialog(path); + return GlobalPaths.AssetCacheTexturesGameDir + download.fileName; + } +#if URI || LAUNCHER || CMD || BASICLAUNCHER + catch (Exception ex) + { + LogExceptions(ex); +#else + catch (Exception) + { +#endif + } + } + + return ""; + } + + public static string GetItemTextureID(string item, string name, AssetCacheDefBasic assetCacheDef) + { + //don't bother, we're offline. + if (GlobalVars.ExternalIP.Equals("localhost")) + return ""; + + if (!GlobalVars.SelectedClientInfo.CommandLineArgs.Contains("%localizeonlineclothing%")) + return ""; + + string peram = "id="; + if (item.Contains(peram)) + { + Downloader download = new Downloader(item, name + "Temp.rbxm", "", GlobalPaths.AssetCacheDirFonts); + + try + { + string path = download.GetFullDLPath(); + download.InitDownloadNoDialog(path); + string oldfile = File.ReadAllText(path); + string fixedfile = RobloxXML.RemoveInvalidXmlChars(RobloxXML.ReplaceHexadecimalSymbols(oldfile)).Replace(" ", "\t").Replace("#9;", "\t"); + XDocument doc = null; + XmlReaderSettings xmlReaderSettings = new XmlReaderSettings { CheckCharacters = false }; + Stream filestream = GenerateStreamFromString(fixedfile); + using (XmlReader xmlReader = XmlReader.Create(filestream, xmlReaderSettings)) + { + xmlReader.MoveToContent(); + doc = XDocument.Load(xmlReader); + } + + string id = item.After(peram); + string baseURL = item.Before(id); + + return RobloxXML.GetURLInNodes(doc, assetCacheDef.Class, assetCacheDef.Id[0], baseURL); + } +#if URI || LAUNCHER || CMD || BASICLAUNCHER + catch (Exception ex) + { + LogExceptions(ex); +#else + catch (Exception) + { +#endif + } + } + + return ""; + } + + public static void GeneratePlayerID() { CryptoRandom random = new CryptoRandom(); int randomID = 0; @@ -1833,6 +1930,7 @@ public class GlobalFuncs switch (type) { case ScriptType.Client: + ReloadLoadoutValue(true); if (!GlobalVars.LocalPlayMode && GlobalVars.GameOpened != ScriptType.Server) { goto default; @@ -1857,10 +1955,13 @@ public class GlobalFuncs } else if (GlobalVars.UserConfiguration.FirstServerLaunch) { + string hostingTips = "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.\n" + + "If your port is forwarded or you are going through a tunnel server, make sure your port is set up as UDP, not TCP.\n" + + "Roblox does NOT use TCP, only UDP. However, if your server doesn't work with just UDP, feel free to set up TCP too as that might help the issue in some cases."; #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.Information); + MessageBox.Show(hostingTips, "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); + ConsolePrint(hostingTips + "\nPress any key to continue...", 4); Console.ReadKey(); #endif GlobalVars.UserConfiguration.FirstServerLaunch = false; @@ -1871,6 +1972,7 @@ public class GlobalFuncs } break; case ScriptType.Solo: + ReloadLoadoutValue(true); if (GlobalVars.GameOpened != ScriptType.Studio) { goto default; diff --git a/Novetus/NovetusCore/StorageAndFunctions/GlobalVars.cs b/Novetus/NovetusCore/StorageAndFunctions/GlobalVars.cs index feb27c9..9ba1d27 100644 --- a/Novetus/NovetusCore/StorageAndFunctions/GlobalVars.cs +++ b/Novetus/NovetusCore/StorageAndFunctions/GlobalVars.cs @@ -67,6 +67,14 @@ public static class GlobalVars #region Customization public static string Loadout = ""; public static string soloLoadout = ""; + public static string TShirtTextureID = ""; + public static string ShirtTextureID = ""; + public static string PantsTextureID = ""; + public static string FaceTextureID = ""; + public static string TShirtTextureLocal = ""; + public static string ShirtTextureLocal = ""; + public static string PantsTextureLocal = ""; + public static string FaceTextureLocal = ""; #endregion #region Discord Variables diff --git a/Novetus/NovetusCore/StorageAndFunctions/ScriptFuncs.cs b/Novetus/NovetusCore/StorageAndFunctions/ScriptFuncs.cs index fe0d7e6..5c9adff 100644 --- a/Novetus/NovetusCore/StorageAndFunctions/ScriptFuncs.cs +++ b/Novetus/NovetusCore/StorageAndFunctions/ScriptFuncs.cs @@ -2,9 +2,11 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Reflection; using System.Text.RegularExpressions; using System.Windows.Forms; +using System.Xml.Linq; #endregion #region Script Functions @@ -56,14 +58,14 @@ public class ScriptFuncs + GlobalVars.Loadout + "," + md5s + ",'" + GlobalVars.UserConfiguration.PlayerTripcode - + ((GlobalVars.ValidatedExtraFiles > 0) ? "'," + GlobalVars.ValidatedExtraFiles.ToString() + ");" : "');"); + + ((GlobalVars.ValidatedExtraFiles > 0) ? "'," + GlobalVars.ValidatedExtraFiles.ToString() + ",);" : "',0);"); case ScriptType.Server: return "_G.CSServer(" + GlobalVars.UserConfiguration.RobloxPort + "," + GlobalVars.UserConfiguration.PlayerLimit + "," + md5s + "," + GlobalVars.UserConfiguration.ShowServerNotifications.ToString().ToLower() - + ((GlobalVars.ValidatedExtraFiles > 0) ? "," + GlobalVars.ValidatedExtraFiles.ToString() : "") + ");"; + + ((GlobalVars.ValidatedExtraFiles > 0) ? "," + GlobalVars.ValidatedExtraFiles.ToString() : ");") + ",0);"; case ScriptType.Solo: case ScriptType.EasterEgg: return "_G.CSSolo(" @@ -359,7 +361,15 @@ public class ScriptFuncs .Replace("%loadout%", code.Contains("") ? GlobalVars.soloLoadout : GlobalVars.Loadout) .Replace("%doublequote%", "\"") .Replace("%validatedextrafiles%", GlobalVars.ValidatedExtraFiles.ToString()) - .Replace("%argstring%", GetRawArgsForType(type, ClientName, luafile)); + .Replace("%argstring%", GetRawArgsForType(type, ClientName, luafile)) + .Replace("%tshirttexid%", GlobalVars.TShirtTextureID) + .Replace("%shirttexid%", GlobalVars.ShirtTextureID) + .Replace("%pantstexid%", GlobalVars.PantsTextureID) + .Replace("%facetexid%", GlobalVars.FaceTextureID) + .Replace("%tshirttexidlocal%", GlobalVars.TShirtTextureLocal) + .Replace("%shirttexidlocal%", GlobalVars.ShirtTextureLocal) + .Replace("%pantstexidlocal%", GlobalVars.PantsTextureLocal) + .Replace("%facetexlocal%", GlobalVars.FaceTextureLocal); if (compiled.Contains("%disabled%")) { diff --git a/Novetus/NovetusLauncher/Forms/LauncherForm/LauncherFormShared.cs b/Novetus/NovetusLauncher/Forms/LauncherForm/LauncherFormShared.cs index 8c2b020..da8e3ed 100644 --- a/Novetus/NovetusLauncher/Forms/LauncherForm/LauncherFormShared.cs +++ b/Novetus/NovetusLauncher/Forms/LauncherForm/LauncherFormShared.cs @@ -817,6 +817,15 @@ namespace NovetusLauncher if (LocalVars.launcherInitState) return; + if (GlobalVars.AdminMode) + { + DialogResult closeNovetus = MessageBox.Show("You are in Admin Mode.\nAre you sure you want to switch styles?", "Novetus - Admin Mode Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); + if (closeNovetus == DialogResult.No) + { + return; + } + } + if (GlobalVars.GameOpened != ScriptType.None) { MessageBox.Show("You must close the currently open client before changing styles.", "Novetus - Client is Open Error", MessageBoxButtons.OK, MessageBoxIcon.Error); @@ -1103,6 +1112,15 @@ namespace NovetusLauncher public void RestartLauncherAfterSetting(bool check, string title, string subText) { + if (GlobalVars.AdminMode) + { + DialogResult closeNovetus = MessageBox.Show("You are in Admin Mode.\nAre you sure you want to apply this setting?", "Novetus - Admin Mode Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); + if (closeNovetus == DialogResult.No) + { + return; + } + } + if (GlobalVars.GameOpened != ScriptType.None) { MessageBox.Show("You must close the currently open client before this setting can be applied.", "Novetus - Client is Open Error", MessageBoxButtons.OK, MessageBoxIcon.Error); diff --git a/Novetus/NovetusLauncher/Forms/LauncherForm/Stylish/LauncherFormStylishInterface.xaml.cs b/Novetus/NovetusLauncher/Forms/LauncherForm/Stylish/LauncherFormStylishInterface.xaml.cs index 62f76ec..2b96d75 100644 --- a/Novetus/NovetusLauncher/Forms/LauncherForm/Stylish/LauncherFormStylishInterface.xaml.cs +++ b/Novetus/NovetusLauncher/Forms/LauncherForm/Stylish/LauncherFormStylishInterface.xaml.cs @@ -457,6 +457,15 @@ namespace NovetusLauncher if (LocalVars.launcherInitState) return; + if (GlobalVars.AdminMode) + { + DialogResult closeNovetus = System.Windows.Forms.MessageBox.Show("You are in Admin Mode.\nAre you sure you want to switch styles?", "Novetus - Admin Mode Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); + if (closeNovetus == DialogResult.No) + { + return; + } + } + if (GlobalVars.GameOpened != ScriptType.None) { System.Windows.Forms.MessageBox.Show("You must close the currently open client before changing styles.", "Novetus - Client is Open Error", MessageBoxButtons.OK, MessageBoxIcon.Error); diff --git a/Novetus/NovetusLauncher/Forms/SDK/AssetSDK.cs b/Novetus/NovetusLauncher/Forms/SDK/AssetSDK.cs index 096f827..a5c3e67 100644 --- a/Novetus/NovetusLauncher/Forms/SDK/AssetSDK.cs +++ b/Novetus/NovetusLauncher/Forms/SDK/AssetSDK.cs @@ -347,283 +347,6 @@ public partial class AssetSDK : Form #endregion #region Asset Fixer - private static void DownloadFilesFromNode(string url, string path, string fileext, string id) - { - if (!string.IsNullOrWhiteSpace(id)) - { - Downloader download = new Downloader(url, id); - - try - { - download.InitDownload(path, fileext, "", true); - } - catch (Exception ex) - { - GlobalFuncs.LogExceptions(ex); - MessageBox.Show("The download has experienced an error: " + ex.Message, "Novetus Asset SDK - Error", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - } - - public static void DownloadOrFixURLS(XDocument doc, bool remote, string url, AssetCacheDef assetdef, string name = "", string meshname = "") - { - DownloadOrFixURLS(doc, remote, url, assetdef, 0, 0, 0, 0, name, meshname); - } - - public static void DownloadOrFixURLS(XDocument doc, bool remote, string url, AssetCacheDef assetdef, int idIndex, int extIndex, int outputPathIndex, int inGameDirIndex, string name = "", string meshname = "") - { - DownloadOrFixURLS(doc, remote, url, assetdef.Class, assetdef.Id[idIndex], assetdef.Ext[extIndex], assetdef.Dir[outputPathIndex], assetdef.GameDir[inGameDirIndex], name, meshname); - } - - public static void DownloadOrFixURLS(XDocument doc, bool remote, string url, string itemClassValue, string itemIdValue, string fileext, string outputPath, string inGameDir, string name = "", string meshname = "") - { - if (remote) - { - FixURLInNodes(doc, itemClassValue, itemIdValue, url); - } - else - { - DownloadFromNodes(doc, itemClassValue, itemIdValue, fileext, outputPath, inGameDir, name, meshname); - } - } - - public static void DownloadFromNodes(XDocument doc, string itemClassValue, string itemIdValue, string fileext, string outputPath, string inGameDir, string name = "", string meshname = "") - { - var v = from nodes in doc.Descendants("Item") - where nodes.Attribute("class").Value == itemClassValue - select nodes; - - foreach (var item in v) - { - var v2 = from nodes in item.Descendants("Content") - where nodes.Attribute("name").Value == itemIdValue - select nodes; - - foreach (var item2 in v2) - { - var v3 = from nodes in item2.Descendants("url") - select nodes; - - foreach (var item3 in v3) - { - if (!item3.Value.Contains("rbxassetid")) - { - if (!item3.Value.Contains("rbxasset")) - { - if (string.IsNullOrWhiteSpace(meshname)) - { - string url = item3.Value; - string newurl = "assetdelivery.roblox.com/v1/asset/?id="; - string urlFixed = url.Replace("http://", "https://") - .Replace("?version=1&id=", "?id=") - .Replace("www.roblox.com/asset/?id=", newurl) - .Replace("www.roblox.com/asset?id=", newurl) - .Replace("assetgame.roblox.com/asset/?id=", newurl) - .Replace("assetgame.roblox.com/asset?id=", newurl) - .Replace("roblox.com/asset/?id=", newurl) - .Replace("roblox.com/asset?id=", newurl) - .Replace("&", "&") - .Replace("amp;", "&"); - string peram = "id="; - - if (string.IsNullOrWhiteSpace(name)) - { - if (urlFixed.Contains(peram)) - { - string IDVal = urlFixed.After(peram); - DownloadFilesFromNode(urlFixed, outputPath, fileext, IDVal); - item3.Value = (inGameDir + IDVal + fileext).Replace(" ", ""); - } - } - else - { - DownloadFilesFromNode(urlFixed, outputPath, fileext, name); - item3.Value = inGameDir + name + fileext; - } - } - else - { - item3.Value = inGameDir + meshname; - } - } - } - else - { - if (string.IsNullOrWhiteSpace(meshname)) - { - string url = item3.Value; - string rbxassetid = "rbxassetid://"; - string urlFixed = "https://assetdelivery.roblox.com/v1/asset/?id=" + url.After(rbxassetid); - string peram = "id="; - - if (string.IsNullOrWhiteSpace(name)) - { - if (urlFixed.Contains(peram)) - { - string IDVal = urlFixed.After(peram); - DownloadFilesFromNode(urlFixed, outputPath, fileext, IDVal); - item3.Value = inGameDir + IDVal + fileext; - } - } - else - { - DownloadFilesFromNode(urlFixed, outputPath, fileext, name); - item3.Value = inGameDir + name + fileext; - } - } - else - { - item3.Value = inGameDir + meshname; - } - } - } - } - } - } - - public static void FixURLInNodes(XDocument doc, string itemClassValue, string itemIdValue, string url) - { - var v = from nodes in doc.Descendants("Item") - where nodes.Attribute("class").Value == itemClassValue - select nodes; - - foreach (var item in v) - { - var v2 = from nodes in item.Descendants("Content") - where nodes.Attribute("name").Value == itemIdValue - select nodes; - - foreach (var item2 in v2) - { - var v3 = from nodes in item2.Descendants("url") - select nodes; - - foreach (var item3 in v3) - { - if (!item3.Value.Contains("rbxassetid")) - { - if (!item3.Value.Contains("rbxasset")) - { - string oldurl = item3.Value; - string urlFixed = oldurl.Replace("http://", "") - .Replace("https://", "") - .Replace("?version=1&id=", "?id=") - .Replace("www.roblox.com/asset/?id=", url) - .Replace("www.roblox.com/asset?id=", url) - .Replace("assetgame.roblox.com/asset/?id=", url) - .Replace("assetgame.roblox.com/asset?id=", url) - .Replace("roblox.com/asset/?id=", url) - .Replace("roblox.com/asset?id=", url) - .Replace("&", "&") - .Replace("amp;", "&"); - string peram = "id="; - - if (urlFixed.Contains(peram)) - { - item3.Value = urlFixed; - } - } - } - else - { - string oldurl = item3.Value; - string rbxassetid = "rbxassetid://"; - string urlFixed = url + oldurl.After(rbxassetid); - string peram = "id="; - - if (urlFixed.Contains(peram)) - { - item3.Value = urlFixed; - } - } - } - } - } - } - - //TODO: actually download the script assets instead of fixing the scripts lol. fixing the scripts won't work anyways because we don't support https natively. - /* - public static void DownloadScriptFromNodes(string filepath, string itemClassValue) - { - string oldfile = File.ReadAllText(filepath); - string fixedfile = RemoveInvalidXmlChars(ReplaceHexadecimalSymbols(oldfile)); - XDocument doc = XDocument.Parse(fixedfile); - - try - { - var v = from nodes in doc.Descendants("Item") - where nodes.Attribute("class").Value == itemClassValue - select nodes; - - foreach (var item in v) - { - var v2 = from nodes in item.Descendants("Properties") - select nodes; - - foreach (var item2 in v2) - { - var v3 = from nodes in doc.Descendants("ProtectedString") - where nodes.Attribute("name").Value == "Source" - select nodes; - - foreach (var item3 in v3) - { - string newurl = "assetdelivery.roblox.com/v1/asset/?id="; - item3.Value.Replace("http://", "https://") - .Replace("?version=1&id=", "?id=") - .Replace("www.roblox.com/asset/?id=", newurl) - .Replace("www.roblox.com/asset?id=", newurl) - .Replace("assetgame.roblox.com/asset/?id=", newurl) - .Replace("assetgame.roblox.com/asset?id=", newurl) - .Replace("roblox.com/asset/?id=", newurl) - .Replace("roblox.com/asset?id=", newurl); - } - } - } - } - catch (Exception ex) - { - GlobalFuncs.LogExceptions(ex); - MessageBox.Show("The download has experienced an error: " + ex.Message, "Novetus Asset SDK - Error", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - finally - { - doc.Save(filepath); - } - } - - public static void DownloadFromScript(string filepath) - { - string[] file = File.ReadAllLines(filepath); - - try - { - foreach (var line in file) - { - if (line.Contains("www.roblox.com/asset/?id=") || line.Contains("assetgame.roblox.com/asset/?id=")) - { - string newurl = "assetdelivery.roblox.com/v1/asset/?id="; - line.Replace("http://", "https://") - .Replace("?version=1&id=", "?id=") - .Replace("www.roblox.com/asset/?id=", newurl) - .Replace("www.roblox.com/asset?id=", newurl) - .Replace("assetgame.roblox.com/asset/?id=", newurl) - .Replace("assetgame.roblox.com/asset?id=", newurl) - .Replace("roblox.com/asset/?id=", newurl) - .Replace("roblox.com/asset?id=", newurl); - } - } - } - catch (Exception ex) - { - GlobalFuncs.LogExceptions(ex); - MessageBox.Show("The download has experienced an error: " + ex.Message, "Novetus Asset SDK - Error", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - finally - { - File.WriteAllLines(filepath, file); - } - }*/ public static OpenFileDialog LoadROBLOXFileDialog(RobloxFileType type) { @@ -876,44 +599,44 @@ public partial class AssetSDK : Form } //meshes worker.ReportProgress(5); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Fonts); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Fonts, 1, 1, 1, 1); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Fonts); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Fonts, 1, 1, 1, 1); //skybox worker.ReportProgress(10); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Sky); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Sky, 1, 0, 0, 0); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Sky, 2, 0, 0, 0); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Sky, 3, 0, 0, 0); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Sky, 4, 0, 0, 0); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Sky, 5, 0, 0, 0); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Sky); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Sky, 1, 0, 0, 0); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Sky, 2, 0, 0, 0); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Sky, 3, 0, 0, 0); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Sky, 4, 0, 0, 0); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Sky, 5, 0, 0, 0); //decal worker.ReportProgress(15); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Decal); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Decal); //texture worker.ReportProgress(20); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Texture); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Texture); //tools and hopperbin worker.ReportProgress(25); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Tool); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Tool); worker.ReportProgress(30); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.HopperBin); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.HopperBin); //sound worker.ReportProgress(40); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Sound); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Sound); worker.ReportProgress(50); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.ImageLabel); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.ImageLabel); //clothing worker.ReportProgress(60); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Shirt); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Shirt); worker.ReportProgress(65); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.ShirtGraphic); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.ShirtGraphic); worker.ReportProgress(70); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Pants); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Pants); //scripts worker.ReportProgress(80); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Script); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Script); worker.ReportProgress(90); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.LocalScript); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.LocalScript); //localize any scripts that are not handled /* worker.ReportProgress(95); @@ -941,44 +664,44 @@ public partial class AssetSDK : Form worker.ReportProgress(0); } //meshes - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Fonts); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Fonts, 1, 1, 1, 1); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Fonts); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Fonts, 1, 1, 1, 1); //skybox worker.ReportProgress(10); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Sky); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Sky, 1, 0, 0, 0); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Sky, 2, 0, 0, 0); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Sky, 3, 0, 0, 0); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Sky, 4, 0, 0, 0); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Sky, 5, 0, 0, 0); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Sky); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Sky, 1, 0, 0, 0); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Sky, 2, 0, 0, 0); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Sky, 3, 0, 0, 0); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Sky, 4, 0, 0, 0); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Sky, 5, 0, 0, 0); //decal worker.ReportProgress(15); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Decal); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Decal); //texture worker.ReportProgress(20); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Texture); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Texture); //tools and hopperbin worker.ReportProgress(25); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Tool); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Tool); worker.ReportProgress(30); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.HopperBin); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.HopperBin); //sound worker.ReportProgress(40); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Sound); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Sound); worker.ReportProgress(50); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.ImageLabel); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.ImageLabel); //clothing worker.ReportProgress(60); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Shirt); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Shirt); worker.ReportProgress(65); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.ShirtGraphic); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.ShirtGraphic); worker.ReportProgress(70); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Pants); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Pants); //scripts worker.ReportProgress(80); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Script); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.Script); worker.ReportProgress(90); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.LocalScript); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.LocalScript); //localize any scripts that are not handled /* worker.ReportProgress(95); @@ -1006,15 +729,15 @@ public partial class AssetSDK : Form worker.ReportProgress(0); } //meshes - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.ItemHatFonts, itemname, meshname); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.ItemHatFonts, 1, 1, 1, 1, itemname); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.ItemHatFonts, itemname, meshname); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.ItemHatFonts, 1, 1, 1, 1, itemname); worker.ReportProgress(25); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.ItemHatSound); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.ItemHatSound); //scripts worker.ReportProgress(50); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.ItemHatScript); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.ItemHatScript); worker.ReportProgress(75); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.ItemHatLocalScript); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.ItemHatLocalScript); worker.ReportProgress(100); break; case RobloxFileType.Head: @@ -1036,8 +759,8 @@ public partial class AssetSDK : Form worker.ReportProgress(0); } //meshes - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.ItemHeadFonts, itemname); - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.ItemHeadFonts, 1, 1, 1, 1, itemname); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.ItemHeadFonts, itemname); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.ItemHeadFonts, 1, 1, 1, 1, itemname); worker.ReportProgress(100); break; case RobloxFileType.Face: @@ -1059,7 +782,7 @@ public partial class AssetSDK : Form worker.ReportProgress(0); } //decal - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.ItemFaceTexture, itemname); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.ItemFaceTexture, itemname); worker.ReportProgress(100); break; case RobloxFileType.TShirt: @@ -1081,7 +804,7 @@ public partial class AssetSDK : Form worker.ReportProgress(0); } //texture - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.ItemTShirtTexture, itemname); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.ItemTShirtTexture, itemname); worker.ReportProgress(100); break; case RobloxFileType.Shirt: @@ -1103,7 +826,7 @@ public partial class AssetSDK : Form worker.ReportProgress(0); } //texture - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.ItemShirtTexture, itemname); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.ItemShirtTexture, itemname); worker.ReportProgress(100); break; case RobloxFileType.Pants: @@ -1125,7 +848,7 @@ public partial class AssetSDK : Form worker.ReportProgress(0); } //texture - DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.ItemPantsTexture, itemname); + RobloxXML.DownloadOrFixURLS(doc, useURLs, remoteurl, RobloxDefs.ItemPantsTexture, itemname); worker.ReportProgress(100); break; /*case RobloxFileType.Script: diff --git a/Novetus/NovetusLauncher/Forms/SDK/ClientinfoCreator.Designer.cs b/Novetus/NovetusLauncher/Forms/SDK/ClientinfoCreator.Designer.cs index 3f571bb..4cf5a7f 100644 --- a/Novetus/NovetusLauncher/Forms/SDK/ClientinfoCreator.Designer.cs +++ b/Novetus/NovetusLauncher/Forms/SDK/ClientinfoCreator.Designer.cs @@ -81,6 +81,7 @@ partial class ClientinfoEditor this.serverToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.limitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.notificationsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.portToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.securityToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.md5launcherToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.md5scriptToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -108,18 +109,22 @@ partial class ClientinfoEditor this.facesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.faceToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.facedToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.facetexidToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.headsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.headToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.headdToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.tShirtsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.tshirtToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.tshirtdToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.tshirttexidToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.shirtsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.shirtToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.shirtdToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.shirttexidToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.pantsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.pantsToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.pantsdToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.pantstexidToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.extraToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.extraToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.extradToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -147,7 +152,11 @@ 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.portToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.facetexlocalToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.tshirttexidlocalToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.shirttexidlocalToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.pantstexidlocalToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.localizeonlineclothingToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.menuStrip1.SuspendLayout(); this.SuspendLayout(); // @@ -523,17 +532,24 @@ partial class ClientinfoEditor // limitToolStripMenuItem // this.limitToolStripMenuItem.Name = "limitToolStripMenuItem"; - this.limitToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.limitToolStripMenuItem.Size = new System.Drawing.Size(160, 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(180, 22); + this.notificationsToolStripMenuItem.Size = new System.Drawing.Size(160, 22); this.notificationsToolStripMenuItem.Text = "%notifications%"; this.notificationsToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); // + // portToolStripMenuItem + // + this.portToolStripMenuItem.Name = "portToolStripMenuItem"; + this.portToolStripMenuItem.Size = new System.Drawing.Size(160, 22); + this.portToolStripMenuItem.Text = "%port%"; + this.portToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); + // // securityToolStripMenuItem // this.securityToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -551,49 +567,49 @@ partial class ClientinfoEditor // md5launcherToolStripMenuItem // this.md5launcherToolStripMenuItem.Name = "md5launcherToolStripMenuItem"; - this.md5launcherToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.md5launcherToolStripMenuItem.Size = new System.Drawing.Size(164, 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(180, 22); + this.md5scriptToolStripMenuItem.Size = new System.Drawing.Size(164, 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(180, 22); + this.md5exeToolStripMenuItem.Size = new System.Drawing.Size(164, 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(180, 22); + this.md5scriptdToolStripMenuItem.Size = new System.Drawing.Size(164, 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(180, 22); + this.md5exedToolStripMenuItem.Size = new System.Drawing.Size(164, 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(180, 22); + this.md5sToolStripMenuItem.Size = new System.Drawing.Size(164, 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(180, 22); + this.md5sdToolStripMenuItem.Size = new System.Drawing.Size(164, 22); this.md5sdToolStripMenuItem.Text = "%md5sd%"; this.md5sdToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); // @@ -620,9 +636,10 @@ partial class ClientinfoEditor this.pantsToolStripMenuItem, this.extraToolStripMenuItem, this.charappToolStripMenuItem, - this.loadoutToolStripMenuItem}); + this.loadoutToolStripMenuItem, + this.localizeonlineclothingToolStripMenuItem}); 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 @@ -635,7 +652,7 @@ partial class ClientinfoEditor this.rarmcolorToolStripMenuItem, this.rlegcolorToolStripMenuItem}); this.bodyColorsToolStripMenuItem.Name = "bodyColorsToolStripMenuItem"; - this.bodyColorsToolStripMenuItem.Size = new System.Drawing.Size(138, 22); + this.bodyColorsToolStripMenuItem.Size = new System.Drawing.Size(210, 22); this.bodyColorsToolStripMenuItem.Text = "Body Colors"; // // headcolorToolStripMenuItem @@ -690,7 +707,7 @@ partial class ClientinfoEditor this.hat2dToolStripMenuItem, this.hat3dToolStripMenuItem}); this.hatsToolStripMenuItem.Name = "hatsToolStripMenuItem"; - this.hatsToolStripMenuItem.Size = new System.Drawing.Size(138, 22); + this.hatsToolStripMenuItem.Size = new System.Drawing.Size(210, 22); this.hatsToolStripMenuItem.Text = "Hats"; // // hat1ToolStripMenuItem @@ -739,45 +756,54 @@ partial class ClientinfoEditor // this.facesToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.faceToolStripMenuItem, - this.facedToolStripMenuItem}); + this.facedToolStripMenuItem, + this.facetexidToolStripMenuItem, + this.facetexlocalToolStripMenuItem}); this.facesToolStripMenuItem.Name = "facesToolStripMenuItem"; - this.facesToolStripMenuItem.Size = new System.Drawing.Size(138, 22); + this.facesToolStripMenuItem.Size = new System.Drawing.Size(210, 22); this.facesToolStripMenuItem.Text = "Faces"; // // faceToolStripMenuItem // this.faceToolStripMenuItem.Name = "faceToolStripMenuItem"; - this.faceToolStripMenuItem.Size = new System.Drawing.Size(123, 22); + this.faceToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.faceToolStripMenuItem.Text = "%face%"; this.faceToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); // // facedToolStripMenuItem // this.facedToolStripMenuItem.Name = "facedToolStripMenuItem"; - this.facedToolStripMenuItem.Size = new System.Drawing.Size(123, 22); + this.facedToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.facedToolStripMenuItem.Text = "%faced%"; this.facedToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); // + // facetexidToolStripMenuItem + // + this.facetexidToolStripMenuItem.Name = "facetexidToolStripMenuItem"; + this.facetexidToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.facetexidToolStripMenuItem.Text = "%facetexid%"; + this.facetexidToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); + // // headsToolStripMenuItem // this.headsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.headToolStripMenuItem, this.headdToolStripMenuItem}); this.headsToolStripMenuItem.Name = "headsToolStripMenuItem"; - this.headsToolStripMenuItem.Size = new System.Drawing.Size(138, 22); + this.headsToolStripMenuItem.Size = new System.Drawing.Size(210, 22); this.headsToolStripMenuItem.Text = "Heads"; // // headToolStripMenuItem // this.headToolStripMenuItem.Name = "headToolStripMenuItem"; - this.headToolStripMenuItem.Size = new System.Drawing.Size(127, 22); + this.headToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.headToolStripMenuItem.Text = "%head%"; this.headToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); // // headdToolStripMenuItem // this.headdToolStripMenuItem.Name = "headdToolStripMenuItem"; - this.headdToolStripMenuItem.Size = new System.Drawing.Size(127, 22); + this.headdToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.headdToolStripMenuItem.Text = "%headd%"; this.headdToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); // @@ -785,71 +811,98 @@ partial class ClientinfoEditor // this.tShirtsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.tshirtToolStripMenuItem, - this.tshirtdToolStripMenuItem}); + this.tshirtdToolStripMenuItem, + this.tshirttexidToolStripMenuItem, + this.tshirttexidlocalToolStripMenuItem}); this.tShirtsToolStripMenuItem.Name = "tShirtsToolStripMenuItem"; - this.tShirtsToolStripMenuItem.Size = new System.Drawing.Size(138, 22); + this.tShirtsToolStripMenuItem.Size = new System.Drawing.Size(210, 22); this.tShirtsToolStripMenuItem.Text = "T-Shirts"; // // tshirtToolStripMenuItem // this.tshirtToolStripMenuItem.Name = "tshirtToolStripMenuItem"; - this.tshirtToolStripMenuItem.Size = new System.Drawing.Size(128, 22); + this.tshirtToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.tshirtToolStripMenuItem.Text = "%tshirt%"; this.tshirtToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); // // tshirtdToolStripMenuItem // this.tshirtdToolStripMenuItem.Name = "tshirtdToolStripMenuItem"; - this.tshirtdToolStripMenuItem.Size = new System.Drawing.Size(128, 22); + this.tshirtdToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.tshirtdToolStripMenuItem.Text = "%tshirtd%"; this.tshirtdToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); // + // tshirttexidToolStripMenuItem + // + this.tshirttexidToolStripMenuItem.Name = "tshirttexidToolStripMenuItem"; + this.tshirttexidToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.tshirttexidToolStripMenuItem.Text = "%tshirttexid%"; + this.tshirttexidToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); + // // shirtsToolStripMenuItem // this.shirtsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.shirtToolStripMenuItem, - this.shirtdToolStripMenuItem}); + this.shirtdToolStripMenuItem, + this.shirttexidToolStripMenuItem, + this.shirttexidlocalToolStripMenuItem}); this.shirtsToolStripMenuItem.Name = "shirtsToolStripMenuItem"; - this.shirtsToolStripMenuItem.Size = new System.Drawing.Size(138, 22); + this.shirtsToolStripMenuItem.Size = new System.Drawing.Size(210, 22); this.shirtsToolStripMenuItem.Text = "Shirts"; // // shirtToolStripMenuItem // this.shirtToolStripMenuItem.Name = "shirtToolStripMenuItem"; - this.shirtToolStripMenuItem.Size = new System.Drawing.Size(124, 22); + this.shirtToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.shirtToolStripMenuItem.Text = "%shirt%"; this.shirtToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); // // shirtdToolStripMenuItem // this.shirtdToolStripMenuItem.Name = "shirtdToolStripMenuItem"; - this.shirtdToolStripMenuItem.Size = new System.Drawing.Size(124, 22); + this.shirtdToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.shirtdToolStripMenuItem.Text = "%shirtd%"; this.shirtdToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); // + // shirttexidToolStripMenuItem + // + this.shirttexidToolStripMenuItem.Name = "shirttexidToolStripMenuItem"; + this.shirttexidToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.shirttexidToolStripMenuItem.Text = "%shirttexid%"; + this.shirttexidToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); + // // pantsToolStripMenuItem // this.pantsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.pantsToolStripMenuItem1, - this.pantsdToolStripMenuItem}); + this.pantsdToolStripMenuItem, + this.pantstexidToolStripMenuItem, + this.pantstexidlocalToolStripMenuItem}); this.pantsToolStripMenuItem.Name = "pantsToolStripMenuItem"; - this.pantsToolStripMenuItem.Size = new System.Drawing.Size(138, 22); + this.pantsToolStripMenuItem.Size = new System.Drawing.Size(210, 22); this.pantsToolStripMenuItem.Text = "Pants"; // // pantsToolStripMenuItem1 // this.pantsToolStripMenuItem1.Name = "pantsToolStripMenuItem1"; - this.pantsToolStripMenuItem1.Size = new System.Drawing.Size(130, 22); + this.pantsToolStripMenuItem1.Size = new System.Drawing.Size(180, 22); this.pantsToolStripMenuItem1.Text = "%pants%"; this.pantsToolStripMenuItem1.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); // // pantsdToolStripMenuItem // this.pantsdToolStripMenuItem.Name = "pantsdToolStripMenuItem"; - this.pantsdToolStripMenuItem.Size = new System.Drawing.Size(130, 22); + this.pantsdToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.pantsdToolStripMenuItem.Text = "%pantsd%"; this.pantsdToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); // + // pantstexidToolStripMenuItem + // + this.pantstexidToolStripMenuItem.Name = "pantstexidToolStripMenuItem"; + this.pantstexidToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.pantstexidToolStripMenuItem.Text = "%pantstexid%"; + this.pantstexidToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); + // // extraToolStripMenuItem // this.extraToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -860,83 +913,83 @@ partial class ClientinfoEditor this.iconeToolStripMenuItem, this.iconToolStripMenuItem}); this.extraToolStripMenuItem.Name = "extraToolStripMenuItem"; - this.extraToolStripMenuItem.Size = new System.Drawing.Size(138, 22); + this.extraToolStripMenuItem.Size = new System.Drawing.Size(210, 22); this.extraToolStripMenuItem.Text = "Extra"; // // extraToolStripMenuItem1 // this.extraToolStripMenuItem1.Name = "extraToolStripMenuItem1"; - this.extraToolStripMenuItem1.Size = new System.Drawing.Size(127, 22); + this.extraToolStripMenuItem1.Size = new System.Drawing.Size(180, 22); this.extraToolStripMenuItem1.Text = "%extra%"; this.extraToolStripMenuItem1.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); // // extradToolStripMenuItem // this.extradToolStripMenuItem.Name = "extradToolStripMenuItem"; - this.extradToolStripMenuItem.Size = new System.Drawing.Size(127, 22); + this.extradToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.extradToolStripMenuItem.Text = "%extrad%"; this.extradToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); // // hat4ToolStripMenuItem // this.hat4ToolStripMenuItem.Name = "hat4ToolStripMenuItem"; - this.hat4ToolStripMenuItem.Size = new System.Drawing.Size(127, 22); + this.hat4ToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.hat4ToolStripMenuItem.Text = "%hat4%"; this.hat4ToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); // // hat4dToolStripMenuItem // this.hat4dToolStripMenuItem.Name = "hat4dToolStripMenuItem"; - this.hat4dToolStripMenuItem.Size = new System.Drawing.Size(127, 22); + this.hat4dToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.hat4dToolStripMenuItem.Text = "%hat4d%"; this.hat4dToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); // // iconeToolStripMenuItem // this.iconeToolStripMenuItem.Name = "iconeToolStripMenuItem"; - this.iconeToolStripMenuItem.Size = new System.Drawing.Size(127, 22); + this.iconeToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.iconeToolStripMenuItem.Text = "%icone%"; this.iconeToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); // // iconToolStripMenuItem // this.iconToolStripMenuItem.Name = "iconToolStripMenuItem"; - this.iconToolStripMenuItem.Size = new System.Drawing.Size(127, 22); + this.iconToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.iconToolStripMenuItem.Text = "%icon%"; this.iconToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); // // charappToolStripMenuItem // this.charappToolStripMenuItem.Name = "charappToolStripMenuItem"; - this.charappToolStripMenuItem.Size = new System.Drawing.Size(138, 22); + this.charappToolStripMenuItem.Size = new System.Drawing.Size(210, 22); this.charappToolStripMenuItem.Text = "%charapp%"; this.charappToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); // // loadoutToolStripMenuItem // this.loadoutToolStripMenuItem.Name = "loadoutToolStripMenuItem"; - this.loadoutToolStripMenuItem.Size = new System.Drawing.Size(138, 22); + this.loadoutToolStripMenuItem.Size = new System.Drawing.Size(210, 22); this.loadoutToolStripMenuItem.Text = "%loadout%"; this.loadoutToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); // // 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); // @@ -952,14 +1005,14 @@ partial class ClientinfoEditor // 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); // @@ -1100,12 +1153,40 @@ partial class ClientinfoEditor this.checkBox5.UseVisualStyleBackColor = true; this.checkBox5.CheckedChanged += new System.EventHandler(this.checkBox5_CheckedChanged); // - // portToolStripMenuItem + // facetexlocalToolStripMenuItem // - this.portToolStripMenuItem.Name = "portToolStripMenuItem"; - this.portToolStripMenuItem.Size = new System.Drawing.Size(180, 22); - this.portToolStripMenuItem.Text = "%port%"; - this.portToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); + this.facetexlocalToolStripMenuItem.Name = "facetexlocalToolStripMenuItem"; + this.facetexlocalToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.facetexlocalToolStripMenuItem.Text = "%facetexlocal%"; + this.facetexlocalToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); + // + // tshirttexidlocalToolStripMenuItem + // + this.tshirttexidlocalToolStripMenuItem.Name = "tshirttexidlocalToolStripMenuItem"; + this.tshirttexidlocalToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.tshirttexidlocalToolStripMenuItem.Text = "%tshirttexidlocal%"; + this.tshirttexidlocalToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); + // + // shirttexidlocalToolStripMenuItem + // + this.shirttexidlocalToolStripMenuItem.Name = "shirttexidlocalToolStripMenuItem"; + this.shirttexidlocalToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.shirttexidlocalToolStripMenuItem.Text = "%shirttexidlocal%"; + this.shirttexidlocalToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); + // + // pantstexidlocalToolStripMenuItem + // + this.pantstexidlocalToolStripMenuItem.Name = "pantstexidlocalToolStripMenuItem"; + this.pantstexidlocalToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.pantstexidlocalToolStripMenuItem.Text = "%pantstexidlocal%"; + this.pantstexidlocalToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); + // + // localizeonlineclothingToolStripMenuItem + // + this.localizeonlineclothingToolStripMenuItem.Name = "localizeonlineclothingToolStripMenuItem"; + this.localizeonlineclothingToolStripMenuItem.Size = new System.Drawing.Size(210, 22); + this.localizeonlineclothingToolStripMenuItem.Text = "%localizeonlineclothing%"; + this.localizeonlineclothingToolStripMenuItem.Click += new System.EventHandler(this.variableToolStripMenuItem_Click); // // ClientinfoEditor // @@ -1257,4 +1338,13 @@ partial class ClientinfoEditor private System.Windows.Forms.ToolStripMenuItem argstringToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem addValidateTagsForRelativePathToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem portToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem facetexidToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem tshirttexidToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem shirttexidToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem pantstexidToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem facetexlocalToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem tshirttexidlocalToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem shirttexidlocalToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem pantstexidlocalToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem localizeonlineclothingToolStripMenuItem; } diff --git a/Novetus/NovetusLauncher/Novetus.Launcher.csproj b/Novetus/NovetusLauncher/Novetus.Launcher.csproj index d1aa3fe..461f6f6 100644 --- a/Novetus/NovetusLauncher/Novetus.Launcher.csproj +++ b/Novetus/NovetusLauncher/Novetus.Launcher.csproj @@ -163,8 +163,6 @@ - - Form diff --git a/changelog.txt b/changelog.txt index d5ac1cd..e370440 100644 --- a/changelog.txt +++ b/changelog.txt @@ -3,6 +3,9 @@ Changes from v11.2021.1: New Features: - The Asset SDK Asset Localizer is now known as the Asset Fixer! - Added the ability to "fix" all asset URLs by changing them to a URL of your choice! +- Added T-Shirt support to 2007E/2007E-Shaders. + - T-Shirts loaded with Roblox Asset URLs/Redirects are not supported due to 2 issues with 2007e: Roblox Asset URLs/Redirects do not work properly in 2007E if it's a texture and using anything to get the current texture value for a ShirtGraphic or Decal returns a "bad cast" error. + - As a result, T-Shirts loaded with Roblox Asset URLs/Redirects will not load in 2007e. Enhancements: - Added an additional warning about certain GUI elements being disabled in later clients when No3D is selected. @@ -11,6 +14,10 @@ Enhancements: - The server browser no longer requires a server to be the same exact version as the current running version of Novetus. - The server browser now displays versions in red if they're not the same exact version. - The master server security warning will now show up once for every Novetus session. +- Added ClientScript Variables: + - %tshirttexid%, %shirttexid%, %pantstexid%, %facetexid% - Returns the texture URL for the respective online clothing type. Returns nothing if the URL is invalid, the item isn't using Online Clothing, or %localizeonlineclothing% is not defined in the script. + - %tshirttexidlocal%, %shirttexidlocal%, %pantstexidlocal%, %facetexlocal%" - Returns the texture rbxasset URL for the respective online clothing type. Returns nothing if the URL is invalid, the item isn't using Online Clothing, or %localizeonlineclothing% is not defined in the script. Only the client who downloads the clothing would be able to see it. + - %localizeonlineclothing% - Grabs texture IDS for the %texid% variables and localizes the texture for the %texidlocal% variables. This WILL increase load times of your client depending on how many items are being downloaded. Fixes: - Fixed the URL Override box in the Asset SDK not being functional. @@ -21,6 +28,7 @@ Fixes: - Fixed small decoding issues with the splash system. - Fixed the Stylish interface not showing a warning when hosting a seperate master server. - Fixed the Stylish interface not pinging the master server. +- Fixed some clients not functioning properly with Wine (Credits to man-of-eel in pull request #27). ---------------------------------------------------------------------------- 1.3 v11.2021.1 Changes from Pre-Release 5: diff --git a/documentation.txt b/documentation.txt index 624639e..00000dc 100644 --- a/documentation.txt +++ b/documentation.txt @@ -51,6 +51,9 @@ Player: %faced%, %headd%, %tshirtd%, %shirtd%, %pantsd%, %hat1d%, %hat2d%, %hat3d%, %extrad%, %hat4d% - Returns the rbxasset:// file paths of each individual item. May return as a URL for the item if it is a URL. Use single quotation marks ('). %headcolor%, %torsocolor%, %larmcolor%, %llegcolor%, %rarmcolor%, %rlegcolor% - Returns the BrickColor IDs for individual body part colors. %loadout% - Returns the player's complete current appearance, seperated by commas. Used for loading the loadout with scripts like CSConnect. +%tshirttexid%, %shirttexid%, %pantstexid%, %facetexid% - Returns the texture URL for the respective online clothing type. Returns nothing if the URL is invalid, the item isn't using Online Clothing, or %localizeonlineclothing% is not defined in the script. +%tshirttexidlocal%, %shirttexidlocal%, %pantstexidlocal%, %facetexlocal%" - Returns the texture rbxasset URL for the respective online clothing type. Returns nothing if the URL is invalid, the item isn't using Online Clothing, or %localizeonlineclothing% is not defined in the script. +%localizeonlineclothing% - Grabs texture IDS for the %texid% variables and localizes the texture for the %texidlocal% variables. This WILL increase load times of your client depending on how many items are being downloaded. Debugging/Misc: %donothing% - Does exactly as it implies. Useful for debugging tags, but doesn't need to be used as it is called automatically if there is an exception when reading tags. Used internally to suppress errors. diff --git a/scripts/game/2007E-Shaders/CSMPFunctions.lua b/scripts/game/2007E-Shaders/CSMPFunctions.lua index 8de8f35..8b025eb 100644 --- a/scripts/game/2007E-Shaders/CSMPFunctions.lua +++ b/scripts/game/2007E-Shaders/CSMPFunctions.lua @@ -78,6 +78,34 @@ function LoadCharacterNew(playerApp,newChar) pcall(function() charparts[newVal.ColorIndex.Value].BrickColor = newVal.Value end) + elseif (newVal.Name == "T-Shirt") then + pcall(function() + local newTShirt = ""; + if (string.match(newVal.Value, "http") == "http") then + if (string.match(newVal.Value, "?id=") ~= "?id=") then + newWaitForChild(charparts[2],"roblox"):remove() + newDecal = Instance.new("Decal") + newDecal.Name = "novetus" + newDecal.Texture = newVal.Value + newDecal.Face = 5 + newDecal.Parent = charparts[2] + end + else + newTShirt = game.Workspace:insertContent(path.."tshirts/"..newVal.Value) + if newTShirt[1] then + if newTShirt[1].className == "ShirtGraphic" then + newWaitForChild(charparts[2],"roblox"):remove() + newDecal = Instance.new("Decal") + newDecal.Name = "novetus" + newDecal.Face = 5 + newDecal.Parent = charparts[2] + newTShirt[1].Parent = newChar + else + newTShirt[1]:remove() + end + end + end + end) elseif (newVal.Name == "Extra") then pcall(function() local newItem = game.Workspace:insertContent(path.."custom/"..newVal.Value) @@ -85,7 +113,7 @@ function LoadCharacterNew(playerApp,newChar) if newItem[1].className == "Decal" then newWaitForChild(charparts[1],"face"):remove() newItem[1].Parent = charparts[1] - newItem[1].Face = "Front" + newItem[1].Face = 5 elseif newPart[1].className == "SpecialMesh" or newPart[1].className == "CylinderMesh" or newPart[1].className == "BlockMesh" then newWaitForChild(charparts[1],"Mesh"):remove() newItem[1].Parent = charparts[1] @@ -98,7 +126,7 @@ function LoadCharacterNew(playerApp,newChar) end end -function InitalizeClientAppearance(Player,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,TShirtID,ShirtID,PantsID,FaceID,HeadID,ItemID) +function InitalizeClientAppearance(Player,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,TShirtID,ShirtID,PantsID,FaceID,HeadID,ItemID,TShirtTexID) local newCharApp = Instance.new("IntValue",Player) newCharApp.Name = "Appearance" --BODY COLORS @@ -147,6 +175,21 @@ function InitalizeClientAppearance(Player,Hat1ID,Hat2ID,Hat3ID,HeadColorID,Torso indexValue.Parent = BodyColor indexValue.Value = i end + --T-SHIRT + local newTShirt = Instance.new("StringValue",newCharApp) + if (TShirtID ~= nil) then + newTShirt.Value = TShirtID + else + newTShirt.Value = "NoTShirt.rbxm" + end + newTShirt.Name = "T-Shirt" + local newTShirtTexID = Instance.new("StringValue",newTShirt) + if (TShirtTexID ~= nil) then + newTShirtTexID.Value = TShirtTexID + else + newTShirtTexID.Value = "" + end + newTShirtTexID.Name = "Texture" --EXTRA local newItem = Instance.new("StringValue",newCharApp) if (ItemID ~= nil) then @@ -328,7 +371,7 @@ function CSServer(Port,PlayerLimit,ClientEXEMD5,LauncherMD5,ClientScriptMD5,Noti pcall(function() game.Close:connect(function() Server:stop() end) end) end -function CSConnect(UserID,ServerIP,ServerPort,PlayerName,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,TShirtID,ShirtID,PantsID,FaceID,HeadID,IconType,ItemID,ClientEXEMD5,LauncherMD5,ClientScriptMD5,Tripcode,Ticket) +function CSConnect(UserID,ServerIP,ServerPort,PlayerName,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,TShirtID,ShirtID,PantsID,FaceID,HeadID,IconType,ItemID,ClientEXEMD5,LauncherMD5,ClientScriptMD5,Tripcode,VerifiedScripts,TShirtTexID,Ticket) local suc, err = pcall(function() client = game:service("NetworkClient") player = game:service("Players"):createLocalPlayer(UserID) @@ -340,7 +383,7 @@ function CSConnect(UserID,ServerIP,ServerPort,PlayerName,Hat1ID,Hat2ID,Hat3ID,He player:SetAdminMode(true) pcall(function() player.Name=PlayerName or "" end) game:service("Visit"):setUploadUrl("") - InitalizeClientAppearance(player,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,TShirtID,ShirtID,PantsID,FaceID,HeadID,ItemID) + InitalizeClientAppearance(player,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,TShirtID,ShirtID,PantsID,FaceID,HeadID,ItemID,TShirtTexID) end) local function dieerror(errmsg) @@ -400,14 +443,14 @@ function CSConnect(UserID,ServerIP,ServerPort,PlayerName,Hat1ID,Hat2ID,Hat3ID,He end end -function CSSolo(UserID,PlayerName,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,TShirtID,ShirtID,PantsID,FaceID,HeadID,IconType,ItemID) +function CSSolo(UserID,PlayerName,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,TShirtID,ShirtID,PantsID,FaceID,HeadID,IconType,ItemID,TShirtTexID) game:service("RunService"):run() local plr = game.Players:createLocalPlayer(UserID) game.Workspace:insertContent("rbxasset://Fonts//libraries.rbxm") plr.Name = PlayerName plr:SetAdminMode(true) plr:LoadCharacter() - InitalizeClientAppearance(plr,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,TShirtID,ShirtID,PantsID,FaceID,HeadID,ItemID) + InitalizeClientAppearance(plr,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,TShirtID,ShirtID,PantsID,FaceID,HeadID,ItemID,TShirtTexID) LoadCharacterNew(newWaitForChild(plr,"Appearance"),plr.Character,false) game:service("Visit"):setUploadUrl("") while true do diff --git a/scripts/game/2007E/CSMPFunctions.lua b/scripts/game/2007E/CSMPFunctions.lua index 8de8f35..8b025eb 100644 --- a/scripts/game/2007E/CSMPFunctions.lua +++ b/scripts/game/2007E/CSMPFunctions.lua @@ -78,6 +78,34 @@ function LoadCharacterNew(playerApp,newChar) pcall(function() charparts[newVal.ColorIndex.Value].BrickColor = newVal.Value end) + elseif (newVal.Name == "T-Shirt") then + pcall(function() + local newTShirt = ""; + if (string.match(newVal.Value, "http") == "http") then + if (string.match(newVal.Value, "?id=") ~= "?id=") then + newWaitForChild(charparts[2],"roblox"):remove() + newDecal = Instance.new("Decal") + newDecal.Name = "novetus" + newDecal.Texture = newVal.Value + newDecal.Face = 5 + newDecal.Parent = charparts[2] + end + else + newTShirt = game.Workspace:insertContent(path.."tshirts/"..newVal.Value) + if newTShirt[1] then + if newTShirt[1].className == "ShirtGraphic" then + newWaitForChild(charparts[2],"roblox"):remove() + newDecal = Instance.new("Decal") + newDecal.Name = "novetus" + newDecal.Face = 5 + newDecal.Parent = charparts[2] + newTShirt[1].Parent = newChar + else + newTShirt[1]:remove() + end + end + end + end) elseif (newVal.Name == "Extra") then pcall(function() local newItem = game.Workspace:insertContent(path.."custom/"..newVal.Value) @@ -85,7 +113,7 @@ function LoadCharacterNew(playerApp,newChar) if newItem[1].className == "Decal" then newWaitForChild(charparts[1],"face"):remove() newItem[1].Parent = charparts[1] - newItem[1].Face = "Front" + newItem[1].Face = 5 elseif newPart[1].className == "SpecialMesh" or newPart[1].className == "CylinderMesh" or newPart[1].className == "BlockMesh" then newWaitForChild(charparts[1],"Mesh"):remove() newItem[1].Parent = charparts[1] @@ -98,7 +126,7 @@ function LoadCharacterNew(playerApp,newChar) end end -function InitalizeClientAppearance(Player,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,TShirtID,ShirtID,PantsID,FaceID,HeadID,ItemID) +function InitalizeClientAppearance(Player,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,TShirtID,ShirtID,PantsID,FaceID,HeadID,ItemID,TShirtTexID) local newCharApp = Instance.new("IntValue",Player) newCharApp.Name = "Appearance" --BODY COLORS @@ -147,6 +175,21 @@ function InitalizeClientAppearance(Player,Hat1ID,Hat2ID,Hat3ID,HeadColorID,Torso indexValue.Parent = BodyColor indexValue.Value = i end + --T-SHIRT + local newTShirt = Instance.new("StringValue",newCharApp) + if (TShirtID ~= nil) then + newTShirt.Value = TShirtID + else + newTShirt.Value = "NoTShirt.rbxm" + end + newTShirt.Name = "T-Shirt" + local newTShirtTexID = Instance.new("StringValue",newTShirt) + if (TShirtTexID ~= nil) then + newTShirtTexID.Value = TShirtTexID + else + newTShirtTexID.Value = "" + end + newTShirtTexID.Name = "Texture" --EXTRA local newItem = Instance.new("StringValue",newCharApp) if (ItemID ~= nil) then @@ -328,7 +371,7 @@ function CSServer(Port,PlayerLimit,ClientEXEMD5,LauncherMD5,ClientScriptMD5,Noti pcall(function() game.Close:connect(function() Server:stop() end) end) end -function CSConnect(UserID,ServerIP,ServerPort,PlayerName,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,TShirtID,ShirtID,PantsID,FaceID,HeadID,IconType,ItemID,ClientEXEMD5,LauncherMD5,ClientScriptMD5,Tripcode,Ticket) +function CSConnect(UserID,ServerIP,ServerPort,PlayerName,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,TShirtID,ShirtID,PantsID,FaceID,HeadID,IconType,ItemID,ClientEXEMD5,LauncherMD5,ClientScriptMD5,Tripcode,VerifiedScripts,TShirtTexID,Ticket) local suc, err = pcall(function() client = game:service("NetworkClient") player = game:service("Players"):createLocalPlayer(UserID) @@ -340,7 +383,7 @@ function CSConnect(UserID,ServerIP,ServerPort,PlayerName,Hat1ID,Hat2ID,Hat3ID,He player:SetAdminMode(true) pcall(function() player.Name=PlayerName or "" end) game:service("Visit"):setUploadUrl("") - InitalizeClientAppearance(player,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,TShirtID,ShirtID,PantsID,FaceID,HeadID,ItemID) + InitalizeClientAppearance(player,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,TShirtID,ShirtID,PantsID,FaceID,HeadID,ItemID,TShirtTexID) end) local function dieerror(errmsg) @@ -400,14 +443,14 @@ function CSConnect(UserID,ServerIP,ServerPort,PlayerName,Hat1ID,Hat2ID,Hat3ID,He end end -function CSSolo(UserID,PlayerName,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,TShirtID,ShirtID,PantsID,FaceID,HeadID,IconType,ItemID) +function CSSolo(UserID,PlayerName,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,TShirtID,ShirtID,PantsID,FaceID,HeadID,IconType,ItemID,TShirtTexID) game:service("RunService"):run() local plr = game.Players:createLocalPlayer(UserID) game.Workspace:insertContent("rbxasset://Fonts//libraries.rbxm") plr.Name = PlayerName plr:SetAdminMode(true) plr:LoadCharacter() - InitalizeClientAppearance(plr,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,TShirtID,ShirtID,PantsID,FaceID,HeadID,ItemID) + InitalizeClientAppearance(plr,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,TShirtID,ShirtID,PantsID,FaceID,HeadID,ItemID,TShirtTexID) LoadCharacterNew(newWaitForChild(plr,"Appearance"),plr.Character,false) game:service("Visit"):setUploadUrl("") while true do diff --git a/scripts/game/2007M-Shaders/CSMPFunctions.lua b/scripts/game/2007M-Shaders/CSMPFunctions.lua index e69edcb..fe342b5 100644 --- a/scripts/game/2007M-Shaders/CSMPFunctions.lua +++ b/scripts/game/2007M-Shaders/CSMPFunctions.lua @@ -144,7 +144,7 @@ function LoadCharacterNew(playerApp,newChar) if newItem[1].className == "Decal" then newWaitForChild(charparts[1],"face"):remove() newItem[1].Parent = charparts[1] - newItem[1].Face = "Front" + newItem[1].Face = 5 elseif newPart[1].className == "SpecialMesh" or newPart[1].className == "CylinderMesh" or newPart[1].className == "BlockMesh" then newWaitForChild(charparts[1],"Mesh"):remove() newItem[1].Parent = charparts[1] diff --git a/scripts/game/2007M/CSMPFunctions.lua b/scripts/game/2007M/CSMPFunctions.lua index bd78695..718b7e3 100644 --- a/scripts/game/2007M/CSMPFunctions.lua +++ b/scripts/game/2007M/CSMPFunctions.lua @@ -144,7 +144,7 @@ function LoadCharacterNew(playerApp,newChar) if newItem[1].className == "Decal" then newWaitForChild(charparts[1],"face"):remove() newItem[1].Parent = charparts[1] - newItem[1].Face = "Front" + newItem[1].Face = 5 elseif newPart[1].className == "SpecialMesh" or newPart[1].className == "CylinderMesh" or newPart[1].className == "BlockMesh" then newWaitForChild(charparts[1],"Mesh"):remove() newItem[1].Parent = charparts[1]