local New New = function(className, name, props) if not (props ~= nil) then props = name name = nil end local obj = Instance.new(className) if name then obj.Name = name end local parent for k, v in pairs(props) do if type(k) == "string" then if k == "Parent" then parent = v else obj[k] = v end elseif type(k) == "number" and type(v) == "userdata" then v.Parent = obj end end obj.Parent = parent return obj end 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 RbxGui local syncVideoCaptureSetting local settingsButton, helpButton, settingsFrame, mouseLockLabel 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 = 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 then if player.Character and player.Character:FindFirstChild("Humanoid") then player.Character.Humanoid.Health = 0 end end end local createTextButton createTextButton = function(text, style, fontSize, buttonSize, buttonPosition) return New("TextButton", { Font = Enum.Font.Arial, FontSize = fontSize, Size = buttonSize, Position = buttonPosition, Style = style, TextColor3 = Color3.new(1, 1, 1), Text = text }) 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 = New("TextButton", "Button" .. tostring(buttonNum), { Font = Enum.Font.Arial, FontSize = Enum.FontSize.Size18, AutoButtonColor = true, Style = Enum.ButtonStyle.RobloxButton, Text = obj.Text, 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 not (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 = New("Frame", "HelpDialogShield", { Active = true, Visible = false, Size = UDim2.new(1, 0, 1, 0), BackgroundColor3 = Color3I(51, 51, 51), BorderColor3 = Color3I(27, 42, 53), BackgroundTransparency = 0.4, ZIndex = baseZIndex + 1 }) local helpDialog = New("Frame", "HelpDialog", { Style = Enum.FrameStyle.RobloxRound, Position = UDim2.new(0.2, 0, 0.2, 0), Size = UDim2.new(0.6, 0, 0.6, 0), Active = true, Parent = shield, New("TextLabel", "Title", { Text = "Keyboard & Mouse Controls", Font = Enum.Font.ArialBold, FontSize = Enum.FontSize.Size36, Position = UDim2.new(0, 0, 0.025, 0), Size = UDim2.new(1, 0, 0, 40), TextColor3 = Color3.new(1, 1, 1), BackgroundTransparency = 1 }) }) local buttonRow = New("Frame", "Buttons", { Position = UDim2.new(0.1, 0, 0.07, 40), Size = UDim2.new(0.8, 0, 0, 45), BackgroundTransparency = 1, Parent = helpDialog }) local imageFrame = New("Frame", "ImageFrame", { Position = UDim2.new(0.05, 0, 0.075, 80), Size = UDim2.new(0.9, 0, 0.9, -120), BackgroundTransparency = 1, Parent = helpDialog }) local layoutFrame = New("Frame", "LayoutFrame", { Position = UDim2.new(0.5, 0, 0, 0), Size = UDim2.new(1.5, 0, 1, 0), BackgroundTransparency = 1, SizeConstraint = Enum.SizeConstraint.RelativeYY, Parent = imageFrame }) local image = New("ImageLabel", "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 = imageclassicLookScreenUrl 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 = New("TextButton", "OkBtn", { Text = "OK", Modal = true, Size = UDim2.new(0.3, 0, 0, 45), Position = UDim2.new(0.35, 0, 0.975, -50), Font = Enum.Font.Arial, FontSize = Enum.FontSize.Size18, BackgroundTransparency = 1, TextColor3 = Color3.new(1, 1, 1), Style = Enum.ButtonStyle.RobloxButtonDefault, Parent = helpDialog }) okBtn.MouseButton1Click:connect(function() shield.Visible = false return game.GuiService:RemoveCenterDialog(shield) end) robloxLock(shield) return shield end local createLeaveConfirmationMenu createLeaveConfirmationMenu = function(baseZIndex, shield) local frame = New("Frame", "LeaveConfirmationMenu", { BackgroundTransparency = 1, Size = UDim2.new(1, 0, 1, 0), Position = UDim2.new(0, 0, 2, 400), ZIndex = baseZIndex + 4, New("TextLabel", "LeaveText", { Text = "Leave this game?", Size = UDim2.new(1, 0, 0.8, 0), TextWrap = true, TextColor3 = Color3.new(1, 1, 1), Font = Enum.Font.ArialBold, FontSize = Enum.FontSize.Size36, BackgroundTransparency = 1, ZIndex = baseZIndex + 4 }) }) do local _with_0 = createTextButton("Leave", Enum.ButtonStyle.RobloxButton, Enum.FontSize.Size24, UDim2.new(0, 128, 0, 50), UDim2.new(0, 313, 0.8, 0)) _with_0.Name = "YesButton" _with_0.ZIndex = baseZIndex + 4 _with_0.Parent = frame _with_0.Modal = true _with_0:SetVerb("Exit") end do local _with_0 = createTextButton("Stay", Enum.ButtonStyle.RobloxButtonDefault, Enum.FontSize.Size24, UDim2.new(0, 128, 0, 50), UDim2.new(0, 90, 0.8, 0)) _with_0.Name = "NoButton" _with_0.Parent = frame _with_0.ZIndex = baseZIndex + 4 _with_0.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) end return frame end local createResetConfirmationMenu createResetConfirmationMenu = function(baseZIndex, shield) local frame = New("Frame", "ResetConfirmationMenu", { BackgroundTransparency = 1, Size = UDim2.new(1, 0, 1, 0), Position = UDim2.new(0, 0, 2, 400), ZIndex = baseZIndex + 4 }) do local _with_0 = createTextButton("Reset", Enum.ButtonStyle.RobloxButtonDefault, Enum.FontSize.Size24, UDim2.new(0, 128, 0, 50), UDim2.new(0, 313, 0, 299)) _with_0.Name = "YesButton" _with_0.ZIndex = baseZIndex + 4 _with_0.Parent = frame _with_0.Modal = true _with_0.MouseButton1Click:connect(function() resumeGameFunction(shield) return resetLocalCharacter() end) end do local _with_0 = createTextButton("Cancel", Enum.ButtonStyle.RobloxButton, Enum.FontSize.Size24, UDim2.new(0, 128, 0, 50), UDim2.new(0, 90, 0, 299)) _with_0.Name = "NoButton" _with_0.Parent = frame _with_0.ZIndex = baseZIndex + 4 _with_0.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) end local resetCharacterText = New("TextLabel", "ResetCharacterText", { Text = "Are you sure you want to reset your character?", Size = UDim2.new(1, 0, 0.8, 0), TextWrap = true, TextColor3 = Color3.new(1, 1, 1), Font = Enum.Font.ArialBold, FontSize = Enum.FontSize.Size36, BackgroundTransparency = 1, ZIndex = baseZIndex + 4, Parent = frame }) do local _with_0 = resetCharacterText:Clone() _with_0.Name = "FineResetCharacterText" _with_0.Text = "You will be put back on a spawn point" _with_0.Size = UDim2.new(0, 303, 0, 18) _with_0.Position = UDim2.new(0, 109, 0, 215) _with_0.FontSize = Enum.FontSize.Size18 _with_0.Parent = frame end return frame end local createGameMainMenu createGameMainMenu = function(baseZIndex, shield) local gameMainMenuFrame = New("Frame", "GameMainMenu", { BackgroundTransparency = 1, Size = UDim2.new(1, 0, 1, 0), ZIndex = baseZIndex + 4, Parent = settingsFrame, New("TextLabel", "Title", { Text = "Game Menu", BackgroundTransparency = 1, TextStrokeTransparency = 0, Font = Enum.Font.ArialBold, FontSize = Enum.FontSize.Size36, Size = UDim2.new(1, 0, 0, 36), Position = UDim2.new(0, 0, 0, 4), TextColor3 = Color3.new(1, 1, 1), ZIndex = baseZIndex + 4 }) }) 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 = New("TextLabel", "HelpShortcutText", { Text = "F1", Visible = false, BackgroundTransparency = 1, Font = Enum.Font.Arial, FontSize = Enum.FontSize.Size12, Position = UDim2.new(0, 85, 0, 0), Size = UDim2.new(0, 30, 0, 30), TextColor3 = Color3.new(0, 1, 0), ZIndex = baseZIndex + 4, 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") do local _with_0 = helpShortcut:clone() _with_0.Name = "ScreenshotShortcutText" _with_0.Text = "PrintSc" _with_0.Position = UDim2.new(0, 118, 0, 0) _with_0.Visible = true _with_0.Parent = screenshotButton end 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") do local _with_0 = helpShortcut:clone() _with_0.Name = "RecordVideoShortcutText" _with_0.Visible = hasGraphicsSlider _with_0.Text = "F12" _with_0.Position = UDim2.new(0, 120, 0, 0) _with_0.Parent = recordVideoButton end local stopRecordButton = New("ImageButton", "StopRecordButton", { BackgroundTransparency = 1, Image = "rbxasset://textures/ui/RecordStop.png", 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 do local _with_0 = createTextButton("Leave Game", Enum.ButtonStyle.RobloxButton, Enum.FontSize.Size24, UDim2.new(0, 340, 0, 50), UDim2.new(0, 82, 0, 358)) _with_0.Name = "LeaveGameButton" _with_0.ZIndex = baseZIndex + 4 _with_0.Parent = gameMainMenuFrame end do local _with_0 = createTextButton("Resume Game", Enum.ButtonStyle.RobloxButtonDefault, Enum.FontSize.Size24, UDim2.new(0, 340, 0, 50), UDim2.new(0, 82, 0, 54)) _with_0.Name = "resumeGameButton" _with_0.ZIndex = baseZIndex + 4 _with_0.Parent = gameMainMenuFrame _with_0.Modal = true _with_0.MouseButton1Click:connect(function() return resumeGameFunction(shield) end) 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 = New("Frame", "GameSettingsMenu", { BackgroundTransparency = 1, Size = UDim2.new(1, 0, 1, 0), ZIndex = baseZIndex + 4, New("TextLabel", "Title", { Text = "Settings", Size = UDim2.new(1, 0, 0, 48), Position = UDim2.new(0, 9, 0, -9), Font = Enum.Font.ArialBold, FontSize = Enum.FontSize.Size36, TextColor3 = Color3.new(1, 1, 1), ZIndex = baseZIndex + 4, BackgroundTransparency = 1 }), New("TextLabel", "FullscreenText", { Text = "Fullscreen Mode", Size = UDim2.new(0, 124, 0, 18), Position = UDim2.new(0, 62, 0, 145), Font = Enum.Font.Arial, FontSize = Enum.FontSize.Size18, TextColor3 = Color3.new(1, 1, 1), ZIndex = baseZIndex + 4, BackgroundTransparency = 1 }) }) local fullscreenShortcut = New("TextLabel", "FullscreenShortcutText", { Visible = hasGraphicsSlider, Text = "F11", BackgroundTransparency = 1, Font = Enum.Font.Arial, FontSize = Enum.FontSize.Size12, Position = UDim2.new(0, 186, 0, 141), Size = UDim2.new(0, 30, 0, 30), TextColor3 = Color3.new(0, 1, 0), ZIndex = baseZIndex + 4, Parent = gameSettingsMenuFrame }) local studioText = New("TextLabel", "StudioText", { Visible = false, Text = "Studio Mode", Size = UDim2.new(0, 95, 0, 18), Position = UDim2.new(0, 62, 0, 179), Font = Enum.Font.Arial, FontSize = Enum.FontSize.Size18, TextColor3 = Color3.new(1, 1, 1), ZIndex = baseZIndex + 4, BackgroundTransparency = 1, 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 = New("TextLabel", "QualityText", { Text = "Graphics Quality", Size = UDim2.new(0, 128, 0, 18), Position = UDim2.new(0, 30, 0, 239), Font = Enum.Font.Arial, FontSize = Enum.FontSize.Size18, TextColor3 = Color3.new(1, 1, 1), ZIndex = baseZIndex + 4, BackgroundTransparency = 1, Parent = gameSettingsMenuFrame, 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(0.5, 0.5, 0.5) 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()({ Name = "BetterQualityShortcut", Text = "F10", Position = UDim2.new(0, 394, 0, 288), Parent = gameSettingsMenuFrame, 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 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 = New("TextBox", "GraphicsSetter", { BackgroundColor3 = Color3.new(0, 0, 0), BorderColor3 = Color3.new(0.5, 0.5, 0.5), Size = UDim2.new(0, 50, 0, 25), Position = UDim2.new(0, 450, 0, 269), TextColor3 = Color3.new(1, 1, 1), Font = Enum.Font.Arial, FontSize = Enum.FontSize.Size18, Text = "Auto", ZIndex = 1, TextWrap = true, Parent = gameSettingsMenuFrame, 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 not (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 if not macClient then New("TextLabel", "VideoCaptureLabel", { Text = "After Capturing Video", Font = Enum.Font.Arial, FontSize = Enum.FontSize.Size18, Position = UDim2.new(0, 32, 0, 100), Size = UDim2.new(0, 164, 0, 18), BackgroundTransparency = 1, TextColor3 = Color3I(255, 255, 255), TextXAlignment = Enum.TextXAlignment.Left, ZIndex = baseZIndex + 4, 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 New("TextLabel", "CameraLabel", { Text = "Character & Camera Controls", Font = Enum.Font.Arial, FontSize = Enum.FontSize.Size18, Position = UDim2.new(0, 31, 0, 58), Size = UDim2.new(0, 224, 0, 18), TextColor3 = Color3I(255, 255, 255), TextXAlignment = Enum.TextXAlignment.Left, BackgroundTransparency = 1, ZIndex = baseZIndex + 4, Parent = gameSettingsMenuFrame }) 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 not (settingsButton ~= nil) then settingsButton = New("ImageButton", "SettingsButton", { Image = "rbxasset://textures/ui/SettingsButton.png", BackgroundTransparency = 1, Active = false, Size = UDim2.new(0, 54, 0, 46), Position = UDim2.new(0, 2, 0, 50), Parent = gui.BottomLeftControl }) end local shield = New("TextButton", "UserSettingsShield", { Text = "", Active = true, AutoButtonColor = false, Visible = false, Size = UDim2.new(1, 0, 1, 0), BackgroundColor3 = Color3I(51, 51, 51), BorderColor3 = Color3I(27, 42, 53), BackgroundTransparency = 0.4, ZIndex = baseZIndex + 2 }) mainShield = shield local frame = New("Frame", "Settings", { Position = UDim2.new(0.5, -262, -0.5, -200), Size = UDim2.new(0, 525, 0, 430), BackgroundTransparency = 1, Active = true, Parent = shield }) settingsFrame = New("Frame", "SettingsStyle", { Size = UDim2.new(1, 0, 1, 0), Style = Enum.FrameStyle.RobloxRound, Active = true, ZIndex = baseZIndex + 3, 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 not (currentMenuSelection ~= nil) then return game.GuiService:AddCenterDialog(shield, Enum.CenterDialogType.ModalDialog, function() settingsButton.Active = false updateCameraDropDownSelection(UserSettings().GameSettings.ControlMode.Name) if syncVideoCaptureSetting ~= nil 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 ~= nil 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 = New("TextButton", "SaveDialogShield", { Text = "", AutoButtonColor = false, Active = true, Visible = false, Size = UDim2.new(1, 0, 1, 0), BackgroundColor3 = Color3I(51, 51, 51), BorderColor3 = Color3I(27, 42, 53), BackgroundTransparency = 0.4, 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 = New("Frame", "SpinnerDialog", { Style = Enum.FrameStyle.RobloxRound, Size = UDim2.new(0, 350, 0, 150), Position = UDim2.new(0.5, -175, 0.5, -75), Visible = false, Active = true, Parent = shield, New("TextLabel", "WaitingLabel", { Text = "Saving to Mercury...", Font = Enum.Font.ArialBold, FontSize = Enum.FontSize.Size18, Position = UDim2.new(0.5, 25, 0.5, 0), TextColor3 = Color3.new(1, 1, 1) }) }) local spinnerFrame = New("Frame", "Spinner", { Size = UDim2.new(0, 80, 0, 80), Position = UDim2.new(0.5, -150, 0.5, -40), BackgroundTransparency = 1, Parent = spinnerDialog }) local spinnerIcons = { } local spinnerNum = 1 while spinnerNum <= 8 do local spinnerImage = New("ImageLabel", "Spinner" .. tostring(spinnerNum), { Size = UDim2.new(0, 16, 0, 16), 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), BackgroundTransparency = 1, Image = "http://www.roblox.com/Asset?id=45880710", 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 spinnerIcons[pos + 1].Image = "http://www.roblox.com/Asset?id=" .. (function() if pos == spinPos or pos == ((spinPos + 1) % 8) then return 45880668 else return 45880710 end 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 = New("TextButton", "ReportAbuseShield", { Text = "", AutoButtonColor = false, Active = true, Visible = false, Size = UDim2.new(1, 0, 1, 0), BackgroundColor3 = Color3I(51, 51, 51), BorderColor3 = Color3I(27, 42, 53), BackgroundTransparency = 0.4, 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 = New("Frame", "Settings", { Position = UDim2.new(0.5, -250, 0.5, -200), Size = UDim2.new(0, 500, 0, 400), BackgroundTransparency = 1, Active = true, Parent = shield }) settingsFrame = New("Frame", "ReportAbuseStyle", { Size = UDim2.new(1, 0, 1, 0), Style = Enum.FrameStyle.RobloxRound, Active = true, ZIndex = baseZIndex + 1, Parent = frame, New("TextLabel", "Title", { Text = "Report Abuse", TextColor3 = Color3I(221, 221, 221), Position = UDim2.new(0.5, 0, 0, 30), Font = Enum.Font.ArialBold, FontSize = Enum.FontSize.Size36, ZIndex = baseZIndex + 2 }), New("TextLabel", "Description", { Text = "This will send a complete report to a moderator. The moderator will review the chat log and take appropriate action.", TextColor3 = Color3I(221, 221, 221), Position = UDim2.new(0, 0, 0, 55), Size = UDim2.new(1, 0, 0, 40), BackgroundTransparency = 1, Font = Enum.Font.Arial, FontSize = Enum.FontSize.Size18, TextWrap = true, ZIndex = baseZIndex + 2, TextXAlignment = Enum.TextXAlignment.Left, TextYAlignment = Enum.TextYAlignment.Top }), New("TextLabel", "PlayerLabel", { Text = "Which player?", BackgroundTransparency = 1, Font = Enum.Font.Arial, FontSize = Enum.FontSize.Size18, Position = UDim2.new(0.025, 0, 0, 100), Size = UDim2.new(0.4, 0, 0, 36), TextColor3 = Color3I(255, 255, 255), TextXAlignment = Enum.TextXAlignment.Left, ZIndex = baseZIndex + 2 }), New("TextLabel", "AbuseLabel", { Text = "Type of Abuse:", Font = Enum.Font.Arial, BackgroundTransparency = 1, FontSize = Enum.FontSize.Size18, Position = UDim2.new(0.025, 0, 0, 140), Size = UDim2.new(0.4, 0, 0, 36), TextColor3 = Color3I(255, 255, 255), TextXAlignment = Enum.TextXAlignment.Left, ZIndex = baseZIndex + 2 }) }) local abusingPlayer, abuse, 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 abuses = { "Swearing", "Bullying", "Scamming", "Dating", "Cheating/Exploiting", "Personal Questions", "Offsite Links", "Bad Model or Script", "Bad Username" } local abuseDropDown, updateAbuseSelection 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 New("TextLabel", "ShortDescriptionLabel", { Text = "Short Description: (optional)", Font = Enum.Font.Arial, FontSize = Enum.FontSize.Size18, Position = UDim2.new(0.025, 0, 0, 180), Size = UDim2.new(0.95, 0, 0, 36), TextColor3 = Color3I(255, 255, 255), TextXAlignment = Enum.TextXAlignment.Left, BackgroundTransparency = 1, ZIndex = baseZIndex + 2, Parent = settingsFrame }) local shortDescriptionWrapper = New("Frame", "ShortDescriptionWrapper", { Position = UDim2.new(0.025, 0, 0, 220), Size = UDim2.new(0.95, 0, 1, -310), BackgroundColor3 = Color3I(0, 0, 0), BorderSizePixel = 0, ZIndex = baseZIndex + 2, Parent = settingsFrame }) local shortDescriptionBox = New("TextBox", "TextBox", { Text = "", ClearTextOnFocus = false, Font = Enum.Font.Arial, FontSize = Enum.FontSize.Size18, Position = UDim2.new(0, 3, 0, 3), Size = UDim2.new(1, -6, 1, -6), TextColor3 = Color3I(255, 255, 255), TextXAlignment = Enum.TextXAlignment.Left, TextYAlignment = Enum.TextYAlignment.Top, TextWrap = true, BackgroundColor3 = Color3I(0, 0, 0), BorderSizePixel = 0, ZIndex = baseZIndex + 2, Parent = shortDescriptionWrapper }) submitReportButton = New("TextButton", "SubmitReportBtn", { Active = false, Modal = true, Font = Enum.Font.Arial, FontSize = Enum.FontSize.Size18, Position = UDim2.new(0.1, 0, 1, -80), Size = UDim2.new(0.35, 0, 0, 50), AutoButtonColor = true, Style = Enum.ButtonStyle.RobloxButtonDefault, Text = "Submit Report", TextColor3 = Color3I(255, 255, 255), ZIndex = baseZIndex + 2, 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 = New("TextButton", "CancelBtn", { Font = Enum.Font.Arial, FontSize = Enum.FontSize.Size18, Position = UDim2.new(0.55, 0, 1, -80), Size = UDim2.new(0.35, 0, 0, 50), AutoButtonColor = true, Style = Enum.ButtonStyle.RobloxButtonDefault, Text = "Cancel", TextColor3 = Color3I(255, 255, 255), ZIndex = baseZIndex + 2, 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