update files with 2009L added.
This commit is contained in:
parent
045a672508
commit
5060062da9
|
|
@ -1,4 +1,12 @@
|
|||
1.3 Snapshot v22.8288.28158.1
|
||||
Notes:
|
||||
- The Novetus/Roblox soundtrack has been removed to respect the rights of copyright holders.
|
||||
|
||||
Enhancements:
|
||||
- Re-added and updated 2009L!
|
||||
- Thanks to MenderMan and Coke/Natalie for fixes!
|
||||
----------------------------------------------------------------------------
|
||||
1.3 Snapshot v22.8288.28158.1
|
||||
Enhancements:
|
||||
- Reverted the safechat.xml in all clients to the original version distributed in each client for accuracy reasons.
|
||||
- Fixed an exploit where players were able to inject places into online games.
|
||||
|
|
|
|||
|
|
@ -65,6 +65,12 @@ 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
|
||||
del /s /q Novetus\clients\2009L\DefaultPreset.ini
|
||||
del /s /q Novetus\clients\2009L\content\temp.rbxl
|
||||
|
||||
del /s /q Novetus\clients\2010L\ReShade.ini
|
||||
del /s /q Novetus\clients\2010L\OPENGL32.log
|
||||
del /s /q Novetus\clients\2010L\opengl32.dll
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ if not exist "%gamescriptdir%/2007M-Shaders" mkdir "%gamescriptdir%/2007M-Shader
|
|||
if not exist "%gamescriptdir%/2008M" mkdir "%gamescriptdir%/2008M"
|
||||
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"
|
||||
|
|
@ -29,6 +30,7 @@ XCOPY "%cd%\Novetus\clients\2007M-Shaders\content\scripts\CSMPFunctions.lua" "%g
|
|||
XCOPY "%cd%\Novetus\clients\2008M\content\scripts\CSMPFunctions.lua" "%gamescriptdir%/2008M" /y
|
||||
XCOPY "%cd%\Novetus\clients\2009E\content\scripts\CSMPFunctions.lua" "%gamescriptdir%/2009E" /y
|
||||
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
|
||||
|
|
@ -65,6 +67,7 @@ XCOPY "%cd%\Novetus\clients\2007M-Shaders\content\fonts\libraries.rbxm" "%gamesc
|
|||
XCOPY "%cd%\Novetus\clients\2008M\content\fonts\libraries.rbxm" "%gamescriptdir%/2008M" /y
|
||||
XCOPY "%cd%\Novetus\clients\2009E\content\fonts\libraries.rbxm" "%gamescriptdir%/2009E" /y
|
||||
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
|
||||
|
|
@ -79,6 +82,7 @@ del /s /q "%tempdir%\GlobalSettings2_2007E.xml"
|
|||
del /s /q "%tempdir%\GlobalSettings2_2007E-Shaders.xml"
|
||||
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"
|
||||
|
|
@ -93,6 +97,7 @@ XCOPY "%tempdir%\GlobalSettings2_2007E_default.xml" "%gamescriptdir%/2007E" /y
|
|||
XCOPY "%tempdir%\GlobalSettings2_2007E-Shaders_default.xml" "%gamescriptdir%/2007E-Shaders" /y
|
||||
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
|
||||
|
|
|
|||
|
|
@ -9,5 +9,4 @@ Roblox_Legacy_Place_Converter.exe
|
|||
ClientScriptTester
|
||||
NetFx20SP2_x64.exe
|
||||
NetFx20SP2_x86.exe
|
||||
models
|
||||
soundtrack
|
||||
models
|
||||
|
|
@ -0,0 +1,801 @@
|
|||
showServerNotifications = true
|
||||
pcall(function() game:GetService("ScriptContext").ScriptsDisabled = false end)
|
||||
|
||||
--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)
|
||||
pcall(function() _G.CSScript_OnPrePlayerKicked(Player,reason) end)
|
||||
|
||||
if (game.Lighting:FindFirstChild("SkipSecurity") ~= nil) then
|
||||
do return end
|
||||
end
|
||||
|
||||
Server = game:GetService("NetworkServer")
|
||||
|
||||
if (Player ~= nil) then
|
||||
pcall(function() _G.CSScript_OnPlayerKicked(Player,reason) end)
|
||||
|
||||
for _,Child in pairs(Server:children()) do
|
||||
name = "ServerReplicator|"..Player.Name.."|"..Player.userId.."|"..Player.AnonymousIdentifier.Value
|
||||
if (Server:findFirstChild(name) ~= nil and Child.Name == name) then
|
||||
--2010L crashes if we don't do this.
|
||||
wait(0.3)
|
||||
Child:CloseConnection()
|
||||
print("Player '" .. Player.Name .. "' Kicked. Reason: "..reason)
|
||||
end
|
||||
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
|
||||
-- this should fix a rare issue where 2010L kicks players after rejoining.
|
||||
wait(0.5)
|
||||
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)
|
||||
if (game.Lighting:findFirstChild("DisableCustomization") ~= nil) then
|
||||
do return end
|
||||
end
|
||||
|
||||
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
|
||||
if (pcall(function()
|
||||
newTShirt = game.Workspace:InsertContent(newVal.Value)
|
||||
if newTShirt[1] then
|
||||
if newTShirt[1].className == "ShirtGraphic" then
|
||||
newTShirt[1].Parent = newChar
|
||||
local oldTexture = newTShirt[1].Graphic;
|
||||
OldURL,OldID = oldTexture:match("(.+)=(.+)")
|
||||
NewURL,NewID = newVal.Value:match("(.+)=(.+)")
|
||||
newTShirt[1].Graphic = NewURL .. '=' .. OldID
|
||||
else
|
||||
newTShirt[1]:remove()
|
||||
end
|
||||
end
|
||||
end)) then
|
||||
--nothing
|
||||
print("success");
|
||||
else
|
||||
print("fail");
|
||||
newTShirt = Instance.new("ShirtGraphic")
|
||||
newTShirt.Graphic = newVal.Value
|
||||
newTShirt.Parent = newChar
|
||||
end
|
||||
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
|
||||
if (pcall(function()
|
||||
newShirt = game.Workspace:InsertContent(newVal.Value)
|
||||
if newShirt[1] then
|
||||
if newShirt[1].className == "Shirt" then
|
||||
newShirt[1].Parent = newChar
|
||||
local oldTexture = newShirt[1].ShirtTemplate;
|
||||
OldURL,OldID = oldTexture:match("(.+)=(.+)")
|
||||
NewURL,NewID = newVal.Value:match("(.+)=(.+)")
|
||||
newShirt[1].ShirtTemplate = NewURL .. '=' .. OldID
|
||||
else
|
||||
newShirt[1]:remove()
|
||||
end
|
||||
end
|
||||
end)) then
|
||||
--nothing
|
||||
print("success");
|
||||
else
|
||||
print("fail");
|
||||
newShirt = Instance.new("Shirt")
|
||||
newShirt.ShirtTemplate = newVal.Value
|
||||
newShirt.Parent = newChar
|
||||
end
|
||||
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
|
||||
if (pcall(function()
|
||||
newPants = game.Workspace:InsertContent(newVal.Value)
|
||||
if newPants[1] then
|
||||
if newPants[1].className == "Pants" then
|
||||
newPants[1].Parent = newChar
|
||||
local oldTexture = newPants[1].PantsTemplate;
|
||||
OldURL,OldID = oldTexture:match("(.+)=(.+)")
|
||||
NewURL,NewID = newVal.Value:match("(.+)=(.+)")
|
||||
newPants[1].PantsTemplate = NewURL .. '=' .. OldID
|
||||
else
|
||||
newPants[1]:remove()
|
||||
end
|
||||
end
|
||||
end)) then
|
||||
--nothing
|
||||
print("success");
|
||||
else
|
||||
print("fail");
|
||||
newPants = Instance.new("Pants")
|
||||
newPants.PantsTemplate = newVal.Value
|
||||
newPants.Parent = newChar
|
||||
end
|
||||
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
|
||||
if (pcall(function()
|
||||
newFace = game.Workspace:InsertContent(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"
|
||||
local oldTexture = newFace[1].Texture;
|
||||
OldURL,OldID = oldTexture:match("(.+)=(.+)")
|
||||
NewURL,NewID = newVal.Value:match("(.+)=(.+)")
|
||||
newFace[1].Texture = NewURL .. '=' .. OldID
|
||||
else
|
||||
newFace[1]:remove()
|
||||
end
|
||||
end
|
||||
end)) then
|
||||
--nothing
|
||||
print("success");
|
||||
else
|
||||
print("fail");
|
||||
newWaitForChild(charparts[1],"face"):remove()
|
||||
newFace = Instance.new("Decal")
|
||||
newFace.Texture = newVal.Value
|
||||
newFace.Face = "Front"
|
||||
newFace.Parent = charparts[1]
|
||||
end
|
||||
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
|
||||
|
||||
pcall(function() _G.CSScript_OnLoadCharacter(Player, playerApp) 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
|
||||
|
||||
rbxversion = version()
|
||||
print("ROBLOX Client version '" .. rbxversion .. "' loaded.")
|
||||
|
||||
function CSServer(Port,PlayerLimit,ClientEXEMD5,LauncherMD5,ClientScriptMD5,Notifications)
|
||||
pcall(function() dofile("rbxasset://..//..//..//addons//core//AddonLoader.lua") end)
|
||||
pcall(function() _G.CSScript_PreInit("Server", "2009L") end)
|
||||
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
|
||||
|
||||
local playerCount = 0
|
||||
PlayerService.PlayerAdded:connect(function(Player)
|
||||
-- create anonymous player identifier. This is so we can track clients without tripcodes
|
||||
playerCount = playerCount + 1
|
||||
|
||||
local code = Instance.new("StringValue", Player)
|
||||
code.Value = playerCount
|
||||
code.Name = "AnonymousIdentifier"
|
||||
|
||||
-- rename all Server replicators in NetworkServer to "ServerReplicator"
|
||||
for _,Child in pairs(Server:children()) do
|
||||
name = "ServerReplicator|"..Player.Name.."|"..Player.userId.."|"..Player.AnonymousIdentifier.Value
|
||||
if (Server:findFirstChild(name) == nil) then
|
||||
if (string.match(Child.Name, "ServerReplicator") == nil) then
|
||||
Child.Name = name
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
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
|
||||
|
||||
pcall(function() _G.CSScript_OnPlayerAdded(Player) end)
|
||||
|
||||
while true do
|
||||
wait(0.001)
|
||||
if (game.Lighting:findFirstChild("DisableRespawns") == nil) then
|
||||
if (Player.Character ~= nil) then
|
||||
if (Player.Character:FindFirstChild("Humanoid") and (Player.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
|
||||
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
|
||||
|
||||
pcall(function() _G.CSScript_OnPlayerRemoved(Player) end)
|
||||
end)
|
||||
InitalizeSecurityValues(game.Lighting,ClientEXEMD5,LauncherMD5,ClientScriptMD5)
|
||||
Server.IncommingConnection:connect(IncommingConnection)
|
||||
pcall(function() game.Close:connect(function() Server:Stop() end) end)
|
||||
pcall(function() _G.CSScript_PostInit() end)
|
||||
coroutine.resume(coroutine.create(function()
|
||||
while true do
|
||||
wait(0.1)
|
||||
pcall(function() _G.CSScript_Update() end)
|
||||
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..")")
|
||||
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)
|
||||
pcall(function() dofile("rbxasset://..//..//..//addons//core//AddonLoader.lua") end)
|
||||
pcall(function() _G.CSScript_PreInit("Solo", "2009L") end)
|
||||
game:GetService("RunService"):Run()
|
||||
local plr = game.Players:CreateLocalPlayer(UserID)
|
||||
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)
|
||||
wait(0.5)
|
||||
LoadCharacterNew(newWaitForChild(plr,"Appearance"),plr.Character,false)
|
||||
game.Workspace:InsertContent("rbxasset://Fonts//libraries.rbxm")
|
||||
newWaitForChild(game.StarterGui, "Health")
|
||||
game.StarterGui.Health:clone().Parent = plr.PlayerGui
|
||||
game:GetService("Visit"):SetUploadUrl("")
|
||||
pcall(function() _G.CSScript_PostInit() end)
|
||||
coroutine.resume(coroutine.create(function()
|
||||
while true do
|
||||
wait(0.1)
|
||||
pcall(function() _G.CSScript_Update() end)
|
||||
end
|
||||
end))
|
||||
while true do
|
||||
wait(0.001)
|
||||
if (game.Lighting:findFirstChild("DisableRespawns") == nil) then
|
||||
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
|
||||
end
|
||||
|
||||
function CSStudio()
|
||||
pcall(function() dofile("rbxasset://..//..//..//addons//core//AddonLoader.lua") end)
|
||||
pcall(function() _G.CSScript_PreInit("Studio", "2009L") end)
|
||||
pcall(function() _G.CSScript_PostInit() end)
|
||||
coroutine.resume(coroutine.create(function()
|
||||
while true do
|
||||
wait(0.1)
|
||||
pcall(function() _G.CSScript_Update() end)
|
||||
end
|
||||
end))
|
||||
end
|
||||
|
||||
_G.CSServer=CSServer
|
||||
_G.CSConnect=CSConnect
|
||||
_G.CSSolo=CSSolo
|
||||
_G.CSStudio=CSStudio
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
<roblox xmlns:xmime="http://www.w3.org/2005/05/xmlmime" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.roblox.com/roblox.xsd" version="4">
|
||||
<External>null</External>
|
||||
<External>nil</External>
|
||||
<Item class="GameSettings" referent="RBX0">
|
||||
<Properties>
|
||||
<int name="ChatHistory">50</int>
|
||||
<int name="ChatScrollLength">5</int>
|
||||
<string name="Name">Game Options</string>
|
||||
<bool name="SoftwareSound">false</bool>
|
||||
<bool name="SoundEnabled">true</bool>
|
||||
<bool name="archivable">true</bool>
|
||||
</Properties>
|
||||
</Item>
|
||||
<Item class="DebugSettings" referent="RBX1">
|
||||
<Properties>
|
||||
<bool name="AreSignalErrorsSuppressed">true</bool>
|
||||
<token name="ErrorReporting">2</token>
|
||||
<int name="InstanceCountLimit">0</int>
|
||||
<bool name="IsFmodProfilingEnabled">false</bool>
|
||||
<bool name="IsProfilingEnabled">false</bool>
|
||||
<bool name="IsScriptStackTracingEnabled">true</bool>
|
||||
<int name="LuaRamLimit">0</int>
|
||||
<string name="Name">Diagnostics</string>
|
||||
<bool name="ReportExtendedMachineConfiguration">false</bool>
|
||||
<bool name="ReportSoundWarnings">false</bool>
|
||||
<token name="TickCountPreciseOverride">2</token>
|
||||
<bool name="archivable">true</bool>
|
||||
</Properties>
|
||||
</Item>
|
||||
<Item class="PhysicsSettings" referent="RBX2">
|
||||
<Properties>
|
||||
<bool name="AreAnchorsShown">false</bool>
|
||||
<bool name="AreAwakePartsHighlighted">false</bool>
|
||||
<bool name="AreModelCoordsShown">false</bool>
|
||||
<bool name="AreOwnersShown">false</bool>
|
||||
<bool name="ArePartCoordsShown">false</bool>
|
||||
<bool name="AreRegionsShown">false</bool>
|
||||
<bool name="AreUnalignedPartsShown">false</bool>
|
||||
<bool name="AreWorldCoordsShown">false</bool>
|
||||
<bool name="Is30FpsThrottleEnabled">true</bool>
|
||||
<string name="Name">Physics</string>
|
||||
<token name="PhysicsEnviromentalThrottle">0</token>
|
||||
<bool name="archivable">true</bool>
|
||||
</Properties>
|
||||
</Item>
|
||||
<Item class="Authoring" referent="RBX3">
|
||||
<Properties>
|
||||
<string name="Name">Authoring</string>
|
||||
<bool name="ShowDepricatedObjects">false</bool>
|
||||
<bool name="ShowPreliminaryObjects">true</bool>
|
||||
<bool name="archivable">true</bool>
|
||||
</Properties>
|
||||
</Item>
|
||||
<Item class="NetworkSettings" referent="RBX4">
|
||||
<Properties>
|
||||
<double name="BandwidthExceededThreshold">1.1000000000000001</double>
|
||||
<int name="DataMtuAdjust">-200</int>
|
||||
<float name="DataSendRate">30</float>
|
||||
<bool name="ExperimentalPhysicsEnabled">true</bool>
|
||||
<int name="MaxSendBuffer">1</int>
|
||||
<int name="MtuOverride">0</int>
|
||||
<string name="Name">Network</string>
|
||||
<float name="NetworkOwnerRate">30</float>
|
||||
<double name="NextActionMultiplier">1.5</double>
|
||||
<int name="PhysicsMtuAdjust">-80</int>
|
||||
<token name="PhysicsReceive">1</token>
|
||||
<token name="PhysicsSend">0</token>
|
||||
<float name="PhysicsSendRate">20</float>
|
||||
<int name="PreferredClientPort">0</int>
|
||||
<bool name="PrintInstances">false</bool>
|
||||
<bool name="PrintPhysicsErrors">false</bool>
|
||||
<bool name="PrintProperties">false</bool>
|
||||
<double name="ReceiveRate">60</double>
|
||||
<bool name="ReplicatorDiagnostics">true</bool>
|
||||
<string name="ReportStatURL"></string>
|
||||
<bool name="ServerLocalScripts">false</bool>
|
||||
<int name="WaitingForCharacterLogRate">0</int>
|
||||
<bool name="archivable">true</bool>
|
||||
</Properties>
|
||||
</Item>
|
||||
<Item class="TaskScheduler" referent="RBX5">
|
||||
<Properties>
|
||||
<bool name="AreArbitersThrottled">false</bool>
|
||||
<token name="Concurrency">2</token>
|
||||
<string name="Name">Task Scheduler</string>
|
||||
<token name="PriorityMethod">1</token>
|
||||
<token name="SleepAdjustMethod">2</token>
|
||||
<token name="ThreadPoolConfig">0</token>
|
||||
<double name="ThrottledJobSleepTime">0.01</double>
|
||||
<bool name="archivable">true</bool>
|
||||
</Properties>
|
||||
</Item>
|
||||
<Item class="RenderSettings" referent="RBX6">
|
||||
<Properties>
|
||||
<token name="AASamples">1</token>
|
||||
<token name="AluminumQuality">0</token>
|
||||
<token name="Antialiasing">2</token>
|
||||
<float name="BatchSize">20</float>
|
||||
<token name="Bevels">0</token>
|
||||
<token name="CompoundMaterialQuality">0</token>
|
||||
<token name="CorrodedMetalQuality">0</token>
|
||||
<int name="DebugCullBlockCount">-1</int>
|
||||
<bool name="DebugDisableDebriService">false</bool>
|
||||
<bool name="DebugEagerBulkExecution">false</bool>
|
||||
<bool name="DebugFRMCullHumanoids">false</bool>
|
||||
<bool name="DebugLogFRMLogVariables">false</bool>
|
||||
<token name="DiamondPlateQuality">0</token>
|
||||
<token name="FrameRateManager">2</token>
|
||||
<Vector2int16 name="FullscreenSizePreference">
|
||||
<X>0</X>
|
||||
<Y>0</Y>
|
||||
</Vector2int16>
|
||||
<token name="GrassQuality">0</token>
|
||||
<token name="IceQuality">0</token>
|
||||
<bool name="IsAggregationShown">false</bool>
|
||||
<bool name="IsSynchronizedWithPhysics">false</bool>
|
||||
<bool name="LegacyClumping">false</bool>
|
||||
<string name="Name">Rendering</string>
|
||||
<token name="PlasticQuality">0</token>
|
||||
<token name="Shadow">0</token>
|
||||
<bool name="ShowBoundingBoxes">false</bool>
|
||||
<token name="SlateQuality">0</token>
|
||||
<bool name="TextureCompositingEnabled">true</bool>
|
||||
<token name="TrussDetail">0</token>
|
||||
<Vector2int16 name="WindowSizePreference">
|
||||
<X>0</X>
|
||||
<Y>0</Y>
|
||||
</Vector2int16>
|
||||
<token name="WoodQuality">0</token>
|
||||
<bool name="archivable">true</bool>
|
||||
<token name="graphicsMode">1</token>
|
||||
<string name="profileName"></string>
|
||||
</Properties>
|
||||
</Item>
|
||||
<Item class="Selection" referent="RBX7">
|
||||
<Properties>
|
||||
<string name="Name">Selection</string>
|
||||
<bool name="archivable">true</bool>
|
||||
</Properties>
|
||||
</Item>
|
||||
</roblox>
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
<roblox xmlns:xmime="http://www.w3.org/2005/05/xmlmime" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.roblox.com/roblox.xsd" version="4">
|
||||
<External>null</External>
|
||||
<External>nil</External>
|
||||
<Item class="Script" referent="RBX0">
|
||||
<Properties>
|
||||
<bool name="Disabled">false</bool>
|
||||
<Content name="LinkedSource"><null></null></Content>
|
||||
<string name="Name">ResetCommand</string>
|
||||
<ProtectedString name="Source">function onChatted(msg, speaker)
|
||||
|
||||
source = string.lower(speaker.Name)
|
||||
msg = string.lower(msg)
|
||||
-- Note: This one is NOT caps sensitive
|
||||
|
||||
if msg == "!!!reset" then
|
||||
speaker.Character.Humanoid.Health = 0
|
||||
end
|
||||
end
|
||||
|
||||
function onPlayerEntered(newPlayer)
|
||||
newPlayer.Chatted:connect(function(msg) onChatted(msg, newPlayer) end)
|
||||
end
|
||||
|
||||
game.Players.ChildAdded:connect(onPlayerEntered)</ProtectedString>
|
||||
<bool name="archivable">true</bool>
|
||||
</Properties>
|
||||
</Item>
|
||||
</roblox>
|
||||
Loading…
Reference in New Issue