updated files

This commit is contained in:
Bitl 2023-11-24 12:38:01 -07:00
parent b3afe2a48e
commit 129db484ac
15 changed files with 242 additions and 67 deletions

View File

@ -9,6 +9,7 @@
<RootNamespace>Novetus.Bootstrapper</RootNamespace>
<AssemblyName>NovetusBootstrapper</AssemblyName>
<TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>
<LangVersion>8.0</LangVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>false</Deterministic>
<TargetFrameworkProfile />

View File

@ -0,0 +1,140 @@
using Microsoft.Win32;
using System.Collections.Generic;
using System.ComponentModel;
// Original code made by Matt, originally intended for Sodikm 1.2.
// Slight modifications and cleanup for Novetus by Bitl.
namespace Novetus.Core
{
/// <summary>
/// VC++ redists to check
/// </summary>
public enum VCPPRedist
{
/// <summary>
/// Don't check redist
/// </summary>
None,
/// <summary>
/// VC++ 2005 redist
/// </summary>
[Description("Visual C++ 2005 SP1 Redistributables")]
VCPP2005,
/// <summary>
/// VC++ 2008 redist
/// </summary>
[Description("Visual C++ 2008 Redistributables")]
VCPP2008,
/// <summary>
/// VC++ 2012 redist
/// </summary>
[Description("Visual C++ 2012 Redistributables")]
VCPP2012
}
public class VCPPRedistInstallationDetector
{
/// <summary>
/// Which key in "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\"
/// </summary>
private enum RedistKeyLocation
{
/// <summary>
/// VC++2010 and below
/// </summary>
Products,
/// <summary>
/// VC++2012 and above
/// </summary>
Dependencies
}
/// <summary>
/// Information about where the redist is
/// </summary>
private struct RedistInformation
{
/// <summary>
/// Key location
/// </summary>
public RedistKeyLocation Location { get; }
/// <summary>
/// Possible keys
/// </summary>
public string[] Keys { get; }
public RedistInformation(RedistKeyLocation location, string[] keys)
{
Location = location;
Keys = keys;
}
}
/// <summary>
/// VC++ redist enum to redist infos. <br/>
/// Value is a list because VC++2012 has possible two redist keys for some reason. <br/>
/// Installer keys for VC redists can be found at https://stackoverflow.com/a/34209692.
/// </summary>
private static Dictionary<VCPPRedist, RedistInformation> _VCRedistToRedistKeysMap = new Dictionary<VCPPRedist, RedistInformation>()
{
[VCPPRedist.VCPP2005] = new RedistInformation(RedistKeyLocation.Products, new[] { "c1c4f01781cc94c4c8fb1542c0981a2a" }),
[VCPPRedist.VCPP2008] = new RedistInformation(RedistKeyLocation.Products, new[] { "6E815EB96CCE9A53884E7857C57002F0" }),
[VCPPRedist.VCPP2012] = new RedistInformation(RedistKeyLocation.Dependencies, new[] { "{33d1fd90-4274-48a1-9bc1-97e33d9c2d6f}", "{95716cce-fc71-413f-8ad5-56c2892d4b3a}" })
};
/// <summary>
/// Cached installation results.
/// </summary>
private static Dictionary<VCPPRedist, bool> _VCRedistResults = new Dictionary<VCPPRedist, bool>()
{
[VCPPRedist.None] = true
};
/// <summary>
/// Checks if redist exists.
/// </summary>
/// <param name="information">Redist information</param>
/// <returns>Exists</returns>
private static bool CheckIfInstallerKeyExists(RedistInformation information)
{
string path = information.Location.ToString();
foreach (string key in information.Keys)
{
using RegistryKey? redist = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Classes\Installer\" + path + @"\" + key);
if (redist != null)
return true;
}
return false;
}
/// <summary>
/// Check if a VC++ redist is installed
/// </summary>
/// <param name="redist">VC++ redist version</param>
/// <returns>Is installed</returns>
public static bool IsInstalled(VCPPRedist redist) => _VCRedistResults[redist];
/// <summary>
/// Checks for all keys
/// </summary>
static VCPPRedistInstallationDetector()
{
foreach (var kvPair in _VCRedistToRedistKeysMap)
{
VCPPRedist redist = kvPair.Key;
RedistInformation information = kvPair.Value;
bool installed = CheckIfInstallerKeyExists(information);
_VCRedistResults[redist] = installed;
}
}
}
}

View File

@ -50,7 +50,7 @@ namespace Novetus.Core
"NOTE: The Web proxy feature requires an Internet connection to function properly.\n\n" +
"This message will appear only once.\n";
DialogResult result = MessageBox.Show(text, "Novetus - Web Proxy Opt-In", MessageBoxButtons.YesNo);
DialogResult result = MessageBox.Show(text, "Novetus - Web Proxy Opt-In", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
switch (result)
{

View File

@ -12,6 +12,7 @@
<Compile Include="$(MSBuildThisFileDirectory)Classes\INIFile.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Classes\Script.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Classes\SemaphoreLocker.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Classes\VCPPRedistInstallationDetector.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Classes\WebProxy.cs" />
<Compile Include="$(MSBuildThisFileDirectory)StorageAndFunctions\ClientManagement.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Classes\Downloader.cs" />

View File

@ -143,8 +143,8 @@ namespace Novetus.Core
public void SaveSetting(string section, string name, string value)
{
INI.IniWriteValue(section, name, value);
SaveSettingEvent();
INI.IniWriteValue(section, name, value);
}
public void SaveSettingInt(string name, int value)
@ -195,6 +195,7 @@ namespace Novetus.Core
}
SaveSetting(section, name, defaultval);
ReadSettingEvent();
return INI.IniReadValue(section, name);
}
}
@ -254,8 +255,8 @@ namespace Novetus.Core
public override void DefineDefaults()
{
ValueDefaults = new Dictionary<string, string>(){
{"SelectedClient", ""},
{"Map", ""},
{"SelectedClient", GlobalVars.ProgramInformation.DefaultClient},
{"Map", GlobalVars.ProgramInformation.DefaultMap},
{"CloseOnLaunch", Util.BoolValue(false)},
{"UserID", Util.IntValue(NovetusFuncs.GeneratePlayerID())},
{"PlayerName", "Player"},
@ -264,8 +265,8 @@ namespace Novetus.Core
{"UPnP", Util.BoolValue(false)},
{"DisabledAssetSDKHelp", Util.BoolValue(false)},
{"DiscordRichPresence", Util.BoolValue(true)},
{"MapPath", ""},
{"MapPathSnip", ""},
{"MapPath", GlobalPaths.MapsDir + @"\\" + GlobalVars.ProgramInformation.DefaultMap},
{"MapPathSnip", GlobalPaths.MapsDirBase + @"\\" + GlobalVars.ProgramInformation.DefaultMap},
{"GraphicsMode", Util.IntValue((int)Settings.Mode.Automatic)},
{"QualityLevel", Util.IntValue((int)Settings.Level.Automatic)},
{"LauncherStyle", (Util.IsWineRunning() ? Util.IntValue((int)Settings.Style.Stylish) : Util.IntValue((int)Settings.Style.Extended))},
@ -328,14 +329,15 @@ namespace Novetus.Core
#region Program Information
public class ProgramInfo
{
// Defaults are hacky but fixes the errors on intital startup.
public ProgramInfo()
{
Version = "";
Branch = "";
DefaultClient = "";
DefaultClient = "2009E";
RegisterClient1 = "";
RegisterClient2 = "";
DefaultMap = "";
DefaultMap = "Dev - Baseplate2048.rbxl.bz2";
VersionName = "";
//HACK
NetVersion = ".NET Framework 4.5.1";
@ -739,7 +741,7 @@ namespace Novetus.Core
{
string rev = revision.ToString();
if (rev.Length > 0 && rev.Length >= 4)
if (rev.Length > 0 && rev.Length >= 5)
{
string posString = rev.Substring(rev.Length - 4);
@ -838,7 +840,6 @@ namespace Novetus.Core
GlobalVars.ProgramInformation.InitialBootup = Convert.ToBoolean(initialBootup);
GlobalVars.ProgramInformation.VersionName = verNumber;
GlobalVars.ProgramInformation.IsSnapshot = Convert.ToBoolean(isSnapshot);
RegisterDefaults();
}
catch (Exception ex)
{
@ -847,14 +848,6 @@ namespace Novetus.Core
}
}
public static void RegisterDefaults()
{
GlobalVars.UserConfiguration.SaveSetting("SelectedClient", GlobalVars.ProgramInformation.DefaultClient);
GlobalVars.UserConfiguration.SaveSetting("Map", GlobalVars.ProgramInformation.DefaultMap);
GlobalVars.UserConfiguration.SaveSetting("MapPath", GlobalPaths.MapsDir + @"\\" + GlobalVars.ProgramInformation.DefaultMap);
GlobalVars.UserConfiguration.SaveSetting("MapPathSnip", GlobalPaths.MapsDirBase + @"\\" + GlobalVars.ProgramInformation.DefaultMap);
}
public static void TurnOffInitialSequence()
{
//READ

View File

@ -128,6 +128,44 @@ namespace NovetusLauncher
LocalVars.launcherInitState = false;
}
// very hacky but hear me out
bool VC2005 = VCPPRedistInstallationDetector.IsInstalled(VCPPRedist.VCPP2005);
bool VC2008 = VCPPRedistInstallationDetector.IsInstalled(VCPPRedist.VCPP2008);
bool VC2012 = VCPPRedistInstallationDetector.IsInstalled(VCPPRedist.VCPP2012);
bool isAnyInstalled = VC2005 && VC2008 && VC2012;
string notInstalledText = "";
if (!isAnyInstalled)
{
if (!VC2005)
{
Util.ConsolePrint("WARNING - Visual C++ 2005 SP1 Redistributables have not been found. Some clients may not launch.", 5);
notInstalledText += "Visual C++ 2005 SP1 Redistributables\n";
}
if (!VC2008)
{
Util.ConsolePrint("WARNING - Visual C++ 2008 Redistributables have not been found. Some clients may not launch.", 5);
notInstalledText += "Visual C++ 2008 Redistributables\n";
}
if (!VC2012)
{
Util.ConsolePrint("WARNING - Visual C++ 2012 Redistributables have not been found. Some clients may not launch.", 5);
notInstalledText += "Visual C++ 2012 Redistributables\n";
}
string text = "Novetus has detected that the following dependencies are not installed:\n\n"
+ notInstalledText
+ "\n\nIt is recomended to download these dependencies from the Microsoft website. Installing these will prevent errors upon starting up a client, like 'side-by-side configuration' errors.";
MessageBox.Show(text, "Novetus - Dependency Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
else
{
Util.ConsolePrint("All client dependencies are installed.", 4);
}
GlobalVars.Proxy.DoSetup();
}

View File

@ -21,7 +21,6 @@ namespace NovetusLauncher
bool helpMode = false;
bool disableCommands = false;
string[] argList;
FileFormat.Config cmdConfig;
public NovetusConsole()
{
@ -85,8 +84,6 @@ namespace NovetusLauncher
return;
}
cmdConfig = GlobalVars.UserConfiguration;
//disableCommands = true;
bool no3d = false;
bool nomap = false;
@ -123,7 +120,7 @@ namespace NovetusLauncher
if (ConsoleArgs["client"] != null)
{
cmdConfig.SaveSetting("SelectedClient", ConsoleArgs["client"]);
GlobalVars.UserConfiguration.SaveSetting("SelectedClient", ConsoleArgs["client"]);
}
else
{
@ -153,14 +150,14 @@ namespace NovetusLauncher
if (ConsoleArgs["hostport"] != null)
{
cmdConfig.SaveSettingInt("RobloxPort", Convert.ToInt32(ConsoleArgs["hostport"]));
GlobalVars.UserConfiguration.SaveSettingInt("RobloxPort", Convert.ToInt32(ConsoleArgs["hostport"]));
}
if (ConsoleArgs["upnp"] != null)
{
cmdConfig.SaveSettingBool("UPnP", Convert.ToBoolean(ConsoleArgs["upnp"]));
GlobalVars.UserConfiguration.SaveSettingBool("UPnP", Convert.ToBoolean(ConsoleArgs["upnp"]));
if (cmdConfig.ReadSettingBool("UPnP"))
if (GlobalVars.UserConfiguration.ReadSettingBool("UPnP"))
{
Util.ConsolePrint("Novetus will now use UPnP for port forwarding.", 4);
}
@ -172,9 +169,9 @@ namespace NovetusLauncher
if (ConsoleArgs["notifications"] != null)
{
cmdConfig.SaveSettingBool("ShowServerNotifications", Convert.ToBoolean(ConsoleArgs["notifications"]));
GlobalVars.UserConfiguration.SaveSettingBool("ShowServerNotifications", Convert.ToBoolean(ConsoleArgs["notifications"]));
if (cmdConfig.ReadSettingBool("ShowServerNotifications"))
if (GlobalVars.UserConfiguration.ReadSettingBool("ShowServerNotifications"))
{
Util.ConsolePrint("Novetus will show notifications on player join/leave.", 4);
}
@ -186,17 +183,17 @@ namespace NovetusLauncher
if (ConsoleArgs["maxplayers"] != null)
{
cmdConfig.SaveSettingInt("PlayerLimit", Convert.ToInt32(ConsoleArgs["maxplayers"]));
GlobalVars.UserConfiguration.SaveSettingInt("PlayerLimit", Convert.ToInt32(ConsoleArgs["maxplayers"]));
}
if (ConsoleArgs["serverbrowsername"] != null)
{
cmdConfig.SaveSetting("ServerBrowserServerName", ConsoleArgs["serverbrowsername"]);
GlobalVars.UserConfiguration.SaveSetting("ServerBrowserServerName", ConsoleArgs["serverbrowsername"]);
}
if (ConsoleArgs["serverbrowseraddress"] != null)
{
cmdConfig.SaveSetting("ServerBrowserServerAddress", ConsoleArgs["serverbrowseraddress"]);
GlobalVars.UserConfiguration.SaveSetting("ServerBrowserServerAddress", ConsoleArgs["serverbrowseraddress"]);
}
MapArg(ConsoleArgs);
@ -228,19 +225,15 @@ namespace NovetusLauncher
ConsoleForm.StartGame(loadMode, no3d, nomap, true);
}
else
{
cmdConfig = new FileFormat.Config("cmdconfig.ini");
}
}
public void MapArg (CommandLineArguments.Arguments ConsoleArgs)
{
if (ConsoleArgs["map"] != null)
{
cmdConfig.SaveSetting("Map", ConsoleArgs["map"]);
cmdConfig.SaveSetting("MapPath", ConsoleArgs["map"]);
Util.ConsolePrint("Novetus will now launch the client with the map " + cmdConfig.ReadSetting("MapPath"), 4);
GlobalVars.UserConfiguration.SaveSetting("Map", ConsoleArgs["map"]);
GlobalVars.UserConfiguration.SaveSetting("MapPath", ConsoleArgs["map"]);
Util.ConsolePrint("Novetus will now launch the client with the map " + GlobalVars.UserConfiguration.ReadSetting("MapPath"), 4);
}
else
{
@ -361,13 +354,13 @@ namespace NovetusLauncher
if (vals[1].Equals("none", StringComparison.InvariantCultureIgnoreCase))
{
cmdConfig.SaveSetting("AlternateServerIP");
GlobalVars.UserConfiguration.SaveSetting("AlternateServerIP");
Util.ConsolePrint("Alternate Server IP removed.", 4);
}
else
{
cmdConfig.SaveSetting("AlternateServerIP", vals[1]);
Util.ConsolePrint("Alternate Server IP set to " + cmdConfig.ReadSetting("AlternateServerIP"), 4);
GlobalVars.UserConfiguration.SaveSetting("AlternateServerIP", vals[1]);
Util.ConsolePrint("Alternate Server IP set to " + GlobalVars.UserConfiguration.ReadSetting("AlternateServerIP"), 4);
}
}
catch (Exception)
@ -398,7 +391,7 @@ namespace NovetusLauncher
if (vals[1].Equals("on", StringComparison.InvariantCultureIgnoreCase))
{
if (cmdConfig.ReadSettingBool("WebProxyInitialSetupRequired"))
if (GlobalVars.UserConfiguration.ReadSettingBool("WebProxyInitialSetupRequired"))
{
// this is wierd and really dumb if we are just using console mode.....
GlobalVars.Proxy.DoSetup();
@ -406,9 +399,9 @@ namespace NovetusLauncher
else
{
// fast start it.
if (!cmdConfig.ReadSettingBool("WebProxyEnabled"))
if (!GlobalVars.UserConfiguration.ReadSettingBool("WebProxyEnabled"))
{
cmdConfig.SaveSettingBool("WebProxyEnabled", true);
GlobalVars.UserConfiguration.SaveSettingBool("WebProxyEnabled", true);
}
GlobalVars.Proxy.Start();
@ -416,7 +409,7 @@ namespace NovetusLauncher
}
else if (vals[1].Equals("off", StringComparison.InvariantCultureIgnoreCase))
{
if (!GlobalVars.Proxy.Started && !cmdConfig.ReadSettingBool("WebProxyEnabled"))
if (!GlobalVars.Proxy.Started && !GlobalVars.UserConfiguration.ReadSettingBool("WebProxyEnabled"))
{
Util.ConsolePrint("The web proxy is disabled. Please turn it on in order to use this command.", 2);
return;
@ -426,15 +419,15 @@ namespace NovetusLauncher
}
else if (vals[1].Equals("disable", StringComparison.InvariantCultureIgnoreCase))
{
if (!GlobalVars.Proxy.Started && !cmdConfig.ReadSettingBool("WebProxyEnabled"))
if (!GlobalVars.Proxy.Started && !GlobalVars.UserConfiguration.ReadSettingBool("WebProxyEnabled"))
{
Util.ConsolePrint("The web proxy is already disabled.", 2);
return;
}
if (cmdConfig.ReadSettingBool("WebProxyEnabled"))
if (GlobalVars.UserConfiguration.ReadSettingBool("WebProxyEnabled"))
{
cmdConfig.SaveSettingBool("WebProxyEnabled", false);
GlobalVars.UserConfiguration.SaveSettingBool("WebProxyEnabled", false);
}
GlobalVars.Proxy.Stop();
@ -443,7 +436,7 @@ namespace NovetusLauncher
}
else if (vals[1].Equals("extensions", StringComparison.InvariantCultureIgnoreCase))
{
if (!GlobalVars.Proxy.Started && !cmdConfig.ReadSettingBool("WebProxyEnabled"))
if (!GlobalVars.Proxy.Started && !GlobalVars.UserConfiguration.ReadSettingBool("WebProxyEnabled"))
{
Util.ConsolePrint("The web proxy is disabled. Please turn it on in order to use this command.", 2);
return;

View File

@ -8,6 +8,7 @@
<RootNamespace>NovetusLauncher</RootNamespace>
<AssemblyName>Novetus</AssemblyName>
<TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>
<LangVersion>8.0</LangVersion>
<TargetFrameworkProfile>
</TargetFrameworkProfile>
<AppDesignerFolder>Properties</AppDesignerFolder>

View File

@ -25,7 +25,6 @@ namespace NovetusLauncher
}
static bool formsOpen = false;
static LauncherFormShared entryPointForm;
/// <summary>
/// Program entry point.
@ -35,7 +34,6 @@ namespace NovetusLauncher
{
System.Windows.Forms.Application.EnableVisualStyles();
System.Windows.Forms.Application.SetCompatibleTextRenderingDefault(false);
entryPointForm = new LauncherFormShared();
if (!Directory.Exists(GlobalPaths.LogDir))
{
@ -49,6 +47,7 @@ namespace NovetusLauncher
FileManagement.ReadInfoFile(GlobalPaths.ConfigDir + "\\" + GlobalPaths.InfoName,
GlobalPaths.ConfigDir + "\\" + GlobalPaths.TermListFileName);
GlobalVars.ColorsLoaded = FileManagement.InitColors();
bool isSDK = false;

View File

@ -10,6 +10,7 @@
<RootNamespace>NovetusURI</RootNamespace>
<AssemblyName>NovetusURI</AssemblyName>
<TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>
<LangVersion>8.0</LangVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<TargetFrameworkProfile />

View File

@ -1,6 +1,16 @@
EDGE Snapshot v23.8728.22429.2
Fixes:
- Fixed missing clientinfo error on intital launch.
----------------------------------------------------------------------------
EDGE Snapshot v23.8724.27074.1
Enhancements:
- Added proper metatable protection on all affected clients. (2006S-2010L)
- Downgraded Novetus to .NET Framework 4.5.1 for better WINE/Proton compatibility.
- Added the ability for Novetus to detect if Visual C++ dependencies are installed.
- Credit to Matt from Sodikm for the code for this feature. :D
Fixes:
- Fixed issues with the new config system.
----------------------------------------------------------------------------
EDGE Snapshot v23.8700.30967.1
Notes:

View File

@ -16,7 +16,6 @@ if not exist "%gamescriptdir%/2009E" mkdir "%gamescriptdir%/2009E"
if not exist "%gamescriptdir%/2009E-HD" mkdir "%gamescriptdir%/2009E-HD"
if not exist "%gamescriptdir%/2009L" mkdir "%gamescriptdir%/2009L"
if not exist "%gamescriptdir%/2010L" mkdir "%gamescriptdir%/2010L"
if not exist "%gamescriptdir%/2011E" mkdir "%gamescriptdir%/2011E"
if not exist "%gamescriptdir%/2011M" mkdir "%gamescriptdir%/2011M"
if not exist "%gamescriptdir%/2012M" mkdir "%gamescriptdir%/2012M"
@ -32,18 +31,9 @@ XCOPY "%cd%\Novetus\clients\2009E\content\scripts\CSMPFunctions.lua" "%gamescrip
XCOPY "%cd%\Novetus\clients\2009E-HD\content\scripts\CSMPFunctions.lua" "%gamescriptdir%/2009E-HD" /y
XCOPY "%cd%\Novetus\clients\2009L\content\scripts\CSMPFunctions.lua" "%gamescriptdir%/2009L" /y
XCOPY "%cd%\Novetus\clients\2010L\content\scripts\CSMPFunctions.lua" "%gamescriptdir%/2010L" /y
XCOPY "%cd%\Novetus\clients\2011E\content\scripts\CSMPFunctions.lua" "%gamescriptdir%/2011E" /y
XCOPY "%cd%\Novetus\clients\2011M\content\scripts\CSMPFunctions.lua" "%gamescriptdir%/2011M" /y
XCOPY "%cd%\Novetus\clients\2012M\content\scripts\CSMPFunctions.lua" "%gamescriptdir%/2012M" /y
echo.
echo Copying client corescripts...
echo.
echo 2011E
SET ecores=%gamescriptdir%\2011E\cores
if not exist "%ecores%" mkdir "%ecores%"
XCOPY "%cd%\Novetus\clients\2011E\content\scripts\cores\*.lua" "%ecores%" /sy
echo.
echo 2011M
SET mcores=%gamescriptdir%\2011M\cores
@ -69,7 +59,6 @@ XCOPY "%cd%\Novetus\clients\2009E\content\fonts\libraries.rbxm" "%gamescriptdir%
XCOPY "%cd%\Novetus\clients\2009E-HD\content\fonts\libraries.rbxm" "%gamescriptdir%/2009E-HD" /y
XCOPY "%cd%\Novetus\clients\2009L\content\fonts\libraries.rbxm" "%gamescriptdir%/2009L" /y
XCOPY "%cd%\Novetus\clients\2010L\content\fonts\libraries.rbxm" "%gamescriptdir%/2010L" /y
XCOPY "%cd%\Novetus\clients\2011E\content\fonts\libraries.rbxm" "%gamescriptdir%/2011E" /y
XCOPY "%cd%\Novetus\clients\2011M\content\fonts\libraries.rbxm" "%gamescriptdir%/2011M" /y
XCOPY "%cd%\Novetus\clients\2012M\content\fonts\libraries.rbxm" "%gamescriptdir%/2012M" /y
@ -84,7 +73,6 @@ del /s /q "%tempdir%\GlobalSettings_4_2009E.xml"
del /s /q "%tempdir%\GlobalSettings_4_2009E-HD.xml"
del /s /q "%tempdir%\GlobalSettings_4_2009L.xml"
del /s /q "%tempdir%\GlobalSettings_4_2010L.xml"
del /s /q "%tempdir%\GlobalSettings_4_2011E.xml"
del /s /q "%tempdir%\GlobalSettings_4_2011M.xml"
del /s /q "%tempdir%\GlobalSettings4_2006S.xml"
del /s /q "%tempdir%\GlobalSettings4_2006S-Shaders.xml"
@ -99,7 +87,6 @@ XCOPY "%tempdir%\GlobalSettings_4_2009E_default.xml" "%gamescriptdir%/2009E" /y
XCOPY "%tempdir%\GlobalSettings_4_2009E-HD_default.xml" "%gamescriptdir%/2009E-HD" /y
XCOPY "%tempdir%\GlobalSettings_4_2009L_default.xml" "%gamescriptdir%/2009L" /y
XCOPY "%tempdir%\GlobalSettings_4_2010L_default.xml" "%gamescriptdir%/2010L" /y
XCOPY "%tempdir%\GlobalSettings_4_2011E_default.xml" "%gamescriptdir%/2011E" /y
XCOPY "%tempdir%\GlobalSettings_4_2011M_default.xml" "%gamescriptdir%/2011M" /y
XCOPY "%tempdir%\GlobalSettings4_2006S_default.xml" "%gamescriptdir%/2006S" /y
XCOPY "%tempdir%\GlobalSettings4_2006S-Shaders_default.xml" "%gamescriptdir%/2006S-Shaders" /y

View File

@ -22,6 +22,8 @@ end
function LoadCharacterNew(playerApp,newChar)
local path = "rbxasset://../../../shareddata/charcustom/"
wait(0.65)
local charparts = {[1] = newWaitForChild(newChar,"Head"),[2] = newWaitForChild(newChar,"Torso"),[3] = newWaitForChild(newChar,"Left Arm"),[4] = newWaitForChild(newChar,"Right Arm"),[5] = newWaitForChild(newChar,"Left Leg"),[6] = newWaitForChild(newChar,"Right Leg")}
for _,newVal in pairs(playerApp:GetChildren()) do
@ -441,7 +443,7 @@ function CS3DView(UserID,PlayerName,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorI
end
plr.CharacterAppearance=0
InitalizeClientAppearance(plr,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,TShirtID,ShirtID,PantsID,FaceID,HeadID,ItemID,IconType)
wait(0.7)
wait(0.79)
LoadCharacterNew(newWaitForChild(plr,"Appearance"),plr.Character,false)
local target = game.Workspace.Base.SpawnLocation

View File

@ -9,6 +9,6 @@ ExtendedVersionNumber=True
//ExtendedVersionTemplate=%version% vX.23.%extended-revision% (%version-name%)
//ExtendedVersionTemplate=%version% Snapshot v23.%build%.%revision%.%extended-revision%
ExtendedVersionTemplate=EDGE Snapshot v23.%build%.%revision%.%extended-revision%
ExtendedVersionRevision=1
ExtendedVersionRevision=2
InitialBootup=False
IsLite=False

View File

@ -96,4 +96,13 @@ Taco
Villager
Dinosaur
Code
United
United
Astro
Heart
Techno
Flutter
Hamster
Solder
Ripcord
Combine
Soldier