-- [[ 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 ]] if not game:IsLoaded() then game.Loaded:Wait() end if game.CoreGui:FindFirstChild("FishyHubReplica") then game.CoreGui.FishyHubReplica:Destroy() end --========================================================-- -- SERVICES --========================================================-- local TweenService = game:GetService("TweenService") local UserInputService = game:GetService("UserInputService") local Players = game:GetService("Players") local MarketplaceService = game:GetService("MarketplaceService") local RunService = game:GetService("RunService") local LocalPlayer = Players.LocalPlayer --========================================================-- -- CONSTANTS --========================================================-- local SidebarWidth = 0.305 local MinSidebarWidth = 0.115 local MaxSidebarWidth = 0.42 local ControlGutterWidth = 42 local SidebarOpen = true local Resizing = false local Alive = true local Purple = Color3.fromRGB(157, 91, 255) local PurpleBright = Color3.fromRGB(205, 145, 255) local PurpleDark = Color3.fromRGB(72, 35, 130) local PurpleDeep = Color3.fromRGB(37, 17, 68) local PurpleSoft = Color3.fromRGB(125, 78, 210) local MonoBlack = Color3.fromRGB(0, 0, 0) local MonoDark = Color3.fromRGB(18, 18, 18) local MonoGray = Color3.fromRGB(80, 80, 80) local MonoLightGray = Color3.fromRGB(160, 160, 160) local MonoWhite = Color3.fromRGB(255, 255, 255) local Smooth = TweenInfo.new(0.35, Enum.EasingStyle.Quart, Enum.EasingDirection.Out) local Fast = TweenInfo.new(0.16, Enum.EasingStyle.Quart, Enum.EasingDirection.Out) --========================================================-- -- RESPONSIVE LAYOUT --========================================================-- local function GetViewport() local camera = workspace.CurrentCamera if camera then return camera.ViewportSize end return Vector2.new(1280, 720) end local function IsMobileDevice() return UserInputService.TouchEnabled and not UserInputService.KeyboardEnabled end local function GetLayoutProfile() local viewport = GetViewport() local isMobile = IsMobileDevice() local isSmall = viewport.X < 900 or viewport.Y < 620 local isTablet = isMobile and viewport.X >= 768 local gutter = isMobile and 38 or 42 return { isMobile = isMobile, isSmall = isSmall, isTablet = isTablet, viewport = viewport, sidebarWidth = isMobile and (isTablet and 0.34 or 0.42) or (isSmall and 0.34 or 0.305), controlGutterWidth = gutter, headerHeight = isMobile and 72 or (isSmall and 84 or 96), contentPadding = isMobile and 18 or (isSmall and 24 or 35), keyBoxHeight = 0, -- removed key box titleSize = isMobile and 22 or (isSmall and 24 or 27), subtitleSize = isMobile and 10 or 11, mainTransparency = isMobile and 0.22 or 0.18, backdropTransparency = isMobile and 0.52 or 0.48, } end local Layout = GetLayoutProfile() SidebarWidth = Layout.sidebarWidth ControlGutterWidth = Layout.controlGutterWidth --========================================================-- -- HELPERS --========================================================-- local function New(class, properties, parent) local object = Instance.new(class) for property, value in pairs(properties or {}) do object[property] = value end object.Parent = parent return object end local function Tween(object, info, properties) local tween = TweenService:Create(object, info, properties) tween:Play() return tween end local function Corner(parent, radius) return New("UICorner", { CornerRadius = UDim.new(0, radius) }, parent) end local function Label(parent, text, size, color, font) return New("TextLabel", { BackgroundTransparency = 1, Text = text, TextSize = size or 14, TextColor3 = color or Color3.new(1,1,1), Font = font or Enum.Font.GothamBold, TextXAlignment = Enum.TextXAlignment.Left, TextYAlignment = Enum.TextYAlignment.Center }, parent) end --========================================================-- -- INTRO ANIMATION REGISTRY --========================================================-- local IntroTextElements = {} local IntroButtonElements = {} local function RegisterText(label, direction, delay) table.insert(IntroTextElements, { label = label, direction = direction or "left", delay = delay or 0 }) end local function RegisterButton(button, delay) table.insert(IntroButtonElements, { button = button, delay = delay or 0 }) end --========================================================-- -- TEXT SLIDE ANIMATION --========================================================-- local function AnimateTextSlide(label, direction, delay) local fullText = label.Text if fullText == "" then return end label.Text = "" label.TextTransparency = 0 task.spawn(function() task.wait(delay or 0) local offsetPx = 28 local originalPos = label.Position local startOffset if direction == "left" then startOffset = UDim2.new(0, -offsetPx, 0, 0) elseif direction == "right" then startOffset = UDim2.new(0, offsetPx, 0, 0) elseif direction == "top" then startOffset = UDim2.new(0, 0, 0, -offsetPx) elseif direction == "bottom" then startOffset = UDim2.new(0, 0, 0, offsetPx) else startOffset = UDim2.new(0, -offsetPx, 0, 0) end label.Position = UDim2.new( originalPos.X.Scale + startOffset.X.Scale, originalPos.X.Offset + startOffset.X.Offset, originalPos.Y.Scale + startOffset.Y.Scale, originalPos.Y.Offset + startOffset.Y.Offset ) label.TextTransparency = 0.85 Tween(label, TweenInfo.new(0.38, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), { Position = originalPos, TextTransparency = 0 }) task.wait(0.06) local chars = #fullText local interval = math.clamp(0.28 / chars, 0.016, 0.055) for i = 1, chars do if not Alive or not label.Parent then break end label.Text = string.sub(fullText, 1, i) task.wait(interval) end label.Text = fullText end) end --========================================================-- -- BUTTON INTRO --========================================================-- local function AnimateButtonIntro(button, delay) task.spawn(function() task.wait(delay or 0) local origBgTrans = button.BackgroundTransparency button.BackgroundTransparency = 1 for _, child in ipairs(button:GetDescendants()) do if child:IsA("TextLabel") or child:IsA("TextButton") then child.TextTransparency = 1 end if child:IsA("Frame") then child:SetAttribute("_origBT", child.BackgroundTransparency) child.BackgroundTransparency = 1 end if child:IsA("UIStroke") then child.Transparency = 1 end end local blinkInfo = TweenInfo.new(0.09, Enum.EasingStyle.Linear) Tween(button, blinkInfo, { BackgroundTransparency = origBgTrans }) task.wait(0.09) Tween(button, blinkInfo, { BackgroundTransparency = 1 }) task.wait(0.09) Tween(button, blinkInfo, { BackgroundTransparency = origBgTrans }) task.wait(0.09) Tween(button, blinkInfo, { BackgroundTransparency = 1 }) task.wait(0.09) local fadeInfo = TweenInfo.new(0.32, Enum.EasingStyle.Quart, Enum.EasingDirection.Out) Tween(button, fadeInfo, { BackgroundTransparency = origBgTrans }) for _, child in ipairs(button:GetDescendants()) do if child:IsA("TextLabel") then Tween(child, fadeInfo, { TextTransparency = 0 }) end if child:IsA("Frame") then local orig = child:GetAttribute("_origBT") if orig then Tween(child, fadeInfo, { BackgroundTransparency = orig }) end end if child:IsA("UIStroke") then Tween(child, fadeInfo, { Transparency = 0.45 }) end end end) end --========================================================-- -- GUI ROOT --========================================================-- local GUI = Instance.new("ScreenGui") GUI.Name = "FishyHubReplica" GUI.ResetOnSpawn = false GUI.IgnoreGuiInset = true GUI.ZIndexBehavior = Enum.ZIndexBehavior.Sibling GUI.Parent = game.CoreGui local Backdrop = New("Frame", { Size = UDim2.fromScale(1, 1), BackgroundColor3 = Color3.fromRGB(9, 3, 18), BackgroundTransparency = 1, BorderSizePixel = 0 }, GUI) local Main = New("Frame", { Name = "MainWindow", AnchorPoint = Vector2.new(0.5, 0.5), Position = UDim2.fromScale(0.5, 0.5), Size = UDim2.fromScale(1, 1), BackgroundColor3 = Color3.fromRGB(13, 8, 24), BackgroundTransparency = 1, BorderSizePixel = 0, ClipsDescendants = true }, GUI) --========================================================-- -- GLOBAL UI SCALE --========================================================-- local UI_SCALE_MIN = 0.50 local UI_SCALE_MAX = 1.00 local UI_SCALE_DEFAULT = 1 / 1.5 local UIScale = New("UIScale", { Scale = UI_SCALE_DEFAULT }, Main) Corner(Main, Layout.isMobile and 0 or 18) New("UIGradient", { Rotation = 115, Color = ColorSequence.new({ ColorSequenceKeypoint.new(0, Color3.fromRGB(38, 22, 66)), ColorSequenceKeypoint.new(0.5, Color3.fromRGB(15, 9, 27)), ColorSequenceKeypoint.new(1, Color3.fromRGB(7, 3, 15)) }), Transparency = NumberSequence.new({ NumberSequenceKeypoint.new(0, 0.08), NumberSequenceKeypoint.new(1, 0.18) }) }, Main) --========================================================-- -- BORDER FACTORIES --========================================================-- local function CreateAnimatedBorder(parent, thickness) local stroke = New("UIStroke", { ApplyStrokeMode = Enum.ApplyStrokeMode.Border, Thickness = thickness, Transparency = 0.18, Color = Purple, LineJoinMode = Enum.LineJoinMode.Round }, parent) local gradient = New("UIGradient", { Rotation = 0, Color = ColorSequence.new({ ColorSequenceKeypoint.new(0.00, PurpleDark), ColorSequenceKeypoint.new(0.28, PurpleDark), ColorSequenceKeypoint.new(0.40, Purple), ColorSequenceKeypoint.new(0.48, Color3.fromRGB(255, 245, 255)), ColorSequenceKeypoint.new(0.56, PurpleBright), ColorSequenceKeypoint.new(0.70, PurpleDark), ColorSequenceKeypoint.new(1.00, PurpleDark) }), Transparency = NumberSequence.new({ NumberSequenceKeypoint.new(0.00, 0.55), NumberSequenceKeypoint.new(0.34, 0.55), NumberSequenceKeypoint.new(0.43, 0.04), NumberSequenceKeypoint.new(0.50, 0.04), NumberSequenceKeypoint.new(0.57, 0.55), NumberSequenceKeypoint.new(1.00, 0.55) }) }, stroke) return stroke, gradient end local MainBorder, MainSweep = CreateAnimatedBorder(Main, 2.2) --========================================================-- -- STARS --========================================================-- local Stars = New("Frame", { Name = "Stars", BackgroundTransparency = 1, Size = UDim2.fromScale(1, 1), ClipsDescendants = true, ZIndex = 50 }, Main) local StarData = { { x=0.08, y=0.12, s=8, d=0.2 }, { x=0.18, y=0.78, s=6, d=1.0 }, { x=0.31, y=0.17, s=7, d=1.8 }, { x=0.43, y=0.88, s=5, d=0.6 }, { x=0.57, y=0.12, s=6, d=2.2 }, { x=0.69, y=0.78, s=8, d=1.3 }, { x=0.79, y=0.19, s=5, d=0.4 }, { x=0.89, y=0.68, s=7, d=2.0 }, { x=0.95, y=0.31, s=5, d=1.1 }, { x=0.13, y=0.48, s=4, d=2.6 }, { x=0.51, y=0.53, s=4, d=1.7 }, { x=0.74, y=0.46, s=4, d=0.8 } } for _, data in ipairs(StarData) do local Star = New("TextLabel", { BackgroundTransparency = 1, Text = "*", TextSize = data.s * 2.5, Font = Enum.Font.GothamBlack, TextColor3 = PurpleBright, TextTransparency = 0.55, AnchorPoint = Vector2.new(0.5, 0.5), Position = UDim2.fromScale(data.x, data.y), Size = UDim2.fromOffset(data.s * 5, data.s * 5), ZIndex = 51 }, Stars) local InnerStar = New("TextLabel", { BackgroundTransparency = 1, Text = "+", TextSize = data.s * 1.4, Font = Enum.Font.GothamBold, TextColor3 = Color3.fromRGB(255, 245, 255), TextTransparency = 0.75, AnchorPoint = Vector2.new(0.5, 0.5), Position = UDim2.fromScale(data.x, data.y), Size = UDim2.fromOffset(data.s * 4, data.s * 4), ZIndex = 52 }, Stars) task.spawn(function() task.wait(data.d) while Alive and GUI.Parent do Tween(Star, TweenInfo.new(0.8, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut), { TextTransparency = 0.02, TextSize = data.s * 3.2 }) Tween(InnerStar, TweenInfo.new(0.8, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut), { TextTransparency = 0.05, TextSize = data.s * 1.9 }) task.wait(0.8) Tween(Star, TweenInfo.new(1.1, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut), { TextTransparency = 0.78, TextSize = data.s * 2.2 }) Tween(InnerStar, TweenInfo.new(1.1, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut), { TextTransparency = 0.9, TextSize = data.s * 1.2 }) task.wait(1.1 + math.random() * 1.5) end end) end --========================================================-- -- HEADER --========================================================-- local Header = New("Frame", { BackgroundTransparency = 1, Size = UDim2.new(1, 0, 0, Layout.headerHeight), ZIndex = 60 }, Main) New("Frame", { Position = UDim2.new(0, Layout.contentPadding, 1, -1), Size = UDim2.new(1, -Layout.contentPadding * 2, 0, 1), BackgroundColor3 = Color3.fromRGB(255, 255, 255), BackgroundTransparency = 0.92, BorderSizePixel = 0 }, Header) local UserInfoBadge = New("Frame", { BackgroundColor3 = PurpleDeep, BackgroundTransparency = 0.45, BorderSizePixel = 0, Position = UDim2.new(0, Layout.contentPadding, 0, Layout.headerHeight * 0.28), Size = UDim2.fromOffset(48, 28), ZIndex = 61 }, Header) Corner(UserInfoBadge, 8) New("UIStroke", { Color = PurpleBright, Thickness = 1, Transparency = 0.55 }, UserInfoBadge) local UserInfoBadgeText = Label(UserInfoBadge, "USR", 10, PurpleBright, Enum.Font.GothamBold) UserInfoBadgeText.Size = UDim2.fromScale(1, 1) UserInfoBadgeText.TextXAlignment = Enum.TextXAlignment.Center local UserInfo = Label(Header, "USER INFO", 13, PurpleBright, Enum.Font.GothamBold) UserInfo.Position = UDim2.new(0, Layout.contentPadding + 58, 0, Layout.headerHeight * 0.28) UserInfo.Size = UDim2.new(0.28, 0, 0, 30) RegisterText(UserInfo, "left", 0.55) local Title = Label(Header, "Welcome to Fishy Hub", Layout.titleSize, Color3.fromRGB(245, 247, 251), Enum.Font.GothamBold) Title.AnchorPoint = Vector2.new(0.5, 0) Title.Position = UDim2.new(0.5, 0, 0, Layout.headerHeight * 0.18) Title.Size = UDim2.new(0.38, 0, 0, 35) Title.TextXAlignment = Enum.TextXAlignment.Center RegisterText(Title, "top", 0.42) local Subtitle = Label(Header, "Updated v2.1 2026", Layout.subtitleSize, Color3.fromRGB(130, 112, 155), Enum.Font.GothamBold) Subtitle.AnchorPoint = Vector2.new(0.5, 0) Subtitle.Position = UDim2.new(0.5, 0, 0, Layout.headerHeight * 0.52) Subtitle.Size = UDim2.new(0.4, 0, 0, 20) Subtitle.TextXAlignment = Enum.TextXAlignment.Center RegisterText(Subtitle, "bottom", 0.52) --========================================================-- -- HEADER BUTTONS --========================================================-- local Minimize = New("TextButton", { Text = "-", TextSize = 18, Font = Enum.Font.GothamBold, TextColor3 = Color3.fromRGB(215, 198, 235), BackgroundColor3 = PurpleDeep, BackgroundTransparency = 0.35, BorderSizePixel = 0, Position = UDim2.new(1, -125, 0, Layout.headerHeight * 0.28), Size = UDim2.fromOffset(44, 44), AutoButtonColor = false, ZIndex = 65 }, Header) Corner(Minimize, 13) RegisterButton(Minimize, 0.70) local Close = New("TextButton", { Text = "X", TextSize = 18, Font = Enum.Font.GothamBold, TextColor3 = Color3.fromRGB(215, 198, 235), BackgroundColor3 = PurpleDeep, BackgroundTransparency = 0.35, BorderSizePixel = 0, Position = UDim2.new(1, -72, 0, Layout.headerHeight * 0.28), Size = UDim2.fromOffset(44, 44), AutoButtonColor = false, ZIndex = 65 }, Header) Corner(Close, 13) RegisterButton(Close, 0.76) --========================================================-- -- CONTENT --========================================================-- local Content = New("Frame", { BackgroundTransparency = 1, Position = UDim2.new(0, 0, 0, Layout.headerHeight), Size = UDim2.new(1, 0, 1, -Layout.headerHeight), ClipsDescendants = true, ZIndex = 5 }, Main) --========================================================-- -- SIDEBAR --========================================================-- local Sidebar = New("Frame", { Name = "Sidebar", BackgroundColor3 = Color3.fromRGB(9, 5, 17), BackgroundTransparency = 0.32, BorderSizePixel = 0, Size = UDim2.new(SidebarWidth, 0, 1, 0), ClipsDescendants = true, ZIndex = 10 }, Content) New("Frame", { Position = UDim2.new(0, 0, 1, -28), Size = UDim2.new(1, 0, 0, 28), BackgroundColor3 = Color3.fromRGB(9, 5, 17), BackgroundTransparency = 0.25, BorderSizePixel = 0, ZIndex = 10 }, Sidebar) New("Frame", { AnchorPoint = Vector2.new(1, 0), Position = UDim2.new(1, 0, 0, 0), Size = UDim2.new(0, 1, 1, 0), BackgroundColor3 = PurpleBright, BackgroundTransparency = 0.9, BorderSizePixel = 0, ZIndex = 20 }, Sidebar) --========================================================-- -- PROFILE --========================================================-- local ProfileToggle = New("TextButton", { BackgroundTransparency = 1, Text = "", Size = UDim2.new(1, 0, 0, 210), AutoButtonColor = false, ZIndex = 30 }, Sidebar) local Avatar = New("Frame", { AnchorPoint = Vector2.new(0.5, 0), Position = UDim2.new(0.5, 0, 0, 30), Size = UDim2.fromOffset(108, 108), BackgroundColor3 = Purple, BackgroundTransparency = 0.25, BorderSizePixel = 0, ZIndex = 15 }, Sidebar) Corner(Avatar, 100) New("UIStroke", { Color = PurpleBright, Thickness = 2, Transparency = 0.25 }, Avatar) local AvatarImage = New("ImageLabel", { AnchorPoint = Vector2.new(0.5, 0.5), Position = UDim2.fromScale(0.5, 0.5), Size = UDim2.fromOffset(100, 100), BackgroundColor3 = Color3.fromRGB(24, 14, 38), BackgroundTransparency = 0.15, BorderSizePixel = 0, ZIndex = 16, Image = "" }, Avatar) Corner(AvatarImage, 100) local AvatarFallback = Label(AvatarImage, "AV", 28, PurpleBright, Enum.Font.GothamBlack) AvatarFallback.Size = UDim2.fromScale(1, 1) AvatarFallback.TextXAlignment = Enum.TextXAlignment.Center AvatarFallback.ZIndex = 17 task.spawn(function() local content, isReady = Players:GetUserThumbnailAsync(LocalPlayer.UserId, Enum.ThumbnailType.HeadShot, Enum.ThumbnailSize.Size420x420) if isReady then AvatarImage.Image = content AvatarFallback.Visible = false end end) local Online = New("Frame", { AnchorPoint = Vector2.new(1, 1), Position = UDim2.new(1, -1, 1, -1), Size = UDim2.fromOffset(18, 18), BackgroundColor3 = Color3.fromRGB(55, 225, 174), BorderSizePixel = 0, ZIndex = 20 }, Avatar) Corner(Online, 100) New("UIStroke", { Color = Color3.fromRGB(7, 14, 23), Thickness = 3 }, Online) local Username = Label(Sidebar, LocalPlayer.DisplayName, 18, Color3.fromRGB(243, 246, 250), Enum.Font.GothamBold) Username.AnchorPoint = Vector2.new(0.5, 0) Username.Position = UDim2.new(0.5, 0, 0, 150) Username.Size = UDim2.new(1, -20, 0, 27) Username.TextXAlignment = Enum.TextXAlignment.Center Username.TextScaled = true RegisterText(Username, "left", 0.60) local Handle = Label(Sidebar, "@" .. LocalPlayer.Name, 12, Color3.fromRGB(130, 112, 155), Enum.Font.GothamBold) Handle.AnchorPoint = Vector2.new(0.5, 0) Handle.Position = UDim2.new(0.5, 0, 0, 178) Handle.Size = UDim2.new(1, -20, 0, 20) Handle.TextXAlignment = Enum.TextXAlignment.Center Handle.TextTruncate = Enum.TextTruncate.AtEnd RegisterText(Handle, "right", 0.65) --========================================================-- -- SIDEBAR RESIZE HANDLE --========================================================-- local ResizeHandle = New("TextButton", { Name = "SidebarResizeHandle", AnchorPoint = Vector2.new(0.5, 0.5), Position = UDim2.new(1, 0, 0.5, 0), Size = UDim2.fromOffset(12, 78), BackgroundColor3 = PurpleDeep, BackgroundTransparency = 0.45, BorderSizePixel = 0, Text = "||", TextSize = 9, Font = Enum.Font.GothamBold, TextColor3 = PurpleBright, AutoButtonColor = false, ZIndex = 100 }, Sidebar) Corner(ResizeHandle, 6) local ResizeLine = New("Frame", { AnchorPoint = Vector2.new(0.5, 0.5), Position = UDim2.fromScale(0.5, 0.5), Size = UDim2.fromOffset(2, 38), BackgroundColor3 = PurpleBright, BackgroundTransparency = 0.25, BorderSizePixel = 0, ZIndex = 101 }, ResizeHandle) Corner(ResizeLine, 3) --========================================================-- -- MAIN AREA --========================================================-- local MainArea = New("Frame", { BackgroundTransparency = 1, Position = UDim2.new(SidebarWidth, ControlGutterWidth, 0, 0), Size = UDim2.new(1 - SidebarWidth, -ControlGutterWidth, 1, 0), ZIndex = 2 }, Content) --========================================================-- -- UI SIZE SLIDER --========================================================-- local SizeControl = New("Frame", { Name = "SizeControl", Size = UDim2.fromOffset(38, 124), BackgroundTransparency = 1, BorderSizePixel = 0, ZIndex = 500 }, GUI) local SizeLabel = Label(SizeControl, "Size", 9, PurpleBright, Enum.Font.GothamBold) SizeLabel.AnchorPoint = Vector2.new(0.5, 0) SizeLabel.Position = UDim2.new(0.5, 0, 0, 0) SizeLabel.Size = UDim2.fromOffset(34, 18) SizeLabel.TextXAlignment = Enum.TextXAlignment.Center SizeLabel.ZIndex = 501 local SizeTrack = New("Frame", { AnchorPoint = Vector2.new(0.5, 0), Position = UDim2.new(0.5, 0, 0, 23), Size = UDim2.fromOffset(6, 80), BackgroundColor3 = PurpleDeep, BackgroundTransparency = 0.18, BorderSizePixel = 0, ZIndex = 501 }, SizeControl) Corner(SizeTrack, 8) New("UIStroke", { Color = PurpleBright, Thickness = 1, Transparency = 0.50 }, SizeTrack) local SizeFill = New("Frame", { AnchorPoint = Vector2.new(0.5, 1), Position = UDim2.new(0.5, 0, 1, 0), Size = UDim2.new(0, 3, 0, 27), BackgroundColor3 = PurpleBright, BackgroundTransparency = 0.15, BorderSizePixel = 0, ZIndex = 502 }, SizeTrack) Corner(SizeFill, 4) local SizeKnob = New("TextButton", { AnchorPoint = Vector2.new(0.5, 0.5), Position = UDim2.new(0.5, 0, 1 - ((UI_SCALE_DEFAULT - UI_SCALE_MIN) / (UI_SCALE_MAX - UI_SCALE_MIN)), 0), Size = UDim2.fromOffset(16, 16), BackgroundColor3 = Purple, BackgroundTransparency = 0, BorderSizePixel = 0, Text = "", AutoButtonColor = false, ZIndex = 504 }, SizeTrack) Corner(SizeKnob, 100) New("UIStroke", { Color = Color3.fromRGB(245, 235, 255), Thickness = 1.2, Transparency = 0.20 }, SizeKnob) local SizeValue = Label(SizeControl, tostring(math.round(UI_SCALE_DEFAULT * 100)) .. "%", 8, Color3.fromRGB(180, 160, 205), Enum.Font.GothamBold) SizeValue.AnchorPoint = Vector2.new(0.5, 0) SizeValue.Position = UDim2.new(0.5, 0, 1, -16) SizeValue.Size = UDim2.fromOffset(38, 16) SizeValue.TextXAlignment = Enum.TextXAlignment.Center SizeValue.ZIndex = 501 --========================================================-- -- SIZE SLIDER STATE --========================================================-- local CurrentUIScale = UI_SCALE_DEFAULT local TargetUIScale = UI_SCALE_DEFAULT local SizeDragging = false local function PositionSizeControl() if not GUI or not GUI.Parent or not ResizeHandle or not ResizeHandle.Parent or not MainArea or not MainArea.Parent then return end local viewport = GetViewport() local contentPosition = Content.AbsolutePosition local gutterStart = contentPosition.X + (SidebarWidth * Content.AbsoluteSize.X) local gutterWidth = ControlGutterWidth local controlWidth = SizeControl.AbsoluteSize.X local controlHeight = SizeControl.AbsoluteSize.Y local targetX = gutterStart + (gutterWidth - controlWidth) / 2 local resizePosition = ResizeHandle.AbsolutePosition local resizeSize = ResizeHandle.AbsoluteSize local targetY = resizePosition.Y + (resizeSize.Y / 2) - (controlHeight / 2) targetX = math.clamp(targetX, 2, math.max(2, viewport.X - controlWidth - 2)) targetY = math.clamp(targetY, 2, math.max(2, viewport.Y - controlHeight - 2)) local roundedX = math.floor(targetX + 0.5) local roundedY = math.floor(targetY + 0.5) local currentPosition = SizeControl.Position if math.abs(currentPosition.X.Offset - roundedX) >= 1 or math.abs(currentPosition.Y.Offset - roundedY) >= 1 then SizeControl.Position = UDim2.fromOffset(roundedX, roundedY) end end local function UpdateSliderVisuals(scale) local percent = math.clamp((scale - UI_SCALE_MIN) / (UI_SCALE_MAX - UI_SCALE_MIN), 0, 1) local y = 1 - percent SizeKnob.Position = UDim2.new(0.5, 0, y, 0) SizeFill.Size = UDim2.new(0, 3, 0, math.clamp(percent * 80, 0, 80)) SizeValue.Text = tostring(math.round(scale * 100)) .. "%" end local function SetUIScale(scale) TargetUIScale = math.clamp(scale, UI_SCALE_MIN, UI_SCALE_MAX) UpdateSliderVisuals(TargetUIScale) end SetUIScale(UI_SCALE_DEFAULT) RunService.RenderStepped:Connect(function() if not Alive or not GUI.Parent then return end local diff = TargetUIScale - CurrentUIScale if math.abs(diff) > 0.0001 then CurrentUIScale = CurrentUIScale + (diff * 0.22) UIScale.Scale = CurrentUIScale else CurrentUIScale = TargetUIScale UIScale.Scale = TargetUIScale end PositionSizeControl() end) local function UpdateSizeFromY(y) local trackPosition = SizeTrack.AbsolutePosition local trackSize = SizeTrack.AbsoluteSize if trackSize.Y <= 0 then return end local normalized = math.clamp((y - trackPosition.Y) / trackSize.Y, 0, 1) local percent = 1 - normalized local scale = UI_SCALE_MIN + (UI_SCALE_MAX - UI_SCALE_MIN) * percent SetUIScale(scale) end SizeTrack.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then SizeDragging = true UpdateSizeFromY(input.Position.Y) Tween(SizeKnob, Fast, { Size = UDim2.fromOffset(20, 20), BackgroundColor3 = PurpleBright }) end end) SizeKnob.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then SizeDragging = true Tween(SizeKnob, Fast, { Size = UDim2.fromOffset(20, 20), BackgroundColor3 = PurpleBright }) end end) UserInputService.InputChanged:Connect(function(input) if SizeDragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then UpdateSizeFromY(input.Position.Y) end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then if SizeDragging then SizeDragging = false Tween(SizeKnob, Fast, { Size = UDim2.fromOffset(16, 16), BackgroundColor3 = Purple }) end end end) SizeTrack.MouseEnter:Connect(function() if not SizeDragging then Tween(SizeKnob, Fast, { BackgroundColor3 = PurpleBright }) end end) SizeTrack.MouseLeave:Connect(function() if not SizeDragging then Tween(SizeKnob, Fast, { BackgroundColor3 = Purple }) end end) PositionSizeControl() --========================================================-- -- SIDEBAR DETAILS --========================================================-- local Details = New("Frame", { BackgroundTransparency = 1, Position = UDim2.new(0, 0, 0, 220), Size = UDim2.new(1, 0, 1, -220), ClipsDescendants = true }, Sidebar) local function InfoRow(y, badgeText, title, value, color) local Row = New("Frame", { BackgroundTransparency = 1, Position = UDim2.new(0, 23, 0, y), Size = UDim2.new(1, -46, 0, 48) }, Details) local Badge = New("Frame", { BackgroundColor3 = PurpleDeep, BackgroundTransparency = 0.5, BorderSizePixel = 0, Position = UDim2.new(0, 0, 0, 4), Size = UDim2.fromOffset(34, 28), ZIndex = 2 }, Row) Corner(Badge, 8) New("UIStroke", { Color = PurpleBright, Thickness = 1, Transparency = 0.55 }, Badge) local BText = Label(Badge, badgeText, 9, PurpleBright, Enum.Font.GothamBold) BText.Size = UDim2.fromScale(1, 1) BText.TextXAlignment = Enum.TextXAlignment.Center local T = Label(Row, title, 10, Color3.fromRGB(125, 107, 145)) T.Position = UDim2.new(0, 42, 0, 0) T.Size = UDim2.new(1, -42, 0, 18) local VText = New("TextLabel", { BackgroundTransparency = 1, Text = value, TextSize = 13, TextColor3 = color or Color3.fromRGB(220, 225, 233), Font = Enum.Font.GothamBold, TextXAlignment = Enum.TextXAlignment.Left, TextYAlignment = Enum.TextYAlignment.Center, Position = UDim2.new(0, 42, 0, 18), Size = UDim2.new(1, -42, 0, 22), TextTruncate = Enum.TextTruncate.AtEnd }, Row) New("Frame", { Position = UDim2.new(0, 42, 1, -1), Size = UDim2.new(1, -42, 0, 1), BackgroundColor3 = PurpleBright, BackgroundTransparency = 0.955, BorderSizePixel = 0 }, Row) return VText end --========================================================-- -- HWID --========================================================-- local function GetHWID() if gethwid then local ok, r = pcall(gethwid) if ok and r then return tostring(r) end end if get_hwid then local ok, r = pcall(get_hwid) if ok and r then return tostring(r) end end return "FHW-" .. tostring(LocalPlayer.UserId) .. "-" .. string.sub(tostring(game.PlaceId), 1, 6) end local hwidString = GetHWID() local HWIDRow = New("Frame", { BackgroundTransparency = 1, Position = UDim2.new(0, 23, 0, 147), Size = UDim2.new(1, -46, 0, 48) }, Details) local HWIDBadge = New("Frame", { BackgroundColor3 = PurpleDeep, BackgroundTransparency = 0.5, BorderSizePixel = 0, Position = UDim2.new(0, 0, 0, 4), Size = UDim2.fromOffset(34, 28), ZIndex = 2 }, HWIDRow) Corner(HWIDBadge, 8) New("UIStroke", { Color = PurpleBright, Thickness = 1, Transparency = 0.55 }, HWIDBadge) local HWIDBadgeText = Label(HWIDBadge, "PC", 9, PurpleBright, Enum.Font.GothamBold) HWIDBadgeText.Size = UDim2.fromScale(1, 1) HWIDBadgeText.TextXAlignment = Enum.TextXAlignment.Center local HWIDTitle = Label(HWIDRow, "HWID", 10, Color3.fromRGB(125, 107, 145)) HWIDTitle.Position = UDim2.new(0, 42, 0, 0) HWIDTitle.Size = UDim2.new(1, -42, 0, 18) local HWIDValue = New("TextLabel", { BackgroundTransparency = 1, Text = hwidString, TextSize = 13, TextColor3 = Color3.fromRGB(220, 225, 233), Font = Enum.Font.GothamBold, TextXAlignment = Enum.TextXAlignment.Left, TextYAlignment = Enum.TextYAlignment.Center, Position = UDim2.new(0, 42, 0, 18), Size = UDim2.new(1, -42, 0, 22), TextTruncate = Enum.TextTruncate.AtEnd }, HWIDRow) New("Frame", { Position = UDim2.new(0, 42, 1, -1), Size = UDim2.new(1, -42, 0, 1), BackgroundColor3 = PurpleBright, BackgroundTransparency = 0.955, BorderSizePixel = 0 }, HWIDRow) local HWIDButton = New("TextButton", { BackgroundTransparency = 1, Text = "", Size = UDim2.fromScale(1, 1), Position = UDim2.fromScale(0, 0), AutoButtonColor = false, ZIndex = 10 }, HWIDRow) local function CopyHWID() pcall(function() if setclipboard then setclipboard(hwidString) end end) Tween(HWIDValue, Fast, { TextTransparency = 1 }) task.wait(0.18) HWIDValue.Text = "Copied!" Tween(HWIDValue, Fast, { TextTransparency = 0 }) task.wait(1.2) Tween(HWIDValue, Fast, { TextTransparency = 1 }) task.wait(0.18) HWIDValue.Text = hwidString Tween(HWIDValue, Fast, { TextTransparency = 0 }) end HWIDButton.MouseButton1Click:Connect(function() task.spawn(CopyHWID) end) HWIDButton.MouseEnter:Connect(function() Tween(HWIDValue, Fast, { TextColor3 = PurpleBright }) end) HWIDButton.MouseLeave:Connect(function() Tween(HWIDValue, Fast, { TextColor3 = Color3.fromRGB(220, 225, 233) }) end) --========================================================-- -- OTHER INFO ROWS --========================================================-- local ExecutorName = "Unknown" pcall(function() ExecutorName = identifyexecutor() end) local DeviceType = "PC" if UserInputService.TouchEnabled and not UserInputService.KeyboardEnabled then DeviceType = "Mobile" elseif UserInputService.GamepadEnabled and not UserInputService.KeyboardEnabled then DeviceType = "Console" end InfoRow(0, "EXE", "Executor", ExecutorName) InfoRow(49, "DEV", "Device", DeviceType) InfoRow(98, "AGE", "Account Age", tostring(LocalPlayer.AccountAge) .. " Days") local GameRowText = InfoRow(196, "GAM", "Game", game.Name, Color3.fromRGB(60, 215, 175)) task.spawn(function() pcall(function() if game.PlaceId > 0 then local info = MarketplaceService:GetProductInfo(game.PlaceId) GameRowText.Text = info.Name end end) end) --========================================================-- -- SESSION + PING --========================================================-- local Stats = New("Frame", { BackgroundTransparency = 1, Position = UDim2.new(0, 23, 0, 256), Size = UDim2.new(1, -46, 0, 58) }, Details) local TimerBadge = New("Frame", { BackgroundColor3 = PurpleDeep, BackgroundTransparency = 0.5, BorderSizePixel = 0, Position = UDim2.new(0, 0, 0.5, -14), Size = UDim2.fromOffset(34, 28) }, Stats) Corner(TimerBadge, 8) New("UIStroke", { Color = PurpleBright, Thickness = 1, Transparency = 0.55 }, TimerBadge) local TBT = Label(TimerBadge, "TMR", 8, PurpleBright, Enum.Font.GothamBold) TBT.Size = UDim2.fromScale(1, 1) TBT.TextXAlignment = Enum.TextXAlignment.Center local Session = Label(Stats, "Session\n00:00", 11, Color3.fromRGB(130, 112, 155)) Session.Position = UDim2.new(0, 42, 0, 0) Session.Size = UDim2.new(0.5, -42, 1, 0) local PingBadge = New("Frame", { BackgroundColor3 = PurpleDeep, BackgroundTransparency = 0.5, BorderSizePixel = 0, Position = UDim2.new(0.52, 0, 0.5, -14), Size = UDim2.fromOffset(34, 28) }, Stats) Corner(PingBadge, 8) New("UIStroke", { Color = PurpleBright, Thickness = 1, Transparency = 0.55 }, PingBadge) local PBT = Label(PingBadge, "SIG", 8, PurpleBright, Enum.Font.GothamBold) PBT.Size = UDim2.fromScale(1, 1) PBT.TextXAlignment = Enum.TextXAlignment.Center local Ping = Label(Stats, "Ping\n0 ms", 11, Color3.fromRGB(130, 112, 155)) Ping.Position = UDim2.new(0.52, 42, 0, 0) Ping.Size = UDim2.new(0.48, -42, 1, 0) local StartTime = os.clock() task.spawn(function() while Alive and GUI.Parent do local elapsed = os.clock() - StartTime Session.Text = string.format("Session\n%02d:%02d", math.floor(elapsed / 60), math.floor(elapsed % 60)) local currentPing = 0 pcall(function() currentPing = math.round(LocalPlayer:GetNetworkPing() * 1000) end) Ping.Text = string.format("Ping\n%d ms", currentPing) task.wait(1) end end) --========================================================-- -- CONNECTION INDICATOR --========================================================-- local Connection = New("Frame", { BackgroundTransparency = 1, Position = UDim2.new(0, 23, 1, -65), Size = UDim2.new(1, -46, 0, 50) }, Sidebar) local ConnectionDot = New("Frame", { Position = UDim2.new(0, 0, 0.5, -6), Size = UDim2.fromOffset(12, 12), BackgroundColor3 = Color3.fromRGB(55, 220, 174), BorderSizePixel = 0 }, Connection) Corner(ConnectionDot, 100) local ConnectionText = Label(Connection, "Connected to Fishy Hub", 12, Color3.fromRGB(60, 215, 175), Enum.Font.GothamBold) ConnectionText.Position = UDim2.new(0, 22, 0, 0) ConnectionText.Size = UDim2.new(1, -22, 0, 23) local ConnectionSub = Label(Connection, "Fishy Hub is ready", 10, Color3.fromRGB(125, 107, 145), Enum.Font.GothamBold) ConnectionSub.Position = UDim2.new(0, 22, 0, 23) ConnectionSub.Size = UDim2.new(1, -22, 0, 20) RegisterText(ConnectionText, "left", 0.80) RegisterText(ConnectionSub, "bottom", 0.85) --========================================================-- -- SERVICE HEADER --========================================================-- local ServiceImage = New("ImageLabel", { Position = UDim2.new(0, Layout.contentPadding, 0, 18), Size = UDim2.fromOffset(96, 56), BackgroundTransparency = 1, BorderSizePixel = 0, Image = "rbxassetid://80533585242529", ScaleType = Enum.ScaleType.Fit, ZIndex = 5 }, MainArea) Corner(ServiceImage, 10) local Active = Label(MainArea, "ACTIVE SERVICE", 10, Color3.fromRGB(190, 125, 255), Enum.Font.GothamBold) Active.Position = UDim2.new(0, Layout.contentPadding + 112, 0, 34) Active.Size = UDim2.new(0.4, 0, 0, 18) RegisterText(Active, "top", 0.40) local ServiceName = Label(MainArea, "Fishy Hub", 19, Color3.fromRGB(237, 241, 247), Enum.Font.GothamBold) ServiceName.Position = UDim2.new(0, Layout.contentPadding + 112, 0, 55) ServiceName.Size = UDim2.new(0.5, 0, 0, 27) RegisterText(ServiceName, "left", 0.45) local Delivery = Label(MainArea, "Verified: Satisfaction Guaranteed", 12, Color3.fromRGB(130, 112, 155), Enum.Font.GothamBold) Delivery.Position = UDim2.new(0, Layout.contentPadding + 112, 0, 83) Delivery.Size = UDim2.new(0.5, 0, 0, 22) RegisterText(Delivery, "bottom", 0.50) --========================================================-- -- ACCESS PANEL (Key system removed) --========================================================-- local Access = New("Frame", { BackgroundTransparency = 1, Position = UDim2.new(0, Layout.contentPadding, 0, 145), Size = UDim2.new(1, -Layout.contentPadding * 2, 1, -310) }, MainArea) local AccessTitle = Label(Access, "SECURE ACCESS", 11, PurpleBright, Enum.Font.GothamBold) AccessTitle.Position = UDim2.new(0, 0, 0, 0) AccessTitle.Size = UDim2.new(1, 0, 0, 20) RegisterText(AccessTitle, "left", 0.55) local AccessDesc = Label(Access, "All Features. All Supported Games. Enjoy!", 12, Color3.fromRGB(130, 112, 155), Enum.Font.GothamBold) AccessDesc.Position = UDim2.new(0, 0, 0, 23) AccessDesc.Size = UDim2.new(1, 0, 0, 22) RegisterText(AccessDesc, "right", 0.58) -- Buttons (repositioned) local buttonRowY = 70 local function ActionButton(parent, badgeText, text, pos, size, primary, mono) local bgColor = mono and MonoDark or (primary and Color3.fromRGB(126, 62, 215) or Color3.fromRGB(42, 25, 68)) local bgTrans = mono and 0.10 or (primary and 0.28 or 0.28) local borderColor = mono and MonoGray or (primary and PurpleBright or Color3.fromRGB(112, 78, 150)) local borderTrans = mono and 0.55 or (primary and 0.90 or 0.90) local textColor = mono and MonoWhite or Color3.fromRGB(240, 245, 250) local Button = New("TextButton", { Text = "", BackgroundColor3 = bgColor, BackgroundTransparency = bgTrans, BorderSizePixel = 0, Position = pos, Size = size, AutoButtonColor = false }, parent) Corner(Button, 14) local Border = New("UIStroke", { Color = borderColor, Transparency = borderTrans, Thickness = 1 }, Button) local BadgeFrame = New("Frame", { BackgroundColor3 = PurpleDeep, BackgroundTransparency = mono and 0.80 or (primary and 0.55 or 0.65), BorderSizePixel = 0, Position = UDim2.new(0, 12, 0.5, -13), Size = UDim2.fromOffset(30, 26), ZIndex = (Button.ZIndex or 1) + 1 }, Button) Corner(BadgeFrame, 7) local BadgeLbl = Label(BadgeFrame, badgeText, 8, PurpleBright, Enum.Font.GothamBold) BadgeLbl.Size = UDim2.fromScale(1, 1) BadgeLbl.TextXAlignment = Enum.TextXAlignment.Center BadgeLbl.ZIndex = (BadgeFrame.ZIndex or 1) + 1 local ButtonText = Label(Button, text, 14, textColor, Enum.Font.GothamBold) ButtonText.Position = UDim2.new(0, 48, 0, 0) ButtonText.Size = UDim2.new(1, -54, 1, 0) local hoverBg = mono and 0.00 or 0.12 local defaultBg = bgTrans local hoverBd = mono and 0.30 or 0.35 local defaultBd = borderTrans Button.MouseEnter:Connect(function() Tween(Button, Fast, { BackgroundTransparency = hoverBg }) Tween(Border, Fast, { Transparency = hoverBd }) end) Button.MouseLeave:Connect(function() Tween(Button, Fast, { BackgroundTransparency = defaultBg }) Tween(Border, Fast, { Transparency = defaultBd }) end) return Button end local ScriptbloxBtn = ActionButton(Access, "SBX", "Scriptblox", UDim2.new(0, 0, 0, buttonRowY), UDim2.new(0.32, -6, 0, 54), false, true ) local GamesBtn = ActionButton(Access, "GAM", "Supported Games", UDim2.new(0.34, 3, 0, buttonRowY), UDim2.new(0.32, -6, 0, 54), false, true ) local SettingsBtn = ActionButton(Access, "CFG", "Settings", UDim2.new(0.68, 6, 0, buttonRowY), UDim2.new(0.32, -6, 0, 54), false, true ) RegisterButton(ScriptbloxBtn, 0.80) RegisterButton(GamesBtn, 0.83) RegisterButton(SettingsBtn, 0.86) -- Scriptblox button click ScriptbloxBtn.MouseButton1Click:Connect(function() pcall(function() if setclipboard then setclipboard("https://scriptblox.com/u/fishylvl") end end) end) -- Games button (popup) --========================================================-- -- SUPPORTED GAMES POPUP --========================================================-- local SupportedGames = { { name = "Blox Fruits", badge = "BF" }, { name = "Pet Simulator 99", badge = "PS" }, { name = "Brookhaven RP", badge = "BH" }, { name = "Adopt Me!", badge = "AM" }, { name = "Da Hood", badge = "DH" }, { name = "Arsenal", badge = "AR" }, { name = "Anime Adventures", badge = "AA" }, { name = "Muscle Legends", badge = "ML" }, } local PopupOverlay = New("Frame", { Name = "PopupOverlay", Size = UDim2.fromScale(1, 1), BackgroundColor3 = Color3.fromRGB(0, 0, 0), BackgroundTransparency = 1, BorderSizePixel = 0, ZIndex = 200, Visible = false }, Main) local PopupCard = New("Frame", { Name = "PopupCard", AnchorPoint = Vector2.new(0.5, 0.5), Position = UDim2.fromScale(0.5, 0.5), Size = UDim2.fromOffset(340, 420), BackgroundColor3 = Color3.fromRGB(14, 9, 26), BackgroundTransparency = 0.05, BorderSizePixel = 0, ZIndex = 201 }, PopupOverlay) Corner(PopupCard, 20) New("UIStroke", { Color = Purple, Thickness = 1.5, Transparency = 0.45 }, PopupCard) New("UIGradient", { Rotation = 130, Color = ColorSequence.new({ ColorSequenceKeypoint.new(0, Color3.fromRGB(38, 22, 66)), ColorSequenceKeypoint.new(0.6, Color3.fromRGB(14, 8, 24)), ColorSequenceKeypoint.new(1, Color3.fromRGB(7, 3, 15)) }), Transparency = NumberSequence.new({ NumberSequenceKeypoint.new(0, 0.05), NumberSequenceKeypoint.new(1, 0.15) }) }, PopupCard) local PopupDotClose = New("TextButton", { Text = "x", TextSize = 9, Font = Enum.Font.GothamBold, TextColor3 = Color3.fromRGB(140, 40, 30), Size = UDim2.fromOffset(14, 14), Position = UDim2.new(0, 18, 0, 18), BackgroundColor3 = Color3.fromRGB(255, 95, 86), BackgroundTransparency = 0, BorderSizePixel = 0, AutoButtonColor = false, ZIndex = 205 }, PopupCard) Corner(PopupDotClose, 100) New("Frame", { Size = UDim2.fromOffset(14, 14), Position = UDim2.new(0, 40, 0, 18), BackgroundColor3 = Color3.fromRGB(255, 189, 46), BorderSizePixel = 0, ZIndex = 205 }, PopupCard) New("Frame", { Size = UDim2.fromOffset(14, 14), Position = UDim2.new(0, 62, 0, 18), BackgroundColor3 = Color3.fromRGB(40, 205, 65), BorderSizePixel = 0, ZIndex = 205 }, PopupCard) local PopupTitle = Label(PopupCard, "Supported Games", 16, Color3.fromRGB(240, 235, 255), Enum.Font.GothamBold) PopupTitle.AnchorPoint = Vector2.new(0.5, 0) PopupTitle.Position = UDim2.new(0.5, 0, 0, 12) PopupTitle.Size = UDim2.new(1, -20, 0, 28) PopupTitle.TextXAlignment = Enum.TextXAlignment.Center local PopupSub = Label(PopupCard, tostring(#SupportedGames) .. " games currently active", 11, Color3.fromRGB(125, 107, 145), Enum.Font.GothamBold) PopupSub.AnchorPoint = Vector2.new(0.5, 0) PopupSub.Position = UDim2.new(0.5, 0, 0, 40) PopupSub.Size = UDim2.new(1, -20, 0, 18) PopupSub.TextXAlignment = Enum.TextXAlignment.Center New("Frame", { Position = UDim2.new(0, 24, 0, 65), Size = UDim2.new(1, -48, 0, 1), BackgroundColor3 = PurpleBright, BackgroundTransparency = 0.82, BorderSizePixel = 0, ZIndex = 206 }, PopupCard) local GameScroll = New("ScrollingFrame", { Position = UDim2.new(0, 0, 0, 73), Size = UDim2.new(1, 0, 1, -85), BackgroundTransparency = 1, BorderSizePixel = 0, ScrollBarThickness = 3, ScrollBarImageColor3 = PurpleSoft, CanvasSize = UDim2.fromOffset(0, 0), AutomaticCanvasSize = Enum.AutomaticSize.Y, ZIndex = 206, ClipsDescendants = true }, PopupCard) New("UIPadding", { PaddingLeft = UDim.new(0, 20), PaddingRight = UDim.new(0, 20), PaddingTop = UDim.new(0, 6), PaddingBottom = UDim.new(0, 10) }, GameScroll) New("UIListLayout", { FillDirection = Enum.FillDirection.Vertical, SortOrder = Enum.SortOrder.LayoutOrder, Padding = UDim.new(0, 4) }, GameScroll) for i, gameEntry in ipairs(SupportedGames) do local Row = New("Frame", { Name = "GameRow_" .. i, Size = UDim2.new(1, 0, 0, 46), BackgroundColor3 = Color3.fromRGB(26, 15, 44), BackgroundTransparency = 0.35, BorderSizePixel = 0, ZIndex = 207, LayoutOrder = i }, GameScroll) Corner(Row, 10) New("UIStroke", { Color = PurpleDark, Thickness = 1, Transparency = 0.55 }, Row) local IconFrame = New("Frame", { Position = UDim2.new(0, 8, 0.5, -14), Size = UDim2.fromOffset(36, 28), BackgroundColor3 = PurpleDeep, BackgroundTransparency = 0.35, BorderSizePixel = 0, ZIndex = 208 }, Row) Corner(IconFrame, 8) local IconLabel = Label(IconFrame, gameEntry.badge, 9, PurpleBright, Enum.Font.GothamBold) IconLabel.Size = UDim2.fromScale(1, 1) IconLabel.TextXAlignment = Enum.TextXAlignment.Center local NameLabel = Label(Row, gameEntry.name, 14, Color3.fromRGB(230, 225, 245), Enum.Font.GothamBold) NameLabel.Position = UDim2.new(0, 52, 0, 0) NameLabel.Size = UDim2.new(1, -66, 1, 0) local Dot = New("Frame", { AnchorPoint = Vector2.new(1, 0.5), Position = UDim2.new(1, -8, 0.5, 0), Size = UDim2.fromOffset(8, 8), BackgroundColor3 = Color3.fromRGB(55, 225, 174), BorderSizePixel = 0, ZIndex = 208 }, Row) Corner(Dot, 100) Row.MouseEnter:Connect(function() Tween(Row, Fast, { BackgroundTransparency = 0.12 }) end) Row.MouseLeave:Connect(function() Tween(Row, Fast, { BackgroundTransparency = 0.35 }) end) end local popupOpen = false local function OpenPopup() if popupOpen then return end popupOpen = true PopupOverlay.Visible = true PopupCard.Position = UDim2.new(0.5, 0, 0.42, 0) PopupCard.BackgroundTransparency = 1 PopupOverlay.BackgroundTransparency = 1 Tween(PopupOverlay, Smooth, { BackgroundTransparency = 0.55 }) Tween(PopupCard, Smooth, { BackgroundTransparency = 0.05, Position = UDim2.fromScale(0.5, 0.5) }) end local function ClosePopup() if not popupOpen then return end popupOpen = false Tween(PopupOverlay, Fast, { BackgroundTransparency = 1 }) Tween(PopupCard, Fast, { BackgroundTransparency = 1, Position = UDim2.new(0.5, 0, 0.56, 0) }) task.wait(0.22) if not popupOpen then PopupOverlay.Visible = false PopupCard.Position = UDim2.new(0.5, 0, 0.42, 0) end end PopupDotClose.MouseButton1Click:Connect(ClosePopup) PopupOverlay.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then local cp = PopupCard.AbsolutePosition local cs = PopupCard.AbsoluteSize local mx = input.Position.X local my = input.Position.Y if mx < cp.X or mx > cp.X + cs.X or my < cp.Y or my > cp.Y + cs.Y then ClosePopup() end end end) GamesBtn.MouseButton1Click:Connect(function() if popupOpen then ClosePopup() else OpenPopup() end end) -- Settings button (popup) --========================================================-- -- SETTINGS POPUP --========================================================-- local SettingsOverlay = New("Frame", { Name = "SettingsOverlay", Size = UDim2.fromScale(1, 1), BackgroundColor3 = Color3.fromRGB(0, 0, 0), BackgroundTransparency = 1, BorderSizePixel = 0, ZIndex = 200, Visible = false }, Main) local SettingsCard = New("Frame", { Name = "SettingsCard", AnchorPoint = Vector2.new(0.5, 0.5), Position = UDim2.fromScale(0.5, 0.5), Size = UDim2.fromOffset(360, 250), BackgroundColor3 = Color3.fromRGB(14, 9, 26), BackgroundTransparency = 0.05, BorderSizePixel = 0, ZIndex = 201 }, SettingsOverlay) Corner(SettingsCard, 20) New("UIStroke", { Color = Purple, Thickness = 1.5, Transparency = 0.45 }, SettingsCard) New("UIGradient", { Rotation = 130, Color = ColorSequence.new({ ColorSequenceKeypoint.new(0, Color3.fromRGB(38, 22, 66)), ColorSequenceKeypoint.new(0.6, Color3.fromRGB(14, 8, 24)), ColorSequenceKeypoint.new(1, Color3.fromRGB(7, 3, 15)) }), Transparency = NumberSequence.new({ NumberSequenceKeypoint.new(0, 0.05), NumberSequenceKeypoint.new(1, 0.15) }) }, SettingsCard) local SettingsDotClose = New("TextButton", { Text = "x", TextSize = 9, Font = Enum.Font.GothamBold, TextColor3 = Color3.fromRGB(140, 40, 30), Size = UDim2.fromOffset(14, 14), Position = UDim2.new(0, 18, 0, 18), BackgroundColor3 = Color3.fromRGB(255, 95, 86), BackgroundTransparency = 0, BorderSizePixel = 0, AutoButtonColor = false, ZIndex = 205 }, SettingsCard) Corner(SettingsDotClose, 100) New("Frame", { Size = UDim2.fromOffset(14, 14), Position = UDim2.new(0, 40, 0, 18), BackgroundColor3 = Color3.fromRGB(255, 189, 46), BorderSizePixel = 0, ZIndex = 205 }, SettingsCard) New("Frame", { Size = UDim2.fromOffset(14, 14), Position = UDim2.new(0, 62, 0, 18), BackgroundColor3 = Color3.fromRGB(40, 205, 65), BorderSizePixel = 0, ZIndex = 205 }, SettingsCard) local SettingsPopupTitle = Label(SettingsCard, "Settings", 16, Color3.fromRGB(240, 235, 255), Enum.Font.GothamBold) SettingsPopupTitle.AnchorPoint = Vector2.new(0.5, 0) SettingsPopupTitle.Position = UDim2.new(0.5, 0, 0, 12) SettingsPopupTitle.Size = UDim2.new(1, -20, 0, 28) SettingsPopupTitle.TextXAlignment = Enum.TextXAlignment.Center local SettingsPopupSub = Label(SettingsCard, "1 option available", 11, Color3.fromRGB(125, 107, 145), Enum.Font.GothamBold) SettingsPopupSub.AnchorPoint = Vector2.new(0.5, 0) SettingsPopupSub.Position = UDim2.new(0.5, 0, 0, 40) SettingsPopupSub.Size = UDim2.new(1, -20, 0, 18) SettingsPopupSub.TextXAlignment = Enum.TextXAlignment.Center New("Frame", { Position = UDim2.new(0, 24, 0, 65), Size = UDim2.new(1, -48, 0, 1), BackgroundColor3 = PurpleBright, BackgroundTransparency = 0.82, BorderSizePixel = 0, ZIndex = 206 }, SettingsCard) local ScriptbloxSettingsButton = New("TextButton", { Text = "Copy Scriptblox Profile", TextSize = 12, Font = Enum.Font.GothamBold, TextColor3 = PurpleBright, AnchorPoint = Vector2.new(0.5, 0.5), Position = UDim2.new(0.5, 0, 0.5, 0), Size = UDim2.new(1, -48, 0, 48), BackgroundColor3 = PurpleDeep, BackgroundTransparency = 0.28, BorderSizePixel = 0, AutoButtonColor = false, ZIndex = 207 }, SettingsCard) Corner(ScriptbloxSettingsButton, 12) New("UIStroke", { Color = PurpleBright, Thickness = 1, Transparency = 0.55 }, ScriptbloxSettingsButton) ScriptbloxSettingsButton.MouseButton1Click:Connect(function() pcall(function() if setclipboard then setclipboard("https://scriptblox.com/u/fishylvl") end end) ScriptbloxSettingsButton.Text = "Copied!" task.wait(1.2) ScriptbloxSettingsButton.Text = "Copy Scriptblox Profile" end) local settingsOpen = false local function OpenSettings() if settingsOpen then return end settingsOpen = true SettingsOverlay.Visible = true SettingsCard.Position = UDim2.new(0.5, 0, 0.42, 0) SettingsCard.BackgroundTransparency = 1 SettingsOverlay.BackgroundTransparency = 1 Tween(SettingsOverlay, Smooth, { BackgroundTransparency = 0.55 }) Tween(SettingsCard, Smooth, { BackgroundTransparency = 0.05, Position = UDim2.fromScale(0.5, 0.5) }) end local function CloseSettings() if not settingsOpen then return end settingsOpen = false Tween(SettingsOverlay, Fast, { BackgroundTransparency = 1 }) Tween(SettingsCard, Fast, { BackgroundTransparency = 1, Position = UDim2.new(0.5, 0, 0.56, 0) }) task.wait(0.22) if not settingsOpen then SettingsOverlay.Visible = false SettingsCard.Position = UDim2.new(0.5, 0, 0.42, 0) end end SettingsDotClose.MouseButton1Click:Connect(CloseSettings) SettingsOverlay.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then local cp = SettingsCard.AbsolutePosition local cs = SettingsCard.AbsoluteSize local mx = input.Position.X local my = input.Position.Y if mx < cp.X or mx > cp.X + cs.X or my < cp.Y or my > cp.Y + cs.Y then CloseSettings() end end end) SettingsBtn.MouseButton1Click:Connect(function() if settingsOpen then CloseSettings() else OpenSettings() end end) --========================================================-- -- READY --========================================================-- local Ready = New("Frame", { BackgroundTransparency = 1, AnchorPoint = Vector2.new(0, 1), Position = UDim2.new(0, Layout.contentPadding, 1, -180), Size = UDim2.new(1, -Layout.contentPadding * 2, 0, 42) }, MainArea) New("Frame", { BackgroundColor3 = Purple, BorderSizePixel = 0, Size = UDim2.fromOffset(4, 42) }, Ready) local ReadyText = Label(Ready, "Ready.", 13, PurpleBright, Enum.Font.GothamBold) ReadyText.Position = UDim2.new(0, 12, 0, 0) ReadyText.Size = UDim2.new(1, -12, 1, 0) RegisterText(ReadyText, "left", 0.92) --========================================================-- -- PREMIUM --========================================================-- local Premium = New("Frame", { BackgroundTransparency = 1, AnchorPoint = Vector2.new(0, 1), Position = UDim2.new(0, Layout.contentPadding, 1, -Layout.contentPadding), Size = UDim2.new(1, -Layout.contentPadding * 2, 0, 155) }, MainArea) New("Frame", { Position = UDim2.new(0, 0, 0, 0), Size = UDim2.new(1, 0, 0, 1), BackgroundColor3 = Color3.fromRGB(255, 255, 255), BackgroundTransparency = 0.94, BorderSizePixel = 0 }, Premium) local PBadge = New("TextLabel", { Text = "Fishy Hub", TextSize = 9, Font = Enum.Font.GothamBold, TextColor3 = PurpleBright, BackgroundColor3 = PurpleDeep, BackgroundTransparency = 0.45, BorderSizePixel = 0, Position = UDim2.new(0, 0, 0, 15), Size = UDim2.fromOffset(83, 26) }, Premium) Corner(PBadge, 8) local PremiumTitle = Label(Premium, "Premium+ Access", 18, Color3.fromRGB(239, 243, 248), Enum.Font.GothamBold) PremiumTitle.Position = UDim2.new(0, 0, 0, 47) PremiumTitle.Size = UDim2.new(0.6, 0, 0, 27) RegisterText(PremiumTitle, "left", 0.95) local PremiumDesc = Label(Premium, "unlock even more of Fishy Hub", 12, Color3.fromRGB(130, 112, 155), Enum.Font.GothamBold) PremiumDesc.Position = UDim2.new(0, 0, 0, 75) PremiumDesc.Size = UDim2.new(0.7, 0, 0, 22) RegisterText(PremiumDesc, "bottom", 0.98) local Pricing = Label(Premium, "discord.gg/...", 12, PurpleBright, Enum.Font.GothamBold) Pricing.Position = UDim2.new(0, 0, 0, 102) Pricing.Size = UDim2.new(0.6, 0, 0, 20) RegisterText(Pricing, "right", 1.01) local Perks = Label(Premium, "priority support | early access | customs | giveaways | special access", 11, Color3.fromRGB(130, 112, 155), Enum.Font.GothamBold) Perks.Position = UDim2.new(0, 0, 0, 126) Perks.Size = UDim2.new(0.7, 0, 0, 20) RegisterText(Perks, "bottom", 1.04) local PremiumViewBtn = ActionButton(Premium, "VIP", "View Options", UDim2.new(1, -170, 0, 53), UDim2.fromOffset(165, 56), false, true ) RegisterButton(PremiumViewBtn, 1.06) --========================================================-- -- RESPONSIVE RESIZE --========================================================-- local function ApplyResponsiveLayout() Layout = GetLayoutProfile() ControlGutterWidth = Layout.controlGutterWidth Header.Size = UDim2.new(1, 0, 0, Layout.headerHeight) Content.Position = UDim2.new(0, 0, 0, Layout.headerHeight) Content.Size = UDim2.new(1, 0, 1, -Layout.headerHeight) Access.Position = UDim2.new(0, Layout.contentPadding, 0, 145) Access.Size = UDim2.new(1, -Layout.contentPadding * 2, 1, -310) Title.TextSize = Layout.titleSize Subtitle.TextSize = Layout.subtitleSize Backdrop.BackgroundTransparency = Layout.backdropTransparency Main.BackgroundTransparency = Layout.mainTransparency if SidebarOpen then SidebarWidth = Layout.sidebarWidth Sidebar.Size = UDim2.new(SidebarWidth, 0, 1, 0) MainArea.Position = UDim2.new(SidebarWidth, ControlGutterWidth, 0, 0) MainArea.Size = UDim2.new(1 - SidebarWidth, -ControlGutterWidth, 1, 0) end PositionSizeControl() end local camera = workspace.CurrentCamera if camera then camera:GetPropertyChangedSignal("ViewportSize"):Connect(function() if Alive and GUI.Parent then ApplyResponsiveLayout() end end) end --========================================================-- -- SIDEBAR OPEN / CLOSE --========================================================-- local function SetSidebar(open) SidebarOpen = open if open then Tween(Sidebar, Smooth, { Size = UDim2.new(SidebarWidth, 0, 1, 0) }) Tween(MainArea, Smooth, { Position = UDim2.new(SidebarWidth, ControlGutterWidth, 0, 0), Size = UDim2.new(1 - SidebarWidth, -ControlGutterWidth, 1, 0) }) Tween(Username, Smooth, { TextTransparency = 0 }) Tween(Handle, Smooth, { TextTransparency = 0 }) Tween(ConnectionText, Smooth, { TextTransparency = 0 }) Tween(ConnectionSub, Smooth, { TextTransparency = 0 }) else Tween(Sidebar, Smooth, { Size = UDim2.new(MinSidebarWidth, 0, 1, 0) }) Tween(MainArea, Smooth, { Position = UDim2.new(MinSidebarWidth, ControlGutterWidth, 0, 0), Size = UDim2.new(1 - MinSidebarWidth, -ControlGutterWidth, 1, 0) }) Tween(Username, Smooth, { TextTransparency = 1 }) Tween(Handle, Smooth, { TextTransparency = 1 }) Tween(ConnectionText, Smooth, { TextTransparency = 1 }) Tween(ConnectionSub, Smooth, { TextTransparency = 1 }) end end ProfileToggle.MouseButton1Click:Connect(function() SetSidebar(not SidebarOpen) end) Minimize.MouseButton1Click:Connect(function() SetSidebar(not SidebarOpen) end) --========================================================-- -- RESIZE SIDEBAR --========================================================-- local function UpdateSidebarWidth(mouseX) if not Resizing or not SidebarOpen then return end local contentLeft = Content.AbsolutePosition.X local contentWidth = Content.AbsoluteSize.X SidebarWidth = math.clamp((mouseX - contentLeft) / contentWidth, MinSidebarWidth, MaxSidebarWidth) Sidebar.Size = UDim2.new(SidebarWidth, 0, 1, 0) MainArea.Position = UDim2.new(SidebarWidth, ControlGutterWidth, 0, 0) MainArea.Size = UDim2.new(1 - SidebarWidth, -ControlGutterWidth, 1, 0) end ResizeHandle.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then Resizing = true Tween(ResizeHandle, Fast, { BackgroundColor3 = PurpleSoft, BackgroundTransparency = 0.15 }) Tween(ResizeLine, Fast, { BackgroundTransparency = 0 }) end end) UserInputService.InputChanged:Connect(function(input) if Resizing and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then UpdateSidebarWidth(input.Position.X) end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then Resizing = false Tween(ResizeHandle, Fast, { BackgroundColor3 = PurpleDeep, BackgroundTransparency = 0.45 }) Tween(ResizeLine, Fast, { BackgroundTransparency = 0.25 }) end end) ResizeHandle.MouseEnter:Connect(function() if not Resizing then Tween(ResizeHandle, Fast, { BackgroundTransparency = 0.25 }) Tween(ResizeLine, Fast, { BackgroundTransparency = 0 }) end end) ResizeHandle.MouseLeave:Connect(function() if not Resizing then Tween(ResizeHandle, Fast, { BackgroundTransparency = 0.45 }) Tween(ResizeLine, Fast, { BackgroundTransparency = 0.25 }) end end) --========================================================-- -- HEADER HOVER + CLOSE --========================================================-- Minimize.MouseEnter:Connect(function() Tween(Minimize, Fast, { BackgroundColor3 = Color3.fromRGB(74, 42, 110) }) end) Minimize.MouseLeave:Connect(function() Tween(Minimize, Fast, { BackgroundColor3 = PurpleDeep }) end) Close.MouseEnter:Connect(function() Tween(Close, Fast, { BackgroundColor3 = Color3.fromRGB(130, 48, 100) }) end) Close.MouseLeave:Connect(function() Tween(Close, Fast, { BackgroundColor3 = PurpleDeep }) end) Close.MouseButton1Click:Connect(function() Alive = false Tween(Main, Smooth, { BackgroundTransparency = 1 }) Tween(Backdrop, Smooth, { BackgroundTransparency = 1 }) task.wait(0.4) if GUI then GUI:Destroy() end end) --========================================================-- -- OPEN ANIMATION --========================================================-- Tween(Backdrop, Smooth, { BackgroundTransparency = Layout.backdropTransparency }) Tween(Main, Smooth, { BackgroundTransparency = Layout.mainTransparency }) --========================================================-- -- INTRO ANIMATIONS --========================================================-- task.spawn(function() task.wait(0.30) for _, entry in ipairs(IntroTextElements) do AnimateTextSlide(entry.label, entry.direction, entry.delay) end for _, entry in ipairs(IntroButtonElements) do AnimateButtonIntro(entry.button, entry.delay) end end) --========================================================-- -- MAIN SWEEP --========================================================-- task.spawn(function() local rotation = 0 while Alive and GUI.Parent do rotation = (rotation + 2.2) % 360 MainSweep.Rotation = rotation task.wait() end end) --========================================================-- -- CONNECTION DOT PULSE --========================================================-- task.spawn(function() while Alive and GUI.Parent do Tween(ConnectionDot, TweenInfo.new(1.4, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut), { BackgroundTransparency = 0.18 }) task.wait(1.4) Tween(ConnectionDot, TweenInfo.new(1.4, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut), { BackgroundTransparency = 0 }) task.wait(1.4) end end) --========================================================-- -- SCRIPT LOADED IMMEDIATELY --========================================================-- -- No key system – the hub is now ready to use.