1
ROBLOX Join Game LUA on 9/15/2010, 5:53 pm
Today, I found a script that makes you join the game. Here it is (WARNING! DON'T SAY YOU GOT THIS BECAUSE I WAS THE FIRST PERSON TO SAY THIS AND IT'S EVEN ON ROBLOX!)
function onPlayerAdded(player)
-- override
end
--[[
if false then
delay(0, function()
while (game.Players.LocalPlayer == nil) do wait(1) end
while (game.Players.LocalPlayer:FindFirstChild("PlayerGui") == nil) do wait (1) end
local m = Instance.new("GuiMain")
local l = Instance.new("ImageLabel")
m.Name = "AdGUI"
l.BackgroundTransparency = 1
l.Image = "http://www.roblox.com/asset/?id=23573247"
l.Position = UDim2.new(.3,5,0,5)
l.Size = UDim2.new(0,470,0,165)
l.Parent = m
m.Parent = game.Players.LocalPlayer.PlayerGui
wait(15)
m:Remove()
end)
end
--]]
-- MultiplayerSharedScript.lua inserted here ------ Prepended to GroupBuild.lua and Join.lua --
local startTime = tick()
local loadResolved = false
local joinResolved = false
local playResolved = true
local playStartTime = 0
local cdnSuccess = 0
local cdnFailure = 0
pcall(function() settings().Rendering.EnableFRM = true end)
function reportContentProvider(time, queueLength, blocking)
pcall(function()
game:HttpGet("http://www.roblox.com/Analytics/ContentProvider.ashx?t=" .. time .. "&ql=" .. queueLength, blocking)
end)
end
function reportCdn(blocking)
pcall(function()
local newCdnSuccess = settings().Diagnostics.CdnSuccessCount
local newCdnFailure = settings().Diagnostics.CdnFailureCount
local successDelta = newCdnSuccess - cdnSuccess
local failureDelta = newCdnFailure - cdnFailure
cdnSuccess = newCdnSuccess
cdnFailure = newCdnFailure
if successDelta > 0 or failureDelta > 0 then
game:HttpGet("http://www.roblox.com/Game/Cdn.ashx?source=client&success=" .. successDelta .. "&failure=" .. failureDelta, blocking)
end
end)
end
function reportDuration(category, result, duration, blocking)
pcall(function() game:HttpGet("http://www.roblox.com/Game/JoinRate.ashx?st=0&i=0&p=-1&c=" .. category .. "&r=" .. result .. "&d=" .. (math.floor(duration*1000)) .. "&ip=localhost" , blocking) end)
end
-- arguments ---------------------------------------
local threadSleepTime = ...
if threadSleepTime==nil then
threadSleepTime = 15
end
local test = true
print("! Joining game '' place -1 at localhost")
local closeConnection = game.Close:connect(function()
if 0 then
reportCdn(true)
if (not loadResolved) or (not joinResolved) then
local duration = tick() - startTime;
if not loadResolved then
loadResolved = true
reportDuration("GameLoad","Cancel", duration, true)
end
if not joinResolved then
joinResolved = true
reportDuration("GameJoin","Cancel", duration, true)
end
elseif not playResolved then
local duration = tick() - playStartTime;
playResolved = true
reportDuration("GameDuration","Success", duration, true)
end
end
end)
game:GetService("ChangeHistoryService"):SetEnabled= false
game:GetService("ContentProvider"):SetThreadPool(16)
game:GetService("InsertService"):SetBaseCategoryUrl("http://www.roblox.com/Game/Tools/InsertAsset.ashx?nsets=10&type=base")
game:GetService("InsertService"):SetUserCategoryUrl("http://www.roblox.com/Game/Tools/InsertAsset.ashx?nsets=20&type=user&userid=%d")
game:GetService("InsertService"):SetCollectionUrl("http://www.roblox.com/Game/Tools/InsertAsset.ashx?sid=%d")
game:GetService("InsertService"):SetAssetUrl("http://www.roblox.com/Asset/?id=%d")
game:GetService("InsertService"):SetAssetVersionUrl("http://www.roblox.com/Asset/?assetversionid=%d")
game:GetService("InsertService"):SetAdvancedResults(true)
-- Bubble chat. This is all-encapsulated to allow us to turn it off with a config setting
pcall(function() game:GetService("Players"):SetChatStyle(Enum.ChatStyle.Classic) end)
local waitingForCharacter = false
local waitingForCharacterGuid = "119fe19a-a281-4794-95d6-0c4afa5b9ada";
pcall( function()
if settings().Network.MtuOverride == 0 then
settings().Network.MtuOverride = 1400
end
end)
-- globals -----------------------------------------
client = game:GetService("NetworkClient")
visit = game:GetService("Visit")
-- functions ---------------------------------------
function setMessage(message)
-- todo: animated "..."
game:SetMessage(message)
end
function showErrorWindow(message, errorType)
if 0 then
if (not loadResolved) or (not joinResolved) then
local duration = tick() - startTime;
if not loadResolved then
loadResolved = true
reportDuration("GameLoad","Failure", duration, false)
end
if not joinResolved then
joinResolved = true
reportDuration("GameJoin","Failure", duration, false)
end
pcall(function() game:HttpGet("?FilterName=Type&FilterValue=" .. errorType .. "&Type=JoinFailure", false) end)
elseif not playResolved then
local duration = tick() - playStartTime;
playResolved = true
reportDuration("GameDuration","Failure", duration, false)
pcall(function() game:HttpGet("?FilterName=Type&FilterValue=" .. errorType .. "&Type=GameDisconnect", false) end)
end
end
game:SetMessage(message)
end
function analytics(name)
if not test and false then
pcall(function() game:HttpGet("?IPFilter=Primary&SecondaryFilterName=UserId&SecondaryFilterValue=0&Type=" .. name, false) end)
end
end
function analyticsGuid(name, guid)
if not test and false then
pcall(function() game:HttpGet("?IPFilter=Primary&SecondaryFilterName=guid&SecondaryFilterValue=" .. guid .. "&Type=" .. name, false) end)
end
end
function reportError(err, message)
print("***ERROR*** " .. err)
if not test then visit:SetUploadUrl("") end
client:Disconnect()
wait(4)
showErrorWindow("Error: " .. err, message)
end
-- called when the client connection closes
function onDisconnection(peer, lostConnection)
if lostConnection then
if waitingForCharacter then analyticsGuid("Waiting for Character Lost Connection",waitingForCharacterGuid) end
showErrorWindow("You have lost the connection to the game", "LostConnection")
else
if waitingForCharacter then analyticsGuid("Waiting for Character Game Shutdown",waitingForCharacterGuid) end
showErrorWindow("This game has shut down", "Kick")
end
end
function requestCharacter(replicator)
-- prepare code for when the Character appears
local connection
connection = player.Changed:connect(function (property)
if property=="Character" then
game:ClearMessage()
waitingForCharacter = false
analyticsGuid("Waiting for Character Success", waitingForCharacterGuid)
connection:disconnect()
if 0 then
if not joinResolved then
local duration = tick() - startTime;
joinResolved = true
reportDuration("GameJoin","Success", duration, false)
playStartTime = tick()
playResolved = false
end
end
end
end)
setMessage("Requesting character")
if 0 and not loadResolved then
local duration = tick() - startTime;
loadResolved = true
reportDuration("GameLoad","Success", duration, false)
end
local success, err = pcall(function()
replicator:RequestCharacter()
setMessage("Waiting for character")
waitingForCharacter = true
analyticsGuid("Waiting for Character Begin",waitingForCharacterGuid);
end)
if not success then
reportError(err,"W4C")
return
end
end
-- called when the client connection is established
function onConnectionAccepted(url, replicator)
local waitingForMarker = true
local success, err = pcall(function()
if not test then
visit:SetPing("", 300)
end
game:SetMessageBrickCount()
replicator.Disconnection:connect(onDisconnection)
-- Wait for a marker to return before creating the Player
local marker = replicator:SendMarker()
marker.Received:connect(function()
waitingForMarker = false
requestCharacter(replicator)
end)
end)
if not success then
reportError(err,"ConnectionAccepted")
return
end
-- TODO: report marker progress
while waitingForMarker do
workspace:ZoomToExtents()
wait(0.5)
end
end
-- called when the client connection fails
function onConnectionFailed(_, error)
showErrorWindow("Failed to connect to the Game. (ID=" .. error .. ")", "ID" .. error)
end
-- called when the client connection is rejected
function onConnectionRejected()
connectionFailed:disconnect()
showErrorWindow("This game is not available. Please try another", "WrongVersion")
end
idled = false
function onPlayerIdled(time)
if time > 20*60 then
showErrorWindow(string.format("You were disconnected for being idle %d minutes", time/60), "Idle")
client:Disconnect()
if not idled then
idled = true
end
end
end
-- main ------------------------------------------------------------
analytics("Start Join Script")
pcall(function() settings().Diagnostics:LegacyScriptMode() end)
local success, err = pcall(function()
game:SetRemoteBuildMode(true)
setMessage("Creating Player")
player = game:GetService("Players"):CreateLocalPlayer(0)
player:SetSuperSafeChat(true)
player.Idled:connect(onPlayerIdled)
-- Overriden
onPlayerAdded(player)
pcall(function() player.Name = [========[Player]========] end)
player.CharacterAppearance = ""
if not test then visit:SetUploadUrl("")end
analytics("Created Player")
setMessage("Connecting to Server")
client.ConnectionAccepted:connect(onConnectionAccepted)
client.ConnectionRejected:connect(onConnectionRejected)
connectionFailed = client.ConnectionFailed:connect(onConnectionFailed)
client.Ticket = ""
client:Connect("localhost", 53640, 0, threadSleepTime)
analytics("Connect Client")
end)
if not success then
reportError(err,"CreatePlayer")
end
if not test then
-- TODO: Async get?
loadfile("")("", -1, 0)
end
if 0 then
delay(60*5, function()
while true do
reportCdn(false)
wait(60*5)
end
end)
local cpTime = 30
delay(cpTime, function()
while cpTime <= 480 do
reportContentProvider(cpTime, game:GetService("ContentProvider").RequestQueueSize, false)
wait(cpTime)
cpTime = cpTime * 2
end
end)
end
pcall(function() game:SetScreenshotInfo("") end)
pcall(function() game:SetVideoInfo("") end)
analytics("Join Finished")
function onPlayerAdded(player)
-- override
end
--[[
if false then
delay(0, function()
while (game.Players.LocalPlayer == nil) do wait(1) end
while (game.Players.LocalPlayer:FindFirstChild("PlayerGui") == nil) do wait (1) end
local m = Instance.new("GuiMain")
local l = Instance.new("ImageLabel")
m.Name = "AdGUI"
l.BackgroundTransparency = 1
l.Image = "http://www.roblox.com/asset/?id=23573247"
l.Position = UDim2.new(.3,5,0,5)
l.Size = UDim2.new(0,470,0,165)
l.Parent = m
m.Parent = game.Players.LocalPlayer.PlayerGui
wait(15)
m:Remove()
end)
end
--]]
-- MultiplayerSharedScript.lua inserted here ------ Prepended to GroupBuild.lua and Join.lua --
local startTime = tick()
local loadResolved = false
local joinResolved = false
local playResolved = true
local playStartTime = 0
local cdnSuccess = 0
local cdnFailure = 0
pcall(function() settings().Rendering.EnableFRM = true end)
function reportContentProvider(time, queueLength, blocking)
pcall(function()
game:HttpGet("http://www.roblox.com/Analytics/ContentProvider.ashx?t=" .. time .. "&ql=" .. queueLength, blocking)
end)
end
function reportCdn(blocking)
pcall(function()
local newCdnSuccess = settings().Diagnostics.CdnSuccessCount
local newCdnFailure = settings().Diagnostics.CdnFailureCount
local successDelta = newCdnSuccess - cdnSuccess
local failureDelta = newCdnFailure - cdnFailure
cdnSuccess = newCdnSuccess
cdnFailure = newCdnFailure
if successDelta > 0 or failureDelta > 0 then
game:HttpGet("http://www.roblox.com/Game/Cdn.ashx?source=client&success=" .. successDelta .. "&failure=" .. failureDelta, blocking)
end
end)
end
function reportDuration(category, result, duration, blocking)
pcall(function() game:HttpGet("http://www.roblox.com/Game/JoinRate.ashx?st=0&i=0&p=-1&c=" .. category .. "&r=" .. result .. "&d=" .. (math.floor(duration*1000)) .. "&ip=localhost" , blocking) end)
end
-- arguments ---------------------------------------
local threadSleepTime = ...
if threadSleepTime==nil then
threadSleepTime = 15
end
local test = true
print("! Joining game '' place -1 at localhost")
local closeConnection = game.Close:connect(function()
if 0 then
reportCdn(true)
if (not loadResolved) or (not joinResolved) then
local duration = tick() - startTime;
if not loadResolved then
loadResolved = true
reportDuration("GameLoad","Cancel", duration, true)
end
if not joinResolved then
joinResolved = true
reportDuration("GameJoin","Cancel", duration, true)
end
elseif not playResolved then
local duration = tick() - playStartTime;
playResolved = true
reportDuration("GameDuration","Success", duration, true)
end
end
end)
game:GetService("ChangeHistoryService"):SetEnabled= false
game:GetService("ContentProvider"):SetThreadPool(16)
game:GetService("InsertService"):SetBaseCategoryUrl("http://www.roblox.com/Game/Tools/InsertAsset.ashx?nsets=10&type=base")
game:GetService("InsertService"):SetUserCategoryUrl("http://www.roblox.com/Game/Tools/InsertAsset.ashx?nsets=20&type=user&userid=%d")
game:GetService("InsertService"):SetCollectionUrl("http://www.roblox.com/Game/Tools/InsertAsset.ashx?sid=%d")
game:GetService("InsertService"):SetAssetUrl("http://www.roblox.com/Asset/?id=%d")
game:GetService("InsertService"):SetAssetVersionUrl("http://www.roblox.com/Asset/?assetversionid=%d")
game:GetService("InsertService"):SetAdvancedResults(true)
-- Bubble chat. This is all-encapsulated to allow us to turn it off with a config setting
pcall(function() game:GetService("Players"):SetChatStyle(Enum.ChatStyle.Classic) end)
local waitingForCharacter = false
local waitingForCharacterGuid = "119fe19a-a281-4794-95d6-0c4afa5b9ada";
pcall( function()
if settings().Network.MtuOverride == 0 then
settings().Network.MtuOverride = 1400
end
end)
-- globals -----------------------------------------
client = game:GetService("NetworkClient")
visit = game:GetService("Visit")
-- functions ---------------------------------------
function setMessage(message)
-- todo: animated "..."
game:SetMessage(message)
end
function showErrorWindow(message, errorType)
if 0 then
if (not loadResolved) or (not joinResolved) then
local duration = tick() - startTime;
if not loadResolved then
loadResolved = true
reportDuration("GameLoad","Failure", duration, false)
end
if not joinResolved then
joinResolved = true
reportDuration("GameJoin","Failure", duration, false)
end
pcall(function() game:HttpGet("?FilterName=Type&FilterValue=" .. errorType .. "&Type=JoinFailure", false) end)
elseif not playResolved then
local duration = tick() - playStartTime;
playResolved = true
reportDuration("GameDuration","Failure", duration, false)
pcall(function() game:HttpGet("?FilterName=Type&FilterValue=" .. errorType .. "&Type=GameDisconnect", false) end)
end
end
game:SetMessage(message)
end
function analytics(name)
if not test and false then
pcall(function() game:HttpGet("?IPFilter=Primary&SecondaryFilterName=UserId&SecondaryFilterValue=0&Type=" .. name, false) end)
end
end
function analyticsGuid(name, guid)
if not test and false then
pcall(function() game:HttpGet("?IPFilter=Primary&SecondaryFilterName=guid&SecondaryFilterValue=" .. guid .. "&Type=" .. name, false) end)
end
end
function reportError(err, message)
print("***ERROR*** " .. err)
if not test then visit:SetUploadUrl("") end
client:Disconnect()
wait(4)
showErrorWindow("Error: " .. err, message)
end
-- called when the client connection closes
function onDisconnection(peer, lostConnection)
if lostConnection then
if waitingForCharacter then analyticsGuid("Waiting for Character Lost Connection",waitingForCharacterGuid) end
showErrorWindow("You have lost the connection to the game", "LostConnection")
else
if waitingForCharacter then analyticsGuid("Waiting for Character Game Shutdown",waitingForCharacterGuid) end
showErrorWindow("This game has shut down", "Kick")
end
end
function requestCharacter(replicator)
-- prepare code for when the Character appears
local connection
connection = player.Changed:connect(function (property)
if property=="Character" then
game:ClearMessage()
waitingForCharacter = false
analyticsGuid("Waiting for Character Success", waitingForCharacterGuid)
connection:disconnect()
if 0 then
if not joinResolved then
local duration = tick() - startTime;
joinResolved = true
reportDuration("GameJoin","Success", duration, false)
playStartTime = tick()
playResolved = false
end
end
end
end)
setMessage("Requesting character")
if 0 and not loadResolved then
local duration = tick() - startTime;
loadResolved = true
reportDuration("GameLoad","Success", duration, false)
end
local success, err = pcall(function()
replicator:RequestCharacter()
setMessage("Waiting for character")
waitingForCharacter = true
analyticsGuid("Waiting for Character Begin",waitingForCharacterGuid);
end)
if not success then
reportError(err,"W4C")
return
end
end
-- called when the client connection is established
function onConnectionAccepted(url, replicator)
local waitingForMarker = true
local success, err = pcall(function()
if not test then
visit:SetPing("", 300)
end
game:SetMessageBrickCount()
replicator.Disconnection:connect(onDisconnection)
-- Wait for a marker to return before creating the Player
local marker = replicator:SendMarker()
marker.Received:connect(function()
waitingForMarker = false
requestCharacter(replicator)
end)
end)
if not success then
reportError(err,"ConnectionAccepted")
return
end
-- TODO: report marker progress
while waitingForMarker do
workspace:ZoomToExtents()
wait(0.5)
end
end
-- called when the client connection fails
function onConnectionFailed(_, error)
showErrorWindow("Failed to connect to the Game. (ID=" .. error .. ")", "ID" .. error)
end
-- called when the client connection is rejected
function onConnectionRejected()
connectionFailed:disconnect()
showErrorWindow("This game is not available. Please try another", "WrongVersion")
end
idled = false
function onPlayerIdled(time)
if time > 20*60 then
showErrorWindow(string.format("You were disconnected for being idle %d minutes", time/60), "Idle")
client:Disconnect()
if not idled then
idled = true
end
end
end
-- main ------------------------------------------------------------
analytics("Start Join Script")
pcall(function() settings().Diagnostics:LegacyScriptMode() end)
local success, err = pcall(function()
game:SetRemoteBuildMode(true)
setMessage("Creating Player")
player = game:GetService("Players"):CreateLocalPlayer(0)
player:SetSuperSafeChat(true)
player.Idled:connect(onPlayerIdled)
-- Overriden
onPlayerAdded(player)
pcall(function() player.Name = [========[Player]========] end)
player.CharacterAppearance = ""
if not test then visit:SetUploadUrl("")end
analytics("Created Player")
setMessage("Connecting to Server")
client.ConnectionAccepted:connect(onConnectionAccepted)
client.ConnectionRejected:connect(onConnectionRejected)
connectionFailed = client.ConnectionFailed:connect(onConnectionFailed)
client.Ticket = ""
client:Connect("localhost", 53640, 0, threadSleepTime)
analytics("Connect Client")
end)
if not success then
reportError(err,"CreatePlayer")
end
if not test then
-- TODO: Async get?
loadfile("")("", -1, 0)
end
if 0 then
delay(60*5, function()
while true do
reportCdn(false)
wait(60*5)
end
end)
local cpTime = 30
delay(cpTime, function()
while cpTime <= 480 do
reportContentProvider(cpTime, game:GetService("ContentProvider").RequestQueueSize, false)
wait(cpTime)
cpTime = cpTime * 2
end
end)
end
pcall(function() game:SetScreenshotInfo("") end)
pcall(function() game:SetVideoInfo("") end)
analytics("Join Finished")






