-- [[ Rscripts Risk Notice ]] -- This script is not verified by rscripts.net. Deal with caution. -- -- Stay safe: -- • Never log in on unofficial Roblox sites or lookalike domains. -- • Real Roblox links use roblox.com (check the .com ending). -- • Treat fake Roblox login / "claim reward" pages as phishing. -- [[ End Rscripts Risk Notice ]] --MADE BY MERTISH12 converted variables to english with some random tool from website so yall can understand :sob: print("le menu loadedd"); local player = game.Players.LocalPlayer; local version_ = "8.5"; wait(1); local tween = game:GetService("TweenService"); local UIS = game:GetService("UserInputService"); local VR = game:GetService("VRService"); local RS = game:GetService("RunService"); local Players = game:GetService("Players"); local localPlayer = Players.LocalPlayer; local Lighting = game:GetService("Lighting"); local VRService = game:GetService("VRService"); local ReplicatedStorage = game:GetService("ReplicatedStorage"); local panel; local holding = false; local lastClick = 0; local CurrentPage = 1; local menuFallOnClose = false; local menuFallLastPosition = nil; local menuFallLastTime = 0; local menuFallVelocity = Vector3.zero; local pcMenu = false; local pcSelected = 1; local pcLastMove = 0; local pcMoveDelay = 0.15; local clicksounds = {Default="rbxassetid://131665195317239",Key="rbxassetid://102008284012845",Rock="rbxassetid://120691957831852",Tag="rbxassetid://91782604686830",Round="rbxassetid://76607029523750",WaterSplash="rbxassetid://82891453696514",ModernClick="rbxassetid://88442833509532",JuulClick="rbxassetid://8816939097"}; local soundOrder = {"Default","Key","Rock","Tag","Round","WaterSplash","ModernClick","JuulClick"}; local ColorList = {{Name="Default1",Value=Color3.fromRGB(1, 0, 117)},{Name="Default2",Value=Color3.fromRGB(0, 0, 0)},{Name="Red",Value=Color3.fromRGB(145, 0, 0)},{Name="Green",Value=Color3.fromRGB(0, 145, 0)},{Name="Yellow",Value=Color3.fromRGB(145, 128, 0)},{Name="Blue",Value=Color3.fromRGB(0, 0, 145)},{Name="Black",Value=Color3.fromRGB(0, 0, 0)},{Name="White",Value=Color3.fromRGB(145, 145, 145)},{Name="Purple",Value=Color3.fromRGB(81, 0, 145)},{Name="Orange",Value=Color3.fromRGB(145, 77, 0)},{Name="Pink",Value=Color3.fromRGB(145, 60, 102)},{Name="Bright Blue",Value=Color3.fromRGB(0, 97, 145)},{Name="Bright Pink",Value=Color3.fromRGB(145, 0, 116)}}; local currentTheme = 6; local Themes = {{Name="Default",MenuDescription=true,MenuColor1=Color3.fromRGB(1, 0, 117),MenuColor2=Color3.fromRGB(0, 0, 0),ButtonColor=Color3.fromRGB(255, 255, 0),ToggleColor=Color3.fromRGB(244, 4, 245),NavColor=Color3.fromRGB(0, 0, 0),DisconnectColor=Color3.fromRGB(155, 0, 0),ButtonTextColor=Color3.fromRGB(0, 0, 0),ButtonTextTransparency=0,MenuTextColor=Color3.fromRGB(255, 255, 255),MenuTextTransparency=0,NavTextColor=Color3.fromRGB(255, 255, 255),SearchHomeTextColor=Color3.fromRGB(255, 255, 255),DisconnectTextColor=Color3.fromRGB(255, 255, 255),ButtonSize=Vector3.new(1.53, 0.2, 0.055),ItemsPerPage=4,ButtonPositions={Vector3.new(0, 0.04, -0.05),Vector3.new(0, -0.237, -0.05),Vector3.new(0, -0.524, -0.05),Vector3.new(0, -0.804, -0.05)},NextPosition=Vector3.new(0, 0.313, -0.025),PreviousPosition=Vector3.new(0, 0.615, -0.025),NextSize=Vector3.new(1.53, 0.2, 0.055),PreviousSize=Vector3.new(1.53, 0.2, 0.055),HomePosition=Vector3.new(-1.158, 1.47, 0),HomeSize=Vector3.new(0.4, 0.15, 0.05),DisconnectPosition=Vector3.new(-1.546, 0.083, 0),DisconnectSize=Vector3.new(1, 0.415, 0.085)},{Name="Mertish's Holdable",MenuName="Mertish's Holdable",MenuNameTextSize=60,MenuDescription=false,PreviousText="<---Page1--",NextText="--Page1--->",PageCount="Page1",MenuColor1=Color3.fromRGB(128, 2, 132),MenuColor2=Color3.fromRGB(128, 2, 132),ButtonColor=Color3.fromRGB(0, 0, 0),ToggleColor=Color3.fromRGB(251, 4, 255),NavColor=Color3.fromRGB(0, 0, 0),DisconnectColor=Color3.fromRGB(155, 0, 0),ButtonTextColor=Color3.fromRGB(255, 255, 255),ButtonTextTransparency=0,MenuTextColor=Color3.fromRGB(255, 255, 10),MenuTextTransparency=0,NavTextColor=Color3.fromRGB(255, 255, 255),SearchHomeTextColor=Color3.fromRGB(255, 255, 255),DisconnectTextColor=Color3.fromRGB(255, 255, 255),ButtonSize=Vector3.new(1.53, 0.2, 0.055),ItemsPerPage=7,ButtonPositions={Vector3.new(0, 1.14, -0.05),Vector3.new(0, 0.84, -0.05),Vector3.new(0, 0.54, -0.05),Vector3.new(0, 0.24, -0.05),Vector3.new(0, -0.06, -0.05),Vector3.new(0, -0.36, -0.05),Vector3.new(0, -0.66, -0.05)},NextPosition=Vector3.new(0, -1.26, -0.05),PreviousPosition=Vector3.new(0, -0.96, -0.05),NextSize=Vector3.new(1.53, 0.2, 0.055),PreviousSize=Vector3.new(1.53, 0.2, 0.055),HomePosition=Vector3.new(999999, 999999, 999999),HomeSize=Vector3.new(0, 0, 0),DisconnectPosition=Vector3.new(999999, 999999, 999999),DisconnectSize=Vector3.new(1, 0.415, 0.085),PanelSize=Vector3.new(1.865, 3, 0.085)},{Name="Mertish's Holdable",MenuName="Mertish's Holdable",MenuDescription=true,MenuNameTextSize=55,PreviousText="",NextText="",PageCount="- Page 1",MenuColor1=Color3.fromRGB(0, 0, 0),MenuColor2=Color3.fromRGB(255, 255, 0),ButtonColor=Color3.fromRGB(255, 255, 0),ToggleColor=Color3.fromRGB(81, 0, 145),NavColor=Color3.fromRGB(0, 0, 0),DisconnectColor=Color3.fromRGB(155, 0, 0),ButtonTextColor=Color3.fromRGB(0, 0, 0),ButtonTextTransparency=0,MenuTextColor=Color3.fromRGB(255, 255, 255),MenuTextTransparency=0,NavTextColor=Color3.fromRGB(255, 255, 255),SearchHomeTextColor=Color3.fromRGB(255, 255, 255),DisconnectTextColor=Color3.fromRGB(255, 255, 255),ButtonSize=Vector3.new(1.53, 0.2, 0.055),ItemsPerPage=6,ButtonPositions={Vector3.new(0, 0.79, -0.05),Vector3.new(0, 0.49, -0.05),Vector3.new(0, 0.19, -0.05),Vector3.new(0, -0.11, -0.05),Vector3.new(0, -0.41, -0.05),Vector3.new(0, -0.71, -0.05)},NextPosition=Vector3.new(-0.758, 1.287, -0.025),PreviousPosition=Vector3.new(0.758, 1.287, -0.025),NextSize=Vector3.new(0.35, 0.17, 0.055),PreviousSize=Vector3.new(0.35, 0.17, 0.055),HomePosition=Vector3.new(999999, 999999, 999999),HomeSize=Vector3.new(0, 0, 0),DisconnectPosition=Vector3.new(-1.546, 0.083, 0),DisconnectSize=Vector3.new(1, 0.415, 0.085)},{Name="Mertish's Holdable",MenuName="Mertish's Holdable",MenuDescription=true,PreviousText="<",NextText=">",PageCount="[1]",MenuColor1=Color3.fromRGB(200, 93, 0),MenuColor2=Color3.fromRGB(200, 93, 0),ButtonColor=Color3.fromRGB(199, 83, 0),ToggleColor=Color3.fromRGB(184, 74, 0),NavColor=Color3.fromRGB(199, 83, 0),DisconnectColor=Color3.fromRGB(199, 83, 0),ButtonTextColor=Color3.fromRGB(255, 128, 0),ButtonTextTransparency=0,MenuTextColor=Color3.fromRGB(255, 173, 119),MenuTextTransparency=0,NavTextColor=Color3.fromRGB(255, 255, 255),SearchHomeTextColor=Color3.fromRGB(255, 255, 255),DisconnectTextColor=Color3.fromRGB(255, 255, 255),ButtonSize=Vector3.new(1.713, 0.18, 0.055),ItemsPerPage=8,ButtonPositions={Vector3.new(-0.006, 0.835, -0.024),Vector3.new(-0.006, 0.585, -0.024),Vector3.new(-0.006, 0.335, -0.024),Vector3.new(-0.006, 0.085, -0.024),Vector3.new(-0.006, -0.165, -0.024),Vector3.new(-0.006, -0.415, -0.024),Vector3.new(-0.006, -0.665, -0.024),Vector3.new(-0.006, -0.915, -0.024)},NextPosition=Vector3.new(-1.25, 0.013, -0.025),PreviousPosition=Vector3.new(1.25, 0.015, -0.025),NextSize=Vector3.new(0.4, 2, 0.055),PreviousSize=Vector3.new(0.4, 2, 0.055),HomePosition=Vector3.new(-1.169, -1.33, 0),HomeSize=Vector3.new(0.2, 0.2, 0.05),DisconnectPosition=Vector3.new(0.004, 1.383, 0),DisconnectSize=Vector3.new(1.7, 0.215, 0.085)},{Name="Mertish's Holdable",MenuName="Mertish's Holdable",MenuDescription=false,PreviousText="<",NextText=">",PageCount="[1]",MenuColor1=Color3.fromRGB(180, 82, 1),MenuColor2=Color3.fromRGB(180, 82, 1),ButtonColor=Color3.fromRGB(143, 72, 0),ToggleColor=Color3.fromRGB(80, 49, 49),NavColor=Color3.fromRGB(143, 72, 0),DisconnectColor=Color3.fromRGB(199, 83, 0),ButtonTextColor=Color3.fromRGB(255, 128, 0),ButtonTextTransparency=0,MenuTextColor=Color3.fromRGB(255, 173, 119),MenuTextTransparency=0,NavTextColor=Color3.fromRGB(255, 255, 255),SearchHomeTextColor=Color3.fromRGB(255, 255, 255),DisconnectTextColor=Color3.fromRGB(255, 255, 255),ButtonSize=Vector3.new(2.713, 0.17, 0.055),ItemsPerPage=6,ButtonPositions={Vector3.new(-0.006, 0.235, -0.024),Vector3.new(-0.006, 0.035, -0.024),Vector3.new(-0.006, -0.165, -0.024),Vector3.new(-0.006, -0.365, -0.024),Vector3.new(-0.006, -0.565, -0.024),Vector3.new(-0.006, -0.765, -0.024)},NextPosition=Vector3.new(-0.006, 0.435, -0.024),PreviousPosition=Vector3.new(-0.006, 0.635, -0.024),NextSize=Vector3.new(2.713, 0.17, 0.055),PreviousSize=Vector3.new(2.713, 0.17, 0.055),HomePosition=Vector3.new(99999, 999999, 999999),HomeSize=Vector3.new(99999, 999999, 999999),DisconnectPosition=Vector3.new(99999, 999999, 999999),DisconnectSize=Vector3.new(1.7, 0.215, 0.085),PanelSize=Vector3.new(3, 1.95, 0.085)},{Name="Mertish's Holdable",MenuName="Mertish's Holdable",MenuNameTextSize=100,MenuDescription=false,PreviousText="<---------",NextText="--------->",MenuColor1=Color3.fromRGB(18, 22, 30),MenuColor2=Color3.fromRGB(18, 22, 30),ButtonColor=Color3.fromRGB(251, 4, 255),ToggleColor=Color3.fromRGB(255, 0, 4),NavColor=Color3.fromRGB(251, 4, 255),DisconnectColor=Color3.fromRGB(155, 0, 0),ButtonTextColor=Color3.fromRGB(255, 255, 255),ButtonTextTransparency=0,MenuTextColor=Color3.fromRGB(255, 255, 255),MenuTextTransparency=0,NavTextColor=Color3.fromRGB(255, 255, 255),SearchHomeTextColor=Color3.fromRGB(255, 255, 255),DisconnectTextColor=Color3.fromRGB(255, 255, 255),ButtonSize=Vector3.new(1.53, 0.2, 0.055),ItemsPerPage=7,ButtonPositions={Vector3.new(0, 1.14, -0.05),Vector3.new(0, 0.84, -0.05),Vector3.new(0, 0.54, -0.05),Vector3.new(0, 0.24, -0.05),Vector3.new(0, -0.06, -0.05),Vector3.new(0, -0.36, -0.05),Vector3.new(0, -0.66, -0.05)},NextPosition=Vector3.new(0, -1.26, -0.05),PreviousPosition=Vector3.new(0, -0.96, -0.05),NextSize=Vector3.new(1.53, 0.2, 0.055),PreviousSize=Vector3.new(1.53, 0.2, 0.055),HomePosition=Vector3.new(999999, 999999, 999999),HomeSize=Vector3.new(0, 0, 0),DisconnectPosition=Vector3.new(999999, 999999, 999999),DisconnectSize=Vector3.new(1, 0.415, 0.085),PanelSize=Vector3.new(1.865, 3, 0.085)}}; local longMenu = false; local normalPanelSize = Vector3.new(1.865, 2.35, 0.085); local longMenuSpacing = 0.29; local longMenuButtons = 12; local function GetLongButtonPositions(theme, extra) local p = {}; local first = theme.ButtonPositions[1]; for i = 1, longMenuButtons do p[i] = first + Vector3.new(0, (extra / 2) - (longMenuSpacing * (i - 1)), 0); end return p; end local function GetTheme() return Themes[currentTheme]; end local function GetHand(left) local camera = workspace.CurrentCamera; if not camera then return nil; end local cf = VRService:GetUserCFrame((left and Enum.UserCFrame.LeftHand) or Enum.UserCFrame.RightHand); return camera.CFrame * (cf.Rotation + (cf.Position * camera.HeadScale)); end local ItemsPerPage = Themes[currentTheme].ItemsPerPage; local clickSoundButton; local color1Index = 1; local color2Index = 2; local buttonColorIndex = 5; local toggledColorIndex = 9; local currentSoundIndex = 1; local nextText; local previousText; local pageCount; local OpenMenu; local BuildMenu; local Menus = {}; local function GetCurrentSound() return soundOrder[currentSoundIndex]; end local MenuFont = "rbxasset://fonts/families/Arial.json"; VRService.FadeOutViewOnCollision = false; model = Instance.new("Model"); model.Name = "Mert's Menu Reborn"; model.Parent = workspace; local BUTTON_SIZE = Vector3.new(1.53, 0.2, 0.055); local MENU_SCALES = {0.15,0.2,0.25,0.3,0.4,0.5,0.75,1}; local menuScaleIndex = 6; local function MS() return MENU_SCALES[menuScaleIndex]; end local STYLE = {PixelsPerStud=363.636,TextSize=85,Font=Font.new(MenuFont, Enum.FontWeight.Regular, Enum.FontStyle.Normal),NormalColor=Color3.fromRGB(145, 130, 0),ToggleOnColor=Color3.fromRGB(150, 25, 150),TextColor=Color3.fromRGB(0, 0, 0)}; local function ChangeButtonText(buttonName, text) for _, o in ipairs(model:GetChildren()) do if (o:IsA("Part") and (o.Name == buttonName)) then local gui = o:FindFirstChildWhichIsA("SurfaceGui"); local label = gui and gui:FindFirstChildWhichIsA("TextLabel"); if label then label.Text = text; end break; end end end local Home_Buttons; local Setting_Buttons = {{Name="Exit Settings",Enabled=false,Enable=function() OpenMenu(Home_Buttons); end,Disable=function() end,Toggleable=false,Description="Exits Settings"},{Name="Change Click Sound",Enabled=false,Toggleable=false,Description="Change click sound of the menu",GetText=function() return "Change Click Sound: " .. soundOrder[currentSoundIndex]; end,Enable=function() currentSoundIndex = (currentSoundIndex % #soundOrder) + 1; ChangeButtonText("Change Click Sound", "Change Click Sound: " .. soundOrder[currentSoundIndex]); end,Disable=function() end},{Name="Change Menu 1s Color",Enabled=false,Toggleable=false,Description="Changes primary menu color",GetText=function() return "Change Menu 1s Color: " .. ColorList[color1Index].Name; end,Enable=function() color1Index = (color1Index % #ColorList) + 1; GetTheme().MenuColor1 = ColorList[color1Index].Value; ChangeButtonText("Change Menu 1s Color", "Change Menu 1s Color: " .. ColorList[color1Index].Name); end,Disable=function() end},{Name="Change Menu 2s Color",Enabled=false,Toggleable=false,Description="Changes secondary menu color",GetText=function() return "Change Menu 2s Color: " .. ColorList[color2Index].Name; end,Enable=function() color2Index = (color2Index % #ColorList) + 1; GetTheme().MenuColor2 = ColorList[color2Index].Value; ChangeButtonText("Change Menu 2s Color", "Change Menu 2s Color: " .. ColorList[color2Index].Name); end,Disable=function() end},{Name="Change Button Color",Enabled=false,Toggleable=false,Description="Changes normal button color",GetText=function() return "Change Button Color: " .. ColorList[buttonColorIndex].Name; end,Enable=function() buttonColorIndex = (buttonColorIndex % #ColorList) + 1; GetTheme().ButtonColor = ColorList[buttonColorIndex].Value; BuildMenu(); end,Disable=function() end},{Name="Change Toggled Color",Enabled=false,Toggleable=false,Description="Changes toggled button color",GetText=function() return "Change Toggled Color: " .. ColorList[toggledColorIndex].Name; end,Enable=function() toggledColorIndex = (toggledColorIndex % #ColorList) + 1; GetTheme().ToggleColor = ColorList[toggledColorIndex].Value; BuildMenu(); end,Disable=function() end},{Name="Change Menu Theme",Enabled=false,Toggleable=false,Description="Changes the menu style",GetText=function() return "Themes: " .. Themes[currentTheme].Name; end,Enable=function() currentTheme = (currentTheme % #Themes) + 1; ChangeButtonText("Change Menu Theme", "Themes: " .. Themes[currentTheme].Name); BuildMenu(); end,Disable=function() end},{Name="Menu Size",Enabled=false,Toggleable=false,Description="Changes how big the menu is",GetText=function() return "Menu Size: " .. MS() .. "x"; end,Enable=function() menuScaleIndex = (menuScaleIndex % #MENU_SCALES) + 1; BuildMenu(); end,Disable=function() end},{Name="Long Menu",Enabled=false,Enable=function() longMenu = true; BuildMenu(); end,Disable=function() longMenu = false; BuildMenu(); end,Toggleable=true,Description="Makes the menu longer and shows more buttons"},{Name="Menu Fall on Close",Enabled=false,Enable=function() menuFallOnClose = true; end,Disable=function() menuFallOnClose = false; end,Toggleable=true,Description="Throws the menu and makes it fall when you release Y"},{Name="Right Handed Menu",Enabled=false,Toggleable=true,Description="Moves the menu to your right hand and cursor to your left hand",Enable=function() _G.RightHandedMenu = true; end,Disable=function() _G.RightHandedMenu = false; end},{Name="Menu Notifications",Enabled=false,Enable=function() NotificationSystem.Enabled = true; end,Disable=function() NotificationSystem.Enabled = false; end,Toggleable=true,Description="Enables or disables menu notifications"}}; Menus[#Menus + 1] = Setting_Buttons; Home_Buttons = {{Name="Settings",Enabled=false,Enable=function() OpenMenu(Setting_Buttons); end,Disable=function() end,Toggleable=false,Description="Go to settings page"},{Name="Platforms",Enabled=false,Toggleable=true,Description="Gives you small grey plastic platforms under your hands while holding grip",Enable=function() _G.Plats_enabled = true; _G.PlatformsHeld = {Left=false,Right=false}; _G.PlatformsParts = {Left=nil,Right=nil}; _G.PlatformsConnections = {UIS.InputBegan:Connect(function(i, g) if g then return; end if (i.UserInputType == Enum.UserInputType.Gamepad1) then local side = ((i.KeyCode == Enum.KeyCode.ButtonL1) and "Left") or ((i.KeyCode == Enum.KeyCode.ButtonR1) and "Right"); if (side and not _G.PlatformsHeld[side]) then _G.PlatformsHeld[side] = true; local h = GetHand(side == "Left"); if h then local p = Instance.new("Part"); p.Name = "VRPlatform"; p.Size = Vector3.new(0.08, 1, 1); p.Material = Enum.Material.SmoothPlastic; p.Color = Color3.fromRGB(25, 25, 25); p.Anchored = true; p.CanCollide = true; p:SetAttribute("MTNSlip", 0.03); p:SetAttribute("MtnSourceNode", 9900); p:SetAttribute("MtnSourcePath", "Level/forest"); p:SetAttribute("MtnSubmesh", 0); p:SetAttribute("MtnSurfaceIndex", 7); p.CFrame = h * CFrame.new(((side == "Left") and 0.16) or -0.16, -0.08, 0); p.Parent = workspace; _G.PlatformsParts[side] = p; end end end end),UIS.InputEnded:Connect(function(i) if (i.UserInputType == Enum.UserInputType.Gamepad1) then local side = ((i.KeyCode == Enum.KeyCode.ButtonL1) and "Left") or ((i.KeyCode == Enum.KeyCode.ButtonR1) and "Right"); if side then _G.PlatformsHeld[side] = false; if _G.PlatformsParts[side] then _G.PlatformsParts[side]:Destroy(); _G.PlatformsParts[side] = nil; end end end end),RS.RenderStepped:Connect(function() if not _G.Plats_enabled then return; end for _, side in ipairs({"Left","Right"}) do if (_G.PlatformsHeld[side] and not _G.PlatformsParts[side]) then local h = GetHand(side == "Left"); if h then local p = Instance.new("Part"); p.Name = "VRPlatform"; p.Size = Vector3.new(0.08, 1, 1); p.Material = Enum.Material.SmoothPlastic; p.Color = Color3.fromRGB(25, 25, 25); p.Anchored = true; p.CanCollide = true; p:SetAttribute("MTNSlip", 0.03); p:SetAttribute("MtnSourceNode", 9900); p:SetAttribute("MtnSourcePath", "Level/forest"); p:SetAttribute("MtnSubmesh", 0); p:SetAttribute("MtnSurfaceIndex", 7); p.CFrame = h * CFrame.new(((side == "Left") and 0.16) or -0.16, -0.08, 0); p.Parent = workspace; _G.PlatformsParts[side] = p; end end end end)}; end,Disable=function() _G.Plats_enabled = false; for _, c in ipairs(_G.PlatformsConnections or {}) do c:Disconnect(); end for _, p in pairs(_G.PlatformsParts or {}) do if p then p:Destroy(); end end _G.PlatformsHeld = nil; _G.PlatformsParts = nil; _G.PlatformsConnections = nil; end},{Name="Steam Long Arms",Enabled=false,Toggleable=true,Description="Sets head scale to 1.2",Enable=function() workspace.Camera.HeadScale = 1.2; end,Disable=function() workspace.Camera.HeadScale = 1; end},{Name="LongArms",Enabled=false,Toggleable=true,Description="Sets head scale to 1.3",Enable=function() workspace.Camera.HeadScale = 1.3; end,Disable=function() workspace.Camera.HeadScale = 1; end},{Name="Super Longarms",Enabled=false,Toggleable=true,Description="Sets head scale to 2",Enable=function() workspace.Camera.HeadScale = 2; end,Disable=function() workspace.Camera.HeadScale = 1; end},{Name="RGB Monke",Enabled=false,Toggleable=true,Description="Smoothly cycles your fur through rainbow colors",Enable=function() _G.MTNRainbow = {Mode="Smooth",Connection=game:GetService("RunService").RenderStepped:Connect(function() game.Players.LocalPlayer:SetAttribute("MtnColor", Color3.fromHSV((os.clock() * 0.15) % 1, 1, 1)); end)}; end,Disable=function() if _G.MTNRainbow then _G.MTNRainbow.Connection:Disconnect(); _G.MTNRainbow = nil; end end},{Name="RGB Strobe Monke",Enabled=false,Toggleable=true,Description="Rapidly cycles your fur through rainbow colors",Enable=function() _G.MTNRainbow = {Mode="Strobe",Connection=game:GetService("RunService").RenderStepped:Connect(function() game.Players.LocalPlayer:SetAttribute("MtnColor", Color3.fromHSV((math.floor(os.clock() * 15) / 15) % 1, 1, 1)); end)}; end,Disable=function() if _G.MTNRainbow then _G.MTNRainbow.Connection:Disconnect(); _G.MTNRainbow = nil; end end},{Name="Black & White Strobe Monke",Enabled=false,Toggleable=true,Description="Rapidly alternates your fur between black and white",Enable=function() _G.MTNRainbow = {Mode="BW",Connection=game:GetService("RunService").RenderStepped:Connect(function() game.Players.LocalPlayer:SetAttribute("MtnColor", (((math.floor(os.clock() * 15) % 2) == 0) and Color3.new(0, 0, 0)) or Color3.new(1, 1, 1)); end)}; end,Disable=function() if _G.MTNRainbow then _G.MTNRainbow.Connection:Disconnect(); _G.MTNRainbow = nil; end end}}; Menus[#Menus + 1] = Home_Buttons; local ActiveMenu = Home_Buttons; panel = Instance.new("Part"); panel.Name = "Panel"; panel.Size = normalPanelSize; panel.Position = Vector3.new(0.839, 0.318, 0.027); panel.Material = Enum.Material.Plastic; panel.Color = Color3.fromRGB(2, 0, 120); panel.Anchored = true; panel.CanCollide = false; panel.CastShadow = false; panel.Parent = model; task.spawn(function() while true do pcall(function() game.StarterGui:SetCore("VRLaserPointerMode", 0); game.StarterGui:SetCore("VREnableControllerModels", false); end); local theme = GetTheme(); tween:Create(panel, TweenInfo.new(1.2, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut), {Color=theme.MenuColor1}):Play(); task.wait(1.2); if (not panel or not panel.Parent) then break; end tween:Create(panel, TweenInfo.new(1.2, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut), {Color=theme.MenuColor2}):Play(); task.wait(1.2); end end); local origin = Instance.new("Attachment"); origin.Name = "Origin"; local ORIGIN_POSITION = Vector3.new(0.992, -0.721, 0.385); origin.Position = ORIGIN_POSITION * MS(); origin.Orientation = Vector3.new(0, 0, 75); origin.Axis = Vector3.new(0.259, 0.966, 0); origin.SecondaryAxis = Vector3.new(-0.966, 0.259, 0); origin.Parent = panel; model:PivotTo(panel.CFrame); function MenuFall() if not menuFallOnClose then model.Parent = Lighting; return; end local clone = model:Clone(); clone.Name = "MenuFall_" .. math.random(1, 999999); clone.Parent = workspace; local root = clone:FindFirstChild("Panel"); if (not root or not root:IsA("BasePart")) then clone:Destroy(); model.Parent = Lighting; return; end local parts = clone:GetDescendants(); for i = 1, #parts do local v = parts[i]; if v:IsA("BasePart") then local distance = (v.Position - root.Position).Magnitude; if (distance > 100) then v:Destroy(); else v.Anchored = true; v.CanCollide = false; v.CanTouch = false; v.CanQuery = false; end end end parts = clone:GetDescendants(); for i = 1, #parts do local v = parts[i]; if (v:IsA("BasePart") and (v ~= root) and ((v.Position - root.Position).Magnitude <= 100)) then local weld = Instance.new("WeldConstraint"); weld.Part0 = root; weld.Part1 = v; weld.Parent = root; end end parts = clone:GetDescendants(); for i = 1, #parts do local v = parts[i]; if v:IsA("BasePart") then v.Anchored = false; v.CanCollide = false; v.CanTouch = false; v.CanQuery = false; end end root.AssemblyLinearVelocity = menuFallVelocity + Vector3.new(0, -4, 0); root.AssemblyAngularVelocity = Vector3.new(0, 1.2, 0); model.Parent = Lighting; end UIS.InputBegan:Connect(function(i, g) if (i.KeyCode == Enum.KeyCode.ButtonY) then holding = true; menuFallLastPosition = model:GetPivot().Position; menuFallLastTime = os.clock(); menuFallVelocity = Vector3.zero; model.Parent = workspace; end end); UIS.InputEnded:Connect(function(i, g) if (i.KeyCode == Enum.KeyCode.ButtonY) then holding = false; MenuFall(); local cursor = workspace:FindFirstChild("VR_Cursor_MENUUUU"); if cursor then cursor:Destroy(); end end end); RS.RenderStepped:Connect(function() if not holding then return; end if (model.Parent ~= workspace) then return; end if holding then local now = os.clock(); local pos = model:GetPivot().Position; if menuFallLastPosition then local dt = math.max(now - menuFallLastTime, 0.001); menuFallVelocity = (pos - menuFallLastPosition) / dt; if (menuFallVelocity.Magnitude > 35) then menuFallVelocity = menuFallVelocity.Unit * 35; end end menuFallLastPosition = pos; menuFallLastTime = now; end local hand = GetHand(not _G.RightHandedMenu); local rhand = GetHand(_G.RightHandedMenu); if (not hand or not rhand) then return; end if not pcMenu then model:PivotTo(hand * CFrame.new(Vector3.new(0.15, 0, 0.7) * MS()) * CFrame.Angles(0, math.rad(-90), 90) * origin.CFrame:Inverse()); local now = os.clock(); local pos = model:GetPivot().Position; if menuFallLastPosition then local dt = math.max(now - menuFallLastTime, 0.001); menuFallVelocity = (pos - menuFallLastPosition) / dt; if (menuFallVelocity.Magnitude > 35) then menuFallVelocity = menuFallVelocity.Unit * 35; end end menuFallLastPosition = pos; menuFallLastTime = now; elseif pcMenu then local camera = workspace.CurrentCamera; if camera then local pcPosition = camera.CFrame * CFrame.new(0, 0, -3 * MS()) * CFrame.Angles(0, math.rad(180), 0); model:PivotTo(pcPosition); end end if not workspace:FindFirstChild("VR_Cursor_MENUUUU") then local cursor = Instance.new("Part"); cursor.Name = "VR_Cursor_MENUUUU"; cursor.Shape = Enum.PartType.Ball; cursor.Size = Vector3.new(0.08, 0.08, 0.08) * MS(); cursor.Material = Enum.Material.SmoothPlastic; cursor.Color = ColorList[buttonColorIndex].Value; cursor.Anchored = true; cursor.CanCollide = false; cursor.CastShadow = false; cursor.Parent = workspace; end local cursor = workspace:FindFirstChild("VR_Cursor_MENUUUU"); cursor.Size = Vector3.new(0.08, 0.08, 0.08) * MS(); cursor.CFrame = rhand * CFrame.new(0, 0, -1 * MS()); end); local infoGui = Instance.new("SurfaceGui"); infoGui.Name = "Info"; infoGui.Face = Enum.NormalId.Front; infoGui.SizingMode = Enum.SurfaceGuiSizingMode.PixelsPerStud; infoGui.PixelsPerStud = 363.636; infoGui.Parent = panel; local nameLabel = Instance.new("TextLabel"); nameLabel.Name = "MenuName"; nameLabel.Size = UDim2.new(1, 0, 0, 95); nameLabel.Position = UDim2.new(0, 0, 0, 0); nameLabel.BackgroundTransparency = 1; nameLabel.Text = "Mertish's Holdable " .. version_; nameLabel.TextColor3 = GetTheme().MenuTextColor; nameLabel.TextTransparency = GetTheme().MenuTextTransparency; nameLabel.TextSize = 60; nameLabel.TextStrokeTransparency = 1; nameLabel.TextWrapped = true; nameLabel.FontFace = STYLE.Font; nameLabel.Parent = infoGui; local description = Instance.new("TextLabel"); description.Name = "Description"; description.Size = UDim2.new(1, 0, 0, 80); description.Position = UDim2.new(0, 0, 0, 775); description.BackgroundTransparency = 1; description.Text = ""; description.TextColor3 = GetTheme().MenuTextColor; description.TextTransparency = GetTheme().MenuTextTransparency; description.TextSize = 35; description.TextStrokeTransparency = 1; description.TextWrapped = true; description.FontFace = STYLE.Font; description.Parent = infoGui; local backGui = Instance.new("SurfaceGui"); backGui.Name = "Back"; backGui.Face = Enum.NormalId.Back; backGui.SizingMode = Enum.SurfaceGuiSizingMode.PixelsPerStud; backGui.PixelsPerStud = 363.636; backGui.Parent = panel; local backText = Instance.new("TextLabel"); backText.Name = "Text"; backText.Position = UDim2.new(0, 0, 0, 300); backText.Size = UDim2.new(1, 0, 0, 80); backText.BackgroundTransparency = 1; backText.Text = "Made by Mertz"; backText.TextColor3 = Color3.fromRGB(255, 255, 255); backText.TextSize = 50; backText.TextStrokeTransparency = 1; backText.TextWrapped = true; backText.FontFace = STYLE.Font; backText.Parent = backGui; local disconnectButton = Instance.new("Part"); disconnectButton.Name = "DisconnectButton"; disconnectButton.Size = Vector3.new(1, 0.415, 0.085); disconnectButton.Position = Vector3.new(-0.707, 0.401, 0.027); disconnectButton.Material = Enum.Material.SmoothPlastic; disconnectButton.Color = Color3.fromRGB(155, 0, 0); disconnectButton.Anchored = true; disconnectButton.CanCollide = false; disconnectButton.CastShadow = false; disconnectButton.Parent = model; local textGui = Instance.new("SurfaceGui"); textGui.Name = "Text"; textGui.Face = Enum.NormalId.Front; textGui.SizingMode = Enum.SurfaceGuiSizingMode.PixelsPerStud; textGui.PixelsPerStud = 500; textGui.Parent = disconnectButton; local textLabel = Instance.new("TextLabel"); textLabel.Name = "TextLabel"; textLabel.Size = UDim2.new(1, 0, 1, 0); textLabel.Position = UDim2.new(0, 0, 0, 0); textLabel.BackgroundTransparency = 1; textLabel.Text = "Disconnect"; textLabel.TextColor3 = GetTheme().ButtonTextColor; textLabel.TextTransparency = GetTheme().ButtonTextTransparency; textLabel.TextSize = 100; textLabel.TextStrokeTransparency = 1; textLabel.TextWrapped = true; textLabel.FontFace = STYLE.Font; textLabel.Parent = textGui; local homeButton = Instance.new("Part"); homeButton.Name = "Home"; homeButton.Size = Vector3.new(0.4, 0.15, 0.05); homeButton.Position = Vector3.new(-0.319, 1.788, 0.027); homeButton.Material = Enum.Material.SmoothPlastic; homeButton.Color = Color3.fromRGB(0, 0, 0); homeButton.Anchored = true; homeButton.CanCollide = false; homeButton.CastShadow = false; homeButton.Parent = model; local homeGui = Instance.new("SurfaceGui"); homeGui.Face = Enum.NormalId.Front; homeGui.SizingMode = Enum.SurfaceGuiSizingMode.PixelsPerStud; homeGui.PixelsPerStud = 500; homeGui.Parent = homeButton; local homeText = Instance.new("TextLabel"); homeText.BackgroundTransparency = 1; homeText.Size = UDim2.new(1, 0, 1, 0); homeText.Position = UDim2.new(0, 0, 0, 0); homeText.Text = "Home"; homeText.TextTransparency = 1; homeText.TextScaled = true; homeText.FontFace = STYLE.Font; homeText.TextColor3 = GetTheme().ButtonTextColor; homeText.TextTransparency = GetTheme().ButtonTextTransparency; homeText.Parent = homeGui; local previousButton = Instance.new("Part"); previousButton.Name = "Previous"; previousButton.Size = BUTTON_SIZE; previousButton.Position = Vector3.new(0.839, 0.933, -0.025); previousButton.Material = Enum.Material.SmoothPlastic; previousButton.Color = Color3.fromRGB(0, 0, 0); previousButton.Anchored = true; previousButton.CanCollide = false; previousButton.CastShadow = false; previousButton.Parent = model; local previousGui = Instance.new("SurfaceGui"); previousGui.Name = "Text"; previousGui.Face = Enum.NormalId.Front; previousGui.SizingMode = Enum.SurfaceGuiSizingMode.PixelsPerStud; previousGui.PixelsPerStud = 363.636; previousGui.Parent = previousButton; previousText = Instance.new("TextLabel"); previousText.Name = "TextLabel"; previousText.Size = UDim2.new(1, 0, 1, 0); previousText.Position = UDim2.new(0, 0, 0, 0); previousText.BackgroundTransparency = 1; previousText.Text = "<"; previousText.TextColor3 = GetTheme().ButtonTextColor; previousText.TextTransparency = GetTheme().ButtonTextTransparency; previousText.TextScaled = true; previousText.TextStrokeTransparency = 1; previousText.TextWrapped = true; previousText.FontFace = STYLE.Font; previousText.Parent = previousGui; local nextButton = Instance.new("Part"); nextButton.Name = "Next"; nextButton.Size = BUTTON_SIZE; nextButton.Position = Vector3.new(0.839, 0.631, -0.025); nextButton.Material = Enum.Material.SmoothPlastic; nextButton.Color = Color3.fromRGB(0, 0, 0); nextButton.Anchored = true; nextButton.CanCollide = false; nextButton.CastShadow = false; nextButton.Parent = model; local nextGui = Instance.new("SurfaceGui"); nextGui.Name = "Text"; nextGui.Face = Enum.NormalId.Front; nextGui.SizingMode = Enum.SurfaceGuiSizingMode.PixelsPerStud; nextGui.PixelsPerStud = 363.636; nextGui.Parent = nextButton; nextText = Instance.new("TextLabel"); nextText.Name = "TextLabel"; nextText.Size = UDim2.new(1, 0, 1, 0); nextText.Position = UDim2.new(0, 0, 0, 0); nextText.BackgroundTransparency = 1; nextText.Text = ">"; nextText.TextColor3 = GetTheme().ButtonTextColor; nextText.TextTransparency = GetTheme().ButtonTextTransparency; nextText.TextScaled = true; nextText.TextStrokeTransparency = 1; nextText.TextWrapped = true; nextText.FontFace = STYLE.Font; nextText.Parent = nextGui; local function GetCurrentPageItems() local items = {}; for _, data in ipairs(ActiveMenu) do table.insert(items, data); end local startIndex = ((CurrentPage - 1) * ItemsPerPage) + 1; local endIndex = math.min((startIndex + ItemsPerPage) - 1, #items); local pageItems = {}; for i = startIndex, endIndex do table.insert(pageItems, items[i]); end return pageItems, #items; end local function GetPagedButtons() local pageItems, count = GetCurrentPageItems(); return pageItems, count; end local buttonPositions = Themes[currentTheme].ButtonPositions; local function GetMaxPages() local _, count = GetCurrentPageItems(); return math.max(1, math.ceil(count / ItemsPerPage)); end local function UpdateTopButtons() local visible = ActiveMenu ~= Home_Buttons; homeText.TextTransparency = (visible and 0) or 1; homeButton.Transparency = (visible and 0) or 1; end local function UpdatePageText() local theme = GetTheme(); local maxPages = GetMaxPages(); if previousText then if (currentTheme == 1) then previousText.Text = "<< Prev [" .. CurrentPage .. "]"; elseif (currentTheme == 2) then local prevPage = ((CurrentPage <= 1) and maxPages) or (CurrentPage - 1); previousText.Text = "<---Page" .. prevPage .. "--"; elseif (theme.PreviousText ~= nil) then previousText.Text = theme.PreviousText:gsub("%d+", tostring(CurrentPage)); else previousText.Text = ""; end end if nextText then if (currentTheme == 1) then nextText.Text = "[" .. CurrentPage .. "] >> Next"; elseif (currentTheme == 2) then local nextPage = ((CurrentPage >= maxPages) and 1) or (CurrentPage + 1); nextText.Text = "--Page" .. nextPage .. "--->"; elseif (theme.NextText ~= nil) then nextText.Text = theme.NextText:gsub("%d+", tostring(CurrentPage)); else nextText.Text = ""; end end if nameLabel then local menuName = theme.MenuName or ("Mertish's Holdable " .. version_); local pageFormat = theme.PageCount; if (currentTheme == 4) then nameLabel.RichText = true; nameLabel.Text = menuName .. ' [' .. CurrentPage .. ']'; else nameLabel.RichText = false; if pageFormat then pageFormat = pageFormat:gsub("%d+", tostring(CurrentPage)); nameLabel.Text = menuName .. " " .. pageFormat; else nameLabel.Text = menuName; end end end end local function GetPCItems() local items, count = GetCurrentPageItems(); return items, count; end local function UpdatePCSelection() if not pcMenu then return; end local items, count = GetPCItems(); if (count <= 0) then pcSelected = 1; return; end if (pcSelected < 1) then pcSelected = count; elseif (pcSelected > count) then pcSelected = 1; end for _, v in ipairs(model:GetChildren()) do if (v:IsA("Part") and v:GetAttribute("ButtonName")) then local name = v:GetAttribute("ButtonName"); local gui = v:FindFirstChildOfClass("SurfaceGui"); local text = gui and gui:FindFirstChildOfClass("TextLabel"); if text then local selected = false; for i, data in ipairs(items) do if ((data.Name == name) and (i == pcSelected)) then selected = true; break; end end if selected then text.Text = "> " .. name; else text.Text = name; end end end end end function BuildMenu() local theme = GetTheme(); description.Visible = theme.MenuDescription ~= false; nameLabel.TextColor3 = theme.MenuTextColor; nameLabel.TextTransparency = theme.MenuTextTransparency; nameLabel.TextSize = theme.MenuNameTextSize or 60; description.TextColor3 = theme.MenuTextColor; description.TextTransparency = theme.MenuTextTransparency; previousText.TextColor3 = theme.NavTextColor; previousText.TextTransparency = 0; nextText.TextColor3 = theme.NavTextColor; nextText.TextTransparency = 0; if (theme.PreviousText and (theme.PreviousText ~= "")) then previousText.Text = theme.PreviousText; end if (theme.NextText and (theme.NextText ~= "")) then nextText.Text = theme.NextText; end textLabel.TextColor3 = theme.DisconnectTextColor; textLabel.TextTransparency = 0; homeText.TextColor3 = theme.SearchHomeTextColor; homeText.TextTransparency = (theme.MenuDescription and 0) or 1; panel.Color = theme.MenuColor1; nextButton.Color = theme.NavColor; previousButton.Color = theme.NavColor; homeButton.Color = theme.NavColor; disconnectButton.Color = theme.DisconnectColor; if theme.NextPosition then nextButton.Position = theme.NextPosition; end if theme.PreviousPosition then previousButton.Position = theme.PreviousPosition; end if theme.NextSize then nextButton.Size = theme.NextSize; end if theme.PreviousSize then previousButton.Size = theme.PreviousSize; end local baseSize = theme.PanelSize or normalPanelSize; local extra = 0; if longMenu then extra = (longMenuButtons - 4) * longMenuSpacing; ItemsPerPage = longMenuButtons; buttonPositions = GetLongButtonPositions(theme, extra); else ItemsPerPage = theme.ItemsPerPage; buttonPositions = theme.ButtonPositions; end local newHeight = baseSize.Y + extra; local S = MS(); origin.Position = ORIGIN_POSITION * S; local panelOffsetY = -(newHeight - normalPanelSize.Y) / 2; panel.CFrame = model:GetPivot() * CFrame.new(0, panelOffsetY * S, 0); panel.Size = Vector3.new(baseSize.X, newHeight, baseSize.Z) * S; BUTTON_SIZE = theme.ButtonSize * S; local navOffset = (longMenu and (extra / 2)) or 0; disconnectButton.CFrame = panel.CFrame:ToWorldSpace(CFrame.new((theme.DisconnectPosition + Vector3.new(0, navOffset, 0)) * S)); disconnectButton.Size = theme.DisconnectSize * S; nextButton.CFrame = panel.CFrame:ToWorldSpace(CFrame.new((theme.NextPosition + Vector3.new(0, navOffset, 0)) * S)); nextButton.Size = theme.NextSize * S; previousButton.CFrame = panel.CFrame:ToWorldSpace(CFrame.new((theme.PreviousPosition + Vector3.new(0, navOffset, 0)) * S)); previousButton.Size = theme.PreviousSize * S; homeButton.CFrame = panel.CFrame:ToWorldSpace(CFrame.new((theme.HomePosition + Vector3.new(0, navOffset, 0)) * S)); homeButton.Size = theme.HomeSize * S; for _, v in ipairs(model:GetChildren()) do if (v:IsA("Part") and (v.Name ~= "Panel") and (v.Name ~= "Home") and (v.Name ~= "DisconnectButton") and (v.Name ~= "Next") and (v.Name ~= "Previous")) then v:Destroy(); end end local pageItems = GetPagedButtons(); local function CreateButton(name, data, pos) local buttonPart = Instance.new("Part"); buttonPart.Name = name; buttonPart.Size = BUTTON_SIZE; buttonPart.CFrame = panel.CFrame:ToWorldSpace(CFrame.new(pos * S)); buttonPart.Material = Enum.Material.SmoothPlastic; buttonPart.Color = theme.ButtonColor; buttonPart.Anchored = true; buttonPart.CanCollide = false; buttonPart.CastShadow = false; buttonPart.Parent = model; if (data.Toggleable and data.Toggled) then buttonPart.Color = theme.ToggleColor; end local gui = Instance.new("SurfaceGui"); gui.Face = Enum.NormalId.Front; gui.SizingMode = Enum.SurfaceGuiSizingMode.PixelsPerStud; gui.PixelsPerStud = STYLE.PixelsPerStud; gui.Parent = buttonPart; local text = Instance.new("TextLabel"); text.Size = UDim2.new(1, 0, 1, 0); text.BackgroundTransparency = 1; text.Text = (data.GetText and data.GetText()) or name; text.TextColor3 = theme.ButtonTextColor; text.TextTransparency = theme.ButtonTextTransparency; text.TextScaled = true; text.TextWrapped = true; text.FontFace = STYLE.Font; text.Parent = gui; if pcMenu then local items = GetPCItems(); for i, v in ipairs(items) do if ((v.Name == name) and (i == pcSelected)) then text.Text = "> " .. text.Text; break; end end end buttonPart:SetAttribute("ButtonName", name); return buttonPart; end for i = 1, ItemsPerPage do local item = pageItems[i]; if item then CreateButton(item.Name, item, buttonPositions[i]); end end UpdatePageText(); UpdateTopButtons(); for _, gui in ipairs(model:GetDescendants()) do if gui:IsA("SurfaceGui") then local base = gui:GetAttribute("BasePPS"); if not base then base = gui.PixelsPerStud; gui:SetAttribute("BasePPS", base); end gui.PixelsPerStud = base / S; end end end function OpenMenu(menuTable) ActiveMenu = menuTable; CurrentPage = 1; local soundName = soundOrder[currentSoundIndex]; local soundId = clicksounds[soundName]; local sound = Instance.new("Sound"); sound.SoundId = soundId; sound.Volume = 1; sound.Parent = game.Workspace; sound:Play(); game:GetService("Debris"):AddItem(sound, 2); BuildMenu(); UpdateTopButtons(); end local function NextPage() local maxPages = GetMaxPages(); if (CurrentPage >= maxPages) then CurrentPage = 1; else CurrentPage += 1 end BuildMenu(); end local function PrevPage() local maxPages = GetMaxPages(); if (CurrentPage <= 1) then CurrentPage = maxPages; else CurrentPage -= 1 end BuildMenu(); end local function isTouching(part, pos) local size = part.Size / 2; local relative = part.CFrame:PointToObjectSpace(pos); return (math.abs(relative.X) <= size.X) and (math.abs(relative.Y) <= size.Y) and (math.abs(relative.Z) <= size.Z); end NotificationSystem = {}; NotificationSystem.Stack = {}; NotificationSystem.Max = 5; NotificationSystem.Distance = 8; NotificationSystem.Left = -1.5; NotificationSystem.Down = -3.2; NotificationSystem.Spacing = 0.55; NotificationSystem.Enabled = false; NotificationSystem.Create = function(message) if not NotificationSystem.Enabled then return; end local part = Instance.new("Part"); part.Name = "MenuNotification"; part.Size = Vector3.new(6, 0.5, 0.03); part.Anchored = true; part.CanCollide = false; part.CanTouch = false; part.CanQuery = false; part.Transparency = 1; part.CastShadow = false; part.Parent = workspace; local gui = Instance.new("SurfaceGui"); gui.Name = "NotificationGui"; gui.Face = Enum.NormalId.Front; gui.AlwaysOnTop = true; gui.LightInfluence = 0; gui.SizingMode = Enum.SurfaceGuiSizingMode.PixelsPerStud; gui.PixelsPerStud = 100; gui.Parent = part; local text = Instance.new("TextLabel"); text.Size = UDim2.fromScale(1, 1); text.BackgroundTransparency = 1; text.Text = ""; text.TextColor3 = Color3.new(1, 1, 1); text.TextScaled = false; text.TextWrapped = false; text.TextSize = 34; text.RichText = true; text.FontFace = Font.new("rbxasset://fonts/families/Arimo.json", Enum.FontWeight.Regular, Enum.FontStyle.Italic); text.TextXAlignment = Enum.TextXAlignment.Left; text.TextYAlignment = Enum.TextYAlignment.Center; text.Text = '[ToolTip] ' .. tostring(message) .. ""; text.Parent = gui; local notification = {part=part,text=text,message=tostring(message),born=os.clock()}; table.insert(NotificationSystem.Stack, notification); if (#NotificationSystem.Stack > NotificationSystem.Max) then local old = table.remove(NotificationSystem.Stack, 1); if (old and old.part) then old.part:Destroy(); end end task.delay(5, function() for i, v in ipairs(NotificationSystem.Stack) do if (v == notification) then table.remove(NotificationSystem.Stack, i); break; end end if notification.part then notification.part:Destroy(); end end); return part; end; RS.RenderStepped:Connect(function() if not NotificationSystem.Enabled then return; end local t = (math.sin(((os.clock() % 2.4) / 2.4) * math.pi * 2) + 1) / 2; local color = GetTheme().MenuColor1:Lerp(GetTheme().MenuColor2, t); local r = math.floor((color.R * 255) + 0.5); local g = math.floor((color.G * 255) + 0.5); local b = math.floor((color.B * 255) + 0.5); for _, v in ipairs(NotificationSystem.Stack) do if (v.text and v.text.Parent) then v.text.Text = '[ToolTip] ' .. v.message .. ""; end end end); RS:BindToRenderStep("MenuNotifications", Enum.RenderPriority.Last.Value, function() local camera = workspace.CurrentCamera; if not camera then return; end local headVR = VRService:GetUserCFrame(Enum.UserCFrame.Head); local headCF = camera.CFrame * CFrame.new(headVR.Position * camera.HeadScale) * headVR.Rotation; for i, data in ipairs(NotificationSystem.Stack) do if (data.part and data.part.Parent) then data.part.CFrame = headCF * CFrame.new(NotificationSystem.Left, NotificationSystem.Down + ((i - 1) * NotificationSystem.Spacing), -NotificationSystem.Distance); end end end); RS.RenderStepped:Connect(function() if (not holding or (model.Parent ~= workspace)) then return; end local cursor = workspace:FindFirstChild("VR_Cursor_MENUUUU"); if not cursor then return; end if ((os.clock() - lastClick) < 0.271) then return; end for _, obj in ipairs(model:GetChildren()) do if (obj:IsA("Part") and (obj.Name ~= "Panel") and (obj.Name ~= "Origin") and isTouching(obj, cursor.Position)) then lastClick = os.clock(); local oldColor = obj.Color; if ((obj.Name ~= "Next") and (obj.Name ~= "Previous")) then obj.Color = Color3.fromRGB(255, 0, 0); end local sound = Instance.new("Sound"); sound.SoundId = clicksounds[soundOrder[currentSoundIndex]]; sound.Volume = 1; sound.Parent = obj; sound:Play(); game:GetService("Debris"):AddItem(sound, 2); local data; for _, v in ipairs(GetCurrentPageItems()) do if (v.Name == obj.Name) then data = v; break; end end if (obj.Name == "Next") then NextPage(); elseif (obj.Name == "Previous") then PrevPage(); elseif ((obj.Name == "Home") and (ActiveMenu ~= Home_Buttons)) then OpenMenu(Home_Buttons); elseif (obj.Name == "DisconnectButton") then model:Destroy(); local cursor = workspace:FindFirstChild("VR_Cursor_MENUUUU"); if cursor then cursor:Destroy(); end for _, v in ipairs(Menus) do for _, data in ipairs(v) do if (data.Enabled and data.Disable) then pcall(data.Disable); end data.Enabled = false; data.Toggled = false; end end holding = false; pcMenu = false; elseif data then local desc = data.Description or ""; description.Text = data.Name .. ": " .. desc; if (desc ~= "") then NotificationSystem.Create(desc); else NotificationSystem.Create(data.Name); end if data.Toggleable then data.Enabled = not data.Enabled; data.Toggled = data.Enabled; if data.Enabled then if data.Enable then data.Enable(); end elseif data.Disable then data.Disable(); end obj.Color = (data.Enabled and GetTheme().ToggleColor) or GetTheme().ButtonColor; elseif data.Enable then data.Enable(); end end task.delay(0.271, function() if (obj and obj.Parent and (obj.Name ~= "Next") and (obj.Name ~= "Previous")) then if (data and data.Toggleable) then obj.Color = (data.Enabled and GetTheme().ToggleColor) or GetTheme().ButtonColor; else obj.Color = oldColor; end end end); return; end end end); UIS.InputBegan:Connect(function(i, g) if g then return; end if (i.KeyCode == Enum.KeyCode.Q) then if holding then return; end pcMenu = true; pcSelected = 1; holding = true; model.Parent = workspace; local camera = workspace.CurrentCamera; if camera then model:PivotTo(camera.CFrame * CFrame.new(0, 0, -3 * MS()) * CFrame.Angles(0, math.rad(180), 0)); end BuildMenu(); UpdatePCSelection(); end if (i.KeyCode == Enum.KeyCode.P) then if pcMenu then pcMenu = false; holding = false; model.Parent = Lighting; local cursor = workspace:FindFirstChild("VR_Cursor_MENUUUU"); if cursor then cursor:Destroy(); end end end if not pcMenu then return; end if ((i.KeyCode == Enum.KeyCode.W) or (i.KeyCode == Enum.KeyCode.Up)) then local now = os.clock(); if ((now - pcLastMove) >= pcMoveDelay) then pcLastMove = now; local _, count = GetPCItems(); if (count > 0) then pcSelected -= 1 if (pcSelected < 1) then pcSelected = count; end BuildMenu(); end end elseif ((i.KeyCode == Enum.KeyCode.S) or (i.KeyCode == Enum.KeyCode.Down)) then local now = os.clock(); if ((now - pcLastMove) >= pcMoveDelay) then pcLastMove = now; local _, count = GetPCItems(); if (count > 0) then pcSelected += 1 if (pcSelected > count) then pcSelected = 1; end BuildMenu(); end end elseif (i.KeyCode == Enum.KeyCode.Left) then PrevPage(); pcSelected = 1; BuildMenu(); elseif (i.KeyCode == Enum.KeyCode.Right) then NextPage(); pcSelected = 1; BuildMenu(); elseif (i.KeyCode == Enum.KeyCode.Return) then local items = GetPCItems(); local data = items[pcSelected]; if data then if data.Toggleable then data.Enabled = not data.Enabled; data.Toggled = data.Enabled; if data.Enabled then if data.Enable then data.Enable(); end elseif data.Disable then data.Disable(); end elseif data.Enable then data.Enable(); end BuildMenu(); end end end); UIS.InputEnded:Connect(function(i) if ((i.KeyCode == Enum.KeyCode.Q) and pcMenu) then pcMenu = false; holding = false; MenuFall(); local cursor = workspace:FindFirstChild("VR_Cursor_MENUUUU"); if cursor then cursor:Destroy(); end end end); BuildMenu();