diff --git a/batch/dev_menu.bat b/batch/dev_menu.bat index 1fc465e..4c64b3b 100644 --- a/batch/dev_menu.bat +++ b/batch/dev_menu.bat @@ -107,6 +107,12 @@ del /s /q Novetus\clients\2009E\opengl32.dll del /s /q Novetus\clients\2009E\DefaultPreset.ini del /s /q Novetus\clients\2009E\content\temp.rbxl +del /s /q Novetus\clients\2009E-HD\ReShade.ini +del /s /q Novetus\clients\2009E-HD\OPENGL32.log +del /s /q Novetus\clients\2009E-HD\opengl32.dll +del /s /q Novetus\clients\2009E-HD\DefaultPreset.ini +del /s /q Novetus\clients\2009E-HD\content\temp.rbxl + del /s /q Novetus\clients\2009L\ReShade.ini del /s /q Novetus\clients\2009L\OPENGL32.log del /s /q Novetus\clients\2009L\opengl32.dll diff --git a/batch/github_scripts.bat b/batch/github_scripts.bat index 2624cf8..f02ecb5 100644 --- a/batch/github_scripts.bat +++ b/batch/github_scripts.bat @@ -11,6 +11,7 @@ if not exist "%basedir%/2007M" mkdir "%basedir%/2007M" if not exist "%basedir%/2007M-Shaders" mkdir "%basedir%/2007M-Shaders" if not exist "%basedir%/2008M" mkdir "%basedir%/2008M" if not exist "%basedir%/2009E" mkdir "%basedir%/2009E" +if not exist "%basedir%/2009E-HD" mkdir "%basedir%/2009E-HD" if not exist "%basedir%/2009L" mkdir "%basedir%/2009L" if not exist "%basedir%/2010L" mkdir "%basedir%/2010L" if not exist "%basedir%/2011E" mkdir "%basedir%/2011E" @@ -25,6 +26,7 @@ XCOPY Novetus\clients\2007M\content\scripts\CSMPFunctions.lua %basedir%/2007M XCOPY Novetus\clients\2007M-Shaders\content\scripts\CSMPFunctions.lua %basedir%/2007M-Shaders XCOPY Novetus\clients\2008M\content\scripts\CSMPFunctions.lua %basedir%/2008M XCOPY Novetus\clients\2009E\content\scripts\CSMPFunctions.lua %basedir%/2009E +XCOPY Novetus\clients\2009E-HD\content\scripts\CSMPFunctions.lua %basedir%/2009E-HD XCOPY Novetus\clients\2009L\content\scripts\CSMPFunctions.lua %basedir%/2009L XCOPY Novetus\clients\2010L\content\scripts\CSMPFunctions.lua %basedir%/2010L XCOPY Novetus\clients\2011E\content\scripts\CSMPFunctions.lua %basedir%/2011E diff --git a/scripts/2009E-HD/CSMPFunctions.lua b/scripts/2009E-HD/CSMPFunctions.lua new file mode 100644 index 0000000..0e49ad2 --- /dev/null +++ b/scripts/2009E-HD/CSMPFunctions.lua @@ -0,0 +1,659 @@ +showServerNotifications = true + +--function made by rbxbanland +function newWaitForChild(newParent,name) + local returnable = nil + if newParent:FindFirstChild(name) then + returnable = newParent:FindFirstChild(name) + else + repeat wait() returnable = newParent:FindFirstChild(name) until returnable ~= nil + end + return returnable +end + +function KickPlayer(Player,reason) + if (Player ~= nil) then + local message = Instance.new("Message") + message.Text = "You were kicked. Reason: "..reason + message.Parent = Player + wait(2) + Player:remove() + print("Player '" .. Player.Name .. "' with ID '" .. Player.userId .. "' kicked. Reason: "..reason) + if (showServerNotifications) then + game.Players:Chat("Player '" .. Player.Name .. "' was kicked. Reason: "..reason) + end + end +end + +function newWaitForChildSecurity(newParent,name) + local returnable = nil + local loadAttempts = 0 + local maxAttempts = 5 + while loadAttempts < maxAttempts do + if newParent:FindFirstChild(name) then + returnable = newParent:FindFirstChild(name) + break + end + wait() + loadAttempts = loadAttempts + 1 + print("Player '" .. newParent.Name .. "' trying to connect. Number of attempts: "..loadAttempts) + end + + if (loadAttempts == maxAttempts) then + KickPlayer(newParent, "Modified Client") + end + + return returnable +end + +function LoadCharacterNew(playerApp,newChar) + PlayerService = game:GetService("Players") + Player = PlayerService:GetPlayerFromCharacter(newChar) + + local function kick() + KickPlayer(Player, "Modified Client") + end + + if (playerApp == nil) then + kick() + end + + if (not Player:FindFirstChild("Appearance")) then + kick() + end + + if ((playerApp:GetChildren() == 0) or (playerApp:GetChildren() == nil)) then + kick() + end + + local path = "rbxasset://../../../shareddata/charcustom/" + + 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 + local customtype = newVal.CustomizationType.Value + if (customtype == 1) then + pcall(function() + charparts[newVal.ColorIndex.Value].BrickColor = newVal.Value + end) + elseif (customtype == 2) then + pcall(function() + local newHat = game.Workspace:InsertContent(path.."hats/"..newVal.Value) + if newHat[1] then + if newHat[1].className == "Hat" then + newHat[1].Parent = newChar + else + newHat[1]:remove() + end + end + end) + elseif (customtype == 3) then + pcall(function() + local newTShirt = ""; + if (string.match(newVal.Value, "http") == "http") then + newTShirt = Instance.new("ShirtGraphic") + newTShirt.Graphic = newVal.Value + newTShirt.Parent = newChar + else + newTShirt = game.Workspace:InsertContent(path.."tshirts/"..newVal.Value) + if newTShirt[1] then + if newTShirt[1].className == "ShirtGraphic" then + newTShirt[1].Parent = newChar + else + newTShirt[1]:remove() + end + end + end + end) + elseif (customtype == 4) then + pcall(function() + local newShirt = ""; + if (string.match(newVal.Value, "http") == "http") then + newShirt = Instance.new("Shirt") + newShirt.ShirtTemplate = newVal.Value + newShirt.Parent = newChar + else + newShirt = game.Workspace:InsertContent(path.."shirts/"..newVal.Value) + if newShirt[1] then + if newShirt[1].className == "Shirt" then + newShirt[1].Parent = newChar + else + newShirt[1]:remove() + end + end + end + end) + elseif (customtype == 5) then + pcall(function() + local newPants = ""; + if (string.match(newVal.Value, "http") == "http") then + newPants = Instance.new("Pants") + newPants.PantsTemplate = newVal.Value + newPants.Parent = newChar + else + newPants = game.Workspace:InsertContent(path.."pants/"..newVal.Value) + if newPants[1] then + if newPants[1].className == "Pants" then + newPants[1].Parent = newChar + else + newPants[1]:remove() + end + end + end + end) + elseif (customtype == 6) then + pcall(function() + local newFace = ""; + if (string.match(newVal.Value, "http") == "http") then + newWaitForChild(charparts[1],"face"):remove() + newFace = Instance.new("Decal") + newFace.Texture = newVal.Value + newFace.Face = "Front" + newFace.Parent = charparts[1] + else + newFace = game.Workspace:InsertContent(path.."faces/"..newVal.Value) + if newFace[1] then + if newFace[1].className == "Decal" then + newWaitForChild(charparts[1],"face"):remove() + newFace[1].Parent = charparts[1] + newFace[1].Face = "Front" + else + newFace[1]:remove() + end + end + end + end) + elseif (customtype == 7) then + pcall(function() + local newPart = game.Workspace:InsertContent(path.."heads/"..newVal.Value) + if newPart[1] then + if newPart[1].className == "SpecialMesh" or newPart[1].className == "CylinderMesh" or newPart[1].className == "BlockMesh" then + newWaitForChild(charparts[1],"Mesh"):remove() + newPart[1].Parent = charparts[1] + else + newPart[1]:remove() + end + end + end) + elseif (customtype == 8) then + pcall(function() + local newHat = game.Workspace:InsertContent(path.."hats/"..newVal.Value) + if newHat[1] then + if newHat[1].className == "Hat" then + newHat[1].Parent = newChar + else + newHat[1]:remove() + end + end + end) + + pcall(function() + local newItem = game.Workspace:InsertContent(path.."custom/"..newVal.Value) + if newItem[1] then + if newItem[1].className == "Decal" then + newWaitForChild(charparts[1],"face"):remove() + newItem[1].Parent = charparts[1] + newItem[1].Face = "Front" + elseif newPart[1].className == "SpecialMesh" or newPart[1].className == "CylinderMesh" or newPart[1].className == "BlockMesh" then + newWaitForChild(charparts[1],"Mesh"):remove() + newItem[1].Parent = charparts[1] + else + newItem[1].Parent = newChar + end + end + end) + end + end +end + +function InitalizeClientAppearance(Player,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,TShirtID,ShirtID,PantsID,FaceID,HeadID,ItemID) + local newCharApp = Instance.new("IntValue",Player) + newCharApp.Name = "Appearance" + --BODY COLORS + for i=1,6,1 do + local BodyColor = Instance.new("BrickColorValue",newCharApp) + if (i == 1) then + if (HeadColorID ~= nil) then + BodyColor.Value = BrickColor.new(HeadColorID) + else + BodyColor.Value = BrickColor.new(1) + end + BodyColor.Name = "Head Color" + elseif (i == 2) then + if (TorsoColorID ~= nil) then + BodyColor.Value = BrickColor.new(TorsoColorID) + else + BodyColor.Value = BrickColor.new(1) + end + BodyColor.Name = "Torso Color" + elseif (i == 3) then + if (LeftArmColorID ~= nil) then + BodyColor.Value = BrickColor.new(LeftArmColorID) + else + BodyColor.Value = BrickColor.new(1) + end + BodyColor.Name = "Left Arm Color" + elseif (i == 4) then + if (RightArmColorID ~= nil) then + BodyColor.Value = BrickColor.new(RightArmColorID) + else + BodyColor.Value = BrickColor.new(1) + end + BodyColor.Name = "Right Arm Color" + elseif (i == 5) then + if (LeftLegColorID ~= nil) then + BodyColor.Value = BrickColor.new(LeftLegColorID) + else + BodyColor.Value = BrickColor.new(1) + end + BodyColor.Name = "Left Leg Color" + elseif (i == 6) then + if (RightLegColorID ~= nil) then + BodyColor.Value = BrickColor.new(RightLegColorID) + else + BodyColor.Value = BrickColor.new(1) + end + BodyColor.Name = "Right Leg Color" + end + local indexValue = Instance.new("NumberValue") + indexValue.Name = "ColorIndex" + indexValue.Parent = BodyColor + indexValue.Value = i + local typeValue = Instance.new("NumberValue") + typeValue.Name = "CustomizationType" + typeValue.Parent = BodyColor + typeValue.Value = 1 + end + --HATS + for i=1,3,1 do + local newHat = Instance.new("StringValue",newCharApp) + if (i == 1) then + if (Hat1ID ~= nil) then + newHat.Value = Hat1ID + newHat.Name = "Hat 1 - "..Hat1ID + else + newHat.Value = "NoHat.rbxm" + newHat.Name = "Hat 1 - NoHat.rbxm" + end + elseif (i == 2) then + if (Hat2ID ~= nil) then + newHat.Value = Hat2ID + newHat.Name = "Hat 2 - "..Hat2ID + else + newHat.Value = "NoHat.rbxm" + newHat.Name = "Hat 2 - NoHat.rbxm" + end + elseif (i == 3) then + if (Hat3ID ~= nil) then + newHat.Value = Hat3ID + newHat.Name = "Hat 3 - "..Hat3ID + else + newHat.Value = "NoHat.rbxm" + newHat.Name = "Hat 3 - NoHat.rbxm" + end + end + local typeValue = Instance.new("NumberValue") + typeValue.Name = "CustomizationType" + typeValue.Parent = newHat + typeValue.Value = 2 + end + --T-SHIRT + local newTShirt = Instance.new("StringValue",newCharApp) + if (TShirtID ~= nil) then + newTShirt.Value = TShirtID + newTShirt.Name = "T-Shirt - "..TShirtID + else + newTShirt.Value = "NoTShirt.rbxm" + newTShirt.Name = "T-Shirt - NoTShirt.rbxm" + end + local typeValue = Instance.new("NumberValue") + typeValue.Name = "CustomizationType" + typeValue.Parent = newTShirt + typeValue.Value = 3 + --SHIRT + local newShirt = Instance.new("StringValue",newCharApp) + if (ShirtID ~= nil) then + newShirt.Value = ShirtID + newShirt.Name = "Shirt - "..ShirtID + else + newShirt.Value = "NoShirt.rbxm" + newShirt.Name = "Shirt - NoShirt.rbxm" + end + local typeValue = Instance.new("NumberValue") + typeValue.Name = "CustomizationType" + typeValue.Parent = newShirt + typeValue.Value = 4 + --PANTS + local newPants = Instance.new("StringValue",newCharApp) + if (PantsID ~= nil) then + newPants.Value = PantsID + newPants.Name = "Pants - "..PantsID + else + newPants.Value = "NoPants.rbxm" + newPants.Name = "Pants - NoPants.rbxm" + end + local typeValue = Instance.new("NumberValue") + typeValue.Name = "CustomizationType" + typeValue.Parent = newPants + typeValue.Value = 5 + --FACE + local newFace = Instance.new("StringValue",newCharApp) + if (FaceID ~= nil) then + newFace.Value = FaceID + newFace.Name = "Face - "..FaceID + else + newFace.Value = "DefaultFace.rbxm" + newFace.Name = "Face - DefaultFace.rbxm" + end + local typeValue = Instance.new("NumberValue") + typeValue.Name = "CustomizationType" + typeValue.Parent = newFace + typeValue.Value = 6 + --HEADS + local newHead = Instance.new("StringValue",newCharApp) + if (HeadID ~= nil) then + newHead.Value = HeadID + newHead.Name = "Head - "..HeadID + else + newHead.Value = "DefaultHead.rbxm" + newHead.Name = "Head - DefaultHead.rbxm" + end + local typeValue = Instance.new("NumberValue") + typeValue.Name = "CustomizationType" + typeValue.Parent = newHead + typeValue.Value = 7 + --EXTRA + local newItem = Instance.new("StringValue",newCharApp) + if (ItemID ~= nil) then + newItem.Value = ItemID + newItem.Name = "Extra - "..ItemID + else + newItem.Value = "NoExtra.rbxm" + newItem.Name = "Extra - NoExtra.rbxm" + end + local typeValue = Instance.new("NumberValue") + typeValue.Name = "CustomizationType" + typeValue.Parent = newItem + typeValue.Value = 8 +end + +function LoadSecurity(playerApp,Player,ServerSecurityLocation) + local function kick() + KickPlayer(Player, "Modified Client") + end + + if (playerApp == nil) then + kick() + end + + if (not Player:FindFirstChild("Security")) then + kick() + end + + if (not playerApp:FindFirstChild("ClientEXEMD5") or not playerApp:FindFirstChild("LauncherMD5") or not playerApp:FindFirstChild("ClientScriptMD5")) then + kick() + end + + for _,newVal in pairs(playerApp:GetChildren()) do + if (newVal.Name == "ClientEXEMD5") then + if (newVal.Value ~= ServerSecurityLocation.Security.ClientEXEMD5.Value or newVal.Value == "") then + kick() + break + end + end + + if (newVal.Name == "LauncherMD5") then + if (newVal.Value ~= ServerSecurityLocation.Security.LauncherMD5.Value or newVal.Value == "") then + kick() + break + end + end + + if (newVal.Name == "ClientScriptMD5") then + if (newVal.Value ~= ServerSecurityLocation.Security.ClientScriptMD5.Value or newVal.Value == "") then + kick() + break + end + end + end +end + +function InitalizeSecurityValues(Location,ClientEXEMD5,LauncherMD5,ClientScriptMD5) + Location = Instance.new("IntValue", Location) + Location.Name = "Security" + + local clientValue = Instance.new("StringValue", Location) + clientValue.Value = ClientEXEMD5 or "" + clientValue.Name = "ClientEXEMD5" + + local launcherValue = Instance.new("StringValue", Location) + launcherValue.Value = LauncherMD5 or "" + launcherValue.Name = "LauncherMD5" + + local scriptValue = Instance.new("StringValue", Location) + scriptValue.Value = ClientScriptMD5 or "" + scriptValue.Name = "ClientScriptMD5" +end + +function InitalizeTripcode(Location,Tripcode) + local code = Instance.new("StringValue", Location) + code.Value = Tripcode or "" + code.Name = "Tripcode" +end + +function LoadTripcode(Player) + local function kick() + KickPlayer(Player, "Modified Client") + end + + if (not Player:FindFirstChild("Tripcode")) then + kick() + end + + for _,newVal in pairs(Player:GetChildren()) do + if (newVal.Name == "Tripcode") then + if (newVal.Value == "") then + kick() + break + end + end + end +end + +function PingMasterServer(online, ServerBrowserAddress, ServerBrowserName, ServerIP, Port, Client) + local pingURL = "http://" .. ServerBrowserAddress .. "/query.php?name=" .. ServerBrowserName .. "&ip=" .. ServerIP .. "&port=" .. Port .. "&client=" .. Client + game:HttpGet(pingURL .. "&online=" .. online) +end + +rbxversion = version() +print("ROBLOX Client version '" .. rbxversion .. "' loaded.") + +function CSServer(Port,PlayerLimit,ClientEXEMD5,LauncherMD5,ClientScriptMD5,Notifications,ServerBrowserName,ServerBrowserAddress,ServerIP,Client) + Server = game:GetService("NetworkServer") + RunService = game:GetService("RunService") + Server:start(Port, 20) + RunService:run() + game.Workspace:InsertContent("rbxasset://Fonts//libraries.rbxm") + showServerNotifications = Notifications + PlayerService = game:GetService("Players") + game:GetService("Visit"):SetUploadUrl("") + if (showServerNotifications) then + PlayerService.MaxPlayers = PlayerLimit + 1 + --create a fake player to record connections and disconnections + notifyPlayer = game:GetService("Players"):CreateLocalPlayer(-1) + notifyPlayer.Name = "[SERVER]" + else + PlayerService.MaxPlayers = PlayerLimit + end + PlayerService.PlayerAdded:connect(function(Player) + Player.Chatted:connect(function(msg) + print(Player.Name.."; "..msg) + end) + + if (PlayerService.NumPlayers > PlayerService.MaxPlayers) then + KickPlayer(Player, "Too many players on server.") + else + print("Player '" .. Player.Name .. "' with ID '" .. Player.userId .. "' added") + if (showServerNotifications) then + game.Players:Chat("Player '" .. Player.Name .. "' joined") + end + Player:LoadCharacter() + LoadSecurity(newWaitForChildSecurity(Player,"Security"),Player,game.Lighting) + newWaitForChildSecurity(Player,"Tripcode") + LoadTripcode(Player) + pcall(function() print("Player '" .. Player.Name .. "-" .. Player.userId .. "' security check success. Tripcode: '" .. Player.Tripcode.Value .. "'") end) + if (Player.Character ~= nil) then + LoadCharacterNew(newWaitForChildSecurity(Player,"Appearance"),Player.Character) + end + end + + -- rename all Server replicators in NetworkServer to "ServerReplicator" + for _,Child in pairs(Server:GetChildren()) do + Child.Name = "ServerReplicator" + end + + while true do + wait(0.001) + if (Player.Character ~= nil) then + if (plr.Character:FindFirstChild("Humanoid") and (plr.Character.Humanoid.Health == 0)) then + wait(5) + Player:LoadCharacter() + LoadCharacterNew(newWaitForChildSecurity(Player,"Appearance"),Player.Character) + elseif (Player.Character.Parent == nil) then + wait(5) + Player:LoadCharacter() -- to make sure nobody is deleted. + LoadCharacterNew(newWaitForChildSecurity(Player,"Appearance"),Player.Character) + end + end + end + end) + PlayerService.PlayerRemoving:connect(function(Player) + print("Player '" .. Player.Name .. "' with ID '" .. Player.userId .. "' leaving") + if (showServerNotifications) then + game.Players:Chat("Player '" .. Player.Name .. "' left") + end + end) + InitalizeSecurityValues(game.Lighting,ClientEXEMD5,LauncherMD5,ClientScriptMD5) + PingMasterServer(1, ServerBrowserAddress, ServerBrowserName, ServerIP, Port, Client) + Server.IncommingConnection:connect(IncommingConnection) + pcall(function() game.Close:connect(function() PingMasterServer(0, ServerBrowserAddress, ServerBrowserName, ServerIP, Port, Client) Server:Stop() end) end) +end + +function CSConnect(UserID,ServerIP,ServerPort,PlayerName,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,TShirtID,ShirtID,PantsID,FaceID,HeadID,IconType,ItemID,ClientEXEMD5,LauncherMD5,ClientScriptMD5,Tripcode,Ticket) + pcall(function() game:SetPlaceID(-1, false) end) + pcall(function() game:GetService("Players"):SetChatStyle(Enum.ChatStyle.ClassicAndBubble) end) + + pcall(function() + game:GetService("GuiService").Changed:connect(function() + pcall(function() game:GetService("GuiService").ShowLegacyPlayerList=true end) + pcall(function() game.CoreGui.RobloxGui.PlayerListScript:Remove() end) + pcall(function() game.CoreGui.RobloxGui.PlayerListTopRightFrame:Remove() end) + pcall(function() game.CoreGui.RobloxGui.BigPlayerListWindowImposter:Remove() end) + pcall(function() game.CoreGui.RobloxGui.BigPlayerlist:Remove() end) + end) + end) + + local suc, err = pcall(function() + client = game:GetService("NetworkClient") + player = game:GetService("Players"):CreateLocalPlayer(UserID) + player:SetSuperSafeChat(false) + pcall(function() player:SetUnder13(false) end) + pcall(function() player:SetMembershipType(Enum.MembershipType.BuildersClub) end) + pcall(function() player:SetAccountAge(365) end) + player.CharacterAppearance=0 + pcall(function() player.Name=PlayerName or "" end) + game:GetService("Visit"):SetUploadUrl("") + InitalizeClientAppearance(player,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,TShirtID,ShirtID,PantsID,FaceID,HeadID,ItemID) + InitalizeSecurityValues(player,ClientEXEMD5,LauncherMD5,ClientScriptMD5) + InitalizeTripcode(player,Tripcode) + end) + + local function dieerror(errmsg) + game:SetMessage(errmsg) + wait(math.huge) + end + + if not suc then + dieerror(err) + end + + local function disconnect(peer,lostconnection) + game:SetMessage("You have lost connection to the game") + end + + local function connected(url, replicator) + replicator.Disconnection:connect(disconnect) + local marker = nil + local suc, err = pcall(function() + game:SetMessageBrickCount() + marker = replicator:SendMarker() + end) + if not suc then + dieerror(err) + end + marker.Received:connect(function() + local suc, err = pcall(function() + game:ClearMessage() + end) + if not suc then + dieerror(err) + end + end) + end + + local function rejected() + dieerror("Failed to connect to the Game. (Connection rejected)") + end + + local function failed(peer, errcode, why) + dieerror("Failed to connect to the Game. (ID="..errcode.." ["..why.."])") + end + + local suc, err = pcall(function() + game:SetMessage("Connecting to server...") + client.ConnectionAccepted:connect(connected) + client.ConnectionRejected:connect(rejected) + client.ConnectionFailed:connect(failed) + client:Connect(ServerIP,ServerPort, 0, 20) + end) + + if not suc then + local x = Instance.new("Message") + x.Text = err + x.Parent = workspace + wait(math.huge) + end +end + +function CSSolo(UserID,PlayerName,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,TShirtID,ShirtID,PantsID,FaceID,HeadID,IconType,ItemID) + local plr = game.Players:CreateLocalPlayer(UserID) + game:GetService("RunService"):run() + game.Workspace:InsertContent("rbxasset://Fonts//libraries.rbxm") + plr.Name = PlayerName + plr:LoadCharacter() + plr.CharacterAppearance=0 + InitalizeClientAppearance(plr,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,TShirtID,ShirtID,PantsID,FaceID,HeadID,ItemID) + LoadCharacterNew(newWaitForChild(plr,"Appearance"),plr.Character,false) + game:GetService("Visit"):SetUploadUrl("") + while true do + wait(0.001) + if (plr.Character ~= nil) then + if (plr.Character:findFirstChild("Humanoid") and (plr.Character.Humanoid.Health == 0)) then + wait(5) + plr:LoadCharacter() + LoadCharacterNew(newWaitForChild(plr,"Appearance"),plr.Character) + elseif (plr.Character.Parent == nil) then + wait(5) + plr:LoadCharacter() -- to make sure nobody is deleted. + LoadCharacterNew(newWaitForChild(plr,"Appearance"),plr.Character) + end + end + end +end + +function CSStudio() +end + +_G.CSServer=CSServer +_G.CSConnect=CSConnect +_G.CSSolo=CSSolo +_G.CSStudio=CSStudio \ No newline at end of file