Novetus_src/Novetus/NovetusCore/StorageAndFunctions/FileManagement.cs

1508 lines
68 KiB
C#

#region Usings
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Threading;
using System.Drawing;
using System.Drawing.Imaging;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using System.Xml.Serialization;
using System.Runtime.Versioning;
#endregion
namespace Novetus.Core
{
#region File Formats
public class FileFormat
{
#region Client Information
public class ClientInfo
{
public ClientInfo()
{
UsesPlayerName = true;
UsesID = true;
Description = "";
Warning = "";
LegacyMode = false;
ClientMD5 = "";
ScriptMD5 = "";
Fix2007 = false;
AlreadyHasSecurity = false;
ClientLoadOptions = Settings.ClientLoadOptions.Client_2008AndUp;
SeperateFolders = false;
UsesCustomClientEXEName = false;
CustomClientEXEName = "";
CommandLineArgs = "%args%";
}
public bool UsesPlayerName { get; set; }
public bool UsesID { get; set; }
public string Description { get; set; }
public string Warning { get; set; }
public bool LegacyMode { get; set; }
public string ClientMD5 { get; set; }
public string ScriptMD5 { get; set; }
public bool Fix2007 { get; set; }
public bool AlreadyHasSecurity { get; set; }
public bool SeperateFolders { get; set; }
public bool UsesCustomClientEXEName { get; set; }
public string CustomClientEXEName { get; set; }
public Settings.ClientLoadOptions ClientLoadOptions { get; set; }
public string CommandLineArgs { get; set; }
}
#endregion
#region Configuration
public class Config
{
public Config()
{
SelectedClient = "";
Map = "";
CloseOnLaunch = false;
UserID = 0;
PlayerName = "Player";
RobloxPort = 53640;
PlayerLimit = 12;
UPnP = false;
DisabledAssetSDKHelp = false;
DiscordPresence = true;
MapPath = "";
MapPathSnip = "";
GraphicsMode = Settings.Mode.Automatic;
ReShade = false;
QualityLevel = Settings.Level.Automatic;
LauncherStyle = Settings.Style.Stylish;
ReShadeFPSDisplay = false;
ReShadePerformanceMode = false;
AssetSDKFixerSaveBackups = true;
AlternateServerIP = "";
DisableReshadeDelete = false;
ShowServerNotifications = false;
ServerBrowserServerName = "Novetus";
ServerBrowserServerAddress = "localhost";
Priority = ProcessPriorityClass.RealTime;
FirstServerLaunch = true;
NewGUI = false;
URIQuickConfigure = true;
BootstrapperShowUI = true;
WebProxyInitialSetupRequired = true;
WebProxyEnabled = false;
}
public string SelectedClient { get; set; }
public string Map { get; set; }
public bool CloseOnLaunch { get; set; }
public int UserID { get; set; }
public string PlayerName { get; set; }
public int RobloxPort { get; set; }
public int PlayerLimit { get; set; }
public bool UPnP { get; set; }
public bool DisabledAssetSDKHelp { get; set; }
public bool DiscordPresence { get; set; }
public string MapPath { get; set; }
public string MapPathSnip { get; set; }
public Settings.Mode GraphicsMode { get; set; }
public bool ReShade { get; set; }
public Settings.Level QualityLevel { get; set; }
public Settings.Style LauncherStyle { get; set; }
public bool ReShadeFPSDisplay { get; set; }
public bool ReShadePerformanceMode { get; set; }
public bool AssetSDKFixerSaveBackups { get; set; }
public string AlternateServerIP { get; set; }
public bool DisableReshadeDelete { get; set; }
public bool ShowServerNotifications { get; set; }
public string ServerBrowserServerName { get; set; }
public string ServerBrowserServerAddress { get; set; }
public ProcessPriorityClass Priority { get; set; }
public bool FirstServerLaunch { get; set; }
public bool NewGUI { get; set; }
public bool URIQuickConfigure { get; set; }
public bool BootstrapperShowUI { get; set; }
public bool WebProxyInitialSetupRequired { get; set; }
public bool WebProxyEnabled { get; set; }
}
#endregion
#region Customization Configuration
public class CustomizationConfig
{
public CustomizationConfig()
{
Hat1 = "NoHat.rbxm";
Hat2 = "NoHat.rbxm";
Hat3 = "NoHat.rbxm";
Face = "DefaultFace.rbxm";
Head = "DefaultHead.rbxm";
TShirt = "NoTShirt.rbxm";
Shirt = "NoShirt.rbxm";
Pants = "NoPants.rbxm";
Icon = "NBC";
Extra = "NoExtra.rbxm";
HeadColorID = 24;
TorsoColorID = 23;
LeftArmColorID = 24;
RightArmColorID = 24;
LeftLegColorID = 119;
RightLegColorID = 119;
HeadColorString = "Color [A=255, R=245, G=205, B=47]";
TorsoColorString = "Color [A=255, R=13, G=105, B=172]";
LeftArmColorString = "Color [A=255, R=245, G=205, B=47]";
RightArmColorString = "Color [A=255, R=245, G=205, B=47]";
LeftLegColorString = "Color [A=255, R=164, G=189, B=71]";
RightLegColorString = "Color [A=255, R=164, G=189, B=71]";
ExtraSelectionIsHat = false;
ShowHatsInExtra = false;
CharacterID = "";
}
public string Hat1 { get; set; }
public string Hat2 { get; set; }
public string Hat3 { get; set; }
public string Face { get; set; }
public string Head { get; set; }
public string TShirt { get; set; }
public string Shirt { get; set; }
public string Pants { get; set; }
public string Icon { get; set; }
public string Extra { get; set; }
public int HeadColorID { get; set; }
public int TorsoColorID { get; set; }
public int LeftArmColorID { get; set; }
public int RightArmColorID { get; set; }
public int LeftLegColorID { get; set; }
public int RightLegColorID { get; set; }
public string HeadColorString { get; set; }
public string TorsoColorString { get; set; }
public string LeftArmColorString { get; set; }
public string RightArmColorString { get; set; }
public string LeftLegColorString { get; set; }
public string RightLegColorString { get; set; }
public bool ExtraSelectionIsHat { get; set; }
public bool ShowHatsInExtra { get; set; }
public string CharacterID { get; set; }
}
#endregion
#region Program Information
public class ProgramInfo
{
public ProgramInfo()
{
Version = "";
Branch = "";
DefaultClient = "";
RegisterClient1 = "";
RegisterClient2 = "";
DefaultMap = "";
//HACK
#if NET4
NetVersion = ".NET 4.0";
#elif NET481
NetVersion = ".NET 4.8";
#endif
InitialBootup = true;
}
public string Version { get; set; }
public string Branch { get; set; }
public string DefaultClient { get; set; }
public string RegisterClient1 { get; set; }
public string RegisterClient2 { get; set; }
public string DefaultMap { get; set; }
public string NetVersion { get; set; }
public bool InitialBootup { get; set; }
}
#endregion
}
#endregion
#region Part Color Options
public class PartColor
{
public string ColorName;
public int ColorID;
public string ColorRGB;
[XmlIgnore]
public Color ColorObject;
[XmlIgnore]
public string ColorGroup;
[XmlIgnore]
public string ColorRawName;
[XmlIgnore]
public Bitmap ColorImage;
}
[XmlRoot("PartColors")]
public class PartColors
{
[XmlArray("ColorList")]
public PartColor[] ColorList;
}
public class PartColorLoader
{
public static PartColor[] GetPartColors()
{
if (File.Exists(GlobalPaths.ConfigDir + "\\" + GlobalPaths.PartColorXMLName))
{
XmlSerializer serializer = new XmlSerializer(typeof(PartColors));
PartColors colors;
using (FileStream fs = new FileStream(GlobalPaths.ConfigDir + "\\" + GlobalPaths.PartColorXMLName, FileMode.Open))
{
colors = (PartColors)serializer.Deserialize(fs);
}
foreach (var item in colors.ColorList)
{
string colorFixed = Regex.Replace(item.ColorRGB, @"[\[\]\{\}\(\)\<\> ]", "");
string[] rgbValues = colorFixed.Split(',');
item.ColorObject = Color.FromArgb(Convert.ToInt32(rgbValues[0]), Convert.ToInt32(rgbValues[1]), Convert.ToInt32(rgbValues[2]));
if (!(item.ColorName.Contains("[") && item.ColorName.Contains("]")))
{
item.ColorRawName = item.ColorName;
item.ColorName = "[Uncategorized]" + item.ColorName;
}
else
{
item.ColorRawName = item.ColorName;
}
int pFrom = item.ColorName.IndexOf("[");
int pTo = item.ColorName.IndexOf("]");
item.ColorGroup = item.ColorName.Substring(pFrom + 1, pTo - pFrom - 1);
item.ColorName = item.ColorName.Replace(item.ColorGroup, "").Replace("[", "").Replace("]", "");
item.ColorImage = GeneratePartColorIcon(item, 128);
}
return colors.ColorList;
}
else
{
return null;
}
}
//make faster
public static void AddPartColorsToListView(PartColor[] PartColorList, ListView ColorView, int imgsize, bool showIDs = false)
{
try
{
ImageList ColorImageList = new ImageList();
ColorImageList.ImageSize = new Size(imgsize, imgsize);
ColorImageList.ColorDepth = ColorDepth.Depth32Bit;
ColorView.LargeImageList = ColorImageList;
ColorView.SmallImageList = ColorImageList;
foreach (var item in PartColorList)
{
var lvi = new ListViewItem(item.ColorName);
lvi.Tag = item.ColorID;
if (showIDs)
{
lvi.Text = lvi.Text + " (" + item.ColorID + ")";
}
var group = ColorView.Groups.Cast<ListViewGroup>().FirstOrDefault(g => g.Header == item.ColorGroup);
if (group == null)
{
group = new ListViewGroup(item.ColorGroup);
ColorView.Groups.Add(group);
}
lvi.Group = group;
if (item.ColorImage != null)
{
ColorImageList.Images.Add(item.ColorName, item.ColorImage);
lvi.ImageIndex = ColorImageList.Images.IndexOfKey(item.ColorName);
}
ColorView.Items.Add(lvi);
}
/*foreach (var group in ColorView.Groups.Cast<ListViewGroup>())
{
group.Header = group.Header + " (" + group.Items.Count + ")";
}*/
}
#if URI || LAUNCHER || CMD || BASICLAUNCHER
catch (Exception ex)
{
Util.LogExceptions(ex);
#else
catch (Exception)
{
#endif
}
}
public static Bitmap GeneratePartColorIcon(PartColor color, int imgsize)
{
try
{
Bitmap Bmp = new Bitmap(imgsize, imgsize, PixelFormat.Format32bppArgb);
using (Graphics gfx = Graphics.FromImage(Bmp))
using (SolidBrush brush = new SolidBrush(color.ColorObject))
{
gfx.FillRectangle(brush, 0, 0, imgsize, imgsize);
}
return Bmp;
}
#if URI || LAUNCHER || CMD || BASICLAUNCHER
catch (Exception ex)
{
Util.LogExceptions(ex);
#else
catch (Exception)
{
#endif
return null;
}
}
public static PartColor FindPartColorByName(PartColor[] colors, string query)
{
if (File.Exists(GlobalPaths.ConfigDir + "\\" + GlobalPaths.PartColorXMLName))
{
return colors.SingleOrDefault(item => query.Contains(item.ColorName));
}
else
{
return null;
}
}
public static PartColor FindPartColorByID(PartColor[] colors, string query)
{
if (File.Exists(GlobalPaths.ConfigDir + "\\" + GlobalPaths.PartColorXMLName))
{
return colors.SingleOrDefault(item => query.Contains(item.ColorID.ToString()));
}
else
{
return null;
}
}
}
#endregion
#region Content Provider Options
public class Provider
{
public string Name;
public string URL;
public string Icon;
}
[XmlRoot("ContentProviders")]
public class ContentProviders
{
[XmlArray("Providers")]
public Provider[] Providers;
}
public class OnlineClothing
{
public static Provider[] GetContentProviders()
{
if (File.Exists(GlobalPaths.ConfigDir + "\\" + GlobalPaths.ContentProviderXMLName))
{
XmlSerializer serializer = new XmlSerializer(typeof(ContentProviders));
ContentProviders providers;
using (FileStream fs = new FileStream(GlobalPaths.ConfigDir + "\\" + GlobalPaths.ContentProviderXMLName, FileMode.Open))
{
providers = (ContentProviders)serializer.Deserialize(fs);
}
return providers.Providers;
}
else
{
return null;
}
}
public static Provider FindContentProviderByName(Provider[] providers, string query)
{
if (File.Exists(GlobalPaths.ConfigDir + "\\" + GlobalPaths.ContentProviderXMLName))
{
return providers.SingleOrDefault(item => query.Contains(item.Name));
}
else
{
return null;
}
}
public static Provider FindContentProviderByURL(Provider[] providers, string query)
{
if (File.Exists(GlobalPaths.ConfigDir + "\\" + GlobalPaths.ContentProviderXMLName))
{
return providers.SingleOrDefault(item => query.Contains(item.URL));
}
else
{
return null;
}
}
}
#endregion
#region Settings
public class Settings
{
public enum Mode
{
Automatic = 0,
OpenGLStable = 1,
OpenGLExperimental = 2,
DirectX = 3
}
public enum Level
{
Automatic = 0,
VeryLow = 1,
Low = 2,
Medium = 3,
High = 4,
Ultra = 5,
Custom = 6
}
public enum Style
{
None = 0,
Extended = 1,
Compact = 2,
Stylish = 3
}
public enum ClientLoadOptions
{
Client_2007_NoGraphicsOptions = 0,
Client_2007 = 1,
Client_2008AndUp = 2,
Client_2008AndUp_LegacyOpenGL = 3,
Client_2008AndUp_QualityLevel21 = 4,
Client_2008AndUp_NoGraphicsOptions = 5,
Client_2008AndUp_ForceAutomatic = 6,
Client_2008AndUp_ForceAutomaticQL21 = 7,
Client_2008AndUp_HasCharacterOnlyShadowsLegacyOpenGL = 8
}
public static ClientLoadOptions GetClientLoadOptionsForBool(bool level)
{
switch (level)
{
case false:
return ClientLoadOptions.Client_2008AndUp;
default:
return ClientLoadOptions.Client_2007_NoGraphicsOptions;
}
}
public static string GetPathForClientLoadOptions(ClientLoadOptions level)
{
string localAppdataRobloxPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"\Roblox";
string appdataRobloxPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\Roblox";
if (!Directory.Exists(localAppdataRobloxPath))
{
Directory.CreateDirectory(localAppdataRobloxPath);
}
if (!Directory.Exists(appdataRobloxPath))
{
Directory.CreateDirectory(appdataRobloxPath);
}
switch (level)
{
case ClientLoadOptions.Client_2008AndUp_QualityLevel21:
case ClientLoadOptions.Client_2008AndUp_LegacyOpenGL:
case ClientLoadOptions.Client_2008AndUp_NoGraphicsOptions:
case ClientLoadOptions.Client_2008AndUp_ForceAutomatic:
case ClientLoadOptions.Client_2008AndUp_ForceAutomaticQL21:
case ClientLoadOptions.Client_2008AndUp_HasCharacterOnlyShadowsLegacyOpenGL:
case ClientLoadOptions.Client_2008AndUp:
return localAppdataRobloxPath;
default:
return appdataRobloxPath;
}
}
}
#endregion
#region Icon Loader
public class IconLoader
{
private OpenFileDialog openFileDialog1;
private string installOutcome = "";
public bool CopyToItemDir = false;
public string ItemDir = "";
public string ItemName = "";
public string ItemPath = "";
public IconLoader()
{
openFileDialog1 = new OpenFileDialog()
{
FileName = "Select an icon .png file",
Filter = "Portable Network Graphics image (*.png)|*.png",
Title = "Open icon .png"
};
}
public void setInstallOutcome(string text)
{
installOutcome = text;
}
public string getInstallOutcome()
{
return installOutcome;
}
public void LoadImage()
{
string ItemNameFixed = ItemName.Replace(" ", "");
string dir = CopyToItemDir ? ItemDir + "\\" + ItemNameFixed : GlobalPaths.extradir + "\\icons\\" + GlobalVars.UserConfiguration.PlayerName;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
try
{
Util.FixedFileCopy(openFileDialog1.FileName, dir + ".png", true);
if (CopyToItemDir)
{
ItemPath = ItemDir + "\\" + ItemNameFixed + ".png";
}
installOutcome = "Icon " + openFileDialog1.SafeFileName + " installed!";
}
catch (Exception ex)
{
installOutcome = "Error when installing icon: " + ex.Message;
#if URI || LAUNCHER || BASICLAUNCHER
Util.LogExceptions(ex);
#endif
}
}
}
}
#endregion
#region File Management
public class FileManagement
{
public static void ReadInfoFile(string infopath, bool other = false, string exepath = "")
{
//READ
string versionbranch, defaultclient, defaultmap, regclient1,
regclient2, extendedversionnumber, extendedversiontemplate,
extendedversionrevision, extendedversioneditchangelog, isLite,
initialBootup;
INIFile ini = new INIFile(infopath);
string section = "ProgramInfo";
//not using the GlobalVars definitions as those are empty until we fill them in.
versionbranch = ini.IniReadValue(section, "Branch", "0.0");
defaultclient = ini.IniReadValue(section, "DefaultClient", "2009E");
defaultmap = ini.IniReadValue(section, "DefaultMap", "Dev - Baseplate2048.rbxl");
regclient1 = ini.IniReadValue(section, "UserAgentRegisterClient1", "2007M");
regclient2 = ini.IniReadValue(section, "UserAgentRegisterClient2", "2009L");
extendedversionnumber = ini.IniReadValue(section, "ExtendedVersionNumber", "False");
extendedversioneditchangelog = ini.IniReadValue(section, "ExtendedVersionEditChangelog", "False");
extendedversiontemplate = ini.IniReadValue(section, "ExtendedVersionTemplate", "%version%");
extendedversionrevision = ini.IniReadValue(section, "ExtendedVersionRevision", "-1");
isLite = ini.IniReadValue(section, "IsLite", "False");
initialBootup = ini.IniReadValue(section, "InitialBootup", "True");
try
{
GlobalVars.ExtendedVersionNumber = Convert.ToBoolean(extendedversionnumber);
if (GlobalVars.ExtendedVersionNumber)
{
if (other)
{
if (!string.IsNullOrWhiteSpace(exepath))
{
var versionInfo = FileVersionInfo.GetVersionInfo(exepath);
GlobalVars.ProgramInformation.Version = extendedversiontemplate.Replace("%version%", versionbranch)
.Replace("%build%", versionInfo.ProductBuildPart.ToString())
.Replace("%revision%", versionInfo.FilePrivatePart.ToString())
.Replace("%extended-revision%", (!extendedversionrevision.Equals("-1") ? extendedversionrevision : ""));
}
else
{
return;
}
}
else
{
GlobalVars.ProgramInformation.Version = extendedversiontemplate.Replace("%version%", versionbranch)
.Replace("%build%", Assembly.GetExecutingAssembly().GetName().Version.Build.ToString())
.Replace("%revision%", Assembly.GetExecutingAssembly().GetName().Version.Revision.ToString())
.Replace("%extended-revision%", (!extendedversionrevision.Equals("-1") ? extendedversionrevision : ""));
}
bool changelogedit = Convert.ToBoolean(extendedversioneditchangelog);
if (changelogedit)
{
string changelog = GlobalPaths.BasePath + "\\changelog.txt";
if (File.Exists(changelog))
{
string[] changeloglines = File.ReadAllLines(changelog);
if (!changeloglines[0].Equals(GlobalVars.ProgramInformation.Version))
{
changeloglines[0] = GlobalVars.ProgramInformation.Version;
File.WriteAllLines(changelog, changeloglines);
}
}
}
}
else
{
GlobalVars.ProgramInformation.Version = versionbranch;
}
GlobalVars.ProgramInformation.Branch = versionbranch;
GlobalVars.ProgramInformation.DefaultClient = defaultclient;
GlobalVars.ProgramInformation.DefaultMap = defaultmap;
GlobalVars.ProgramInformation.RegisterClient1 = regclient1;
GlobalVars.ProgramInformation.RegisterClient2 = regclient2;
GlobalVars.ProgramInformation.InitialBootup = Convert.ToBoolean(initialBootup);
GlobalVars.UserConfiguration.SelectedClient = GlobalVars.ProgramInformation.DefaultClient;
GlobalVars.UserConfiguration.Map = GlobalVars.ProgramInformation.DefaultMap;
GlobalVars.UserConfiguration.MapPath = GlobalPaths.MapsDir + @"\\" + GlobalVars.ProgramInformation.DefaultMap;
GlobalVars.UserConfiguration.MapPathSnip = GlobalPaths.MapsDirBase + @"\\" + GlobalVars.ProgramInformation.DefaultMap;
}
#if URI || LAUNCHER || BASICLAUNCHER
catch (Exception ex)
{
Util.LogExceptions(ex);
#else
catch (Exception)
{
#endif
ReadInfoFile(infopath, other);
}
}
public static void TurnOffInitialSequence()
{
//READ
INIFile ini = new INIFile(GlobalPaths.ConfigDir + "\\" + GlobalPaths.InfoName);
string section = "ProgramInfo";
string initialBootup = ini.IniReadValue(section, "InitialBootup", "True");
if (Convert.ToBoolean(initialBootup) == true)
{
ini.IniWriteValue(section, "InitialBootup", "False");
}
}
public static string ConfigUseOldValIfExists(INIFile ini, string section, string oldKey, string newKey, string val, bool write)
{
if (write)
{
if (!ini.IniValueExists(newKey))
{
if (GlobalVars.ProgramInformation.InitialBootup)
{
if (ini.IniValueExists(oldKey))
{
ini.IniWriteValue(section, oldKey, val);
}
else
{
ini.IniWriteValue(section, newKey, val);
}
}
else
{
ini.IniWriteValue(section, oldKey, val);
}
}
else
{
ini.IniWriteValue(section, newKey, val);
}
return "";
}
else
{
if (ini.IniValueExists(newKey))
{
return ini.IniReadValue(section, newKey, val);
}
else
{
return ini.IniReadValue(section, oldKey, val);
}
}
}
private static int ValueInt(string val, int defaultVal)
{
int res;
if (int.TryParse(val, out res))
{
return Convert.ToInt32(val);
}
else
{
return defaultVal;
}
}
private static bool ValueBool(string val, bool defaultVal)
{
bool res;
if (bool.TryParse(val, out res))
{
return Convert.ToBoolean(val);
}
else
{
return defaultVal;
}
}
public static void Config(string cfgpath, bool write, bool doubleCheck = false)
{
bool forcewrite = false;
if (!File.Exists(cfgpath))
{
// force write mode on if the file doesn't exist.
write = true;
forcewrite = true;
}
if (write)
{
if (Util.IsWineRunning())
{
GlobalVars.UserConfiguration.LauncherStyle = Settings.Style.Extended;
}
//WRITE
INIFile ini = new INIFile(cfgpath);
string section = "Config";
ini.IniWriteValue(section, "CloseOnLaunch", GlobalVars.UserConfiguration.CloseOnLaunch.ToString());
ini.IniWriteValue(section, "UserID", GlobalVars.UserConfiguration.UserID.ToString());
ini.IniWriteValue(section, "PlayerName", GlobalVars.UserConfiguration.PlayerName.ToString());
ini.IniWriteValue(section, "SelectedClient", GlobalVars.UserConfiguration.SelectedClient.ToString());
ini.IniWriteValue(section, "Map", GlobalVars.UserConfiguration.Map.ToString());
ini.IniWriteValue(section, "RobloxPort", GlobalVars.UserConfiguration.RobloxPort.ToString());
ini.IniWriteValue(section, "PlayerLimit", GlobalVars.UserConfiguration.PlayerLimit.ToString());
ini.IniWriteValue(section, "UPnP", GlobalVars.UserConfiguration.UPnP.ToString());
ini.IniWriteValue(section, "DiscordRichPresence", GlobalVars.UserConfiguration.DiscordPresence.ToString());
ini.IniWriteValue(section, "MapPath", GlobalVars.UserConfiguration.MapPath.ToString());
ini.IniWriteValue(section, "MapPathSnip", GlobalVars.UserConfiguration.MapPathSnip.ToString());
ini.IniWriteValue(section, "GraphicsMode", ((int)GlobalVars.UserConfiguration.GraphicsMode).ToString());
ini.IniWriteValue(section, "ReShade", GlobalVars.UserConfiguration.ReShade.ToString());
ini.IniWriteValue(section, "QualityLevel", ((int)GlobalVars.UserConfiguration.QualityLevel).ToString());
ini.IniWriteValue(section, "Style", ((int)GlobalVars.UserConfiguration.LauncherStyle).ToString());
ini.IniWriteValue(section, "AlternateServerIP", GlobalVars.UserConfiguration.AlternateServerIP.ToString());
ini.IniWriteValue(section, "DisableReshadeDelete", GlobalVars.UserConfiguration.DisableReshadeDelete.ToString());
ini.IniWriteValue(section, "ShowServerNotifications", GlobalVars.UserConfiguration.ShowServerNotifications.ToString());
ini.IniWriteValue(section, "ServerBrowserServerName", GlobalVars.UserConfiguration.ServerBrowserServerName.ToString());
ini.IniWriteValue(section, "ServerBrowserServerAddress", GlobalVars.UserConfiguration.ServerBrowserServerAddress.ToString());
ini.IniWriteValue(section, "ClientLaunchPriority", ((int)GlobalVars.UserConfiguration.Priority).ToString());
ini.IniWriteValue(section, "FirstServerLaunch", GlobalVars.UserConfiguration.FirstServerLaunch.ToString());
ini.IniWriteValue(section, "NewGUI", GlobalVars.UserConfiguration.NewGUI.ToString());
ini.IniWriteValue(section, "URIQuickConfigure", GlobalVars.UserConfiguration.URIQuickConfigure.ToString());
ini.IniWriteValue(section, "BootstrapperShowUI", GlobalVars.UserConfiguration.BootstrapperShowUI.ToString());
ini.IniWriteValue(section, "WebProxyInitialSetupRequired", GlobalVars.UserConfiguration.WebProxyInitialSetupRequired.ToString());
ini.IniWriteValue(section, "WebProxyEnabled", GlobalVars.UserConfiguration.WebProxyEnabled.ToString());
ConfigUseOldValIfExists(ini, section, "ItemMakerDisableHelpMessage", "AssetSDKDisableHelpMessage", GlobalVars.UserConfiguration.DisabledAssetSDKHelp.ToString(), write);
ConfigUseOldValIfExists(ini, section, "AssetLocalizerSaveBackups", "AssetSDKFixerSaveBackups", GlobalVars.UserConfiguration.AssetSDKFixerSaveBackups.ToString(), write);
if (forcewrite)
{
// try again....
Config(cfgpath, false, doubleCheck);
}
}
else
{
try
{
//READ
string closeonlaunch, userid, name, selectedclient,
map, port, limit, upnp,
disablehelpmessage, discord, mappath, mapsnip,
graphics, reshade, qualitylevel, style, savebackups, altIP,
disReshadeDel, showNotifs, SB_Name, SB_Address, priority,
firstServerLaunch, newgui, quickconfigure, bootstrapper,
webproxysetup, webproxy;
INIFile ini = new INIFile(cfgpath);
string section = "Config";
closeonlaunch = ini.IniReadValue(section, "CloseOnLaunch", GlobalVars.UserConfiguration.CloseOnLaunch.ToString());
userid = ini.IniReadValue(section, "UserID", GlobalVars.UserConfiguration.UserID.ToString());
name = ini.IniReadValue(section, "PlayerName", GlobalVars.UserConfiguration.PlayerName.ToString());
selectedclient = ini.IniReadValue(section, "SelectedClient", GlobalVars.UserConfiguration.SelectedClient.ToString());
map = ini.IniReadValue(section, "Map", GlobalVars.UserConfiguration.Map.ToString());
port = ini.IniReadValue(section, "RobloxPort", GlobalVars.UserConfiguration.RobloxPort.ToString());
limit = ini.IniReadValue(section, "PlayerLimit", GlobalVars.UserConfiguration.PlayerLimit.ToString());
upnp = ini.IniReadValue(section, "UPnP", GlobalVars.UserConfiguration.UPnP.ToString());
discord = ini.IniReadValue(section, "DiscordRichPresence", GlobalVars.UserConfiguration.DiscordPresence.ToString());
mappath = ini.IniReadValue(section, "MapPath", GlobalVars.UserConfiguration.MapPath.ToString());
mapsnip = ini.IniReadValue(section, "MapPathSnip", GlobalVars.UserConfiguration.MapPathSnip.ToString());
graphics = ini.IniReadValue(section, "GraphicsMode", ((int)GlobalVars.UserConfiguration.GraphicsMode).ToString());
reshade = ini.IniReadValue(section, "ReShade", GlobalVars.UserConfiguration.ReShade.ToString());
qualitylevel = ini.IniReadValue(section, "QualityLevel", ((int)GlobalVars.UserConfiguration.QualityLevel).ToString());
style = ini.IniReadValue(section, "Style", ((int)GlobalVars.UserConfiguration.LauncherStyle).ToString());
altIP = ini.IniReadValue(section, "AlternateServerIP", GlobalVars.UserConfiguration.AlternateServerIP.ToString());
disReshadeDel = ini.IniReadValue(section, "DisableReshadeDelete", GlobalVars.UserConfiguration.DisableReshadeDelete.ToString());
showNotifs = ini.IniReadValue(section, "ShowServerNotifications", GlobalVars.UserConfiguration.ShowServerNotifications.ToString());
SB_Name = ini.IniReadValue(section, "ServerBrowserServerName", GlobalVars.UserConfiguration.ServerBrowserServerName.ToString());
SB_Address = ini.IniReadValue(section, "ServerBrowserServerAddress", GlobalVars.UserConfiguration.ServerBrowserServerAddress.ToString());
priority = ini.IniReadValue(section, "ClientLaunchPriority", ((int)GlobalVars.UserConfiguration.Priority).ToString());
firstServerLaunch = ini.IniReadValue(section, "FirstServerLaunch", GlobalVars.UserConfiguration.FirstServerLaunch.ToString());
newgui = ini.IniReadValue(section, "NewGUI", GlobalVars.UserConfiguration.NewGUI.ToString());
quickconfigure = ini.IniReadValue(section, "URIQuickConfigure", GlobalVars.UserConfiguration.URIQuickConfigure.ToString());
bootstrapper = ini.IniReadValue(section, "BootstrapperShowUI", GlobalVars.UserConfiguration.BootstrapperShowUI.ToString());
webproxysetup = ini.IniReadValue(section, "WebProxyInitialSetupRequired", GlobalVars.UserConfiguration.WebProxyInitialSetupRequired.ToString());
webproxy = ini.IniReadValue(section, "WebProxyEnabled", GlobalVars.UserConfiguration.WebProxyEnabled.ToString());
disablehelpmessage = ConfigUseOldValIfExists(ini, section, "ItemMakerDisableHelpMessage", "AssetSDKDisableHelpMessage", GlobalVars.UserConfiguration.DisabledAssetSDKHelp.ToString(), write);
savebackups = ConfigUseOldValIfExists(ini, section, "AssetLocalizerSaveBackups", "AssetSDKFixerSaveBackups", GlobalVars.UserConfiguration.AssetSDKFixerSaveBackups.ToString(), write);
FileFormat.Config DefaultConfiguration = new FileFormat.Config();
DefaultConfiguration.SelectedClient = GlobalVars.ProgramInformation.DefaultClient;
DefaultConfiguration.Map = GlobalVars.ProgramInformation.DefaultMap;
DefaultConfiguration.MapPath = GlobalPaths.MapsDir + @"\\" + GlobalVars.ProgramInformation.DefaultMap;
DefaultConfiguration.MapPathSnip = GlobalPaths.MapsDirBase + @"\\" + GlobalVars.ProgramInformation.DefaultMap;
GlobalVars.UserConfiguration.CloseOnLaunch = ValueBool(closeonlaunch, DefaultConfiguration.CloseOnLaunch);
if (userid.Equals("0"))
{
NovetusFuncs.GeneratePlayerID();
Config(cfgpath, true);
}
else
{
GlobalVars.UserConfiguration.UserID = ValueInt(userid, DefaultConfiguration.UserID);
}
GlobalVars.UserConfiguration.PlayerName = name;
GlobalVars.UserConfiguration.SelectedClient = selectedclient;
GlobalVars.UserConfiguration.Map = map;
GlobalVars.UserConfiguration.RobloxPort = ValueInt(port, DefaultConfiguration.RobloxPort);
GlobalVars.UserConfiguration.PlayerLimit = ValueInt(limit, DefaultConfiguration.PlayerLimit);
GlobalVars.UserConfiguration.UPnP = ValueBool(upnp, DefaultConfiguration.UPnP);
GlobalVars.UserConfiguration.DisabledAssetSDKHelp = ValueBool(disablehelpmessage, DefaultConfiguration.DisabledAssetSDKHelp);
GlobalVars.UserConfiguration.DiscordPresence = ValueBool(discord, DefaultConfiguration.DiscordPresence);
GlobalVars.UserConfiguration.MapPathSnip = mapsnip;
GlobalVars.UserConfiguration.GraphicsMode = (Settings.Mode)ValueInt(graphics, Convert.ToInt32(DefaultConfiguration.GraphicsMode));
GlobalVars.UserConfiguration.ReShade = ValueBool(reshade, DefaultConfiguration.ReShade);
GlobalVars.UserConfiguration.QualityLevel = (Settings.Level)ValueInt(qualitylevel, Convert.ToInt32(DefaultConfiguration.QualityLevel));
GlobalVars.UserConfiguration.LauncherStyle = (Settings.Style)ValueInt(style, Convert.ToInt32(DefaultConfiguration.LauncherStyle));
GlobalVars.UserConfiguration.AssetSDKFixerSaveBackups = ValueBool(savebackups, DefaultConfiguration.AssetSDKFixerSaveBackups);
GlobalVars.UserConfiguration.AlternateServerIP = altIP;
GlobalVars.UserConfiguration.DisableReshadeDelete = ValueBool(disReshadeDel, DefaultConfiguration.DisableReshadeDelete);
GlobalVars.UserConfiguration.ShowServerNotifications = ValueBool(showNotifs, DefaultConfiguration.ShowServerNotifications);
GlobalVars.UserConfiguration.ServerBrowserServerName = SB_Name;
GlobalVars.UserConfiguration.ServerBrowserServerAddress = SB_Address;
GlobalVars.UserConfiguration.Priority = (ProcessPriorityClass)ValueInt(priority, Convert.ToInt32(DefaultConfiguration.Priority));
GlobalVars.UserConfiguration.FirstServerLaunch = ValueBool(firstServerLaunch, DefaultConfiguration.FirstServerLaunch);
GlobalVars.UserConfiguration.NewGUI = ValueBool(newgui, DefaultConfiguration.NewGUI);
GlobalVars.UserConfiguration.URIQuickConfigure = ValueBool(quickconfigure, DefaultConfiguration.URIQuickConfigure);
GlobalVars.UserConfiguration.BootstrapperShowUI = ValueBool(bootstrapper, DefaultConfiguration.BootstrapperShowUI);
GlobalVars.UserConfiguration.WebProxyInitialSetupRequired = ValueBool(webproxysetup, DefaultConfiguration.WebProxyInitialSetupRequired);
GlobalVars.UserConfiguration.WebProxyEnabled = ValueBool(webproxy, DefaultConfiguration.WebProxyEnabled);
string oldMapath = Path.GetDirectoryName(GlobalVars.UserConfiguration.MapPath);
//update the map path if the file doesn't exist and write to config.
if (oldMapath.Equals(GlobalPaths.MapsDir.Replace(@"\\", @"\")) && File.Exists(mappath))
{
GlobalVars.UserConfiguration.MapPath = mappath;
}
else
{
GlobalVars.UserConfiguration.MapPath = GlobalPaths.BasePath + @"\\" + GlobalVars.UserConfiguration.MapPathSnip;
Config(cfgpath, true);
}
if (ResetMapIfNecessary())
{
Config(cfgpath, true);
}
}
#if URI || LAUNCHER || BASICLAUNCHER
catch (Exception ex)
{
Util.LogExceptions(ex);
#else
catch (Exception)
{
#endif
Config(cfgpath, true);
}
}
if (!forcewrite)
{
string curval = NovetusFuncs.GenerateAndReturnTripcode();
if (!GlobalVars.PlayerTripcode.Equals(curval))
{
GlobalVars.PlayerTripcode = curval;
}
#if !BASICLAUNCHER
if (!File.Exists(GlobalPaths.ConfigDir + "\\" + GlobalPaths.ConfigNameCustomization))
{
Customization(GlobalPaths.ConfigDir + "\\" + GlobalPaths.ConfigNameCustomization, true);
}
else
{
Customization(GlobalPaths.ConfigDir + "\\" + GlobalPaths.ConfigNameCustomization, write);
}
ReShade(GlobalPaths.ConfigDir, "ReShade.ini", write);
#endif
}
}
public static bool ResetMapIfNecessary()
{
if (!File.Exists(GlobalVars.UserConfiguration.MapPath))
{
GlobalVars.UserConfiguration.Map = GlobalVars.ProgramInformation.DefaultMap;
GlobalVars.UserConfiguration.MapPath = GlobalPaths.MapsDir + @"\\" + GlobalVars.ProgramInformation.DefaultMap;
GlobalVars.UserConfiguration.MapPathSnip = GlobalPaths.MapsDirBase + @"\\" + GlobalVars.ProgramInformation.DefaultMap;
return true;
}
return false;
}
public static void Customization(string cfgpath, bool write)
{
if (write)
{
//WRITE
INIFile ini = new INIFile(cfgpath);
string section = "Items";
ini.IniWriteValue(section, "Hat1", GlobalVars.UserCustomization.Hat1.ToString());
ini.IniWriteValue(section, "Hat2", GlobalVars.UserCustomization.Hat2.ToString());
ini.IniWriteValue(section, "Hat3", GlobalVars.UserCustomization.Hat3.ToString());
ini.IniWriteValue(section, "Face", GlobalVars.UserCustomization.Face.ToString());
ini.IniWriteValue(section, "Head", GlobalVars.UserCustomization.Head.ToString());
ini.IniWriteValue(section, "TShirt", GlobalVars.UserCustomization.TShirt.ToString());
ini.IniWriteValue(section, "Shirt", GlobalVars.UserCustomization.Shirt.ToString());
ini.IniWriteValue(section, "Pants", GlobalVars.UserCustomization.Pants.ToString());
ini.IniWriteValue(section, "Icon", GlobalVars.UserCustomization.Icon.ToString());
ini.IniWriteValue(section, "Extra", GlobalVars.UserCustomization.Extra.ToString());
string section2 = "Colors";
ini.IniWriteValue(section2, "HeadColorID", GlobalVars.UserCustomization.HeadColorID.ToString());
ini.IniWriteValue(section2, "HeadColorString", GlobalVars.UserCustomization.HeadColorString.ToString());
ini.IniWriteValue(section2, "TorsoColorID", GlobalVars.UserCustomization.TorsoColorID.ToString());
ini.IniWriteValue(section2, "TorsoColorString", GlobalVars.UserCustomization.TorsoColorString.ToString());
ini.IniWriteValue(section2, "LeftArmColorID", GlobalVars.UserCustomization.LeftArmColorID.ToString());
ini.IniWriteValue(section2, "LeftArmColorString", GlobalVars.UserCustomization.LeftArmColorString.ToString());
ini.IniWriteValue(section2, "RightArmColorID", GlobalVars.UserCustomization.RightArmColorID.ToString());
ini.IniWriteValue(section2, "RightArmColorString", GlobalVars.UserCustomization.RightArmColorString.ToString());
ini.IniWriteValue(section2, "LeftLegColorID", GlobalVars.UserCustomization.LeftLegColorID.ToString());
ini.IniWriteValue(section2, "LeftLegColorString", GlobalVars.UserCustomization.LeftLegColorString.ToString());
ini.IniWriteValue(section2, "RightLegColorID", GlobalVars.UserCustomization.RightLegColorID.ToString());
ini.IniWriteValue(section2, "RightLegColorString", GlobalVars.UserCustomization.RightLegColorString.ToString());
string section3 = "Other";
ini.IniWriteValue(section3, "CharacterID", GlobalVars.UserCustomization.CharacterID.ToString());
ini.IniWriteValue(section3, "ExtraSelectionIsHat", GlobalVars.UserCustomization.ExtraSelectionIsHat.ToString());
ini.IniWriteValue(section3, "ShowHatsOnExtra", GlobalVars.UserCustomization.ShowHatsInExtra.ToString());
}
else
{
//READ
try
{
string hat1, hat2, hat3, face,
head, tshirt, shirt, pants, icon,
extra, headcolorid, headcolorstring, torsocolorid, torsocolorstring,
larmid, larmstring, rarmid, rarmstring, llegid,
llegstring, rlegid, rlegstring, characterid, extraishat, showhatsonextra;
INIFile ini = new INIFile(cfgpath);
string section = "Items";
hat1 = ini.IniReadValue(section, "Hat1", GlobalVars.UserCustomization.Hat1.ToString());
hat2 = ini.IniReadValue(section, "Hat2", GlobalVars.UserCustomization.Hat2.ToString());
hat3 = ini.IniReadValue(section, "Hat3", GlobalVars.UserCustomization.Hat3.ToString());
face = ini.IniReadValue(section, "Face", GlobalVars.UserCustomization.Face.ToString());
head = ini.IniReadValue(section, "Head", GlobalVars.UserCustomization.Head.ToString());
tshirt = ini.IniReadValue(section, "TShirt", GlobalVars.UserCustomization.TShirt.ToString());
shirt = ini.IniReadValue(section, "Shirt", GlobalVars.UserCustomization.Shirt.ToString());
pants = ini.IniReadValue(section, "Pants", GlobalVars.UserCustomization.Pants.ToString());
icon = ini.IniReadValue(section, "Icon", GlobalVars.UserCustomization.Icon.ToString());
extra = ini.IniReadValue(section, "Extra", GlobalVars.UserCustomization.Extra.ToString());
string section2 = "Colors";
headcolorid = ini.IniReadValue(section2, "HeadColorID", GlobalVars.UserCustomization.HeadColorID.ToString());
headcolorstring = ini.IniReadValue(section2, "HeadColorString", GlobalVars.UserCustomization.HeadColorString.ToString());
torsocolorid = ini.IniReadValue(section2, "TorsoColorID", GlobalVars.UserCustomization.TorsoColorID.ToString());
torsocolorstring = ini.IniReadValue(section2, "TorsoColorString", GlobalVars.UserCustomization.TorsoColorString.ToString());
larmid = ini.IniReadValue(section2, "LeftArmColorID", GlobalVars.UserCustomization.LeftArmColorID.ToString());
larmstring = ini.IniReadValue(section2, "LeftArmColorString", GlobalVars.UserCustomization.LeftArmColorString.ToString());
rarmid = ini.IniReadValue(section2, "RightArmColorID", GlobalVars.UserCustomization.RightArmColorID.ToString());
rarmstring = ini.IniReadValue(section2, "RightArmColorString", GlobalVars.UserCustomization.RightArmColorString.ToString());
llegid = ini.IniReadValue(section2, "LeftLegColorID", GlobalVars.UserCustomization.LeftLegColorID.ToString());
llegstring = ini.IniReadValue(section2, "LeftLegColorString", GlobalVars.UserCustomization.LeftLegColorString.ToString());
rlegid = ini.IniReadValue(section2, "RightLegColorID", GlobalVars.UserCustomization.RightLegColorID.ToString());
rlegstring = ini.IniReadValue(section2, "RightLegColorString", GlobalVars.UserCustomization.RightLegColorString.ToString());
string section3 = "Other";
characterid = ini.IniReadValue(section3, "CharacterID", GlobalVars.UserCustomization.CharacterID.ToString());
extraishat = ini.IniReadValue(section3, "ExtraSelectionIsHat", GlobalVars.UserCustomization.ExtraSelectionIsHat.ToString());
showhatsonextra = ini.IniReadValue(section3, "ShowHatsOnExtra", GlobalVars.UserCustomization.ShowHatsInExtra.ToString());
FileFormat.CustomizationConfig DefaultCustomization = new FileFormat.CustomizationConfig();
GlobalVars.UserCustomization.Hat1 = hat1;
GlobalVars.UserCustomization.Hat2 = hat2;
GlobalVars.UserCustomization.Hat3 = hat3;
GlobalVars.UserCustomization.HeadColorID = ValueInt(headcolorid, DefaultCustomization.HeadColorID);
GlobalVars.UserCustomization.TorsoColorID = ValueInt(torsocolorid, DefaultCustomization.TorsoColorID);
GlobalVars.UserCustomization.LeftArmColorID = ValueInt(larmid, DefaultCustomization.LeftArmColorID);
GlobalVars.UserCustomization.RightArmColorID = ValueInt(rarmid, DefaultCustomization.RightArmColorID);
GlobalVars.UserCustomization.LeftLegColorID = ValueInt(llegid, DefaultCustomization.LeftLegColorID);
GlobalVars.UserCustomization.RightLegColorID = ValueInt(rlegid, DefaultCustomization.RightArmColorID);
GlobalVars.UserCustomization.HeadColorString = headcolorstring;
GlobalVars.UserCustomization.TorsoColorString = torsocolorstring;
GlobalVars.UserCustomization.LeftArmColorString = larmstring;
GlobalVars.UserCustomization.RightArmColorString = rarmstring;
GlobalVars.UserCustomization.LeftLegColorString = llegstring;
GlobalVars.UserCustomization.RightLegColorString = rlegstring;
GlobalVars.UserCustomization.Face = face;
GlobalVars.UserCustomization.Head = head;
GlobalVars.UserCustomization.TShirt = tshirt;
GlobalVars.UserCustomization.Shirt = shirt;
GlobalVars.UserCustomization.Pants = pants;
GlobalVars.UserCustomization.Icon = icon;
GlobalVars.UserCustomization.CharacterID = characterid;
GlobalVars.UserCustomization.Extra = extra;
GlobalVars.UserCustomization.ExtraSelectionIsHat = ValueBool(extraishat, DefaultCustomization.ExtraSelectionIsHat);
GlobalVars.UserCustomization.ShowHatsInExtra = ValueBool(showhatsonextra, DefaultCustomization.ShowHatsInExtra);
}
#if URI || LAUNCHER || BASICLAUNCHER
catch (Exception ex)
{
Util.LogExceptions(ex);
#else
catch (Exception)
{
#endif
Customization(cfgpath, true);
}
}
ReloadLoadoutValue();
}
public static void ReShade(string cfgpath, string cfgname, bool write)
{
string fullpath = cfgpath + "\\" + cfgname;
if (!File.Exists(fullpath))
{
Util.FixedFileCopy(GlobalPaths.ConfigDir + "\\ReShade_default.ini", fullpath, false);
ReShadeValues(fullpath, write, true);
}
else
{
ReShadeValues(fullpath, write, true);
}
string clientdir = GlobalPaths.ClientDir;
DirectoryInfo dinfo = new DirectoryInfo(clientdir);
DirectoryInfo[] Dirs = dinfo.GetDirectories();
foreach (DirectoryInfo dir in Dirs)
{
string fulldirpath = dir.FullName + @"\" + cfgname;
string dllfilename = "opengl32.dll";
string fulldllpath = dir.FullName + @"\" + dllfilename;
if (GlobalVars.UserConfiguration.ReShade)
{
if (!File.Exists(fulldirpath))
{
Util.FixedFileCopy(fullpath, fulldirpath, false);
ReShadeValues(fulldirpath, write, false);
}
else
{
ReShadeValues(fulldirpath, write, false);
}
if (!File.Exists(fulldllpath))
{
Util.FixedFileCopy(GlobalPaths.DataDir + "\\" + dllfilename, fulldllpath, false);
}
}
else
{
Util.FixedFileDelete(fulldirpath);
if (!GlobalVars.UserConfiguration.DisableReshadeDelete)
{
Util.FixedFileDelete(fulldllpath);
}
}
}
}
public static void ReShadeValues(string cfgpath, bool write, bool setglobals)
{
if (write)
{
//WRITE
INIFile ini = new INIFile(cfgpath);
string section = "GENERAL";
string section2 = "OVERLAY";
int FPS = GlobalVars.UserConfiguration.ReShadeFPSDisplay ? 1 : 0;
ini.IniWriteValue(section2, "ShowFPS", FPS.ToString());
ini.IniWriteValue(section2, "ShowFrameTime", FPS.ToString());
int PerformanceMode = GlobalVars.UserConfiguration.ReShadePerformanceMode ? 1 : 0;
ini.IniWriteValue(section, "PerformanceMode", PerformanceMode.ToString());
}
else
{
//READ
string framerate, frametime, performance;
INIFile ini = new INIFile(cfgpath);
string section = "GENERAL";
string section2 = "OVERLAY";
int FPS = GlobalVars.UserConfiguration.ReShadeFPSDisplay ? 1 : 0;
framerate = ini.IniReadValue(section2, "ShowFPS", FPS.ToString());
frametime = ini.IniReadValue(section2, "ShowFrameTime", FPS.ToString());
int PerformanceMode = GlobalVars.UserConfiguration.ReShadePerformanceMode ? 1 : 0;
performance = ini.IniReadValue(section, "PerformanceMode", PerformanceMode.ToString());
if (setglobals)
{
try
{
switch (ValueInt(framerate, 0))
{
case int showFPSLine when showFPSLine == 1 && Convert.ToInt32(frametime) == 1:
GlobalVars.UserConfiguration.ReShadeFPSDisplay = true;
break;
default:
GlobalVars.UserConfiguration.ReShadeFPSDisplay = false;
break;
}
switch (ValueInt(performance, 0))
{
case 1:
GlobalVars.UserConfiguration.ReShadePerformanceMode = true;
break;
default:
GlobalVars.UserConfiguration.ReShadePerformanceMode = false;
break;
}
}
#if URI || LAUNCHER || BASICLAUNCHER
catch (Exception ex)
{
Util.LogExceptions(ex);
#else
catch (Exception)
{
#endif
ReShadeValues(cfgpath, true, setglobals);
}
}
}
}
public static bool InitColors()
{
try
{
if (File.Exists(GlobalPaths.ConfigDir + "\\" + GlobalPaths.PartColorXMLName))
{
GlobalVars.PartColorList = PartColorLoader.GetPartColors();
GlobalVars.PartColorListConv = new List<PartColor>();
GlobalVars.PartColorListConv.AddRange(GlobalVars.PartColorList);
return true;
}
else
{
goto Failure;
}
}
#if URI || LAUNCHER || BASICLAUNCHER
catch (Exception ex)
{
Util.LogExceptions(ex);
#else
catch (Exception)
{
#endif
goto Failure;
}
Failure:
return false;
}
public static bool HasColorsChanged()
{
try
{
PartColor[] tempList;
if (File.Exists(GlobalPaths.ConfigDir + "\\" + GlobalPaths.PartColorXMLName))
{
tempList = PartColorLoader.GetPartColors();
if (tempList.Length != GlobalVars.PartColorList.Length)
{
return true;
}
else
{
return false;
}
}
else
{
goto Failure;
}
}
#if URI || LAUNCHER || BASICLAUNCHER
catch (Exception ex)
{
Util.LogExceptions(ex);
#else
catch (Exception)
{
#endif
goto Failure;
}
Failure:
return false;
}
#if LAUNCHER
public static void ResetConfigValues(Settings.Style style)
#else
public static void ResetConfigValues()
#endif
{
bool WebProxySetupComplete = GlobalVars.UserConfiguration.WebProxyInitialSetupRequired;
bool WebProxy = GlobalVars.UserConfiguration.WebProxyEnabled;
GlobalVars.UserConfiguration = new FileFormat.Config();
GlobalVars.UserConfiguration.SelectedClient = GlobalVars.ProgramInformation.DefaultClient;
GlobalVars.UserConfiguration.Map = GlobalVars.ProgramInformation.DefaultMap;
GlobalVars.UserConfiguration.MapPath = GlobalPaths.MapsDir + @"\\" + GlobalVars.ProgramInformation.DefaultMap;
GlobalVars.UserConfiguration.MapPathSnip = GlobalPaths.MapsDirBase + @"\\" + GlobalVars.ProgramInformation.DefaultMap;
#if LAUNCHER
GlobalVars.UserConfiguration.LauncherStyle = style;
#endif
GlobalVars.UserConfiguration.WebProxyInitialSetupRequired = WebProxySetupComplete;
GlobalVars.UserConfiguration.WebProxyEnabled = WebProxy;
NovetusFuncs.GeneratePlayerID();
ResetCustomizationValues();
}
public static void ResetCustomizationValues()
{
GlobalVars.UserCustomization = new FileFormat.CustomizationConfig();
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";
string hat3 = (!GlobalVars.UserCustomization.Hat3.EndsWith("-Solo.rbxm")) ? GlobalVars.UserCustomization.Hat3 : "NoHat.rbxm";
string extra = (!GlobalVars.UserCustomization.Extra.EndsWith("-Solo.rbxm")) ? GlobalVars.UserCustomization.Extra : "NoExtra.rbxm";
GlobalVars.Loadout = "'" + hat1 + "','" +
hat2 + "','" +
hat3 + "'," +
GlobalVars.UserCustomization.HeadColorID + "," +
GlobalVars.UserCustomization.TorsoColorID + "," +
GlobalVars.UserCustomization.LeftArmColorID + "," +
GlobalVars.UserCustomization.RightArmColorID + "," +
GlobalVars.UserCustomization.LeftLegColorID + "," +
GlobalVars.UserCustomization.RightLegColorID + ",'" +
GlobalVars.UserCustomization.TShirt + "','" +
GlobalVars.UserCustomization.Shirt + "','" +
GlobalVars.UserCustomization.Pants + "','" +
GlobalVars.UserCustomization.Face + "','" +
GlobalVars.UserCustomization.Head + "','" +
GlobalVars.UserCustomization.Icon + "','" +
extra + "'";
GlobalVars.soloLoadout = "'" + GlobalVars.UserCustomization.Hat1 + "','" +
GlobalVars.UserCustomization.Hat2 + "','" +
GlobalVars.UserCustomization.Hat3 + "'," +
GlobalVars.UserCustomization.HeadColorID + "," +
GlobalVars.UserCustomization.TorsoColorID + "," +
GlobalVars.UserCustomization.LeftArmColorID + "," +
GlobalVars.UserCustomization.RightArmColorID + "," +
GlobalVars.UserCustomization.LeftLegColorID + "," +
GlobalVars.UserCustomization.RightLegColorID + ",'" +
GlobalVars.UserCustomization.TShirt + "','" +
GlobalVars.UserCustomization.Shirt + "','" +
GlobalVars.UserCustomization.Pants + "','" +
GlobalVars.UserCustomization.Face + "','" +
GlobalVars.UserCustomization.Head + "','" +
GlobalVars.UserCustomization.Icon + "','" +
GlobalVars.UserCustomization.Extra + "'";
if (localizeOnlineClothing)
{
GlobalVars.TShirtTextureID = NovetusFuncs.GetItemTextureID(GlobalVars.UserCustomization.TShirt, "TShirt", new AssetCacheDefBasic("ShirtGraphic", new string[] { "Graphic" }));
GlobalVars.ShirtTextureID = NovetusFuncs.GetItemTextureID(GlobalVars.UserCustomization.Shirt, "Shirt", new AssetCacheDefBasic("Shirt", new string[] { "ShirtTemplate" }));
GlobalVars.PantsTextureID = NovetusFuncs.GetItemTextureID(GlobalVars.UserCustomization.Pants, "Pants", new AssetCacheDefBasic("Pants", new string[] { "PantsTemplate" }));
GlobalVars.FaceTextureID = NovetusFuncs.GetItemTextureID(GlobalVars.UserCustomization.Face, "Face", new AssetCacheDefBasic("Decal", new string[] { "Texture" }));
GlobalVars.TShirtTextureLocal = NovetusFuncs.GetItemTextureLocalPath(GlobalVars.TShirtTextureID, "TShirt");
GlobalVars.ShirtTextureLocal = NovetusFuncs.GetItemTextureLocalPath(GlobalVars.ShirtTextureID, "Shirt");
GlobalVars.PantsTextureLocal = NovetusFuncs.GetItemTextureLocalPath(GlobalVars.PantsTextureID, "Pants");
GlobalVars.FaceTextureLocal = NovetusFuncs.GetItemTextureLocalPath(GlobalVars.FaceTextureID, "Face");
}
}
public static void CreateAssetCacheDirectories()
{
if (!Directory.Exists(GlobalPaths.AssetCacheDirAssets))
{
Directory.CreateDirectory(GlobalPaths.AssetCacheDirAssets);
}
}
public static void CreateInitialFileListIfNeededMulti()
{
if (GlobalVars.NoFileList)
return;
string filePath = GlobalPaths.ConfigDir + "\\InitialFileList.txt";
if (!File.Exists(filePath))
{
Util.ConsolePrint("WARNING - No file list detected. Generating Initial File List.", 5);
Thread t = new Thread(CreateInitialFileList);
t.IsBackground = true;
t.Start();
}
else
{
int lineCount = File.ReadLines(filePath).Count();
int fileCount = 0;
string filterPath = GlobalPaths.ConfigDir + @"\\" + GlobalPaths.InitialFileListIgnoreFilterName;
string[] fileListToIgnore = File.ReadAllLines(filterPath);
DirectoryInfo dinfo = new DirectoryInfo(GlobalPaths.RootPath);
FileInfo[] Files = dinfo.GetFiles("*.*", SearchOption.AllDirectories);
foreach (FileInfo file in Files)
{
DirectoryInfo localdinfo = new DirectoryInfo(file.DirectoryName);
string directory = localdinfo.Name;
if (!fileListToIgnore.Contains(file.Name, StringComparer.InvariantCultureIgnoreCase) && !fileListToIgnore.Contains(directory, StringComparer.InvariantCultureIgnoreCase))
{
fileCount++;
}
else
{
continue;
}
}
//MessageBox.Show(lineCount + "\n" + fileCount);
if (lineCount != fileCount)
{
Util.ConsolePrint("WARNING - Initial File List is not relevant to file path. Regenerating.", 5);
Thread t = new Thread(CreateInitialFileList);
t.IsBackground = true;
t.Start();
}
}
}
private static void CreateInitialFileList()
{
string filterPath = GlobalPaths.ConfigDir + @"\\" + GlobalPaths.InitialFileListIgnoreFilterName;
string[] fileListToIgnore = File.ReadAllLines(filterPath);
string FileName = GlobalPaths.ConfigDir + "\\InitialFileList.txt";
File.Create(FileName).Close();
using (var txt = File.CreateText(FileName))
{
DirectoryInfo dinfo = new DirectoryInfo(GlobalPaths.RootPath);
FileInfo[] Files = dinfo.GetFiles("*.*", SearchOption.AllDirectories);
foreach (FileInfo file in Files)
{
DirectoryInfo localdinfo = new DirectoryInfo(file.DirectoryName);
string directory = localdinfo.Name;
if (!fileListToIgnore.Contains(file.Name, StringComparer.InvariantCultureIgnoreCase) && !fileListToIgnore.Contains(directory, StringComparer.InvariantCultureIgnoreCase))
{
txt.WriteLine(file.FullName);
}
else
{
continue;
}
}
}
Util.ConsolePrint("File list generation finished.", 4);
}
}
#endregion
}