diff --git a/Novetus/NovetusLauncher/Forms/SDK/ItemCreationSDK.cs b/Novetus/NovetusLauncher/Forms/SDK/ItemCreationSDK.cs index 5fc45b0..2d9b30b 100644 --- a/Novetus/NovetusLauncher/Forms/SDK/ItemCreationSDK.cs +++ b/Novetus/NovetusLauncher/Forms/SDK/ItemCreationSDK.cs @@ -146,13 +146,13 @@ public partial class ItemCreationSDK : Form type, ItemName, new string[] { Option1Path, Option2Path, Option1TextBox.Text, Option2TextBox.Text }, - new Vector3(ConvertSafe.ToSingleSafe(XBox.Value), ConvertSafe.ToSingleSafe(YBox.Value), ConvertSafe.ToSingleSafe(ZBox.Value)), + new Vector3Legacy(ConvertSafe.ToDoubleSafe(XBox.Value), ConvertSafe.ToDoubleSafe(YBox.Value), ConvertSafe.ToDoubleSafe(ZBox.Value)), new Vector3(ConvertSafe.ToSingleSafe(XBox360.Value), ConvertSafe.ToSingleSafe(YBox2.Value), ConvertSafe.ToSingleSafe(ZBox2.Value)), new Vector3(ConvertSafe.ToSingleSafe(XBoxOne.Value), ConvertSafe.ToSingleSafe(YBox3.Value), ConvertSafe.ToSingleSafe(ZBox3.Value)), new Vector3[] { new Vector3(ConvertSafe.ToSingleSafe(rightXBox.Value), ConvertSafe.ToSingleSafe(rightYBox.Value), ConvertSafe.ToSingleSafe(rightZBox.Value)), new Vector3(ConvertSafe.ToSingleSafe(upXBox.Value), ConvertSafe.ToSingleSafe(upYBox.Value), ConvertSafe.ToSingleSafe(upZBox.Value)), - new Vector3(ConvertSafe.ToSingleSafe(-forwardXBox.Value), ConvertSafe.ToSingleSafe(-forwardYBox.Value), ConvertSafe.ToSingleSafe(-forwardZBox.Value)) }, + new Vector3(-ConvertSafe.ToSingleSafe(forwardXBox.Value), -ConvertSafe.ToSingleSafe(forwardYBox.Value), -ConvertSafe.ToSingleSafe(forwardZBox.Value)) }, ConvertSafe.ToDoubleSafe(transparencyBox.Value), ConvertSafe.ToDoubleSafe(reflectivenessBox.Value), new object[] { ConvertSafe.ToDoubleSafe(BevelBox.Value), @@ -513,12 +513,12 @@ public partial class ItemCreationSDK : Form return ""; } - public static void SetItemCoordVals(XDocument doc, AssetCacheDef assetdef, Vector3 coord, string CoordClass, string CoordName) + public static void SetItemCoordVals(XDocument doc, AssetCacheDef assetdef, Vector3Legacy coord, string CoordClass, string CoordName) { SetItemCoordVals(doc, assetdef.Class, coord, CoordClass, CoordName); } - public static void SetItemCoordVals(XDocument doc, string itemClassValue, Vector3 coord, string CoordClass, string CoordName) + public static void SetItemCoordVals(XDocument doc, string itemClassValue, Vector3Legacy coord, string CoordClass, string CoordName) { var v = from nodes in doc.Descendants("Item") where nodes.Attribute("class").Value == itemClassValue @@ -535,6 +535,53 @@ public partial class ItemCreationSDK : Form SetItemCoordXML(v, coord, CoordClass, CoordName); } + //this is dumb + public static void SetItemCoordValsNoClassSearch(XDocument doc, Vector3Legacy coord, string CoordClass, string CoordName) + { + var v = from nodes in doc.Descendants("Item") + select nodes; + + SetItemCoordXML(v, coord, CoordClass, CoordName); + } + + //this is dumb + private static void SetItemCoordXML(IEnumerable v, Vector3Legacy coord, string CoordClass, string CoordName) + { + foreach (var item in v) + { + var v2 = from nodes in item.Descendants(CoordClass) + where nodes.Attribute("name").Value == CoordName + select nodes; + + foreach (var item2 in v2) + { + var v3 = from nodes in item2.Descendants("X") + select nodes; + + foreach (var item3 in v3) + { + item3.Value = coord.X.ToString(); + } + + var v4 = from nodes in item2.Descendants("Y") + select nodes; + + foreach (var item4 in v4) + { + item4.Value = coord.Y.ToString(); + } + + var v5 = from nodes in item2.Descendants("Z") + select nodes; + + foreach (var item5 in v5) + { + item5.Value = coord.Z.ToString(); + } + } + } + } + private static void SetItemCoordXML(IEnumerable v, Vector3 coord, string CoordClass, string CoordName) { foreach (var item in v) @@ -1634,7 +1681,7 @@ public partial class ItemCreationSDK : Form } } - public bool CreateItem(string filepath, RobloxFileType type, string itemname, string[] assetfilenames, Vector3 coordoptions, Vector3 coordoptions2, Vector3 coordoptions3, Vector3[] rotationoptions, double transparency, double reflectiveness, object[] headoptions, string desctext = "") + public bool CreateItem(string filepath, RobloxFileType type, string itemname, string[] assetfilenames, Vector3Legacy coordoptions, Vector3 coordoptions2, Vector3 coordoptions3, Vector3[] rotationoptions, double transparency, double reflectiveness, object[] headoptions, string desctext = "") { string oldfile = File.ReadAllText(filepath); string fixedfile = RobloxXML.RemoveInvalidXmlChars(RobloxXML.ReplaceHexadecimalSymbols(oldfile)); @@ -1822,9 +1869,9 @@ public partial class ItemCreationSDK : Form upXBox.Value = ConvertSafe.ToDecimalSafe(HatRotationSplit[3]); upYBox.Value = ConvertSafe.ToDecimalSafe(HatRotationSplit[4]); upZBox.Value = ConvertSafe.ToDecimalSafe(HatRotationSplit[5]); - forwardXBox.Value = ConvertSafe.ToDecimalSafe(HatRotationSplit[6]); - forwardYBox.Value = ConvertSafe.ToDecimalSafe(HatRotationSplit[7]); - forwardZBox.Value = ConvertSafe.ToDecimalSafe(HatRotationSplit[8]); + forwardXBox.Value = -ConvertSafe.ToDecimalSafe(HatRotationSplit[6]); + forwardYBox.Value = -ConvertSafe.ToDecimalSafe(HatRotationSplit[7]); + forwardZBox.Value = -ConvertSafe.ToDecimalSafe(HatRotationSplit[8]); } string HatPartVals = GetHatPartVals(doc); @@ -2306,3 +2353,19 @@ public partial class ItemCreationSDK : Form } #endregion +#region Vector3 (Legacy) +public class Vector3Legacy +{ + public double X; + public double Y; + public double Z; + + public Vector3Legacy(double aX, double aY, double aZ) + { + X = aX; + Y = aY; + Z = aZ; + } +} +#endregion + diff --git a/changelog.txt b/changelog.txt index 6edefa3..4599aa2 100644 --- a/changelog.txt +++ b/changelog.txt @@ -15,6 +15,7 @@ Enhancements: - Added a DirectX installer. - The Dependency Installer will require admin permissions by default, allowing all installers to run with admin permissions, making it quicker to install each dependency. - Added support for more client APIs in the Web Proxy. +- Losing connection from servers will now automatically close the client. Fixes: - Fixed a bug where "Reset Colors" would reset the entire outfit. @@ -22,6 +23,25 @@ Fixes: - Removed the "save config" button. - Fixed character collision accuracy issues in 2007M clients. - Fixed the Web Proxy not starting up automatically once enabled. +- Fixed bytecode security issues. +- Fixed a bug where kicked players don't fully disconnect from the server. +- Removed the ShadersCompatibility plugin due to security issues. +--------------------------------------------------------------------------- +Continuation of 2.0 updates. +--------------------------------------------------------------------------- +1.3 v3.2024.2 +Changes from 1.3 v3.2024.1: +- Fixed a bug where kicked players don't fully disconnect from the server. +- Removed the ShadersCompatibility plugin due to security issues. +- Losing connection from servers will now automatically close the client. +--------------------------------------------------------------------------- +1.3 v3.2024.1 +Changes from 1.3 v8.2022.1: +- Fixed bytecode and metatable security issues. +- Discontinued the Lite version. + - My setup has been configured for the 2.0 release which is about as small as the Lite version. This means that I can no longer publish Lite versions. +--------------------------------------------------------------------------- +1.3 Emergency Updates --------------------------------------------------------------------------- Snapshot v24.8790.39939.1 Enhancements: @@ -258,7 +278,7 @@ Fixes: - Fixed launcher DPI scaling. - Fixed a potential security vulnerability with empty master server entries. ---------------------------------------------------------------------------- -"Numberless" Version +2.0 ---------------------------------------------------------------------------- 1.3 Snapshot v22.8412.32591.1 Enhancements: diff --git a/defaultaddons/ShadersCompatibility.lua b/defaultaddons/ShadersCompatibility.lua deleted file mode 100644 index d1b20ec..0000000 --- a/defaultaddons/ShadersCompatibility.lua +++ /dev/null @@ -1,96 +0,0 @@ --- allows 2007M, 2006S, 2007E, and 2009E users to join Shaders/HD servers, and vice versa - -local this = {} - -function this:Name() - return "Shader Client MP Compatibility" -end - -function this:IsEnabled(Script, Client) - -- hate this so much - if (Client == "2007E" or Client == "2007M" or Client == "2006S" or Client == "2007E-Shaders" or Client == "2007M-Shaders" or Client == "2006S-Shaders" or Client == "2009E" or Client == "2009E-HD") then - return true - else - return false - end -end - -function this:OnPrePlayerKicked(Player, Reason) - if (game.Lighting:findFirstChild("SkipSecurity") ~= nil) then - do return end - end - - invalidSecurityVals = 0 - - for _,newVal in pairs(Player.Security:children()) do - if (newVal.Name == "ClientEXEMD5") then - if (newVal.Value ~= game.Lighting.Security.ClientEXEMD5.Value or newVal.Value == "") then - invalidSecurityVals = invalidSecurityVals + 1 - end - end - - if (newVal.Name == "LauncherMD5") then - if (newVal.Value ~= game.Lighting.Security.LauncherMD5.Value or newVal.Value == "") then - invalidSecurityVals = invalidSecurityVals + 1 - end - end - - if (newVal.Name == "ClientScriptMD5") then - if (newVal.Value ~= game.Lighting.Security.ClientScriptMD5.Value or newVal.Value == "") then - invalidSecurityVals = invalidSecurityVals + 1 - end - end - end - - if (invalidSecurityVals > 0) then - print(Player.Name .. " has "..invalidSecurityVals.." invalid security values! Verifying...") - validLauncher = false - hasTripcode = false - securityValues = 0 - - for _,newVal in pairs(Player.Security:children()) do - if (newVal.Name == "LauncherMD5") then - if (newVal.Value == game.Lighting.Security.LauncherMD5.Value) then - validLauncher = true - end - end - - securityValues = securityValues + 1 - end - - for _,newVal in pairs(Player:children()) do - if (newVal.Name == "Tripcode") then - if (newVal.Value ~= "") then - hasTripcode = true - end - end - end - - if (validLauncher == true and hasTripcode == true and securityValues == 3) then - print(Player.Name .. " is using a valid modified client!") - local ver = Instance.new("StringValue",game.Lighting) - ver.Name = "SkipSecurity" - local tempTag = Instance.new("StringValue",ver) - tempTag.Name = "Temp" - else - print(Player.Name .. " is using an invalid modified client! Kicking...") - end - else - print(Player.Name .. " is using an invalid modified client! Kicking...") - end -end - -function this:OnLoadCharacter(Player, Appearance) - if (game.Lighting:findFirstChild("SkipSecurity") ~= nil) then - if (game.Lighting.SkipSecurity:findFirstChild("Temp") ~= nil) then - game.Lighting.SkipSecurity:remove() - end - end -end - -function AddModule(t) - print("AddonLoader: Adding " .. this:Name()) - table.insert(t, this) -end - -_G.CSScript_AddModule=AddModule \ No newline at end of file diff --git a/scripts/batch/github_sync.bat b/scripts/batch/github_sync.bat index 3179afa..25612a2 100644 --- a/scripts/batch/github_sync.bat +++ b/scripts/batch/github_sync.bat @@ -164,12 +164,12 @@ echo. echo Copying maps.... SET mapdir=%CD%\maps if not exist "%mapdir%" mkdir "%mapdir%" -XCOPY "%cd%\Novetus\maps\Maps released by year\*.bz2" "%mapdir%\Maps released by year" /sy -XCOPY "%cd%\Novetus\maps\Novetus Exclusives\*.bz2" "%mapdir%\Novetus Exclusives" /sy -XCOPY "%cd%\Novetus\maps\Universal\*.bz2" "%mapdir%\Universal" /sy -XCOPY "%cd%\Novetus\maps\Maps released by year\*.txt" "%mapdir%\Maps released by year" /sy -XCOPY "%cd%\Novetus\maps\Novetus Exclusives\*.txt" "%mapdir%\Novetus Exclusives" /sy -XCOPY "%cd%\Novetus\maps\Universal\*.txt" "%mapdir%\Universal" /sy +XCOPY /E "%cd%\Novetus\maps\Maps released by year\*.bz2" "%mapdir%\Maps released by year" /sy +XCOPY /E "%cd%\Novetus\maps\Novetus Exclusives\*.bz2" "%mapdir%\Novetus Exclusives" /sy +XCOPY /E "%cd%\Novetus\maps\Universal\*.bz2" "%mapdir%\Universal" /sy +XCOPY /E "%cd%\Novetus\maps\Maps released by year\*.txt" "%mapdir%\Maps released by year" /sy +XCOPY /E "%cd%\Novetus\maps\Novetus Exclusives\*.txt" "%mapdir%\Novetus Exclusives" /sy +XCOPY /E "%cd%\Novetus\maps\Universal\*.txt" "%mapdir%\Universal" /sy echo. echo Moving maps... diff --git a/scripts/game/2006S-Shaders/CSMPFunctions.lua b/scripts/game/2006S-Shaders/CSMPFunctions.lua index ab014eb..af6656d 100644 --- a/scripts/game/2006S-Shaders/CSMPFunctions.lua +++ b/scripts/game/2006S-Shaders/CSMPFunctions.lua @@ -27,6 +27,7 @@ function KickPlayer(Player,reason) name = "ServerReplicator|"..Player.Name.."|"..Player.userId.."|"..Player.AnonymousIdentifier.Value if (Server:findFirstChild(name) ~= nil and Child.Name == name) then Child:CloseConnection() + Child:remove() print("Player '" .. Player.Name .. "' Kicked. Reason: "..reason) end end @@ -362,6 +363,7 @@ function CSConnect(UserID,ServerIP,ServerPort,PlayerName,Hat1ID,Hat2ID,Hat3ID,He local function disconnect(peer,lostconnection) game:SetMessage("You have lost connection to the game") + game:Close() end local function connected(url, replicator) diff --git a/scripts/game/2006S/CSMPFunctions.lua b/scripts/game/2006S/CSMPFunctions.lua index d9526c0..8545af4 100644 --- a/scripts/game/2006S/CSMPFunctions.lua +++ b/scripts/game/2006S/CSMPFunctions.lua @@ -27,6 +27,7 @@ function KickPlayer(Player,reason) name = "ServerReplicator|"..Player.Name.."|"..Player.userId.."|"..Player.AnonymousIdentifier.Value if (Server:findFirstChild(name) ~= nil and Child.Name == name) then Child:CloseConnection() + Child:remove() print("Player '" .. Player.Name .. "' Kicked. Reason: "..reason) end end @@ -362,6 +363,7 @@ function CSConnect(UserID,ServerIP,ServerPort,PlayerName,Hat1ID,Hat2ID,Hat3ID,He local function disconnect(peer,lostconnection) game:SetMessage("You have lost connection to the game") + game:Close() end local function connected(url, replicator) diff --git a/scripts/game/2007E-Shaders/CSMPFunctions.lua b/scripts/game/2007E-Shaders/CSMPFunctions.lua index 4816dca..c06b695 100644 --- a/scripts/game/2007E-Shaders/CSMPFunctions.lua +++ b/scripts/game/2007E-Shaders/CSMPFunctions.lua @@ -27,6 +27,7 @@ function KickPlayer(Player,reason) name = "ServerReplicator|"..Player.Name.."|"..Player.userId.."|"..Player.AnonymousIdentifier.Value if (Server:findFirstChild(name) ~= nil and Child.Name == name) then Child:CloseConnection() + Child:remove() print("Player '" .. Player.Name .. "' Kicked. Reason: "..reason) end end @@ -424,6 +425,7 @@ function CSConnect(UserID,ServerIP,ServerPort,PlayerName,Hat1ID,Hat2ID,Hat3ID,He local function disconnect(peer,lostconnection) game:SetMessage("You have lost connection to the game") + game:Close() end local function connected(url, replicator) diff --git a/scripts/game/2007E/CSMPFunctions.lua b/scripts/game/2007E/CSMPFunctions.lua index 4aaa66f..07f3dae 100644 --- a/scripts/game/2007E/CSMPFunctions.lua +++ b/scripts/game/2007E/CSMPFunctions.lua @@ -27,6 +27,7 @@ function KickPlayer(Player,reason) name = "ServerReplicator|"..Player.Name.."|"..Player.userId.."|"..Player.AnonymousIdentifier.Value if (Server:findFirstChild(name) ~= nil and Child.Name == name) then Child:CloseConnection() + Child:remove() print("Player '" .. Player.Name .. "' Kicked. Reason: "..reason) end end @@ -424,6 +425,7 @@ function CSConnect(UserID,ServerIP,ServerPort,PlayerName,Hat1ID,Hat2ID,Hat3ID,He local function disconnect(peer,lostconnection) game:SetMessage("You have lost connection to the game") + game:Close() end local function connected(url, replicator) diff --git a/scripts/game/2007M-Shaders/CSMPFunctions.lua b/scripts/game/2007M-Shaders/CSMPFunctions.lua index 40976af..256958e 100644 --- a/scripts/game/2007M-Shaders/CSMPFunctions.lua +++ b/scripts/game/2007M-Shaders/CSMPFunctions.lua @@ -27,6 +27,7 @@ function KickPlayer(Player,reason) name = "ServerReplicator|"..Player.Name.."|"..Player.userId.."|"..Player.AnonymousIdentifier.Value if (Server:findFirstChild(name) ~= nil and Child.Name == name) then Child:CloseConnection() + Child:remove() print("Player '" .. Player.Name .. "' Kicked. Reason: "..reason) end end @@ -481,6 +482,7 @@ function CSConnect(UserID,ServerIP,ServerPort,PlayerName,Hat1ID,Hat2ID,Hat3ID,He local function disconnect(peer,lostconnection) game:SetMessage("You have lost connection to the game") + game:Close() end local function connected(url, replicator) diff --git a/scripts/game/2007M/CSMPFunctions.lua b/scripts/game/2007M/CSMPFunctions.lua index 19627b1..103185d 100644 --- a/scripts/game/2007M/CSMPFunctions.lua +++ b/scripts/game/2007M/CSMPFunctions.lua @@ -27,6 +27,7 @@ function KickPlayer(Player,reason) name = "ServerReplicator|"..Player.Name.."|"..Player.userId.."|"..Player.AnonymousIdentifier.Value if (Server:findFirstChild(name) ~= nil and Child.Name == name) then Child:CloseConnection() + Child:remove() print("Player '" .. Player.Name .. "' Kicked. Reason: "..reason) end end @@ -481,6 +482,7 @@ function CSConnect(UserID,ServerIP,ServerPort,PlayerName,Hat1ID,Hat2ID,Hat3ID,He local function disconnect(peer,lostconnection) game:SetMessage("You have lost connection to the game") + game:Close() end local function connected(url, replicator) diff --git a/scripts/game/2008M/CSMPFunctions.lua b/scripts/game/2008M/CSMPFunctions.lua index b8cfbcb..2ed2398 100644 --- a/scripts/game/2008M/CSMPFunctions.lua +++ b/scripts/game/2008M/CSMPFunctions.lua @@ -27,6 +27,7 @@ function KickPlayer(Player,reason) name = "ServerReplicator|"..Player.Name.."|"..Player.userId.."|"..Player.AnonymousIdentifier.Value if (Server:findFirstChild(name) ~= nil and Child.Name == name) then Child:CloseConnection() + Child:remove() print("Player '" .. Player.Name .. "' Kicked. Reason: "..reason) end end @@ -599,6 +600,7 @@ function CSConnect(UserID,ServerIP,ServerPort,PlayerName,Hat1ID,Hat2ID,Hat3ID,He local function disconnect(peer,lostconnection) game:SetMessage("You have lost connection to the game") + game:Close() end local function connected(url, replicator) diff --git a/scripts/game/2009E-HD/CSMPFunctions.lua b/scripts/game/2009E-HD/CSMPFunctions.lua index ed429c3..4eb92ea 100644 --- a/scripts/game/2009E-HD/CSMPFunctions.lua +++ b/scripts/game/2009E-HD/CSMPFunctions.lua @@ -27,6 +27,7 @@ function KickPlayer(Player,reason) name = "ServerReplicator|"..Player.Name.."|"..Player.userId.."|"..Player.AnonymousIdentifier.Value if (Server:findFirstChild(name) ~= nil and Child.Name == name) then Child:CloseConnection() + Child:remove() print("Player '" .. Player.Name .. "' Kicked. Reason: "..reason) end end @@ -693,6 +694,7 @@ function CSConnect(UserID,ServerIP,ServerPort,PlayerName,Hat1ID,Hat2ID,Hat3ID,He local function disconnect(peer,lostconnection) game:SetMessage("You have lost connection to the game") + game:Close() end local function connected(url, replicator) diff --git a/scripts/game/2009E/CSMPFunctions.lua b/scripts/game/2009E/CSMPFunctions.lua index a7054aa..7eea79e 100644 --- a/scripts/game/2009E/CSMPFunctions.lua +++ b/scripts/game/2009E/CSMPFunctions.lua @@ -27,6 +27,7 @@ function KickPlayer(Player,reason) name = "ServerReplicator|"..Player.Name.."|"..Player.userId.."|"..Player.AnonymousIdentifier.Value if (Server:findFirstChild(name) ~= nil and Child.Name == name) then Child:CloseConnection() + Child:remove() print("Player '" .. Player.Name .. "' Kicked. Reason: "..reason) end end @@ -693,6 +694,7 @@ function CSConnect(UserID,ServerIP,ServerPort,PlayerName,Hat1ID,Hat2ID,Hat3ID,He local function disconnect(peer,lostconnection) game:SetMessage("You have lost connection to the game") + game:Close() end local function connected(url, replicator) diff --git a/scripts/game/2009L/CSMPFunctions.lua b/scripts/game/2009L/CSMPFunctions.lua index 12d9d0e..bd45bbf 100644 --- a/scripts/game/2009L/CSMPFunctions.lua +++ b/scripts/game/2009L/CSMPFunctions.lua @@ -30,6 +30,7 @@ function KickPlayer(Player,reason) --2010L crashes if we don't do this. wait(0.3) Child:CloseConnection() + Child:remove() print("Player '" .. Player.Name .. "' Kicked. Reason: "..reason) end end @@ -697,6 +698,7 @@ function CSConnect(UserID,ServerIP,ServerPort,PlayerName,Hat1ID,Hat2ID,Hat3ID,He local function disconnect(peer,lostconnection) game:SetMessage("You have lost connection to the game") + game:Close() end local function connected(url, replicator) diff --git a/scripts/game/2010L/CSMPFunctions.lua b/scripts/game/2010L/CSMPFunctions.lua index fc057b6..f1c918e 100644 --- a/scripts/game/2010L/CSMPFunctions.lua +++ b/scripts/game/2010L/CSMPFunctions.lua @@ -30,6 +30,7 @@ function KickPlayer(Player,reason) --2010L crashes if we don't do this. wait(0.3) Child:CloseConnection() + Child:remove() print("Player '" .. Player.Name .. "' Kicked. Reason: "..reason) end end @@ -748,6 +749,7 @@ function CSConnect(UserID,ServerIP,ServerPort,PlayerName,Hat1ID,Hat2ID,Hat3ID,He local function disconnect(peer,lostconnection) game:SetMessage("You have lost connection to the game") + game:Close() end local function connected(url, replicator) diff --git a/scripts/game/2011E/CSMPFunctions.lua b/scripts/game/2011E/CSMPFunctions.lua index 795479e..48d1177 100644 --- a/scripts/game/2011E/CSMPFunctions.lua +++ b/scripts/game/2011E/CSMPFunctions.lua @@ -30,6 +30,7 @@ function KickPlayer(Player,reason) name = "ServerReplicator|"..Player.Name.."|"..Player.userId.."|"..Player.AnonymousIdentifier.Value if (Server:findFirstChild(name) ~= nil and Child.Name == name) then Child:CloseConnection() + Child:remove() print("Player '" .. Player.Name .. "' Kicked. Reason: "..reason) end end @@ -778,6 +779,7 @@ function CSConnect(UserID,ServerIP,ServerPort,PlayerName,Hat1ID,Hat2ID,Hat3ID,He local function Disconnection(Peer,LostConnection) SetMessage("You have lost connection to the game") + game:Close() end local function ConnectionAccepted(Peer,Replicator) diff --git a/scripts/game/2011M/CSMPFunctions.lua b/scripts/game/2011M/CSMPFunctions.lua index 93e0afa..c40064d 100644 --- a/scripts/game/2011M/CSMPFunctions.lua +++ b/scripts/game/2011M/CSMPFunctions.lua @@ -30,6 +30,7 @@ function KickPlayer(Player,reason) name = "ServerReplicator|"..Player.Name.."|"..Player.userId.."|"..Player.AnonymousIdentifier.Value if (Server:findFirstChild(name) ~= nil and Child.Name == name) then Child:CloseConnection() + Child:remove() print("Player '" .. Player.Name .. "' Kicked. Reason: "..reason) end end @@ -781,6 +782,7 @@ function CSConnect(UserID,ServerIP,ServerPort,PlayerName,Hat1ID,Hat2ID,Hat3ID,He local function Disconnection(Peer,LostConnection) SetMessage("You have lost connection to the game") + game:Close() end local function ConnectionAccepted(Peer,Replicator) diff --git a/scripts/game/2012M/CSMPFunctions.lua b/scripts/game/2012M/CSMPFunctions.lua index 7023a00..ddd15fd 100644 --- a/scripts/game/2012M/CSMPFunctions.lua +++ b/scripts/game/2012M/CSMPFunctions.lua @@ -31,6 +31,7 @@ function KickPlayer(Player,reason) name = "ServerReplicator|"..Player.Name.."|"..Player.userId.."|"..Player.AnonymousIdentifier.Value if (Server:findFirstChild(name) ~= nil and Child.Name == name) then Child:CloseConnection() + Child:remove() print("Player '" .. Player.Name .. "' Kicked. Reason: "..reason) end end diff --git a/scripts/launcher/splashes.txt b/scripts/launcher/splashes.txt index 248a0c9..dffb98c 100644 --- a/scripts/launcher/splashes.txt +++ b/scripts/launcher/splashes.txt @@ -275,4 +275,5 @@ roblox for steam deck when|Just fuckin play novetus you're still standing here, despite everything|Dedicated to Pepper when in doubt, shoot someone|Dedicated to Pepper oh my pkcell -[stylish]I'M A STONE FACED KILLER LIKE MY MOTHER FUCKIN' HOUSE IS! \ No newline at end of file +[stylish]I'M A STONE FACED KILLER LIKE MY MOTHER FUCKIN' HOUSE IS! +Balls! \ No newline at end of file