
Key Required VerifiedUniversal

local Fluent = loadstring(game:HttpGet("https://github.com/dawid-scripts/Fluent/releases/latest/download/main.lua"))()
local SaveManager = loadstring(game:HttpGet("https://raw.githubusercontent.com/dawid-scripts/Fluent/master/Addons/SaveManager.lua"))()
local InterfaceManager = loadstring(game:HttpGet("https://raw.githubusercontent.com/dawid-scripts/Fluent/master/Addons/InterfaceManager.lua"))()
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local Camera = workspace.CurrentCamera
local LocalPlayer = Players.LocalPlayer
-- Global configuration states for Whistle
_G.WhistleToggle = false
_G.WhistleDelay = 1.0
-- Table to track active event connections for clean unloading
local Hooks = {}
-- Movement Exploit States
local MovementSettings = {
InfiniteJump = false,
Noclip = false,
WalkSpeedEnabled = false,
WalkSpeedValue = 16
}
local Drawings = {
ESP = {},
Tracers = {},
Boxes = {},
Healthbars = {},
Names = {},
Distances = {},
Snaplines = {},
Skeleton = {}
}
local Colors = {
Enemy = Color3.fromRGB(255, 25, 25),
Ally = Color3.fromRGB(25, 255, 25),
Neutral = Color3.fromRGB(255, 255, 255),
Selected = Color3.fromRGB(255, 210, 0),
Health = Color3.fromRGB(0, 255, 0),
Distance = Color3.fromRGB(200, 200, 200),
Rainbow = nil
}
local Highlights = {}
local Settings = {
Enabled = false,
TeamCheck = false,
ShowTeam = false,
VisibilityCheck = true,
BoxESP = false,
BoxStyle = "Corner",
BoxOutline = true,
BoxFilled = false,
BoxFillTransparency = 0.5,
BoxThickness = 1,
TracerESP = false,
TracerOrigin = "Bottom",
TracerStyle = "Line",
TracerThickness = 1,
HealthESP = false,
HealthStyle = "Bar",
HealthBarSide = "Left",
HealthTextSuffix = "HP",
NameESP = false,
NameMode = "DisplayName",
ShowDistance = true,
DistanceUnit = "studs",
TextSize = 14,
TextFont = 2,
RainbowSpeed = 1,
MaxDistance = 1000,
RefreshRate = 1/144,
Snaplines = false,
SnaplineStyle = "Straight",
RainbowEnabled = false,
RainbowBoxes = false,
RainbowTracers = false,
RainbowText = false,
ChamsEnabled = false,
ChamsOutlineColor = Color3.fromRGB(255, 255, 255),
ChamsFillColor = Color3.fromRGB(255, 0, 0),
ChamsOccludedColor = Color3.fromRGB(150, 0, 0),
ChamsTransparency = 0.5,
ChamsOutlineTransparency = 0,
ChamsOutlineThickness = 0.1,
SkeletonESP = false,
SkeletonColor = Color3.fromRGB(255, 255, 255),
SkeletonThickness = 1.5,
SkeletonTransparency = 1
}
local function CreateESP(player)
if player == LocalPlayer then return end
local box = {
TopLeft = Drawing.new("Line"),
TopRight = Drawing.new("Line"),
BottomLeft = Drawing.new("Line"),
BottomRight = Drawing.new("Line"),
Left = Drawing.new("Line"),
Right = Drawing.new("Line"),
Top = Drawing.new("Line"),
Bottom = Drawing.new("Line")
}
for _, line in pairs(box) do
line.Visible = false
line.Color = Colors.Enemy
line.Thickness = Settings.BoxThickness
if line == box.Fill then
line.Filled = true
line.Transparency = Settings.BoxFillTransparency
end
end
local tracer = Drawing.new("Line")
tracer.Visible = false
tracer.Color = Colors.Enemy
tracer.Thickness = Settings.TracerThickness
local healthBar = {
Outline = Drawing.new("Square"),
Fill = Drawing.new("Square"),
Text = Drawing.new("Text")
}
for _, obj in pairs(healthBar) do
obj.Visible = false
if obj == healthBar.Fill then
obj.Color = Colors.Health
obj.Filled = true
elseif obj == healthBar.Text then
obj.Center = true
obj.Size = Settings.TextSize
obj.Color = Colors.Health
obj.Font = Settings.TextFont
end
end
local info = {
Name = Drawing.new("Text"),
Distance = Drawing.new("Text")
}
for _, text in pairs(info) do
text.Visible = false
text.Center = true
text.Size = Settings.TextSize
text.Color = Colors.Enemy
text.Font = Settings.TextFont
text.Outline = true
end
local snapline = Drawing.new("Line")
snapline.Visible = false
snapline.Color = Colors.Enemy
snapline.Thickness = 1
local highlight = Instance.new("Highlight")
highlight.Name = "Fluent_ESP_Cham"
highlight.FillColor = Settings.ChamsFillColor
highlight.OutlineColor = Settings.ChamsOutlineColor
highlight.FillTransparency = Settings.ChamsTransparency
highlight.OutlineTransparency = Settings.ChamsOutlineTransparency
highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
highlight.Enabled = Settings.ChamsEnabled
Highlights[player] = highlight
local skeleton = {
Head = Drawing.new("Line"),
Neck = Drawing.new("Line"),
UpperSpine = Drawing.new("Line"),
LowerSpine = Drawing.new("Line"),
LeftShoulder = Drawing.new("Line"),
LeftUpperArm = Drawing.new("Line"),
LeftLowerArm = Drawing.new("Line"),
LeftHand = Drawing.new("Line"),
RightShoulder = Drawing.new("Line"),
RightUpperArm = Drawing.new("Line"),
RightLowerArm = Drawing.new("Line"),
RightHand = Drawing.new("Line"),
LeftHip = Drawing.new("Line"),
LeftUpperLeg = Drawing.new("Line"),
LeftLowerLeg = Drawing.new("Line"),
LeftFoot = Drawing.new("Line"),
RightHip = Drawing.new("Line"),
RightUpperLeg = Drawing.new("Line"),
RightLowerLeg = Drawing.new("Line"),
RightFoot = Drawing.new("Line")
}
for _, line in pairs(skeleton) do
line.Visible = false
line.Color = Settings.SkeletonColor
line.Thickness = Settings.SkeletonThickness
line.Transparency = Settings.SkeletonTransparency
end
Drawings.Skeleton[player] = skeleton
Drawings.ESP[player] = {
Box = box,
Tracer = tracer,
HealthBar = healthBar,
Info = info,
Snapline = snapline
}
end
local function RemoveESP(player)
local esp = Drawings.ESP[player]
if esp then
for _, obj in pairs(esp.Box) do obj:Remove() end
if esp.Tracer then esp.Tracer:Remove() end
for _, obj in pairs(esp.HealthBar) do obj:Remove() end
for _, obj in pairs(esp.Info) do obj:Remove() end
if esp.Snapline then esp.Snapline:Remove() end
Drawings.ESP[player] = nil
end
local highlight = Highlights[player]
if highlight then
highlight:Destroy()
Highlights[player] = nil
end
local skeleton = Drawings.Skeleton[player]
if skeleton then
for _, line in pairs(skeleton) do
line:Remove()
end
Drawings.Skeleton[player] = nil
end
end
local function GetPlayerColor(player)
if Settings.RainbowEnabled then
if Settings.RainbowBoxes and Settings.BoxESP then return Colors.Rainbow end
if Settings.RainbowTracers and Settings.TracerESP then return Colors.Rainbow end
if Settings.RainbowText and (Settings.NameESP or Settings.HealthESP) then return Colors.Rainbow end
end
return player.Team == LocalPlayer.Team and Colors.Ally or Colors.Enemy
end
local function GetBoxCorners(cf, size)
local corners = {
Vector3.new(-size.X/2, -size.Y/2, -size.Z/2),
Vector3.new(-size.X/2, -size.Y/2, size.Z/2),
Vector3.new(-size.X/2, size.Y/2, -size.Z/2),
Vector3.new(-size.X/2, size.Y/2, size.Z/2),
Vector3.new(size.X/2, -size.Y/2, -size.Z/2),
Vector3.new(size.X/2, -size.Y/2, size.Z/2),
Vector3.new(size.X/2, size.Y/2, -size.Z/2),
Vector3.new(size.X/2, size.Y/2, size.Z/2)
}
for i, corner in ipairs(corners) do
corners[i] = cf:PointToWorldSpace(corner)
end
return corners
end
local function GetTracerOrigin()
local origin = Settings.TracerOrigin
if origin == "Bottom" then
return Vector2.new(Camera.ViewportSize.X/2, Camera.ViewportSize.Y)
elseif origin == "Top" then
return Vector2.new(Camera.ViewportSize.X/2, 0)
elseif origin == "Mouse" then
return UserInputService:GetMouseLocation()
else
return Vector2.new(Camera.ViewportSize.X/2, Camera.ViewportSize.Y/2)
end
end
local function UpdateESP(player)
if not Settings.Enabled then return end
local esp = Drawings.ESP[player]
if not esp then return end
local character = player.Character
if not character then
for _, obj in pairs(esp.Box) do obj.Visible = false end
esp.Tracer.Visible = false
for _, obj in pairs(esp.HealthBar) do obj.Visible = false end
for _, obj in pairs(esp.Info) do obj.Visible = false end
esp.Snapline.Visible = false
local skeleton = Drawings.Skeleton[player]
if skeleton then
for _, line in pairs(skeleton) do line.Visible = false end
end
return
end
local rootPart = character:FindFirstChild("HumanoidRootPart")
if not rootPart then
for _, obj in pairs(esp.Box) do obj.Visible = false end
esp.Tracer.Visible = false
for _, obj in pairs(esp.HealthBar) do obj.Visible = false end
for _, obj in pairs(esp.Info) do obj.Visible = false end
esp.Snapline.Visible = false
local skeleton = Drawings.Skeleton[player]
if skeleton then
for _, line in pairs(skeleton) do line.Visible = false end
end
return
end
local _, isOnScreen = Camera:WorldToViewportPoint(rootPart.Position)
if not isOnScreen then
for _, obj in pairs(esp.Box) do obj.Visible = false end
esp.Tracer.Visible = false
for _, obj in pairs(esp.HealthBar) do obj.Visible = false end
for _, obj in pairs(esp.Info) do obj.Visible = false end
esp.Snapline.Visible = false
local skeleton = Drawings.Skeleton[player]
if skeleton then
for _, line in pairs(skeleton) do line.Visible = false end
end
return
end
local humanoid = character:FindFirstChild("Humanoid")
if not humanoid or humanoid.Health <= 0 then
for _, obj in pairs(esp.Box) do obj.Visible = false end
esp.Tracer.Visible = false
for _, obj in pairs(esp.HealthBar) do obj.Visible = false end
for _, obj in pairs(esp.Info) do obj.Visible = false end
esp.Snapline.Visible = false
local skeleton = Drawings.Skeleton[player]
if skeleton then
for _, line in pairs(skeleton) do line.Visible = false end
end
return
end
local pos, onScreen = Camera:WorldToViewportPoint(rootPart.Position)
local distance = (rootPart.Position - Camera.CFrame.Position).Magnitude
if not onScreen or distance > Settings.MaxDistance then
for _, obj in pairs(esp.Box) do obj.Visible = false end
esp.Tracer.Visible = false
for _, obj in pairs(esp.HealthBar) do obj.Visible = false end
for _, obj in pairs(esp.Info) do obj.Visible = false end
esp.Snapline.Visible = false
return
end
if Settings.TeamCheck and player.Team == LocalPlayer.Team and not Settings.ShowTeam then
for _, obj in pairs(esp.Box) do obj.Visible = false end
esp.Tracer.Visible = false
for _, obj in pairs(esp.HealthBar) do obj.Visible = false end
for _, obj in pairs(esp.Info) do obj.Visible = false end
esp.Snapline.Visible = false
return
end
local color = GetPlayerColor(player)
local size = character:GetExtentsSize()
local cf = rootPart.CFrame
local top, top_onscreen = Camera:WorldToViewportPoint(cf * CFrame.new(0, size.Y/2, 0).Position)
local bottom, bottom_onscreen = Camera:WorldToViewportPoint(cf * CFrame.new(0, -size.Y/2, 0).Position)
if not top_onscreen or not bottom_onscreen then
for _, obj in pairs(esp.Box) do obj.Visible = false end
return
end
local screenSize = bottom.Y - top.Y
local boxWidth = screenSize * 0.65
local boxPosition = Vector2.new(top.X - boxWidth/2, top.Y)
local boxSize = Vector2.new(boxWidth, screenSize)
for _, obj in pairs(esp.Box) do obj.Visible = false end
if Settings.BoxESP then
if Settings.BoxStyle == "ThreeD" then
local front = {
TL = Camera:WorldToViewportPoint((cf * CFrame.new(-size.X/2, size.Y/2, -size.Z/2)).Position),
TR = Camera:WorldToViewportPoint((cf * CFrame.new(size.X/2, size.Y/2, -size.Z/2)).Position),
BL = Camera:WorldToViewportPoint((cf * CFrame.new(-size.X/2, -size.Y/2, -size.Z/2)).Position),
BR = Camera:WorldToViewportPoint((cf * CFrame.new(size.X/2, -size.Y/2, -size.Z/2)).Position)
}
local back = {
TL = Camera:WorldToViewportPoint((cf * CFrame.new(-size.X/2, size.Y/2, size.Z/2)).Position),
TR = Camera:WorldToViewportPoint((cf * CFrame.new(size.X/2, size.Y/2, size.Z/2)).Position),
BL = Camera:WorldToViewportPoint((cf * CFrame.new(-size.X/2, -size.Y/2, size.Z/2)).Position),
BR = Camera:WorldToViewportPoint((cf * CFrame.new(size.X/2, -size.Y/2, size.Z/2)).Position)
}
if not (front.TL.Z > 0 and front.TR.Z > 0 and front.BL.Z > 0 and front.BR.Z > 0 and
back.TL.Z > 0 and back.TR.Z > 0 and back.BL.Z > 0 and back.BR.Z > 0) then
for _, obj in pairs(esp.Box) do obj.Visible = false end
return
end
local function toVector2(v3) return Vector2.new(v3.X, v3.Y) end
front.TL, front.TR = toVector2(front.TL), toVector2(front.TR)
front.BL, front.BR = toVector2(front.BL), toVector2(front.BR)
back.TL, back.TR = toVector2(back.TL), toVector2(back.TR)
back.BL, back.BR = toVector2(back.BL), toVector2(back.BR)
esp.Box.TopLeft.From = front.TL
esp.Box.TopLeft.To = front.TR
esp.Box.TopLeft.Visible = true
esp.Box.TopRight.From = front.TR
esp.Box.TopRight.To = front.BR
esp.Box.TopRight.Visible = true
esp.Box.BottomLeft.From = front.BL
esp.Box.BottomLeft.To = front.BR
esp.Box.BottomLeft.Visible = true
esp.Box.BottomRight.From = front.TL
esp.Box.BottomRight.To = front.BL
esp.Box.BottomRight.Visible = true
esp.Box.Left.From = back.TL
esp.Box.Left.To = back.TR
esp.Box.Left.Visible = true
esp.Box.Right.From = back.TR
esp.Box.Right.To = back.BR
esp.Box.Right.Visible = true
esp.Box.Top.From = back.BL
esp.Box.Top.To = back.BR
esp.Box.Top.Visible = true
esp.Box.Bottom.From = back.TL
esp.Box.Bottom.To = back.BL
esp.Box.Bottom.Visible = true
local function drawConnectingLine(from, to, visible)
local line = Drawing.new("Line")
line.Visible = visible
line.Color = color
line.Thickness = Settings.BoxThickness
line.From = from
line.To = to
return line
end
local connectors = {
drawConnectingLine(front.TL, back.TL, true),
drawConnectingLine(front.TR, back.TR, true),
drawConnectingLine(front.BL, back.BL, true),
drawConnectingLine(front.BR, back.BR, true)
}
task.spawn(function()
task.wait()
for _, line in ipairs(connectors) do line:Remove() end
end)
elseif Settings.BoxStyle == "Corner" then
local cornerSize = boxWidth * 0.2
esp.Box.TopLeft.From = boxPosition
esp.Box.TopLeft.To = boxPosition + Vector2.new(cornerSize, 0)
esp.Box.TopLeft.Visible = true
esp.Box.TopRight.From = boxPosition + Vector2.new(boxSize.X, 0)
esp.Box.TopRight.To = boxPosition + Vector2.new(boxSize.X - cornerSize, 0)
esp.Box.TopRight.Visible = true
esp.Box.BottomLeft.From = boxPosition + Vector2.new(0, boxSize.Y)
esp.Box.BottomLeft.To = boxPosition + Vector2.new(cornerSize, boxSize.Y)
esp.Box.BottomLeft.Visible = true
esp.Box.BottomRight.From = boxPosition + Vector2.new(boxSize.X, boxSize.Y)
esp.Box.BottomRight.To = boxPosition + Vector2.new(boxSize.X - cornerSize, boxSize.Y)
esp.Box.BottomRight.Visible = true
esp.Box.Left.From = boxPosition
esp.Box.Left.To = boxPosition + Vector2.new(0, cornerSize)
esp.Box.Left.Visible = true
esp.Box.Right.From = boxPosition + Vector2.new(boxSize.X, 0)
esp.Box.Right.To = boxPosition + Vector2.new(boxSize.X, cornerSize)
esp.Box.Right.Visible = true
esp.Box.Top.From = boxPosition + Vector2.new(0, boxSize.Y)
esp.Box.Top.To = boxPosition + Vector2.new(0, boxSize.Y - cornerSize)
esp.Box.Top.Visible = true
esp.Box.Bottom.From = boxPosition + Vector2.new(boxSize.X, boxSize.Y)
esp.Box.Bottom.To = boxPosition + Vector2.new(boxSize.X, boxSize.Y - cornerSize)
esp.Box.Bottom.Visible = true
else
esp.Box.Left.From = boxPosition
esp.Box.Left.To = boxPosition + Vector2.new(0, boxSize.Y)
esp.Box.Left.Visible = true
esp.Box.Right.From = boxPosition + Vector2.new(boxSize.X, 0)
esp.Box.Right.To = boxPosition + Vector2.new(boxSize.X, boxSize.Y)
esp.Box.Right.Visible = true
esp.Box.Top.From = boxPosition
esp.Box.Top.To = boxPosition + Vector2.new(boxSize.X, 0)
esp.Box.Top.Visible = true
esp.Box.Bottom.From = boxPosition + Vector2.new(0, boxSize.Y)
esp.Box.Bottom.To = boxPosition + Vector2.new(boxSize.X, boxSize.Y)
esp.Box.Bottom.Visible = true
end
for _, obj in pairs(esp.Box) do
if obj.Visible then
obj.Color = color
obj.Thickness = Settings.BoxThickness
end
end
end
if Settings.TracerESP then
esp.Tracer.From = GetTracerOrigin()
esp.Tracer.To = Vector2.new(pos.X, pos.Y)
esp.Tracer.Color = color
esp.Tracer.Visible = true
else
esp.Tracer.Visible = false
end
if Settings.HealthESP then
local health = humanoid.Health
local maxHealth = humanoid.MaxHealth
local healthPercent = health/maxHealth
local barHeight = screenSize * 0.8
local barWidth = 4
local barPos = Vector2.new(boxPosition.X - barWidth - 2, boxPosition.Y + (screenSize - barHeight)/2)
esp.HealthBar.Outline.Size = Vector2.new(barWidth, barHeight)
esp.HealthBar.Outline.Position = barPos
esp.HealthBar.Outline.Visible = true
esp.HealthBar.Fill.Size = Vector2.new(barWidth - 2, barHeight * healthPercent)
esp.HealthBar.Fill.Position = Vector2.new(barPos.X + 1, barPos.Y + barHeight * (1-healthPercent))
esp.HealthBar.Fill.Color = Color3.fromRGB(255 - (255 * healthPercent), 255 * healthPercent, 0)
esp.HealthBar.Fill.Visible = true
if Settings.HealthStyle == "Both" or Settings.HealthStyle == "Text" then
esp.HealthBar.Text.Text = math.floor(health) .. Settings.HealthTextSuffix
esp.HealthBar.Text.Position = Vector2.new(barPos.X + barWidth + 2, barPos.Y + barHeight/2)
esp.HealthBar.Text.Visible = true
else
esp.HealthBar.Text.Visible = false
end
else
for _, obj in pairs(esp.HealthBar) do obj.Visible = false end
end
if Settings.NameESP then
esp.Info.Name.Text = player.DisplayName
esp.Info.Name.Position = Vector2.new(boxPosition.X + boxWidth/2, boxPosition.Y - 20)
esp.Info.Name.Color = color
esp.Info.Name.Visible = true
else
esp.Info.Name.Visible = false
end
if Settings.Snaplines then
esp.Snapline.From = Vector2.new(Camera.ViewportSize.X/2, Camera.ViewportSize.Y)
esp.Snapline.To = Vector2.new(pos.X, pos.Y)
esp.Snapline.Color = color
esp.Snapline.Visible = true
else
esp.Snapline.Visible = false
end
local highlight = Highlights[player]
if highlight then
if Settings.ChamsEnabled and character then
highlight.Parent = character
highlight.FillColor = Settings.ChamsFillColor
highlight.OutlineColor = Settings.ChamsOutlineColor
highlight.FillTransparency = Settings.ChamsTransparency
highlight.OutlineTransparency = Settings.ChamsOutlineTransparency
highlight.Enabled = true
else
highlight.Enabled = false
end
end
if Settings.SkeletonESP then
local function getBonePositions(character)
if not character then return nil end
local bones = {
Head = character:FindFirstChild("Head"),
UpperTorso = character:FindFirstChild("UpperTorso") or character:FindFirstChild("Torso"),
LowerTorso = character:FindFirstChild("LowerTorso") or character:FindFirstChild("Torso"),
RootPart = character:FindFirstChild("HumanoidRootPart"),
LeftUpperArm = character:FindFirstChild("LeftUpperArm") or character:FindFirstChild("Left Arm"),
LeftLowerArm = character:FindFirstChild("LeftLowerArm") or character:FindFirstChild("Left Arm"),
LeftHand = character:FindFirstChild("LeftHand") or character:FindFirstChild("Left Arm"),
RightUpperArm = character:FindFirstChild("RightUpperArm") or character:FindFirstChild("Right Arm"),
RightLowerArm = character:FindFirstChild("RightLowerArm") or character:FindFirstChild("Right Arm"),
RightHand = character:FindFirstChild("RightHand") or character:FindFirstChild("Right Arm"),
LeftUpperLeg = character:FindFirstChild("LeftUpperLeg") or character:FindFirstChild("Left Leg"),
LeftLowerLeg = character:FindFirstChild("LeftLowerLeg") or character:FindFirstChild("Left Leg"),
LeftFoot = character:FindFirstChild("LeftFoot") or character:FindFirstChild("Left Leg"),
RightUpperLeg = character:FindFirstChild("RightUpperLeg") or character:FindFirstChild("Right Leg"),
RightLowerLeg = character:FindFirstChild("RightLowerLeg") or character:FindFirstChild("Right Leg"),
RightFoot = character:FindFirstChild("RightFoot") or character:FindFirstChild("Right Leg")
}
if not (bones.Head and bones.UpperTorso) then return nil end
return bones
end
local function drawBone(from, to, line)
if not from or not to then
line.Visible = false
return
end
local fromPos = (from.CFrame * CFrame.new(0, 0, 0)).Position
local toPos = (to.CFrame * CFrame.new(0, 0, 0)).Position
local fromScreen, fromVisible = Camera:WorldToViewportPoint(fromPos)
local toScreen, toVisible = Camera:WorldToViewportPoint(toPos)
if not (fromVisible and toVisible) or fromScreen.Z < 0 or toScreen.Z < 0 then
line.Visible = false
return
end
local screenBounds = Camera.ViewportSize
if fromScreen.X < 0 or fromScreen.X > screenBounds.X or
fromScreen.Y < 0 or fromScreen.Y > screenBounds.Y or
toScreen.X < 0 or toScreen.X > screenBounds.X or
toScreen.Y < 0 or toScreen.Y > screenBounds.Y then
line.Visible = false
return
end
line.From = Vector2.new(fromScreen.X, fromScreen.Y)
line.To = Vector2.new(toScreen.X, toScreen.Y)
line.Color = Settings.SkeletonColor
line.Thickness = Settings.SkeletonThickness
line.Transparency = Settings.SkeletonTransparency
line.Visible = true
end
local bones = getBonePositions(character)
if bones then
local skeleton = Drawings.Skeleton[player]
if skeleton then
drawBone(bones.Head, bones.UpperTorso, skeleton.Head)
drawBone(bones.UpperTorso, bones.LowerTorso, skeleton.UpperSpine)
drawBone(bones.UpperTorso, bones.LeftUpperArm, skeleton.LeftShoulder)
drawBone(bones.LeftUpperArm, bones.LeftLowerArm, skeleton.LeftUpperArm)
drawBone(bones.LeftLowerArm, bones.LeftHand, skeleton.LeftLowerArm)
drawBone(bones.UpperTorso, bones.RightUpperArm, skeleton.RightShoulder)
drawBone(bones.RightUpperArm, bones.RightLowerArm, skeleton.RightUpperArm)
drawBone(bones.RightLowerArm, bones.RightHand, skeleton.RightLowerArm)
drawBone(bones.LowerTorso, bones.LeftUpperLeg, skeleton.LeftHip)
drawBone(bones.LeftUpperLeg, bones.LeftLowerLeg, skeleton.LeftUpperLeg)
drawBone(bones.LeftLowerLeg, bones.LeftFoot, skeleton.LeftLowerLeg)
drawBone(bones.LowerTorso, bones.RightUpperLeg, skeleton.RightHip)
drawBone(bones.RightUpperLeg, bones.RightLowerLeg, skeleton.RightUpperLeg)
drawBone(bones.RightLowerLeg, bones.RightFoot, skeleton.RightLowerLeg)
end
end
else
local skeleton = Drawings.Skeleton[player]
if skeleton then
for _, line in pairs(skeleton) do line.Visible = false end
end
end
end
local function DisableESP()
for _, player in ipairs(Players:GetPlayers()) do
local esp = Drawings.ESP[player]
if esp then
for _, obj in pairs(esp.Box) do obj.Visible = false end
esp.Tracer.Visible = false
for _, obj in pairs(esp.HealthBar) do obj.Visible = false end
for _, obj in pairs(esp.Info) do obj.Visible = false end
esp.Snapline.Visible = false
end
end
end
-- Track hooks properly
Hooks.PlayerAdded = Players.PlayerAdded:Connect(CreateESP)
Hooks.PlayerRemoving = Players.PlayerRemoving:Connect(RemoveESP)
for _, player in ipairs(Players:GetPlayers()) do
CreateESP(player)
end
Hooks.RenderStepped = RunService.RenderStepped:Connect(function()
for _, player in ipairs(Players:GetPlayers()) do
UpdateESP(player)
end
end)
----------------------------------------------------------------
-- EXPLOIT LOOPS (Infinite Jump, Noclip & WalkSpeed)
----------------------------------------------------------------
Hooks.JumpRequest = UserInputService.JumpRequest:Connect(function()
if MovementSettings.InfiniteJump and LocalPlayer.Character then
local humanoid = LocalPlayer.Character:FindFirstChildOfClass("Humanoid")
if humanoid then
humanoid:ChangeState(Enum.HumanoidStateType.Jumping)
end
end
end)
Hooks.Stepped = RunService.Stepped:Connect(function()
if LocalPlayer.Character then
-- Noclip logic
if MovementSettings.Noclip then
for _, part in ipairs(LocalPlayer.Character:GetDescendants()) do
if part:IsA("BasePart") and part.CanCollide then
part.CanCollide = false
end
end
end
-- WalkSpeed logic loop to continuously enforce value
local humanoid = LocalPlayer.Character:FindFirstChildOfClass("Humanoid")
if humanoid then
if MovementSettings.WalkSpeedEnabled then
humanoid.WalkSpeed = MovementSettings.WalkSpeedValue
end
end
end
end)
----------------------------------------------------------------
-- TAUNT INJECTION LOOP
----------------------------------------------------------------
local whistleRunning = true
task.spawn(function()
local TauntEvent = game:GetService("ReplicatedStorage"):WaitForChild("Remotes"):WaitForChild("TauntEvent")
while whistleRunning do
if _G.WhistleToggle then
TauntEvent:FireServer("Whistle")
end
task.wait(_G.WhistleDelay)
end
end)
----------------------------------------------------------------
-- UI LAYOUT GENERATION (Fluent Framework)
----------------------------------------------------------------
local Window = Fluent:CreateWindow({
Title = "[NEW!🔥]Paint Or Seek ESP | Made by Gemini Ai",
SubTitle = "promp credit to dgrpip19",
TabWidth = 160,
Size = UDim2.fromOffset(580, 460),
Acrylic = true,
Theme = "Dark",
MinimizeKey = Enum.KeyCode.LeftControl
})
local Tabs = {
Visuals = Window:AddTab({ Title = "ESP Visuals", Icon = "eye" }),
Misc = Window:AddTab({ Title = "Misc Tools", Icon = "box" }),
Settings = Window:AddTab({ Title = "Settings", Icon = "settings" })
}
-- ESP Control assignments matching original script settings map
Tabs.Visuals:AddToggle("MasterESP", { Title = "Enable ESP System", Default = false }):OnChanged(function(Value)
Settings.Enabled = Value
if not Value then DisableESP() end
end)
Tabs.Visuals:AddToggle("BoxToggle", { Title = "Box Outline", Default = false }):OnChanged(function(Value)
Settings.BoxESP = Value
end)
Tabs.Visuals:AddToggle("NameToggle", { Title = "Show Names", Default = false }):OnChanged(function(Value)
Settings.NameESP = Value
end)
-- Movement exploits added into Misc Tab
Tabs.Misc:AddToggle("InfJumpToggle", { Title = "Infinite Jump", Default = false }):OnChanged(function(Value)
MovementSettings.InfiniteJump = Value
end)
Tabs.Misc:AddToggle("NoclipToggle", { Title = "Noclip", Default = false }):OnChanged(function(Value)
MovementSettings.Noclip = Value
end)
-- WalkSpeed Controls inside Misc Tab
Tabs.Misc:AddToggle("WSToggle", { Title = "Enable WalkSpeed Changer", Default = false }):OnChanged(function(Value)
MovementSettings.WalkSpeedEnabled = Value
if not Value and LocalPlayer.Character then
local humanoid = LocalPlayer.Character:FindFirstChildOfClass("Humanoid")
if humanoid then humanoid.WalkSpeed = 16 end
end
end)
Tabs.Misc:AddSlider("WSSlider", {
Title = "Custom WalkSpeed",
Description = "Adjust your character's travel speed.",
Min = 16,
Max = 250,
Default = 16,
Rounding = 0
}):OnChanged(function(Value)
MovementSettings.WalkSpeedValue = Value
end)
-- The added Loop adjustments assigned within the Misc tab
Tabs.Misc:AddToggle("WhistleSpam", { Title = "Auto Whistle Loop", Default = false }):OnChanged(function(Value)
_G.WhistleToggle = Value
end)
Tabs.Misc:AddSlider("WhistleSpeed", {
Title = "Whistle Delay (Seconds)",
Description = "Adjust how fast the event fires on repeat.",
Min = 0.1,
Max = 5.0,
Default = 1.0,
Rounding = 1
}):OnChanged(function(Value)
_G.WhistleDelay = Value
end)
----------------------------------------------------------------
-- UNLOAD EXECUTION
----------------------------------------------------------------
Tabs.Settings:AddButton({
Title = "Unload Script",
Description = "Completely removes drawings, loops, and UI hooks.",
Callback = function()
Window:Destroy()
-- Disconnect all engine update links
for name, connection in pairs(Hooks) do
if connection then connection:Disconnect() end
end
-- Turn off Whistle Thread execution flag
whistleRunning = false
_G.WhistleToggle = false
-- Restore movement configurations completely
MovementSettings.Noclip = false
MovementSettings.InfiniteJump = false
MovementSettings.WalkSpeedEnabled = false
if LocalPlayer.Character then
local humanoid = LocalPlayer.Character:FindFirstChildOfClass("Humanoid")
if humanoid then humanoid.WalkSpeed = 16 end
for _, part in ipairs(LocalPlayer.Character:GetDescendants()) do
if part:IsA("BasePart") then
part.CanCollide = true
end
end
end
-- Fully flush out active graphics drawing references
for _, player in ipairs(Players:GetPlayers()) do
RemoveESP(player)
end
end
})
Window:SelectTab(Tabs.Visuals)No comments yet for this script.

