-- [[ 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 ]] --[[ brisk.survival FREE VERSION (LIMITED EDITION) ⚠️ THIS IS THE FREE VERSION ⚠️ The FULL version is completely FREE in our Discord: → https://discord.gg/EN6YnuCjYV → Verify, then grab the full build from #releases This free version has: - Only 2 pages (Aimbot + Visuals) - Half the features locked behind Discord - Features that "work" but not really - An annoying popup every 30 seconds telling you to join Discord - "Premium" features that just show a "JOIN DISCORD" message Full version (all FREE) includes: - Real Aimbot with prediction / smoothness / silent aim - Full ESP (skeleton, weapon, off-screen arrows) - Gun glow, world tinter, misc, configs - Map teleport, car fly, hit sounds, hit notifier - No watermarks, no limits → https://discord.gg/EN6YnuCjYV ]] local Players = game:GetService("Players") local UIS = game:GetService("UserInputService") local TweenService = game:GetService("TweenService") local RunService = game:GetService("RunService") local HttpService = game:GetService("HttpService") local ReplicatedStorage = game:GetService("ReplicatedStorage") local SoundService = game:GetService("SoundService") local Lighting = game:GetService("Lighting") local Debris = game:GetService("Debris") local GuiService = game:GetService("GuiService") local LocalPlayer = Players.LocalPlayer local PlayerGui = LocalPlayer:WaitForChild("PlayerGui") local mouse = LocalPlayer:GetMouse() local Camera = workspace.CurrentCamera --============================================================-- -- DISCORD CONFIG --============================================================-- local DISCORD_LINK = "https://discord.gg/EN6YnuCjYV" local DISCORD_DISPLAY = "discord.gg/EN6YnuCjYV" --============================================================-- -- THEME (intentionally worse than the full version) --============================================================-- local Theme = { Background = Color3.fromRGB(20, 20, 20), Sidebar = Color3.fromRGB(25, 25, 25), Panel = Color3.fromRGB(30, 30, 30), Panel2 = Color3.fromRGB(35, 35, 35), Border = Color3.fromRGB(50, 50, 50), BorderLight = Color3.fromRGB(70, 70, 70), Cyan = Color3.fromRGB(100, 180, 220), Pink = Color3.fromRGB(200, 130, 180), Green = Color3.fromRGB(100, 200, 100), Red = Color3.fromRGB(220, 80, 80), Yellow = Color3.fromRGB(220, 200, 80), White = Color3.fromRGB(220, 220, 220), Text = Color3.fromRGB(180, 180, 180), SubText = Color3.fromRGB(120, 120, 120), Muted = Color3.fromRGB(80, 80, 80), Disabled = Color3.fromRGB(40, 40, 40), } local ACCENT = Theme.Cyan local WINDOW_WIDTH = 700 local WINDOW_HEIGHT = 480 local SIDEBAR_WIDTH = 180 local CARD_GAP = 10 local CARD_HEIGHT = 200 --============================================================-- -- SOUNDS (bad quality) --============================================================-- local SFX = {} local sfxEnabled = true local function makeSfx(id, volume, pitch) local s = Instance.new("Sound") s.SoundId = id s.Volume = volume or 0.5 s.PlaybackSpeed = pitch or 1 s.Parent = SoundService return s end SFX.ToggleOn = makeSfx("rbxassetid://6895079853", 0.2, 1.5) SFX.ToggleOff = makeSfx("rbxassetid://6895079853", 0.2, 0.7) SFX.Error = makeSfx("rbxassetid://5043539486", 0.3, 0.5) local function playSfx(sound) if not sfxEnabled or not sound then return end task.spawn(function() local clone = sound:Clone() clone.Parent = SoundService clone:Play() task.delay(2, function() if clone then clone:Destroy() end end) end) end local oldGui = PlayerGui:FindFirstChild("brisk_survival_free") if oldGui then oldGui:Destroy() end local oldNotifs = PlayerGui:FindFirstChild("brisk_survival_free_notifs") if oldNotifs then oldNotifs:Destroy() end --============================================================-- -- HELPERS --============================================================-- local function New(className, properties, parent) local object = Instance.new(className) for property, value in pairs(properties or {}) do object[property] = value end object.Parent = parent return object end local function Corner(object, radius) local r = radius if r == "pill" then r = math.huge elseif r == nil then r = 4 end local corner = Instance.new("UICorner") if r == math.huge then corner.CornerRadius = UDim.new(1, 0) else corner.CornerRadius = UDim.new(0, r) end corner.Parent = object return corner end local function Outline(object, color, thickness, transparency) local stroke = Instance.new("UIStroke") stroke.Color = color or Theme.Border stroke.Thickness = thickness or 1 stroke.Transparency = transparency or 0 stroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border stroke.Parent = object return stroke end local function Tween(object, properties, duration) local tween = TweenService:Create( object, TweenInfo.new(duration or 0.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), properties ) tween:Play() return tween end local function Label(parent, text, position, size, textSize, color) return New("TextLabel", { Position = position, Size = size, BackgroundTransparency = 1, Text = text, Font = Enum.Font.SourceSans, TextSize = textSize or 10, TextColor3 = color or Theme.Text, TextXAlignment = Enum.TextXAlignment.Left, TextYAlignment = Enum.TextYAlignment.Center, }, parent) end --============================================================-- -- FLAGS + OPTIONS --============================================================-- local Flags = {} local Options = {} local function registerConfig(flag, type, changeState, oldargs) Options[flag] = { type = type, changeState = changeState, oldargs = oldargs or {} } end --============================================================-- -- DISCORD GATE GUI --============================================================-- local GateGui = New("ScreenGui", { Name = "brisk_survival_free_gate", ResetOnSpawn = false, IgnoreGuiInset = true, DisplayOrder = 2000, ZIndexBehavior = Enum.ZIndexBehavior.Sibling, }, PlayerGui) local GateMain = New("Frame", { Name = "Gate", Size = UDim2.fromOffset(500, 420), Position = UDim2.new(0.5, -250, 0.5, -210), BackgroundColor3 = Color3.fromRGB(25, 25, 30), BorderSizePixel = 0, }, GateGui) Corner(GateMain, 10) Outline(GateMain, Color3.fromRGB(88, 101, 242), 2) local DiscordLogo = New("Frame", { Position = UDim2.new(0.5, -40, 0, 25), Size = UDim2.fromOffset(80, 80), BackgroundColor3 = Color3.fromRGB(88, 101, 242), BorderSizePixel = 0, }, GateMain) Corner(DiscordLogo, "pill") Label(DiscordLogo, "💬", UDim2.fromOffset(0, 0), UDim2.fromScale(1, 1), 40, Color3.fromRGB(255,255,255)).TextXAlignment = Enum.TextXAlignment.Center local GateTitle = Label(GateMain, "JOIN THE DISCORD FOR FULL VERSION", UDim2.fromOffset(0, 115), UDim2.new(1, 0, 0, 30), 16, Color3.fromRGB(255,255,255)) GateTitle.TextXAlignment = Enum.TextXAlignment.Center GateTitle.Font = Enum.Font.SourceSansBold local GateSub = Label(GateMain, "The FULL version is 100% FREE — just join the Discord.", UDim2.fromOffset(0, 148), UDim2.new(1, 0, 0, 20), 11, Color3.fromRGB(180, 180, 180)) GateSub.TextXAlignment = Enum.TextXAlignment.Center local GateSub2 = Label(GateMain, "This free version only has basic Aimbot + limited ESP.", UDim2.fromOffset(0, 168), UDim2.new(1, 0, 0, 20), 11, Color3.fromRGB(180, 180, 180)) GateSub2.TextXAlignment = Enum.TextXAlignment.Center local GateLink = Label(GateMain, DISCORD_DISPLAY, UDim2.fromOffset(0, 195), UDim2.new(1, 0, 0, 20), 13, Color3.fromRGB(120, 140, 255)) GateLink.TextXAlignment = Enum.TextXAlignment.Center GateLink.Font = Enum.Font.SourceSansBold local DiscordBtn = New("TextButton", { Position = UDim2.new(0.5, -140, 0, 230), Size = UDim2.fromOffset(280, 42), BackgroundColor3 = Color3.fromRGB(88, 101, 242), BorderSizePixel = 0, Text = "JOIN DISCORD (FULL FREE VERSION)", Font = Enum.Font.SourceSansBold, TextColor3 = Color3.fromRGB(255,255,255), TextSize = 13, AutoButtonColor = false, }, GateMain) Corner(DiscordBtn, 6) Outline(DiscordBtn, Color3.fromRGB(120, 130, 255), 2) DiscordBtn.MouseButton1Click:Connect(function() if setclipboard then setclipboard(DISCORD_LINK) local copyNote = Label(GateMain, "Link copied: " .. DISCORD_DISPLAY, UDim2.fromOffset(0, 280), UDim2.new(1, 0, 0, 20), 10, Color3.fromRGB(100, 220, 100)) copyNote.TextXAlignment = Enum.TextXAlignment.Center task.delay(3, function() copyNote:Destroy() end) end end) local SkipBtn = New("TextButton", { Position = UDim2.new(0.5, -140, 0, 295), Size = UDim2.fromOffset(280, 35), BackgroundColor3 = Color3.fromRGB(40, 40, 45), BorderSizePixel = 0, Text = "Continue with FREE version (limited)", Font = Enum.Font.SourceSans, TextColor3 = Color3.fromRGB(150, 150, 150), TextSize = 11, AutoButtonColor = false, }, GateMain) Corner(SkipBtn, 6) Outline(SkipBtn, Color3.fromRGB(70, 70, 75), 1) SkipBtn.MouseButton1Click:Connect(function() GateGui.Enabled = false notify("Using FREE version. Join Discord for the FULL free version!", "warn", 5) end) local GateFooter = Label(GateMain, "Full version includes: Aimbot prediction, silent aim, weapon ESP, gun glow, world tinter, map teleport & MORE", UDim2.fromOffset(15, 345), UDim2.new(1, -30, 0, 50), 9, Color3.fromRGB(140, 140, 140)) GateFooter.TextXAlignment = Enum.TextXAlignment.Center GateFooter.TextWrapped = true --============================================================-- -- NOTIFICATIONS --============================================================-- local NotifyGui = New("ScreenGui", { Name = "brisk_survival_free_notifs", ResetOnSpawn = false, IgnoreGuiInset = true, DisplayOrder = 1000, ZIndexBehavior = Enum.ZIndexBehavior.Sibling, }, PlayerGui) local NotifyHolder = New("Frame", { Name = "Holder", AnchorPoint = Vector2.new(1, 0), Position = UDim2.new(1, -16, 0, 16), Size = UDim2.fromOffset(280, 400), BackgroundTransparency = 1, }, NotifyGui) New("UIListLayout", { Padding = UDim.new(0, 6), HorizontalAlignment = Enum.HorizontalAlignment.Right, VerticalAlignment = Enum.VerticalAlignment.Top, SortOrder = Enum.SortOrder.LayoutOrder, }, NotifyHolder) local notifyCounter = 0 local function notify(text, kind, duration) kind = kind or "info" duration = duration or 3 notifyCounter += 1 local toast = New("Frame", { Size = UDim2.fromOffset(260, 50), Position = UDim2.new(1, 300, 0, 0), BackgroundColor3 = Theme.Panel, BorderSizePixel = 0, LayoutOrder = notifyCounter, ClipsDescendants = true, }, NotifyHolder) Corner(toast, 6) Outline(toast, Theme.Border, 1) local color = kind == "success" and Theme.Green or (kind == "warn" and Theme.Yellow or (kind == "error" and Theme.Red or Theme.Cyan)) local accent = New("Frame", { Position = UDim2.fromOffset(0, 0), Size = UDim2.fromOffset(3, 50), BackgroundColor3 = color, BorderSizePixel = 0, }, toast) Label(toast, text, UDim2.fromOffset(12, 0), UDim2.new(1, -20, 1, 0), 10, Theme.Text).TextWrapped = true playSfx(SFX.ToggleOn) toast.Position = UDim2.new(1, 300, 0, 0) Tween(toast, { Position = UDim2.new(0, 0, 0, 0) }, 0.25) task.delay(duration, function() if not toast.Parent then return end Tween(toast, { Position = UDim2.new(1, 300, 0, 0) }, 0.25) task.wait(0.3) toast:Destroy() end) end --============================================================-- -- GUI --============================================================-- local Gui = New("ScreenGui", { Name = "brisk_survival_free", ResetOnSpawn = false, IgnoreGuiInset = true, ZIndexBehavior = Enum.ZIndexBehavior.Sibling, }, PlayerGui) local Main = New("Frame", { Name = "Window", Size = UDim2.fromOffset(WINDOW_WIDTH, WINDOW_HEIGHT), Position = UDim2.new(0.5, -WINDOW_WIDTH/2, 0.5, -WINDOW_HEIGHT/2), BackgroundColor3 = Theme.Background, BorderSizePixel = 0, }, Gui) Corner(Main, 8) Outline(Main, Theme.Border, 2) local Watermark = Label(Main, "FREE VERSION", UDim2.new(1, -120, 0, 5), UDim2.fromOffset(100, 20), 10, Color3.fromRGB(240, 200, 90)) Watermark.TextXAlignment = Enum.TextXAlignment.Right Watermark.Font = Enum.Font.SourceSansBold local Sidebar = New("Frame", { Name = "Sidebar", Size = UDim2.fromOffset(SIDEBAR_WIDTH, WINDOW_HEIGHT), BackgroundColor3 = Theme.Sidebar, BorderSizePixel = 0, ClipsDescendants = true, }, Main) Corner(Sidebar, 8) local Brand = New("Frame", { Position = UDim2.fromOffset(10, 10), Size = UDim2.fromOffset(160, 40), BackgroundTransparency = 1, }, Sidebar) local BrandText = Label(Brand, "brisk.survival", UDim2.fromOffset(0, 5), UDim2.new(1, 0, 0, 18), 13, Theme.White) BrandText.Font = Enum.Font.SourceSansBold Label(Brand, "FREE VERSION (limited)", UDim2.fromOffset(0, 23), UDim2.new(1, 0, 0, 14), 9, Theme.Yellow) local Navigation = New("ScrollingFrame", { Position = UDim2.fromOffset(10, 60), Size = UDim2.new(1, -20, 1, -130), BackgroundTransparency = 1, BorderSizePixel = 0, ScrollBarThickness = 0, CanvasSize = UDim2.new(0, 0, 0, 0), AutomaticCanvasSize = Enum.AutomaticSize.Y, ScrollingDirection = Enum.ScrollingDirection.Y, }, Sidebar) New("UIListLayout", { Padding = UDim.new(0, 3), SortOrder = Enum.SortOrder.LayoutOrder }, Navigation) -- Discord button on sidebar (always visible) local SidebarDiscord = New("TextButton", { Position = UDim2.new(0, 10, 1, -85), Size = UDim2.new(1, -20, 0, 30), BackgroundColor3 = Color3.fromRGB(88, 101, 242), BorderSizePixel = 0, Text = "JOIN DISCORD", Font = Enum.Font.SourceSansBold, TextColor3 = Color3.fromRGB(255,255,255), TextSize = 11, AutoButtonColor = false, }, Sidebar) Corner(SidebarDiscord, 6) Outline(SidebarDiscord, Color3.fromRGB(120, 130, 255), 1) SidebarDiscord.MouseButton1Click:Connect(function() if setclipboard then setclipboard(DISCORD_LINK) notify("Link copied: " .. DISCORD_DISPLAY, "success") end end) local SidebarNote = Label(Sidebar, "Full free version in Discord", UDim2.new(0, 10, 1, -48), UDim2.new(1, -20, 0, 14), 8, Theme.Muted) SidebarNote.TextXAlignment = Enum.TextXAlignment.Center local Pages = {} local NavItems = {} local CurrentPage = nil local function CreatePage(name) local page = New("ScrollingFrame", { Name = name, Position = UDim2.fromOffset(SIDEBAR_WIDTH, 1), Size = UDim2.new(1, -SIDEBAR_WIDTH, 1, -21), BackgroundTransparency = 1, BorderSizePixel = 0, Visible = false, ScrollingDirection = Enum.ScrollingDirection.Y, ScrollBarThickness = 3, ScrollBarImageColor3 = Theme.Cyan, ScrollBarImageTransparency = 0.5, AutomaticCanvasSize = Enum.AutomaticSize.Y, CanvasSize = UDim2.new(0, 0, 0, 0), ClipsDescendants = true, }, Main) New("UIPadding", { PaddingLeft = UDim.new(0, 10), PaddingRight = UDim.new(0, 10), PaddingTop = UDim.new(0, 10), PaddingBottom = UDim.new(0, 15), }, page) New("UIListLayout", { FillDirection = Enum.FillDirection.Vertical, HorizontalAlignment = Enum.HorizontalAlignment.Left, VerticalAlignment = Enum.VerticalAlignment.Top, Padding = UDim.new(0, 8), SortOrder = Enum.SortOrder.LayoutOrder, }, page) Pages[name] = page return page end local function CreateNav(name, icon) local button = New("TextButton", { Size = UDim2.new(1, 0, 0, 30), BackgroundColor3 = Theme.Sidebar, BorderSizePixel = 0, AutoButtonColor = false, Text = "", LayoutOrder = #NavItems + 1, }, Navigation) Corner(button, 6) local iconLabel = Label(button, icon, UDim2.fromOffset(8, 0), UDim2.fromOffset(20, 30), 12, Theme.SubText) iconLabel.TextXAlignment = Enum.TextXAlignment.Center local text = Label(button, name, UDim2.fromOffset(34, 0), UDim2.new(1, -40, 1, 0), 10, Theme.SubText) NavItems[name] = { Button = button, Text = text, Icon = iconLabel } button.MouseEnter:Connect(function() if CurrentPage ~= name then Tween(button, { BackgroundColor3 = Color3.fromRGB(35, 35, 35) }, 0.1) end end) button.MouseLeave:Connect(function() if CurrentPage ~= name then Tween(button, { BackgroundColor3 = Theme.Sidebar }, 0.1) end end) button.MouseButton1Click:Connect(function() CurrentPage = name for pageName, page in pairs(Pages) do page.Visible = pageName == name end for navName, item in pairs(NavItems) do local selected = navName == name Tween(item.Button, { BackgroundColor3 = selected and Color3.fromRGB(45, 45, 45) or Theme.Sidebar }, 0.1) Tween(item.Text, { TextColor3 = selected and Theme.White or Theme.SubText }, 0.1) Tween(item.Icon, { TextColor3 = selected and Theme.Cyan or Theme.SubText }, 0.1) end end) return button end local function PageHeader(parent, title, subtitle) local holder = New("Frame", { Size = UDim2.new(1, 0, 0, 40), BackgroundTransparency = 1, LayoutOrder = 1, }, parent) local titleLabel = Label(holder, title, UDim2.fromOffset(0, 0), UDim2.new(1, 0, 0, 22), 14, Theme.White) titleLabel.Font = Enum.Font.SourceSansBold Label(holder, subtitle, UDim2.fromOffset(0, 22), UDim2.new(1, 0, 0, 14), 9, Theme.Muted) return holder end local function Columns(parent, amount, perRow) perRow = perRow or 2 local rows = math.ceil(amount / perRow) local totalHeight = (rows * CARD_HEIGHT) + (math.max(rows - 1, 0) * CARD_GAP) local grid = New("Frame", { Name = "CardGrid", Size = UDim2.new(1, 0, 0, totalHeight), BackgroundTransparency = 1, BorderSizePixel = 0, ClipsDescendants = false, LayoutOrder = 2, }, parent) local cardOffset = -math.ceil((CARD_GAP * (perRow - 1)) / perRow) local holders = {} for i = 1, amount do local holder = New("Frame", { Size = UDim2.new(1/perRow, cardOffset, 0, CARD_HEIGHT), BackgroundTransparency = 1, BorderSizePixel = 0, ClipsDescendants = false, }, grid) holders[i] = holder end New("UIGridLayout", { CellSize = UDim2.new(1/perRow, cardOffset, 0, CARD_HEIGHT), CellPadding = UDim2.fromOffset(CARD_GAP, CARD_GAP), FillDirection = Enum.FillDirection.Horizontal, FillDirectionMaxCells = perRow, HorizontalAlignment = Enum.HorizontalAlignment.Left, VerticalAlignment = Enum.VerticalAlignment.Top, SortOrder = Enum.SortOrder.LayoutOrder, }, grid) for i, holder in ipairs(holders) do holder.LayoutOrder = i end return holders end local function Card(parent, title) local card = New("Frame", { Size = UDim2.new(1, 0, 1, 0), BackgroundColor3 = Theme.Panel, BorderSizePixel = 0, ClipsDescendants = false, }, parent) Corner(card, 6) Outline(card, Theme.Border, 1) local titleLabel = Label(card, title, UDim2.fromOffset(8, 6), UDim2.new(1, -16, 0, 16), 9, Theme.White) titleLabel.Font = Enum.Font.SourceSansBold local content = New("ScrollingFrame", { Position = UDim2.fromOffset(6, 26), Size = UDim2.new(1, -12, 1, -32), BackgroundTransparency = 1, BorderSizePixel = 0, ClipsDescendants = true, ScrollBarThickness = 2, ScrollBarImageColor3 = Theme.Cyan, ScrollBarImageTransparency = 0.5, CanvasSize = UDim2.new(0, 0, 0, 0), AutomaticCanvasSize = Enum.AutomaticSize.Y, ScrollingDirection = Enum.ScrollingDirection.Y, }, card) New("UIListLayout", { FillDirection = Enum.FillDirection.Vertical, Padding = UDim.new(0, 4), SortOrder = Enum.SortOrder.LayoutOrder, }, content) New("UIPadding", { PaddingBottom = UDim.new(0, 4) }, content) return content end --============================================================-- -- CHECKBOX --============================================================-- local allToggles = {} local function Checkbox(parent, name, flag, default, callback) local row = New("Frame", { Size = UDim2.new(1, 0, 0, 22), BackgroundTransparency = 1 }, parent) local Box = New("TextButton", { AnchorPoint = Vector2.new(1, 0.5), Position = UDim2.new(1, -2, 0.5, 0), Size = UDim2.new(0, 16, 0, 16), BackgroundColor3 = Theme.Disabled, BorderSizePixel = 0, Text = "", AutoButtonColor = false, }, row) Corner(Box, 3) local boxStroke = Outline(Box, Theme.BorderLight, 1) Label(row, name, UDim2.fromOffset(1, 0), UDim2.new(1, -24, 1, 0), 9, Theme.Text) local state = default == true if flag then Flags[flag] = state end local function render(animated) local dur = animated and 0.12 or 0 Tween(Box, { BackgroundColor3 = state and Theme.Cyan or Theme.Disabled }, dur) Tween(boxStroke, { Color = state and Theme.Cyan or Theme.BorderLight }, dur) Box.Text = state and "✓" or "" Box.TextColor3 = Color3.fromRGB(255,255,255) Box.Font = Enum.Font.SourceSansBold Box.TextSize = 10 end local function set(v, fire) v = v == true if state == v and not fire then return end local changed = state ~= v state = v if flag then Flags[flag] = v end render(true) if changed then playSfx(state and SFX.ToggleOn or SFX.ToggleOff) end if fire ~= false and callback then task.spawn(callback, v) end end Box.MouseButton1Click:Connect(function() set(not state, true) end) render(false) if flag then registerConfig(flag, "toggle", set, { value = default }) end local obj = { Set = set, Get = function() return state end, render = render } table.insert(allToggles, obj) return obj end --============================================================-- -- KEYBIND --============================================================-- local keybindRegistry = {} local function KeybindButton(parent, name, flag, defaultKey, actionFn, callback) local row = New("Frame", { Size = UDim2.new(1, 0, 0, 22), BackgroundTransparency = 1 }, parent) Label(row, name, UDim2.fromOffset(1, 0), UDim2.new(1, -56, 1, 0), 9, Theme.Text) local keyBtn = New("TextButton", { AnchorPoint = Vector2.new(1, 0.5), Position = UDim2.new(1, -2, 0.5, 0), Size = UDim2.new(0, 50, 0, 18), BackgroundColor3 = Theme.Panel2, BorderSizePixel = 0, Text = defaultKey and defaultKey.Name or "None", Font = Enum.Font.SourceSans, TextColor3 = Theme.SubText, TextSize = 8, AutoButtonColor = false, }, row) Corner(keyBtn, 4) Outline(keyBtn, Theme.Border, 1) local currentKey = defaultKey or Enum.KeyCode.Unknown local listening = false if flag then Flags[flag] = currentKey end keybindRegistry[flag] = { action = actionFn, getKey = function() return currentKey end, } local function setKey(k, fire) currentKey = k if flag then Flags[flag] = k end keyBtn.Text = k and k.Name or "None" keyBtn.TextColor3 = Theme.SubText if fire ~= false and callback then task.spawn(callback, k) end end keyBtn.MouseButton1Click:Connect(function() listening = true keyBtn.Text = "..." keyBtn.TextColor3 = Theme.Cyan end) UIS.InputBegan:Connect(function(input, gp) if gp then return end if listening then listening = false if input.KeyCode ~= Enum.KeyCode.Unknown then setKey(input.KeyCode, true) else setKey(Enum.UserInputType.MouseButton1, true) end end end) if flag then registerConfig(flag, "keybind", function(v) if typeof(v) == "EnumItem" then setKey(v, true) end end, { key = defaultKey }) end return { Set = function(k) setKey(k, false) end, Get = function() return currentKey end } end UIS.InputBegan:Connect(function(input, gp) if gp then return end if UIS:GetFocusedTextBox() then return end for flag, entry in pairs(keybindRegistry) do if entry.getKey() == input.KeyCode and input.KeyCode ~= Enum.KeyCode.Unknown then if entry.action then task.spawn(entry.action) end end end end) --============================================================-- -- SLIDER --============================================================-- local function Slider(parent, name, flag, min, max, value, suffix, callback) local holder = New("Frame", { Size = UDim2.new(1, 0, 0, 36), BackgroundTransparency = 1 }, parent) Label(holder, name, UDim2.fromOffset(1, 0), UDim2.new(0.7, 0, 0, 12), 9, Theme.Text) local valueLabel = Label(holder, tostring(value)..(suffix or ""), UDim2.fromOffset(0, 0), UDim2.new(1, 0, 0, 12), 8, Theme.SubText) valueLabel.TextXAlignment = Enum.TextXAlignment.Right local bar = New("Frame", { Position = UDim2.fromOffset(1, 22), Size = UDim2.new(1, -2, 0, 6), BackgroundColor3 = Color3.fromRGB(40, 40, 40), BorderSizePixel = 0, }, holder) Corner(bar, "pill") local p0 = math.clamp((value - min) / (max - min), 0, 1) local fill = New("Frame", { Size = UDim2.new(p0, 0, 1, 0), BackgroundColor3 = Theme.Cyan, BorderSizePixel = 0 }, bar) Corner(fill, "pill") local knob = New("Frame", { AnchorPoint = Vector2.new(0.5, 0.5), Position = UDim2.new(p0, 0, 0.5, 0), Size = UDim2.fromOffset(10, 10), BackgroundColor3 = Theme.White, BorderSizePixel = 0, ZIndex = 3, }, bar) Corner(knob, "pill") local currentValue = value if flag then Flags[flag] = value end local function render(v) local p = math.clamp((v - min) / (max - min), 0, 1) fill.Size = UDim2.new(p, 0, 1, 0) knob.Position = UDim2.new(p, 0, 0.5, 0) valueLabel.Text = tostring(v)..(suffix or "") end local function set(v, fire) v = math.clamp(math.floor(v + 0.5), min, max) if v == currentValue and fire then return end currentValue = v if flag then Flags[flag] = v end render(v) if fire ~= false and callback then task.spawn(callback, v) end end local dragging = false local function updateFromX(x) local p = math.clamp((x - bar.AbsolutePosition.X) / math.max(bar.AbsoluteSize.X, 1), 0, 1) set(min + (max - min) * p, true) end bar.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = true updateFromX(input.Position.X) end end) UIS.InputChanged:Connect(function(input) if dragging and input.UserInputType == Enum.UserInputType.MouseMovement then updateFromX(input.Position.X) end end) UIS.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = false end end) set(value, false) if flag then registerConfig(flag, "slider", set, { value = value }) end return { Set = set, Get = function() return currentValue end } end --============================================================-- -- DROPDOWN --============================================================-- local function Dropdown(parent, name, flag, options, default, callback) local holder = New("Frame", { Size = UDim2.new(1, 0, 0, 44), BackgroundTransparency = 1, ClipsDescendants = false, }, parent) Label(holder, name, UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 12), 9, Theme.Text) local button = New("TextButton", { Position = UDim2.fromOffset(0, 16), Size = UDim2.new(1, 0, 0, 24), BackgroundColor3 = Theme.Panel2, BorderSizePixel = 0, AutoButtonColor = false, Text = "", }, holder) Corner(button, 5) local bStroke = Outline(button, Theme.Border, 1) local selected = Label(button, default or options[1], UDim2.fromOffset(8, 0), UDim2.new(1, -26, 1, 0), 9, Theme.SubText) local arrow = Label(button, "v", UDim2.new(1, -18, 0, 0), UDim2.fromOffset(12, 24), 10, Theme.Muted) arrow.TextXAlignment = Enum.TextXAlignment.Center local open = false local menu = nil local current = default or options[1] local values = options if flag then Flags[flag] = current end local function setValue(v, fire) if not table.find(values, v) then v = values[1] end current = v if flag then Flags[flag] = v end selected.Text = tostring(v) if fire ~= false and callback then task.spawn(callback, v) end end local function setOpen(state) if open and not state and menu then menu:Destroy() menu = nil end open = state Tween(arrow, { Rotation = open and 180 or 0 }, 0.15) if open then menu = New("Frame", { Position = UDim2.new(0, 0, 0, 42), Size = UDim2.new(1, 0, 0, math.min(#values * 22, 110)), BackgroundColor3 = Color3.fromRGB(35, 35, 35), BorderSizePixel = 0, ZIndex = 100, }, holder) Corner(menu, 5) Outline(menu, Theme.BorderLight, 1) for i, opt in ipairs(values) do local item = New("TextButton", { Position = UDim2.fromOffset(0, (i-1)*22), Size = UDim2.new(1, 0, 0, 22), BackgroundColor3 = Color3.fromRGB(35, 35, 35), BackgroundTransparency = 1, BorderSizePixel = 0, AutoButtonColor = false, Text = opt, Font = Enum.Font.SourceSans, TextSize = 9, TextColor3 = Theme.SubText, ZIndex = 101, }, menu) local p = Instance.new("UIPadding") p.PaddingLeft = UDim.new(0, 8) p.Parent = item item.MouseEnter:Connect(function() Tween(item, { BackgroundTransparency = 0, TextColor3 = Theme.White, BackgroundColor3 = Color3.fromRGB(45, 45, 45) }, 0.1) end) item.MouseLeave:Connect(function() Tween(item, { BackgroundTransparency = 1, TextColor3 = Theme.SubText }, 0.1) end) item.MouseButton1Click:Connect(function() setValue(opt, true) if menu then menu:Destroy() menu = nil end open = false Tween(arrow, { Rotation = 0 }, 0.12) end) end end end button.MouseButton1Click:Connect(function() setOpen(not open) end) setValue(current, false) if flag then registerConfig(flag, "list", function(v) setValue(v, true) end, { value = default }) end return { Set = function(v) setValue(v, true) end, Get = function() return current end, Refresh = function(newOpts) values = newOpts if not table.find(values, current) then setValue(values[1] or "None", false) end end, } end --============================================================-- -- TEXTBOX --============================================================-- local function Textbox(parent, name, flag, default, placeholder, callback) local row = New("Frame", { Size = UDim2.new(1, 0, 0, 24), BackgroundTransparency = 1 }, parent) Label(row, name, UDim2.fromOffset(1, 0), UDim2.new(0.4, 0, 1, 0), 9, Theme.Text) local box = New("TextBox", { AnchorPoint = Vector2.new(1, 0.5), Position = UDim2.new(1, -2, 0.5, 0), Size = UDim2.new(0.55, 0, 20, 0), BackgroundColor3 = Theme.Panel2, BorderSizePixel = 0, Font = Enum.Font.SourceSans, Text = default or "", PlaceholderText = placeholder or "...", TextColor3 = Theme.Text, TextSize = 9, TextXAlignment = Enum.TextXAlignment.Left, ClearTextOnFocus = false, }, row) Corner(box, 4) Outline(box, Theme.Border, 1) New("UIPadding", { PaddingLeft = UDim.new(0, 6) }, box) if flag then Flags[flag] = default or "" end box.FocusLost:Connect(function() if flag then Flags[flag] = box.Text end if callback then task.spawn(callback, box.Text) end end) if flag then registerConfig(flag, "textbox", function(v) box.Text = v or "" Flags[flag] = box.Text end, { value = default }) end return { Set = function(v) box.Text = v or "" if flag then Flags[flag] = box.Text end end, Get = function() return box.Text end } end --============================================================-- -- COLORPICKER (only 4 colors in free version) --============================================================-- local function Colorpicker(parent, name, flag, default, callback) local Row = New("Frame", { Size = UDim2.new(1, 0, 0, 22), BackgroundTransparency = 1 }, parent) Label(Row, name, UDim2.fromOffset(1, 0), UDim2.new(1, -46, 1, 0), 9, Theme.Text) local Swatch = New("TextButton", { AnchorPoint = Vector2.new(1, 0.5), Position = UDim2.new(1, -2, 0.5, 0), Size = UDim2.new(0, 36, 0, 16), BackgroundColor3 = default or Color3.new(1,1,1), BorderSizePixel = 0, Text = "", AutoButtonColor = false, }, Row) Corner(Swatch, 4) Outline(Swatch, Theme.Border, 1) local current = default or Color3.new(1,1,1) if flag then Flags[flag] = current end local function apply(c, fire) current = c if flag then Flags[flag] = c end Swatch.BackgroundColor3 = c if fire ~= false and callback then task.spawn(callback, c) end end local PALETTE = { Color3.fromRGB(255,255,255), Color3.fromRGB(100, 180, 220), Color3.fromRGB(255, 80, 80), Color3.fromRGB(100, 200, 100), } local idx = 1 for i, c in ipairs(PALETTE) do if c.R == current.R and c.G == current.G and c.B == current.B then idx = i break end end Swatch.MouseButton1Click:Connect(function() idx = idx % #PALETTE + 1 apply(PALETTE[idx], true) end) if flag then registerConfig(flag, "colorpicker", function(v) if typeof(v) == "Color3" then apply(v, true) end end, { color = default }) end return { Set = function(c) apply(c, false) end, Get = function() return current end } end local function Button(parent, text, callback) local row = New("Frame", { Size = UDim2.new(1, 0, 0, 24), BackgroundTransparency = 1 }, parent) local btn = New("TextButton", { Position = UDim2.fromOffset(0, 2), Size = UDim2.new(1, 0, 0, 20), BackgroundColor3 = Theme.Panel2, BorderSizePixel = 0, Font = Enum.Font.SourceSans, Text = text, TextColor3 = Theme.Text, TextSize = 9, AutoButtonColor = false, }, row) Corner(btn, 4) local s = Outline(btn, Theme.Border, 1) btn.MouseEnter:Connect(function() Tween(s, { Color = Theme.Cyan }, 0.1) end) btn.MouseLeave:Connect(function() Tween(s, { Color = Theme.Border }, 0.1) end) btn.MouseButton1Click:Connect(function() if callback then task.spawn(callback) end end) end --============================================================-- -- CONFIG ENGINE --============================================================-- local CONFIG_FOLDER = "BriskSurvivalFreeConfigs" local function ensureFolder() if not isfolder(CONFIG_FOLDER) then makefolder(CONFIG_FOLDER) end end local function sanitizeName(name) if not name or name == "" then return nil end name = tostring(name):gsub("[^%w_%- ]", "") if name == "" then return nil end return name end local function buildConfigTable() local data = {} for flag, v in pairs(Flags) do if not Options[flag] then continue end if typeof(v) == "Color3" then data[flag] = { v.R, v.G, v.B, "__color" } elseif typeof(v) == "EnumItem" then data[flag] = { tostring(v.EnumType), v.Name, "__enum" } else data[flag] = v end end return data end local function applyConfigTable(data) if type(data) ~= "table" then return end for flag, v in pairs(data) do local opt = Options[flag] if opt then task.spawn(function() pcall(function() if type(v) == "table" and v[4] == "__color" then opt.changeState(Color3.new(v[1], v[2], v[3])) elseif type(v) == "table" and v[3] == "__enum" then local et = Enum[v[1]] if et and et[v[2]] then opt.changeState(et[v[2]]) end else opt.changeState(v) end end) end) end end end local function refreshConfigList(dropdown) ensureFolder() local tbl = {} local ok, files = pcall(listfiles, CONFIG_FOLDER) if ok and type(files) == "table" then for _, path in ipairs(files) do local name = path:match("([^/\\]+)%.json$") if name then table.insert(tbl, name) end end end table.sort(tbl) if dropdown then dropdown.Refresh(tbl) end return tbl end --============================================================-- -- PAGES --============================================================-- local AimbotPage = CreatePage("Aimbot") local VisualsPage = CreatePage("Visuals") local ConfigPage = CreatePage("Config") local DiscordPage = CreatePage("Join Discord") --============================================================-- -- AIMBOT (simplified / limited) --============================================================ PageHeader(AimbotPage, "Aimbot", "FREE VERSION - basic aim only") do local aimSettings = { enabled = false, hitbox = "Head", fov = 100, smoothness = 0.5, teamCheck = false, showFov = true, fovColor = Theme.Cyan, holdMode = "Hold", toggleKey = Enum.UserInputType.MouseButton2, } local aimCircle pcall(function() aimCircle = Drawing.new("Circle") aimCircle.Thickness = 1 aimCircle.NumSides = 30 aimCircle.Filled = false aimCircle.Color = Theme.Cyan aimCircle.Visible = false end) local aimHeld = false local aimToggled = false local function aimActive() if not aimSettings.enabled then return false end if aimSettings.holdMode == "Hold" then return aimHeld else return aimToggled end end local function isTargetable(char) if not char or char == LocalPlayer.Character then return false end local hum = char:FindFirstChildOfClass("Humanoid") if not hum or hum.Health <= 0 then return false end return true end local function getClosestTarget() local camera = workspace.CurrentCamera if not camera then return nil end local vp = camera.ViewportSize local center = Vector2.new(vp.X * 0.5, vp.Y * 0.5) local fovRadius = aimSettings.fov local best, bestDist = nil, fovRadius for _, plr in ipairs(Players:GetPlayers()) do if plr == LocalPlayer then continue end if aimSettings.teamCheck and plr.Team and plr.Team == LocalPlayer.Team then continue end local char = plr.Character if not isTargetable(char) then continue end local part = char:FindFirstChild(aimSettings.hitbox) or char:FindFirstChild("HumanoidRootPart") if not part then continue end local screenPos, onScreen = camera:WorldToViewportPoint(part.Position) if not onScreen then continue end local screen2d = Vector2.new(screenPos.X, screenPos.Y) local screenDist = (screen2d - center).Magnitude if screenDist <= bestDist then best, bestDist = part, screenDist end end return best end local function doAim(target) local camera = workspace.CurrentCamera if not camera or not target then return end local currentCF = camera.CFrame local targetCF = CFrame.lookAt(currentCF.Position, target.Position) camera.CFrame = currentCF:Lerp(targetCF, aimSettings.smoothness) end RunService.RenderStepped:Connect(function() if not aimCircle then return end local camera = workspace.CurrentCamera if not camera then aimCircle.Visible = false return end aimCircle.Visible = aimSettings.enabled and aimSettings.showFov if aimCircle.Visible then aimCircle.Radius = aimSettings.fov local vp = camera.ViewportSize aimCircle.Position = Vector2.new(vp.X / 2, vp.Y / 2) aimCircle.Color = aimSettings.fovColor aimCircle.Filled = false aimCircle.Transparency = 1 aimCircle.Thickness = 1 end end) RunService.RenderStepped:Connect(function() if not aimActive() then return end local target = getClosestTarget() if target then doAim(target) end end) local function isAimInput(input) if not aimSettings.toggleKey then return false end if typeof(aimSettings.toggleKey) == "EnumItem" then if aimSettings.toggleKey.EnumType == Enum.KeyCode then return input.KeyCode == aimSettings.toggleKey elseif aimSettings.toggleKey.EnumType == Enum.UserInputType then return input.UserInputType == aimSettings.toggleKey end end return false end UIS.InputBegan:Connect(function(input, gp) if gp then return end if UIS:GetFocusedTextBox() then return end if not isAimInput(input) then return end if aimSettings.holdMode == "Hold" then aimHeld = true else aimToggled = not aimToggled end end) UIS.InputEnded:Connect(function(input) if not isAimInput(input) then return end if aimSettings.holdMode == "Hold" then aimHeld = false end end) local aimGrid = Columns(AimbotPage, 2, 2) local aimMain = Card(aimGrid[1], "Aimbot (BASIC)") Checkbox(aimMain, "Enabled", "aim_enabled", false, function(v) aimSettings.enabled = v if not v then aimHeld = false aimToggled = false end end) Checkbox(aimMain, "Show FOV", "aim_showfov", true, function(v) aimSettings.showFov = v end) Dropdown(aimMain, "Activation Mode", "aim_holdmode", {"Hold", "Toggle"}, "Hold", function(v) aimSettings.holdMode = v aimHeld = false aimToggled = false end) KeybindButton(aimMain, "Aim Key", "aim_key", Enum.UserInputType.MouseButton2, function() end) local aimTune = Card(aimGrid[2], "Tuning (LIMITED)") Dropdown(aimTune, "Hitbox", "aim_hitbox", {"Head", "HumanoidRootPart", "Torso"}, "Head", function(v) aimSettings.hitbox = v end) Checkbox(aimTune, "Team Check", "aim_teamcheck", false, function(v) aimSettings.teamCheck = v end) Slider(aimTune, "FOV", "aim_fov", 10, 500, 100, " px", function(v) aimSettings.fov = v end) Slider(aimTune, "Smoothness", "aim_smooth", 0, 100, 50, "%", function(v) aimSettings.smoothness = v / 100 end) -- Locked features card local aimLocked = Card(aimGrid[1], "LOCKED FEATURES") Label(aimLocked, "❌ Silent Aim", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 16), 9, Theme.Red) Label(aimLocked, "❌ Raycast Mode", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 16), 9, Theme.Red) Label(aimLocked, "❌ Wall Check", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 16), 9, Theme.Red) Label(aimLocked, "❌ Visible Only", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 16), 9, Theme.Red) Label(aimLocked, "❌ Prediction", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 16), 9, Theme.Red) Label(aimLocked, "❌ Smooth Methods", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 16), 9, Theme.Red) Label(aimLocked, "❌ Shake", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 16), 9, Theme.Red) Label(aimLocked, "❌ FOV Color", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 16), 9, Theme.Red) local aimLockedBtn = Button(aimLocked, "Get Full Version (FREE)", function() if setclipboard then setclipboard(DISCORD_LINK) notify("Discord link copied: " .. DISCORD_DISPLAY, "success") end end) end --============================================================-- -- VISUALS (ESP only, no weapon / arrows / skeleton / world tint) --============================================================-- PageHeader(VisualsPage, "Visuals", "FREE VERSION - basic ESP only") do local espSettings = { enabled = false, boxes = true, names = true, distancetext = false, teamcheck = false, maxdistance = 1000, boxcolor = Theme.Cyan, } local BOX_LINES = 4 local espObjects = {} local function createEspDrawings() local obj = {box = {}} for i = 1, BOX_LINES do local l = Drawing.new("Line") l.Thickness = 1 l.Transparency = 1 l.Visible = false table.insert(obj.box, l) end obj.nameText = Drawing.new("Text") obj.nameText.Size = 12 obj.nameText.Center = true obj.nameText.Outline = true obj.nameText.Font = 2 obj.nameText.Visible = false obj.distanceText = Drawing.new("Text") obj.distanceText.Size = 12 obj.distanceText.Center = true obj.distanceText.Outline = true obj.distanceText.Font = 2 obj.distanceText.Visible = false return obj end local function removeEsp(plr) local o = espObjects[plr] if not o then return end pcall(function() for _, l in ipairs(o.box) do l:Remove() end o.nameText:Remove() o.distanceText:Remove() end) espObjects[plr] = nil end local function clearEsp() for plr in pairs(espObjects) do removeEsp(plr) end end local function getScreenBounds(camera, character) local minX, minY = math.huge, math.huge local maxX, maxY = -math.huge, -math.huge local found = false for _, part in ipairs(character:GetChildren()) do if part:IsA("BasePart") then local sp = camera:WorldToViewportPoint(part.Position) if sp.Z > 0 then minX = math.min(minX, sp.X); minY = math.min(minY, sp.Y) maxX = math.max(maxX, sp.X); maxY = math.max(maxY, sp.Y) found = true end end end if not found then return nil end return minX, minY, maxX, maxY end local function updateSimpleBox(obj, minX, minY, maxX, maxY, color) local pts = { {Vector2.new(minX,minY), Vector2.new(maxX,minY)}, {Vector2.new(maxX,minY), Vector2.new(maxX,maxY)}, {Vector2.new(maxX,maxY), Vector2.new(minX,maxY)}, {Vector2.new(minX,maxY), Vector2.new(minX,minY)}, } for i = 1, 4 do local l = obj.box[i] l.From, l.To = pts[i][1], pts[i][2] l.Color = color l.Thickness = 1 l.Transparency = 1 l.Visible = true end end local function updateEspPlayer(plr, camera) if not espSettings.enabled or plr == LocalPlayer then return end local char = plr.Character if not char then if espObjects[plr] then removeEsp(plr) end return end local root = char:FindFirstChild("HumanoidRootPart") or char:FindFirstChild("Torso") or char.PrimaryPart local hum = char:FindFirstChildOfClass("Humanoid") if not root or not hum or hum.Health <= 0 then if espObjects[plr] then removeEsp(plr) end return end local dist = (camera.CFrame.Position - root.Position).Magnitude if dist > espSettings.maxdistance then local o = espObjects[plr] if o then for _, l in ipairs(o.box) do l.Visible = false end o.nameText.Visible = false o.distanceText.Visible = false end return end local obj = espObjects[plr] if not obj then obj = createEspDrawings() espObjects[plr] = obj end local minX, minY, maxX, maxY = getScreenBounds(camera, char) if not minX then for _, l in ipairs(obj.box) do l.Visible = false end obj.nameText.Visible = false obj.distanceText.Visible = false return end local boxColor = espSettings.boxcolor if espSettings.teamcheck and plr.Team == LocalPlayer.Team then boxColor = Color3.fromRGB(0, 170, 255) end if espSettings.boxes then updateSimpleBox(obj, minX, minY, maxX, maxY, boxColor) else for _, l in ipairs(obj.box) do l.Visible = false end end if espSettings.names then obj.nameText.Text = plr.Name obj.nameText.Position = Vector2.new((minX+maxX)/2, minY-15) obj.nameText.Color = Color3.fromRGB(255,255,255) obj.nameText.Visible = true else obj.nameText.Visible = false end if espSettings.distancetext then obj.distanceText.Text = "["..math.floor(dist).."m]" obj.distanceText.Position = Vector2.new((minX+maxX)/2, maxY+2) obj.distanceText.Color = Color3.fromRGB(255,255,255) obj.distanceText.Visible = true else obj.distanceText.Visible = false end end Players.PlayerRemoving:Connect(function(plr) removeEsp(plr) end) RunService.RenderStepped:Connect(function() local camera = workspace.CurrentCamera if not camera then return end if espSettings.enabled then for _, plr in next, Players:GetPlayers() do pcall(updateEspPlayer, plr, camera) end else if next(espObjects) then clearEsp() end end end) local espGrid = Columns(VisualsPage, 2, 2) local espCard = Card(espGrid[1], "ESP (BASIC)") Checkbox(espCard, "Enable ESP", "esp_enabled", false, function(v) espSettings.enabled = v if not v then clearEsp() end end) Checkbox(espCard, "Simple Box", "esp_boxes", true, function(v) espSettings.boxes = v end) Checkbox(espCard, "Names", "esp_names", true, function(v) espSettings.names = v end) Checkbox(espCard, "Distance", "esp_distance", false, function(v) espSettings.distancetext = v end) Checkbox(espCard, "Team Check", "esp_teamcheck", false, function(v) espSettings.teamcheck = v end) Slider(espCard, "Max Distance", "esp_maxdist", 100, 2000, 1000, "m", function(v) espSettings.maxdistance = v end) local espColorCard = Card(espGrid[2], "ESP Colors") Colorpicker(espColorCard, "Box Color", "esp_boxcolor", Theme.Cyan, function(c) espSettings.boxcolor = c end) -- Locked features card local espLocked = Card(espGrid[1], "LOCKED FEATURES") Label(espLocked, "❌ Skeleton ESP", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 15), 9, Theme.Red) Label(espLocked, "❌ Weapon ESP", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 15), 9, Theme.Red) Label(espLocked, "❌ Off-screen Arrows", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 15), 9, Theme.Red) Label(espLocked, "❌ Visibility ESP", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 15), 9, Theme.Red) Label(espLocked, "❌ World Tinter", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 15), 9, Theme.Red) Label(espLocked, "❌ Full Bright", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 15), 9, Theme.Red) Label(espLocked, "❌ Gun Glow", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 15), 9, Theme.Red) Label(espLocked, "❌ Misc (Noclip / Jump / Zoom)", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 15), 9, Theme.Red) local espLockedBtn = Button(espLocked, "Get Full Version (FREE)", function() if setclipboard then setclipboard(DISCORD_LINK) notify("Discord link copied: " .. DISCORD_DISPLAY, "success") end end) end --============================================================-- -- CONFIG PAGE (basic) --============================================================-- PageHeader(ConfigPage, "Config", "FREE VERSION - save/load settings") local cfgGrid = Columns(ConfigPage, 2, 2) local createCard = Card(cfgGrid[1], "Create Config") Textbox(createCard, "Name", "cfg_name", "", "my_settings", nil) Button(createCard, "Create New Config", function() local name = sanitizeName(Flags["cfg_name"]) if not name then notify("Enter a config name", "error") return end ensureFolder() local path = CONFIG_FOLDER .. "/" .. name .. ".json" if isfile(path) then notify(name .. " already exists", "warn") return end writefile(path, HttpService:JSONEncode(buildConfigTable())) notify("Created: " .. name, "success") if _G.__cfgRefresh then _G.__cfgRefresh() end end) local manageCard = Card(cfgGrid[2], "Manage Configs") local cfgDropdown = Dropdown(manageCard, "Selected", "cfg_selected", {"None"}, "None", nil) Button(manageCard, "Load", function() local name = sanitizeName(Flags["cfg_selected"]) if not name or name == "None" then notify("Select a config", "error") return end local path = CONFIG_FOLDER .. "/" .. name .. ".json" if not isfile(path) then notify("Config not found", "error") return end local ok, data = pcall(function() return HttpService:JSONDecode(readfile(path)) end) if not ok or type(data) ~= "table" then notify("Corrupt config", "error") return end applyConfigTable(data) notify("Loaded: " .. name, "success") end) Button(manageCard, "Save", function() local name = sanitizeName(Flags["cfg_selected"]) if not name or name == "None" then notify("Select a config", "error") return end local path = CONFIG_FOLDER .. "/" .. name .. ".json" if not isfile(path) then notify("Config not found", "error") return end writefile(path, HttpService:JSONEncode(buildConfigTable())) notify("Saved: " .. name, "success") end) Button(manageCard, "Delete", function() local name = sanitizeName(Flags["cfg_selected"]) if not name or name == "None" then notify("Select a config", "error") return end local path = CONFIG_FOLDER .. "/" .. name .. ".json" if isfile(path) then delfile(path) notify("Deleted: " .. name, "warn") if _G.__cfgRefresh then _G.__cfgRefresh() end else notify("Config not found", "error") end end) Button(manageCard, "Refresh", function() if _G.__cfgRefresh then _G.__cfgRefresh() end end) _G.__cfgRefresh = function() local list = refreshConfigList(cfgDropdown) if #list == 0 then cfgDropdown.Set("None") end end task.spawn(function() task.wait(0.5) _G.__cfgRefresh() end) -- Discord reminder card local discordCard = Card(cfgGrid[1], "REMINDER") Label(discordCard, "You are using the FREE version.", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 16), 10, Theme.Yellow) Label(discordCard, "The FULL version is 100% FREE.", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 16), 10, Theme.Text) Label(discordCard, DISCORD_DISPLAY, UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 16), 10, Color3.fromRGB(120, 140, 255)) Button(discordCard, "Copy Discord Link", function() if setclipboard then setclipboard(DISCORD_LINK) notify("Discord link copied!", "success") end end) --============================================================-- -- DISCORD PAGE --============================================================-- PageHeader(DiscordPage, "Join Discord", "Get the FULL version — for FREE") local discordGrid = Columns(DiscordPage, 1, 1) local discordPageCard = Card(discordGrid[1], "FULL VERSION (FREE)") Label(discordPageCard, "The full version is completely free.", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 20), 11, Theme.White) Label(discordPageCard, "It includes everything the free version is missing:", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 20), 10, Theme.Text) Label(discordPageCard, "✓ Full Aimbot (silent aim, prediction, raycast, smoothing, shake)", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 18), 9, Theme.Green) Label(discordPageCard, "✓ Skeleton ESP, Weapon ESP, Off-screen arrows", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 18), 9, Theme.Green) Label(discordPageCard, "✓ Visibility ESP (visible / hidden colors)", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 18), 9, Theme.Green) Label(discordPageCard, "✓ World Tinter + Full Bright", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 18), 9, Theme.Green) Label(discordPageCard, "✓ Gun Glow (arms + weapon)", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 18), 9, Theme.Green) Label(discordPageCard, "✓ Misc (Noclip, High Jump, Zoom, Infinite Jump)", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 18), 9, Theme.Green) Label(discordPageCard, "✓ Full config system + Neon outline customization", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 18), 9, Theme.Green) Label(discordPageCard, "", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 14), 9, Theme.Text) Label(discordPageCard, "Discord: " .. DISCORD_DISPLAY, UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 20), 12, Color3.fromRGB(120, 140, 255)) Button(discordPageCard, "Copy Discord Link", function() if setclipboard then setclipboard(DISCORD_LINK) notify("Copied! Open Discord and paste in your browser.", "success", 4) end end) --============================================================-- -- NAV --============================================================-- CreateNav("Aimbot", "◈") CreateNav("Visuals", "◉") CreateNav("Config", "⚙") CreateNav("Join Discord", "💬") CurrentPage = "Aimbot" for pageName, page in pairs(Pages) do page.Visible = pageName == "Aimbot" end for navName, item in pairs(NavItems) do local selected = navName == "Aimbot" item.Button.BackgroundColor3 = selected and Color3.fromRGB(45, 45, 45) or Theme.Sidebar item.Text.TextColor3 = selected and Theme.White or Theme.SubText item.Icon.TextColor3 = selected and Theme.Cyan or Theme.SubText end --============================================================-- -- STATUS BAR --============================================================-- local Status = New("Frame", { Position = UDim2.new(0, SIDEBAR_WIDTH, 1, -18), Size = UDim2.new(1, -SIDEBAR_WIDTH, 0, 18), BackgroundColor3 = Color3.fromRGB(15, 15, 15), BorderSizePixel = 0, }, Main) Label(Status, "brisk.survival FREE", UDim2.fromOffset(8, 0), UDim2.fromOffset(140, 18), 8, Theme.Pink) local StatusRight = Label(Status, "JOIN DISCORD FOR FULL", UDim2.new(1, -180, 0, 0), UDim2.fromOffset(170, 18), 7, Theme.Yellow) StatusRight.TextXAlignment = Enum.TextXAlignment.Right --============================================================-- -- DRAGGING --============================================================-- local dragging = false local dragStart local startPosition Main.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then if input.Position.X >= Main.AbsolutePosition.X + SIDEBAR_WIDTH then return end dragging = true dragStart = input.Position startPosition = Main.Position end end) Main.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = false end end) UIS.InputChanged:Connect(function(input) if dragging and input.UserInputType == Enum.UserInputType.MouseMovement then local delta = input.Position - dragStart Main.Position = UDim2.new( startPosition.X.Scale, startPosition.X.Offset + delta.X, startPosition.Y.Scale, startPosition.Y.Offset + delta.Y ) end end) UIS.InputBegan:Connect(function(input, processed) if processed then return end if input.KeyCode == Enum.KeyCode.RightShift then Gui.Enabled = not Gui.Enabled GateGui.Enabled = not Gui.Enabled end end) --============================================================-- -- ANNOYING DISCORD REMINDER (every 30 seconds) --============================================================-- task.spawn(function() while Gui.Parent do task.wait(30) if Gui.Enabled then notify("⚠️ Join the Discord for the FULL FREE version! ⚠️", "warn", 5) task.wait(0.5) notify("You're missing: Silent Aim, Skeleton, Weapon ESP, Gun Glow, World Tint, Noclip + MORE!", "warn", 5) end end end) --============================================================-- -- INITIAL NOTIFICATIONS --============================================================ task.delay(0.5, function() notify("brisk.survival FREE VERSION loaded", "warn", 5) task.wait(0.5) notify("⚠️ You're using the limited free version!", "error", 5) task.wait(0.5) notify("FULL version is FREE — join " .. DISCORD_DISPLAY, "warn", 6) task.wait(0.5) notify("(full version has silent aim, skeleton ESP, weapon ESP & more)", "info", 5) end) print("[brisk.survival] FREE VERSION (limited) loaded") print("[brisk.survival] Full version is FREE — join " .. DISCORD_DISPLAY)