import "macros" as { $ } $load $FILE -- Heliodex's basic New function (basically a simplified version of melt) New = (className, name, props) -> if not props? -- no name was provided props = name name = nil obj = Instance.new className obj.Name = name if name local parent for k, v in pairs props if type(k) == "string" then if k == "Parent" parent = v else obj[k] = v elseif type(k) == "number" and type(v) == "userdata" v.Parent = obj obj.Parent = parent obj -- waitForChild = (instance, name) -> until instance\FindFirstChild name instance.ChildAdded\wait! waitForProperty = (instance, property) -> until instance[property] instance.Changed\wait! -- A Few Script Globals gui = if script.Parent\FindFirstChild "ControlFrame" script.Parent\FindFirstChild "ControlFrame" else script.Parent local helpButton local updateCameraDropDownSelection local updateVideoCaptureDropDownSelection tweenTime = 0.2 mouseLockLookScreenUrl = "http://www.roblox.com/asset?id=54071825" classicLookScreenUrl = "http://www.roblox.com/Asset?id=45915798" hasGraphicsSlider = game\GetService"CoreGui".Version >= 5 GraphicsQualityLevels = 10 -- how many levels we allow on graphics slider recordingVideo = false local currentMenuSelection lastMenuSelection = {} -- defaultPosition = UDim2.new 0, 0, 0, 0 -- newGuiPlaces = { 0, 41324860 } centerDialogs = {} local mainShield inStudioMode = UserSettings!.GameSettings\InStudioMode! macClient = false local success, isMac = try not game.GuiService.IsWindows macClient = success and isMac Color3I = (r, g, b) -> Color3.new r / 255, g / 255, b / 255 robloxLock = (instance) -> instance.RobloxLocked = true children = instance\GetChildren! if children for _, child in ipairs children robloxLock child resumeGameFunction = (shield) -> shield.Settings\TweenPosition( UDim2.new(0.5, -262, -0.5, -200), Enum.EasingDirection.InOut, Enum.EasingStyle.Sine, tweenTime, true ) delay tweenTime, -> shield.Visible = false for i = 1, #centerDialogs centerDialogs[i].Visible = false game.GuiService\RemoveCenterDialog centerDialogs[i] game.GuiService\RemoveCenterDialog shield settingsButton.Active = true currentMenuSelection = nil lastMenuSelection = {} goToMenu = (container, menuName, moveDirection, size, position) -> return if type(menuName) ~= "string" table.insert(lastMenuSelection, currentMenuSelection) if menuName == "GameMainMenu" lastMenuSelection = {} containerChildren = container\GetChildren! for i = 1, #containerChildren if containerChildren[i].Name == menuName containerChildren[i].Visible = true currentMenuSelection = container: container name: menuName direction: moveDirection lastSize: size -- selectedMenu = true if size and position containerChildren[i]\TweenSizeAndPosition( size, position, Enum.EasingDirection.InOut, Enum.EasingStyle.Sine, tweenTime, true ) elseif size 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 ) else if moveDirection == "left" containerChildren[i]\TweenPosition( UDim2.new(-1, -525, 0, 0), Enum.EasingDirection.InOut, Enum.EasingStyle.Sine, tweenTime, true ) elseif moveDirection == "right" containerChildren[i]\TweenPosition( UDim2.new(1, 525, 0, 0), Enum.EasingDirection.InOut, Enum.EasingStyle.Sine, tweenTime, true ) elseif moveDirection == "up" containerChildren[i]\TweenPosition( UDim2.new(0, 0, -1, -400), Enum.EasingDirection.InOut, Enum.EasingStyle.Sine, tweenTime, true ) elseif moveDirection == "down" containerChildren[i]\TweenPosition( UDim2.new(0, 0, 1, 400), Enum.EasingDirection.InOut, Enum.EasingStyle.Sine, tweenTime, true ) delay tweenTime, -> containerChildren[i].Visible = false resetLocalCharacter = -> player = game.Players.LocalPlayer if player and player.Character and player.Character\FindFirstChild "Humanoid" player.Character.Humanoid.Health = 0 createTextButton = (text, style, fontSize, buttonSize, buttonPosition) -> 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 newTextButton CreateTextButtons = (frame, buttons, yPos, ySize) -> if #buttons < 1 error "Must have more than one button" buttonNum = 1 buttonObjs = {} toggleSelection = (button) -> for _, obj in ipairs buttonObjs obj.Style = if obj == button Enum.ButtonStyle.RobloxButtonDefault else Enum.ButtonStyle.RobloxButton for _, obj in ipairs buttons button = New "TextButton", "Button#{buttonNum}" Font: Enum.Font.Arial FontSize: Enum.FontSize.Size18 AutoButtonColor: true Style: Enum.ButtonStyle.RobloxButton Text: obj.Text TextColor3: Color3.new 1, 1, 1 Parent: frame button.MouseButton1Click\connect -> toggleSelection button obj.Function! buttonObjs[buttonNum] = button buttonNum += 1 toggleSelection(buttonObjs[1]) numButtons = buttonNum - 1 if numButtons == 1 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 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 spacing = 0.1 / numButtons buttonSize = 0.9 / numButtons buttonNum = 1 while buttonNum <= numButtons 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 += 1 setRecordGui = (recording, stopRecordButton, recordVideoButton) -> if recording stopRecordButton.Visible = true recordVideoButton.Text = "Stop Recording" else stopRecordButton.Visible = false recordVideoButton.Text = "Record Video" recordVideoClick = (recordVideoButton, stopRecordButton) -> recordingVideo = not recordingVideo setRecordGui recordingVideo, stopRecordButton, recordVideoButton backToGame = (buttonClicked, shield, settingsButton) -> buttonClicked.Parent.Parent.Parent.Parent.Visible = false shield.Visible = false for i = 1, #centerDialogs game.GuiService\RemoveCenterDialog centerDialogs[i] centerDialogs[i].Visible = false centerDialogs = {} game.GuiService\RemoveCenterDialog shield settingsButton.Active = true setDisabledState = (guiObject) -> return if not guiObject if guiObject\IsA "TextLabel" guiObject.TextTransparency = 0.9 elseif guiObject\IsA "TextButton" guiObject.TextTransparency = 0.9 guiObject.Active = false else if guiObject["ClassName"] print("setDisabledState! got object of unsupported type. object type is ", guiObject.ClassName) createHelpDialog = (baseZIndex) -> if helpButton == nil helpButton = if gui\FindFirstChild "TopLeftControl" and gui.TopLeftControl\FindFirstChild "Help" gui.TopLeftControl.Help elseif gui\FindFirstChild "BottomRightControl" and gui.BottomRightControl\FindFirstChild "Help" gui.BottomRightControl.Help 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 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 * New "Frame", "Buttons" Position: UDim2.new 0.1, 0, 0.07, 40 Size: UDim2.new 0.8, 0, 0, 45 BackgroundTransparency: 1 * New "Frame", "ImageFrame" Position: UDim2.new 0.05, 0, 0.075, 80 Size: UDim2.new 0.9, 0, 0.9, -120 BackgroundTransparency: 1 * 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 * New "ImageLabel", "Image" Image: if UserSettings!.GameSettings.ControlMode == Enum.ControlMode["Mouse Lock Switch"] mouseLockLookScreenUrl else classicLookScreenUrl Position: UDim2.new -0.5, 0, 0, 0 Size: UDim2.new 1, 0, 1, 0 BackgroundTransparency: 1 { Buttons: buttonRow ImageFrame: LayoutFrame: Image: image } = helpDialog buttons = {} buttons[1] = {} buttons[1].Text = "Look" buttons[1].Function = -> image.Image = if UserSettings!.GameSettings.ControlMode == Enum.ControlMode["Mouse Lock Switch"] mouseLockLookScreenUrl else classicLookScreenUrl buttons[2] = {} buttons[2].Text = "Move" buttons[2].Function = -> image.Image = "http://www.roblox.com/Asset?id=45915811" buttons[3] = {} buttons[3].Text = "Gear" buttons[3].Function = -> image.Image = "http://www.roblox.com/Asset?id=45917596" buttons[4] = {} buttons[4].Text = "Zoom" buttons[4].Function = -> image.Image = "http://www.roblox.com/Asset?id=45915825" CreateTextButtons buttonRow, buttons, UDim.new(0, 0), UDim.new 1, 0 -- set up listeners for type of mouse mode, but keep constructing gui at same time delay 0, -> 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" gui.UserSettingsShield.Settings.SettingsStyle.GameSettingsMenu.CameraField.DropDownMenuButton.Changed \connect (prop) -> return if prop ~= "Text" if buttonRow.Button1.Style == Enum.ButtonStyle.RobloxButtonDefault -- only change if this is the currently selected panel image.Image = if gui.UserSettingsShield.Settings.SettingsStyle.GameSettingsMenu.CameraField.DropDownMenuButton.Text == "Classic" classicLookScreenUrl else mouseLockLookScreenUrl 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 -> shield.Visible = false game.GuiService\RemoveCenterDialog shield robloxLock shield shield createLeaveConfirmationMenu = (baseZIndex, shield) -> 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 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" 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 -> goToMenu shield.Settings.SettingsStyle, "GameMainMenu", "down", UDim2.new 0, 525, 0, 430 shield.Settings\TweenSize( UDim2.new(0, 525, 0, 430), Enum.EasingDirection.InOut, Enum.EasingStyle.Sine, tweenTime, true ) frame createResetConfirmationMenu = (baseZIndex, shield) -> frame = New "Frame", "ResetConfirmationMenu" BackgroundTransparency: 1 Size: UDim2.new 1, 0, 1, 0 Position: UDim2.new 0, 0, 2, 400 ZIndex: baseZIndex + 4 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 -> resumeGameFunction shield resetLocalCharacter! 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 -> goToMenu shield.Settings.SettingsStyle, "GameMainMenu", "down", UDim2.new 0, 525, 0, 430 shield.Settings\TweenSize( UDim2.new(0, 525, 0, 430), Enum.EasingDirection.InOut, Enum.EasingStyle.Sine, tweenTime, true ) 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 with resetCharacterText\Clone! .Name = "FineResetCharacterText" .Text = "You will be put back on a spawn point" .Size = UDim2.new 0, 303, 0, 18 .Position = UDim2.new 0, 109, 0, 215 .FontSize = Enum.FontSize.Size18 .Parent = frame frame createGameMainMenu = (baseZIndex, shield) -> 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 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 helpDialog = createHelpDialog baseZIndex helpDialog.Parent = gui helpButton.MouseButton1Click\connect -> table.insert centerDialogs, helpDialog game.GuiService\AddCenterDialog( helpDialog, Enum.CenterDialogType.ModalDialog, --ShowFunction -> helpDialog.Visible = true mainShield.Visible = false --HideFunction -> helpDialog.Visible = false ) helpButton.Active = true 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 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" with helpShortcut\clone! .Name = "ScreenshotShortcutText" .Text = "PrintSc" .Position = UDim2.new 0, 118, 0, 0 .Visible = true .Parent = screenshotButton 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" with helpShortcut\clone! .Visible = hasGraphicsSlider .Name = "RecordVideoShortcutText" .Text = "F12" .Position = UDim2.new 0, 120, 0, 0 .Parent = recordVideoButton 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 -> recordVideoClick recordVideoButton, stopRecordButton stopRecordButton.Visible = false stopRecordButton.Parent = gui 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 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 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 -> resumeGameFunction(shield) 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 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 -> if game\FindFirstChild "Players" and game.Players["LocalPlayer"] loadingGui = game.Players.LocalPlayer\FindFirstChild "PlayerLoadingGui" if loadingGui loadingGui.Visible = true 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 gameMainMenuFrame createGameSettingsMenu = (baseZIndex, _) -> 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 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 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 studioShortcut = fullscreenShortcut\clone! with studioShortcut .Name = "StudioShortcutText" .Visible = false -- TODO: turn back on when f2 hack is fixed .Text = "F2" .Position = UDim2.new 0, 154, 0, 175 .Parent = gameSettingsMenuFrame local studioCheckbox if hasGraphicsSlider 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 autoText = qualityText\clone! with autoText .Name = "AutoText" .Text = "Auto" .Position = UDim2.new 0, 183, 0, 214 .TextColor3 = Color3.new 128 / 255, 128 / 255, 128 / 255 .Size = UDim2.new 0, 34, 0, 18 .Parent = gameSettingsMenuFrame .Visible = not inStudioMode fasterText = autoText\clone! with fasterText .Name = "FasterText" .Text = "Faster" .Position = UDim2.new 0, 185, 0, 274 .TextColor3 = Color3.new 95, 95, 95 .FontSize = Enum.FontSize.Size14 .Parent = gameSettingsMenuFrame .Visible = not inStudioMode fasterShortcut = fullscreenShortcut\clone! with fasterShortcut .Name = "FasterShortcutText" .Text = "F10 + Shift" .Position = UDim2.new 0, 185, 0, 283 .Parent = gameSettingsMenuFrame .Visible = not inStudioMode betterQualityText = autoText\clone! with betterQualityText .Name = "BetterQualityText" .Text = "Better Quality" .TextWrap = true .Size = UDim2.new 0, 41, 0, 28 .Position = UDim2.new 0, 390, 0, 269 .TextColor3 = Color3.new 95, 95, 95 .FontSize = Enum.FontSize.Size14 .Parent = gameSettingsMenuFrame .Visible = not inStudioMode betterQualityShortcut = fullscreenShortcut\clone! with betterQualityShortcut .Name = "BetterQualityShortcut" .Text = "F10" .Position = UDim2.new 0, 394, 0, 288 .Parent = gameSettingsMenuFrame .Visible = not inStudioMode 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 graphicsSlider, graphicsLevel = RbxGui.CreateSlider GraphicsQualityLevels, 150, UDim2.new 0, 230, 0, 280 -- graphics - 1 because slider starts at 1 instead of 0 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 graphicsSetter = New "TextBox", "GraphicsSetter" BackgroundColor3: Color3.new 0, 0, 0 BorderColor3: Color3.new 128 / 255, 128 / 255, 128 / 255 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 isAutoGraphics = true if not inStudioMode isAutoGraphics = (UserSettings!.GameSettings.SavedQualityLevel == Enum.SavedQualitySetting.Automatic) else settings!.Rendering.EnableFRM = false listenToGraphicsLevelChange = true setAutoGraphicsGui = (active) -> isAutoGraphics = active if active 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 goToAutoGraphics = -> setAutoGraphicsGui(true) UserSettings!.GameSettings.SavedQualityLevel = Enum.SavedQualitySetting.Automatic settings!.Rendering.QualityLevel = Enum.QualityLevel.Automatic setGraphicsQualityLevel = (newLevel) -> percentage = newLevel / GraphicsQualityLevels newSetting = math.floor((settings!.Rendering\GetMaxQualityLevel! - 1) * percentage) if newSetting == 20 -- Level 20 is the same as level 21, except it doesn't render ambient occlusion newSetting = 21 elseif newLevel == 1 -- make sure we can go to lowest settings (for terrible computers) newSetting = 1 elseif newSetting > settings!.Rendering\GetMaxQualityLevel! newSetting = settings!.Rendering\GetMaxQualityLevel! - 1 UserSettings!.GameSettings.SavedQualityLevel = newLevel settings!.Rendering.QualityLevel = newSetting goToManualGraphics = (explicitLevel) -> setAutoGraphicsGui(false) if explicitLevel graphicsLevel.Value = explicitLevel else graphicsLevel.Value = math.floor( (settings!.Rendering.AutoFRMLevel / (settings!.Rendering\GetMaxQualityLevel! - 1)) * GraphicsQualityLevels ) if explicitLevel == graphicsLevel.Value -- make sure we are actually in right graphics mode setGraphicsQualityLevel(graphicsLevel.Value) if not explicitLevel UserSettings!.GameSettings.SavedQualityLevel = graphicsLevel.Value graphicsSetter.Text = "#{graphicsLevel.Value}" showAutoGraphics = -> autoText.ZIndex = baseZIndex + 4 autoGraphicsButton.ZIndex = baseZIndex + 4 hideAutoGraphics = -> autoText.ZIndex = 1 autoGraphicsButton.ZIndex = 1 showManualGraphics = -> 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 hideManualGraphics = -> betterQualityText.ZIndex = 1 betterQualityShortcut.ZIndex = 1 fasterShortcut.ZIndex = 1 fasterText.ZIndex = 1 graphicsSlider.Bar.ZIndex = 1 graphicsSlider.Bar.Slider.ZIndex = 1 graphicsSetter.ZIndex = 1 translateSavedQualityLevelToInt = (savedQualityLevel) -> switch savedQualityLevel when Enum.SavedQualitySetting.Automatic then 0 when Enum.SavedQualitySetting.QualityLevel1 then 1 when Enum.SavedQualitySetting.QualityLevel2 then 2 when Enum.SavedQualitySetting.QualityLevel3 then 3 when Enum.SavedQualitySetting.QualityLevel4 then 4 when Enum.SavedQualitySetting.QualityLevel5 then 5 when Enum.SavedQualitySetting.QualityLevel6 then 6 when Enum.SavedQualitySetting.QualityLevel7 then 7 when Enum.SavedQualitySetting.QualityLevel8 then 8 when Enum.SavedQualitySetting.QualityLevel9 then 9 when Enum.SavedQualitySetting.QualityLevel10 then 10 enableGraphicsWidget = -> settings!.Rendering.EnableFRM = true isAutoGraphics = UserSettings!.GameSettings.SavedQualityLevel == Enum.SavedQualitySetting.Automatic if isAutoGraphics showAutoGraphics! goToAutoGraphics! else showAutoGraphics! showManualGraphics! goToManualGraphics translateSavedQualityLevelToInt UserSettings!.GameSettings.SavedQualityLevel disableGraphicsWidget = -> hideManualGraphics! hideAutoGraphics! settings!.Rendering.EnableFRM = false graphicsSetter.FocusLost\connect -> if isAutoGraphics graphicsSetter.Text = "#{graphicsLevel.Value}" return newGraphicsValue = tonumber graphicsSetter.Text if newGraphicsValue == nil graphicsSetter.Text = "#{graphicsLevel.Value}" return if newGraphicsValue < 1 newGraphicsValue = 1 elseif newGraphicsValue >= settings!.Rendering\GetMaxQualityLevel! newGraphicsValue = settings!.Rendering\GetMaxQualityLevel! - 1 graphicsLevel.Value = newGraphicsValue setGraphicsQualityLevel graphicsLevel.Value graphicsSetter.Text = "#{graphicsLevel.Value}" graphicsLevel.Changed\connect (_) -> return if isAutoGraphics return if not listenToGraphicsLevelChange graphicsSetter.Text = "#{graphicsLevel.Value}" setGraphicsQualityLevel graphicsLevel.Value -- setup our graphic mode on load if inStudioMode or UserSettings!.GameSettings.SavedQualityLevel == Enum.SavedQualitySetting.Automatic if inStudioMode settings!.Rendering.EnableFRM = false disableGraphicsWidget! else settings!.Rendering.EnableFRM = true goToAutoGraphics! else settings!.Rendering.EnableFRM = true goToManualGraphics translateSavedQualityLevelToInt UserSettings!.GameSettings.SavedQualityLevel autoGraphicsButton.MouseButton1Click\connect -> return if inStudioMode and not game.Players.LocalPlayer if not isAutoGraphics goToAutoGraphics! else goToManualGraphics graphicsLevel.Value game.GraphicsQualityChangeRequest\connect (graphicsIncrease) -> return if isAutoGraphics -- only can set graphics in manual mode if graphicsIncrease return if (graphicsLevel.Value + 1) > GraphicsQualityLevels graphicsLevel.Value = graphicsLevel.Value + 1 graphicsSetter.Text = "#{graphicsLevel.Value}" setGraphicsQualityLevel graphicsLevel.Value game\GetService"GuiService"\SendNotification( "Graphics Quality", "Increased to (#{graphicsSetter.Text})", "", 2, -> ) else return if (graphicsLevel.Value - 1) <= 0 graphicsLevel.Value = graphicsLevel.Value - 1 graphicsSetter.Text = "#{graphicsLevel.Value}" setGraphicsQualityLevel graphicsLevel.Value game\GetService"GuiService"\SendNotification( "Graphics Quality", "Decreased to (#{graphicsSetter.Text})", "", 2, -> ) game.Players.PlayerAdded\connect (player) -> if player == game.Players.LocalPlayer and inStudioMode enableGraphicsWidget! game.Players.PlayerRemoving\connect (player) -> if player == game.Players.LocalPlayer and inStudioMode disableGraphicsWidget! 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.Parent = gameSettingsMenuFrame -- todo: enable when studio h4x aren't an issue anymore studioCheckbox\SetVerb "TogglePlayMode" studioCheckbox.Visible = false -- todo: enabled when studio h4x aren't an issue anymore wasManualGraphics = (settings!.Rendering.QualityLevel ~= Enum.QualityLevel.Automatic) if inStudioMode and not game.Players.LocalPlayer studioCheckbox.Text = "X" disableGraphicsWidget! elseif inStudioMode studioCheckbox.Text = "X" enableGraphicsWidget! if hasGraphicsSlider UserSettings!.GameSettings.StudioModeChanged\connect (isStudioMode) -> inStudioMode = isStudioMode if isStudioMode wasManualGraphics = (settings!.Rendering.QualityLevel ~= Enum.QualityLevel.Automatic) goToAutoGraphics! studioCheckbox.Text = "X" autoGraphicsButton.ZIndex = 1 autoText.ZIndex = 1 else if wasManualGraphics goToManualGraphics! studioCheckbox.Text = "" autoGraphicsButton.ZIndex = baseZIndex + 4 autoText.ZIndex = baseZIndex + 4 else studioCheckbox.MouseButton1Click\connect -> return if not studioCheckbox.Active studioCheckbox.Text = if studioCheckbox.Text == "" "X" else "" 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! fullscreenCheckbox.Text = "X" if hasGraphicsSlider UserSettings!.GameSettings.FullscreenChanged\connect (isFullscreen) -> fullscreenCheckbox.Text = if isFullscreen "X" else "" else fullscreenCheckbox.MouseButton1Click\connect -> fullscreenCheckbox.Text = if fullscreenCheckbox.Text == "" "X" else "" if game\FindFirstChild "NetworkClient" -- we are playing online setDisabledState studioText setDisabledState studioShortcut setDisabledState studioCheckbox local backButton if hasGraphicsSlider 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 backButton.Name = "BackButton" backButton.ZIndex = baseZIndex + 4 backButton.Parent = gameSettingsMenuFrame global syncVideoCaptureSetting = nil if not macClient 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 videoNames = {} 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, (text) -> UserSettings!.GameSettings.VideoUploadPromptBehavior = videoNameToItem[text] with videoCaptureDropDown .Name = "VideoCaptureField" .ZIndex = baseZIndex + 4 .DropDownMenuButton.ZIndex = baseZIndex + 4 .DropDownMenuButton.Icon.ZIndex = baseZIndex + 4 .Position = UDim2.new 0, 270, 0, 94 .Size = UDim2.new 0, 200, 0, 32 .Parent = gameSettingsMenuFrame syncVideoCaptureSetting = -> updateVideoCaptureDropDownSelection if UserSettings!.GameSettings.VideoUploadPromptBehavior == Enum.UploadSetting["Never"] videoNames[1] elseif UserSettings!.GameSettings.VideoUploadPromptBehavior == Enum.UploadSetting["Ask me first"] videoNames[2] else UserSettings!.GameSettings.VideoUploadPromptBehavior = Enum.UploadSetting["Ask me first"] videoNames[2] 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 enumItems = Enum.ControlMode\GetEnumItems! enumNames = {} enumNameToItem = {} for i, obj in ipairs enumItems enumNames[i] = obj.Name enumNameToItem[obj.Name] = obj local cameraDropDown cameraDropDown, updateCameraDropDownSelection = RbxGui.CreateDropDownMenu enumNames, (text) -> UserSettings!.GameSettings.ControlMode = enumNameToItem[text] try mouseLockLabel.Visible = if mouseLockLabel and UserSettings!.GameSettings.ControlMode == Enum.ControlMode["Mouse Lock Switch"] true elseif mouseLockLabel false with cameraDropDown .Name = "CameraField" .ZIndex = baseZIndex + 4 .DropDownMenuButton.ZIndex = baseZIndex + 4 .DropDownMenuButton.Icon.ZIndex = baseZIndex + 4 .Position = UDim2.new 0, 270, 0, 52 .Size = UDim2.new 0, 200, 0, 32 .Parent = gameSettingsMenuFrame gameSettingsMenuFrame if LoadLibrary global RbxGui = LoadLibrary "RbxGui" baseZIndex = 0 if UserSettings createSettingsDialog = -> waitForChild gui, "BottomLeftControl" global settingsButton = gui.BottomLeftControl\FindFirstChild "SettingsButton" if settingsButton == nil 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 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 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 gameMainMenu = createGameMainMenu baseZIndex, shield gameMainMenu.Parent = settingsFrame gameMainMenu.ScreenshotButton.MouseButton1Click\connect -> backToGame gameMainMenu.ScreenshotButton, shield, settingsButton gameMainMenu.RecordVideoButton.MouseButton1Click\connect -> recordVideoClick gameMainMenu.RecordVideoButton, gui.StopRecordButton backToGame gameMainMenu.RecordVideoButton, shield, settingsButton if settings!\FindFirstChild "Game Options" try settings!\FindFirstChild"Game Options".VideoRecordingChangeRequest\connect (recording) -> recordingVideo = recording setRecordGui recording, gui.StopRecordButton, gameMainMenu.RecordVideoButton game.CoreGui.RobloxGui.Changed\connect (prop) -> -- We have stopped recording when we resize if prop == "AbsoluteSize" and recordingVideo recordVideoClick gameMainMenu.RecordVideoButton, gui.StopRecordButton localPlayerChange = -> gameMainMenu.ResetButton.Visible = game.Players.LocalPlayer if game.Players.LocalPlayer settings!.Rendering.EnableFRM = true elseif inStudioMode settings!.Rendering.EnableFRM = false gameMainMenu.ResetButton.Visible = game.Players.LocalPlayer if game.Players.LocalPlayer? game.Players.LocalPlayer.Changed\connect -> localPlayerChange! else delay 0, -> waitForProperty game.Players, "LocalPlayer" gameMainMenu.ResetButton.Visible = game.Players.LocalPlayer game.Players.LocalPlayer.Changed\connect -> localPlayerChange! gameMainMenu.ReportAbuseButton.Visible = game\FindFirstChild "NetworkClient" if not gameMainMenu.ReportAbuseButton.Visible game.ChildAdded\connect (child) -> if child\IsA "NetworkClient" gameMainMenu.ReportAbuseButton.Visible = game\FindFirstChild "NetworkClient" gameMainMenu.ResetButton.MouseButton1Click\connect -> goToMenu settingsFrame, "ResetConfirmationMenu", "up", UDim2.new 0, 525, 0, 370 gameMainMenu.LeaveGameButton.MouseButton1Click\connect -> goToMenu settingsFrame, "LeaveConfirmationMenu", "down", UDim2.new 0, 525, 0, 300 if game.CoreGui.Version >= 4 then -- we can use escape! game\GetService"GuiService".EscapeKeyPressed\connect -> if currentMenuSelection == nil game.GuiService\AddCenterDialog( shield, Enum.CenterDialogType.ModalDialog, --showFunction -> settingsButton.Active = false updateCameraDropDownSelection(UserSettings!.GameSettings.ControlMode.Name) if syncVideoCaptureSetting syncVideoCaptureSetting! 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 ) settingsFrame.Parent\TweenSize( UDim2.new(0, 525, 0, 430), Enum.EasingDirection.InOut, Enum.EasingStyle.Sine, tweenTime, true ) --hideFunction -> 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 ) elseif #lastMenuSelection > 0 if #centerDialogs > 0 for i = 1, #centerDialogs game.GuiService\RemoveCenterDialog centerDialogs[i] centerDialogs[i].Visible = false centerDialogs = {} goToMenu( lastMenuSelection[#lastMenuSelection]["container"], lastMenuSelection[#lastMenuSelection]["name"], lastMenuSelection[#lastMenuSelection]["direction"], lastMenuSelection[#lastMenuSelection]["lastSize"] ) table.remove lastMenuSelection, #lastMenuSelection if #lastMenuSelection == 1 then -- apparently lua can't reduce count to 0... T_T lastMenuSelection = {} else resumeGameFunction shield gameSettingsMenu = createGameSettingsMenu(baseZIndex, shield) gameSettingsMenu.Visible = false gameSettingsMenu.Parent = settingsFrame gameMainMenu.SettingsButton.MouseButton1Click\connect -> goToMenu settingsFrame, "GameSettingsMenu", "left", UDim2.new 0, 525, 0, 350 gameSettingsMenu.BackButton.MouseButton1Click\connect -> goToMenu settingsFrame, "GameMainMenu", "right", UDim2.new 0, 525, 0, 430 resetConfirmationWindow = createResetConfirmationMenu baseZIndex, shield resetConfirmationWindow.Visible = false resetConfirmationWindow.Parent = settingsFrame leaveConfirmationWindow = createLeaveConfirmationMenu baseZIndex, shield leaveConfirmationWindow.Visible = false leaveConfirmationWindow.Parent = settingsFrame robloxLock shield settingsButton.MouseButton1Click\connect -> game.GuiService\AddCenterDialog( shield, Enum.CenterDialogType.ModalDialog, --showFunction -> settingsButton.Active = false updateCameraDropDownSelection UserSettings!.GameSettings.ControlMode.Name if syncVideoCaptureSetting syncVideoCaptureSetting! 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 ) settingsFrame.Parent\TweenSize( UDim2.new(0, 525, 0, 430), Enum.EasingDirection.InOut, Enum.EasingStyle.Sine, tweenTime, true ) --hideFunction -> 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 ) shield delay 0, -> createSettingsDialog!.Parent = gui gui.BottomLeftControl.SettingsButton.Active = true gui.BottomLeftControl.SettingsButton.Position = UDim2.new 0, 2, 0, -2 mouseLockLabel.Visible = if mouseLockLabel and UserSettings!.GameSettings.ControlMode == Enum.ControlMode["Mouse Lock Switch"] true elseif mouseLockLabel false -- our script has loaded, get rid of older buttons now leaveGameButton = gui.BottomLeftControl\FindFirstChild "Exit" leaveGameButton?\Remove! topLeft = gui\FindFirstChild "TopLeftControl" if topLeft leaveGameButton = topLeft\FindFirstChild "Exit" leaveGameButton?\Remove! topLeft\Remove! --UserSettings call createSaveDialogs = -> 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 messageBoxButtons = {} messageBoxButtons[1] = {} messageBoxButtons[1].Text = "Save" messageBoxButtons[1].Style = Enum.ButtonStyle.RobloxButtonDefault messageBoxButtons[1].Function = -> save! messageBoxButtons[2] = {} messageBoxButtons[2].Text = "Cancel" messageBoxButtons[2].Function = -> cancel! messageBoxButtons[3] = {} messageBoxButtons[3].Text = "Don't Save" messageBoxButtons[3].Function = -> dontSave! saveDialogMessageBox = RbxGui.CreateStyledMessageDialog( "Unsaved Changes", "Save your changes to Mercury before leaving?", "Confirm", messageBoxButtons ) saveDialogMessageBox.Visible = true saveDialogMessageBox.Parent = shield errorBoxButtons = {} buttonOffset = 1 if game.LocalSaveEnabled errorBoxButtons[buttonOffset] = {} errorBoxButtons[buttonOffset].Text = "Save to Disk" errorBoxButtons[buttonOffset].Function = -> saveLocal! buttonOffset += 1 errorBoxButtons[buttonOffset] = {} errorBoxButtons[buttonOffset].Text = "Keep Playing" errorBoxButtons[buttonOffset].Function = -> cancel! errorBoxButtons[buttonOffset + 1] = {} errorBoxButtons[buttonOffset + 1].Text = "Don't Save" errorBoxButtons[buttonOffset + 1].Function = -> dontSave! errorDialogMessageBox = RbxGui.CreateStyledMessageDialog( "Upload Failed", "Sorry, we could not save your changes to Mercury.", "Error", errorBoxButtons ) errorDialogMessageBox.Visible = false errorDialogMessageBox.Parent = shield 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 spinnerFrame = New "Frame", "Spinner" Size: UDim2.new 0, 80, 0, 80 Position: UDim2.new 0.5, -150, 0.5, -40 BackgroundTransparency: 1 Parent: spinnerDialog spinnerIcons = {} spinnerNum = 1 while spinnerNum <= 8 spinnerImage = New "ImageLabel", "Spinner#{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 += 1 save = -> saveDialogMessageBox.Visible = false --Show the spinner dialog spinnerDialog.Visible = true spin = true --Make it spin delay 0, -> spinPos = 0 while spin pos = 0 while pos < 8 spinnerIcons[pos + 1].Image = if pos == spinPos or pos == ((spinPos + 1) % 8) "http://www.roblox.com/Asset?id=45880668" else "http://www.roblox.com/Asset?id=45880710" pos += 1 spinPos = (spinPos + 1) % 8 wait 0.2 --Do the save while the spinner is going, function will wait result = game\SaveToRoblox! if not result --Try once more result = game\SaveToRoblox! --Hide the spinner dialog spinnerDialog.Visible = false --And cause the delay thread to stop spin = false --Now process the result if result --Success, close game\FinishShutdown false clearAndResetDialog! else --Failure, show the second dialog prompt errorDialogMessageBox.Visible = true saveLocal = -> errorDialogMessageBox.Visible = false game\FinishShutdown true clearAndResetDialog! dontSave = -> saveDialogMessageBox.Visible = false errorDialogMessageBox.Visible = false game\FinishShutdown false clearAndResetDialog! cancel = -> saveDialogMessageBox.Visible = false errorDialogMessageBox.Visible = false clearAndResetDialog! clearAndResetDialog = -> saveDialogMessageBox.Visible = true errorDialogMessageBox.Visible = false spinnerDialog.Visible = false shield.Visible = false game.GuiService\RemoveCenterDialog shield robloxLock shield shield.Visible = false shield createReportAbuseDialog = -> --Only show things if we are a NetworkClient waitForChild game, "NetworkClient" waitForChild game, "Players" waitForProperty game.Players, "LocalPlayer" 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 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 messageBoxButtons = {} messageBoxButtons[1] = {} messageBoxButtons[1].Text = "Ok" messageBoxButtons[1].Modal = true messageBoxButtons[1].Function = -> closeAndResetDialog! 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 recordedMessageBox = RbxGui.CreateMessageDialog( "Thanks for your report!", "We've recorded your report for evaluation.", messageBoxButtons ) recordedMessageBox.Visible = false recordedMessageBox.Parent = shield 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 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 local abuse local submitReportButton local updatePlayerSelection createPlayersDropDown = -> players = game\GetService "Players" playerNames = {} nameToPlayer = {} children = players\GetChildren! pos = 1 if children for _, player in ipairs children if player\IsA"Player" and player ~= localPlayer playerNames[pos] = player.Name nameToPlayer[player.Name] = player pos += 1 local playerDropDown playerDropDown, updatePlayerSelection = RbxGui.CreateDropDownMenu playerNames, (playerName) -> abusingPlayer = nameToPlayer[playerName] if abuse and abusingPlayer submitReportButton.Active = true 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 playerDropDown abuses = * "Swearing" * "Bullying" * "Scamming" * "Dating" * "Cheating/Exploiting" * "Personal Questions" * "Offsite Links" * "Bad Model or Script" * "Bad Username" abuseDropDown, updateAbuseSelection = RbxGui.CreateDropDownMenu(abuses, (abuseText) -> abuse = abuseText if abuse and abusingPlayer submitReportButton.Active = true 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 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 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 -> if submitReportButton.Active if abuse and abusingPlayer frame.Visible = false game.Players\ReportAbuse abusingPlayer, abuse, shortDescriptionBox.Text if abuse == "Cheating/Exploiting" recordedMessageBox.Visible = true elseif abuse == "Bullying" or abuse == "Swearing" calmingMessageBox.Visible = true else normalMessageBox.Visible = true else closeAndResetDialog! 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 = -> --Delete old player combo box oldComboBox = settingsFrame\FindFirstChild "PlayersComboBox" if oldComboBox oldComboBox.Parent = nil 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 game.GuiService\RemoveCenterDialog shield cancelButton.MouseButton1Click\connect closeAndResetDialog reportAbuseButton.MouseButton1Click\connect -> createPlayersDropDown!.Parent = settingsFrame table.insert centerDialogs, shield game.GuiService\AddCenterDialog( shield, Enum.CenterDialogType.ModalDialog, --ShowFunction -> reportAbuseButton.Active = false shield.Visible = true mainShield.Visible = false --HideFunction -> reportAbuseButton.Active = true shield.Visible = false ) robloxLock shield shield -- createChatBar = -> -- --Only show a chat bar if we are a NetworkClient -- waitForChild game, "NetworkClient" -- waitForChild game, "Players" -- waitForProperty game.Players, "LocalPlayer" -- chatBar = New "Frame" -- Name: "ChatBar" -- Size: UDim2.new 1, 0, 0, 22 -- Position: UDim2.new 0, 0, 1, 0 -- BackgroundColor3: Color3.new 0, 0, 0 -- BorderSizePixel: 0 -- chatBox = New "TextBox" -- Text: "" -- Visible: false -- Size: UDim2.new 1, -4, 1, 0 -- Position: UDim2.new 0, 2, 0, 0 -- TextXAlignment: Enum.TextXAlignment.Left -- Font: Enum.Font.Arial -- ClearTextOnFocus: false -- FontSize: Enum.FontSize.Size14 -- TextColor3: Color3.new 1, 1, 1 -- BackgroundTransparency: 1 -- -- Parent: chatBar -- chatButton = New "TextButton" -- Size: UDim2.new 1, -4, 1, 0 -- Position: UDim2.new 0, 2, 0, 0 -- AutoButtonColor: false -- Text: 'To chat click here or press "/" key' -- TextXAlignment: Enum.TextXAlignment.Left -- Font: Enum.Font.Arial -- FontSize: Enum.FontSize.Size14 -- TextColor3: Color3.new 1, 1, 1 -- BackgroundTransparency: 1 -- -- Parent: chatBar -- activateChat = -> -- return if chatBox.Visible -- chatButton.Visible = false -- chatBox.Text = "" -- chatBox.Visible = true -- chatBox\CaptureFocus! -- chatButton.MouseButton1Click\connect(activateChat) -- -- hotKeyEnabled = true -- toggleHotKey = (_) -> -- -- hotKeyEnabled = value -- -- guiService = game\GetService "GuiService" -- --[[newChatMode = ]]try -- --guiService\AddSpecialKey(Enum.SpecialKey.ChatHotkey) -- --guiService.SpecialKeyPressed\connect (key) -> if key == Enum.SpecialKey.ChatHotkey and hotKeyEnabled then activateChat! -- -- if not newChatMode -- --guiService\AddKey("/") -- --guiService.KeyPressed\connect (key) -> if key == "/" and hotKeyEnabled then activateChat! -- chatBox.FocusLost\connect (enterPressed) -> -- if enterPressed -- if chatBox.Text ~= "" -- str = chatBox.Text -- if string.sub(str, 1, 1) == "%" -- game.Players\TeamChat string.sub str, 2 -- else -- game.Players\Chat str -- chatBox.Text = "" -- chatBox.Visible = false -- chatButton.Visible = true -- robloxLock chatBar -- chatBar, toggleHotKey --Spawn a thread for the Save dialogs isSaveDialogSupported = try -- var = game.LocalSaveEnabled if isSaveDialogSupported delay 0, -> saveDialogs = createSaveDialogs! saveDialogs.Parent = gui game.RequestShutdown = -> table.insert centerDialogs, saveDialogs game.GuiService\AddCenterDialog( saveDialogs, Enum.CenterDialogType.QuitDialog, --ShowFunction -> saveDialogs.Visible = true --HideFunction -> saveDialogs.Visible = false ) true --Spawn a thread for the Report Abuse dialogs delay 0, -> 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 --Spawn a thread for Chat Bar --[[local success, luaChat = ]] try game.GuiService.UseLuaChat -- if success and luaChat --[[delay 0, -> waitForChild(game, "Players") waitForProperty(game.Players, "LocalPlayer") advancedChatBarSupported = game.Players.LocalPlayer.ChatMode local chatBar, toggleHotKey = createChatBar! [if advancedChatBarSupported toggleChatBar = (chatMode) -> if chatMode == Enum.ChatMode.Menu chatBar.Parent = nil game.GuiService\SetGlobalSizeOffsetPixel(0,0) toggleHotKey(false) elseif chatMode == Enum.ChatMode.TextAndMenu --chatBar.Parent = gui --game.GuiService\SetGlobalSizeOffsetPixel(0,-22) toggleHotKey(true) game.Players.LocalPlayer.Changed\connect( function(prop) if prop == "ChatMode" toggleChatBar(game.Players.LocalPlayer.ChatMode) toggleChatBar(game.Players.LocalPlayer.ChatMode) else --chatBar.Parent = gui --game.GuiService\SetGlobalSizeOffsetPixel(0,-22) ]] BurningManPlaceID = 41324860 -- TODO: remove click to walk completely if testing shows we don't need it -- Removes click to walk option from Burning Man delay 0, -> 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 game.Players.LocalPlayer.Character.Humanoid\SetClickToWalkEnabled false game.Players.LocalPlayer.CharacterAdded\connect (character) -> waitForChild character, "Humanoid" character.Humanoid\SetClickToWalkEnabled false