--======================================================== -- RSR STUDIO - SHOOTER PANEL ENHANCED -- ONE LOCAL SCRIPT -- Existing tabs preserved: PVP / MOVEMENT / SETTINGS -- Added: BETTER FPS + INFORMATION + INVISIBLE (LOCAL) --======================================================== -- SERVICES local Players = game:GetService("Players") local UIS = game:GetService("UserInputService") local RunService = game:GetService("RunService") local TweenService = game:GetService("TweenService") local Lighting = game:GetService("Lighting") local LocalPlayer = Players.LocalPlayer local Camera = workspace.CurrentCamera --======================================================== -- SETTINGS --======================================================== local Settings = { OpenKey = Enum.KeyCode.K, -- PVP AimAssist = false, AimKey = Enum.UserInputType.MouseButton2, AimKeyName = "RIGHT MOUSE", ESP = false, Tracers = false, FOVEnabled = true, FOV = 120, AimSmoothness = 0.15, Hitbox = 0, -- MOVEMENT SpeedEnabled = false, Speed = 16, FlyEnabled = false, FlySpeed = 50, SpinEnabled = false, SpinSpeed = 5, -- CAMERA / FIRST PERSON CameraFOV = 120, ArmsEnabled = false, ArmDistance = 0, -- VISUALS RainEnabled = true, MirrorEnabled = true, NeonAnimations = true, -- BETTER FPS BetterFPSEnabled = false, -- INVISIBILITY Invisible = false, -- COLORS ESPColor = Color3.fromRGB(255, 70, 70), TracerColor = Color3.fromRGB(255, 255, 255), FOVColor = Color3.fromRGB(255, 255, 255), GuiOpen = true, SoundsEnabled = true, } -- Roblox's native Camera.FieldOfView cannot exceed 120 degrees. local NATIVE_FOV_MAX = 120 --======================================================== -- UI SOUNDS + PRESS ANIMATION -- Change the Id values below to any sound you like, -- e.g. "rbxassetid://123456789" --======================================================== local SoundService = game:GetService("SoundService") local SoundIDs = { Click = {Id = "rbxasset://sounds/button.wav", Volume = 0.6}, Toggle = {Id = "rbxasset://sounds/switch.wav", Volume = 0.6}, } local function PlaySound(Name) if not Settings.SoundsEnabled then return end local Data = SoundIDs[Name] if not Data then return end local Sound = Instance.new("Sound") Sound.SoundId = Data.Id Sound.Volume = Data.Volume Sound.Parent = SoundService Sound:Play() task.delay(3, function() if Sound then Sound:Destroy() end end) end -- Button shrinks when pressed, springs back on release, plays a click sound. local function AddPressAnimation(Button, SoundName) local Scale = Button:FindFirstChildOfClass("UIScale") or Instance.new("UIScale") Scale.Scale = 1 Scale.Parent = Button Button.MouseButton1Down:Connect(function() TweenService:Create( Scale, TweenInfo.new(0.07, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Scale = 0.94} ):Play() end) local function Release() TweenService:Create( Scale, TweenInfo.new(0.25, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {Scale = 1} ):Play() end Button.MouseButton1Up:Connect(Release) Button.MouseLeave:Connect(Release) Button.MouseButton1Click:Connect(function() PlaySound(SoundName or "Click") end) end --======================================================== -- GUI ROOT --======================================================== local Gui = Instance.new("ScreenGui") Gui.Name = "RSR_Studio_Shooter" Gui.ResetOnSpawn = false Gui.IgnoreGuiInset = true Gui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling Gui.Parent = LocalPlayer:WaitForChild("PlayerGui") --======================================================== -- MAIN WINDOW --======================================================== local Main = Instance.new("Frame") Main.Name = "Main" Main.Size = UDim2.new(0, 800, 0, 540) Main.Position = UDim2.new(0.5, -400, 0.5, -270) Main.BackgroundColor3 = Color3.fromRGB(7, 9, 14) Main.BorderSizePixel = 0 Main.ClipsDescendants = true Main.ZIndex = 5 Main.Parent = Gui local MainCorner = Instance.new("UICorner") MainCorner.CornerRadius = UDim.new(0, 26) MainCorner.Parent = Main local MainStroke = Instance.new("UIStroke") MainStroke.Color = Color3.fromRGB(95, 105, 145) MainStroke.Thickness = 1.5 MainStroke.Transparency = 0.1 MainStroke.Parent = Main local MainGradient = Instance.new("UIGradient") MainGradient.Rotation = 35 MainGradient.Color = ColorSequence.new({ ColorSequenceKeypoint.new(0, Color3.fromRGB(8, 11, 20)), ColorSequenceKeypoint.new(0.5, Color3.fromRGB(11, 13, 21)), ColorSequenceKeypoint.new(1, Color3.fromRGB(5, 8, 13)), }) MainGradient.Parent = Main local MainScale = Instance.new("UIScale") MainScale.Scale = 1 MainScale.Parent = Main --======================================================== -- NEON BRAND / REFLECTION --======================================================== local Reflection = Instance.new("Frame") Reflection.Name = "ReflectionSweep" Reflection.Size = UDim2.new(0, 180, 1.6, 0) Reflection.Position = UDim2.new(-0.2, 0, -0.3, 0) Reflection.BackgroundColor3 = Color3.fromRGB(255, 255, 255) Reflection.BackgroundTransparency = 0.94 Reflection.BorderSizePixel = 0 Reflection.Rotation = 18 Reflection.ZIndex = 8 Reflection.Parent = Main local ReflectionGradient = Instance.new("UIGradient") ReflectionGradient.Transparency = NumberSequence.new({ NumberSequenceKeypoint.new(0, 1), NumberSequenceKeypoint.new(0.45, 0.85), NumberSequenceKeypoint.new(0.5, 0.2), NumberSequenceKeypoint.new(0.55, 0.85), NumberSequenceKeypoint.new(1, 1), }) ReflectionGradient.Parent = Reflection local GlassGlow = Instance.new("Frame") GlassGlow.Name = "GlassGlow" GlassGlow.Size = UDim2.new(1, -12, 1, -12) GlassGlow.Position = UDim2.new(0, 6, 0, 6) GlassGlow.BackgroundTransparency = 1 GlassGlow.BorderSizePixel = 0 GlassGlow.ZIndex = 7 GlassGlow.Parent = Main local GlassStroke = Instance.new("UIStroke") GlassStroke.Color = Color3.fromRGB(90, 210, 255) GlassStroke.Thickness = 1 GlassStroke.Transparency = 0.72 GlassStroke.Parent = GlassGlow local GlassCorner = Instance.new("UICorner") GlassCorner.CornerRadius = UDim.new(0, 17) GlassCorner.Parent = GlassGlow --======================================================== -- EXTRA NEON / RTX-STYLE GUI FX --======================================================== local NeonGlows = {} for i, data in ipairs({ {size = 2, transparency = 0.52}, {size = 4, transparency = 0.70}, {size = 7, transparency = 0.84}, {size = 11, transparency = 0.92}, {size = 16, transparency = 0.965}, }) do local Glow = Main:Clone() Glow.Name = "NeonGlow_" .. i Glow.BackgroundTransparency = 1 Glow.BorderSizePixel = 0 Glow.ClipsDescendants = true Glow.Position = UDim2.new(0, -data.size, 0, -data.size) Glow.Size = UDim2.new(1, data.size * 2, 1, data.size * 2) Glow.ZIndex = 3 for _, child in ipairs(Glow:GetChildren()) do child:Destroy() end local Stroke = Instance.new("UIStroke") Stroke.Thickness = data.size Stroke.Transparency = data.transparency Stroke.Color = Color3.fromRGB(55, 245, 255) Stroke.Parent = Glow local Corner = Instance.new("UICorner") Corner.CornerRadius = UDim.new(0, 26 + data.size) Corner.Parent = Glow Glow.Parent = Main table.insert(NeonGlows, Stroke) end local RTXLabel = Instance.new("TextLabel") RTXLabel.Name = "RTXStyle" RTXLabel.Size = UDim2.new(0, 90, 0, 22) RTXLabel.Position = UDim2.new(1, -105, 0, 20) RTXLabel.BackgroundTransparency = 1 RTXLabel.Text = "RTX STYLE" RTXLabel.TextSize = 10 RTXLabel.Font = Enum.Font.GothamBlack RTXLabel.TextColor3 = Color3.fromRGB(80, 255, 245) RTXLabel.TextStrokeTransparency = 0.35 RTXLabel.TextStrokeColor3 = Color3.fromRGB(20, 130, 255) RTXLabel.ZIndex = 16 RTXLabel.Parent = Main local NeonTitle = Instance.new("TextLabel") NeonTitle.Name = "NeonRSRTitle" NeonTitle.Size = UDim2.new(0, 500, 0, 40) NeonTitle.Position = UDim2.new(0.5, -250, 0, 3) NeonTitle.BackgroundTransparency = 1 NeonTitle.Text = "RSR SCRIPT STUDIO" NeonTitle.TextSize = 28 NeonTitle.Font = Enum.Font.GothamBlack NeonTitle.TextXAlignment = Enum.TextXAlignment.Center NeonTitle.TextColor3 = Color3.fromRGB(110, 255, 248) NeonTitle.TextStrokeTransparency = 0.04 NeonTitle.TextStrokeColor3 = Color3.fromRGB(0, 125, 255) NeonTitle.ZIndex = 17 NeonTitle.Parent = Main local NeonTitleGlow = NeonTitle:Clone() NeonTitleGlow.Name = "NeonRSRTitleGlow" NeonTitleGlow.TextTransparency = 0.65 NeonTitleGlow.ZIndex = 16 NeonTitleGlow.Parent = Main -- Neon bushes / vines in every corner. local BushLayer = Instance.new("Frame") BushLayer.Name = "RTXCornerBushes" BushLayer.Size = UDim2.fromScale(1, 1) BushLayer.BackgroundTransparency = 1 BushLayer.ZIndex = 13 BushLayer.Parent = Main local Bushes = {} local function CreateBushCorner(xScale, yScale, flipX, flipY) local Holder = Instance.new("Frame") Holder.Size = UDim2.fromOffset(145, 115) Holder.Position = UDim2.new(xScale, flipX and -116 or -4, yScale, flipY and -91 or -4) Holder.BackgroundTransparency = 1 Holder.ZIndex = 13 Holder.Parent = BushLayer local BaseGlow = Instance.new("Frame") BaseGlow.Size = UDim2.fromOffset(118, 82) BaseGlow.Position = UDim2.new(0, flipX and 20 or 6, 0, flipY and 27 or 6) BaseGlow.BackgroundColor3 = Color3.fromRGB(30, 255, 220) BaseGlow.BackgroundTransparency = 0.91 BaseGlow.BorderSizePixel = 0 BaseGlow.ZIndex = 13 BaseGlow.Parent = Holder local bc = Instance.new("UICorner") bc.CornerRadius = UDim.new(1, 0) bc.Parent = BaseGlow for i = 1, 40 do local Leaf = Instance.new("Frame") local px = (i % 5) * 18 + math.random(-5, 5) local py = math.floor((i - 1) / 5) * 20 + math.random(-5, 5) Leaf.Size = UDim2.fromOffset(math.random(16, 38), math.random(12, 30)) Leaf.Position = UDim2.new(0, flipX and (88-px) or px, 0, flipY and (70-py) or py) Leaf.Rotation = math.random(-55, 55) Leaf.BackgroundColor3 = Color3.fromRGB(10 + math.random(0, 35), 110 + math.random(0, 120), 70 + math.random(0, 150)) Leaf.BackgroundTransparency = math.random(28, 55) / 100 Leaf.BorderSizePixel = 0 Leaf.ZIndex = 14 Leaf.Parent = Holder local lc = Instance.new("UICorner") lc.CornerRadius = UDim.new(1, 0) lc.Parent = Leaf local ls = Instance.new("UIStroke") ls.Thickness = math.random(1, 2) ls.Transparency = 0.32 ls.Color = Color3.fromRGB(70, 255, 230) ls.Parent = Leaf table.insert(Bushes, {part = Leaf, base = Leaf.Rotation, phase = math.random() * math.pi * 2}) end end CreateBushCorner(0, 0, false, false) CreateBushCorner(1, 0, true, false) CreateBushCorner(0, 1, false, true) CreateBushCorner(1, 1, true, true) local CornerRays = {} for corner = 1, 4 do for ray = 1, 6 do local Beam = Instance.new("Frame") Beam.Name = "RTX_CornerRay_" .. corner .. "_" .. ray Beam.Size = UDim2.fromOffset(math.random(30, 75), math.random(1, 3)) Beam.BackgroundColor3 = Color3.fromRGB(70, 255, 240) Beam.BackgroundTransparency = 0.68 Beam.BorderSizePixel = 0 Beam.ZIndex = 12 Beam.AnchorPoint = Vector2.new(0.5, 0.5) Beam.Rotation = ((corner == 2 or corner == 4) and -1 or 1) * math.random(18, 48) local x = (corner == 2 or corner == 4) and 1 or 0 local y = (corner >= 3) and 1 or 0 Beam.Position = UDim2.new(x, x == 1 and -28 or 28, y, y == 1 and -28 or 28) Beam.Parent = BushLayer local c = Instance.new("UICorner") c.CornerRadius = UDim.new(1, 0) c.Parent = Beam table.insert(CornerRays, {part = Beam, phase = math.random() * math.pi * 2}) end end -- Small reflective strips for a glass / ray-traced look. for i = 1, 8 do local Strip = Instance.new("Frame") Strip.Name = "RTXReflectiveStrip" .. i Strip.Size = UDim2.new(0, 70 + i * 10, 0, 1) Strip.Position = UDim2.new(0, 20 + (i - 1) * 15, 1, -18 - (i - 1) * 4) Strip.BackgroundColor3 = Color3.fromRGB(90, 245, 255) Strip.BackgroundTransparency = 0.6 Strip.BorderSizePixel = 0 Strip.Rotation = -5 Strip.ZIndex = 14 Strip.Parent = Main end --======================================================== -- RAIN OVERLAY --======================================================== local Rain = Instance.new("Frame") Rain.Name = "Rain" Rain.Size = UDim2.fromScale(1, 1) Rain.BackgroundTransparency = 1 Rain.ClipsDescendants = true Rain.ZIndex = 4 Rain.Parent = Main local function CreateRainDrop() if not Settings.RainEnabled or not Rain.Parent then return end local Drop = Instance.new("Frame") Drop.Name = "Drop" local height = math.random(18, 48) local width = math.random(1, 2) Drop.Size = UDim2.new(0, width, 0, height) Drop.Position = UDim2.new(math.random(-10, 110) / 100, 0, -0.1, 0) Drop.BackgroundColor3 = Color3.fromRGB(90, 175, 255) Drop.BackgroundTransparency = math.random(35, 72) / 100 Drop.BorderSizePixel = 0 Drop.Rotation = math.random(-8, 8) Drop.ZIndex = 4 Drop.Parent = Rain local DropCorner = Instance.new("UICorner") DropCorner.CornerRadius = UDim.new(1, 0) DropCorner.Parent = Drop local duration = math.random(55, 120) / 100 local xShift = math.random(-25, 25) / 1000 TweenService:Create( Drop, TweenInfo.new(duration, Enum.EasingStyle.Linear), { Position = UDim2.new( Drop.Position.X.Scale + xShift, 0, 1.2, 0 ), BackgroundTransparency = 0.94, } ):Play() task.delay(duration, function() if Drop then Drop:Destroy() end end) end task.spawn(function() while Gui.Parent do if Settings.RainEnabled then for _ = 1, 2 do CreateRainDrop() end end task.wait(0.045) end end) --======================================================== -- DECORATIVE BACKGROUND / CURVATURE --======================================================== local AccentTop = Instance.new("Frame") AccentTop.Size = UDim2.new(1, -40, 0, 2) AccentTop.Position = UDim2.new(0, 20, 0, 70) AccentTop.BorderSizePixel = 0 AccentTop.ZIndex = 14 AccentTop.Parent = Main local AccentGradient = Instance.new("UIGradient") AccentGradient.Color = ColorSequence.new({ ColorSequenceKeypoint.new(0, Color3.fromRGB(0, 255, 230)), ColorSequenceKeypoint.new(0.5, Color3.fromRGB(95, 140, 255)), ColorSequenceKeypoint.new(1, Color3.fromRGB(255, 70, 210)), }) AccentGradient.Parent = AccentTop local AccentCorner = Instance.new("UICorner") AccentCorner.CornerRadius = UDim.new(1, 0) AccentCorner.Parent = AccentTop --======================================================== -- SUBTITLE --======================================================== local SubTitle = Instance.new("TextLabel") SubTitle.Size = UDim2.new(0, 450, 0, 25) SubTitle.Position = UDim2.new(0, 27, 0, 52) SubTitle.BackgroundTransparency = 1 SubTitle.Text = "DEVELOPER CONTROL PANEL" SubTitle.TextColor3 = Color3.fromRGB(110, 120, 140) SubTitle.TextSize = 11 SubTitle.Font = Enum.Font.GothamBold SubTitle.TextXAlignment = Enum.TextXAlignment.Left SubTitle.ZIndex = 14 SubTitle.Parent = Main --======================================================== -- SIDEBAR / CONTENT --======================================================== local Sidebar = Instance.new("Frame") Sidebar.Size = UDim2.new(0, 185, 1, -105) Sidebar.Position = UDim2.new(0, 15, 0, 92) Sidebar.BackgroundColor3 = Color3.fromRGB(12, 15, 22) Sidebar.BackgroundTransparency = 0.08 Sidebar.BorderSizePixel = 0 Sidebar.ZIndex = 10 Sidebar.Parent = Main local SidebarCorner = Instance.new("UICorner") SidebarCorner.CornerRadius = UDim.new(0, 14) SidebarCorner.Parent = Sidebar local SidebarStroke = Instance.new("UIStroke") SidebarStroke.Color = Color3.fromRGB(60, 75, 105) SidebarStroke.Transparency = 0.4 SidebarStroke.Parent = Sidebar local Content = Instance.new("Frame") Content.Size = UDim2.new(1, -220, 1, -105) Content.Position = UDim2.new(0, 205, 0, 92) Content.BackgroundTransparency = 1 Content.ZIndex = 10 Content.Parent = Main --======================================================== -- TABS (ORIGINAL TABS KEPT) --======================================================== local Tabs = {} local Pages = {} local function CreateTab(Name, Text, Order) local Button = Instance.new("TextButton") Button.Name = Name Button.Size = UDim2.new(1, -20, 0, 45) Button.Position = UDim2.new(0, 10, 0, 10 + (Order - 1) * 55) Button.BackgroundColor3 = Color3.fromRGB(20, 24, 34) Button.BackgroundTransparency = 0.4 Button.BorderSizePixel = 0 Button.Text = Text Button.TextColor3 = Color3.fromRGB(160, 165, 180) Button.TextSize = 13 Button.Font = Enum.Font.GothamBold Button.ZIndex = 12 Button.AutoButtonColor = false Button.Parent = Sidebar local Corner = Instance.new("UICorner") Corner.CornerRadius = UDim.new(0, 10) Corner.Parent = Button local Stroke = Instance.new("UIStroke") Stroke.Color = Color3.fromRGB(70, 85, 120) Stroke.Transparency = 0.75 Stroke.Parent = Button Tabs[Name] = Button AddPressAnimation(Button, "Click") Button.MouseEnter:Connect(function() if Button.BackgroundColor3 ~= Color3.fromRGB(55, 65, 90) then TweenService:Create( Button, TweenInfo.new(0.15, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {BackgroundColor3 = Color3.fromRGB(33, 39, 55)} ):Play() end end) Button.MouseLeave:Connect(function() if Button.BackgroundColor3 ~= Color3.fromRGB(55, 65, 90) then TweenService:Create( Button, TweenInfo.new(0.15, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {BackgroundColor3 = Color3.fromRGB(20, 24, 34)} ):Play() end end) return Button end local function CreatePage(Name) local Page = Instance.new("ScrollingFrame") Page.Name = Name Page.Size = UDim2.fromScale(1, 1) Page.BackgroundTransparency = 1 Page.BorderSizePixel = 0 Page.ScrollBarThickness = 3 Page.ScrollBarImageColor3 = Color3.fromRGB(80, 90, 120) Page.CanvasSize = UDim2.new(0, 0, 0, 1000) Page.AutomaticCanvasSize = Enum.AutomaticSize.Y Page.ScrollingDirection = Enum.ScrollingDirection.Y Page.Visible = false Page.ZIndex = 11 Page.Parent = Content Pages[Name] = Page return Page end -- Existing tabs CreateTab("PVP", "PVP", 1) CreateTab("MOVEMENT", "MOVEMENT", 2) CreateTab("SETTINGS", "SETTINGS", 3) -- New tab CreateTab("BETTERFPS", "BETTER FPS", 4) CreateTab("INFO", "INFORMATION", 5) local PVP = CreatePage("PVP") local Movement = CreatePage("MOVEMENT") local SettingsPage = CreatePage("SETTINGS") local BetterFPS = CreatePage("BETTERFPS") local InfoPage = CreatePage("INFO") local function SwitchPage(Name) for PageName, Page in pairs(Pages) do local Show = PageName == Name if Show and not Page.Visible then Page.Position = UDim2.new(0, 0, 0, 18) Page.Visible = true TweenService:Create( Page, TweenInfo.new(0.28, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {Position = UDim2.new(0, 0, 0, 0)} ):Play() else Page.Visible = Show end end for TabName, Button in pairs(Tabs) do local Selected = TabName == Name TweenService:Create( Button, TweenInfo.new(0.16, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), { BackgroundColor3 = Selected and Color3.fromRGB(55, 65, 90) or Color3.fromRGB(20, 24, 34), TextColor3 = Selected and Color3.fromRGB(255, 255, 255) or Color3.fromRGB(160, 165, 180), } ):Play() end end for Name, Button in pairs(Tabs) do Button.MouseButton1Click:Connect(function() SwitchPage(Name) end) end SwitchPage("PVP") --======================================================== -- UI HELPERS --======================================================== local function CreateSection(Page, Text, Y) local Label = Instance.new("TextLabel") Label.Size = UDim2.new(1, -20, 0, 30) Label.Position = UDim2.new(0, 10, 0, Y) Label.BackgroundTransparency = 1 Label.Text = Text Label.TextColor3 = Color3.fromRGB(110, 150, 255) Label.TextSize = 12 Label.Font = Enum.Font.GothamBold Label.TextXAlignment = Enum.TextXAlignment.Left Label.ZIndex = 12 Label.Parent = Page return Label end local function CreateToggle(Page, Text, Y, Default, Callback) local Button = Instance.new("TextButton") Button.Size = UDim2.new(1, -20, 0, 42) Button.Position = UDim2.new(0, 10, 0, Y) Button.BackgroundColor3 = Color3.fromRGB(18, 22, 31) Button.BorderSizePixel = 0 Button.Text = "" Button.ZIndex = 12 Button.AutoButtonColor = false Button.Parent = Page local Corner = Instance.new("UICorner") Corner.CornerRadius = UDim.new(0, 10) Corner.Parent = Button local Stroke = Instance.new("UIStroke") Stroke.Color = Color3.fromRGB(62, 73, 97) Stroke.Transparency = 0.68 Stroke.Parent = Button local Label = Instance.new("TextLabel") Label.Size = UDim2.new(1, -65, 1, 0) Label.Position = UDim2.new(0, 15, 0, 0) Label.BackgroundTransparency = 1 Label.Text = Text Label.TextColor3 = Color3.fromRGB(220, 223, 230) Label.TextSize = 13 Label.Font = Enum.Font.GothamMedium Label.TextXAlignment = Enum.TextXAlignment.Left Label.ZIndex = 13 Label.Parent = Button local Status = Instance.new("TextLabel") Status.Size = UDim2.new(0, 45, 1, 0) Status.Position = UDim2.new(1, -55, 0, 0) Status.BackgroundTransparency = 1 Status.TextSize = 11 Status.Font = Enum.Font.GothamBold Status.ZIndex = 13 Status.Parent = Button local State = Default local StatusScale = Instance.new("UIScale") StatusScale.Parent = Status local function Update(Animate) Status.Text = State and "ON" or "OFF" Status.TextColor3 = State and Color3.fromRGB(80, 255, 150) or Color3.fromRGB(120, 125, 135) local TargetColor = State and Color3.fromRGB(25, 38, 38) or Color3.fromRGB(18, 22, 31) if Animate then TweenService:Create( Button, TweenInfo.new(0.25, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {BackgroundColor3 = TargetColor} ):Play() StatusScale.Scale = 1.6 TweenService:Create( StatusScale, TweenInfo.new(0.35, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {Scale = 1} ):Play() else Button.BackgroundColor3 = TargetColor end end AddPressAnimation(Button, "Toggle") Button.MouseEnter:Connect(function() TweenService:Create( Button, TweenInfo.new(0.12, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {Size = UDim2.new(1, -16, 0, 44)} ):Play() end) Button.MouseLeave:Connect(function() TweenService:Create( Button, TweenInfo.new(0.12, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {Size = UDim2.new(1, -20, 0, 42)} ):Play() end) Button.MouseButton1Click:Connect(function() State = not State Update(true) Callback(State) end) Update() return Button end local function CreateSlider(Page, Text, Y, Min, Max, Default, Callback) local Holder = Instance.new("Frame") Holder.Size = UDim2.new(1, -20, 0, 65) Holder.Position = UDim2.new(0, 10, 0, Y) Holder.BackgroundColor3 = Color3.fromRGB(18, 22, 31) Holder.BorderSizePixel = 0 Holder.ZIndex = 12 Holder.Parent = Page local Corner = Instance.new("UICorner") Corner.CornerRadius = UDim.new(0, 10) Corner.Parent = Holder local Stroke = Instance.new("UIStroke") Stroke.Color = Color3.fromRGB(62, 73, 97) Stroke.Transparency = 0.68 Stroke.Parent = Holder local Label = Instance.new("TextLabel") Label.Size = UDim2.new(0.7, 0, 0, 28) Label.Position = UDim2.new(0, 15, 0, 3) Label.BackgroundTransparency = 1 Label.Text = Text Label.TextColor3 = Color3.fromRGB(220, 223, 230) Label.TextSize = 12 Label.Font = Enum.Font.GothamMedium Label.TextXAlignment = Enum.TextXAlignment.Left Label.ZIndex = 13 Label.Parent = Holder local Value = Instance.new("TextLabel") Value.Size = UDim2.new(0, 80, 0, 28) Value.Position = UDim2.new(1, -95, 0, 3) Value.BackgroundTransparency = 1 Value.TextColor3 = Color3.fromRGB(110, 150, 255) Value.TextSize = 12 Value.Font = Enum.Font.GothamBold Value.ZIndex = 13 Value.Parent = Holder local Bar = Instance.new("Frame") Bar.Size = UDim2.new(1, -30, 0, 5) Bar.Position = UDim2.new(0, 15, 0, 46) Bar.BackgroundColor3 = Color3.fromRGB(45, 50, 65) Bar.BorderSizePixel = 0 Bar.ZIndex = 13 Bar.Parent = Holder local BarCorner = Instance.new("UICorner") BarCorner.CornerRadius = UDim.new(1, 0) BarCorner.Parent = Bar local Fill = Instance.new("Frame") local InitialPercent = math.clamp((Default - Min) / math.max(Max - Min, 0.0001), 0, 1) Fill.Size = UDim2.new(InitialPercent, 0, 1, 0) Fill.BackgroundColor3 = Color3.fromRGB(90, 130, 255) Fill.BorderSizePixel = 0 Fill.ZIndex = 14 Fill.Parent = Bar local FillCorner = Instance.new("UICorner") FillCorner.CornerRadius = UDim.new(1, 0) FillCorner.Parent = Fill local Knob = Instance.new("Frame") Knob.AnchorPoint = Vector2.new(0.5, 0.5) Knob.Size = UDim2.fromOffset(10, 10) Knob.Position = UDim2.new(InitialPercent, 0, 0.5, 0) Knob.BackgroundColor3 = Color3.fromRGB(205, 225, 255) Knob.BorderSizePixel = 0 Knob.ZIndex = 15 Knob.Parent = Bar local KnobCorner = Instance.new("UICorner") KnobCorner.CornerRadius = UDim.new(1, 0) KnobCorner.Parent = Knob local Dragging = false local LastNumber = Default local function FormatNumber(Number) if Max - Min >= 10 then return math.floor(Number + 0.5) end return math.floor(Number * 100 + 0.5) / 100 end local function SetValue(X) local Percent = math.clamp( (X - Bar.AbsolutePosition.X) / math.max(Bar.AbsoluteSize.X, 1), 0, 1 ) local Number = FormatNumber(Min + (Max - Min) * Percent) LastNumber = Number local FinalPercent = math.clamp((Number - Min) / math.max(Max - Min, 0.0001), 0, 1) Fill.Size = UDim2.new(FinalPercent, 0, 1, 0) Knob.Position = UDim2.new(FinalPercent, 0, 0.5, 0) Value.Text = tostring(Number) Callback(Number) end Bar.InputBegan:Connect(function(Input) if Input.UserInputType == Enum.UserInputType.MouseButton1 then Dragging = true PlaySound("Click") TweenService:Create( Knob, TweenInfo.new(0.15, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {Size = UDim2.fromOffset(16, 16)} ):Play() SetValue(Input.Position.X) end end) UIS.InputChanged:Connect(function(Input) if Dragging and Input.UserInputType == Enum.UserInputType.MouseMovement then SetValue(Input.Position.X) end end) UIS.InputEnded:Connect(function(Input) if Input.UserInputType == Enum.UserInputType.MouseButton1 then if Dragging then TweenService:Create( Knob, TweenInfo.new(0.2, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {Size = UDim2.fromOffset(10, 10)} ):Play() end Dragging = false end end) Value.Text = tostring(LastNumber) Callback(LastNumber) return Holder end local function CreateInfo(Page, Text, Y, Height) local Info = Instance.new("TextLabel") Info.Size = UDim2.new(1, -20, 0, Height) Info.Position = UDim2.new(0, 10, 0, Y) Info.BackgroundColor3 = Color3.fromRGB(18, 22, 31) Info.BorderSizePixel = 0 Info.Text = Text Info.TextColor3 = Color3.fromRGB(190, 195, 210) Info.TextSize = 12 Info.Font = Enum.Font.GothamMedium Info.TextWrapped = true Info.TextXAlignment = Enum.TextXAlignment.Left Info.TextYAlignment = Enum.TextYAlignment.Center Info.ZIndex = 12 Info.Parent = Page local Corner = Instance.new("UICorner") Corner.CornerRadius = UDim.new(0, 12) Corner.Parent = Info local Stroke = Instance.new("UIStroke") Stroke.Color = Color3.fromRGB(62, 73, 97) Stroke.Transparency = 0.7 Stroke.Parent = Info return Info end --======================================================== -- PVP --======================================================== CreateSection(PVP, "COMBAT", 10) CreateToggle(PVP, "Aim Assist", 45, false, function(Value) Settings.AimAssist = Value end) local AimKeyButton = Instance.new("TextButton") AimKeyButton.Size = UDim2.new(1, -20, 0, 42) AimKeyButton.Position = UDim2.new(0, 10, 0, 95) AimKeyButton.BackgroundColor3 = Color3.fromRGB(18, 22, 31) AimKeyButton.BorderSizePixel = 0 AimKeyButton.Text = "AIM KEY RIGHT MOUSE" AimKeyButton.TextColor3 = Color3.fromRGB(220, 223, 230) AimKeyButton.TextSize = 13 AimKeyButton.Font = Enum.Font.GothamMedium AimKeyButton.ZIndex = 12 AimKeyButton.AutoButtonColor = false AimKeyButton.Parent = PVP local AimKeyCorner = Instance.new("UICorner") AimKeyCorner.CornerRadius = UDim.new(0, 10) AimKeyCorner.Parent = AimKeyButton AddPressAnimation(AimKeyButton, "Click") AimKeyButton.MouseButton1Click:Connect(function() if Settings.AimKey == Enum.UserInputType.MouseButton2 then Settings.AimKey = Enum.UserInputType.MouseButton1 Settings.AimKeyName = "LEFT MOUSE" else Settings.AimKey = Enum.UserInputType.MouseButton2 Settings.AimKeyName = "RIGHT MOUSE" end AimKeyButton.Text = "AIM KEY " .. Settings.AimKeyName end) CreateToggle(PVP, "ESP Players", 145, false, function(Value) Settings.ESP = Value end) CreateToggle(PVP, "Tracers", 195, false, function(Value) Settings.Tracers = Value end) CreateToggle(PVP, "FOV Circle", 245, true, function(Value) Settings.FOVEnabled = Value end) CreateSection(PVP, "AIM / HEAD HITBOX", 315) CreateSlider(PVP, "FOV", 350, 30, 500, 120, function(Value) Settings.FOV = Value end) CreateSlider(PVP, "HEAD HITBOX", 425, 0, 10, 0, function(Value) Settings.Hitbox = Value end) CreateSlider(PVP, "AIM SMOOTHNESS", 500, 0.01, 1, 0.15, function(Value) Settings.AimSmoothness = Value end) --======================================================== -- MOVEMENT --======================================================== CreateSection(Movement, "MOVEMENT", 10) CreateToggle(Movement, "Speed", 45, false, function(Value) Settings.SpeedEnabled = Value end) CreateSlider(Movement, "Run Speed", 95, 16, 1000, 16, function(Value) Settings.Speed = Value end) CreateToggle(Movement, "Fly", 175, false, function(Value) Settings.FlyEnabled = Value end) CreateSlider(Movement, "Fly Speed", 225, 10, 1000, 50, function(Value) Settings.FlySpeed = Value end) CreateToggle(Movement, "INVISIBLE", 305, false, function(Value) Settings.Invisible = Value end) CreateToggle(Movement, "Spin", 360, false, function(Value) Settings.SpinEnabled = Value end) CreateSlider(Movement, "Spin Speed", 410, 1, 30, 5, function(Value) Settings.SpinSpeed = Value end) --======================================================== -- SETTINGS --======================================================== CreateSection(SettingsPage, "RSR STUDIO", 10) CreateInfo(SettingsPage, "RSR STUDIO SHOOTER\n\n" .. "K = OPEN / CLOSE\n" .. "Aim Assist works while holding your selected mouse button.\n" .. "Head Hitbox changes the local visual size of the head.\n" .. "ESP remains active after players respawn while the toggle is ON.", 45, 130 ) CreateSection(SettingsPage, "CAMERA", 185) local CameraFOVInfo = CreateInfo( SettingsPage, "Native Roblox camera FOV supports up to 120°. The slider below is 80–240° as requested; values above 120° are capped by the engine.", 215, 60 ) CreateSlider(SettingsPage, "CAMERA FOV (80-240)", 285, 80, 240, 120, function(Value) Settings.CameraFOV = Value local Actual = math.clamp(Value, 80, NATIVE_FOV_MAX) if Camera then Camera.FieldOfView = Actual end CameraFOVInfo.Text = string.format( "Selected FOV: %d°\nActual Roblox FOV: %d° (engine max 120°)", Value, Actual ) end) CreateToggle(SettingsPage, "FIRST PERSON ARMS", 365, false, function(Value) Settings.ArmsEnabled = Value end) CreateSlider(SettingsPage, "ARM DISTANCE", 415, 0, 3, 0, function(Value) Settings.ArmDistance = Value end) CreateToggle(SettingsPage, "GUI RAIN", 495, true, function(Value) Settings.RainEnabled = Value end) CreateToggle(SettingsPage, "MIRROR REFLECTION", 545, true, function(Value) Settings.MirrorEnabled = Value end) CreateToggle(SettingsPage, "NEON ANIMATIONS", 595, true, function(Value) Settings.NeonAnimations = Value end) CreateSection(SettingsPage, "COLORS", 655) local Colors = { Color3.fromRGB(255, 70, 70), Color3.fromRGB(255, 170, 60), Color3.fromRGB(255, 240, 70), Color3.fromRGB(80, 255, 130), Color3.fromRGB(70, 180, 255), Color3.fromRGB(160, 90, 255), Color3.fromRGB(255, 80, 200), } local ColorIndex = 1 local ColorButton = Instance.new("TextButton") ColorButton.Size = UDim2.new(1, -20, 0, 45) ColorButton.Position = UDim2.new(0, 10, 0, 690) ColorButton.BackgroundColor3 = Color3.fromRGB(18, 22, 31) ColorButton.BorderSizePixel = 0 ColorButton.Text = "CHANGE ESP / TRACER COLOR" ColorButton.TextColor3 = Colors[1] ColorButton.TextSize = 13 ColorButton.Font = Enum.Font.GothamBold ColorButton.ZIndex = 12 ColorButton.AutoButtonColor = false ColorButton.Parent = SettingsPage local ColorCorner = Instance.new("UICorner") ColorCorner.CornerRadius = UDim.new(0, 10) ColorCorner.Parent = ColorButton AddPressAnimation(ColorButton, "Click") ColorButton.MouseButton1Click:Connect(function() ColorIndex += 1 if ColorIndex > #Colors then ColorIndex = 1 end Settings.ESPColor = Colors[ColorIndex] Settings.TracerColor = Colors[ColorIndex] ColorButton.TextColor3 = Colors[ColorIndex] end) CreateToggle(SettingsPage, "UI SOUNDS", 750, true, function(Value) Settings.SoundsEnabled = Value end) --======================================================== -- INFORMATION --======================================================== CreateSection(InfoPage, "RSR SCRIPT STUDIO", 10) local AboutCard = CreateInfo( InfoPage, "✦ RSR SCRIPT STUDIO ✦\n\n" .. "Created for Roblox projects and custom control panels.\n" .. "I make scripts, GUI systems, visual effects and gameplay tools.\n\n" .. "ROBLOX: Cukier_Zzz\n" .. "ROBLOX ACCOUNT: Cukier_Zzz\nFollow Cukier_Zzz on Roblox for new scripts and projects.", 45, 185 ) CreateInfo( InfoPage, "⌨ PANEL KEY\n\nK = OPEN / CLOSE\nThe panel opens and closes with the K key.", 245, 105 ) CreateInfo( InfoPage, "⚡ VISUAL SYSTEMS\n\nNeon interface, animated reflections, rain, RTX-style corner bushes and smooth UI motion are client-side visual effects.", 365, 105 ) CreateInfo( InfoPage, "◈ INVISIBLE\n\nThis all-in-one LocalScript hides your character locally on your own screen. A LocalScript alone cannot force other players' clients to render your character as invisible because replication is controlled by the server.", 485, 115 ) --======================================================== -- BETTER FPS --======================================================== CreateSection(BetterFPS, "BETTER FPS", 10) CreateToggle(BetterFPS, "Better FPS", 45, false, function(Value) Settings.BetterFPSEnabled = Value end) CreateInfo(BetterFPS, "When enabled, this locally removes or disables many visual effects that can cost FPS: Decals, Textures, particles, trails, beams, smoke, fire, sparkles and selected post-processing. It is designed for lower-end or busy maps.", 95, 105 ) CreateInfo(BetterFPS, "Classic texture mode: texture/decal transparency is stored and restored when Better FPS is switched OFF. New descendants are also optimized while the mode is ON.", 210, 85 ) CreateInfo(BetterFPS, "The existing PVP / MOVEMENT / SETTINGS tabs are unchanged. BETTER FPS is an added tab.", 305, 65 ) --======================================================== -- NEON ANIMATION LOOP --======================================================== local NeonTime = 0 RunService.RenderStepped:Connect(function(dt) NeonTime += dt if not Settings.NeonAnimations then return end local hue = (NeonTime * 0.055) % 1 local neonColor = Color3.fromHSV(hue, 0.78, 1) RTXLabel.TextColor3 = neonColor NeonTitle.TextColor3 = neonColor NeonTitle.TextStrokeColor3 = Color3.fromHSV((hue + 0.08) % 1, 0.9, 1) NeonTitleGlow.TextColor3 = Color3.fromHSV((hue + 0.03) % 1, 0.85, 1) NeonTitleGlow.TextStrokeColor3 = neonColor NeonTitleGlow.TextTransparency = 0.55 + 0.16 * (0.5 + 0.5 * math.sin(NeonTime * 2.4)) MainStroke.Color = neonColor AccentTop.BackgroundColor3 = neonColor for i, Stroke in ipairs(NeonGlows) do Stroke.Color = Color3.fromHSV((hue + i * 0.045) % 1, 0.8, 1) end Reflection.Position = UDim2.new((math.sin(NeonTime * 0.65) * 0.55) + 0.25, 0, -0.3, 0) for _, item in ipairs(CornerRays) do if item.part.Parent then item.part.BackgroundColor3 = neonColor item.part.BackgroundTransparency = 0.54 + 0.25 * (0.5 + 0.5 * math.sin(NeonTime * 2.8 + item.phase)) end end for _, info in ipairs(Bushes) do if info.part.Parent then info.part.Rotation = info.base + math.sin(NeonTime * 1.4 + info.phase) * 7 end end end) --======================================================== -- FOV CIRCLE --======================================================== local FOVCircle = Instance.new("Frame") FOVCircle.Name = "FOVCircle" FOVCircle.AnchorPoint = Vector2.new(0.5, 0.5) FOVCircle.Position = UDim2.fromScale(0.5, 0.5) FOVCircle.Size = UDim2.fromOffset(Settings.FOV * 2, Settings.FOV * 2) FOVCircle.BackgroundTransparency = 1 FOVCircle.BorderSizePixel = 0 FOVCircle.ZIndex = 100 FOVCircle.Parent = Gui local FOVCorner = Instance.new("UICorner") FOVCorner.CornerRadius = UDim.new(1, 0) FOVCorner.Parent = FOVCircle local FOVStroke = Instance.new("UIStroke") FOVStroke.Thickness = 1.5 FOVStroke.Transparency = 0.15 FOVStroke.Parent = FOVCircle local FOVGlow = Instance.new("UIStroke") FOVGlow.Thickness = 4 FOVGlow.Transparency = 0.85 FOVGlow.Parent = FOVCircle --======================================================== -- ESP --======================================================== local ESPObjects = {} local function RemoveESP(Player) local Object = ESPObjects[Player] if Object then if Object.Highlight and Object.Highlight.Parent then Object.Highlight:Destroy() end if Object.Billboard and Object.Billboard.Parent then Object.Billboard:Destroy() end end ESPObjects[Player] = nil end local function CreateESP(Player) if Player == LocalPlayer then return end local Character = Player.Character if not Character then return end RemoveESP(Player) local Highlight = Instance.new("Highlight") Highlight.Name = "RSR_ESP" Highlight.FillTransparency = 0.72 Highlight.OutlineTransparency = 0 Highlight.FillColor = Settings.ESPColor Highlight.OutlineColor = Settings.ESPColor Highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop Highlight.Adornee = Character Highlight.Parent = Character local Head = Character:FindFirstChild("Head") local Billboard if Head then Billboard = Instance.new("BillboardGui") Billboard.Name = "RSR_ESP_Name" Billboard.Adornee = Head Billboard.Size = UDim2.new(0, 150, 0, 35) Billboard.StudsOffset = Vector3.new(0, 2.5, 0) Billboard.AlwaysOnTop = true Billboard.ZIndexBehavior = Enum.ZIndexBehavior.Sibling Billboard.Parent = Head local NameLabel = Instance.new("TextLabel") NameLabel.Size = UDim2.fromScale(1, 1) NameLabel.BackgroundTransparency = 1 NameLabel.Text = Player.DisplayName NameLabel.TextColor3 = Settings.ESPColor NameLabel.TextStrokeTransparency = 0.3 NameLabel.TextStrokeColor3 = Color3.fromRGB(0, 0, 0) NameLabel.TextSize = 13 NameLabel.Font = Enum.Font.GothamBold NameLabel.Parent = Billboard end ESPObjects[Player] = { Highlight = Highlight, Billboard = Billboard, } end local function ApplyESPToAll() if not Settings.ESP then return end for _, Player in ipairs(Players:GetPlayers()) do if Player ~= LocalPlayer and Player.Character then CreateESP(Player) end end end for _, Player in ipairs(Players:GetPlayers()) do if Player ~= LocalPlayer then Player.CharacterAdded:Connect(function() task.wait(0.25) if Settings.ESP then CreateESP(Player) end end) end end Players.PlayerAdded:Connect(function(Player) Player.CharacterAdded:Connect(function() task.wait(0.25) if Settings.ESP then CreateESP(Player) end end) end) Players.PlayerRemoving:Connect(function(Player) RemoveESP(Player) end) --======================================================== -- TRACERS --======================================================== local TracerFolder = Instance.new("Folder") TracerFolder.Name = "RSR_Tracers" TracerFolder.Parent = Gui local Tracers = {} local function CreateTracer(Player) if Player == LocalPlayer then return nil end local Line = Instance.new("Frame") Line.Name = Player.Name Line.AnchorPoint = Vector2.new(0.5, 0.5) Line.BackgroundColor3 = Settings.TracerColor Line.BorderSizePixel = 0 Line.Visible = false Line.ZIndex = 90 Line.Parent = TracerFolder local Corner = Instance.new("UICorner") Corner.CornerRadius = UDim.new(1, 0) Corner.Parent = Line return Line end for _, Player in ipairs(Players:GetPlayers()) do Tracers[Player] = CreateTracer(Player) end Players.PlayerAdded:Connect(function(Player) Tracers[Player] = CreateTracer(Player) end) Players.PlayerRemoving:Connect(function(Player) if Tracers[Player] then Tracers[Player]:Destroy() end Tracers[Player] = nil end) --======================================================== -- AIM TARGET --======================================================== local function GetClosestTarget() local Closest = nil local ClosestDistance = math.huge local Center = Vector2.new( Camera.ViewportSize.X / 2, Camera.ViewportSize.Y / 2 ) for _, Player in ipairs(Players:GetPlayers()) do if Player ~= LocalPlayer then local Character = Player.Character local Head = Character and Character:FindFirstChild("Head") local Humanoid = Character and Character:FindFirstChildOfClass("Humanoid") if Head and Humanoid and Humanoid.Health > 0 then local Position, Visible = Camera:WorldToViewportPoint(Head.Position) if Visible and Position.Z > 0 then local ScreenPosition = Vector2.new(Position.X, Position.Y) local Distance = (ScreenPosition - Center).Magnitude if Distance <= Settings.FOV and Distance < ClosestDistance then ClosestDistance = Distance Closest = Head end end end end end return Closest end --======================================================== -- FLY --======================================================== local FlyVelocity local FlyConnection local function StartFly() if FlyConnection then FlyConnection:Disconnect() FlyConnection = nil end local Character = LocalPlayer.Character if not Character then return end local Root = Character:FindFirstChild("HumanoidRootPart") if not Root then return end if FlyVelocity then FlyVelocity:Destroy() end FlyVelocity = Instance.new("BodyVelocity") FlyVelocity.Name = "RSR_FlyVelocity" FlyVelocity.MaxForce = Vector3.new(math.huge, math.huge, math.huge) FlyVelocity.Velocity = Vector3.zero FlyVelocity.Parent = Root FlyConnection = RunService.RenderStepped:Connect(function() if not Settings.FlyEnabled or not Root.Parent then return end local Direction = Vector3.zero if UIS:IsKeyDown(Enum.KeyCode.W) then Direction += Camera.CFrame.LookVector end if UIS:IsKeyDown(Enum.KeyCode.S) then Direction -= Camera.CFrame.LookVector end if UIS:IsKeyDown(Enum.KeyCode.A) then Direction -= Camera.CFrame.RightVector end if UIS:IsKeyDown(Enum.KeyCode.D) then Direction += Camera.CFrame.RightVector end if UIS:IsKeyDown(Enum.KeyCode.Space) then Direction += Vector3.new(0, 1, 0) end if UIS:IsKeyDown(Enum.KeyCode.LeftControl) then Direction -= Vector3.new(0, 1, 0) end if Direction.Magnitude > 0 then Direction = Direction.Unit end FlyVelocity.Velocity = Direction * Settings.FlySpeed end) end local function StopFly() if FlyConnection then FlyConnection:Disconnect() FlyConnection = nil end if FlyVelocity then FlyVelocity:Destroy() FlyVelocity = nil end end --======================================================== -- HEAD HITBOX (LOCAL VISUAL) --======================================================== local OriginalHeadSizes = {} local function UpdateHeadHitbox(Player) if Player == LocalPlayer then return end local Character = Player.Character if not Character then return end local Head = Character:FindFirstChild("Head") if not Head or not Head:IsA("BasePart") then return end if not OriginalHeadSizes[Player] then OriginalHeadSizes[Player] = Head.Size end local OriginalSize = OriginalHeadSizes[Player] if Settings.Hitbox <= 0 then Head.Size = OriginalSize return end local Scale = 1 + (Settings.Hitbox * 0.35) Head.Size = Vector3.new( OriginalSize.X * Scale, OriginalSize.Y * Scale, OriginalSize.Z * Scale ) end Players.PlayerRemoving:Connect(function(Player) OriginalHeadSizes[Player] = nil end) --======================================================== -- FIRST PERSON ARM DISTANCE --======================================================== local ArmJointCache = {} local function GetArmJoints(Character) local Joints = {} local UpperTorso = Character:FindFirstChild("UpperTorso") if UpperTorso then local Left = UpperTorso:FindFirstChild("LeftShoulder") local Right = UpperTorso:FindFirstChild("RightShoulder") if Left and Left:IsA("Motor6D") then table.insert(Joints, Left) end if Right and Right:IsA("Motor6D") then table.insert(Joints, Right) end end local Torso = Character:FindFirstChild("Torso") if Torso then local Left = Torso:FindFirstChild("Left Shoulder") local Right = Torso:FindFirstChild("Right Shoulder") if Left and Left:IsA("Motor6D") then table.insert(Joints, Left) end if Right and Right:IsA("Motor6D") then table.insert(Joints, Right) end end return Joints end local function IsFirstPerson() if not Camera then return false end local Character = LocalPlayer.Character local Head = Character and Character:FindFirstChild("Head") if not Head then return false end return (Camera.CFrame.Position - Head.Position).Magnitude < 1.1 end local function UpdateArmDistance() local Character = LocalPlayer.Character if not Character then return end local Joints = ArmJointCache[Character] if not Joints then Joints = GetArmJoints(Character) ArmJointCache[Character] = Joints end local Active = Settings.ArmsEnabled and IsFirstPerson() for _, Joint in ipairs(Joints) do if Joint.Parent then if not Joint:GetAttribute("RSR_OriginalCached") then Joint:SetAttribute("RSR_OriginalCached", true) Joint:SetAttribute("RSR_OriginalC0", tostring(Joint.C0)) end -- Use a local Transform for a safer visual offset during first-person. if Active then local direction = Joint.Name:lower():find("left") and -1 or 1 Joint.Transform = CFrame.new(direction * Settings.ArmDistance * 0.18, 0, -Settings.ArmDistance * 0.08) else Joint.Transform = CFrame.identity end end end end --======================================================== -- INVISIBILITY --======================================================== local InvisibleOriginals = {} local function RememberInvisible(instance, property) InvisibleOriginals[instance] = InvisibleOriginals[instance] or {} if InvisibleOriginals[instance][property] == nil then local ok, value = pcall(function() return instance[property] end) if ok then InvisibleOriginals[instance][property] = value end end end local function ApplyInvisibleToCharacter(character) if not character then return end for _, descendant in ipairs(character:GetDescendants()) do if descendant:IsA("BasePart") then RememberInvisible(descendant, "LocalTransparencyModifier") pcall(function() descendant.LocalTransparencyModifier = 1 end) elseif descendant:IsA("Decal") or descendant:IsA("Texture") then RememberInvisible(descendant, "Transparency") pcall(function() descendant.Transparency = 1 end) end end end local function RemoveInvisibleFromCharacter(character) for instance, properties in pairs(InvisibleOriginals) do if instance and instance.Parent then for property, value in pairs(properties) do pcall(function() instance[property] = value end) end end end InvisibleOriginals = {} end local function UpdateInvisibility() local character = LocalPlayer.Character if Settings.Invisible then ApplyInvisibleToCharacter(character) else RemoveInvisibleFromCharacter(character) end end --======================================================== -- BETTER FPS OPTIMIZER --======================================================== local FPSOriginals = {} local FPSDescendantConnection local FPSLightingOriginals = { GlobalShadows = Lighting.GlobalShadows, } local function RememberProperty(Instance, Property) FPSOriginals[Instance] = FPSOriginals[Instance] or {} if FPSOriginals[Instance][Property] == nil then local ok, value = pcall(function() return Instance[Property] end) if ok then FPSOriginals[Instance][Property] = value end end end local function OptimizeInstance(Instance) if not Settings.BetterFPSEnabled then return end if Instance:IsA("Decal") or Instance:IsA("Texture") then RememberProperty(Instance, "Transparency") pcall(function() Instance.Transparency = 1 end) elseif Instance:IsA("ParticleEmitter") or Instance:IsA("Trail") or Instance:IsA("Beam") or Instance:IsA("Smoke") or Instance:IsA("Fire") or Instance:IsA("Sparkles") then RememberProperty(Instance, "Enabled") pcall(function() Instance.Enabled = false end) elseif Instance:IsA("BloomEffect") or Instance:IsA("SunRaysEffect") or Instance:IsA("ColorCorrectionEffect") or Instance:IsA("DepthOfFieldEffect") or Instance:IsA("BlurEffect") then RememberProperty(Instance, "Enabled") pcall(function() Instance.Enabled = false end) end end local function EnableBetterFPS() Settings.BetterFPSEnabled = true FPSLightingOriginals.GlobalShadows = Lighting.GlobalShadows Lighting.GlobalShadows = false for _, Descendant in ipairs(workspace:GetDescendants()) do OptimizeInstance(Descendant) end for _, Descendant in ipairs(Lighting:GetDescendants()) do OptimizeInstance(Descendant) end if FPSDescendantConnection then FPSDescendantConnection:Disconnect() end FPSDescendantConnection = workspace.DescendantAdded:Connect(function(Instance) task.defer(function() OptimizeInstance(Instance) end) end) end local function DisableBetterFPS() Settings.BetterFPSEnabled = false if FPSDescendantConnection then FPSDescendantConnection:Disconnect() FPSDescendantConnection = nil end for Instance, Properties in pairs(FPSOriginals) do if Instance and Instance.Parent then for Property, Value in pairs(Properties) do pcall(function() Instance[Property] = Value end) end end end FPSOriginals = {} Lighting.GlobalShadows = FPSLightingOriginals.GlobalShadows end -- Watch the setting in case the UI callback is edited later. local PreviousBetterFPS = Settings.BetterFPSEnabled local PreviousInvisible = Settings.Invisible RunService.Heartbeat:Connect(function() if Settings.Invisible ~= PreviousInvisible then PreviousInvisible = Settings.Invisible UpdateInvisibility() elseif Settings.Invisible then ApplyInvisibleToCharacter(LocalPlayer.Character) end end) RunService.Heartbeat:Connect(function() if Settings.BetterFPSEnabled ~= PreviousBetterFPS then PreviousBetterFPS = Settings.BetterFPSEnabled if Settings.BetterFPSEnabled then EnableBetterFPS() else DisableBetterFPS() end end end) --======================================================== -- MAIN LOOP --======================================================== RunService.RenderStepped:Connect(function() Camera = workspace.CurrentCamera or Camera -- FOV circle FOVCircle.Visible = Settings.FOVEnabled if Settings.FOVEnabled then FOVCircle.Size = UDim2.fromOffset(Settings.FOV * 2, Settings.FOV * 2) FOVStroke.Color = Settings.FOVColor FOVGlow.Color = Settings.FOVColor end -- Neon / mirror animation if Settings.NeonAnimations then local Pulse = (math.sin(os.clock() * 3) + 1) / 2 GlassStroke.Transparency = 0.58 + Pulse * 0.2 else GlassStroke.Transparency = 0.72 end Reflection.Visible = Settings.MirrorEnabled if Settings.MirrorEnabled and Settings.NeonAnimations then local sweep = (os.clock() % 2.8) / 2.8 Reflection.Position = UDim2.new(-0.35 + sweep * 1.55, 0, -0.25, 0) end -- ESP: stays active after respawns while ON for _, Player in ipairs(Players:GetPlayers()) do if Player ~= LocalPlayer then if Settings.ESP then if not ESPObjects[Player] then CreateESP(Player) else local Object = ESPObjects[Player] if Object.Highlight and Object.Highlight.Parent then Object.Highlight.FillColor = Settings.ESPColor Object.Highlight.OutlineColor = Settings.ESPColor end if Object.Billboard and Object.Billboard.Parent then local Label = Object.Billboard:FindFirstChildOfClass("TextLabel") if Label then Label.TextColor3 = Settings.ESPColor end end end else if ESPObjects[Player] then RemoveESP(Player) end end end end -- Tracers for Player, Line in pairs(Tracers) do if Line and Line.Parent then if not Settings.Tracers then Line.Visible = false else local Character = Player.Character local Root = Character and Character:FindFirstChild("HumanoidRootPart") if Root then local Position, Visible = Camera:WorldToViewportPoint(Root.Position) if Visible then local Start = Vector2.new( Camera.ViewportSize.X / 2, Camera.ViewportSize.Y ) local Finish = Vector2.new(Position.X, Position.Y) local Difference = Finish - Start local Length = Difference.Magnitude Line.Position = UDim2.fromOffset( (Start.X + Finish.X) / 2, (Start.Y + Finish.Y) / 2 ) Line.Size = UDim2.fromOffset(Length, 2) Line.Rotation = math.deg(math.atan2(Difference.Y, Difference.X)) Line.BackgroundColor3 = Settings.TracerColor Line.Visible = true else Line.Visible = false end else Line.Visible = false end end end end -- Speed local Character = LocalPlayer.Character local Humanoid = Character and Character:FindFirstChildOfClass("Humanoid") if Humanoid then if Settings.SpeedEnabled then Humanoid.WalkSpeed = Settings.Speed else Humanoid.WalkSpeed = 16 end end -- Spin if Settings.SpinEnabled and Character then local Root = Character:FindFirstChild("HumanoidRootPart") if Root then Root.CFrame = Root.CFrame * CFrame.Angles(0, math.rad(Settings.SpinSpeed), 0) end end -- Aim assist if Settings.AimAssist then local AimPressed = UIS:IsMouseButtonPressed(Settings.AimKey) if AimPressed then local Target = GetClosestTarget() if Target then local CameraPosition = Camera.CFrame.Position local TargetCFrame = CFrame.lookAt(CameraPosition, Target.Position) Camera.CFrame = Camera.CFrame:Lerp(TargetCFrame, Settings.AimSmoothness) end end end -- Local head visual for _, Player in ipairs(Players:GetPlayers()) do if Player ~= LocalPlayer then UpdateHeadHitbox(Player) end end -- First-person arms UpdateArmDistance() end) --======================================================== -- FLY STATE --======================================================== RunService.Heartbeat:Connect(function() if Settings.FlyEnabled then if not FlyVelocity then StartFly() end else if FlyVelocity then StopFly() end end end) --======================================================== -- CAMERA FOV ENFORCEMENT --======================================================== RunService:BindToRenderStep("RSR_CameraFOV", Enum.RenderPriority.Camera.Value + 1, function() if not Camera then return end local ActualFOV = math.clamp(Settings.CameraFOV, 80, NATIVE_FOV_MAX) if math.abs(Camera.FieldOfView - ActualFOV) > 0.05 then Camera.FieldOfView = ActualFOV end end) --======================================================== -- K = OPEN / CLOSE --======================================================== UIS.InputBegan:Connect(function(Input, GameProcessed) if GameProcessed then return end if Input.KeyCode == Settings.OpenKey then Settings.GuiOpen = not Settings.GuiOpen PlaySound("Click") if Settings.GuiOpen then Main.Visible = true Main.Position = UDim2.new(0.5, -400, 0.5, -235) MainScale.Scale = 0.9 TweenService:Create( MainScale, TweenInfo.new(0.35, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {Scale = 1} ):Play() TweenService:Create( Main, TweenInfo.new(0.25, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), { Position = UDim2.new(0.5, -400, 0.5, -270), } ):Play() else TweenService:Create( Main, TweenInfo.new(0.2, Enum.EasingStyle.Quint, Enum.EasingDirection.In), { Position = UDim2.new(0.5, -400, 0.5, -235), } ):Play() TweenService:Create( MainScale, TweenInfo.new(0.2, Enum.EasingStyle.Quint, Enum.EasingDirection.In), {Scale = 0.9} ):Play() task.delay(0.2, function() if not Settings.GuiOpen then Main.Visible = false end end) end end end) --======================================================== -- RESPAWN --======================================================== LocalPlayer.CharacterAdded:Connect(function(Character) ArmJointCache[Character] = nil task.wait(0.6) if Settings.FlyEnabled then StartFly() end if Settings.ESP then ApplyESPToAll() end if Settings.Invisible then task.wait(0.15) UpdateInvisibility() end end) --======================================================== -- INITIAL STATE --======================================================== if Settings.CameraFOV then Camera.FieldOfView = math.clamp(Settings.CameraFOV, 80, NATIVE_FOV_MAX) end Main.Visible = true print("RSR STUDIO SHOOTER PANEL ENHANCED LOADED") print("Press K to open / close")