1762 lines
69 KiB
Lua
1762 lines
69 KiB
Lua
print("[Mercury]: Loaded corescript 46295863")
|
|
local waitForChild
|
|
waitForChild = function(instance, name)
|
|
while not instance:FindFirstChild(name) do
|
|
instance.ChildAdded:wait()
|
|
end
|
|
end
|
|
local waitForProperty
|
|
waitForProperty = function(instance, property)
|
|
while not instance[property] do
|
|
instance.Changed:wait()
|
|
end
|
|
end
|
|
local gui
|
|
if script.Parent:FindFirstChild("ControlFrame") then
|
|
gui = script.Parent:FindFirstChild("ControlFrame")
|
|
else
|
|
gui = script.Parent
|
|
end
|
|
local helpButton
|
|
local updateCameraDropDownSelection
|
|
local updateVideoCaptureDropDownSelection
|
|
local tweenTime = 0.2
|
|
local mouseLockLookScreenUrl = "http://www.roblox.com/asset?id=54071825"
|
|
local classicLookScreenUrl = "http://www.roblox.com/Asset?id=45915798"
|
|
local hasGraphicsSlider = game:GetService("CoreGui").Version >= 5
|
|
local GraphicsQualityLevels = 10
|
|
local recordingVideo = false
|
|
local currentMenuSelection
|
|
local lastMenuSelection = { }
|
|
local centerDialogs = { }
|
|
local mainShield
|
|
local inStudioMode = UserSettings().GameSettings:InStudioMode()
|
|
local macClient = false
|
|
local success, isMac
|
|
success, isMac = pcall(function()
|
|
return not game.GuiService.IsWindows
|
|
end)
|
|
macClient = success and isMac
|
|
local Color3I
|
|
Color3I = function(r, g, b)
|
|
return Color3.new(r / 255, g / 255, b / 255)
|
|
end
|
|
local robloxLock
|
|
robloxLock = function(instance)
|
|
instance.RobloxLocked = true
|
|
local children = instance:GetChildren()
|
|
if children then
|
|
for _, child in ipairs(children) do
|
|
robloxLock(child)
|
|
end
|
|
end
|
|
end
|
|
local resumeGameFunction
|
|
resumeGameFunction = function(shield)
|
|
shield.Settings:TweenPosition(UDim2.new(0.5, -262, -0.5, -200), Enum.EasingDirection.InOut, Enum.EasingStyle.Sine, tweenTime, true)
|
|
return delay(tweenTime, function()
|
|
shield.Visible = false
|
|
for i = 1, #centerDialogs do
|
|
centerDialogs[i].Visible = false
|
|
game.GuiService:RemoveCenterDialog(centerDialogs[i])
|
|
end
|
|
game.GuiService:RemoveCenterDialog(shield)
|
|
settingsButton.Active = true
|
|
currentMenuSelection = nil
|
|
lastMenuSelection = { }
|
|
end)
|
|
end
|
|
local goToMenu
|
|
goToMenu = function(container, menuName, moveDirection, size, position)
|
|
if type(menuName) ~= "string" then
|
|
return
|
|
end
|
|
table.insert(lastMenuSelection, currentMenuSelection)
|
|
if menuName == "GameMainMenu" then
|
|
lastMenuSelection = { }
|
|
end
|
|
local containerChildren = container:GetChildren()
|
|
for i = 1, #containerChildren do
|
|
if containerChildren[i].Name == menuName then
|
|
containerChildren[i].Visible = true
|
|
currentMenuSelection = {
|
|
container = container,
|
|
name = menuName,
|
|
direction = moveDirection,
|
|
lastSize = size
|
|
}
|
|
if size and position then
|
|
containerChildren[i]:TweenSizeAndPosition(size, position, Enum.EasingDirection.InOut, Enum.EasingStyle.Sine, tweenTime, true)
|
|
elseif size then
|
|
containerChildren[i]:TweenSizeAndPosition(size, UDim2.new(0.5, -size.X.Offset / 2, 0.5, -size.Y.Offset / 2), Enum.EasingDirection.InOut, Enum.EasingStyle.Sine, tweenTime, true)
|
|
else
|
|
containerChildren[i]:TweenPosition(UDim2.new(0, 0, 0, 0), Enum.EasingDirection.InOut, Enum.EasingStyle.Sine, tweenTime, true)
|
|
end
|
|
else
|
|
if moveDirection == "left" then
|
|
containerChildren[i]:TweenPosition(UDim2.new(-1, -525, 0, 0), Enum.EasingDirection.InOut, Enum.EasingStyle.Sine, tweenTime, true)
|
|
elseif moveDirection == "right" then
|
|
containerChildren[i]:TweenPosition(UDim2.new(1, 525, 0, 0), Enum.EasingDirection.InOut, Enum.EasingStyle.Sine, tweenTime, true)
|
|
elseif moveDirection == "up" then
|
|
containerChildren[i]:TweenPosition(UDim2.new(0, 0, -1, -400), Enum.EasingDirection.InOut, Enum.EasingStyle.Sine, tweenTime, true)
|
|
elseif moveDirection == "down" then
|
|
containerChildren[i]:TweenPosition(UDim2.new(0, 0, 1, 400), Enum.EasingDirection.InOut, Enum.EasingStyle.Sine, tweenTime, true)
|
|
end
|
|
delay(tweenTime, function()
|
|
containerChildren[i].Visible = false
|
|
end)
|
|
end
|
|
end
|
|
end
|
|
local resetLocalCharacter
|
|
resetLocalCharacter = function()
|
|
local player = game.Players.LocalPlayer
|
|
if player and player.Character and player.Character:FindFirstChild("Humanoid") then
|
|
player.Character.Humanoid.Health = 0
|
|
end
|
|
end
|
|
local createTextButton
|
|
createTextButton = function(text, style, fontSize, buttonSize, buttonPosition)
|
|
local newTextButton = Instance.new("TextButton")
|
|
newTextButton.Font = Enum.Font.Arial
|
|
newTextButton.FontSize = fontSize
|
|
newTextButton.Size = buttonSize
|
|
newTextButton.Position = buttonPosition
|
|
newTextButton.Style = style
|
|
newTextButton.TextColor3 = Color3.new(1, 1, 1)
|
|
newTextButton.Text = text
|
|
return newTextButton
|
|
end
|
|
local CreateTextButtons
|
|
CreateTextButtons = function(frame, buttons, yPos, ySize)
|
|
if #buttons < 1 then
|
|
error("Must have more than one button")
|
|
end
|
|
local buttonNum = 1
|
|
local buttonObjs = { }
|
|
local toggleSelection
|
|
toggleSelection = function(button)
|
|
for _, obj in ipairs(buttonObjs) do
|
|
if obj == button then
|
|
obj.Style = Enum.ButtonStyle.RobloxButtonDefault
|
|
else
|
|
obj.Style = Enum.ButtonStyle.RobloxButton
|
|
end
|
|
end
|
|
end
|
|
for _, obj in ipairs(buttons) do
|
|
local button = Instance.new("TextButton")
|
|
button.Name = "Button" .. buttonNum
|
|
button.Font = Enum.Font.Arial
|
|
button.FontSize = Enum.FontSize.Size18
|
|
button.AutoButtonColor = true
|
|
button.Style = Enum.ButtonStyle.RobloxButton
|
|
button.Text = obj.Text
|
|
button.TextColor3 = Color3.new(1, 1, 1)
|
|
button.MouseButton1Click:connect(function()
|
|
toggleSelection(button)
|
|
return obj.Function()
|
|
end)
|
|
button.Parent = frame
|
|
buttonObjs[buttonNum] = button
|
|
buttonNum = buttonNum + 1
|
|
end
|
|
toggleSelection(buttonObjs[1])
|
|
local numButtons = buttonNum - 1
|
|
if numButtons == 1 then
|
|
frame.Button1.Position = UDim2.new(0.35, 0, yPos.Scale, yPos.Offset)
|
|
frame.Button1.Size = UDim2.new(0.4, 0, ySize.Scale, ySize.Offset)
|
|
elseif numButtons == 2 then
|
|
frame.Button1.Position = UDim2.new(0.1, 0, yPos.Scale, yPos.Offset)
|
|
frame.Button1.Size = UDim2.new(0.35, 0, ySize.Scale, ySize.Offset)
|
|
frame.Button2.Position = UDim2.new(0.55, 0, yPos.Scale, yPos.Offset)
|
|
frame.Button2.Size = UDim2.new(0.35, 0, ySize.Scale, ySize.Offset)
|
|
elseif numButtons >= 3 then
|
|
local spacing = 0.1 / numButtons
|
|
local buttonSize = 0.9 / numButtons
|
|
buttonNum = 1
|
|
while buttonNum <= numButtons do
|
|
buttonObjs[buttonNum].Position = UDim2.new(spacing * buttonNum + (buttonNum - 1) * buttonSize, 0, yPos.Scale, yPos.Offset)
|
|
buttonObjs[buttonNum].Size = UDim2.new(buttonSize, 0, ySize.Scale, ySize.Offset)
|
|
buttonNum = buttonNum + 1
|
|
end
|
|
end
|
|
end
|
|
local setRecordGui
|
|
setRecordGui = function(recording, stopRecordButton, recordVideoButton)
|
|
if recording then
|
|
stopRecordButton.Visible = true
|
|
recordVideoButton.Text = "Stop Recording"
|
|
else
|
|
stopRecordButton.Visible = false
|
|
recordVideoButton.Text = "Record Video"
|
|
end
|
|
end
|
|
local recordVideoClick
|
|
recordVideoClick = function(recordVideoButton, stopRecordButton)
|
|
recordingVideo = not recordingVideo
|
|
return setRecordGui(recordingVideo, stopRecordButton, recordVideoButton)
|
|
end
|
|
local backToGame
|
|
backToGame = function(buttonClicked, shield, settingsButton)
|
|
buttonClicked.Parent.Parent.Parent.Parent.Visible = false
|
|
shield.Visible = false
|
|
for i = 1, #centerDialogs do
|
|
game.GuiService:RemoveCenterDialog(centerDialogs[i])
|
|
centerDialogs[i].Visible = false
|
|
end
|
|
centerDialogs = { }
|
|
game.GuiService:RemoveCenterDialog(shield)
|
|
settingsButton.Active = true
|
|
end
|
|
local setDisabledState
|
|
setDisabledState = function(guiObject)
|
|
if not guiObject then
|
|
return
|
|
end
|
|
if guiObject:IsA("TextLabel") then
|
|
guiObject.TextTransparency = 0.9
|
|
elseif guiObject:IsA("TextButton") then
|
|
guiObject.TextTransparency = 0.9
|
|
guiObject.Active = false
|
|
else
|
|
if guiObject["ClassName"] then
|
|
return print("setDisabledState! got object of unsupported type. object type is ", guiObject.ClassName)
|
|
end
|
|
end
|
|
end
|
|
local createHelpDialog
|
|
createHelpDialog = function(baseZIndex)
|
|
if helpButton == nil then
|
|
if gui:FindFirstChild("TopLeftControl" and gui.TopLeftControl:FindFirstChild("Help")) then
|
|
helpButton = gui.TopLeftControl.Help
|
|
elseif gui:FindFirstChild("BottomRightControl" and gui.BottomRightControl:FindFirstChild("Help")) then
|
|
helpButton = gui.BottomRightControl.Help
|
|
end
|
|
end
|
|
local shield = Instance.new("Frame")
|
|
shield.Name = "HelpDialogShield"
|
|
shield.Active = true
|
|
shield.Visible = false
|
|
shield.Size = UDim2.new(1, 0, 1, 0)
|
|
shield.BackgroundColor3 = Color3I(51, 51, 51)
|
|
shield.BorderColor3 = Color3I(27, 42, 53)
|
|
shield.BackgroundTransparency = 0.4
|
|
shield.ZIndex = baseZIndex + 1
|
|
local helpDialog = Instance.new("Frame")
|
|
helpDialog.Name = "HelpDialog"
|
|
helpDialog.Style = Enum.FrameStyle.RobloxRound
|
|
helpDialog.Position = UDim2.new(0.2, 0, 0.2, 0)
|
|
helpDialog.Size = UDim2.new(0.6, 0, 0.6, 0)
|
|
helpDialog.Active = true
|
|
helpDialog.Parent = shield
|
|
local titleLabel = Instance.new("TextLabel")
|
|
titleLabel.Name = "Title"
|
|
titleLabel.Text = "Keyboard & Mouse Controls"
|
|
titleLabel.Font = Enum.Font.ArialBold
|
|
titleLabel.FontSize = Enum.FontSize.Size36
|
|
titleLabel.Position = UDim2.new(0, 0, 0.025, 0)
|
|
titleLabel.Size = UDim2.new(1, 0, 0, 40)
|
|
titleLabel.TextColor3 = Color3.new(1, 1, 1)
|
|
titleLabel.BackgroundTransparency = 1
|
|
titleLabel.Parent = helpDialog
|
|
local buttonRow = Instance.new("Frame")
|
|
buttonRow.Name = "Buttons"
|
|
buttonRow.Position = UDim2.new(0.1, 0, 0.07, 40)
|
|
buttonRow.Size = UDim2.new(0.8, 0, 0, 45)
|
|
buttonRow.BackgroundTransparency = 1
|
|
buttonRow.Parent = helpDialog
|
|
local imageFrame = Instance.new("Frame")
|
|
imageFrame.Name = "ImageFrame"
|
|
imageFrame.Position = UDim2.new(0.05, 0, 0.075, 80)
|
|
imageFrame.Size = UDim2.new(0.9, 0, 0.9, -120)
|
|
imageFrame.BackgroundTransparency = 1
|
|
imageFrame.Parent = helpDialog
|
|
local layoutFrame = Instance.new("Frame")
|
|
layoutFrame.Name = "LayoutFrame"
|
|
layoutFrame.Position = UDim2.new(0.5, 0, 0, 0)
|
|
layoutFrame.Size = UDim2.new(1.5, 0, 1, 0)
|
|
layoutFrame.BackgroundTransparency = 1
|
|
layoutFrame.SizeConstraint = Enum.SizeConstraint.RelativeYY
|
|
layoutFrame.Parent = imageFrame
|
|
local image = Instance.new("ImageLabel")
|
|
image.Name = "Image"
|
|
if UserSettings().GameSettings.ControlMode == Enum.ControlMode["Mouse Lock Switch"] then
|
|
image.Image = mouseLockLookScreenUrl
|
|
else
|
|
image.Image = classicLookScreenUrl
|
|
end
|
|
image.Position = UDim2.new(-0.5, 0, 0, 0)
|
|
image.Size = UDim2.new(1, 0, 1, 0)
|
|
image.BackgroundTransparency = 1
|
|
image.Parent = layoutFrame
|
|
local buttons = { }
|
|
buttons[1] = { }
|
|
buttons[1].Text = "Look"
|
|
buttons[1].Function = function()
|
|
if UserSettings().GameSettings.ControlMode == Enum.ControlMode["Mouse Lock Switch"] then
|
|
image.Image = mouseLockLookScreenUrl
|
|
else
|
|
image.Image = classicLookScreenUrl
|
|
end
|
|
end
|
|
buttons[2] = { }
|
|
buttons[2].Text = "Move"
|
|
buttons[2].Function = function()
|
|
image.Image = "http://www.roblox.com/Asset?id=45915811"
|
|
end
|
|
buttons[3] = { }
|
|
buttons[3].Text = "Gear"
|
|
buttons[3].Function = function()
|
|
image.Image = "http://www.roblox.com/Asset?id=45917596"
|
|
end
|
|
buttons[4] = { }
|
|
buttons[4].Text = "Zoom"
|
|
buttons[4].Function = function()
|
|
image.Image = "http://www.roblox.com/Asset?id=45915825"
|
|
end
|
|
CreateTextButtons(buttonRow, buttons, UDim.new(0, 0), UDim.new(1, 0))
|
|
delay(0, function()
|
|
waitForChild(gui, "UserSettingsShield")
|
|
waitForChild(gui.UserSettingsShield, "Settings")
|
|
waitForChild(gui.UserSettingsShield.Settings, "SettingsStyle")
|
|
waitForChild(gui.UserSettingsShield.Settings.SettingsStyle, "GameSettingsMenu")
|
|
waitForChild(gui.UserSettingsShield.Settings.SettingsStyle.GameSettingsMenu, "CameraField")
|
|
waitForChild(gui.UserSettingsShield.Settings.SettingsStyle.GameSettingsMenu.CameraField, "DropDownMenuButton")
|
|
return gui.UserSettingsShield.Settings.SettingsStyle.GameSettingsMenu.CameraField.DropDownMenuButton.Changed:connect(function(prop)
|
|
if prop ~= "Text" then
|
|
return
|
|
end
|
|
if buttonRow.Button1.Style == Enum.ButtonStyle.RobloxButtonDefault then
|
|
if gui.UserSettingsShield.Settings.SettingsStyle.GameSettingsMenu.CameraField.DropDownMenuButton.Text == "Classic" then
|
|
image.Image = classicLookScreenUrl
|
|
else
|
|
image.Image = mouseLockLookScreenUrl
|
|
end
|
|
end
|
|
end)
|
|
end)
|
|
local okBtn = Instance.new("TextButton")
|
|
okBtn.Name = "OkBtn"
|
|
okBtn.Text = "OK"
|
|
okBtn.Modal = true
|
|
okBtn.Size = UDim2.new(0.3, 0, 0, 45)
|
|
okBtn.Position = UDim2.new(0.35, 0, 0.975, -50)
|
|
okBtn.Font = Enum.Font.Arial
|
|
okBtn.FontSize = Enum.FontSize.Size18
|
|
okBtn.BackgroundTransparency = 1
|
|
okBtn.TextColor3 = Color3.new(1, 1, 1)
|
|
okBtn.Style = Enum.ButtonStyle.RobloxButtonDefault
|
|
okBtn.MouseButton1Click:connect(function()
|
|
shield.Visible = false
|
|
return game.GuiService:RemoveCenterDialog(shield)
|
|
end)
|
|
okBtn.Parent = helpDialog
|
|
robloxLock(shield)
|
|
return shield
|
|
end
|
|
local createLeaveConfirmationMenu
|
|
createLeaveConfirmationMenu = function(baseZIndex, shield)
|
|
local frame = Instance.new("Frame")
|
|
frame.Name = "LeaveConfirmationMenu"
|
|
frame.BackgroundTransparency = 1
|
|
frame.Size = UDim2.new(1, 0, 1, 0)
|
|
frame.Position = UDim2.new(0, 0, 2, 400)
|
|
frame.ZIndex = baseZIndex + 4
|
|
local yesButton = createTextButton("Leave", Enum.ButtonStyle.RobloxButton, Enum.FontSize.Size24, UDim2.new(0, 128, 0, 50), UDim2.new(0, 313, 0.8, 0))
|
|
yesButton.Name = "YesButton"
|
|
yesButton.ZIndex = baseZIndex + 4
|
|
yesButton.Parent = frame
|
|
yesButton.Modal = true
|
|
yesButton:SetVerb("Exit")
|
|
local noButton = createTextButton("Stay", Enum.ButtonStyle.RobloxButtonDefault, Enum.FontSize.Size24, UDim2.new(0, 128, 0, 50), UDim2.new(0, 90, 0.8, 0))
|
|
noButton.Name = "NoButton"
|
|
noButton.Parent = frame
|
|
noButton.ZIndex = baseZIndex + 4
|
|
noButton.MouseButton1Click:connect(function()
|
|
goToMenu(shield.Settings.SettingsStyle, "GameMainMenu", "down", UDim2.new(0, 525, 0, 430))
|
|
return shield.Settings:TweenSize(UDim2.new(0, 525, 0, 430), Enum.EasingDirection.InOut, Enum.EasingStyle.Sine, tweenTime, true)
|
|
end)
|
|
local leaveText = Instance.new("TextLabel")
|
|
leaveText.Name = "LeaveText"
|
|
leaveText.Text = "Leave this game?"
|
|
leaveText.Size = UDim2.new(1, 0, 0.8, 0)
|
|
leaveText.TextWrap = true
|
|
leaveText.TextColor3 = Color3.new(1, 1, 1)
|
|
leaveText.Font = Enum.Font.ArialBold
|
|
leaveText.FontSize = Enum.FontSize.Size36
|
|
leaveText.BackgroundTransparency = 1
|
|
leaveText.ZIndex = baseZIndex + 4
|
|
leaveText.Parent = frame
|
|
return frame
|
|
end
|
|
local createResetConfirmationMenu
|
|
createResetConfirmationMenu = function(baseZIndex, shield)
|
|
local frame = Instance.new("Frame")
|
|
frame.Name = "ResetConfirmationMenu"
|
|
frame.BackgroundTransparency = 1
|
|
frame.Size = UDim2.new(1, 0, 1, 0)
|
|
frame.Position = UDim2.new(0, 0, 2, 400)
|
|
frame.ZIndex = baseZIndex + 4
|
|
local yesButton = createTextButton("Reset", Enum.ButtonStyle.RobloxButtonDefault, Enum.FontSize.Size24, UDim2.new(0, 128, 0, 50), UDim2.new(0, 313, 0, 299))
|
|
yesButton.Name = "YesButton"
|
|
yesButton.ZIndex = baseZIndex + 4
|
|
yesButton.Parent = frame
|
|
yesButton.Modal = true
|
|
yesButton.MouseButton1Click:connect(function()
|
|
resumeGameFunction(shield)
|
|
return resetLocalCharacter()
|
|
end)
|
|
local noButton = createTextButton("Cancel", Enum.ButtonStyle.RobloxButton, Enum.FontSize.Size24, UDim2.new(0, 128, 0, 50), UDim2.new(0, 90, 0, 299))
|
|
noButton.Name = "NoButton"
|
|
noButton.Parent = frame
|
|
noButton.ZIndex = baseZIndex + 4
|
|
noButton.MouseButton1Click:connect(function()
|
|
goToMenu(shield.Settings.SettingsStyle, "GameMainMenu", "down", UDim2.new(0, 525, 0, 430))
|
|
return shield.Settings:TweenSize(UDim2.new(0, 525, 0, 430), Enum.EasingDirection.InOut, Enum.EasingStyle.Sine, tweenTime, true)
|
|
end)
|
|
local resetCharacterText = Instance.new("TextLabel")
|
|
resetCharacterText.Name = "ResetCharacterText"
|
|
resetCharacterText.Text = "Are you sure you want to reset your character?"
|
|
resetCharacterText.Size = UDim2.new(1, 0, 0.8, 0)
|
|
resetCharacterText.TextWrap = true
|
|
resetCharacterText.TextColor3 = Color3.new(1, 1, 1)
|
|
resetCharacterText.Font = Enum.Font.ArialBold
|
|
resetCharacterText.FontSize = Enum.FontSize.Size36
|
|
resetCharacterText.BackgroundTransparency = 1
|
|
resetCharacterText.ZIndex = baseZIndex + 4
|
|
resetCharacterText.Parent = frame
|
|
local fineResetCharacterText = resetCharacterText:Clone()
|
|
fineResetCharacterText.Name = "FineResetCharacterText"
|
|
fineResetCharacterText.Text = "You will be put back on a spawn point"
|
|
fineResetCharacterText.Size = UDim2.new(0, 303, 0, 18)
|
|
fineResetCharacterText.Position = UDim2.new(0, 109, 0, 215)
|
|
fineResetCharacterText.FontSize = Enum.FontSize.Size18
|
|
fineResetCharacterText.Parent = frame
|
|
return frame
|
|
end
|
|
local createGameMainMenu
|
|
createGameMainMenu = function(baseZIndex, shield)
|
|
local gameMainMenuFrame = Instance.new("Frame")
|
|
gameMainMenuFrame.Name = "GameMainMenu"
|
|
gameMainMenuFrame.BackgroundTransparency = 1
|
|
gameMainMenuFrame.Size = UDim2.new(1, 0, 1, 0)
|
|
gameMainMenuFrame.ZIndex = baseZIndex + 4
|
|
gameMainMenuFrame.Parent = settingsFrame
|
|
local gameMainMenuTitle = Instance.new("TextLabel")
|
|
gameMainMenuTitle.Name = "Title"
|
|
gameMainMenuTitle.Text = "Game Menu"
|
|
gameMainMenuTitle.BackgroundTransparency = 1
|
|
gameMainMenuTitle.TextStrokeTransparency = 0
|
|
gameMainMenuTitle.Font = Enum.Font.ArialBold
|
|
gameMainMenuTitle.FontSize = Enum.FontSize.Size36
|
|
gameMainMenuTitle.Size = UDim2.new(1, 0, 0, 36)
|
|
gameMainMenuTitle.Position = UDim2.new(0, 0, 0, 4)
|
|
gameMainMenuTitle.TextColor3 = Color3.new(1, 1, 1)
|
|
gameMainMenuTitle.ZIndex = baseZIndex + 4
|
|
gameMainMenuTitle.Parent = gameMainMenuFrame
|
|
local robloxHelpButton = createTextButton("Help", Enum.ButtonStyle.RobloxButton, Enum.FontSize.Size18, UDim2.new(0, 164, 0, 50), UDim2.new(0, 82, 0, 256))
|
|
robloxHelpButton.Name = "HelpButton"
|
|
robloxHelpButton.ZIndex = baseZIndex + 4
|
|
robloxHelpButton.Parent = gameMainMenuFrame
|
|
helpButton = robloxHelpButton
|
|
local helpDialog = createHelpDialog(baseZIndex)
|
|
helpDialog.Parent = gui
|
|
helpButton.MouseButton1Click:connect(function()
|
|
table.insert(centerDialogs, helpDialog)
|
|
return game.GuiService:AddCenterDialog(helpDialog, Enum.CenterDialogType.ModalDialog, function()
|
|
helpDialog.Visible = true
|
|
mainShield.Visible = false
|
|
end, function()
|
|
helpDialog.Visible = false
|
|
end)
|
|
end)
|
|
helpButton.Active = true
|
|
local helpShortcut = Instance.new("TextLabel")
|
|
helpShortcut.Name = "HelpShortcutText"
|
|
helpShortcut.Text = "F1"
|
|
helpShortcut.Visible = false
|
|
helpShortcut.BackgroundTransparency = 1
|
|
helpShortcut.Font = Enum.Font.Arial
|
|
helpShortcut.FontSize = Enum.FontSize.Size12
|
|
helpShortcut.Position = UDim2.new(0, 85, 0, 0)
|
|
helpShortcut.Size = UDim2.new(0, 30, 0, 30)
|
|
helpShortcut.TextColor3 = Color3.new(0, 1, 0)
|
|
helpShortcut.ZIndex = baseZIndex + 4
|
|
helpShortcut.Parent = robloxHelpButton
|
|
local screenshotButton = createTextButton("Screenshot", Enum.ButtonStyle.RobloxButton, Enum.FontSize.Size18, UDim2.new(0, 168, 0, 50), UDim2.new(0, 254, 0, 256))
|
|
screenshotButton.Name = "ScreenshotButton"
|
|
screenshotButton.ZIndex = baseZIndex + 4
|
|
screenshotButton.Parent = gameMainMenuFrame
|
|
screenshotButton.Visible = not macClient
|
|
screenshotButton:SetVerb("Screenshot")
|
|
local screenshotShortcut = helpShortcut:clone()
|
|
screenshotShortcut.Name = "ScreenshotShortcutText"
|
|
screenshotShortcut.Text = "PrintSc"
|
|
screenshotShortcut.Position = UDim2.new(0, 118, 0, 0)
|
|
screenshotShortcut.Visible = true
|
|
screenshotShortcut.Parent = screenshotButton
|
|
local recordVideoButton = createTextButton("Record Video", Enum.ButtonStyle.RobloxButton, Enum.FontSize.Size18, UDim2.new(0, 168, 0, 50), UDim2.new(0, 254, 0, 306))
|
|
recordVideoButton.Name = "RecordVideoButton"
|
|
recordVideoButton.ZIndex = baseZIndex + 4
|
|
recordVideoButton.Parent = gameMainMenuFrame
|
|
recordVideoButton.Visible = not macClient
|
|
recordVideoButton:SetVerb("RecordToggle")
|
|
local recordVideoShortcut = helpShortcut:clone()
|
|
recordVideoShortcut.Visible = hasGraphicsSlider
|
|
recordVideoShortcut.Name = "RecordVideoShortcutText"
|
|
recordVideoShortcut.Text = "F12"
|
|
recordVideoShortcut.Position = UDim2.new(0, 120, 0, 0)
|
|
recordVideoShortcut.Parent = recordVideoButton
|
|
local stopRecordButton = Instance.new("ImageButton")
|
|
stopRecordButton.Name = "StopRecordButton"
|
|
stopRecordButton.BackgroundTransparency = 1
|
|
stopRecordButton.Image = "rbxasset://textures/ui/RecordStop.png"
|
|
stopRecordButton.Size = UDim2.new(0, 59, 0, 27)
|
|
stopRecordButton:SetVerb("RecordToggle")
|
|
stopRecordButton.MouseButton1Click:connect(function()
|
|
return recordVideoClick(recordVideoButton, stopRecordButton)
|
|
end)
|
|
stopRecordButton.Visible = false
|
|
stopRecordButton.Parent = gui
|
|
local reportAbuseButton = createTextButton("Report Abuse", Enum.ButtonStyle.RobloxButton, Enum.FontSize.Size18, UDim2.new(0, 164, 0, 50), UDim2.new(0, 82, 0, 306))
|
|
reportAbuseButton.Name = "ReportAbuseButton"
|
|
reportAbuseButton.ZIndex = baseZIndex + 4
|
|
reportAbuseButton.Parent = gameMainMenuFrame
|
|
local leaveGameButton = createTextButton("Leave Game", Enum.ButtonStyle.RobloxButton, Enum.FontSize.Size24, UDim2.new(0, 340, 0, 50), UDim2.new(0, 82, 0, 358))
|
|
leaveGameButton.Name = "LeaveGameButton"
|
|
leaveGameButton.ZIndex = baseZIndex + 4
|
|
leaveGameButton.Parent = gameMainMenuFrame
|
|
local resumeGameButton = createTextButton("Resume Game", Enum.ButtonStyle.RobloxButtonDefault, Enum.FontSize.Size24, UDim2.new(0, 340, 0, 50), UDim2.new(0, 82, 0, 54))
|
|
resumeGameButton.Name = "resumeGameButton"
|
|
resumeGameButton.ZIndex = baseZIndex + 4
|
|
resumeGameButton.Parent = gameMainMenuFrame
|
|
resumeGameButton.Modal = true
|
|
resumeGameButton.MouseButton1Click:connect(function()
|
|
return resumeGameFunction(shield)
|
|
end)
|
|
local gameSettingsButton = createTextButton("Game Settings", Enum.ButtonStyle.RobloxButton, Enum.FontSize.Size24, UDim2.new(0, 340, 0, 50), UDim2.new(0, 82, 0, 156))
|
|
gameSettingsButton.Name = "SettingsButton"
|
|
gameSettingsButton.ZIndex = baseZIndex + 4
|
|
gameSettingsButton.Parent = gameMainMenuFrame
|
|
if game:FindFirstChild("LoadingGuiService") and #game.LoadingGuiService:GetChildren() > 0 then
|
|
gameSettingsButton = createTextButton("Game Instructions", Enum.ButtonStyle.RobloxButton, Enum.FontSize.Size24, UDim2.new(0, 340, 0, 50), UDim2.new(0, 82, 0, 207))
|
|
gameSettingsButton.Name = "GameInstructions"
|
|
gameSettingsButton.ZIndex = baseZIndex + 4
|
|
gameSettingsButton.Parent = gameMainMenuFrame
|
|
gameSettingsButton.MouseButton1Click:connect(function()
|
|
if game:FindFirstChild("Players" and game.Players["LocalPlayer"]) then
|
|
local loadingGui = game.Players.LocalPlayer:FindFirstChild("PlayerLoadingGui")
|
|
if loadingGui then
|
|
loadingGui.Visible = true
|
|
end
|
|
end
|
|
end)
|
|
end
|
|
local resetButton = createTextButton("Reset Character", Enum.ButtonStyle.RobloxButton, Enum.FontSize.Size24, UDim2.new(0, 340, 0, 50), UDim2.new(0, 82, 0, 105))
|
|
resetButton.Name = "ResetButton"
|
|
resetButton.ZIndex = baseZIndex + 4
|
|
resetButton.Parent = gameMainMenuFrame
|
|
return gameMainMenuFrame
|
|
end
|
|
local createGameSettingsMenu
|
|
createGameSettingsMenu = function(baseZIndex, _)
|
|
local gameSettingsMenuFrame = Instance.new("Frame")
|
|
gameSettingsMenuFrame.Name = "GameSettingsMenu"
|
|
gameSettingsMenuFrame.BackgroundTransparency = 1
|
|
gameSettingsMenuFrame.Size = UDim2.new(1, 0, 1, 0)
|
|
gameSettingsMenuFrame.ZIndex = baseZIndex + 4
|
|
local title = Instance.new("TextLabel")
|
|
title.Name = "Title"
|
|
title.Text = "Settings"
|
|
title.Size = UDim2.new(1, 0, 0, 48)
|
|
title.Position = UDim2.new(0, 9, 0, -9)
|
|
title.Font = Enum.Font.ArialBold
|
|
title.FontSize = Enum.FontSize.Size36
|
|
title.TextColor3 = Color3.new(1, 1, 1)
|
|
title.ZIndex = baseZIndex + 4
|
|
title.BackgroundTransparency = 1
|
|
title.Parent = gameSettingsMenuFrame
|
|
local fullscreenText = Instance.new("TextLabel")
|
|
fullscreenText.Name = "FullscreenText"
|
|
fullscreenText.Text = "Fullscreen Mode"
|
|
fullscreenText.Size = UDim2.new(0, 124, 0, 18)
|
|
fullscreenText.Position = UDim2.new(0, 62, 0, 145)
|
|
fullscreenText.Font = Enum.Font.Arial
|
|
fullscreenText.FontSize = Enum.FontSize.Size18
|
|
fullscreenText.TextColor3 = Color3.new(1, 1, 1)
|
|
fullscreenText.ZIndex = baseZIndex + 4
|
|
fullscreenText.BackgroundTransparency = 1
|
|
fullscreenText.Parent = gameSettingsMenuFrame
|
|
local fullscreenShortcut = Instance.new("TextLabel")
|
|
fullscreenShortcut.Visible = hasGraphicsSlider
|
|
fullscreenShortcut.Name = "FullscreenShortcutText"
|
|
fullscreenShortcut.Text = "F11"
|
|
fullscreenShortcut.BackgroundTransparency = 1
|
|
fullscreenShortcut.Font = Enum.Font.Arial
|
|
fullscreenShortcut.FontSize = Enum.FontSize.Size12
|
|
fullscreenShortcut.Position = UDim2.new(0, 186, 0, 141)
|
|
fullscreenShortcut.Size = UDim2.new(0, 30, 0, 30)
|
|
fullscreenShortcut.TextColor3 = Color3.new(0, 1, 0)
|
|
fullscreenShortcut.ZIndex = baseZIndex + 4
|
|
fullscreenShortcut.Parent = gameSettingsMenuFrame
|
|
local studioText = Instance.new("TextLabel")
|
|
studioText.Visible = false
|
|
studioText.Name = "StudioText"
|
|
studioText.Text = "Studio Mode"
|
|
studioText.Size = UDim2.new(0, 95, 0, 18)
|
|
studioText.Position = UDim2.new(0, 62, 0, 179)
|
|
studioText.Font = Enum.Font.Arial
|
|
studioText.FontSize = Enum.FontSize.Size18
|
|
studioText.TextColor3 = Color3.new(1, 1, 1)
|
|
studioText.ZIndex = baseZIndex + 4
|
|
studioText.BackgroundTransparency = 1
|
|
studioText.Parent = gameSettingsMenuFrame
|
|
local studioShortcut = fullscreenShortcut:clone()
|
|
studioShortcut.Name = "StudioShortcutText"
|
|
studioShortcut.Visible = false
|
|
studioShortcut.Text = "F2"
|
|
studioShortcut.Position = UDim2.new(0, 154, 0, 175)
|
|
studioShortcut.Parent = gameSettingsMenuFrame
|
|
local studioCheckbox
|
|
if hasGraphicsSlider then
|
|
local qualityText = Instance.new("TextLabel")
|
|
qualityText.Name = "QualityText"
|
|
qualityText.Text = "Graphics Quality"
|
|
qualityText.Size = UDim2.new(0, 128, 0, 18)
|
|
qualityText.Position = UDim2.new(0, 30, 0, 239)
|
|
qualityText.Font = Enum.Font.Arial
|
|
qualityText.FontSize = Enum.FontSize.Size18
|
|
qualityText.TextColor3 = Color3.new(1, 1, 1)
|
|
qualityText.ZIndex = baseZIndex + 4
|
|
qualityText.BackgroundTransparency = 1
|
|
qualityText.Parent = gameSettingsMenuFrame
|
|
qualityText.Visible = not inStudioMode
|
|
local autoText = qualityText:clone()
|
|
autoText.Name = "AutoText"
|
|
autoText.Text = "Auto"
|
|
autoText.Position = UDim2.new(0, 183, 0, 214)
|
|
autoText.TextColor3 = Color3.new(128 / 255, 128 / 255, 128 / 255)
|
|
autoText.Size = UDim2.new(0, 34, 0, 18)
|
|
autoText.Parent = gameSettingsMenuFrame
|
|
autoText.Visible = not inStudioMode
|
|
local fasterText = autoText:clone()
|
|
fasterText.Name = "FasterText"
|
|
fasterText.Text = "Faster"
|
|
fasterText.Position = UDim2.new(0, 185, 0, 274)
|
|
fasterText.TextColor3 = Color3.new(95, 95, 95)
|
|
fasterText.FontSize = Enum.FontSize.Size14
|
|
fasterText.Parent = gameSettingsMenuFrame
|
|
fasterText.Visible = not inStudioMode
|
|
local fasterShortcut = fullscreenShortcut:clone()
|
|
fasterShortcut.Name = "FasterShortcutText"
|
|
fasterShortcut.Text = "F10 + Shift"
|
|
fasterShortcut.Position = UDim2.new(0, 185, 0, 283)
|
|
fasterShortcut.Parent = gameSettingsMenuFrame
|
|
fasterShortcut.Visible = not inStudioMode
|
|
local betterQualityText = autoText:clone()
|
|
betterQualityText.Name = "BetterQualityText"
|
|
betterQualityText.Text = "Better Quality"
|
|
betterQualityText.TextWrap = true
|
|
betterQualityText.Size = UDim2.new(0, 41, 0, 28)
|
|
betterQualityText.Position = UDim2.new(0, 390, 0, 269)
|
|
betterQualityText.TextColor3 = Color3.new(95, 95, 95)
|
|
betterQualityText.FontSize = Enum.FontSize.Size14
|
|
betterQualityText.Parent = gameSettingsMenuFrame
|
|
betterQualityText.Visible = not inStudioMode
|
|
local betterQualityShortcut = fullscreenShortcut:clone()
|
|
betterQualityShortcut.Name = "BetterQualityShortcut"
|
|
betterQualityShortcut.Text = "F10"
|
|
betterQualityShortcut.Position = UDim2.new(0, 394, 0, 288)
|
|
betterQualityShortcut.Parent = gameSettingsMenuFrame
|
|
betterQualityShortcut.Visible = not inStudioMode
|
|
local autoGraphicsButton = createTextButton("X", Enum.ButtonStyle.RobloxButton, Enum.FontSize.Size18, UDim2.new(0, 25, 0, 25), UDim2.new(0, 187, 0, 239))
|
|
autoGraphicsButton.Name = "AutoGraphicsButton"
|
|
autoGraphicsButton.ZIndex = baseZIndex + 4
|
|
autoGraphicsButton.Parent = gameSettingsMenuFrame
|
|
autoGraphicsButton.Visible = not inStudioMode
|
|
local graphicsSlider, graphicsLevel = RbxGui.CreateSlider(GraphicsQualityLevels, 150, UDim2.new(0, 230, 0, 280))
|
|
graphicsSlider.Parent = gameSettingsMenuFrame
|
|
graphicsSlider.Bar.ZIndex = baseZIndex + 4
|
|
graphicsSlider.Bar.Slider.ZIndex = baseZIndex + 5
|
|
graphicsSlider.Visible = not inStudioMode
|
|
graphicsLevel.Value = math.floor((settings().Rendering:GetMaxQualityLevel() - 1) / 2)
|
|
local graphicsSetter = Instance.new("TextBox")
|
|
graphicsSetter.Name = "GraphicsSetter"
|
|
graphicsSetter.BackgroundColor3 = Color3.new(0, 0, 0)
|
|
graphicsSetter.BorderColor3 = Color3.new(128 / 255, 128 / 255, 128 / 255)
|
|
graphicsSetter.Size = UDim2.new(0, 50, 0, 25)
|
|
graphicsSetter.Position = UDim2.new(0, 450, 0, 269)
|
|
graphicsSetter.TextColor3 = Color3.new(1, 1, 1)
|
|
graphicsSetter.Font = Enum.Font.Arial
|
|
graphicsSetter.FontSize = Enum.FontSize.Size18
|
|
graphicsSetter.Text = "Auto"
|
|
graphicsSetter.ZIndex = 1
|
|
graphicsSetter.TextWrap = true
|
|
graphicsSetter.Parent = gameSettingsMenuFrame
|
|
graphicsSetter.Visible = not inStudioMode
|
|
local isAutoGraphics = true
|
|
if not inStudioMode then
|
|
isAutoGraphics = (UserSettings().GameSettings.SavedQualityLevel == Enum.SavedQualitySetting.Automatic)
|
|
else
|
|
settings().Rendering.EnableFRM = false
|
|
end
|
|
local listenToGraphicsLevelChange = true
|
|
local setAutoGraphicsGui
|
|
setAutoGraphicsGui = function(active)
|
|
isAutoGraphics = active
|
|
if active then
|
|
autoGraphicsButton.Text = "X"
|
|
betterQualityText.ZIndex = 1
|
|
betterQualityShortcut.ZIndex = 1
|
|
fasterShortcut.ZIndex = 1
|
|
fasterText.ZIndex = 1
|
|
graphicsSlider.Bar.ZIndex = 1
|
|
graphicsSlider.Bar.Slider.ZIndex = 1
|
|
graphicsSetter.ZIndex = 1
|
|
graphicsSetter.Text = "Auto"
|
|
else
|
|
autoGraphicsButton.Text = ""
|
|
graphicsSlider.Bar.ZIndex = baseZIndex + 4
|
|
graphicsSlider.Bar.Slider.ZIndex = baseZIndex + 5
|
|
betterQualityShortcut.ZIndex = baseZIndex + 4
|
|
fasterShortcut.ZIndex = baseZIndex + 4
|
|
betterQualityText.ZIndex = baseZIndex + 4
|
|
fasterText.ZIndex = baseZIndex + 4
|
|
graphicsSetter.ZIndex = baseZIndex + 4
|
|
end
|
|
end
|
|
local goToAutoGraphics
|
|
goToAutoGraphics = function()
|
|
setAutoGraphicsGui(true)
|
|
UserSettings().GameSettings.SavedQualityLevel = Enum.SavedQualitySetting.Automatic
|
|
settings().Rendering.QualityLevel = Enum.QualityLevel.Automatic
|
|
end
|
|
local setGraphicsQualityLevel
|
|
setGraphicsQualityLevel = function(newLevel)
|
|
local percentage = newLevel / GraphicsQualityLevels
|
|
local newSetting = math.floor((settings().Rendering:GetMaxQualityLevel() - 1) * percentage)
|
|
if newSetting == 20 then
|
|
newSetting = 21
|
|
elseif newLevel == 1 then
|
|
newSetting = 1
|
|
elseif newSetting > settings().Rendering:GetMaxQualityLevel() then
|
|
newSetting = settings().Rendering:GetMaxQualityLevel() - 1
|
|
end
|
|
UserSettings().GameSettings.SavedQualityLevel = newLevel
|
|
settings().Rendering.QualityLevel = newSetting
|
|
end
|
|
local goToManualGraphics
|
|
goToManualGraphics = function(explicitLevel)
|
|
setAutoGraphicsGui(false)
|
|
if explicitLevel then
|
|
graphicsLevel.Value = explicitLevel
|
|
else
|
|
graphicsLevel.Value = math.floor((settings().Rendering.AutoFRMLevel / (settings().Rendering:GetMaxQualityLevel() - 1))({
|
|
GraphicsQualityLevels
|
|
}))
|
|
end
|
|
if explicitLevel == graphicsLevel.Value then
|
|
setGraphicsQualityLevel(graphicsLevel.Value)
|
|
end
|
|
if not explicitLevel then
|
|
UserSettings().GameSettings.SavedQualityLevel = graphicsLevel.Value
|
|
end
|
|
graphicsSetter.Text = tostring(graphicsLevel.Value)
|
|
end
|
|
local showAutoGraphics
|
|
showAutoGraphics = function()
|
|
autoText.ZIndex = baseZIndex + 4
|
|
autoGraphicsButton.ZIndex = baseZIndex + 4
|
|
end
|
|
local hideAutoGraphics
|
|
hideAutoGraphics = function()
|
|
autoText.ZIndex = 1
|
|
autoGraphicsButton.ZIndex = 1
|
|
end
|
|
local showManualGraphics
|
|
showManualGraphics = function()
|
|
graphicsSlider.Bar.ZIndex = baseZIndex + 4
|
|
graphicsSlider.Bar.Slider.ZIndex = baseZIndex + 5
|
|
betterQualityShortcut.ZIndex = baseZIndex + 4
|
|
fasterShortcut.ZIndex = baseZIndex + 4
|
|
betterQualityText.ZIndex = baseZIndex + 4
|
|
fasterText.ZIndex = baseZIndex + 4
|
|
graphicsSetter.ZIndex = baseZIndex + 4
|
|
end
|
|
local hideManualGraphics
|
|
hideManualGraphics = function()
|
|
betterQualityText.ZIndex = 1
|
|
betterQualityShortcut.ZIndex = 1
|
|
fasterShortcut.ZIndex = 1
|
|
fasterText.ZIndex = 1
|
|
graphicsSlider.Bar.ZIndex = 1
|
|
graphicsSlider.Bar.Slider.ZIndex = 1
|
|
graphicsSetter.ZIndex = 1
|
|
end
|
|
local translateSavedQualityLevelToInt
|
|
translateSavedQualityLevelToInt = function(savedQualityLevel)
|
|
if Enum.SavedQualitySetting.Automatic == savedQualityLevel then
|
|
return 0
|
|
elseif Enum.SavedQualitySetting.QualityLevel1 == savedQualityLevel then
|
|
return 1
|
|
elseif Enum.SavedQualitySetting.QualityLevel2 == savedQualityLevel then
|
|
return 2
|
|
elseif Enum.SavedQualitySetting.QualityLevel3 == savedQualityLevel then
|
|
return 3
|
|
elseif Enum.SavedQualitySetting.QualityLevel4 == savedQualityLevel then
|
|
return 4
|
|
elseif Enum.SavedQualitySetting.QualityLevel5 == savedQualityLevel then
|
|
return 5
|
|
elseif Enum.SavedQualitySetting.QualityLevel6 == savedQualityLevel then
|
|
return 6
|
|
elseif Enum.SavedQualitySetting.QualityLevel7 == savedQualityLevel then
|
|
return 7
|
|
elseif Enum.SavedQualitySetting.QualityLevel8 == savedQualityLevel then
|
|
return 8
|
|
elseif Enum.SavedQualitySetting.QualityLevel9 == savedQualityLevel then
|
|
return 9
|
|
elseif Enum.SavedQualitySetting.QualityLevel10 == savedQualityLevel then
|
|
return 10
|
|
end
|
|
end
|
|
local enableGraphicsWidget
|
|
enableGraphicsWidget = function()
|
|
settings().Rendering.EnableFRM = true
|
|
isAutoGraphics = UserSettings().GameSettings.SavedQualityLevel == Enum.SavedQualitySetting.Automatic
|
|
if isAutoGraphics then
|
|
showAutoGraphics()
|
|
return goToAutoGraphics()
|
|
else
|
|
showAutoGraphics()
|
|
showManualGraphics()
|
|
return goToManualGraphics(translateSavedQualityLevelToInt(UserSettings().GameSettings.SavedQualityLevel))
|
|
end
|
|
end
|
|
local disableGraphicsWidget
|
|
disableGraphicsWidget = function()
|
|
hideManualGraphics()
|
|
hideAutoGraphics()
|
|
settings().Rendering.EnableFRM = false
|
|
end
|
|
graphicsSetter.FocusLost:connect(function()
|
|
if isAutoGraphics then
|
|
graphicsSetter.Text = tostring(graphicsLevel.Value)
|
|
return
|
|
end
|
|
local newGraphicsValue = tonumber(graphicsSetter.Text)
|
|
if newGraphicsValue == nil then
|
|
graphicsSetter.Text = tostring(graphicsLevel.Value)
|
|
return
|
|
end
|
|
if newGraphicsValue < 1 then
|
|
newGraphicsValue = 1
|
|
elseif newGraphicsValue >= settings().Rendering:GetMaxQualityLevel() then
|
|
newGraphicsValue = settings().Rendering:GetMaxQualityLevel() - 1
|
|
end
|
|
graphicsLevel.Value = newGraphicsValue
|
|
setGraphicsQualityLevel(graphicsLevel.Value)
|
|
graphicsSetter.Text = tostring(graphicsLevel.Value)
|
|
end)
|
|
graphicsLevel.Changed:connect(function(_)
|
|
if isAutoGraphics then
|
|
return
|
|
end
|
|
if not listenToGraphicsLevelChange then
|
|
return
|
|
end
|
|
graphicsSetter.Text = tostring(graphicsLevel.Value)
|
|
return setGraphicsQualityLevel(graphicsLevel.Value)
|
|
end)
|
|
if inStudioMode or UserSettings().GameSettings.SavedQualityLevel == Enum.SavedQualitySetting.Automatic then
|
|
if inStudioMode then
|
|
settings().Rendering.EnableFRM = false
|
|
disableGraphicsWidget()
|
|
else
|
|
settings().Rendering.EnableFRM = true
|
|
goToAutoGraphics()
|
|
end
|
|
else
|
|
settings().Rendering.EnableFRM = true
|
|
goToManualGraphics(translateSavedQualityLevelToInt(UserSettings().GameSettings.SavedQualityLevel))
|
|
end
|
|
autoGraphicsButton.MouseButton1Click:connect(function()
|
|
if inStudioMode and not game.Players.LocalPlayer then
|
|
return
|
|
end
|
|
if not isAutoGraphics then
|
|
return goToAutoGraphics()
|
|
else
|
|
return goToManualGraphics(graphicsLevel.Value)
|
|
end
|
|
end)
|
|
game.GraphicsQualityChangeRequest:connect(function(graphicsIncrease)
|
|
if isAutoGraphics then
|
|
return
|
|
end
|
|
if graphicsIncrease then
|
|
if (graphicsLevel.Value + 1) > GraphicsQualityLevels then
|
|
return
|
|
end
|
|
graphicsLevel.Value = graphicsLevel.Value + 1
|
|
graphicsSetter.Text = tostring(graphicsLevel.Value)
|
|
setGraphicsQualityLevel(graphicsLevel.Value)
|
|
return game:GetService("GuiService"):SendNotification("Graphics Quality", "Increased to (" .. tostring(graphicsSetter.Text) .. ")", "", 2, function() end)
|
|
else
|
|
if (graphicsLevel.Value - 1) <= 0 then
|
|
return
|
|
end
|
|
graphicsLevel.Value = graphicsLevel.Value - 1
|
|
graphicsSetter.Text = tostring(graphicsLevel.Value)
|
|
setGraphicsQualityLevel(graphicsLevel.Value)
|
|
return game:GetService("GuiService"):SendNotification("Graphics Quality", "Decreased to (" .. tostring(graphicsSetter.Text) .. ")", "", 2, function() end)
|
|
end
|
|
end)
|
|
game.Players.PlayerAdded:connect(function(player)
|
|
if player == game.Players.LocalPlayer and inStudioMode then
|
|
return enableGraphicsWidget()
|
|
end
|
|
end)
|
|
game.Players.PlayerRemoving:connect(function(player)
|
|
if player == game.Players.LocalPlayer and inStudioMode then
|
|
return disableGraphicsWidget()
|
|
end
|
|
end)
|
|
studioCheckbox = createTextButton("", Enum.ButtonStyle.RobloxButton, Enum.FontSize.Size18, UDim2.new(0, 25, 0, 25), UDim2.new(0, 30, 0, 176))
|
|
studioCheckbox.Name = "StudioCheckbox"
|
|
studioCheckbox.ZIndex = baseZIndex + 4
|
|
studioCheckbox:SetVerb("TogglePlayMode")
|
|
studioCheckbox.Visible = false
|
|
local wasManualGraphics = (settings().Rendering.QualityLevel ~= Enum.QualityLevel.Automatic)
|
|
if inStudioMode and not game.Players.LocalPlayer then
|
|
studioCheckbox.Text = "X"
|
|
disableGraphicsWidget()
|
|
elseif inStudioMode then
|
|
studioCheckbox.Text = "X"
|
|
enableGraphicsWidget()
|
|
end
|
|
if hasGraphicsSlider then
|
|
UserSettings().GameSettings.StudioModeChanged:connect(function(isStudioMode)
|
|
inStudioMode = isStudioMode
|
|
if isStudioMode then
|
|
wasManualGraphics = (settings().Rendering.QualityLevel ~= Enum.QualityLevel.Automatic)
|
|
goToAutoGraphics()
|
|
studioCheckbox.Text = "X"
|
|
autoGraphicsButton.ZIndex = 1
|
|
autoText.ZIndex = 1
|
|
else
|
|
if wasManualGraphics then
|
|
goToManualGraphics()
|
|
end
|
|
studioCheckbox.Text = ""
|
|
autoGraphicsButton.ZIndex = baseZIndex + 4
|
|
autoText.ZIndex = baseZIndex + 4
|
|
end
|
|
end)
|
|
else
|
|
studioCheckbox.MouseButton1Click:connect(function()
|
|
if not studioCheckbox.Active then
|
|
return
|
|
end
|
|
if studioCheckbox.Text == "" then
|
|
studioCheckbox.Text = "X"
|
|
else
|
|
studioCheckbox.Text = ""
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
local fullscreenCheckbox = createTextButton("", Enum.ButtonStyle.RobloxButton, Enum.FontSize.Size18, UDim2.new(0, 25, 0, 25), UDim2.new(0, 30, 0, 144))
|
|
fullscreenCheckbox.Name = "FullscreenCheckbox"
|
|
fullscreenCheckbox.ZIndex = baseZIndex + 4
|
|
fullscreenCheckbox.Parent = gameSettingsMenuFrame
|
|
fullscreenCheckbox:SetVerb("ToggleFullScreen")
|
|
if UserSettings().GameSettings:InFullScreen() then
|
|
fullscreenCheckbox.Text = "X"
|
|
end
|
|
if hasGraphicsSlider then
|
|
UserSettings().GameSettings.FullscreenChanged:connect(function(isFullscreen)
|
|
if isFullscreen then
|
|
fullscreenCheckbox.Text = "X"
|
|
else
|
|
fullscreenCheckbox.Text = ""
|
|
end
|
|
end)
|
|
else
|
|
fullscreenCheckbox.MouseButton1Click:connect(function()
|
|
if fullscreenCheckbox.Text == "" then
|
|
fullscreenCheckbox.Text = "X"
|
|
else
|
|
fullscreenCheckbox.Text = ""
|
|
end
|
|
end)
|
|
end
|
|
if game:FindFirstChild("NetworkClient") then
|
|
setDisabledState(studioText)
|
|
setDisabledState(studioShortcut)
|
|
setDisabledState(studioCheckbox)
|
|
end
|
|
local backButton
|
|
if hasGraphicsSlider then
|
|
backButton = createTextButton("OK", Enum.ButtonStyle.RobloxButtonDefault, Enum.FontSize.Size24, UDim2.new(0, 180, 0, 50), UDim2.new(0, 170, 0, 330))
|
|
backButton.Modal = true
|
|
else
|
|
backButton = createTextButton("OK", Enum.ButtonStyle.RobloxButtonDefault, Enum.FontSize.Size24, UDim2.new(0, 180, 0, 50), UDim2.new(0, 170, 0, 270))
|
|
backButton.Modal = true
|
|
end
|
|
backButton.Name = "BackButton"
|
|
backButton.ZIndex = baseZIndex + 4
|
|
backButton.Parent = gameSettingsMenuFrame
|
|
syncVideoCaptureSetting = nil
|
|
if not macClient then
|
|
local videoCaptureLabel = Instance.new("TextLabel")
|
|
videoCaptureLabel.Name = "VideoCaptureLabel"
|
|
videoCaptureLabel.Text = "After Capturing Video"
|
|
videoCaptureLabel.Font = Enum.Font.Arial
|
|
videoCaptureLabel.FontSize = Enum.FontSize.Size18
|
|
videoCaptureLabel.Position = UDim2.new(0, 32, 0, 100)
|
|
videoCaptureLabel.Size = UDim2.new(0, 164, 0, 18)
|
|
videoCaptureLabel.BackgroundTransparency = 1
|
|
videoCaptureLabel.TextColor3 = Color3I(255, 255, 255)
|
|
videoCaptureLabel.TextXAlignment = Enum.TextXAlignment.Left
|
|
videoCaptureLabel.ZIndex = baseZIndex + 4
|
|
videoCaptureLabel.Parent = gameSettingsMenuFrame
|
|
local videoNames = { }
|
|
local videoNameToItem = { }
|
|
videoNames[1] = "Just Save to Disk"
|
|
videoNameToItem[videoNames[1]] = Enum.UploadSetting["Never"]
|
|
videoNames[2] = "Upload to YouTube"
|
|
videoNameToItem[videoNames[2]] = Enum.UploadSetting["Ask me first"]
|
|
local videoCaptureDropDown
|
|
videoCaptureDropDown, updateVideoCaptureDropDownSelection = RbxGui.CreateDropDownMenu(videoNames, function(text)
|
|
UserSettings().GameSettings.VideoUploadPromptBehavior = videoNameToItem[text]
|
|
end)
|
|
videoCaptureDropDown.Name = "VideoCaptureField"
|
|
videoCaptureDropDown.ZIndex = baseZIndex + 4
|
|
videoCaptureDropDown.DropDownMenuButton.ZIndex = baseZIndex + 4
|
|
videoCaptureDropDown.DropDownMenuButton.Icon.ZIndex = baseZIndex + 4
|
|
videoCaptureDropDown.Position = UDim2.new(0, 270, 0, 94)
|
|
videoCaptureDropDown.Size = UDim2.new(0, 200, 0, 32)
|
|
videoCaptureDropDown.Parent = gameSettingsMenuFrame
|
|
syncVideoCaptureSetting = function()
|
|
return updateVideoCaptureDropDownSelection((function()
|
|
if UserSettings().GameSettings.VideoUploadPromptBehavior == Enum.UploadSetting["Never"] then
|
|
return videoNames[1]
|
|
elseif UserSettings().GameSettings.VideoUploadPromptBehavior == Enum.UploadSetting["Ask me first"] then
|
|
return videoNames[2]
|
|
else
|
|
UserSettings().GameSettings.VideoUploadPromptBehavior = Enum.UploadSetting["Ask me first"]
|
|
return videoNames[2]
|
|
end
|
|
end)())
|
|
end
|
|
end
|
|
local cameraLabel = Instance.new("TextLabel")
|
|
cameraLabel.Name = "CameraLabel"
|
|
cameraLabel.Text = "Character & Camera Controls"
|
|
cameraLabel.Font = Enum.Font.Arial
|
|
cameraLabel.FontSize = Enum.FontSize.Size18
|
|
cameraLabel.Position = UDim2.new(0, 31, 0, 58)
|
|
cameraLabel.Size = UDim2.new(0, 224, 0, 18)
|
|
cameraLabel.TextColor3 = Color3I(255, 255, 255)
|
|
cameraLabel.TextXAlignment = Enum.TextXAlignment.Left
|
|
cameraLabel.BackgroundTransparency = 1
|
|
cameraLabel.ZIndex = baseZIndex + 4
|
|
cameraLabel.Parent = gameSettingsMenuFrame
|
|
local mouseLockLabel = game.CoreGui.RobloxGui:FindFirstChild("MouseLockLabel", true)
|
|
local enumItems = Enum.ControlMode:GetEnumItems()
|
|
local enumNames = { }
|
|
local enumNameToItem = { }
|
|
for i, obj in ipairs(enumItems) do
|
|
enumNames[i] = obj.Name
|
|
enumNameToItem[obj.Name] = obj
|
|
end
|
|
local cameraDropDown
|
|
cameraDropDown, updateCameraDropDownSelection = RbxGui.CreateDropDownMenu(enumNames, function(text)
|
|
UserSettings().GameSettings.ControlMode = enumNameToItem[text]
|
|
return pcall(function()
|
|
if mouseLockLabel and UserSettings().GameSettings.ControlMode == Enum.ControlMode["Mouse Lock Switch"] then
|
|
mouseLockLabel.Visible = true
|
|
elseif mouseLockLabel then
|
|
mouseLockLabel.Visible = false
|
|
end
|
|
end)
|
|
end)
|
|
cameraDropDown.Name = "CameraField"
|
|
cameraDropDown.ZIndex = baseZIndex + 4
|
|
cameraDropDown.DropDownMenuButton.ZIndex = baseZIndex + 4
|
|
cameraDropDown.DropDownMenuButton.Icon.ZIndex = baseZIndex + 4
|
|
cameraDropDown.Position = UDim2.new(0, 270, 0, 52)
|
|
cameraDropDown.Size = UDim2.new(0, 200, 0, 32)
|
|
cameraDropDown.Parent = gameSettingsMenuFrame
|
|
return gameSettingsMenuFrame
|
|
end
|
|
if LoadLibrary then
|
|
RbxGui = LoadLibrary("RbxGui")
|
|
local baseZIndex = 0
|
|
if UserSettings then
|
|
local createSettingsDialog
|
|
createSettingsDialog = function()
|
|
waitForChild(gui, "BottomLeftControl")
|
|
settingsButton = gui.BottomLeftControl:FindFirstChild("SettingsButton")
|
|
if settingsButton == nil then
|
|
settingsButton = Instance.new("ImageButton")
|
|
settingsButton.Name = "SettingsButton"
|
|
settingsButton.Image = "rbxasset://textures/ui/SettingsButton.png"
|
|
settingsButton.BackgroundTransparency = 1
|
|
settingsButton.Active = false
|
|
settingsButton.Size = UDim2.new(0, 54, 0, 46)
|
|
settingsButton.Position = UDim2.new(0, 2, 0, 50)
|
|
settingsButton.Parent = gui.BottomLeftControl
|
|
end
|
|
local shield = Instance.new("TextButton")
|
|
shield.Text = ""
|
|
shield.Name = "UserSettingsShield"
|
|
shield.Active = true
|
|
shield.AutoButtonColor = false
|
|
shield.Visible = false
|
|
shield.Size = UDim2.new(1, 0, 1, 0)
|
|
shield.BackgroundColor3 = Color3I(51, 51, 51)
|
|
shield.BorderColor3 = Color3I(27, 42, 53)
|
|
shield.BackgroundTransparency = 0.4
|
|
shield.ZIndex = baseZIndex + 2
|
|
mainShield = shield
|
|
local frame = Instance.new("Frame")
|
|
frame.Name = "Settings"
|
|
frame.Position = UDim2.new(0.5, -262, -0.5, -200)
|
|
frame.Size = UDim2.new(0, 525, 0, 430)
|
|
frame.BackgroundTransparency = 1
|
|
frame.Active = true
|
|
frame.Parent = shield
|
|
local settingsFrame = Instance.new("Frame")
|
|
settingsFrame.Name = "SettingsStyle"
|
|
settingsFrame.Size = UDim2.new(1, 0, 1, 0)
|
|
settingsFrame.Style = Enum.FrameStyle.RobloxRound
|
|
settingsFrame.Active = true
|
|
settingsFrame.ZIndex = baseZIndex + 3
|
|
settingsFrame.Parent = frame
|
|
local gameMainMenu = createGameMainMenu(baseZIndex, shield)
|
|
gameMainMenu.Parent = settingsFrame
|
|
gameMainMenu.ScreenshotButton.MouseButton1Click:connect(function()
|
|
return backToGame(gameMainMenu.ScreenshotButton, shield, settingsButton)
|
|
end)
|
|
gameMainMenu.RecordVideoButton.MouseButton1Click:connect(function()
|
|
recordVideoClick(gameMainMenu.RecordVideoButton, gui.StopRecordButton)
|
|
return backToGame(gameMainMenu.RecordVideoButton, shield, settingsButton)
|
|
end)
|
|
if settings():FindFirstChild("Game Options") then
|
|
pcall(function()
|
|
return settings():FindFirstChild("Game Options").VideoRecordingChangeRequest:connect(function(recording)
|
|
recordingVideo = recording
|
|
return setRecordGui(recording, gui.StopRecordButton, gameMainMenu.RecordVideoButton)
|
|
end)
|
|
end)
|
|
end
|
|
game.CoreGui.RobloxGui.Changed:connect(function(prop)
|
|
if prop == "AbsoluteSize" and recordingVideo then
|
|
return recordVideoClick(gameMainMenu.RecordVideoButton, gui.StopRecordButton)
|
|
end
|
|
end)
|
|
local localPlayerChange
|
|
localPlayerChange = function()
|
|
gameMainMenu.ResetButton.Visible = game.Players.LocalPlayer
|
|
if game.Players.LocalPlayer then
|
|
settings().Rendering.EnableFRM = true
|
|
elseif inStudioMode then
|
|
settings().Rendering.EnableFRM = false
|
|
end
|
|
end
|
|
gameMainMenu.ResetButton.Visible = game.Players.LocalPlayer
|
|
if (game.Players.LocalPlayer ~= nil) then
|
|
game.Players.LocalPlayer.Changed:connect(function()
|
|
return localPlayerChange()
|
|
end)
|
|
else
|
|
delay(0, function()
|
|
waitForProperty(game.Players, "LocalPlayer")
|
|
gameMainMenu.ResetButton.Visible = game.Players.LocalPlayer
|
|
return game.Players.LocalPlayer.Changed:connect(function()
|
|
return localPlayerChange()
|
|
end)
|
|
end)
|
|
end
|
|
gameMainMenu.ReportAbuseButton.Visible = game:FindFirstChild("NetworkClient")
|
|
if not gameMainMenu.ReportAbuseButton.Visible then
|
|
game.ChildAdded:connect(function(child)
|
|
if child:IsA("NetworkClient") then
|
|
gameMainMenu.ReportAbuseButton.Visible = game:FindFirstChild("NetworkClient")
|
|
end
|
|
end)
|
|
end
|
|
gameMainMenu.ResetButton.MouseButton1Click:connect(function()
|
|
return goToMenu(settingsFrame, "ResetConfirmationMenu", "up", UDim2.new(0, 525, 0, 370))
|
|
end)
|
|
gameMainMenu.LeaveGameButton.MouseButton1Click:connect(function()
|
|
return goToMenu(settingsFrame, "LeaveConfirmationMenu", "down", UDim2.new(0, 525, 0, 300))
|
|
end)
|
|
if game.CoreGui.Version >= 4 then
|
|
game:GetService("GuiService").EscapeKeyPressed:connect(function()
|
|
if currentMenuSelection == nil then
|
|
return game.GuiService:AddCenterDialog(shield, Enum.CenterDialogType.ModalDialog, function()
|
|
settingsButton.Active = false
|
|
updateCameraDropDownSelection(UserSettings().GameSettings.ControlMode.Name)
|
|
if syncVideoCaptureSetting then
|
|
syncVideoCaptureSetting()
|
|
end
|
|
goToMenu(settingsFrame, "GameMainMenu", "right", UDim2.new(0, 525, 0, 430))
|
|
shield.Visible = true
|
|
shield.Active = true
|
|
settingsFrame.Parent:TweenPosition(UDim2.new(0.5, -262, 0.5, -200), Enum.EasingDirection.InOut, Enum.EasingStyle.Sine, tweenTime, true)
|
|
return settingsFrame.Parent:TweenSize(UDim2.new(0, 525, 0, 430), Enum.EasingDirection.InOut, Enum.EasingStyle.Sine, tweenTime, true)
|
|
end, function()
|
|
settingsFrame.Parent:TweenPosition(UDim2.new(0.5, -262, -0.5, -200), Enum.EasingDirection.InOut, Enum.EasingStyle.Sine, tweenTime, true)
|
|
settingsFrame.Parent:TweenSize(UDim2.new(0, 525, 0, 430), Enum.EasingDirection.InOut, Enum.EasingStyle.Sine, tweenTime, true)
|
|
shield.Visible = false
|
|
settingsButton.Active = true
|
|
end)
|
|
elseif #lastMenuSelection > 0 then
|
|
if #centerDialogs > 0 then
|
|
for i = 1, #centerDialogs do
|
|
game.GuiService:RemoveCenterDialog(centerDialogs[i])
|
|
centerDialogs[i].Visible = false
|
|
end
|
|
centerDialogs = { }
|
|
end
|
|
goToMenu(lastMenuSelection[#lastMenuSelection]["container"], lastMenuSelection[#lastMenuSelection]["name"], lastMenuSelection[#lastMenuSelection]["direction"], lastMenuSelection[#lastMenuSelection]["lastSize"])
|
|
table.remove(lastMenuSelection, #lastMenuSelection)
|
|
if #lastMenuSelection == 1 then
|
|
lastMenuSelection = { }
|
|
end
|
|
else
|
|
return resumeGameFunction(shield)
|
|
end
|
|
end)
|
|
end
|
|
local gameSettingsMenu = createGameSettingsMenu(baseZIndex, shield)
|
|
gameSettingsMenu.Visible = false
|
|
gameSettingsMenu.Parent = settingsFrame
|
|
gameMainMenu.SettingsButton.MouseButton1Click:connect(function()
|
|
return goToMenu(settingsFrame, "GameSettingsMenu", "left", UDim2.new(0, 525, 0, 350))
|
|
end)
|
|
gameSettingsMenu.BackButton.MouseButton1Click:connect(function()
|
|
return goToMenu(settingsFrame, "GameMainMenu", "right", UDim2.new(0, 525, 0, 430))
|
|
end)
|
|
local resetConfirmationWindow = createResetConfirmationMenu(baseZIndex, shield)
|
|
resetConfirmationWindow.Visible = false
|
|
resetConfirmationWindow.Parent = settingsFrame
|
|
local leaveConfirmationWindow = createLeaveConfirmationMenu(baseZIndex, shield)
|
|
leaveConfirmationWindow.Visible = false
|
|
leaveConfirmationWindow.Parent = settingsFrame
|
|
robloxLock(shield)
|
|
settingsButton.MouseButton1Click:connect(function()
|
|
return game.GuiService:AddCenterDialog(shield, Enum.CenterDialogType.ModalDialog, function()
|
|
settingsButton.Active = false
|
|
updateCameraDropDownSelection(UserSettings().GameSettings.ControlMode.Name)
|
|
if syncVideoCaptureSetting then
|
|
syncVideoCaptureSetting()
|
|
end
|
|
goToMenu(settingsFrame, "GameMainMenu", "right", UDim2.new(0, 525, 0, 430))
|
|
shield.Visible = true
|
|
settingsFrame.Parent:TweenPosition(UDim2.new(0.5, -262, 0.5, -200), Enum.EasingDirection.InOut, Enum.EasingStyle.Sine, tweenTime, true)
|
|
return settingsFrame.Parent:TweenSize(UDim2.new(0, 525, 0, 430), Enum.EasingDirection.InOut, Enum.EasingStyle.Sine, tweenTime, true)
|
|
end, function()
|
|
settingsFrame.Parent:TweenPosition(UDim2.new(0.5, -262, -0.5, -200), Enum.EasingDirection.InOut, Enum.EasingStyle.Sine, tweenTime, true)
|
|
settingsFrame.Parent:TweenSize(UDim2.new(0, 525, 0, 430), Enum.EasingDirection.InOut, Enum.EasingStyle.Sine, tweenTime, true)
|
|
shield.Visible = false
|
|
settingsButton.Active = true
|
|
end)
|
|
end)
|
|
return shield
|
|
end
|
|
delay(0, function()
|
|
createSettingsDialog().Parent = gui
|
|
gui.BottomLeftControl.SettingsButton.Active = true
|
|
gui.BottomLeftControl.SettingsButton.Position = UDim2.new(0, 2, 0, -2)
|
|
if mouseLockLabel and UserSettings().GameSettings.ControlMode == Enum.ControlMode["Mouse Lock Switch"] then
|
|
mouseLockLabel.Visible = true
|
|
elseif mouseLockLabel then
|
|
mouseLockLabel.Visible = false
|
|
end
|
|
local leaveGameButton = gui.BottomLeftControl:FindFirstChild("Exit")
|
|
if leaveGameButton then
|
|
leaveGameButton:Remove()
|
|
end
|
|
local topLeft = gui:FindFirstChild("TopLeftControl")
|
|
if topLeft then
|
|
leaveGameButton = topLeft:FindFirstChild("Exit")
|
|
if leaveGameButton then
|
|
leaveGameButton:Remove()
|
|
end
|
|
return topLeft:Remove()
|
|
end
|
|
end)
|
|
end
|
|
local createSaveDialogs
|
|
createSaveDialogs = function()
|
|
local shield = Instance.new("TextButton")
|
|
shield.Text = ""
|
|
shield.AutoButtonColor = false
|
|
shield.Name = "SaveDialogShield"
|
|
shield.Active = true
|
|
shield.Visible = false
|
|
shield.Size = UDim2.new(1, 0, 1, 0)
|
|
shield.BackgroundColor3 = Color3I(51, 51, 51)
|
|
shield.BorderColor3 = Color3I(27, 42, 53)
|
|
shield.BackgroundTransparency = 0.4
|
|
shield.ZIndex = baseZIndex + 1
|
|
local clearAndResetDialog, save, saveLocal, dontSave, cancel
|
|
local messageBoxButtons = { }
|
|
messageBoxButtons[1] = { }
|
|
messageBoxButtons[1].Text = "Save"
|
|
messageBoxButtons[1].Style = Enum.ButtonStyle.RobloxButtonDefault
|
|
messageBoxButtons[1].Function = function()
|
|
return save()
|
|
end
|
|
messageBoxButtons[2] = { }
|
|
messageBoxButtons[2].Text = "Cancel"
|
|
messageBoxButtons[2].Function = function()
|
|
return cancel()
|
|
end
|
|
messageBoxButtons[3] = { }
|
|
messageBoxButtons[3].Text = "Don't Save"
|
|
messageBoxButtons[3].Function = function()
|
|
return dontSave()
|
|
end
|
|
local saveDialogMessageBox = RbxGui.CreateStyledMessageDialog("Unsaved Changes", "Save your changes to Mercury before leaving?", "Confirm", messageBoxButtons)
|
|
saveDialogMessageBox.Visible = true
|
|
saveDialogMessageBox.Parent = shield
|
|
local errorBoxButtons = { }
|
|
local buttonOffset = 1
|
|
if game.LocalSaveEnabled then
|
|
errorBoxButtons[buttonOffset] = { }
|
|
errorBoxButtons[buttonOffset].Text = "Save to Disk"
|
|
errorBoxButtons[buttonOffset].Function = function()
|
|
return saveLocal()
|
|
end
|
|
buttonOffset = buttonOffset + 1
|
|
end
|
|
errorBoxButtons[buttonOffset] = { }
|
|
errorBoxButtons[buttonOffset].Text = "Keep Playing"
|
|
errorBoxButtons[buttonOffset].Function = function()
|
|
return cancel()
|
|
end
|
|
errorBoxButtons[buttonOffset + 1] = { }
|
|
errorBoxButtons[buttonOffset + 1].Text = "Don't Save"
|
|
errorBoxButtons[buttonOffset + 1].Function = function()
|
|
return dontSave()
|
|
end
|
|
local errorDialogMessageBox = RbxGui.CreateStyledMessageDialog("Upload Failed", "Sorry, we could not save your changes to Mercury.", "Error", errorBoxButtons)
|
|
errorDialogMessageBox.Visible = false
|
|
errorDialogMessageBox.Parent = shield
|
|
local spinnerDialog = Instance.new("Frame")
|
|
spinnerDialog.Name = "SpinnerDialog"
|
|
spinnerDialog.Style = Enum.FrameStyle.RobloxRound
|
|
spinnerDialog.Size = UDim2.new(0, 350, 0, 150)
|
|
spinnerDialog.Position = UDim2.new(0.5, -175, 0.5, -75)
|
|
spinnerDialog.Visible = false
|
|
spinnerDialog.Active = true
|
|
spinnerDialog.Parent = shield
|
|
local waitingLabel = Instance.new("TextLabel")
|
|
waitingLabel.Name = "WaitingLabel"
|
|
waitingLabel.Text = "Saving to Mercury..."
|
|
waitingLabel.Font = Enum.Font.ArialBold
|
|
waitingLabel.FontSize = Enum.FontSize.Size18
|
|
waitingLabel.Position = UDim2.new(0.5, 25, 0.5, 0)
|
|
waitingLabel.TextColor3 = Color3.new(1, 1, 1)
|
|
waitingLabel.Parent = spinnerDialog
|
|
local spinnerFrame = Instance.new("Frame")
|
|
spinnerFrame.Name = "Spinner"
|
|
spinnerFrame.Size = UDim2.new(0, 80, 0, 80)
|
|
spinnerFrame.Position = UDim2.new(0.5, -150, 0.5, -40)
|
|
spinnerFrame.BackgroundTransparency = 1
|
|
spinnerFrame.Parent = spinnerDialog
|
|
local spinnerIcons = { }
|
|
local spinnerNum = 1
|
|
while spinnerNum <= 8 do
|
|
local spinnerImage = Instance.new("ImageLabel")
|
|
spinnerImage.Name = "Spinner" .. spinnerNum
|
|
spinnerImage.Size = UDim2.new(0, 16, 0, 16)
|
|
spinnerImage.Position = UDim2.new(0.5 + 0.3 * math.cos(math.rad(45 * spinnerNum)), -8, 0.5 + 0.3 * math.sin(math.rad(45 * spinnerNum)), -8)
|
|
spinnerImage.BackgroundTransparency = 1
|
|
spinnerImage.Image = "http://www.roblox.com/Asset?id=45880710"
|
|
spinnerImage.Parent = spinnerFrame
|
|
spinnerIcons[spinnerNum] = spinnerImage
|
|
spinnerNum = spinnerNum + 1
|
|
end
|
|
save = function()
|
|
saveDialogMessageBox.Visible = false
|
|
spinnerDialog.Visible = true
|
|
local spin = true
|
|
delay(0, function()
|
|
local spinPos = 0
|
|
while spin do
|
|
local pos = 0
|
|
while pos < 8 do
|
|
if pos == spinPos or pos == ((spinPos + 1) % 8) then
|
|
spinnerIcons[pos + 1].Image = "http://www.roblox.com/Asset?id=45880668"
|
|
else
|
|
spinnerIcons[pos + 1].Image = "http://www.roblox.com/Asset?id=45880710"
|
|
end
|
|
pos = pos + 1
|
|
end
|
|
spinPos = (spinPos + 1) % 8
|
|
wait(0.2)
|
|
end
|
|
end)
|
|
local result = game:SaveToRoblox()
|
|
if not result then
|
|
result = game:SaveToRoblox()
|
|
end
|
|
spinnerDialog.Visible = false
|
|
spin = false
|
|
if result then
|
|
game:FinishShutdown(false)
|
|
return clearAndResetDialog()
|
|
else
|
|
errorDialogMessageBox.Visible = true
|
|
end
|
|
end
|
|
saveLocal = function()
|
|
errorDialogMessageBox.Visible = false
|
|
game:FinishShutdown(true)
|
|
return clearAndResetDialog()
|
|
end
|
|
dontSave = function()
|
|
saveDialogMessageBox.Visible = false
|
|
errorDialogMessageBox.Visible = false
|
|
game:FinishShutdown(false)
|
|
return clearAndResetDialog()
|
|
end
|
|
cancel = function()
|
|
saveDialogMessageBox.Visible = false
|
|
errorDialogMessageBox.Visible = false
|
|
return clearAndResetDialog()
|
|
end
|
|
clearAndResetDialog = function()
|
|
saveDialogMessageBox.Visible = true
|
|
errorDialogMessageBox.Visible = false
|
|
spinnerDialog.Visible = false
|
|
shield.Visible = false
|
|
return game.GuiService:RemoveCenterDialog(shield)
|
|
end
|
|
robloxLock(shield)
|
|
shield.Visible = false
|
|
return shield
|
|
end
|
|
local createReportAbuseDialog
|
|
createReportAbuseDialog = function()
|
|
waitForChild(game, "NetworkClient")
|
|
waitForChild(game, "Players")
|
|
waitForProperty(game.Players, "LocalPlayer")
|
|
local localPlayer = game.Players.LocalPlayer
|
|
local reportAbuseButton
|
|
waitForChild(gui, "UserSettingsShield")
|
|
waitForChild(gui.UserSettingsShield, "Settings")
|
|
waitForChild(gui.UserSettingsShield.Settings, "SettingsStyle")
|
|
waitForChild(gui.UserSettingsShield.Settings.SettingsStyle, "GameMainMenu")
|
|
waitForChild(gui.UserSettingsShield.Settings.SettingsStyle.GameMainMenu, "ReportAbuseButton")
|
|
reportAbuseButton = gui.UserSettingsShield.Settings.SettingsStyle.GameMainMenu.ReportAbuseButton
|
|
local shield = Instance.new("TextButton")
|
|
shield.Name = "ReportAbuseShield"
|
|
shield.Text = ""
|
|
shield.AutoButtonColor = false
|
|
shield.Active = true
|
|
shield.Visible = false
|
|
shield.Size = UDim2.new(1, 0, 1, 0)
|
|
shield.BackgroundColor3 = Color3I(51, 51, 51)
|
|
shield.BorderColor3 = Color3I(27, 42, 53)
|
|
shield.BackgroundTransparency = 0.4
|
|
shield.ZIndex = baseZIndex + 1
|
|
local closeAndResetDialog
|
|
local messageBoxButtons = { }
|
|
messageBoxButtons[1] = { }
|
|
messageBoxButtons[1].Text = "Ok"
|
|
messageBoxButtons[1].Modal = true
|
|
messageBoxButtons[1].Function = function()
|
|
return closeAndResetDialog()
|
|
end
|
|
local calmingMessageBox = RbxGui.CreateMessageDialog("Thanks for your report!", "Our moderators will review the chat logs and determine what happened. The other user is probably just trying to make you mad.\n\nIf anyone used swear words, inappropriate language, or threatened you in real life, please report them for Bad Words or Threats", messageBoxButtons)
|
|
calmingMessageBox.Visible = false
|
|
calmingMessageBox.Parent = shield
|
|
local recordedMessageBox = RbxGui.CreateMessageDialog("Thanks for your report!", "We've recorded your report for evaluation.", messageBoxButtons)
|
|
recordedMessageBox.Visible = false
|
|
recordedMessageBox.Parent = shield
|
|
local normalMessageBox = RbxGui.CreateMessageDialog("Thanks for your report!", "Our moderators will review the chat logs and determine what happened.", messageBoxButtons)
|
|
normalMessageBox.Visible = false
|
|
normalMessageBox.Parent = shield
|
|
local frame = Instance.new("Frame")
|
|
frame.Name = "Settings"
|
|
frame.Position = UDim2.new(0.5, -250, 0.5, -200)
|
|
frame.Size = UDim2.new(0, 500, 0, 400)
|
|
frame.BackgroundTransparency = 1
|
|
frame.Active = true
|
|
frame.Parent = shield
|
|
local settingsFrame = Instance.new("Frame")
|
|
settingsFrame.Name = "ReportAbuseStyle"
|
|
settingsFrame.Size = UDim2.new(1, 0, 1, 0)
|
|
settingsFrame.Style = Enum.FrameStyle.RobloxRound
|
|
settingsFrame.Active = true
|
|
settingsFrame.ZIndex = baseZIndex + 1
|
|
settingsFrame.Parent = frame
|
|
local title = Instance.new("TextLabel")
|
|
title.Name = "Title"
|
|
title.Text = "Report Abuse"
|
|
title.TextColor3 = Color3I(221, 221, 221)
|
|
title.Position = UDim2.new(0.5, 0, 0, 30)
|
|
title.Font = Enum.Font.ArialBold
|
|
title.FontSize = Enum.FontSize.Size36
|
|
title.ZIndex = baseZIndex + 2
|
|
title.Parent = settingsFrame
|
|
local description = Instance.new("TextLabel")
|
|
description.Name = "Description"
|
|
description.Text = "This will send a complete report to a moderator. The moderator will review the chat log and take appropriate action."
|
|
description.TextColor3 = Color3I(221, 221, 221)
|
|
description.Position = UDim2.new(0, 0, 0, 55)
|
|
description.Size = UDim2.new(1, 0, 0, 40)
|
|
description.BackgroundTransparency = 1
|
|
description.Font = Enum.Font.Arial
|
|
description.FontSize = Enum.FontSize.Size18
|
|
description.TextWrap = true
|
|
description.ZIndex = baseZIndex + 2
|
|
description.TextXAlignment = Enum.TextXAlignment.Left
|
|
description.TextYAlignment = Enum.TextYAlignment.Top
|
|
description.Parent = settingsFrame
|
|
local playerLabel = Instance.new("TextLabel")
|
|
playerLabel.Name = "PlayerLabel"
|
|
playerLabel.Text = "Which player?"
|
|
playerLabel.BackgroundTransparency = 1
|
|
playerLabel.Font = Enum.Font.Arial
|
|
playerLabel.FontSize = Enum.FontSize.Size18
|
|
playerLabel.Position = UDim2.new(0.025, 0, 0, 100)
|
|
playerLabel.Size = UDim2.new(0.4, 0, 0, 36)
|
|
playerLabel.TextColor3 = Color3I(255, 255, 255)
|
|
playerLabel.TextXAlignment = Enum.TextXAlignment.Left
|
|
playerLabel.ZIndex = baseZIndex + 2
|
|
playerLabel.Parent = settingsFrame
|
|
local abusingPlayer
|
|
local abuse
|
|
local submitReportButton
|
|
local updatePlayerSelection
|
|
local createPlayersDropDown
|
|
createPlayersDropDown = function()
|
|
local players = game:GetService("Players")
|
|
local playerNames = { }
|
|
local nameToPlayer = { }
|
|
local children = players:GetChildren()
|
|
local pos = 1
|
|
if children then
|
|
for _, player in ipairs(children) do
|
|
if player:IsA("Player") and player ~= localPlayer then
|
|
playerNames[pos] = player.Name
|
|
nameToPlayer[player.Name] = player
|
|
pos = pos + 1
|
|
end
|
|
end
|
|
end
|
|
local playerDropDown
|
|
playerDropDown, updatePlayerSelection = RbxGui.CreateDropDownMenu(playerNames, function(playerName)
|
|
abusingPlayer = nameToPlayer[playerName]
|
|
if abuse and abusingPlayer then
|
|
submitReportButton.Active = true
|
|
end
|
|
end)
|
|
playerDropDown.Name = "PlayersComboBox"
|
|
playerDropDown.ZIndex = baseZIndex + 2
|
|
playerDropDown.Position = UDim2.new(0.425, 0, 0, 102)
|
|
playerDropDown.Size = UDim2.new(0.55, 0, 0, 32)
|
|
return playerDropDown
|
|
end
|
|
local abuseLabel = Instance.new("TextLabel")
|
|
abuseLabel.Name = "AbuseLabel"
|
|
abuseLabel.Text = "Type of Abuse:"
|
|
abuseLabel.Font = Enum.Font.Arial
|
|
abuseLabel.BackgroundTransparency = 1
|
|
abuseLabel.FontSize = Enum.FontSize.Size18
|
|
abuseLabel.Position = UDim2.new(0.025, 0, 0, 140)
|
|
abuseLabel.Size = UDim2.new(0.4, 0, 0, 36)
|
|
abuseLabel.TextColor3 = Color3I(255, 255, 255)
|
|
abuseLabel.TextXAlignment = Enum.TextXAlignment.Left
|
|
abuseLabel.ZIndex = baseZIndex + 2
|
|
abuseLabel.Parent = settingsFrame
|
|
local abuses = {
|
|
"Swearing",
|
|
"Bullying",
|
|
"Scamming",
|
|
"Dating",
|
|
"Cheating/Exploiting",
|
|
"Personal Questions",
|
|
"Offsite Links",
|
|
"Bad Model or Script",
|
|
"Bad Username"
|
|
}
|
|
local abuseDropDown, updateAbuseSelection = RbxGui.CreateDropDownMenu(abuses, function(abuseText)
|
|
abuse = abuseText
|
|
if abuse and abusingPlayer then
|
|
submitReportButton.Active = true
|
|
end
|
|
end, true)
|
|
abuseDropDown.Name = "AbuseComboBox"
|
|
abuseDropDown.ZIndex = baseZIndex + 2
|
|
abuseDropDown.Position = UDim2.new(0.425, 0, 0, 142)
|
|
abuseDropDown.Size = UDim2.new(0.55, 0, 0, 32)
|
|
abuseDropDown.Parent = settingsFrame
|
|
local shortDescriptionLabel = Instance.new("TextLabel")
|
|
shortDescriptionLabel.Name = "ShortDescriptionLabel"
|
|
shortDescriptionLabel.Text = "Short Description: (optional)"
|
|
shortDescriptionLabel.Font = Enum.Font.Arial
|
|
shortDescriptionLabel.FontSize = Enum.FontSize.Size18
|
|
shortDescriptionLabel.Position = UDim2.new(0.025, 0, 0, 180)
|
|
shortDescriptionLabel.Size = UDim2.new(0.95, 0, 0, 36)
|
|
shortDescriptionLabel.TextColor3 = Color3I(255, 255, 255)
|
|
shortDescriptionLabel.TextXAlignment = Enum.TextXAlignment.Left
|
|
shortDescriptionLabel.BackgroundTransparency = 1
|
|
shortDescriptionLabel.ZIndex = baseZIndex + 2
|
|
shortDescriptionLabel.Parent = settingsFrame
|
|
local shortDescriptionWrapper = Instance.new("Frame")
|
|
shortDescriptionWrapper.Name = "ShortDescriptionWrapper"
|
|
shortDescriptionWrapper.Position = UDim2.new(0.025, 0, 0, 220)
|
|
shortDescriptionWrapper.Size = UDim2.new(0.95, 0, 1, -310)
|
|
shortDescriptionWrapper.BackgroundColor3 = Color3I(0, 0, 0)
|
|
shortDescriptionWrapper.BorderSizePixel = 0
|
|
shortDescriptionWrapper.ZIndex = baseZIndex + 2
|
|
shortDescriptionWrapper.Parent = settingsFrame
|
|
local shortDescriptionBox = Instance.new("TextBox")
|
|
shortDescriptionBox.Name = "TextBox"
|
|
shortDescriptionBox.Text = ""
|
|
shortDescriptionBox.ClearTextOnFocus = false
|
|
shortDescriptionBox.Font = Enum.Font.Arial
|
|
shortDescriptionBox.FontSize = Enum.FontSize.Size18
|
|
shortDescriptionBox.Position = UDim2.new(0, 3, 0, 3)
|
|
shortDescriptionBox.Size = UDim2.new(1, -6, 1, -6)
|
|
shortDescriptionBox.TextColor3 = Color3I(255, 255, 255)
|
|
shortDescriptionBox.TextXAlignment = Enum.TextXAlignment.Left
|
|
shortDescriptionBox.TextYAlignment = Enum.TextYAlignment.Top
|
|
shortDescriptionBox.TextWrap = true
|
|
shortDescriptionBox.BackgroundColor3 = Color3I(0, 0, 0)
|
|
shortDescriptionBox.BorderSizePixel = 0
|
|
shortDescriptionBox.ZIndex = baseZIndex + 2
|
|
shortDescriptionBox.Parent = shortDescriptionWrapper
|
|
submitReportButton = Instance.new("TextButton")
|
|
submitReportButton.Name = "SubmitReportBtn"
|
|
submitReportButton.Active = false
|
|
submitReportButton.Modal = true
|
|
submitReportButton.Font = Enum.Font.Arial
|
|
submitReportButton.FontSize = Enum.FontSize.Size18
|
|
submitReportButton.Position = UDim2.new(0.1, 0, 1, -80)
|
|
submitReportButton.Size = UDim2.new(0.35, 0, 0, 50)
|
|
submitReportButton.AutoButtonColor = true
|
|
submitReportButton.Style = Enum.ButtonStyle.RobloxButtonDefault
|
|
submitReportButton.Text = "Submit Report"
|
|
submitReportButton.TextColor3 = Color3I(255, 255, 255)
|
|
submitReportButton.ZIndex = baseZIndex + 2
|
|
submitReportButton.Parent = settingsFrame
|
|
submitReportButton.MouseButton1Click:connect(function()
|
|
if submitReportButton.Active then
|
|
if abuse and abusingPlayer then
|
|
frame.Visible = false
|
|
game.Players:ReportAbuse(abusingPlayer, abuse, shortDescriptionBox.Text)
|
|
if abuse == "Cheating/Exploiting" then
|
|
recordedMessageBox.Visible = true
|
|
elseif abuse == "Bullying" or abuse == "Swearing" then
|
|
calmingMessageBox.Visible = true
|
|
else
|
|
normalMessageBox.Visible = true
|
|
end
|
|
else
|
|
return closeAndResetDialog()
|
|
end
|
|
end
|
|
end)
|
|
local cancelButton = Instance.new("TextButton")
|
|
cancelButton.Name = "CancelBtn"
|
|
cancelButton.Font = Enum.Font.Arial
|
|
cancelButton.FontSize = Enum.FontSize.Size18
|
|
cancelButton.Position = UDim2.new(0.55, 0, 1, -80)
|
|
cancelButton.Size = UDim2.new(0.35, 0, 0, 50)
|
|
cancelButton.AutoButtonColor = true
|
|
cancelButton.Style = Enum.ButtonStyle.RobloxButtonDefault
|
|
cancelButton.Text = "Cancel"
|
|
cancelButton.TextColor3 = Color3I(255, 255, 255)
|
|
cancelButton.ZIndex = baseZIndex + 2
|
|
cancelButton.Parent = settingsFrame
|
|
closeAndResetDialog = function()
|
|
local oldComboBox = settingsFrame:FindFirstChild("PlayersComboBox")
|
|
if oldComboBox then
|
|
oldComboBox.Parent = nil
|
|
end
|
|
abusingPlayer = nil
|
|
updatePlayerSelection(nil)
|
|
abuse = nil
|
|
updateAbuseSelection(nil)
|
|
submitReportButton.Active = false
|
|
shortDescriptionBox.Text = ""
|
|
frame.Visible = true
|
|
calmingMessageBox.Visible = false
|
|
recordedMessageBox.Visible = false
|
|
normalMessageBox.Visible = false
|
|
shield.Visible = false
|
|
reportAbuseButton.Active = true
|
|
return game.GuiService:RemoveCenterDialog(shield)
|
|
end
|
|
cancelButton.MouseButton1Click:connect(closeAndResetDialog)
|
|
reportAbuseButton.MouseButton1Click:connect(function()
|
|
createPlayersDropDown().Parent = settingsFrame
|
|
table.insert(centerDialogs, shield)
|
|
return game.GuiService:AddCenterDialog(shield, Enum.CenterDialogType.ModalDialog, function()
|
|
reportAbuseButton.Active = false
|
|
shield.Visible = true
|
|
mainShield.Visible = false
|
|
end, function()
|
|
reportAbuseButton.Active = true
|
|
shield.Visible = false
|
|
end)
|
|
end)
|
|
robloxLock(shield)
|
|
return shield
|
|
end
|
|
local isSaveDialogSupported = pcall(function() end)
|
|
if isSaveDialogSupported then
|
|
delay(0, function()
|
|
local saveDialogs = createSaveDialogs()
|
|
saveDialogs.Parent = gui
|
|
game.RequestShutdown = function()
|
|
table.insert(centerDialogs, saveDialogs)
|
|
game.GuiService:AddCenterDialog(saveDialogs, Enum.CenterDialogType.QuitDialog, function()
|
|
saveDialogs.Visible = true
|
|
end, function()
|
|
saveDialogs.Visible = false
|
|
end)
|
|
return true
|
|
end
|
|
end)
|
|
end
|
|
delay(0, function()
|
|
createReportAbuseDialog().Parent = gui
|
|
waitForChild(gui, "UserSettingsShield")
|
|
waitForChild(gui.UserSettingsShield, "Settings")
|
|
waitForChild(gui.UserSettingsShield.Settings, "SettingsStyle")
|
|
waitForChild(gui.UserSettingsShield.Settings.SettingsStyle, "GameMainMenu")
|
|
waitForChild(gui.UserSettingsShield.Settings.SettingsStyle.GameMainMenu, "ReportAbuseButton")
|
|
gui.UserSettingsShield.Settings.SettingsStyle.GameMainMenu.ReportAbuseButton.Active = true
|
|
end)
|
|
pcall(function()
|
|
return game.GuiService.UseLuaChat
|
|
end)
|
|
local BurningManPlaceID = 41324860
|
|
return delay(0, function()
|
|
waitForChild(game, "NetworkClient")
|
|
waitForChild(game, "Players")
|
|
waitForProperty(game.Players, "LocalPlayer")
|
|
waitForProperty(game.Players.LocalPlayer, "Character")
|
|
waitForChild(game.Players.LocalPlayer.Character, "Humanoid")
|
|
waitForProperty(game, "PlaceId")
|
|
if game.PlaceId == BurningManPlaceID then
|
|
game.Players.LocalPlayer.Character.Humanoid:SetClickToWalkEnabled(false)
|
|
return game.Players.LocalPlayer.CharacterAdded:connect(function(character)
|
|
waitForChild(character, "Humanoid")
|
|
return character.Humanoid:SetClickToWalkEnabled(false)
|
|
end)
|
|
end
|
|
end)
|
|
end
|