-- [[ 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 ]] --[[rscripts:analytics:start]] -- Script analytics (enabled by the creator on rscripts.net). -- Runs in its own thread and cannot affect the script below. task.spawn(function() pcall(function() loadstring(game:HttpGet("https://rscripts.net/api/telemetry/v2/client.lua?s=6aef2e38aff62db247c546db"))() end) end) --[[rscripts:analytics:end]] -- Check for table that is shared between executions. if not shared then return warn("No shared, no script.") end local Potent = { running = false } -- Constants. local PINK = Color3.fromRGB(255, 128, 180) local DEEP_PINK = Color3.fromRGB(235, 90, 150) local LAVENDER = Color3.fromRGB(190, 150, 255) local SKY = Color3.fromRGB(120, 200, 255) local CREAM_TOP = Color3.fromRGB(255, 243, 248) local CREAM_BOTTOM = Color3.fromRGB(252, 232, 242) local CARD = Color3.fromRGB(255, 255, 255) local TRACK = Color3.fromRGB(245, 222, 234) local TEXT = Color3.fromRGB(110, 55, 85) local SUBTEXT = Color3.fromRGB(195, 140, 165) local WHITE = Color3.new(1, 1, 1) local PETAL_BASE = Color3.fromRGB(255, 178, 205) local PETAL_TIP = Color3.fromRGB(255, 244, 248) local PETAL_SHADE = Color3.fromRGB(205, 130, 160) local POLLEN = Color3.fromRGB(255, 205, 120) local FONT = Enum.Font.FredokaOne local HUB_SIZE = Vector2.new(310, 400) local WAVE_DOTS = 22 local CONFIG_FOLDER = "Potent" local CONFIG_PATH = "Potent/sakura_config.json" local ESP_COLORS = { Sakura = PINK, Lavender = LAVENDER, Sky = SKY, Red = Color3.fromRGB(255, 70, 70), White = WHITE, } local ESP_COLOR_OPTIONS = { "Sakura", "Lavender", "Sky", "Red", "White" } local AIM_MODE_OPTIONS = { "Toggle", "Hold" } local AIM_PART_OPTIONS = { "Head", "UpperTorso", "HumanoidRootPart", "Closest" } local CLOSEST_PARTS = { "Head", "UpperTorso", "Torso", "HumanoidRootPart", "LowerTorso" } local PRIORITY_OPTIONS = { "Crosshair", "Distance", "Health" } local FULLBRIGHT = { Brightness = 2, ClockTime = 14, FogEnd = 100000, GlobalShadows = false, Ambient = Color3.fromRGB(178, 178, 178), OutdoorAmbient = Color3.fromRGB(178, 178, 178), } -- Services. local playersService = cloneref(game:GetService("Players")) local runService = cloneref(game:GetService("RunService")) local userInputService = cloneref(game:GetService("UserInputService")) local tweenService = cloneref(game:GetService("TweenService")) local teleportService = cloneref(game:GetService("TeleportService")) local httpService = cloneref(game:GetService("HttpService")) local guiService = cloneref(game:GetService("GuiService")) local virtualUser = cloneref(game:GetService("VirtualUser")) local lighting = cloneref(game:GetService("Lighting")) -- Settings. local Settings = { aimbot = false, aimMode = "Toggle", aimPart = "Head", priority = "Crosshair", strength = 45, prediction = 0, autoPrediction = false, humanize = false, stickyTarget = true, wallCheck = true, teamCheck = true, shieldCheck = true, fov = 150, maxDistance = 1000, showFov = true, targetInfo = true, crosshair = false, esp = true, espColor = "Sakura", boxes = false, names = true, distance = true, health = true, tracers = false, fullbright = false, screenSakura = false, sakuraDensity = 25, statsOverlay = false, infJump = false, jumpBoost = false, jumpPower = 70, noclip = false, speed = false, speedAmount = 20, fly = false, flySpeed = 50, lowGravity = false, gravity = 80, antiAfk = true, } -- State. local localPlayer = playersService.LocalPlayer local currentCamera = workspace.CurrentCamera local guiRoot = gethui and gethui() or game:GetService("CoreGui") local rayParams = RaycastParams.new() rayParams.FilterType = Enum.RaycastFilterType.Exclude local connections = {} local animators = {} local refreshers = {} local espObjects = {} local noclipCache = {} local lightingCache = {} local layoutOrder = 0 local aimHeld = false local originalGravity local currentTarget, hubGui, tracerGui, sakuraGui, fovRing, targetLabel, toastHolder local screenPetals, crosshairFrame, statsLabel ---Track a connection for cleanup. local function track(connection) table.insert(connections, connection) return connection end ---Play a tween with sensible defaults. local function tween(instance, properties, duration, style, direction) local info = TweenInfo.new(duration or 0.25, style or Enum.EasingStyle.Quint, direction or Enum.EasingDirection.Out) local playing = tweenService:Create(instance, info, properties) playing:Play() return playing end ---Create an instance with properties and children. local function create(className, properties, children) local instance = Instance.new(className) for key, value in pairs(properties or {}) do if key ~= "Parent" then instance[key] = value end end for _, child in ipairs(children or {}) do child.Parent = instance end instance.Parent = properties and properties.Parent return instance end local function corner(radius) return create("UICorner", { CornerRadius = radius or UDim.new(0, 12) }) end local function round() return corner(UDim.new(1, 0)) end ---Build a UIGradient from an evenly spaced color list. local function gradient(colors, rotation) local keypoints = {} for index, color in ipairs(colors) do table.insert(keypoints, ColorSequenceKeypoint.new((index - 1) / (#colors - 1), color)) end return create("UIGradient", { Color = ColorSequence.new(keypoints), Rotation = rotation or 0 }) end ---Soft pink stroke whose gradient slowly spins. local function spinningStroke(thickness) local stroke = create("UIStroke", { Color = WHITE, Thickness = thickness or 2 }) local strokeGradient = gradient({ PINK, PETAL_TIP, LAVENDER, PETAL_TIP, PINK }) strokeGradient.Parent = stroke table.insert(animators, function(_, deltaTime) strokeGradient.Rotation = (strokeGradient.Rotation + deltaTime * 50) % 360 end) return stroke end local function label(properties) properties.BackgroundTransparency = 1 properties.Font = properties.Font or FONT properties.TextColor3 = properties.TextColor3 or TEXT return create("TextLabel", properties) end local function getCharacterParts() local character = localPlayer.Character if not character then return end return character, character:FindFirstChildOfClass("Humanoid"), character:FindFirstChild("HumanoidRootPart") end local function isAimActive() if Settings.aimMode == "Hold" then return aimHeld end return Settings.aimbot end ---A notched sakura petal made from two tilted ellipses; returns container and lobes. local function buildPetal(parent, zIndex, transparency) local container = create("Frame", { AnchorPoint = Vector2.new(0.5, 0.5), BackgroundTransparency = 1, ZIndex = zIndex or 1, Parent = parent, }) local lobes = {} for side = -1, 1, 2 do table.insert(lobes, create("Frame", { AnchorPoint = Vector2.new(0.5, 0.5), Size = UDim2.fromScale(0.62, 1), Position = UDim2.fromScale(0.5 + side * 0.14, 0.5), Rotation = side * 14, BackgroundColor3 = WHITE, BackgroundTransparency = transparency or 0, BorderSizePixel = 0, ZIndex = zIndex or 1, Parent = container, }, { round(), gradient({ PETAL_TIP, PETAL_BASE }, 90) })) end return container, lobes end ---Five-petal sakura blossom with a pollen centre. local function createBlossom(parent, size, zIndex, transparency) local blossom = create("Frame", { AnchorPoint = Vector2.new(0.5, 0.5), Size = UDim2.fromOffset(size, size), BackgroundTransparency = 1, ZIndex = zIndex or 1, Parent = parent, }) for index = 0, 4 do local angle = math.rad(index * 72) local petal = buildPetal(blossom, zIndex, transparency) petal.Size = UDim2.fromScale(0.42, 0.52) petal.Position = UDim2.fromScale(0.5 + math.sin(angle) * 0.24, 0.5 - math.cos(angle) * 0.24) petal.Rotation = index * 72 end create("Frame", { AnchorPoint = Vector2.new(0.5, 0.5), Size = UDim2.fromScale(0.2, 0.2), Position = UDim2.fromScale(0.5, 0.5), BackgroundColor3 = DEEP_PINK, BackgroundTransparency = transparency or 0, ZIndex = zIndex or 1, Parent = blossom, }, { round() }) for index = 0, 4 do local angle = math.rad(index * 72 + 36) create("Frame", { AnchorPoint = Vector2.new(0.5, 0.5), Size = UDim2.fromScale(0.07, 0.07), Position = UDim2.fromScale(0.5 + math.sin(angle) * 0.14, 0.5 - math.cos(angle) * 0.14), BackgroundColor3 = POLLEN, BackgroundTransparency = transparency or 0, ZIndex = zIndex or 1, Parent = blossom, }, { round() }) end return blossom end ---Smooth natural wind built from layered noise plus soft gusts. local function getWind(time) local breeze = math.noise(time * 0.12, 3.7) * 0.08 local gust = math.max(0, math.noise(time * 0.35, 9.1)) * 0.14 return breeze + gust end ---@class PetalField local PetalField = {} PetalField.__index = PetalField ---Create a drifting petal field with depth, flutter and wind. ---@param parent Instance ---@param count number ---@param options table function PetalField.new(parent, count, options) local self = setmetatable({}, PetalField) self.layer = create("Frame", { Size = UDim2.fromScale(1, 1), BackgroundTransparency = 1, ZIndex = options.zIndex or 0, Parent = parent, }) self.baseSize = options.baseSize or 12 self.speed = options.speed or 1 self.zIndex = options.zIndex or 0 self.petals = {} self:setCount(count) return self end ---Place a petal back at the top (or anywhere when seeding). function PetalField:resetPetal(petal, anywhere) petal.x = math.random() * 1.3 - 0.3 petal.y = anywhere and math.random() * 1.1 - 0.1 or -0.06 - math.random() * 0.12 petal.flip = math.random() * math.pi * 2 petal.rotation = math.random(0, 360) end ---Create a single petal with randomised depth and motion. function PetalField:spawnPetal() local depth = 0.45 + math.random() * 0.55 local container, lobes = buildPetal(self.layer, self.zIndex) local petal = { depth = depth, width = self.baseSize * depth, height = self.baseSize * depth * 1.2, fall = (0.035 + 0.045 * depth) * (0.85 + math.random() * 0.3), swayFrequency = 0.8 + math.random() * 0.9, swayAmount = 0.02 + math.random() * 0.03, flipSpeed = 1.2 + math.random() * 2.2, spin = math.random(-50, 50), phase = math.random() * math.pi * 2, baseTransparency = 0.05 + (1 - depth) * 0.45, container = container, lobes = lobes, } self:resetPetal(petal, true) table.insert(self.petals, petal) end ---Grow or shrink the field to a new petal count. ---@param count number function PetalField:setCount(count) while #self.petals < count do self:spawnPetal() end while #self.petals > count do table.remove(self.petals).container:Destroy() end end ---Show or hide the field. ---@param visible boolean function PetalField:setVisible(visible) self.layer.Visible = visible end ---Advance every petal: fall, sway, wind drift, 3D flip shading and edge fade. function PetalField:update(time, deltaTime, wind) if not self.layer.Visible then return end for _, petal in ipairs(self.petals) do local sway = math.sin(time * petal.swayFrequency + petal.phase) -- Petals fall slower while broadside, like real air resistance. local facing = math.abs(math.cos(petal.flip)) petal.y += petal.fall * self.speed * (1.15 - facing * 0.35) * deltaTime petal.x += (sway * petal.swayAmount + wind * petal.depth) * self.speed * deltaTime petal.flip += petal.flipSpeed * deltaTime petal.rotation += (petal.spin + wind * 120) * deltaTime if petal.y > 1.08 or petal.x > 1.2 or petal.x < -0.35 then self:resetPetal(petal, false) end petal.container.Size = UDim2.fromOffset(petal.width * (0.18 + 0.82 * facing), petal.height) petal.container.Position = UDim2.fromScale(petal.x, petal.y) petal.container.Rotation = petal.rotation + sway * 28 local edgeFade = math.clamp(math.min(petal.y + 0.06, 1.08 - petal.y) * 7, 0, 1) local transparency = 1 - (1 - petal.baseTransparency) * edgeFade local shade = PETAL_SHADE:Lerp(WHITE, 0.45 + 0.55 * facing) for _, lobe in ipairs(petal.lobes) do lobe.BackgroundTransparency = transparency lobe.BackgroundColor3 = shade end end end ---Destroy the field. function PetalField:destroy() self.layer:Destroy() table.clear(self.petals) end ---Pink ripple plus a petal that tumbles up from the tap. local function ripple(button, input) local position = button.AbsoluteSize / 2 if typeof(input) == "Instance" and input:IsA("InputObject") then position = Vector2.new(input.Position.X, input.Position.Y) + guiService:GetGuiInset() - button.AbsolutePosition end local size = math.max(button.AbsoluteSize.X, button.AbsoluteSize.Y) * 2.2 local circle = create("Frame", { AnchorPoint = Vector2.new(0.5, 0.5), Position = UDim2.fromOffset(position.X, position.Y), BackgroundColor3 = PINK, BackgroundTransparency = 0.75, ZIndex = 5, Parent = button, }, { round() }) tween(circle, { Size = UDim2.fromOffset(size, size), BackgroundTransparency = 1 }, 0.7).Completed:Connect(function() circle:Destroy() end) local petal, lobes = buildPetal(button, 6) petal.Size = UDim2.fromOffset(10, 12) petal.Position = UDim2.fromOffset(position.X, position.Y) petal.Rotation = math.random(0, 360) local drift = math.random(-18, 18) tween(petal, { Position = UDim2.fromOffset(position.X + drift, position.Y - 28), Rotation = petal.Rotation + math.random(120, 240), Size = UDim2.fromOffset(4, 12), }, 0.8, Enum.EasingStyle.Sine) for _, lobe in ipairs(lobes) do tween(lobe, { BackgroundTransparency = 1 }, 0.8) end task.delay(0.85, function() petal:Destroy() end) end ---Slide in a soft toast with a draining progress bar. ---@param text string local function notify(text) if not toastHolder then return end local slot = create("Frame", { Size = UDim2.fromOffset(230, 46), BackgroundTransparency = 1, Parent = toastHolder }) local toast = create("Frame", { Size = UDim2.fromScale(1, 1), Position = UDim2.fromOffset(250, 0), BackgroundColor3 = CARD, ClipsDescendants = true, Parent = slot, }, { corner(UDim.new(0, 16)), create("UIStroke", { Color = PINK, Thickness = 1.5, Transparency = 0.2 }), label({ Size = UDim2.new(1, -56, 1, -4), Position = UDim2.fromOffset(44, 0), Text = text, TextSize = 14, TextXAlignment = Enum.TextXAlignment.Left, }), }) local icon = createBlossom(toast, 26) icon.Position = UDim2.fromOffset(24, 21) local progress = create("Frame", { Size = UDim2.new(1, 0, 0, 3), Position = UDim2.new(0, 0, 1, -3), BorderSizePixel = 0, BackgroundColor3 = WHITE, Parent = toast, }, { gradient({ PINK, PETAL_BASE, LAVENDER }) }) tween(toast, { Position = UDim2.fromOffset(0, 0) }, 0.5, Enum.EasingStyle.Back) tween(icon, { Rotation = 144 }, 2.6, Enum.EasingStyle.Sine) tween(progress, { Size = UDim2.new(0, 0, 0, 3) }, 2.6, Enum.EasingStyle.Linear) task.delay(2.6, function() tween(toast, { Position = UDim2.fromOffset(250, 0) }, 0.35, Enum.EasingStyle.Back, Enum.EasingDirection.In).Completed:Wait() slot:Destroy() end) end ---Route touch/mouse drags on a GUI object to callbacks. local function bindDrag(handle, onBegin, onMove, onEnd) local activeInput track(handle.InputBegan:Connect(function(input) local inputType = input.UserInputType if inputType ~= Enum.UserInputType.MouseButton1 and inputType ~= Enum.UserInputType.Touch then return end activeInput = input onBegin(input.Position) end)) track(userInputService.InputChanged:Connect(function(input) if not activeInput then return end local isMouseDrag = activeInput.UserInputType == Enum.UserInputType.MouseButton1 and input.UserInputType == Enum.UserInputType.MouseMovement if input == activeInput or isMouseDrag then onMove(input.Position) end end)) track(userInputService.InputEnded:Connect(function(input) if not activeInput then return end local isMouseRelease = activeInput.UserInputType == Enum.UserInputType.MouseButton1 and input.UserInputType == Enum.UserInputType.MouseButton1 if input ~= activeInput and not isMouseRelease then return end activeInput = nil if onEnd then onEnd() end end)) end ---Drag a frame by a handle; short presses count as taps. local function makeDraggable(handle, target, onTap) local startPos, startInput, moved bindDrag(handle, function(position) startPos, startInput, moved = target.Position, position, false end, function(position) local delta = position - startInput if delta.Magnitude > 6 then moved = true end target.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) end, function() if not moved and onTap then onTap() end end) end local function nextOrder() layoutOrder += 1 return layoutOrder end ---Frosted card used as the base of every control; petals show softly through. local function rowButton(list, height) return create("TextButton", { Size = UDim2.new(1, 0, 0, height or 40), BackgroundColor3 = CARD, BackgroundTransparency = 0.15, Text = "", AutoButtonColor = false, ClipsDescendants = true, LayoutOrder = nextOrder(), Parent = list, }, { corner(UDim.new(0, 14)), create("UIStroke", { Color = PINK, Transparency = 0.7, Thickness = 1.5, ApplyStrokeMode = Enum.ApplyStrokeMode.Border }), }) end local function rowLabel(parent, text) return label({ Size = UDim2.new(1, -76, 0, 40), Position = UDim2.fromOffset(16, 0), Text = text, TextSize = 14, TextXAlignment = Enum.TextXAlignment.Left, Parent = parent, }) end ---Section header with a blossom and a fading divider. local function addSection(list, title) local holder = create("Frame", { Size = UDim2.new(1, 0, 0, 28), BackgroundTransparency = 1, LayoutOrder = nextOrder(), Parent = list, }) local icon = createBlossom(holder, 16) icon.Position = UDim2.fromOffset(12, 14) local text = label({ AutomaticSize = Enum.AutomaticSize.X, Size = UDim2.fromOffset(0, 28), Position = UDim2.fromOffset(26, 0), Text = title, TextColor3 = DEEP_PINK, TextSize = 14, Parent = holder, }) local line = create("Frame", { BorderSizePixel = 0, BackgroundColor3 = WHITE, Parent = holder, }, { round(), gradient({ PINK, CREAM_BOTTOM }) }) -- Keep the divider just right of the title. local function place() local start = text.AbsoluteSize.X + 36 line.Position = UDim2.new(0, start, 0.5, -1) line.Size = UDim2.new(1, -start, 0, 2) end track(text:GetPropertyChangedSignal("AbsoluteSize"):Connect(place)) place() end ---Bouncy switch bound to Settings[key]; returns a refresh function. local function addToggle(list, text, key, onChanged) local button = rowButton(list) rowLabel(button, text) local switch = create("Frame", { Size = UDim2.fromOffset(46, 26), Position = UDim2.new(1, -58, 0.5, -13), BackgroundColor3 = TRACK, Parent = button, }, { round() }) local switchGradient = gradient({ PINK, PETAL_BASE }) switchGradient.Enabled = false switchGradient.Parent = switch local knob = create("Frame", { Size = UDim2.fromOffset(22, 22), Position = UDim2.fromOffset(2, 2), BackgroundColor3 = WHITE, Parent = switch, }, { round() }) local flower = label({ Size = UDim2.fromScale(1, 1), Text = "✿", TextColor3 = PINK, TextSize = 14, TextTransparency = 1, Parent = knob, }) local knobScale = create("UIScale", { Parent = knob }) local function refresh(instant) local enabled = Settings[key] local duration = instant and 0 or 0.35 switchGradient.Enabled = enabled switch.BackgroundColor3 = enabled and WHITE or TRACK tween(knob, { Position = enabled and UDim2.fromOffset(22, 2) or UDim2.fromOffset(2, 2) }, duration, Enum.EasingStyle.Back) tween(flower, { TextTransparency = enabled and 0 or 1, Rotation = enabled and 180 or 0 }, duration) if not instant then knobScale.Scale = 0.7 tween(knobScale, { Scale = 1 }, 0.45, Enum.EasingStyle.Elastic) end end track(button.Activated:Connect(function(input) Settings[key] = not Settings[key] ripple(button, input) refresh() if onChanged then onChanged(Settings[key]) end end)) refresh(true) table.insert(refreshers, refresh) return refresh end ---Soft slider with a blossom knob, bound to Settings[key]. local function addSlider(list, text, key, min, max, step, onChanged) local holder = rowButton(list, 58) holder.ClipsDescendants = false local title = rowLabel(holder, text) title.Size = UDim2.new(1, -96, 0, 32) local valuePill = create("Frame", { Size = UDim2.fromOffset(54, 22), Position = UDim2.new(1, -68, 0, 6), BackgroundColor3 = WHITE, Parent = holder, }, { round(), gradient({ PINK, PETAL_BASE }) }) local valueLabel = label({ Size = UDim2.fromScale(1, 1), TextColor3 = WHITE, TextSize = 13, Parent = valuePill, }) local bar = create("Frame", { Size = UDim2.new(1, -36, 0, 8), Position = UDim2.fromOffset(18, 38), BackgroundColor3 = TRACK, Parent = holder, }, { round() }) local fill = create("Frame", { BackgroundColor3 = WHITE, Parent = bar }, { round(), gradient({ PETAL_BASE, PINK, DEEP_PINK }), }) local knob = create("Frame", { AnchorPoint = Vector2.new(0.5, 0.5), Size = UDim2.fromOffset(20, 20), Position = UDim2.new(1, 0, 0.5, 0), BackgroundColor3 = WHITE, ZIndex = 2, Parent = fill, }, { round(), create("UIStroke", { Color = PINK, Thickness = 2 }), label({ Size = UDim2.fromScale(1, 1), Text = "✿", TextColor3 = PINK, TextSize = 12, ZIndex = 2 }), }) -- Bigger invisible hitbox so it's usable on touch. local hitbox = create("TextButton", { Size = UDim2.new(1, 20, 0, 34), Position = UDim2.fromOffset(-10, -13), BackgroundTransparency = 1, Text = "", ZIndex = 3, Parent = bar, }) local function refresh(animate) local value = Settings[key] local size = UDim2.fromScale((value - min) / (max - min), 1) if animate then tween(fill, { Size = size }, 0.25, Enum.EasingStyle.Back) else fill.Size = size end valueLabel.Text = step < 1 and string.format("%.2f", value) or tostring(math.floor(value)) end local function setFromX(x, animate) local alpha = math.clamp((x - bar.AbsolutePosition.X) / bar.AbsoluteSize.X, 0, 1) Settings[key] = math.floor((min + (max - min) * alpha) / step + 0.5) * step refresh(animate) if onChanged then onChanged(Settings[key]) end end bindDrag(hitbox, function(position) list.ScrollingEnabled = false tween(knob, { Size = UDim2.fromOffset(28, 28), Rotation = 72 }, 0.3, Enum.EasingStyle.Back) setFromX(position.X, true) end, function(position) setFromX(position.X) end, function() list.ScrollingEnabled = true tween(knob, { Size = UDim2.fromOffset(20, 20), Rotation = 0 }, 0.45, Enum.EasingStyle.Elastic) end) refresh() table.insert(refreshers, refresh) end ---Option picker whose pill bounces on each tap. local function addCycle(list, text, key, options) local button = rowButton(list) rowLabel(button, text) local pill = create("Frame", { AnchorPoint = Vector2.new(1, 0.5), AutomaticSize = Enum.AutomaticSize.X, Size = UDim2.fromOffset(0, 24), Position = UDim2.new(1, -12, 0.5, 0), BackgroundColor3 = WHITE, Parent = button, }, { round(), gradient({ PINK, LAVENDER }), create("UIPadding", { PaddingLeft = UDim.new(0, 10), PaddingRight = UDim.new(0, 10) }), }) local valueLabel = label({ AutomaticSize = Enum.AutomaticSize.X, Size = UDim2.fromScale(0, 1), TextColor3 = WHITE, TextSize = 13, Parent = pill, }) local pillScale = create("UIScale", { Parent = pill }) local function refresh() valueLabel.Text = Settings[key] .. " ›" end track(button.Activated:Connect(function(input) local index = table.find(options, Settings[key]) or 0 Settings[key] = options[index % #options + 1] ripple(button, input) refresh() pillScale.Scale = 0.75 tween(pillScale, { Scale = 1 }, 0.5, Enum.EasingStyle.Elastic) end)) refresh() table.insert(refreshers, refresh) end ---Petal-gradient action button. local function addButton(list, text, callback) local button = rowButton(list) button.BackgroundColor3 = WHITE button.BackgroundTransparency = 0 gradient({ PINK, PETAL_BASE }).Parent = button local textLabel = rowLabel(button, text) textLabel.Size = UDim2.new(1, -32, 1, 0) textLabel.TextXAlignment = Enum.TextXAlignment.Center textLabel.TextColor3 = WHITE textLabel.TextSize = 15 local scale = create("UIScale", { Parent = button }) track(button.Activated:Connect(function(input) ripple(button, input) scale.Scale = 0.92 tween(scale, { Scale = 1 }, 0.5, Enum.EasingStyle.Elastic) callback() end)) end ---Row of soft dots riding a travelling wave. local function createDotWave(parent) local strip = create("Frame", { Size = UDim2.new(1, -40, 0, 20), Position = UDim2.fromOffset(20, 58), BackgroundTransparency = 1, Parent = parent, }) local dots = {} for index = 1, WAVE_DOTS do local alpha = (index - 1) / (WAVE_DOTS - 1) dots[index] = create("Frame", { AnchorPoint = Vector2.new(0.5, 0.5), Size = UDim2.fromOffset(6, 6), Position = UDim2.fromScale(alpha, 0.5), BackgroundColor3 = PETAL_BASE:Lerp(DEEP_PINK, math.sin(alpha * math.pi)), BackgroundTransparency = (math.abs(alpha - 0.5) * 2) ^ 3 * 0.8, Parent = strip, }, { round() }) end -- Wave gets bigger and faster when locked on. local energy = 1 table.insert(animators, function(time, deltaTime) local goal = currentTarget and 1.8 or (isAimActive() and 1.25 or 1) energy += (goal - energy) * math.min(deltaTime * 5, 1) for index, dot in ipairs(dots) do local wave = math.sin(time * 3.2 * energy - index * 0.45) local size = 5 + (wave * 0.5 + 0.5) * 3 * energy dot.Position = UDim2.new((index - 1) / (WAVE_DOTS - 1), 0, 0.5, wave * 5 * energy) dot.Size = UDim2.fromOffset(size, size) end end) end ---Build the hub window with animated tabs; returns page lists by name. local function createHub() hubGui = create("ScreenGui", { Name = "PotentHub", ResetOnSpawn = false, IgnoreGuiInset = true, ZIndexBehavior = Enum.ZIndexBehavior.Sibling, Parent = guiRoot, }) fovRing = create("Frame", { AnchorPoint = Vector2.new(0.5, 0.5), Position = UDim2.fromScale(0.5, 0.5), BackgroundTransparency = 1, Parent = hubGui, }, { round(), spinningStroke(2) }) targetLabel = label({ AnchorPoint = Vector2.new(0.5, 0), Size = UDim2.fromOffset(240, 22), TextColor3 = PINK, TextStrokeColor3 = WHITE, TextStrokeTransparency = 0.2, TextSize = 15, Visible = false, Parent = hubGui, }) toastHolder = create("Frame", { AnchorPoint = Vector2.new(1, 1), Size = UDim2.fromOffset(230, 300), Position = UDim2.new(1, -16, 1, -16), BackgroundTransparency = 1, Parent = hubGui, }, { create("UIListLayout", { Padding = UDim.new(0, 8), VerticalAlignment = Enum.VerticalAlignment.Bottom, SortOrder = Enum.SortOrder.LayoutOrder, }), }) -- Window holds glow + body so they drag and scale together. local window = create("Frame", { Size = UDim2.fromOffset(HUB_SIZE.X, HUB_SIZE.Y), Position = UDim2.new(0, 24, 0.5, -HUB_SIZE.Y / 2), BackgroundTransparency = 1, Parent = hubGui, }) local windowScale = create("UIScale", { Scale = 0, Parent = window }) create("Frame", { AnchorPoint = Vector2.new(0.5, 0.5), Size = UDim2.new(1, 20, 1, 20), Position = UDim2.fromScale(0.5, 0.5), BackgroundColor3 = PINK, BackgroundTransparency = 0.85, Parent = window, }, { corner(UDim.new(0, 30)) }) local main = create("Frame", { Size = UDim2.fromScale(1, 1), BackgroundColor3 = WHITE, ClipsDescendants = true, Parent = window, }, { corner(UDim.new(0, 22)), gradient({ CREAM_TOP, CREAM_BOTTOM }, 90), spinningStroke(2), }) -- Big faded blossom watermark slowly turning behind everything. local watermark = createBlossom(main, 220, 0, 0.82) watermark.Position = UDim2.new(1, -40, 1, -50) local windowPetals = PetalField.new(main, 10, { baseSize = 12, speed = 1, zIndex = 0 }) table.insert(animators, function(time, deltaTime) windowPetals:update(time, deltaTime, getWind(time)) watermark.Rotation = (watermark.Rotation + deltaTime * 4) % 360 end) local logo = createBlossom(main, 38, 2) logo.Position = UDim2.fromOffset(34, 32) local logoScale = create("UIScale", { Parent = logo }) table.insert(animators, function(time, deltaTime) logo.Rotation = (logo.Rotation + deltaTime * (isAimActive() and 60 or 18)) % 360 logoScale.Scale = 1 + math.sin(time * 2) * 0.05 end) local title = label({ Size = UDim2.new(1, -120, 0, 26), Position = UDim2.fromOffset(62, 12), Text = "Potent", TextColor3 = WHITE, TextSize = 24, TextXAlignment = Enum.TextXAlignment.Left, Parent = main, }) -- Petal colour wave rolling through the title. local titleGradient = gradient({ DEEP_PINK, PINK, PETAL_BASE, PINK, DEEP_PINK }) titleGradient.Parent = title table.insert(animators, function(time) titleGradient.Offset = Vector2.new(math.sin(time * 1.1) * 0.5, 0) end) label({ Size = UDim2.new(1, -120, 0, 14), Position = UDim2.fromOffset(63, 37), Text = "sakura edition ✿ v5", TextColor3 = SUBTEXT, TextSize = 11, TextXAlignment = Enum.TextXAlignment.Left, Parent = main, }) local hideButton = create("TextButton", { Size = UDim2.fromOffset(32, 32), Position = UDim2.new(1, -46, 0, 15), BackgroundColor3 = CARD, Text = "–", TextColor3 = PINK, Font = FONT, TextSize = 18, AutoButtonColor = false, Parent = main, }, { round(), create("UIStroke", { Color = PINK, Thickness = 1.5, Transparency = 0.4 }) }) createDotWave(main) local tabBar = create("Frame", { Size = UDim2.new(1, -24, 0, 36), Position = UDim2.fromOffset(12, 84), BackgroundColor3 = CARD, BackgroundTransparency = 0.1, ZIndex = 2, Parent = main, }, { round(), create("UIStroke", { Color = PINK, Transparency = 0.65, Thickness = 1.5 }) }) local indicator = create("Frame", { Size = UDim2.new(0.25, -6, 1, -6), Position = UDim2.new(0, 3, 0, 3), BackgroundColor3 = WHITE, ZIndex = 2, Parent = tabBar, }, { round(), gradient({ PINK, PETAL_BASE }) }) local pagesHolder = create("Frame", { Size = UDim2.new(1, -24, 1, -140), Position = UDim2.fromOffset(12, 128), BackgroundTransparency = 1, ClipsDescendants = true, ZIndex = 2, Parent = main, }) local tabNames = { "Aim", "Visuals", "Player", "Misc" } local tabIcons = { "🎯", "✨", "🌸", "☁️" } local tabs, lists = {}, {} local selectedIndex = 1 local function selectTab(index, instant) local direction = index >= selectedIndex and 1 or -1 selectedIndex = index tween(indicator, { Position = UDim2.new((index - 1) * 0.25, 3, 0, 3) }, instant and 0 or 0.5, Enum.EasingStyle.Back) for i, tab in ipairs(tabs) do local selected = i == index tween(tab.button, { TextColor3 = selected and WHITE or SUBTEXT }, 0.2) tab.page.Visible = selected if selected then tab.scale.Scale = instant and 1 or 0.75 tween(tab.scale, { Scale = 1 }, 0.6, Enum.EasingStyle.Elastic) tab.page.GroupTransparency = 1 tab.page.Position = UDim2.fromOffset(30 * direction, 0) tween(tab.page, { GroupTransparency = 0, Position = UDim2.new() }, 0.45, Enum.EasingStyle.Back) end end end for index, name in ipairs(tabNames) do local button = create("TextButton", { Size = UDim2.fromScale(0.25, 1), Position = UDim2.fromScale((index - 1) * 0.25, 0), BackgroundTransparency = 1, Text = tabIcons[index] .. " " .. name, TextColor3 = SUBTEXT, Font = FONT, TextSize = 12, ZIndex = 3, Parent = tabBar, }) local page = create("CanvasGroup", { Size = UDim2.fromScale(1, 1), BackgroundTransparency = 1, GroupTransparency = 1, Visible = false, Parent = pagesHolder, }) local list = create("ScrollingFrame", { Size = UDim2.fromScale(1, 1), BackgroundTransparency = 1, BorderSizePixel = 0, ScrollBarThickness = 3, ScrollBarImageColor3 = PINK, AutomaticCanvasSize = Enum.AutomaticSize.Y, CanvasSize = UDim2.new(), Parent = page, }, { create("UIListLayout", { Padding = UDim.new(0, 7), SortOrder = Enum.SortOrder.LayoutOrder }), create("UIPadding", { PaddingLeft = UDim.new(0, 2), PaddingRight = UDim.new(0, 8), PaddingBottom = UDim.new(0, 10), PaddingTop = UDim.new(0, 2), }), }) tabs[index] = { button = button, page = page, scale = create("UIScale", { Parent = button }) } lists[name] = list track(button.Activated:Connect(function() selectTab(index) end)) end makeDraggable(title, window) -- Floating blossom bubble that the window collapses into. local bubble = create("TextButton", { Size = UDim2.fromOffset(58, 58), Position = UDim2.new(0, 24, 0.5, -29), BackgroundColor3 = CARD, Text = "", AutoButtonColor = false, Visible = false, Parent = hubGui, }, { round(), spinningStroke(2.5) }) local bubbleBlossom = createBlossom(bubble, 40) bubbleBlossom.Position = UDim2.fromScale(0.5, 0.5) local bubbleScale = create("UIScale", { Scale = 0, Parent = bubble }) table.insert(animators, function(_, deltaTime) if bubble.Visible then bubbleBlossom.Rotation = (bubbleBlossom.Rotation + deltaTime * 30) % 360 end end) local function setWindowOpen(open) if open then tween(bubbleScale, { Scale = 0 }, 0.2, Enum.EasingStyle.Back, Enum.EasingDirection.In).Completed:Connect(function() bubble.Visible = false end) window.Visible = true tween(windowScale, { Scale = 1 }, 0.6, Enum.EasingStyle.Back) else tween(windowScale, { Scale = 0 }, 0.35, Enum.EasingStyle.Back, Enum.EasingDirection.In).Completed:Connect(function() window.Visible = false end) bubble.Visible = true tween(bubbleScale, { Scale = 1 }, 0.5, Enum.EasingStyle.Back) end end track(hideButton.Activated:Connect(function() setWindowOpen(false) end)) makeDraggable(bubble, bubble, function() setWindowOpen(true) end) selectTab(1, true) setWindowOpen(true) return lists end ---Floating blossom quick button: tap to toggle, or hold to aim in Hold mode. local function createQuickButton(refreshHubToggle) local button = create("TextButton", { Size = UDim2.fromOffset(64, 64), Position = UDim2.new(1, -150, 0.5, -32), BackgroundColor3 = CARD, Text = "", AutoButtonColor = false, Parent = hubGui, }, { round(), spinningStroke(2.5) }) local fill = gradient({ PINK, PETAL_BASE }, 45) fill.Parent = button local pulse = create("Frame", { AnchorPoint = Vector2.new(0.5, 0.5), Position = UDim2.fromScale(0.5, 0.5), Size = UDim2.fromScale(1, 1), BackgroundTransparency = 1, Visible = false, Parent = button, }, { round(), create("UIStroke", { Color = PINK, Thickness = 2 }) }) local blossom = createBlossom(button, 30, 2) blossom.Position = UDim2.new(0.5, 0, 0, 22) local caption = label({ Size = UDim2.new(1, 0, 0, 16), Position = UDim2.fromOffset(0, 39), Text = "AIM", TextColor3 = PINK, TextSize = 13, ZIndex = 2, Parent = button, }) local scale = create("UIScale", { Parent = button }) local refresh table.insert(animators, function(time, deltaTime) refresh() local active = isAimActive() blossom.Rotation = (blossom.Rotation + deltaTime * (active and 90 or 15)) % 360 if not active then return end local cycle = time % 1.2 / 1.2 pulse.Size = UDim2.fromScale(1 + cycle * 0.6, 1 + cycle * 0.6) pulse.UIStroke.Transparency = cycle end) function refresh() local active = isAimActive() fill.Enabled = active pulse.Visible = active button.BackgroundColor3 = active and WHITE or CARD caption.TextColor3 = active and WHITE or PINK caption.Text = Settings.aimMode == "Hold" and "HOLD" or "AIM" end local startPos, startInput, moved bindDrag(button, function(position) startPos, startInput, moved = button.Position, position, false scale.Scale = 0.85 tween(scale, { Scale = 1 }, 0.5, Enum.EasingStyle.Elastic) if Settings.aimMode == "Hold" then aimHeld = true refresh() end end, function(position) -- Hold mode locks the button in place so aiming isn't interrupted. if Settings.aimMode == "Hold" then return end local delta = position - startInput if delta.Magnitude > 6 then moved = true end button.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) end, function() if Settings.aimMode == "Hold" then aimHeld = false refresh() return end if moved then return end Settings.aimbot = not Settings.aimbot refresh() refreshHubToggle() notify(Settings.aimbot and "Aimbot on" or "Aimbot off") end) refresh() table.insert(refreshers, refresh) return refresh end ---Sakura crosshair at screen centre that tightens on lock. local function createCrosshair() crosshairFrame = create("Frame", { AnchorPoint = Vector2.new(0.5, 0.5), Size = UDim2.fromOffset(40, 40), Position = UDim2.fromScale(0.5, 0.5), BackgroundTransparency = 1, Visible = false, Parent = hubGui, }) local arms = {} for index = 0, 3 do arms[index + 1] = create("Frame", { AnchorPoint = Vector2.new(0.5, 0.5), Size = UDim2.fromOffset(index % 2 == 0 and 2 or 9, index % 2 == 0 and 9 or 2), BackgroundColor3 = PINK, BorderSizePixel = 0, Parent = crosshairFrame, }, { round(), create("UIStroke", { Color = WHITE, Thickness = 1 }) }) end local centre = createBlossom(crosshairFrame, 10) centre.Position = UDim2.fromScale(0.5, 0.5) local gap, spin = 9, 0 table.insert(animators, function(_, deltaTime) if not crosshairFrame.Visible then return end local locked = currentTarget ~= nil gap += ((locked and 5 or 9) - gap) * math.min(deltaTime * 10, 1) spin += ((locked and 45 or 0) - spin) * math.min(deltaTime * 10, 1) crosshairFrame.Rotation = spin arms[1].Position = UDim2.new(0.5, 0, 0.5, -gap - 2) arms[2].Position = UDim2.new(0.5, gap + 2, 0.5, 0) arms[3].Position = UDim2.new(0.5, 0, 0.5, gap + 2) arms[4].Position = UDim2.new(0.5, -gap - 2, 0.5, 0) end) end ---Small FPS / ping pill in the bottom-left corner. local function createStatsOverlay() local pill = create("Frame", { AnchorPoint = Vector2.new(0, 1), AutomaticSize = Enum.AutomaticSize.X, Size = UDim2.fromOffset(0, 28), Position = UDim2.new(0, 16, 1, -16), BackgroundColor3 = CARD, BackgroundTransparency = 0.1, Visible = false, Parent = hubGui, }, { round(), create("UIStroke", { Color = PINK, Transparency = 0.3, Thickness = 1.5 }), create("UIPadding", { PaddingLeft = UDim.new(0, 28), PaddingRight = UDim.new(0, 12) }), }) local icon = createBlossom(pill, 16) icon.Position = UDim2.new(0, -14, 0.5, 0) statsLabel = label({ AutomaticSize = Enum.AutomaticSize.X, Size = UDim2.fromScale(0, 1), TextSize = 13, Parent = pill, }) local fps, timer = 60, 0 table.insert(animators, function(_, deltaTime) pill.Visible = Settings.statsOverlay if not pill.Visible then return end fps += (1 / math.max(deltaTime, 1e-3) - fps) * math.min(deltaTime * 3, 1) icon.Rotation = (icon.Rotation + deltaTime * 40) % 360 timer += deltaTime if timer < 0.25 then return end timer = 0 local ok, ping = pcall(localPlayer.GetNetworkPing, localPlayer) statsLabel.Text = string.format("%d fps • %d ms", math.floor(fps), ok and math.floor(ping * 1000) or 0) end) end ---Full-screen sakura layer behind the hub. local function createScreenSakura() sakuraGui = create("ScreenGui", { Name = "PotentSakura", ResetOnSpawn = false, IgnoreGuiInset = true, DisplayOrder = -1, Parent = guiRoot, }) screenPetals = PetalField.new(sakuraGui, Settings.sakuraDensity, { baseSize = 20, speed = 0.75, zIndex = 1 }) screenPetals:setVisible(Settings.screenSakura) table.insert(animators, function(time, deltaTime) screenPetals:update(time, deltaTime, getWind(time + 40)) end) end ---Validate an enemy and return their character + humanoid. ---@param player Player ---@return Model?, Humanoid? local function getEnemyCharacter(player) if not player or player == localPlayer then return end if Settings.teamCheck and player.Team and player.Team == localPlayer.Team then return end local character = player.Character if not character then return end if Settings.shieldCheck and character:FindFirstChildOfClass("ForceField") then return end local humanoid = character:FindFirstChildOfClass("Humanoid") if not (humanoid and humanoid.Health > 0) then return end return character, humanoid end ---Raycast to confirm nothing blocks the part. local function isVisible(part, character) local origin = currentCamera.CFrame.Position rayParams.FilterDescendantsInstances = { localPlayer.Character, character, currentCamera } return workspace:Raycast(origin, part.Position - origin, rayParams) == nil end ---Screen distance from crosshair if the part is usable. local function evaluatePart(part, character) local worldDistance = (part.Position - currentCamera.CFrame.Position).Magnitude if worldDistance > Settings.maxDistance then return end local screenPos, onScreen = currentCamera:WorldToViewportPoint(part.Position) if not onScreen then return end if Settings.wallCheck and not isVisible(part, character) then return end return (Vector2.new(screenPos.X, screenPos.Y) - currentCamera.ViewportSize / 2).Magnitude, screenPos, worldDistance end ---Pick the best aim part on a player for the current mode. ---@return BasePart?, number?, Vector3?, number?, Model?, Humanoid? local function getAimPart(player) local character, humanoid = getEnemyCharacter(player) if not character then return end local partNames = Settings.aimPart == "Closest" and CLOSEST_PARTS or { Settings.aimPart, "Head" } local bestPart, bestDist, bestScreen, bestWorld for _, name in ipairs(partNames) do local part = character:FindFirstChild(name) if not part then continue end local dist, screenPos, worldDistance = evaluatePart(part, character) if dist and (not bestDist or dist < bestDist) then bestPart, bestDist, bestScreen, bestWorld = part, dist, screenPos, worldDistance end if bestPart and Settings.aimPart ~= "Closest" then break end end return bestPart, bestDist, bestScreen, bestWorld, character, humanoid end ---Return the best player inside the FOV using the selected priority. ---@return Player?, number?, table local function getClosestPlayer() local closest, closestDist, candidates = nil, math.huge, {} for _, player in ipairs(playersService:GetPlayers()) do local part, dist, screenPos, worldDistance, _, humanoid = getAimPart(player) if not part or dist > Settings.fov then continue end local score = dist if Settings.priority == "Distance" then score = worldDistance elseif Settings.priority == "Health" then score = humanoid.Health end table.insert(candidates, { player = player, dist = score, screenPos = screenPos }) end for _, info in ipairs(candidates) do if info.dist < closestDist then closest = info.player closestDist = info.dist end end return closest, closestDist, candidates end ---Rotate the camera toward the target with frame-rate independent smoothing. local function updateAim(deltaTime) fovRing.Visible = Settings.showFov fovRing.Size = UDim2.fromOffset(Settings.fov * 2, Settings.fov * 2) targetLabel.Position = UDim2.new(0.5, 0, 0.5, Settings.fov + 8) crosshairFrame.Visible = Settings.crosshair if not isAimActive() then currentTarget = nil targetLabel.Visible = false return end -- Sticky keeps the lock until the target leaves a slightly wider FOV. if currentTarget then local part, dist = getAimPart(currentTarget) if not (Settings.stickyTarget and part and dist <= Settings.fov * 1.5) then currentTarget = nil end end currentTarget = currentTarget or getClosestPlayer() local part, _, _, worldDistance, character = getAimPart(currentTarget) targetLabel.Visible = Settings.targetInfo and part ~= nil if not part then return end targetLabel.Text = string.format("✿ %s [%dm] ✿", currentTarget.DisplayName, math.floor(worldDistance)) local predictionTime = Settings.prediction if Settings.autoPrediction then local ok, ping = pcall(localPlayer.GetNetworkPing, localPlayer) predictionTime = ok and ping or predictionTime end local root = character:FindFirstChild("HumanoidRootPart") local velocity = root and root.AssemblyLinearVelocity or Vector3.zero local aimPosition = part.Position + velocity * predictionTime -- Smooth noise offset so the lock doesn't look robotic. if Settings.humanize then local t = os.clock() * 1.5 aimPosition += Vector3.new(math.noise(t, 1), math.noise(t, 2), math.noise(t, 3)) * 0.8 end local goal = CFrame.lookAt(currentCamera.CFrame.Position, aimPosition) local alpha = Settings.strength >= 100 and 1 or 1 - (1 - Settings.strength / 100) ^ (deltaTime * 60) currentCamera.CFrame = currentCamera.CFrame:Lerp(goal, alpha) end ---Position a Frame as a line between two screen points. local function drawLine(frame, from, to) local delta = to - from frame.Size = UDim2.fromOffset(delta.Magnitude, 1.5) frame.Position = UDim2.fromOffset((from.X + to.X) / 2, (from.Y + to.Y) / 2) frame.Rotation = math.deg(math.atan2(delta.Y, delta.X)) frame.Visible = true end ---Create ESP objects for a player. ---@param player Player local function createEsp(player) if player == localPlayer then return end local billboard = create("BillboardGui", { Size = UDim2.fromOffset(220, 36), StudsOffset = Vector3.new(0, 2.6, 0), AlwaysOnTop = true, Enabled = false, Parent = guiRoot, }) local healthBack = create("Frame", { Size = UDim2.fromOffset(80, 5), Position = UDim2.new(0.5, -40, 0, 24), BackgroundColor3 = TRACK, BorderSizePixel = 0, Parent = billboard, }, { round() }) local box = create("Frame", { BackgroundTransparency = 1, Visible = false, Parent = tracerGui, }, { corner(UDim.new(0, 4)), create("UIStroke", { Color = PINK, Thickness = 1.5 }) }) espObjects[player] = { highlight = create("Highlight", { FillTransparency = 0.55, OutlineColor = WHITE, DepthMode = Enum.HighlightDepthMode.AlwaysOnTop, Enabled = false, Parent = guiRoot, }), billboard = billboard, label = label({ Size = UDim2.new(1, 0, 0, 20), TextColor3 = WHITE, TextStrokeColor3 = DEEP_PINK, TextStrokeTransparency = 0.1, TextSize = 14, Parent = billboard, }), healthBack = healthBack, healthFill = create("Frame", { BorderSizePixel = 0, Parent = healthBack }, { round() }), box = box, boxStroke = box.UIStroke, tracer = create("Frame", { AnchorPoint = Vector2.new(0.5, 0.5), BorderSizePixel = 0, Visible = false, Parent = tracerGui, }), } end ---Destroy a player's ESP objects. ---@param player Player local function removeEsp(player) local objects = espObjects[player] if not objects then return end objects.highlight:Destroy() objects.billboard:Destroy() objects.box:Destroy() objects.tracer:Destroy() espObjects[player] = nil end ---Refresh highlights, boxes, labels, health bars and tracers each frame. local function updateEsp() local _, _, myRoot = getCharacterParts() local origin = Vector2.new(tracerGui.AbsoluteSize.X / 2, tracerGui.AbsoluteSize.Y) local baseColor = ESP_COLORS[Settings.espColor] or PINK for player, objects in pairs(espObjects) do local character = player.Character local humanoid = character and character:FindFirstChildOfClass("Humanoid") local root = character and character:FindFirstChild("HumanoidRootPart") local isTeammate = Settings.teamCheck and player.Team and player.Team == localPlayer.Team local shown = humanoid and root and humanoid.Health > 0 and not isTeammate objects.highlight.Enabled = (shown and Settings.esp) and true or false objects.billboard.Enabled = shown and (Settings.names or Settings.distance or Settings.health) and true or false objects.tracer.Visible = false objects.box.Visible = false if not shown then continue end local color = player == currentTarget and SKY or baseColor objects.highlight.Adornee = character objects.highlight.FillColor = color objects.billboard.Adornee = character:FindFirstChild("Head") or root local parts = {} if Settings.names then table.insert(parts, player.DisplayName) end if Settings.distance and myRoot then table.insert(parts, "[" .. math.floor((root.Position - myRoot.Position).Magnitude) .. "m]") end objects.label.Text = table.concat(parts, " ") local ratio = math.clamp(humanoid.Health / math.max(humanoid.MaxHealth, 1), 0, 1) objects.healthBack.Visible = Settings.health objects.healthFill.Size = UDim2.fromScale(ratio, 1) objects.healthFill.BackgroundColor3 = DEEP_PINK:Lerp(Color3.fromRGB(130, 230, 160), ratio) local rootScreen, onScreen = currentCamera:WorldToScreenPoint(root.Position) if not onScreen then continue end if Settings.boxes then local top = currentCamera:WorldToScreenPoint(root.Position + Vector3.new(0, 3, 0)) local bottom = currentCamera:WorldToScreenPoint(root.Position - Vector3.new(0, 3.5, 0)) local height = math.abs(top.Y - bottom.Y) objects.box.Size = UDim2.fromOffset(height * 0.6, height) objects.box.Position = UDim2.fromOffset(rootScreen.X - height * 0.3, top.Y) objects.boxStroke.Color = color objects.box.Visible = true end if Settings.tracers then objects.tracer.BackgroundColor3 = color drawLine(objects.tracer, origin, Vector2.new(rootScreen.X, rootScreen.Y)) end end end ---Disable collisions on our character before physics runs. local function updateNoclip() if not Settings.noclip then return end local character = getCharacterParts() if not character then return end for _, part in ipairs(character:GetDescendants()) do if part:IsA("BasePart") and part.CanCollide then noclipCache[part] = true part.CanCollide = false end end end ---Restore collisions changed by noclip. local function restoreNoclip() for part in pairs(noclipCache) do if part.Parent then part.CanCollide = true end end table.clear(noclipCache) end ---Speed boost, camera-directed fly and client gravity. local function updateMovement(deltaTime) if Settings.lowGravity then originalGravity = originalGravity or workspace.Gravity workspace.Gravity = Settings.gravity elseif originalGravity then workspace.Gravity = originalGravity originalGravity = nil end local _, humanoid, root = getCharacterParts() if not (humanoid and root) then return end local moveDirection = humanoid.MoveDirection if Settings.fly then local look = currentCamera.CFrame.LookVector local flatLook = Vector3.new(look.X, 0, look.Z) local forward = flatLook.Magnitude > 0 and moveDirection:Dot(flatLook.Unit) or 0 root.AssemblyLinearVelocity = (moveDirection + Vector3.new(0, look.Y * forward, 0)) * Settings.flySpeed return end if Settings.speed and moveDirection.Magnitude > 0 then root.CFrame += moveDirection * Settings.speedAmount * deltaTime end end ---Infinite jump and jump boost on the jump button. local function onJumpRequest() local _, humanoid, root = getCharacterParts() if not (humanoid and root) then return end local grounded = humanoid.FloorMaterial ~= Enum.Material.Air if Settings.infJump then humanoid:ChangeState(Enum.HumanoidStateType.Jumping) end if Settings.jumpBoost and (grounded or Settings.infJump) then task.defer(function() local velocity = root.AssemblyLinearVelocity root.AssemblyLinearVelocity = Vector3.new(velocity.X, Settings.jumpPower, velocity.Z) end) end end ---Apply or restore fullbright lighting. local function applyFullbright(enabled) for property, value in pairs(FULLBRIGHT) do if enabled then if lightingCache[property] == nil then lightingCache[property] = lighting[property] end lighting[property] = value elseif lightingCache[property] ~= nil then lighting[property] = lightingCache[property] end end if not enabled then table.clear(lightingCache) end end ---Hop to a different public server using the custom request function. local function serverHop() local ok, response = pcall(request, { Url = string.format("https://games.roblox.com/v1/games/%d/servers/Public?sortOrder=Asc&limit=100", game.PlaceId), Method = "GET", }) if not (ok and response and response.Success) then return notify("Server hop failed") end local decoded, data = pcall(httpService.JSONDecode, httpService, response.Body) if not decoded then return notify("Server hop failed") end local servers = {} for _, server in ipairs(data.data or {}) do if server.id ~= game.JobId and server.playing < server.maxPlayers then table.insert(servers, server.id) end end if #servers == 0 then return notify("No servers found") end notify("Hopping servers...") teleportService:TeleportToPlaceInstance(game.PlaceId, servers[math.random(#servers)], localPlayer) end ---Save Settings to the executor workspace. local function saveConfig() if not writefile then return notify("writefile not supported") end if makefolder and not (isfolder and isfolder(CONFIG_FOLDER)) then makefolder(CONFIG_FOLDER) end writefile(CONFIG_PATH, httpService:JSONEncode(Settings)) notify("Config saved") end ---Load Settings from disk; returns whether anything loaded. ---@return boolean local function loadConfig() if not (readfile and isfile and isfile(CONFIG_PATH)) then return false end local ok, data = pcall(httpService.JSONDecode, httpService, readfile(CONFIG_PATH)) if not ok or typeof(data) ~= "table" then return false end for key, value in pairs(data) do if Settings[key] ~= nil and typeof(Settings[key]) == typeof(value) then Settings[key] = value end end return true end ---Disconnect everything and clean up. function Potent.detach() Potent.running = false pcall(runService.UnbindFromRenderStep, runService, "PotentAim") for _, connection in ipairs(connections) do connection:Disconnect() end table.clear(connections) table.clear(animators) table.clear(refreshers) for player in pairs(espObjects) do removeEsp(player) end restoreNoclip() applyFullbright(false) if originalGravity then workspace.Gravity = originalGravity originalGravity = nil end for _, gui in ipairs({ hubGui, tracerGui, sakuraGui }) do if gui then gui:Destroy() end end end ---Build the hub and start loops. function Potent.init() Potent.running = true local loaded = loadConfig() createScreenSakura() local lists = createHub() tracerGui = create("ScreenGui", { Name = "PotentTracers", ResetOnSpawn = false, Parent = guiRoot }) createCrosshair() createStatsOverlay() local aim = lists.Aim addSection(aim, "Aimbot") local refreshAim = addToggle(aim, "Enabled", "aimbot") addCycle(aim, "Aim Mode", "aimMode", AIM_MODE_OPTIONS) addCycle(aim, "Aim Part", "aimPart", AIM_PART_OPTIONS) addCycle(aim, "Priority", "priority", PRIORITY_OPTIONS) addSlider(aim, "Strength", "strength", 1, 100, 1) addSlider(aim, "Prediction", "prediction", 0, 0.3, 0.01) addToggle(aim, "Auto Prediction", "autoPrediction") addToggle(aim, "Humanize", "humanize") addSection(aim, "Checks") addToggle(aim, "Sticky Target", "stickyTarget") addToggle(aim, "Wall Check", "wallCheck") addToggle(aim, "Team Check", "teamCheck") addToggle(aim, "Ignore Spawn Shield", "shieldCheck") addSection(aim, "Range") addSlider(aim, "FOV Size", "fov", 30, 500, 5) addSlider(aim, "Max Distance", "maxDistance", 50, 3000, 50) addToggle(aim, "Show FOV", "showFov") addToggle(aim, "Target Info", "targetInfo") addToggle(aim, "Sakura Crosshair", "crosshair") local visuals = lists.Visuals addSection(visuals, "ESP") addToggle(visuals, "Highlight", "esp") addCycle(visuals, "ESP Color", "espColor", ESP_COLOR_OPTIONS) addToggle(visuals, "Boxes", "boxes") addToggle(visuals, "Names", "names") addToggle(visuals, "Distance", "distance") addToggle(visuals, "Health Bar", "health") addToggle(visuals, "Tracers", "tracers") addSection(visuals, "Sakura") addToggle(visuals, "Screen Sakura", "screenSakura", function(enabled) screenPetals:setVisible(enabled) end) addSlider(visuals, "Petal Density", "sakuraDensity", 5, 60, 1, function(value) screenPetals:setCount(value) end) addSection(visuals, "World") addToggle(visuals, "Fullbright", "fullbright", applyFullbright) addToggle(visuals, "Stats Overlay", "statsOverlay") local playerTab = lists.Player addSection(playerTab, "Jumping") addToggle(playerTab, "Infinite Jump", "infJump") addToggle(playerTab, "Jump Boost", "jumpBoost") addSlider(playerTab, "Jump Power", "jumpPower", 30, 200, 5) addSection(playerTab, "Movement") addToggle(playerTab, "Noclip", "noclip", function(enabled) if not enabled then restoreNoclip() end end) addToggle(playerTab, "Speed", "speed") addSlider(playerTab, "Speed Amount", "speedAmount", 1, 100, 1) addToggle(playerTab, "Fly", "fly") addSlider(playerTab, "Fly Speed", "flySpeed", 10, 200, 5) addToggle(playerTab, "Low Gravity", "lowGravity") addSlider(playerTab, "Gravity", "gravity", 10, 196, 2) local misc = lists.Misc addSection(misc, "Config") addButton(misc, "Save Config", saveConfig) addButton(misc, "Load Config", function() if not loadConfig() then return notify("No config found") end for _, refresh in ipairs(refreshers) do refresh() end screenPetals:setVisible(Settings.screenSakura) screenPetals:setCount(Settings.sakuraDensity) applyFullbright(Settings.fullbright) notify("Config loaded") end) addSection(misc, "Server") addToggle(misc, "Anti AFK", "antiAfk") addButton(misc, "Server Hop", serverHop) addButton(misc, "Rejoin", function() teleportService:Teleport(game.PlaceId, localPlayer) end) addSection(misc, "Utility") addButton(misc, "Unlock FPS", function() if not setfpscap then return notify("setfpscap not supported") end setfpscap(999) notify("FPS unlocked") end) addButton(misc, "Unload", Potent.detach) local refreshQuick = createQuickButton(refreshAim) track(aim:FindFirstChildWhichIsA("TextButton").Activated:Connect(refreshQuick)) for _, player in ipairs(playersService:GetPlayers()) do createEsp(player) end track(playersService.PlayerAdded:Connect(createEsp)) track(playersService.PlayerRemoving:Connect(removeEsp)) track(userInputService.JumpRequest:Connect(onJumpRequest)) track(localPlayer.Idled:Connect(function() if not Settings.antiAfk then return end virtualUser:CaptureController() virtualUser:ClickButton2(Vector2.zero) end)) -- Run after every camera script so the game can't overwrite our rotation. runService:BindToRenderStep("PotentAim", Enum.RenderPriority.Last.Value + 1, function(deltaTime) currentCamera = workspace.CurrentCamera updateAim(deltaTime) end) track(runService.RenderStepped:Connect(function(deltaTime) updateEsp() local time = os.clock() for _, animate in ipairs(animators) do animate(time, deltaTime) end end)) track(runService.Stepped:Connect(updateNoclip)) track(runService.Heartbeat:Connect(function(deltaTime) updateMovement(deltaTime) if Settings.fullbright then applyFullbright(true) end end)) notify(loaded and "Config loaded" or "Potent loaded") end ---This is called when initialization errors. ---@param error string local function onInitializeError(error) warn("Failed to initialize.") warn(error) warn(debug.traceback()) Potent.detach() end -- Detach previous instance on re-execution. if shared.Potent then shared.Potent.detach() end shared.Potent = Potent xpcall(Potent.init, onInitializeError)