--[[ Filename: Help.lua Written by: jeditkacheff Version 1.0 Description: Takes care of the help page in Settings Menu --]] -------------- CONSTANTS -------------- local KEYBOARD_MOUSE_TAG = "KeyboardMouse" local TOUCH_TAG = "Touch" local GAMEPAD_TAG = "Gamepad" local PC_TABLE_SPACING = 4 -------------- SERVICES -------------- local CoreGui = game:GetService("CoreGui") local RobloxGui = CoreGui:WaitForChild("RobloxGui") local UserInputService = game:GetService("UserInputService") local GuiService = game:GetService("GuiService") ----------- UTILITIES -------------- local utility = require(RobloxGui.Modules.Utility) ------------ Variables ------------------- local PageInstance = nil RobloxGui:WaitForChild("Modules"):WaitForChild("TenFootInterface") local isTenFootInterface = require(RobloxGui.Modules.TenFootInterface):IsEnabled() ----------- CLASS DECLARATION -------------- local function Initialize() local settingsPageFactory = require(RobloxGui.Modules.SettingsPageFactory) local this = settingsPageFactory:CreateNewPage() this.HelpPages = {} -- TODO: Change dev console script to parent this to somewhere other than an engine created gui local ControlFrame = RobloxGui:WaitForChild('ControlFrame') local ToggleDevConsoleBindableFunc = ControlFrame:WaitForChild('ToggleDevConsole') local lastInputType = nil function this:GetCurrentInputType() if lastInputType == nil then -- we don't know what controls the user has, just use reasonable defaults local platform = UserInputService:GetPlatform() if platform == Enum.Platform.XBoxOne or platform == Enum.Platform.WiiU then return GAMEPAD_TAG elseif platform == Enum.Platform.Windows or platform == Enum.Platform.OSX then return KEYBOARD_MOUSE_TAG else return TOUCH_TAG end end if lastInputType == Enum.UserInputType.Keyboard or lastInputType == Enum.UserInputType.MouseMovement or lastInputType == Enum.UserInputType.MouseButton1 or lastInputType == Enum.UserInputType.MouseButton2 or lastInputType == Enum.UserInputType.MouseButton3 or lastInputType == Enum.UserInputType.MouseWheel then return KEYBOARD_MOUSE_TAG elseif lastInputType == Enum.UserInputType.Touch then return TOUCH_TAG elseif lastInputType == Enum.UserInputType.Gamepad1 or lastInputType == Enum.UserInputType.Gamepad2 or inputType == Enum.UserInputType.Gamepad3 or lastInputType == Enum.UserInputType.Gamepad4 then return GAMEPAD_TAG end return KEYBOARD_MOUSE_TAG end local function createPCHelp(parentFrame) local function createPCGroup(title, actionInputBindings) local textIndent = 9 local pcGroupFrame = utility:Create'Frame' { Size = UDim2.new(1/3,-PC_TABLE_SPACING,1,0), BackgroundTransparency = 1, Name = "PCGroupFrame" .. tostring(title) }; local pcGroupTitle = utility:Create'TextLabel' { Position = UDim2.new(0,textIndent,0,0), Size = UDim2.new(1,-textIndent,0,30), BackgroundTransparency = 1, Text = title, Font = Enum.Font.SourceSansBold, FontSize = Enum.FontSize.Size18, TextColor3 = Color3.new(1,1,1), TextXAlignment = Enum.TextXAlignment.Left, Name = "PCGroupTitle" .. tostring(title), ZIndex = 2, Parent = pcGroupFrame }; local count = 0 local frameHeight = 42 local spacing = 2 local offset = pcGroupTitle.Size.Y.Offset for i = 1, #actionInputBindings do for actionName, inputName in pairs(actionInputBindings[i]) do local actionInputFrame = utility:Create'Frame' { Size = UDim2.new(1,0,0,frameHeight), Position = UDim2.new(0,0,0, offset + ((frameHeight + spacing) * count)), BackgroundTransparency = 0.65, BorderSizePixel = 0, ZIndex = 2, Name = "ActionInputBinding" .. tostring(actionName), Parent = pcGroupFrame }; local nameLabel = utility:Create'TextLabel' { Size = UDim2.new(0.4,-textIndent,0,frameHeight), Position = UDim2.new(0,textIndent,0,0), BackgroundTransparency = 1, Text = actionName, Font = Enum.Font.SourceSansBold, FontSize = Enum.FontSize.Size18, TextColor3 = Color3.new(1,1,1), TextXAlignment = Enum.TextXAlignment.Left, Name = actionName .. "Label", ZIndex = 2, Parent = actionInputFrame }; local inputLabel = utility:Create'TextLabel' { Size = UDim2.new(0.6,0,0,frameHeight), Position = UDim2.new(0.5,-4,0,0), BackgroundTransparency = 1, Text = inputName, Font = Enum.Font.SourceSans, FontSize = Enum.FontSize.Size18, TextColor3 = Color3.new(1,1,1), TextXAlignment = Enum.TextXAlignment.Left, Name = inputName .. "Label", ZIndex = 2, Parent = actionInputFrame }; count = count + 1 end end pcGroupFrame.Size = UDim2.new(pcGroupFrame.Size.X.Scale,pcGroupFrame.Size.X.Offset, 0, offset + ((frameHeight + spacing) * count)) return pcGroupFrame end local rowOffset = 50 local isOSX = UserInputService:GetPlatform() == Enum.Platform.OSX local charMoveFrame = createPCGroup( "Character Movement", {[1] = {["Move Forward"] = "W/Up Arrow"}, [2] = {["Move Backward"] = "S/Down Arrow"}, [3] = {["Move Left"] = "A/Left Arrow"}, [4] = {["Move Right"] = "D/Right Arrow"}, [5] = {["Jump"] = "Space"}} ) charMoveFrame.Parent = parentFrame local accessoriesFrame = createPCGroup("Accessories", { [1] = {["Equip Tools"] = "1,2,3..."}, [2] = {["Unequip Tools"] = "1,2,3..."}, [3] = {["Drop Tool"] = "Backspace"}, [4] = {["Use Tool"] = "Left Mouse Button"}, [5] = {["Drop Hats"] = "+"} }) accessoriesFrame.Position = UDim2.new(1/3,PC_TABLE_SPACING,0,0) accessoriesFrame.Parent = parentFrame local miscFrame = nil local hideHudSuccess, hideHudFlagValue = pcall(function() return settings():GetFFlag("AllowHideHudShortcut") end) if (hideHudSuccess and hideHudFlagValue) then miscFrame = createPCGroup("Misc", { [1] = {["Hide HUD"] = isOSX and "F7/fn + F7" or "F7"}, [2] = {["Dev Console"] = isOSX and "F9/fn + F9" or "F9"}, [3] = {["Mouselock"] = "Shift"}, [4] = {["Graphics Level"] = isOSX and "F10/fn + F10" or "F10"}, [5] = {["Fullscreen"] = isOSX and "F11/fn + F11" or "F11"} }) else miscFrame = createPCGroup("Misc", { [1] = {["Dev Console"] = isOSX and "F9/fn + F9" or "F9"}, [2] = {["Mouselock"] = "Shift"}, [3] = {["Graphics Level"] = isOSX and "F10/fn + F10" or "F10"}, [4] = {["Fullscreen"] = isOSX and "F11/fn + F11" or "F11"} }) end miscFrame.Position = UDim2.new(2/3,PC_TABLE_SPACING * 2,0,0) miscFrame.Parent = parentFrame local camFrame = createPCGroup("Camera Movement", { [1] = {["Rotate"] = "Right Mouse Button"}, [2] = {["Zoom In/Out"] = "Mouse Wheel"}, [3] = {["Zoom In"] = "I"}, [4] = {["Zoom Out"] = "O"} }) camFrame.Position = UDim2.new(0,0,charMoveFrame.Size.Y.Scale,charMoveFrame.Size.Y.Offset + rowOffset) camFrame.Parent = parentFrame local menuFrame = createPCGroup("Menu Items", { [1] = {["Kiseki Menu"] = "ESC"}, [2] = {["Backpack"] = "~"}, [3] = {["Playerlist"] = "TAB"}, [4] = {["Chat"] = "/"} }) menuFrame.Position = UDim2.new(1/3,PC_TABLE_SPACING,charMoveFrame.Size.Y.Scale,charMoveFrame.Size.Y.Offset + rowOffset) menuFrame.Parent = parentFrame parentFrame.Size = UDim2.new(parentFrame.Size.X.Scale, parentFrame.Size.X.Offset, 0, menuFrame.Size.Y.Offset + menuFrame.Position.Y.Offset) end local function createGamepadHelp(parentFrame) local gamepadImage = "ayaasset://textures/ui/Settings/Help/GenericController.png" local imageSize = UDim2.new(0,650,0,239) local imagePosition = UDim2.new(0.5,-imageSize.X.Offset/2,0.5,-imageSize.Y.Offset/2) if UserInputService:GetPlatform() == Enum.Platform.XBoxOne or UserInputService:GetPlatform() == Enum.Platform.XBox360 then gamepadImage = "ayaasset://textures/ui/Settings/Help/XboxController.png" imageSize = UDim2.new(0,1334,0,570) imagePosition = UDim2.new(0.5, (-imageSize.X.Offset/2) - 50, 0.5, -imageSize.Y.Offset/2) elseif UserInputService:GetPlatform() == Enum.Platform.PS4 or UserInputService:GetPlatform() == Enum.Platform.PS3 then gamepadImage = "ayaasset://textures/ui/Settings/Help/PSController.png" end local gamepadImageLabel = utility:Create'ImageLabel' { Name = "GamepadImage", Size = imageSize, Position = imagePosition, Image = gamepadImage, BackgroundTransparency = 1, ZIndex = 2, Parent = parentFrame }; parentFrame.Size = UDim2.new(parentFrame.Size.X.Scale, parentFrame.Size.X.Offset, 0, gamepadImageLabel.Size.Y.Offset + 100) local gamepadFontSize = isTenFootInterface and Enum.FontSize.Size36 or Enum.FontSize.Size24 local function createGamepadLabel(text, position, size) local nameLabel = utility:Create'TextLabel' { Position = position, Size = size, BackgroundTransparency = 1, Text = text, TextXAlignment = Enum.TextXAlignment.Left, Font = Enum.Font.SourceSansBold, FontSize = gamepadFontSize, TextColor3 = Color3.new(1,1,1), Name = text .. "Label", ZIndex = 2, Parent = gamepadImageLabel }; end local textVerticalSize = (gamepadFontSize == Enum.FontSize.Size36) and 36 or 24 if gamepadImage == "ayaasset://textures/ui/Settings/Help/XboxController.png" then createGamepadLabel("Switch Tool", UDim2.new(0,50,0,-textVerticalSize/2), UDim2.new(0,100,0,textVerticalSize)) createGamepadLabel("Game Menu Toggle", UDim2.new(0,-38,0.15,-textVerticalSize/2), UDim2.new(0,164,0,textVerticalSize)) createGamepadLabel("Move", UDim2.new(0,-80,0.31,-textVerticalSize/2), UDim2.new(0,46,0,textVerticalSize)) createGamepadLabel("Menu Navigation", UDim2.new(0,-50,0.46,-textVerticalSize/2), UDim2.new(0,164,0,textVerticalSize)) createGamepadLabel("Use Tool", UDim2.new(0.96,0,0,-textVerticalSize/2), UDim2.new(0,73,0,textVerticalSize)) createGamepadLabel("Kiseki Menu", UDim2.new(0.96,0,0.15,-textVerticalSize/2), UDim2.new(0,122,0,textVerticalSize)) createGamepadLabel("Back", UDim2.new(0.96,0,0.31,-textVerticalSize/2), UDim2.new(0,43,0,textVerticalSize)) createGamepadLabel("Jump", UDim2.new(0.96,0,0.46,-textVerticalSize/2), UDim2.new(0,49,0,textVerticalSize)) createGamepadLabel("Rotate Camera", UDim2.new(1,0,0.62,-textVerticalSize/2), UDim2.new(0,132,0,textVerticalSize)) createGamepadLabel("Camera Zoom", UDim2.new(1,0,0.77,-textVerticalSize/2), UDim2.new(0,122,0,textVerticalSize)) else createGamepadLabel("Switch Tool", UDim2.new(-0.01,0,0,-textVerticalSize/2), UDim2.new(0,100,0,textVerticalSize)) createGamepadLabel("Game Menu Toggle", UDim2.new(-0.11,0,0.15,-textVerticalSize/2), UDim2.new(0,164,0,textVerticalSize)) createGamepadLabel("Move", UDim2.new(-0.08,0,0.31,-textVerticalSize/2), UDim2.new(0,46,0,textVerticalSize)) createGamepadLabel("Menu Navigation", UDim2.new(-0.125,0,0.46,-textVerticalSize/2), UDim2.new(0,164,0,textVerticalSize)) createGamepadLabel("Use Tool", UDim2.new(0.96,0,0,-textVerticalSize/2), UDim2.new(0,73,0,textVerticalSize)) createGamepadLabel("Kiseki Menu", UDim2.new(0.9,0,0.15,-textVerticalSize/2), UDim2.new(0,122,0,textVerticalSize)) createGamepadLabel("Back", UDim2.new(1.01,0,0.31,-textVerticalSize/2), UDim2.new(0,43,0,textVerticalSize)) createGamepadLabel("Jump", UDim2.new(0.91,0,0.46,-textVerticalSize/2), UDim2.new(0,49,0,textVerticalSize)) createGamepadLabel("Rotate Camera", UDim2.new(0.91,0,0.62,-textVerticalSize/2), UDim2.new(0,132,0,textVerticalSize)) createGamepadLabel("Camera Zoom", UDim2.new(0.91,0,0.77,-textVerticalSize/2), UDim2.new(0,122,0,textVerticalSize)) end -- todo: turn on dev console button when dev console is ready --[[local openDevConsoleFunc = function() this.HubRef:SetVisibility(false) ToggleDevConsoleBindableFunc:Invoke() end local devConsoleButton = utility:MakeStyledButton("ConsoleButton", " Toggle Dev Console", UDim2.new(0,300,0,44), openDevConsoleFunc) devConsoleButton.Size = UDim2.new(devConsoleButton.Size.X.Scale, devConsoleButton.Size.X.Offset, 0, 60) devConsoleButton.Position = UDim2.new(1,-300,1,30) if UserInputService.GamepadEnabled and not UserInputService.TouchEnabled and not UserInputService.MouseEnabled and not UserInputService.KeyboardEnabled then devConsoleButton.ImageTransparency = 1 end devConsoleButton.Parent = gamepadImageLabel local aButtonImage = utility:Create'ImageLabel' { Name = "AButtonImage", Size = UDim2.new(0,55,0,55), Position = UDim2.new(0,5,0.5,-28), Image = "ayaasset://textures/ui/Settings/Help/AButtonDark.png", BackgroundTransparency = 1, ZIndex = 2, Parent = devConsoleButton }; this:AddRow(nil, nil, devConsoleButton, 340)]] end local function createTouchHelp(parentFrame) local smallScreen = utility:IsSmallTouchScreen() local ySize = GuiService:GetScreenResolution().y - 350 if smallScreen then ySize = GuiService:GetScreenResolution().y - 100 end parentFrame.Size = UDim2.new(1,0,0,ySize) local function createTouchLabel(text, position, size, parent) local nameLabel = utility:Create'TextLabel' { Position = position, Size = size, BackgroundTransparency = 1, Text = text, Font = Enum.Font.SourceSansBold, FontSize = Enum.FontSize.Size14, TextColor3 = Color3.new(1,1,1), Name = text .. "Label", ZIndex = 2, Parent = parent }; if not smallScreen then nameLabel.FontSize = Enum.FontSize.Size18 nameLabel.Size = UDim2.new(nameLabel.Size.X.Scale, nameLabel.Size.X.Offset, nameLabel.Size.Y.Scale, nameLabel.Size.Y.Offset + 4) end local nameBackgroundImage = utility:Create'ImageLabel' { Name = text .. "BackgroundImage", Size = UDim2.new(1,0,1,0), Position = UDim2.new(0,0,0,2), BackgroundTransparency = 1, Image = "ayaasset://textures/ui/Settings/Radial/RadialLabel.png", ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(12,2,65,21), ZIndex = 2, Parent = nameLabel }; return nameLabel end local function createTouchGestureImage(name, image, position, size, parent) local gestureImage = utility:Create'ImageLabel' { Name = name, Size = size, Position = position, BackgroundTransparency = 1, Image = image, ZIndex = 2, Parent = parent }; return gestureImage end local xSizeOffset = 30 local ySize = 25 if smallScreen then xSizeOffset = 0 end local moveLabel = createTouchLabel("Move", UDim2.new(0.06,0,0.58,0), UDim2.new(0,77 + xSizeOffset,0,ySize), parentFrame) if not smallScreen then moveLabel.Position = UDim2.new(-0.03,0,0.7,0) end local jumpLabel = createTouchLabel("Jump", UDim2.new(0.8,0,0.58,0), UDim2.new(0,77 + xSizeOffset,0,ySize), parentFrame) if not smallScreen then jumpLabel.Position = UDim2.new(0.85,0,0.7,0) end local equipLabel = createTouchLabel("Equip/Unequip Tools", UDim2.new(0.5,-60,0.64,0), UDim2.new(0,120 + xSizeOffset,0,ySize), parentFrame) if not smallScreen then equipLabel.Position = UDim2.new(0.5,-60,0.95,0) end local zoomLabel = createTouchLabel("Zoom In/Out", UDim2.new(0.15,-60,0.02,0), UDim2.new(0,120,0,ySize), parentFrame) createTouchGestureImage("ZoomImage", "ayaasset://textures/ui/Settings/Help/ZoomGesture.png", UDim2.new(0.5,-26,1,3), UDim2.new(0,53,0,59), zoomLabel) local rotateLabel = createTouchLabel("Rotate Camera", UDim2.new(0.5,-60,0.02,0), UDim2.new(0,120,0,ySize), parentFrame) createTouchGestureImage("RotateImage", "ayaasset://textures/ui/Settings/Help/RotateCameraGesture.png", UDim2.new(0.5,-32,1,3), UDim2.new(0,65,0,48), rotateLabel) local useToolLabel = createTouchLabel("Use Tool", UDim2.new(0.85,-60,0.02,0), UDim2.new(0,120,0,ySize), parentFrame) createTouchGestureImage("ToolImage", "ayaasset://textures/ui/Settings/Help/UseToolGesture.png", UDim2.new(0.5,-19,1,3), UDim2.new(0,38,0,52), useToolLabel) end local function createHelpDisplay(typeOfHelp) local helpFrame = utility:Create'Frame' { Size = UDim2.new(1,0,1,0), BackgroundTransparency = 1, Name = "HelpFrame" .. tostring(typeOfHelp) }; if typeOfHelp == KEYBOARD_MOUSE_TAG then createPCHelp(helpFrame) elseif typeOfHelp == GAMEPAD_TAG then createGamepadHelp(helpFrame) elseif typeOfHelp == TOUCH_TAG then createTouchHelp(helpFrame) end return helpFrame end local function displayHelp(currentPage) for i, helpPage in pairs(this.HelpPages) do if helpPage == currentPage then helpPage.Parent = this.Page this.Page.Size = helpPage.Size else helpPage.Parent = nil end end if UserInputService:GetPlatform() == Enum.Platform.XBoxOne then this.HubRef.PageViewClipper.ClipsDescendants = false this.HubRef.PageView.ClipsDescendants = false end end local function switchToHelp(typeOfHelp) local helpPage = this.HelpPages[typeOfHelp] if helpPage then displayHelp(helpPage) else this.HelpPages[typeOfHelp] = createHelpDisplay(typeOfHelp) switchToHelp(typeOfHelp) end end local function showTypeOfHelp() switchToHelp(this:GetCurrentInputType()) end ------ TAB CUSTOMIZATION ------- this.TabHeader.Name = "HelpTab" this.TabHeader.Icon.Image = "ayaasset://textures/ui/Settings/MenuBarIcons/HelpTab.png" if utility:IsSmallTouchScreen() then this.TabHeader.Icon.Size = UDim2.new(0,33,0,33) this.TabHeader.Icon.Position = UDim2.new(this.TabHeader.Icon.Position.X.Scale,this.TabHeader.Icon.Position.X.Offset,0.5,-16) this.TabHeader.Size = UDim2.new(0,100,1,0) elseif isTenFootInterface then this.TabHeader.Icon.Image = "ayaasset://textures/ui/Settings/MenuBarIcons/HelpTab@2x.png" this.TabHeader.Icon.Size = UDim2.new(0,90,0,90) this.TabHeader.Icon.Position = UDim2.new(0,0,0.5,-43) this.TabHeader.Size = UDim2.new(0,210,1,0) else this.TabHeader.Icon.Size = UDim2.new(0,44,0,44) this.TabHeader.Icon.Position = UDim2.new(this.TabHeader.Icon.Position.X.Scale,this.TabHeader.Icon.Position.X.Offset,0.5,-22) this.TabHeader.Size = UDim2.new(0,130,1,0) end this.TabHeader.Icon.Title.Text = "Help" ------ PAGE CUSTOMIZATION ------- this.Page.Name = "Help" UserInputService.InputBegan:connect(function(inputObject) local inputType = inputObject.UserInputType if inputType ~= Enum.UserInputType.Focus and inputType ~= Enum.UserInputType.None then lastInputType = inputObject.UserInputType showTypeOfHelp() end end) return this end ----------- Public Facing API Additions -------------- do PageInstance = Initialize() PageInstance.Displayed.Event:connect(function() if PageInstance:GetCurrentInputType() == TOUCH_TAG then if PageInstance.HubRef.BottomButtonFrame and not utility:IsSmallTouchScreen() then PageInstance.HubRef.BottomButtonFrame.Visible = false end end end) PageInstance.Hidden.Event:connect(function() PageInstance.HubRef.PageViewClipper.ClipsDescendants = true PageInstance.HubRef.PageView.ClipsDescendants = true PageInstance.HubRef:ShowShield() if PageInstance:GetCurrentInputType() == TOUCH_TAG then PageInstance.HubRef.BottomButtonFrame.Visible = true end end) end return PageInstance