Run it
Copy the script and paste it into your executor.
Players = :()
ReplicatedStorage = :()
RunService = :()
TweenService = :()
TeleportService = :()
HttpService = :()
UserInputService = :()
PathfindingService = :()
Player = Players.LocalPlayer
Mouse = Player:()
Library = (:())()
repoForAddons =
ThemeManager = (:(repoForAddons .. ))()
SaveManager = (:(repoForAddons .. ))()
Options = Library.Options
Toggles = Library.Toggles
Library.ForceCheckbox =
Library.ShowToggleFrameInKeybinds =
UI = {}
Logic = {
TIME_WINDOW = ,
LastFiredTick = ,
TargetAnimations = {
[] = ,
[] = ,
[] = ,
[] =
},
DashAnimLeft = .(),
DashAnimRight = .(),
DashAssistState = {
Enabled = ,
CameraLock = ,
OnlyIfFacing = ,
DetectionRange = ,
BehindDistance = ,
FlightDuration = ,
CurveStrength = ,
ArchHeight = ,
LockDuration = ,
},
Pathfinding = {
Active = ,
Speed = ,
VisualizeOn = ,
CurrentTween = ,
VisualParts = {},
VisualFolder = ,
},
TargetRemote = ,
ESPObjects = {},
Connections = {},
ServerMap = {},
ShadowColor = .(, , ),
CooldownGradient = ColorSequence.({
ColorSequenceKeypoint.(, .(, , )),
ColorSequenceKeypoint.(, .(, , ))
}),
R15Bones = {
{,}, {,},
{,}, {,}, {,},
{,}, {,},{,},
{,}, {,}, {,},
{,}, {,},{,},
},
R6Bones = {
{,}, {,}, {,},
{,}, {,},
},
LockSettings = {
ESPEnabled = ,
Sticky = ,
Method = ,
TargetMode = ,
TargetPart = ,
Smoothness = ,
SideOffset = ,
MaxDistance = ,
WallCheck = ,
ShowFOV = ,
FOVRadius = ,
FOVFilled = ,
FOVTransparency = ,
FOVSides = ,
Prediction = ,
SelectedPlayer = ,
ShowTargetInfo = ,
LockNotification = ,
AutoRetarget = ,
TargetInfoPos = ,
},
LockState = {
Enabled = ,
LastTargetSearch = ,
WasLockedBody = ,
ZoomDistance = ,
CurrentLockTarget = ,
CameraLocked = ,
OrigCamType = .CameraType.Custom,
LockBodyGyro = ,
ESPGui = ,
FOVCircle = ,
TargetInfoName = ,
TargetInfoHP = ,
TargetInfoDist = ,
TargetInfoLine = ,
LastTargetName = ,
}
}
UI.Window = Library:({
Title = ,
Center = ,
AutoShow = ,
Resizable = ,
Icon = ,
NotifySide = ,
ShowCustomCursor = ,
TabSwipeOffset = ,
Size = .(, , , ),
})
UI.Tabs = {
Main = UI.Window:(, , ),
Visuals = UI.Window:(, , ),
Lock = UI.Window:(, , ),
Teleports = UI.Window:(, , ),
SideDash = UI.Window:(, , ),
Servers = UI.Window:(, , ),
UISettings = UI.Window:(, , ),
}
UI.CombatGroup = UI.Tabs.Main:(, )
UI.CombatGroup:(, {
Text = ,
Default = ,
Tooltip =
})
UI.CombatGroup:(, {
Text = ,
Default = ,
Tooltip =
})
UI.CombatGroup:(, {
Text = ,
Default = ,
Min = ,
Max = ,
Rounding = ,
})
UI.CombatGroup:(, {
Text = ,
Default = ,
Min = ,
Max = ,
Rounding = ,
})
UI.CombatGroup:(, {
Text = ,
Default = ,
Min = ,
Max = ,
Rounding = ,
})
UI.CombatGroup:(, {
Text = ,
Default = ,
Min = ,
Max = ,
Rounding = ,
})
UI.CombatGroup:(, {
Values = {, , , , , , , , , , },
Default = ,
Multi = ,
Text = ,
Tooltip =
})
UI.CombatGroup:(, {
Values = {, , },
Default = ,
Multi = ,
Text = ,
Tooltip =
})
UI.ESPBoxGrp = UI.Tabs.Visuals:()
UI.ESPBoxGrp:(, { Text = , Default = })
:(, { Default = .(, , ), Title = })
UI.ESPBoxGrp:(, { Text = , Default = })
:(, { Default = .(, , ), Title = })
UI.ESPBoxGrp:(, { Text = , Default = })
:(, { Default = .(, , ), Title = })
UI.ESPBoxGrp:(, { Text = , Default = })
:(, { Default = .(, , ), Title = })
UI.ESPBoxGrp:(, { Text = , Default = })
:(, { Default = .(, , ), Title = })
UI.ESPBoxGrp:(, { Text = , Default = })
:(, { Default = .(, , ), Title = })
UI.ESPInfoGrp = UI.Tabs.Visuals:()
UI.ESPInfoGrp:(, { Text = , Default = })
:(, { Default = .(, , ), Title = })
UI.ESPInfoGrp:(, { Text = , Default = })
:(, { Default = .(, , ), Title = })
UI.ESPInfoGrp:(, { Text = , Default = })
:(, { Default = .(, , ), Title = })
UI.ESPInfoGrp:(, { Text = , Default = })
:(, { Default = .(, , ), Title = })
UI.ESPInfoGrp:(, { Text = , Default = , Tooltip = })
UI.ESPInfoGrp:(, { Text = , Default = , Tooltip = })
UI.ESPInfoGrp:()
UI.ESPInfoGrp:(, { Text = , Default = , Tooltip = })
UI.LockGroup = UI.Tabs.Lock:(, )
UI.LockConfigGroup = UI.Tabs.Lock:(, )
UI.LockGroup:(, {
Text = ,
Default = Logic.LockState.Enabled,
Callback = (state)
Logic.LockState.Enabled = state
Logic.LockSettings.LockNotification
state
Library:({ Title = , Description = , Time = })
Logic.LockState.LastTargetName
Library:({ Title = , Description = .. (Logic.LockState.LastTargetName), Time = })
Library:({ Title = , Description = , Time = })
Logic.LockState.LastTargetName =
}):(, {
Default = ,
SyncToggleState = ,
Mode = ,
Text = ,
NoUI =
})
Options.LockKeybind:(()
Toggles.EnableLock:(Options.LockKeybind:())
)
UI.LockGroup:(, {
Text = ,
Default = Logic.LockSettings.ESPEnabled,
Callback = (state) Logic.LockSettings.ESPEnabled = state
})
UI.LockGroup:()
UI.LockGroup:(, {
Values = {},
Default = ,
Multi = ,
Text = ,
Searchable = ,
Tooltip = ,
Callback = (val)
Logic.LockSettings.SelectedPlayer = val
val ~=
Logic.LockState.CurrentLockTarget =
Logic.LockState.LastTargetSearch =
})
UI.LockGroup:({
Text = ,
Func = ()
vals = {}
charsFolder = :()
_, p (Players:())
p ~= Player
.(vals, p.Name)
charsFolder
_, model (charsFolder:())
model:() Players:(model)
hum = model:()
hum hum.Health >
npcName = .. model.Name
.(vals, npcName)
.(vals, npcName)
Options.LockSpecificPlayer:(vals)
.(vals, Logic.LockSettings.SelectedPlayer)
Logic.LockSettings.SelectedPlayer =
Options.LockSpecificPlayer:()
Library:({ Title = , Description = .. (#vals - ) .. , Time = })
,
Tooltip = ,
})
UI.LockGroup:(, {
Text = ,
Default = ,
Tooltip = ,
Callback = (state) Logic.LockSettings.WallCheck = state
})
UI.LockGroup:(, {
Text = ,
Default = ,
Tooltip = ,
Callback = (state) Logic.LockSettings.AutoRetarget = state
})
UI.LockGroup:(, {
Text = ,
Default = ,
Tooltip = ,
Callback = (state) Logic.LockSettings.LockNotification = state
})
UI.LockConfigGroup:(, {
Values = {, },
Default = ,
Multi = ,
Text = ,
Callback = (val) Logic.LockSettings.Method = val
})
UI.LockConfigGroup:(, {
Values = {, },
Default = ,
Multi = ,
Text = ,
Callback = (val) Logic.LockSettings.TargetMode = val
})
UI.LockConfigGroup:(, {
Values = {, , , },
Default = ,
Multi = ,
Text = ,
Callback = (val) Logic.LockSettings.TargetPart = val
})
UI.LockConfigGroup:(, {
Text = ,
Default = ,
Min = ,
Max = ,
Rounding = ,
Callback = (val) Logic.LockSettings.Smoothness = val
})
UI.LockConfigGroup:(, {
Text = ,
Default = ,
Min = -,
Max = ,
Rounding = ,
Callback = (val) Logic.LockSettings.SideOffset = val
})
UI.LockConfigGroup:()
UI.LockConfigGroup:(, {
Text = ,
Default = ,
Min = ,
Max = ,
Rounding = ,
Tooltip = ,
Callback = (val) Logic.LockSettings.MaxDistance = val
})
UI.LockConfigGroup:(, {
Text = ,
Default = ,
Min = ,
Max = ,
Rounding = ,
Tooltip = ,
Callback = (val) Logic.LockSettings.Prediction = val
})
UI.DashGroup = UI.Tabs.SideDash:(, )
UI.DashConfigGroup = UI.Tabs.SideDash:(, )
UI.DashGroup:(, {
Text = ,
Default = Logic.DashAssistState.Enabled,
Callback = (val) Logic.DashAssistState.Enabled = val
})
UI.DashGroup:(, {
Text = ,
Default = Logic.DashAssistState.CameraLock,
Callback = (val) Logic.DashAssistState.CameraLock = val
})
UI.DashGroup:(, {
Text = ,
Default = Logic.DashAssistState.OnlyIfFacing,
Callback = (val) Logic.DashAssistState.OnlyIfFacing = val
})
UI.DashGroup:():(, {
Default = ,
SyncToggleState = ,
Mode = ,
Text = ,
NoUI =
})
UI.DashGroup:(, {
Text = ,
Default = , Min = , Max = , Rounding = ,
Callback = (val) Logic.DashAssistState.DetectionRange = val
})
UI.DashGroup:(, {
Text = ,
Default = , Min = , Max = , Rounding = ,
Callback = (val) Logic.DashAssistState.BehindDistance = val
})
UI.DashGroup:(, {
Text = ,
Default = , Min = , Max = , Rounding = ,
Callback = (val) Logic.DashAssistState.FlightDuration = val
})
UI.DashConfigGroup:(, {
Text = ,
Default = , Min = , Max = , Rounding = ,
Callback = (val) Logic.DashAssistState.CurveStrength = val
})
UI.DashConfigGroup:(, {
Text = ,
Default = , Min = , Max = , Rounding = ,
Callback = (val) Logic.DashAssistState.ArchHeight = val
})
UI.DashConfigGroup:(, {
Text = ,
Default = , Min = , Max = , Rounding = ,
Callback = (val) Logic.DashAssistState.LockDuration = val
})
TeleportLocations = {
[] = .(-, -, -),
[] = .(, , -),
[] = .(, , ),
[] = .(, -, ),
[] = .(, -, -),
[] = .(-, , -),
[] = .(, , ),
[] = .(-, -, -),
[] = .(, -, -),
[] = .(, -, ),
[] = .(, -, -),
[] = .(, -, -),
[] = .(-, , -),
[] = .(-, , -),
[] = .(, , -),
[] = .(, , -),
[] = .(, , ),
[] = .(-, , ),
[] = .(-, , ),
}
LocationNames = {}
k, _ (TeleportLocations) .(LocationNames, k)
.(LocationNames)
.MiscState = .MiscState {}
Invisibility = { Connections = {} }
Invisibility.(state, silent)
char = Player.Character
char
hum = char:()
hrp = char:()
animator = hum hum:()
(hum hrp animator)
Camera = .CurrentCamera
state
.MiscState.IsInvisible =
silent
hum.AutoRotate =
hrp.Anchored =
Invisibility.Connections[] = RunService.Stepped:(()
.MiscState.IsInvisible
_, part (char:())
part:() part.CanCollide =
)
.MiscState.InvisibleFakeTorso = .()
.MiscState.InvisibleFakeTorso.Name =
.MiscState.InvisibleFakeTorso.Size = .(,,)
.MiscState.InvisibleFakeTorso.Transparency =
.MiscState.InvisibleFakeTorso.CanCollide =
.MiscState.InvisibleFakeTorso.Anchored =
.MiscState.InvisibleFakeTorso.Parent =
Camera.CameraType = .CameraType.Custom
Camera.CameraSubject = .MiscState.InvisibleFakeTorso
silent
RunService:(, .RenderPriority.Camera.Value - , ()
.MiscState.IsInvisible hrp hrp.Parent .MiscState.InvisibleFakeTorso
camCF = Camera.CFrame
lookDir = .(camCF.LookVector.X, , camCF.LookVector.Z)
lookDir.Magnitude >
hrp.CFrame = .(hrp.Position, hrp.Position + lookDir.Unit)
.MiscState.InvisibleFakeTorso.CFrame = .(hrp.Position + .(, , ))
)
(()
animObj = ReplicatedStorage.Modules.MVP.Meditation.Character
.MiscState.InvisibleTrack = animator:(animObj)
.MiscState.InvisibleTrack.Priority = .AnimationPriority.Action4
.MiscState.InvisibleTrack:()
.()
.MiscState.InvisibleTrack.TimePosition =
.MiscState.InvisibleTrack:()
_, t (animator:())
t ~= .MiscState.InvisibleTrack t:()
Invisibility.Connections[] = animator.AnimationPlayed:((newTrack)
newTrack ~= .MiscState.InvisibleTrack newTrack:()
)
)
Library:({ Title = , Description = , Time = })
.MiscState.IsInvisible =
Invisibility.Connections[]
Invisibility.Connections[]:()
Invisibility.Connections[] =
Invisibility.Connections[]
Invisibility.Connections[]:()
Invisibility.Connections[] =
(() RunService:() )
char char.Parent
_, part (char:())
part:() part.CanCollide =
hrp hrp.Parent hrp.Anchored =
hum hum.Parent hum.AutoRotate = ; Camera.CameraSubject = hum
.MiscState.InvisibleFakeTorso
.MiscState.InvisibleFakeTorso:()
.MiscState.InvisibleFakeTorso =
.MiscState.InvisibleTrack
(() .MiscState.InvisibleTrack:() )
(() .MiscState.InvisibleTrack:() )
.MiscState.InvisibleTrack =
Library:({ Title = , Description = , Time = })
(speed)
speed <=
speed <=
speed <=
speed <=
()
_, p (Logic.Pathfinding.VisualParts) (() p:() )
Logic.Pathfinding.VisualParts = {}
Logic.Pathfinding.VisualFolder Logic.Pathfinding.VisualFolder.Parent
Logic.Pathfinding.VisualFolder:()
Logic.Pathfinding.VisualFolder =
(waypoints)
()
Logic.Pathfinding.VisualizeOn
folder = .()
folder.Name =
folder.Parent =
Logic.Pathfinding.VisualFolder = folder
i, wp (waypoints)
isJump = (wp.Action == .PathWaypointAction.Jump)
node = .()
node.Shape = .PartType.Ball
node.Size = isJump .(, , ) .(, , )
node.Position = wp.Position
node.Anchored =
node.CanCollide =
node.Material = .Material.Neon
node.Transparency =
node.Color = isJump .(, , ) .(, , )
node.Parent = folder
.(Logic.Pathfinding.VisualParts, node)
i >
prevPos = waypoints[i - ].Position
currPos = wp.Position
mid = (prevPos + currPos) /
dist = (currPos - prevPos).Magnitude
line = .()
line.Anchored =
line.CanCollide =
line.Material = .Material.Neon
line.Color = .(, , )
line.Transparency =
line.Size = .(, , dist)
line.CFrame = .(mid, currPos)
line.Parent = folder
.(Logic.Pathfinding.VisualParts, line)
(waypoints, minSegmentLength)
batched = {}
lastAdded = waypoints[]
.(batched, waypoints[])
i = , #waypoints
wp = waypoints[i]
isJump = (wp.Action == .PathWaypointAction.Jump)
isLast = (i == #waypoints)
distFromLast = (wp.Position - lastAdded.Position).Magnitude
isJump isLast distFromLast >= minSegmentLength
.(batched, wp)
lastAdded = wp
batched
(hrp, targetPos, speed)
distance = (hrp.Position - targetPos).Magnitude
distance <
duration = .(distance / speed, )
direction = (targetPos - hrp.Position)
flatDir = .(direction.X, , direction.Z)
targetCF = flatDir.Magnitude > .(targetPos, targetPos + flatDir.Unit) .(targetPos) * hrp.CFrame.Rotation
tween = TweenService:(hrp, TweenInfo.(duration, .EasingStyle.Linear), { = targetCF })
Logic.Pathfinding.CurrentTween = tween
tween:()
done =
conn
conn = tween.Completed:(()
done =
conn conn:()
)
done Logic.Pathfinding.Active RunService.Heartbeat:()
done Logic.Pathfinding.CurrentTween == tween tween:()
done Logic.Pathfinding.Active
(hrp, targetPos, speed)
startPos = hrp.Position
direction = (targetPos - startPos)
distance = direction.Magnitude
distance <
dirUnit = direction.Unit
flatDir = .(dirUnit.X, , dirUnit.Z)
lookCF = flatDir.Magnitude > .(.zero, flatDir) .()
traveled =
traveled < distance Logic.Pathfinding.Active
dt = RunService.Heartbeat:()
step = speed * dt
traveled = .(traveled + step, distance)
hrp.CFrame = .(startPos + dirUnit * traveled) * lookCF.Rotation
traveled >= distance Logic.Pathfinding.Active
()
Logic.Pathfinding.Active =
.MiscState .MiscState.IsInvisible Invisibility.(, )
Logic.Pathfinding.CurrentTween (() Logic.Pathfinding.CurrentTween:() )
hrp = Player.Character Player.Character:()
hrp hrp.Anchored =
hum = Player.Character Player.Character:()
hum hum.PlatformStand =
()
(targetPos)
Logic.Pathfinding.Active (); .()
Logic.Pathfinding.Active =
.(()
Logic.Pathfinding.Active
speed = Logic.Pathfinding.Speed
agentParams = { AgentRadius = , AgentHeight = , AgentCanJump = , AgentCanClimb = , WaypointSpacing = (speed) }
path = PathfindingService:(agentParams)
hrp = Player.Character Player.Character:()
humanoid = Player.Character Player.Character:()
hrp humanoid .()
(hrp.Position - targetPos).Magnitude <
Library:({ Title = , Description = , Time = })
()
ok, _ = (() path:(hrp.Position, targetPos) )
ok path.Status == .PathStatus.NoPath
Library:({ Title = , Description = , Time = })
.()
batchedWP = (path:(), .(speed * , ))
(path:())
pathBlocked =
blockedConn = path.Blocked:(() pathBlocked = )
hrp.Anchored =
humanoid.PlatformStand =
completed =
i = , #batchedWP
Logic.Pathfinding.Active pathBlocked completed =
success
Logic.Pathfinding.Speed >
success = (hrp, batchedWP[i].Position, Logic.Pathfinding.Speed)
success = (hrp, batchedWP[i].Position, Logic.Pathfinding.Speed)
success completed =
blockedConn blockedConn:()
completed Logic.Pathfinding.Active
Library:({ Title = , Description = , Time = })
()
.()
)
UI.TeleportGroup = UI.Tabs.Teleports:(, )
UI.TeleportGroup:(, {
Values = LocationNames,
Default = ,
Multi = ,
Text = ,
Searchable = ,
})
UI.TeleportGroup:(, {
Values = {, },
Default = ,
Multi = ,
Text = ,
})
UI.TeleportGroup:(, {
Text = ,
Default = , Min = , Max = , Rounding = ,
Callback = (val) Logic.Pathfinding.Speed = val
})
UI.TeleportGroup:(, {
Text = ,
Default = ,
Callback = (val) Logic.Pathfinding.VisualizeOn = val
})
UI.TeleportGroup:()
UI.TeleportGroup:({
Text = ,
Func = ()
destName = Options.TeleportDestination.Value
destPos = TeleportLocations[destName]
destPos
Options.TeleportMode.Value == Invisibility.(, )
Library:({ Title = , Description = .. destName .. , Time = })
(destPos)
})
UI.TeleportGroup:({
Text = ,
Func = ()
()
Library:({ Title = , Description = , Time = })
})
.(()
circle = .()
circle.Visible =
circle.Thickness =
circle.NumSides =
circle.Filled =
circle.Transparency =
circle.Color = .(, , )
circle.Radius =
Logic.LockState.FOVCircle = circle
)
.(()
nameText = .()
nameText.Visible =
nameText.Size =
nameText.Center =
nameText.Outline =
nameText.OutlineColor = .(, , )
nameText.Font =
nameText.Color = .(, , )
Logic.LockState.TargetInfoName = nameText
hpText = .()
hpText.Visible =
hpText.Size =
hpText.Center =
hpText.Outline =
hpText.OutlineColor = .(, , )
hpText.Font =
Logic.LockState.TargetInfoHP = hpText
distText = .()
distText.Visible =
distText.Size =
distText.Center =
distText.Outline =
distText.OutlineColor = .(, , )
distText.Font =
Logic.LockState.TargetInfoDist = distText
sepLine = .()
sepLine.Visible =
sepLine.Thickness =
sepLine.Color = .(, , )
sepLine.Transparency =
Logic.LockState.TargetInfoLine = sepLine
)
.(()
Logic.LockState.ESPGui (() Logic.LockState.ESPGui:() )
lockEspGui = .()
lockEspGui.Name =
lockEspGui.Size = .(, , , )
lockEspGui.AlwaysOnTop =
lockEspGui.LightInfluence =
lockEspGui.Enabled =
lockEspGui.Adornee =
mainImg = .()
mainImg.Name =
mainImg.BackgroundTransparency =
mainImg.Image =
mainImg.Size = .(, , , )
mainImg.Position = .(, , , )
mainImg.AnchorPoint = .(, )
mainImg.Parent = lockEspGui
markerImg = .()
markerImg.Name =
markerImg.BackgroundTransparency =
markerImg.Image =
markerImg.Size = .(, , , )
markerImg.Position = .(, , -, )
markerImg.AnchorPoint = .(, )
markerImg.Parent = lockEspGui
(()
coreGui = :()
coreGui lockEspGui.Parent = coreGui lockEspGui.Parent = Player:()
)
lockEspGui.Parent lockEspGui.Parent = Player:()
Logic.LockState.ESPGui = lockEspGui
)
()
vals = {}
charsFolder = :()
_, p (Players:())
p ~= Player
.(vals, p.Name)
charsFolder
_, model (charsFolder:())
model:() Players:(model)
hum = model:()
hum hum.Health >
npcName = .. model.Name
.(vals, npcName)
.(vals, npcName)
(()
Options.LockSpecificPlayer:(vals)
.(vals, Logic.LockSettings.SelectedPlayer)
Logic.LockSettings.SelectedPlayer =
Options.LockSpecificPlayer:()
)
Logic.Connections.PlayerAdded = Players.PlayerAdded:(()
.()
()
)
Logic.Connections.PlayerRemoving = Players.PlayerRemoving:((plr)
.()
()
Logic.LockState.CurrentLockTarget
targetPlayer = Players:(Logic.LockState.CurrentLockTarget)
targetPlayer == plr
Logic.LockState.CurrentLockTarget =
Logic.LockState.LastTargetName =
Logic.LockSettings.LockNotification
Library:({ Title = , Description = plr.Name .. , Time = })
)
.(()
.()
()
)
()
() - Logic.LockState.LastTargetSearch <
Logic.LockState.LastTargetSearch = ()
char = Player.Character
char
root = char:()
root
Logic.LockSettings.SelectedPlayer ~=
selectedName = Logic.LockSettings.SelectedPlayer
isNPC = .(selectedName, , ) ==
isNPC
npcName = .(selectedName, )
charsFolder = :()
charsFolder
_, model (charsFolder:())
model.Name == npcName model:()
tHum = model:()
tRoot = model:() model:()
tHum tHum.Health > tRoot
dist = (root.Position - tRoot.Position).Magnitude
dist <= Logic.LockSettings.MaxDistance
Logic.LockSettings.WallCheck
rayParams = RaycastParams.()
rayParams.FilterDescendantsInstances = {char, model}
rayParams.FilterType = .RaycastFilterType.Exclude
ray = :(root.Position, (tRoot.Position - root.Position).Unit * dist, rayParams)
ray
model
targetPlayer = Players:(selectedName)
targetPlayer targetPlayer.Character
tChar = targetPlayer.Character
tHum = tChar:()
tRoot = tChar:() tChar:()
tHum tHum.Health > tRoot tChar ~= char
dist = (root.Position - tRoot.Position).Magnitude
dist <= Logic.LockSettings.MaxDistance
Logic.LockSettings.WallCheck
rayParams = RaycastParams.()
rayParams.FilterDescendantsInstances = {char, tChar}
rayParams.FilterType = .RaycastFilterType.Exclude
ray = :(root.Position, (tRoot.Position - root.Position).Unit * dist, rayParams)
ray
tChar
best, shortest = , .huge
charsFolder = :()
entities = charsFolder charsFolder:() {}
#entities ==
_, p (Players:())
p.Character .(entities, p.Character)
Camera = .CurrentCamera
_, tChar (entities)
tChar:() tChar ~= char
tHum = tChar:()
tRoot = tChar:() tChar:()
tHum tHum.Health > tRoot
worldDist = (root.Position - tRoot.Position).Magnitude
worldDist > Logic.LockSettings.MaxDistance
Logic.LockSettings.WallCheck
rayParams = RaycastParams.()
rayParams.FilterDescendantsInstances = {char, tChar}
rayParams.FilterType = .RaycastFilterType.Exclude
ray = :(root.Position, (tRoot.Position - root.Position).Unit * worldDist, rayParams)
ray
Logic.LockSettings.TargetMode ==
worldDist < shortest shortest = worldDist; best = tChar
pos, onScreen = Camera:(tRoot.Position)
onScreen
d = (.(Mouse.X, Mouse.Y) - .(pos.X, pos.Y)).Magnitude
Logic.LockSettings.ShowFOV Logic.LockSettings.FOVRadius >
d > Logic.LockSettings.FOVRadius
d < shortest shortest = d; best = tChar
best
Logic.Connections.LockZoom = UserInputService.InputChanged:((input)
input.UserInputType == .UserInputType.MouseWheel Logic.LockState.CameraLocked
Logic.LockState.ZoomDistance = .(Logic.LockState.ZoomDistance - (input.Position.Z * ), , )
)
()
Logic.LockState.TargetInfoName Logic.LockState.TargetInfoName.Visible =
Logic.LockState.TargetInfoHP Logic.LockState.TargetInfoHP.Visible =
Logic.LockState.TargetInfoDist Logic.LockState.TargetInfoDist.Visible =
Logic.LockState.TargetInfoLine Logic.LockState.TargetInfoLine.Visible =
()
Logic.LockState.FOVCircle Logic.LockState.FOVCircle.Visible =
RunService:(, .RenderPriority.Camera.Value + , (dt)
Camera = .CurrentCamera
char = Player.Character
hum = char char:()
root = char char:()
isAlive = (hum hum.Health > root)
Logic.LockState.FOVCircle
Logic.LockSettings.ShowFOV Logic.LockState.Enabled
Logic.LockState.FOVCircle.Position = .(Mouse.X, Mouse.Y)
Logic.LockState.FOVCircle.Radius = Logic.LockSettings.FOVRadius
Logic.LockState.FOVCircle.Color = Options.FOVColor Options.FOVColor.Value .(, , )
Logic.LockState.FOVCircle.Filled = Logic.LockSettings.FOVFilled
Logic.LockState.FOVCircle.Transparency = - Logic.LockSettings.FOVTransparency
Logic.LockState.FOVCircle.NumSides = Logic.LockSettings.FOVSides
Logic.LockState.FOVCircle.Visible =
Logic.LockState.FOVCircle.Visible =
Logic.LockState.Enabled isAlive
Logic.LockState.ESPGui
Logic.LockState.ESPGui.Adornee =
Logic.LockState.ESPGui.Enabled =
Logic.LockState.CameraLocked
Camera.CameraType = .CameraType.Custom
hum Camera.CameraSubject = hum
Logic.LockState.CameraLocked =
Logic.LockState.WasLockedBody
hum hum.AutoRotate =
Logic.LockState.LockBodyGyro Logic.LockState.LockBodyGyro:(); Logic.LockState.LockBodyGyro =
Logic.LockState.WasLockedBody =
Logic.LockState.Enabled
Logic.LockState.CurrentLockTarget =
()
Logic.LockState.CurrentLockTarget
eHum = Logic.LockState.CurrentLockTarget:()
targetAlive = Logic.LockState.CurrentLockTarget.Parent eHum eHum.Health >
targetAlive
deadName = Logic.LockState.LastTargetName
Logic.LockState.CurrentLockTarget =
Logic.LockState.LastTargetName =
Logic.LockSettings.AutoRetarget
Logic.LockState.LastTargetSearch =
Logic.LockSettings.LockNotification deadName
Library:({ Title = , Description = deadName .. , Time = })
Logic.LockSettings.Sticky
Logic.LockSettings.LockNotification deadName
Library:({ Title = , Description = deadName .. , Time = })
tRoot = Logic.LockState.CurrentLockTarget:() Logic.LockState.CurrentLockTarget:()
tRoot
dist = (root.Position - tRoot.Position).Magnitude
dist > Logic.LockSettings.MaxDistance
Logic.LockSettings.Sticky
Logic.LockState.CurrentLockTarget =
Logic.LockSettings.LockNotification
Library:({ Title = , Description = , Time = })
Logic.LockSettings.Sticky Logic.LockState.CurrentLockTarget ==
Logic.LockState.CurrentLockTarget = ()
Logic.LockState.CurrentLockTarget
Logic.LockState.CurrentLockTarget = ()
Logic.LockState.CurrentLockTarget
newName = Logic.LockState.CurrentLockTarget.Name
plrFromChar = Players:(Logic.LockState.CurrentLockTarget)
plrFromChar newName = plrFromChar.DisplayName .. .. plrFromChar.Name ..
newName ~= Logic.LockState.LastTargetName
Logic.LockState.LastTargetName = newName
Logic.LockSettings.LockNotification
Library:({ Title = , Description = .. newName, Time = })
Logic.LockState.CurrentLockTarget root hum
Logic.LockState.ESPGui
Logic.LockState.ESPGui.Adornee =
Logic.LockState.ESPGui.Enabled =
()
targetPart = Logic.LockState.CurrentLockTarget:(Logic.LockSettings.TargetPart)
Logic.LockState.CurrentLockTarget:()
targetPart
Logic.LockState.ESPGui
Logic.LockState.ESPGui.Adornee =
Logic.LockState.ESPGui.Enabled =
()
targetPos = targetPart.Position
Logic.LockSettings.Prediction >
tRoot = Logic.LockState.CurrentLockTarget:()
tRoot tRoot:()
targetPos = targetPos + (tRoot.AssemblyLinearVelocity * Logic.LockSettings.Prediction)
Logic.LockSettings.ESPEnabled Logic.LockState.ESPGui
Logic.LockState.ESPGui.Enabled =
Logic.LockState.ESPGui.Adornee = targetPart
espMain = Logic.LockState.ESPGui:()
espMain
espMain.Rotation = (() * ) %
espMarker = Logic.LockState.ESPGui:()
espMarker
espMarker.Position = .(, , -, )
Logic.LockState.ESPGui
Logic.LockState.ESPGui.Adornee =
Logic.LockState.ESPGui.Enabled =
Logic.LockSettings.ShowTargetInfo Logic.LockState.TargetInfoName
viewport = Camera.ViewportSize
infoColor = Options.TargetInfoColor Options.TargetInfoColor.Value .(, , )
eHum = Logic.LockState.CurrentLockTarget:()
tDist = (root.Position - targetPart.Position).Magnitude
baseX, baseY
Logic.LockSettings.TargetInfoPos ==
baseX = viewport.X /
baseY =
Logic.LockSettings.TargetInfoPos ==
baseX = viewport.X /
baseY = viewport.Y -
Logic.LockSettings.TargetInfoPos ==
baseX = viewport.X -
baseY =
baseX = viewport.X /
baseY =
displayName = Logic.LockState.CurrentLockTarget.Name
plrFromChar = Players:(Logic.LockState.CurrentLockTarget)
plrFromChar displayName = plrFromChar.DisplayName
Logic.LockState.TargetInfoName.Text = .. displayName
Logic.LockState.TargetInfoName.Position = .(baseX, baseY)
Logic.LockState.TargetInfoName.Color = infoColor
Logic.LockState.TargetInfoName.Visible =
Logic.LockState.TargetInfoLine.From = .(baseX - , baseY + )
Logic.LockState.TargetInfoLine.To = .(baseX + , baseY + )
Logic.LockState.TargetInfoLine.Color = infoColor
Logic.LockState.TargetInfoLine.Visible =
eHum
hpFrac = .(eHum.Health / eHum.MaxHealth, , )
hpCol = .( * ( - hpFrac), * hpFrac, )
Logic.LockState.TargetInfoHP.Text = .(, .(eHum.Health), .(eHum.MaxHealth), hpFrac * )
Logic.LockState.TargetInfoHP.Position = .(baseX, baseY + )
Logic.LockState.TargetInfoHP.Color = hpCol
Logic.LockState.TargetInfoHP.Visible =
Logic.LockState.TargetInfoHP.Visible =
Logic.LockState.TargetInfoDist.Text = .(, .(tDist))
Logic.LockState.TargetInfoDist.Position = .(baseX, baseY + )
Logic.LockState.TargetInfoDist.Color = infoColor
Logic.LockState.TargetInfoDist.Visible =
()
Logic.LockSettings.Method ==
Logic.LockState.WasLockedBody
hum.AutoRotate =
Logic.LockState.LockBodyGyro Logic.LockState.LockBodyGyro:(); Logic.LockState.LockBodyGyro =
Logic.LockState.WasLockedBody =
Logic.LockState.CameraLocked
Logic.LockState.OrigCamType = Camera.CameraType
dist = (Camera.CFrame.Position - root.Position).Magnitude
dist <=
Logic.LockState.ZoomDistance = .(dist, , )
Logic.LockState.ZoomDistance =
Logic.LockState.CameraLocked =
Camera.CameraType = .CameraType.Scriptable
offsetDir = root.Position - targetPos
flatDir = .(offsetDir.X, , offsetDir.Z)
flatDir.Magnitude <
flatDir = -root.CFrame.LookVector
flatDir = .(flatDir.X, , flatDir.Z)
flatDir = flatDir.Unit
baseHeight = .(, , )
camPos = root.Position + (flatDir * Logic.LockState.ZoomDistance) + baseHeight
lookCF = .(camPos, targetPos)
camPos = camPos + (lookCF.RightVector * Logic.LockSettings.SideOffset)
rayParams = RaycastParams.()
rayParams.FilterDescendantsInstances = {char, Logic.LockState.CurrentLockTarget}
rayParams.FilterType = .RaycastFilterType.Exclude
rayStart = root.Position + .(, , )
rayResult = :(rayStart, camPos - rayStart, rayParams)
rayResult
camPos = rayResult.Position + (lookCF.LookVector * )
desiredCF = .(camPos, targetPos)
Logic.LockSettings.Smoothness <=
Camera.CFrame = desiredCF
rate = / Logic.LockSettings.Smoothness
alpha = .( - .(-rate * dt), , )
Camera.CFrame = Camera.CFrame:(desiredCF, alpha)
Logic.LockState.CameraLocked
Camera.CameraType = .CameraType.Custom
Camera.CameraSubject = hum
Logic.LockState.CameraLocked =
hum.AutoRotate =
Logic.LockState.WasLockedBody =
Logic.LockState.LockBodyGyro Logic.LockState.LockBodyGyro.Parent ~= root
Logic.LockState.LockBodyGyro Logic.LockState.LockBodyGyro:()
Logic.LockState.LockBodyGyro = .()
Logic.LockState.LockBodyGyro.MaxTorque = .(, , )
Logic.LockState.LockBodyGyro.P =
Logic.LockState.LockBodyGyro.D =
Logic.LockState.LockBodyGyro.Parent = root
Logic.LockState.LockBodyGyro.CFrame = .(
root.Position,
.(targetPos.X, root.Position.Y, targetPos.Z)
)
)
(maxDist)
char = Player.Character
root = char char:()
root
closest =
minDistance = .huge
charactersFolder = :()
targetsToSearch = charactersFolder charactersFolder:() :()
_, model (targetsToSearch)
model ~= char model:()
enemyRoot = model:()
enemyHum = model:()
enemyRoot enemyHum enemyHum.Health >
dist = (enemyRoot.Position - root.Position).Magnitude
dist < minDistance dist <= maxDist
minDistance = dist
closest = model
closest
Logic.DashAnimLeft.AnimationId =
Logic.DashAnimRight.AnimationId =
isDashingArc =
(t, p0, p1, p2)
( - t)^ * p0 + * ( - t) * t * p1 + t^ * p2
(direction)
isDashingArc
isDashingArc =
character = Player.Character
character isDashingArc =
root = character:()
humanoid = character:()
root humanoid isDashingArc =
targetChar = (Logic.DashAssistState.DetectionRange)
target = targetChar targetChar:()
target isDashingArc =
Logic.DashAssistState.OnlyIfFacing
toPlayer = (root.Position - target.Position).Unit
dot = target.CFrame.LookVector:(toPlayer)
dot < - isDashingArc =
root.Anchored =
humanoid.AutoRotate =
root.AssemblyLinearVelocity = .zero
_, mover (root:())
mover:() mover:() mover:() mover:() mover:()
mover:()
animator = humanoid:()
dashTrack =
animator
_, track (animator:())
track.Animation (track.Animation.AnimationId:() track.Animation.AnimationId:())
track:()
animToUse = (direction == ) Logic.DashAnimLeft Logic.DashAnimRight
dashTrack = animator:(animToUse)
dashTrack.Priority = .AnimationPriority.Action4
dashTrack:(, , / Logic.DashAssistState.FlightDuration)
p0 = root.Position
sideMult = (direction == ) -
progress = .()
progress.Value =
dashName = .. (())
tween = TweenService:(
progress,
TweenInfo.(Logic.DashAssistState.FlightDuration, .EasingStyle.Quad, .EasingDirection.InOut),
{ Value = }
)
Camera = .CurrentCamera
prevCamType = Camera.CameraType
RunService:(dashName, , ()
target target.Parent root
RunService:(dashName)
root root.Anchored =
humanoid humanoid.AutoRotate =
dashTrack dashTrack:()
Logic.DashAssistState.CameraLock Camera.CameraType = prevCamType
isDashingArc =
root.Anchored =
humanoid.AutoRotate =
root.AssemblyLinearVelocity = .zero
val = progress.Value
tPos = target.Position
tLook = target.CFrame.LookVector
local flatLook = Vector3.new(tLook.X, 0, tLook.Z)
if flatLook.Magnitude > 0.001 then flatLook = flatLook.Unit else flatLook = Vector3.new(0, 0, -1) end
local tRight = target.CFrame.RightVector
local flatRight = Vector3.new(tRight.X, 0, tRight.Z)
if flatRight.Magnitude > 0.001 then flatRight = flatRight.Unit else flatRight = Vector3.new(1, 0, 0) end
local p2 = tPos + (flatLook * -Logic.DashAssistState.BehindDistance)
local midPoint = (p0 + p2) / 2
local p1 = midPoint + (flatRight * (Logic.DashAssistState.CurveStrength * sideMult)) + Vector3.new(0, Logic.DashAssistState.ArchHeight, 0)
local currentPos = getBezierPoint(val, p0, p1, p2)
local lookPos = Vector3.new(tPos.X, currentPos.Y, tPos.Z)
if (lookPos - currentPos).Magnitude > 0.1 then
root.CFrame = CFrame.lookAt(currentPos, lookPos)
else
root.CFrame = CFrame.new(currentPos)
end
if Logic.DashAssistState.CameraLock then
Camera.CameraType = Enum.CameraType.Scriptable
local dirToEnemy = (tPos - root.Position).Unit
local targetCamCF = CFrame.lookAt(root.Position - (dirToEnemy * 11) + Vector3.new(0, 4.5, 0), tPos)
Camera.CFrame = Camera.CFrame:Lerp(targetCamCF, 0.35)
end
end)
tween:Play()
tween.Completed:Connect(function()
RunService:UnbindFromRenderStep(dashName)
progress:Destroy()
if dashTrack then dashTrack:Stop(0.1) end
if Logic.DashAssistState.CameraLock then
Camera.CameraType = prevCamType
end
local lockStart = tick()
local lockName = "RazorbillDashLock_" .. tostring(lockStart)
RunService:BindToRenderStep(lockName, 20000, function()
if tick() - lockStart > Logic.DashAssistState.LockDuration or not target or not target.Parent or not root then
RunService:UnbindFromRenderStep(lockName)
if root then
root.Anchored = false
root.AssemblyLinearVelocity = Vector3.zero
end
if humanoid then humanoid.AutoRotate = true end
isDashingArc = false
return
end
root.Anchored = true
if humanoid then humanoid.AutoRotate = false end
root.AssemblyLinearVelocity = Vector3.zero
local lockedPos = root.Position
local facePos = Vector3.new(target.Position.X, lockedPos.Y, target.Position.Z)
if (facePos - lockedPos).Magnitude > 0.1 then
root.CFrame = CFrame.lookAt(lockedPos, facePos)
end
end)
end)
end
Logic.Connections.DashInput = UserInputService.InputBegan:Connect(function(input, gp)
if gp then return end
if not Logic.DashAssistState.Enabled then return end
local assignedKey = Options.DashAssistKeybind.Value
local targetKeyCode
if typeof(assignedKey) == "EnumItem" then
targetKeyCode = assignedKey
elseif typeof(assignedKey) == "string" then
local ok, kc = pcall(function() return Enum.KeyCode[assignedKey] end)
if ok then targetKeyCode = kc else return end
else
return
end
if input.KeyCode == targetKeyCode then
local direction = "Right"
local char = Player.Character
local hum = char and char:FindFirstChildOfClass("Humanoid")
if hum and hum.MoveDirection.Magnitude > 0 then
local camRight = workspace.CurrentCamera.CFrame.RightVector * Vector3.new(1, 0, 1)
if camRight.Magnitude > 0 then
camRight = camRight.Unit
if hum.MoveDirection:Dot(camRight) < -0.2 then direction = "Left" end
end
end
task.spawn(function() executeDashArc(direction) end)
end
end)
task.spawn(function()
Logic.TargetRemote = ReplicatedStorage:WaitForChild("Knit")
:WaitForChild("Knit")
:WaitForChild("Services")
:WaitForChild("DivergentFistService")
:WaitForChild("RE")
:WaitForChild("Activated")
end)
local oldNamecall
oldNamecall = hookmetamethod(game, "__namecall", function(self, ...)
local method = getnamecallmethod()
if not checkcaller() and method == "FireServer" and self == Logic.TargetRemote and Toggles.BlackFlashEnabled.Value then
Logic.LastFiredTick = tick()
end
return oldNamecall(self, ...)
end)
local function autoFireDivergentFist()
local character = Player.Character
if character and character:FindFirstChild("Moveset") then
local divergentFistMove = character.Moveset:FindFirstChild("Divergent Fist")
if divergentFistMove and Logic.TargetRemote then
Logic.TargetRemote:FireServer(divergentFistMove, nil)
end
end
end
local function performDashLogic(target)
local MAX_DASH_DISTANCE = Options.DashDistance.Value
local FIRE_DELAY = Options.FireDelay.Value
local DASH_DURATION = Options.DashDuration.Value
local POST_DASH_LOCK_TIME = Options.LockTime.Value
local easingStyleEnum = Enum.EasingStyle[Options.DashEasingStyle.Value] or Enum.EasingStyle.Cubic
local easingDirectionEnum = Enum.EasingDirection[Options.DashEasingDirection.Value] or Enum.EasingDirection.Out
local char = Player.Character
local root = char and char:FindFirstChild("HumanoidRootPart")
local humanoid = char and char:FindFirstChild("Humanoid")
local enemyRoot = target:FindFirstChild("HumanoidRootPart")
if not root or not enemyRoot then
task.delay(FIRE_DELAY, autoFireDivergentFist)
return
end
local initialEnemyCFrame = enemyRoot.CFrame
local initialEnemyPos = initialEnemyCFrame.Position
local startPos = root.Position
local objectSpacePos = initialEnemyCFrame:PointToObjectSpace(startPos)
local isBehind = objectSpacePos.Z > 0
local distanceToEnemy = (startPos - initialEnemyPos).Magnitude
local isDash = true
local dashType = "Arch"
local endPos = startPos
local controlPos = startPos
if isBehind and distanceToEnemy <= 10 then
isDash = false
elseif isBehind and distanceToEnemy > 10 then
dashType = "Straight"
endPos = (initialEnemyCFrame * CFrame.new(0, 0, 5)).Position
else
dashType = "Arch"
endPos = (initialEnemyCFrame * CFrame.new(0, 0, 4)).Position
local distance = (endPos - startPos).Magnitude
local archWidth = math.clamp(distance / 1.5, 5, 25)
local direction = endPos - startPos
local perp = Vector3.new(-direction.Z, 0, direction.X)
if perp.Magnitude > 0.001 then
perp = perp.Unit
else
perp = Vector3.new(1, 0, 0)
end
local midPos = (startPos + endPos) / 2
local cp1 = midPos + (perp * archWidth)
local cp2 = midPos - (perp * archWidth)
local enemyRightVector = initialEnemyCFrame.RightVector
local playerIsOnRightSide = (startPos - initialEnemyPos):Dot(enemyRightVector) > 0
local cp1IsOnRightSide = (cp1 - initialEnemyPos):Dot(enemyRightVector) > 0
controlPos = (playerIsOnRightSide == cp1IsOnRightSide) and cp1 or cp2
end
if humanoid then humanoid.AutoRotate = false end
local startTime = tick()
local hasFired = false
local dashConn
local function finalizeMovement(finalCFrame)
if dashConn then dashConn:Disconnect() end
if humanoid then humanoid.AutoRotate = true end
if finalCFrame and root and root.Parent then root.CFrame = finalCFrame end
if not hasFired then
hasFired = true
autoFireDivergentFist()
end
end
dashConn = RunService.Heartbeat:Connect(function()
if not root or not root.Parent then return finalizeMovement(nil) end
local elapsed = tick() - startTime
if elapsed >= FIRE_DELAY and not hasFired then
hasFired = true
autoFireDivergentFist()
end
local currentPos = startPos
if isDash then
local alpha = math.clamp(elapsed / DASH_DURATION, 0, 1)
local easedAlpha = TweenService:GetValue(alpha, easingStyleEnum, easingDirectionEnum)
if dashType == "Straight" then
currentPos = startPos:Lerp(endPos, easedAlpha)
elseif dashType == "Arch" then
currentPos = (1 - easedAlpha)^2 * startPos + 2 * (1 - easedAlpha) * easedAlpha * controlPos + easedAlpha^2 * endPos
end
end
root.CFrame = CFrame.lookAt(currentPos, initialEnemyPos)
if Toggles.CameraLockEnabled.Value then
local cam = workspace.CurrentCamera
if cam then
cam.CFrame = CFrame.lookAt(cam.CFrame.Position, initialEnemyPos)
end
end
local totalWaitTime = isDash and (DASH_DURATION + POST_DASH_LOCK_TIME) or (FIRE_DELAY + POST_DASH_LOCK_TIME)
if elapsed >= totalWaitTime then
finalizeMovement(CFrame.lookAt(currentPos, initialEnemyPos))
end
end)
end
local function onAnimationPlayed(animTrack)
local animId = animTrack.Animation and animTrack.Animation.AnimationId or ""
if Logic.DashAssistState.Enabled and not isDashingArc then
if animId:match("75203303352791") then
task.spawn(function() executeDashArc("Left") end)
elseif animId:match("117223862448096") then
task.spawn(function() executeDashArc("Right") end)
end
end
if Toggles.BlackFlashEnabled.Value then
local idMatch = string.match(animId, "%d+")
if idMatch and Logic.TargetAnimations[idMatch] then
if (tick() - Logic.LastFiredTick) <= Logic.TIME_WINDOW then
Logic.LastFiredTick = 0
local closestTarget = getClosestTarget(Options.DashDistance.Value)
if closestTarget then
performDashLogic(closestTarget)
else
task.delay(Options.FireDelay.Value, autoFireDivergentFist)
end
end
end
end
end
local function setupCharacter(character)
local humanoid = character:WaitForChild("Humanoid", 10)
if humanoid then
local animator = humanoid:WaitForChild("Animator", 10)
if animator then
animator.AnimationPlayed:Connect(onAnimationPlayed)
end
end
end
if Player.Character then task.spawn(setupCharacter, Player.Character) end
Player.CharacterAdded:Connect(setupCharacter)
local function w2v(pos)
local cam = workspace.CurrentCamera
if not cam then return nil, false end
local sp, on = cam:WorldToViewportPoint(pos)
return Vector2.new(sp.X, sp.Y), on
end
local function hpColor(f)
f = math.clamp(f, 0, 1)
return Color3.fromRGB(255 * (1 - f), 255 * f, 50)
end
local function getCharBounds(char)
local cam = workspace.CurrentCamera
if not cam then return nil end
local hrp = char:FindFirstChild("HumanoidRootPart") or char:FindFirstChild("Torso") or char:FindFirstChild("UpperTorso")
if not hrp then return nil end
local head = char:FindFirstChild("Head")
local pos = hrp.Position
local topY = head and (head.Position.Y + 0.5) or (pos.Y + 2.8)
local botY = pos.Y - 3.1
local topWorld = Vector3.new(pos.X, topY, pos.Z)
local botWorld = Vector3.new(pos.X, botY, pos.Z)
local topSP, topOn = cam:WorldToViewportPoint(topWorld)
local botSP, botOn = cam:WorldToViewportPoint(botWorld)
if not topOn or not botOn then return nil end
local h = math.abs(botSP.Y - topSP.Y)
local w = h * 0.5
local cx = (topSP.X + botSP.X) / 2
local my = math.min(topSP.Y, botSP.Y)
return { X = cx - w / 2, Y = my, W = w, H = h, CX = cx, CY = (topSP.Y + botSP.Y) / 2 }
end
local function getEntities()
local out = {}
local folder = workspace:FindFirstChild("Characters")
local targetsToSearch = folder and folder:GetChildren() or workspace:GetChildren()
for _, char in ipairs(targetsToSearch) do
if char:IsA("Model") and char:FindFirstChildOfClass("Humanoid") then
local plr = Players:GetPlayerFromCharacter(char)
out[#out + 1] = {
Model = char,
Player = plr,
Name = plr and plr.DisplayName or char.Name,
}
end
end
return out
end
local function mkLine(thick)
local l = Drawing.new("Line")
l.Visible = false
l.Thickness = thick or 1
return l
end
local function mkCircle(thick, filled)
local c = Drawing.new("Circle")
c.Visible = false
c.Thickness = thick or 2
c.Filled = filled or false
c.NumSides = 30
return c
end
local function mkText(size)
local t = Drawing.new("Text")
t.Visible = false
t.Size = size or 14
t.Center = true
t.Outline = true
t.OutlineColor = Color3.new(0, 0, 0)
t.Font = 2
return t
end
local function CreateCooldownBillboard(character, player, rootPart)
if not player or not rootPart then return nil, nil end
local Reveal = Instance.new("BillboardGui")
Reveal.Name = "Reveal"
Reveal.SizeOffset = Vector2.new(1.1, 0)
Reveal.StudsOffset = Vector3.new(0, 1, 0)
Reveal.MaxDistance = 75
Reveal.ClipsDescendants = false
Reveal.AlwaysOnTop = true
Reveal.Size = UDim2.new(2, 0, 4, 0)
Reveal.Adornee = rootPart
Reveal.Parent = rootPart
local Moveset = Instance.new("Frame")
Moveset.Name = "Moveset"
Moveset.Visible = true
Moveset.ClipsDescendants = false
Moveset.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Moveset.BackgroundTransparency = 1
Moveset.BorderSizePixel = 0
Moveset.Size = UDim2.new(0.45, 0, 1, 0)
Moveset.Parent = Reveal
local UIListLayout = Instance.new("UIListLayout")
UIListLayout.Name = "UIListLayout"
UIListLayout.SortOrder = Enum.SortOrder.LayoutOrder
UIListLayout.Padding = UDim.new(0.04, 0)
UIListLayout.Parent = Moveset
local Ult = Instance.new("Frame")
Ult.Name = "Ult"
Ult.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Ult.BackgroundTransparency = 0.5
Ult.Position = UDim2.new(0.55, 0, 0, 0)
Ult.BorderSizePixel = 0
Ult.Size = UDim2.new(0.25, 0, 1, 0)
Ult.Parent = Reveal
local UltStroke = Instance.new("UIStroke")
UltStroke.Thickness = 2
UltStroke.Transparency = 0.5
UltStroke.Color = Color3.fromRGB(0, 0, 0)
UltStroke.Parent = Ult
local UltFill = Instance.new("Frame")
UltFill.Name = "Fill"
UltFill.AnchorPoint = Vector2.new(0, 1)
UltFill.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
UltFill.BackgroundTransparency = 0.25
UltFill.Position = UDim2.new(0, 0, 1, 0)
UltFill.BorderSizePixel = 0
UltFill.Size = UDim2.new(1, 0, 0, 0)
UltFill.Parent = Ult
local UltFillGradient = Instance.new("UIGradient")
UltFillGradient.Color = Logic.CooldownGradient
UltFillGradient.Parent = UltFill
local Evasive = Instance.new("Frame")
Evasive.Name = "Evasive"
Evasive.AnchorPoint = Vector2.new(1, 0)
Evasive.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Evasive.BackgroundTransparency = 0.5
Evasive.Position = UDim2.new(0.95, 0, 0, 0)
Evasive.BorderSizePixel = 0
Evasive.Size = UDim2.new(0.1, 0, 1, 0)
Evasive.Parent = Reveal
local EvasiveStroke = Instance.new("UIStroke")
EvasiveStroke.Thickness = 2
EvasiveStroke.Transparency = 0.5
EvasiveStroke.Color = Color3.fromRGB(0, 0, 0)
EvasiveStroke.Parent = Evasive
local EvasiveFill = Instance.new("Frame")
EvasiveFill.Name = "Fill"
EvasiveFill.AnchorPoint = Vector2.new(0, 1)
EvasiveFill.BackgroundColor3 = Color3.fromRGB(0, 85, 127)
EvasiveFill.BackgroundTransparency = 0
EvasiveFill.Position = UDim2.new(0, 0, 1, 0)
EvasiveFill.BorderSizePixel = 0
EvasiveFill.Size = UDim2.new(1, 0, 0, 0)
EvasiveFill.Parent = Evasive
local EvasiveFillGradient = Instance.new("UIGradient")
EvasiveFillGradient.Color = Logic.CooldownGradient
EvasiveFillGradient.Parent = EvasiveFill
local connections = {}
local moveFrames = {}
local function addMoveCooldown(moveValue)
if moveFrames[moveValue] then return end
local Move = Instance.new("Frame")
Move.Name = moveValue.Name
Move.BackgroundColor3 = Color3.fromRGB(31, 31, 31)
Move.BackgroundTransparency = 0.5
Move.BorderSizePixel = 0
Move.Size = UDim2.new(1, 0, 0.22, 0)
Move.Parent = Moveset
local MoveStroke = Instance.new("UIStroke")
MoveStroke.Thickness = 2
MoveStroke.Transparency = 0.5
MoveStroke.Color = Color3.fromRGB(0, 0, 0)
MoveStroke.Parent = Move
local MoveCooldown = Instance.new("Frame")
MoveCooldown.Name = "Cooldown"
MoveCooldown.AnchorPoint = Vector2.new(0.5, 1)
MoveCooldown.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
MoveCooldown.BackgroundTransparency = 0.25
MoveCooldown.Position = UDim2.new(0.5, 0, 1, 0)
MoveCooldown.BorderSizePixel = 0
MoveCooldown.Size = UDim2.new(1, 0, 0, 0)
MoveCooldown.ZIndex = 1
MoveCooldown.Parent = Move
local MoveGradient = Instance.new("UIGradient")
MoveGradient.Color = Logic.CooldownGradient
MoveGradient.Parent = MoveCooldown
local MoveText = Instance.new("TextLabel")
MoveText.Name = "MoveNameText"
MoveText.Parent = Move
MoveText.Size = UDim2.new(1, -4, 1, -4)
MoveText.Position = UDim2.new(0, 2, 0, 2)
MoveText.BackgroundTransparency = 1
MoveText.Text = moveValue.Name
MoveText.TextColor3 = Color3.fromRGB(255, 255, 255)
MoveText.TextScaled = true
MoveText.Font = Enum.Font.GothamBold
MoveText.ZIndex = 2
local TextStroke = Instance.new("UIStroke")
TextStroke.Parent = MoveText
TextStroke.Thickness = 1.2
TextStroke.Color = Color3.fromRGB(0, 0, 0)
moveFrames[moveValue] = Move
table.insert(connections, moveValue:GetAttributeChangedSignal("ReadyAt"):Connect(function()
local maxCd = moveValue.Value or 0
local readyAt = moveValue:GetAttribute("ReadyAt")
if maxCd <= 0 or not readyAt then
if MoveCooldown then MoveCooldown.Size = UDim2.new(1, 0, 0, 0) end
return
end
task.spawn(function()
while MoveCooldown and MoveCooldown.Parent and Reveal and Reveal.Parent do
local currentTime = workspace:GetServerTimeNow()
local remaining = readyAt - currentTime
if remaining <= 0 then
MoveCooldown.Size = UDim2.new(1, 0, 0, 0)
break
else
MoveCooldown.Size = UDim2.new(1, 0, math.clamp(remaining / maxCd, 0, 1), 0)
end
task.wait()
end
end)
end))
end
local function trackMoveset()
local moveset = character:FindFirstChild("Moveset")
if not moveset then return end
for _, child in ipairs(moveset:GetChildren()) do
if child:IsA("NumberValue") then addMoveCooldown(child) end
end
table.insert(connections, moveset.ChildAdded:Connect(function(child)
if child:IsA("NumberValue") then addMoveCooldown(child) end
end))
end
table.insert(connections, character.ChildAdded:Connect(function(child)
if child.Name == "Moveset" then trackMoveset() end
end))
trackMoveset()
local function updateUltimate()
local ultValue = math.clamp((player:GetAttribute("Ultimate") or 0) / 100, 0, 1)
if UltFill then UltFill.Size = UDim2.new(1, 0, ultValue, 0) end
end
local function updateEvade()
local evadeValue = math.clamp((character:GetAttribute("Evade") or 0) / 50, 0, 1)
if EvasiveFill then EvasiveFill.Size = UDim2.new(1, 0, evadeValue, 0) end
end
updateUltimate()
updateEvade()
table.insert(connections, player:GetAttributeChangedSignal("Ultimate"):Connect(updateUltimate))
table.insert(connections, character:GetAttributeChangedSignal("Evade"):Connect(updateEvade))
local function Cleanup()
if Reveal then Reveal:Destroy() end
for _, conn in ipairs(connections) do
conn:Disconnect()
end
table.clear(connections)
end
return Reveal, Cleanup
end
local function createESP()
local e = {}
e.BoxS = {}; e.BoxL = {}
for i = 1, 4 do
e.BoxS[i] = mkLine(3.5); e.BoxS[i].Color = Logic.ShadowColor
e.BoxL[i] = mkLine(1.5)
end
e.CorS = {}; e.CorL = {}
for i = 1, 8 do
e.CorS[i] = mkLine(3.5); e.CorS[i].Color = Logic.ShadowColor
e.CorL[i] = mkLine(1.5)
end
e.Skel = {}
for i = 1, 14 do e.Skel[i] = mkLine(1.5) end
e.HDotS = mkCircle(4, false); e.HDotS.Color = Logic.ShadowColor
e.HDot = mkCircle(2, false)
e.TrcS = mkLine(3); e.TrcS.Color = Logic.ShadowColor
e.Trc = mkLine(1.5)
e.HPTxt = mkText(13); e.HPTxt.Center = false
e.BarO = mkLine(7); e.BarO.Color = Logic.ShadowColor
e.BarBG = mkLine(5); e.BarBG.Color = Color3.fromRGB(40, 40, 40)
e.BarF = mkLine(3)
e.NameTxt = mkText(14)
e.CharTxt = mkText(12)
e.DistTxt = mkText(12)
e.KillTxt = mkText(12)
e.HL = nil
e.RevealGui = nil
e.CooldownCleanup = nil
return e
end
local function hideAll(e)
if not e then return end
for i = 1, 4 do e.BoxS[i].Visible = false; e.BoxL[i].Visible = false end
for i = 1, 8 do e.CorS[i].Visible = false; e.CorL[i].Visible = false end
for i = 1, 14 do e.Skel[i].Visible = false end
e.HDotS.Visible = false; e.HDot.Visible = false
e.TrcS.Visible = false; e.Trc.Visible = false
e.HPTxt.Visible = false
e.BarO.Visible = false; e.BarBG.Visible = false; e.BarF.Visible = false
e.NameTxt.Visible = false; e.CharTxt.Visible = false
e.DistTxt.Visible = false; e.KillTxt.Visible = false
if e.RevealGui then e.RevealGui.Enabled = false end
end
local function safeRM(obj)
if not obj then return end
pcall(function()
if typeof(obj) == "Instance" then obj:Destroy()
elseif type(obj) == "userdata" and obj.Remove then obj:Remove() end
end)
end
local function removeAll(e)
if not e then return end
for i = 1, 4 do safeRM(e.BoxS[i]); safeRM(e.BoxL[i]) end
for i = 1, 8 do safeRM(e.CorS[i]); safeRM(e.CorL[i]) end
for i = 1, 14 do safeRM(e.Skel[i]) end
safeRM(e.HDotS); safeRM(e.HDot)
safeRM(e.TrcS); safeRM(e.Trc)
safeRM(e.HPTxt)
safeRM(e.BarO); safeRM(e.BarBG); safeRM(e.BarF)
safeRM(e.NameTxt); safeRM(e.CharTxt)
safeRM(e.DistTxt); safeRM(e.KillTxt)
safeRM(e.HL)
if e.CooldownCleanup then e.CooldownCleanup() end
end
local function setLinePair(shadow, line, from, to, vis)
shadow.From = from; shadow.To = to; shadow.Visible = vis
line.From = from; line.To = to; line.Visible = vis
end
Logic.Connections.ESP = RunService.Heartbeat:Connect(function()
local cam = workspace.CurrentCamera
if not cam then return end
local entities = getEntities()
local alive = {}
for _, data in ipairs(entities) do
local char = data.Model
local plr = data.Player
local dName = data.Name
alive[char] = true
if plr == Player then
if Logic.ESPObjects[char] then
hideAll(Logic.ESPObjects[char])
if Logic.ESPObjects[char].HL then Logic.ESPObjects[char].HL.Enabled = false end
end
continue
end
local hrp = char:FindFirstChild("HumanoidRootPart") or char:FindFirstChild("Torso") or char:FindFirstChild("UpperTorso")
local hum = char:FindFirstChildOfClass("Humanoid")
local head = char:FindFirstChild("Head")
if not Logic.ESPObjects[char] then
Logic.ESPObjects[char] = createESP()
end
local e = Logic.ESPObjects[char]
if not (hrp and hum and hum.Health > 0) then
hideAll(e)
if e.HL then e.HL.Enabled = false end
continue
end
local dist = (cam.CFrame.Position - hrp.Position).Magnitude
local box = getCharBounds(char)
if Toggles.ESPBox.Value and box then
for i = 1, 4 do e.BoxL[i].Color = Options.ESPBoxColor.Value end
local tl = Vector2.new(box.X, box.Y); local tr = Vector2.new(box.X + box.W, box.Y)
local bl = Vector2.new(box.X, box.Y + box.H); local br = Vector2.new(box.X + box.W, box.Y + box.H)
setLinePair(e.BoxS[1], e.BoxL[1], tl, tr, true); setLinePair(e.BoxS[2], e.BoxL[2], tr, br, true)
setLinePair(e.BoxS[3], e.BoxL[3], br, bl, true); setLinePair(e.BoxS[4], e.BoxL[4], bl, tl, true)
else
for i = 1, 4 do e.BoxS[i].Visible = false; e.BoxL[i].Visible = false end
end
if Toggles.ESPCorner.Value and box then
for i = 1, 8 do e.CorL[i].Color = Options.ESPCornerColor.Value end
local x, y, w, h = box.X, box.Y, box.W, box.H
local len = math.clamp(math.min(w, h) * 0.25, 5, 9999)
local tl = Vector2.new(x, y); local tr = Vector2.new(x + w, y)
local bl = Vector2.new(x, y + h); local br = Vector2.new(x + w, y + h)
local segs = {
{tl, tl + Vector2.new(len, 0)}, {tl, tl + Vector2.new(0, len)},
{tr, tr + Vector2.new(-len, 0)}, {tr, tr + Vector2.new(0, len)},
{bl, bl + Vector2.new(len, 0)}, {bl, bl + Vector2.new(0, -len)},
{br, br + Vector2.new(-len, 0)}, {br, br + Vector2.new(0, -len)},
}
for i = 1, 8 do setLinePair(e.CorS[i], e.CorL[i], segs[i][1], segs[i][2], true) end
else
for i = 1, 8 do e.CorS[i].Visible = false; e.CorL[i].Visible = false end
end
if Toggles.ESPSkeleton.Value then
local bones = char:FindFirstChild("UpperTorso") and Logic.R15Bones or Logic.R6Bones
local idx = 0
for _, b in ipairs(bones) do
idx += 1
local p1 = char:FindFirstChild(b[1])
local p2 = char:FindFirstChild(b[2])
if p1 and p2 then
local s1, o1 = w2v(p1.Position)
local s2, o2 = w2v(p2.Position)
if o1 and o2 then
e.Skel[idx].Color = Options.ESPSkeletonColor.Value
e.Skel[idx].From = s1
e.Skel[idx].To = s2
e.Skel[idx].Visible = true
else e.Skel[idx].Visible = false end
else e.Skel[idx].Visible = false end
end
for i = idx + 1, 14 do e.Skel[i].Visible = false end
else
for i = 1, 14 do e.Skel[i].Visible = false end
end
if Toggles.ESPHeadDot.Value and head then
local hs, ho = w2v(head.Position)
if ho then
local headTop = w2v(head.Position + Vector3.new(0, head.Size.Y * 0.5, 0))
local r = headTop and math.abs(hs.Y - headTop.Y) or 5
r = math.clamp(r, 3, 50)
e.HDot.Color = Options.ESPHeadDotColor.Value
e.HDotS.Position = hs; e.HDotS.Radius = r + 1; e.HDotS.Visible = true
e.HDot.Position = hs; e.HDot.Radius = r; e.HDot.Visible = true
else
e.HDotS.Visible = false; e.HDot.Visible = false
end
else
e.HDotS.Visible = false; e.HDot.Visible = false
end
if Toggles.ESPTracer.Value then
local fp, fo = w2v(hrp.Position - Vector3.new(0, 3, 0))
if fo then
local bot = Vector2.new(cam.ViewportSize.X / 2, cam.ViewportSize.Y)
e.Trc.Color = Options.ESPTracerColor.Value
e.TrcS.From = bot; e.TrcS.To = fp; e.TrcS.Visible = true
e.Trc.From = bot; e.Trc.To = fp; e.Trc.Visible = true
else
e.TrcS.Visible = false; e.Trc.Visible = false
end
else
e.TrcS.Visible = false; e.Trc.Visible = false
end
if Toggles.ESPHPText.Value and box then
local f = math.clamp(hum.Health / hum.MaxHealth, 0, 1)
e.HPTxt.Position = Vector2.new(box.X + box.W + 4, box.Y)
e.HPTxt.Text = math.floor(hum.Health) .. "/" .. math.floor(hum.MaxHealth)
e.HPTxt.Color = hpColor(f)
e.HPTxt.Visible = true
else
e.HPTxt.Visible = false
end
if Toggles.ESPHPBar.Value and box then
local f = math.clamp(hum.Health / hum.MaxHealth, 0, 1)
local bx = box.X - 6
local top = Vector2.new(bx, box.Y)
local bot = Vector2.new(bx, box.Y + box.H)
local ft = Vector2.new(bx, box.Y + box.H * (1 - f))
e.BarO.From = top; e.BarO.To = bot; e.BarO.Visible = true
e.BarBG.From = top; e.BarBG.To = bot; e.BarBG.Visible = true
e.BarF.From = ft; e.BarF.To = bot; e.BarF.Color = hpColor(f); e.BarF.Visible = f > 0
else
e.BarO.Visible = false; e.BarBG.Visible = false; e.BarF.Visible = false
end
if Toggles.ESPOutline.Value then
if not e.HL or e.HL.Parent ~= char then
safeRM(e.HL)
local hl = Instance.new("Highlight")
hl.FillTransparency = 1
hl.OutlineColor = Options.ESPOutlineColor.Value
hl.OutlineTransparency = 0
hl.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
hl.Parent = char
e.HL = hl
end
e.HL.OutlineColor = Options.ESPOutlineColor.Value
e.HL.Enabled = true
else
if e.HL then e.HL.Enabled = false end
end
if Toggles.CooldownRevealer.Value then
if not e.CooldownCleanup then
e.RevealGui, e.CooldownCleanup = CreateCooldownBillboard(char, plr, hrp)
end
if e.RevealGui then e.RevealGui.Enabled = true end
else
if e.CooldownCleanup then
e.CooldownCleanup()
e.CooldownCleanup = nil
e.RevealGui = nil
end
end
if box then
local ay = box.Y - 2
if Toggles.ESPCharacter.Value then
ay = ay - 14
local ms = char:GetAttribute("Moveset") or (plr and plr:GetAttribute("Moveset")) or "Unknown"
e.CharTxt.Color = Options.ESPCharacterColor.Value
e.CharTxt.Position = Vector2.new(box.CX, ay)
e.CharTxt.Text = "[" .. tostring(ms) .. "]"
e.CharTxt.Visible = true
else
e.CharTxt.Visible = false
end
if Toggles.ESPName.Value then
ay = ay - 16
e.NameTxt.Color = Options.ESPNameColor.Value
e.NameTxt.Position = Vector2.new(box.CX, ay)
e.NameTxt.Text = dName
e.NameTxt.Visible = true
else
e.NameTxt.Visible = false
end
local by = box.Y + box.H + 2
if Toggles.ESPDistance.Value then
e.DistTxt.Color = Options.ESPDistanceColor.Value
e.DistTxt.Position = Vector2.new(box.CX, by)
e.DistTxt.Text = math.floor(dist) .. " studs"
e.DistTxt.Visible = true
by = by + 14
else
e.DistTxt.Visible = false
end
if Toggles.ESPKill.Value then
local kills = 0
if plr then
local ls = plr:FindFirstChild("leaderstats")
if ls then
local ks = ls:FindFirstChild("Kills") or ls:FindFirstChild("kills") or ls:FindFirstChild("KOs") or ls:FindFirstChild("KO")
if ks then kills = ks.Value end
end
end
e.KillTxt.Color = Options.ESPKillColor.Value
e.KillTxt.Position = Vector2.new(box.CX, by)
e.KillTxt.Text = "Kills: " .. tostring(kills)
e.KillTxt.Visible = true
else
e.KillTxt.Visible = false
end
else
e.NameTxt.Visible = false
e.CharTxt.Visible = false
e.DistTxt.Visible = false
e.KillTxt.Visible = false
end
end
for char, e in pairs(Logic.ESPObjects) do
if not alive[char] or not char.Parent then
hideAll(e)
if e.HL then e.HL.Enabled = false; safeRM(e.HL) end
removeAll(e)
Logic.ESPObjects[char] = nil
end
end
end)
UI.ServerListGrp = UI.Tabs.Servers:AddLeftGroupbox("Server List", "list")
UI.ServerInfoGrp = UI.Tabs.Servers:AddRightGroupbox("Server Details", "info")
Logic.ServerList = {}
Logic.ServerMap = {}
Logic.SelectedServerData = nil
local function estimateRegion(ping)
if ping <= 0 then return "Unknown"
elseif ping <= 40 then return "US East / Nearby"
elseif ping <= 70 then return "US Central"
elseif ping <= 100 then return "US West / Regional"
elseif ping <= 140 then return "EU West"
elseif ping <= 180 then return "EU East / Middle East"
elseif ping <= 220 then return "South America"
elseif ping <= 270 then return "East Asia"
elseif ping <= 320 then return "Southeast Asia / Oceania"
elseif ping <= 400 then return "Africa / South Asia"
else return "Very Far" end
end
local function pingQualityIcon(ping)
if ping <= 60 then return "[+++]"
elseif ping <= 120 then return "[++ ]"
elseif ping <= 200 then return "[+ ]"
else return "[! ]" end
end
local function buildServerMap(serverList)
Logic.ServerMap = {}
local vals = {}
for i, entry in ipairs(serverList) do
local label = string.format("%s #%d | %d/%d | %dms%s",
pingQualityIcon(entry.Ping),
i,
entry.Playing,
entry.MaxPlayers,
entry.Ping,
entry.IsCurrent and " [YOU]" or ""
)
Logic.ServerMap[label] = entry
vals[#vals + 1] = label
end
return vals
end
local function updateServerInfo(entry)
if not UI.SrvInfoLabel then return end
if not entry then
UI.SrvInfoLabel:SetText("No server selected.\n\nClick 'Refresh Server List' to load servers,\nthen select one from the dropdown.")
return
end
local fillPercent = entry.MaxPlayers > 0 and math.floor((entry.Playing / entry.MaxPlayers) * 100) or 0
local fillBar = string.rep("|", math.floor(fillPercent / 5)) .. string.rep(".", 20 - math.floor(fillPercent / 5))
local info = string.format(
"Job ID:\n%s\n\n" ..
"Players: %d / %d (%d%%)\n[%s]\n\n" ..
"Ping: %d ms %s\n" ..
"Server FPS: %.1f\n\n" ..
"Estimated Region: %s\n" ..
"%s",
entry.JobId,
entry.Playing, entry.MaxPlayers, fillPercent,
fillBar,
entry.Ping, pingQualityIcon(entry.Ping),
entry.FPS,
entry.Region,
entry.IsCurrent and "\n>> This is YOUR current server <<" or ""
)
UI.SrvInfoLabel:SetText(info)
end
local function updateStatsLabel()
if not UI.SrvStatsLabel then return end
if #Logic.ServerList == 0 then
UI.SrvStatsLabel:SetText("No data. Refresh to load servers.")
return
end
local totalPlayers, totalPing, minPing, maxPing = 0, 0, math.huge, 0
local fullServers, emptyServers = 0, 0
for _, srv in ipairs(Logic.ServerList) do
totalPlayers += srv.Playing
totalPing += srv.Ping
if srv.Ping < minPing then minPing = srv.Ping end
if srv.Ping > maxPing then maxPing = srv.Ping end
if srv.Playing >= srv.MaxPlayers then fullServers += 1 end
if srv.Playing == 0 then emptyServers += 1 end
end
local avgPing = math.floor(totalPing / #Logic.ServerList)
UI.SrvStatsLabel:SetText(string.format(
"Total Servers: %d\nTotal Players: %d\n\nAvg Ping: %dms\nBest Ping: %dms\nWorst Ping: %dms\n\nFull Servers: %d\nEmpty Servers: %d",
#Logic.ServerList, totalPlayers, avgPing, minPing, maxPing, fullServers, emptyServers
))
end
local function refreshDropdown()
local vals = buildServerMap(Logic.ServerList)
if #vals > 0 then
Options.ServerDropdown:SetValues(vals)
Options.ServerDropdown:SetValue(vals[1])
else
Options.ServerDropdown:SetValues({ "No servers found" })
end
updateStatsLabel()
end
local function fetchServers()
Logic.ServerList = {}
Logic.ServerMap = {}
local placeId = game.PlaceId
local cursor = ""
local maxPages = 10
local idx = 0
Library:Notify({ Title = "Server Browser", Description = "Fetching servers... This may take a moment.", Time = 4 })
for page = 1, maxPages do
local url = string.format(
"https://games.roblox.com/v1/games/%d/servers/0?sortOrder=2&excludeFullGames=false&limit=100%s",
placeId, cursor ~= "" and ("&cursor=" .. cursor) or ""
)
local ok, res = pcall(game.HttpGet, game, url)
if not ok or not res then break end
local ok2, data = pcall(HttpService.JSONDecode, HttpService, res)
if not ok2 or not data or not data.data then break end
for _, srv in ipairs(data.data) do
idx += 1
local entry = {
JobId = srv.id or "",
Playing = srv.playing or 0,
MaxPlayers = srv.maxPlayers or 0,
Ping = srv.ping or 0,
FPS = srv.fps or 0,
Index = idx,
Region = estimateRegion(srv.ping or 0),
IsCurrent = (srv.id == game.JobId),
}
table.insert(Logic.ServerList, entry)
end
cursor = data.nextPageCursor or ""
if cursor == "" then break end
task.wait(0.4)
end
Library:Notify({ Title = "Server Browser", Description = "Found " .. tostring(#Logic.ServerList) .. " servers!", Time = 4 })
return Logic.ServerList
end
UI.SrvInfoLabel = UI.ServerInfoGrp:AddLabel("SrvInfo", {
Text = "No server selected.\n\nClick 'Refresh Server List' to load servers,\nthen select one from the dropdown.",
DoesWrap = true,
})
UI.ServerInfoGrp:AddDivider()
UI.ServerInfoGrp:AddButton({
Text = "Join Selected Server",
Func = function()
if not Logic.SelectedServerData then
Library:Notify({ Title = "Servers", Description = "No server selected!", Time = 3 })
return
end
if Logic.SelectedServerData.IsCurrent then
Library:Notify({ Title = "Servers", Description = "You're already in this server!", Time = 3 })
return
end
Library:Notify({ Title = "Servers", Description = "Teleporting...", Time = 3 })
TeleportService:TeleportToPlaceInstance(game.PlaceId, Logic.SelectedServerData.JobId, Player)
end,
DoubleClick = true,
Tooltip = "Double-click to teleport to the selected server",
})
UI.ServerInfoGrp:AddButton({
Text = "Join Lowest Ping Server",
Func = function()
if #Logic.ServerList == 0 then
Library:Notify({ Title = "Servers", Description = "Refresh the server list first!", Time = 3 })
return
end
local best = nil
for _, srv in ipairs(Logic.ServerList) do
if not srv.IsCurrent and srv.Playing > 0 and srv.Ping > 0 then
if not best or srv.Ping < best.Ping then best = srv end
end
end
if best then
Library:Notify({ Title = "Servers", Description = "Joining best ping server (" .. best.Ping .. "ms, " .. best.Playing .. " players)...", Time = 3 })
TeleportService:TeleportToPlaceInstance(game.PlaceId, best.JobId, Player)
else
Library:Notify({ Title = "Servers", Description = "No valid server found!", Time = 3 })
end
end,
DoubleClick = true,
Tooltip = "Double-click to join the server with lowest ping",
})
UI.ServerInfoGrp:AddButton({
Text = "Join Smallest Server",
Func = function()
if #Logic.ServerList == 0 then
Library:Notify({ Title = "Servers", Description = "Refresh the server list first!", Time = 3 })
return
end
local smallest = nil
for _, srv in ipairs(Logic.ServerList) do
if not srv.IsCurrent and srv.Playing > 0 then
if not smallest or srv.Playing < smallest.Playing then smallest = srv end
end
end
if smallest then
Library:Notify({ Title = "Servers", Description = "Joining smallest server (" .. smallest.Playing .. " players, " .. smallest.Ping .. "ms)...", Time = 3 })
TeleportService:TeleportToPlaceInstance(game.PlaceId, smallest.JobId, Player)
else
Library:Notify({ Title = "Servers", Description = "No valid server found!", Time = 3 })
end
end,
DoubleClick = true,
Tooltip = "Double-click to join the server with fewest players",
})
UI.ServerInfoGrp:AddButton({
Text = "Join Random Server",
Func = function()
if #Logic.ServerList == 0 then
Library:Notify({ Title = "Servers", Description = "Refresh the server list first!", Time = 3 })
return
end
local candidates = {}
for _, srv in ipairs(Logic.ServerList) do
if not srv.IsCurrent then table.insert(candidates, srv) end
end
if #candidates > 0 then
local pick = candidates[math.random(1, #candidates)]
Library:Notify({ Title = "Servers", Description = "Joining random server (" .. pick.Playing .. " players, " .. pick.Ping .. "ms)...", Time = 3 })
TeleportService:TeleportToPlaceInstance(game.PlaceId, pick.JobId, Player)
else
Library:Notify({ Title = "Servers", Description = "No other servers available!", Time = 3 })
end
end,
DoubleClick = true,
Tooltip = "Double-click to join a random server",
})
UI.ServerInfoGrp:AddButton({
Text = "Rejoin Current Server",
Func = function()
Library:Notify({ Title = "Servers", Description = "Rejoining...", Time = 3 })
TeleportService:TeleportToPlaceInstance(game.PlaceId, game.JobId, Player)
end,
DoubleClick = true,
Tooltip = "Double-click to rejoin your current server",
})
UI.ServerInfoGrp:AddDivider()
UI.SrvStatsLabel = UI.ServerInfoGrp:AddLabel("SrvStats", {
Text = "No data. Refresh to load servers.",
DoesWrap = true,
})
UI.ServerListGrp:AddButton({
Text = "Refresh Server List",
Func = function()
task.spawn(function()
fetchServers()
refreshDropdown()
end)
end,
DoubleClick = false,
Tooltip = "Fetches all available servers (up to ~1000)",
})
UI.ServerListGrp:AddDivider()
UI.ServerListGrp:AddDropdown("ServerDropdown", {
Values = { "Click 'Refresh' to load servers" },
Default = 1,
Multi = false,
Text = "Select Server",
Searchable = true,
MaxVisibleDropdownItems = 10,
Tooltip = "[+++] = Great ping | [! ] = Poor ping",
Callback = function(Value)
Logic.SelectedServerData = Logic.ServerMap[Value]
updateServerInfo(Logic.SelectedServerData)
end,
})
UI.ServerListGrp:AddDivider()
UI.ServerListGrp:AddDropdown("ServerSortBy", {
Values = { "Default (Roblox)", "Most Players", "Least Players", "Lowest Ping", "Highest Ping", "Highest FPS" },
Default = 1,
Multi = false,
Text = "Sort By",
Tooltip = "Re-sorts the server list",
Callback = function(Value)
if #Logic.ServerList == 0 then return end
local sorted = {}
for i, v in ipairs(Logic.ServerList) do sorted[i] = v end
if Value == "Most Players" then
table.sort(sorted, function(a, b) return a.Playing > b.Playing end)
elseif Value == "Least Players" then
table.sort(sorted, function(a, b) return a.Playing < b.Playing end)
elseif Value == "Lowest Ping" then
table.sort(sorted, function(a, b) return a.Ping < b.Ping end)
elseif Value == "Highest Ping" then
table.sort(sorted, function(a, b) return a.Ping > b.Ping end)
elseif Value == "Highest FPS" then
table.sort(sorted, function(a, b) return a.FPS > b.FPS end)
end
local vals = buildServerMap(sorted)
Options.ServerDropdown:SetValues(vals)
if #vals > 0 then Options.ServerDropdown:SetValue(vals[1]) end
end,
})
UI.ServerListGrp:AddSlider("MinPlayersFilter", {
Text = "Min Players Filter",
Default = 0,
Min = 0,
Max = 50,
Rounding = 0,
Tooltip = "Only show servers with at least this many players",
})
UI.ServerListGrp:AddSlider("MaxPingFilter", {
Text = "Max Ping Filter",
Default = 999,
Min = 10,
Max = 999,
Rounding = 0,
Tooltip = "Only show servers with ping below this value (999 = no filter)",
})
UI.ServerListGrp:AddButton({
Text = "Apply Filters",
Func = function()
if #Logic.ServerList == 0 then
Library:Notify({ Title = "Servers", Description = "Refresh the server list first!", Time = 3 })
return
end
local minP = Options.MinPlayersFilter.Value
local maxPing = Options.MaxPingFilter.Value
local filtered = {}
for _, entry in ipairs(Logic.ServerList) do
if entry.Playing >= minP and (maxPing >= 999 or entry.Ping <= maxPing) then
table.insert(filtered, entry)
end
end
local vals = buildServerMap(filtered)
Options.ServerDropdown:SetValues(#vals > 0 and vals or { "No servers match filters" })
if #vals > 0 then Options.ServerDropdown:SetValue(vals[1]) end
Library:Notify({ Title = "Servers", Description = "Showing " .. #vals .. " servers after filtering.", Time = 3 })
end,
Tooltip = "Apply min players and max ping filters",
})
task.spawn(function()
task.wait(2)
fetchServers()
refreshDropdown()
end)
UI.UIBox = UI.Tabs.UISettings:AddLeftGroupbox("UI Configuration", "palette")
UI.UIBox:AddButton("Unload UI", function() Library:Unload() end)
UI.UIBox:AddLabel("Menu Bind"):AddKeyPicker("MenuBind", {
Default = "RightShift",
NoUI = true,
Text = "Menu Toggle Key"
})
Library.ToggleKeybind = Options.MenuBind
ThemeManager:SetLibrary(Library)
SaveManager:SetLibrary(Library)
SaveManager:IgnoreThemeSettings()
SaveManager:SetIgnoreIndexes({ "MenuBind" })
ThemeManager:SetFolder("razorbill")
SaveManager:SetFolder("mspaint/razorbillhub")
SaveManager:BuildConfigSection(UI.Tabs.UISettings)
ThemeManager:ApplyToTab(UI.Tabs.UISettings)
if Options.AccentColor then
Options.AccentColor:SetValueRGB(Color3.fromRGB(185, 186, 189))
end
SaveManager:LoadAutoloadConfig()
Library:OnUnload(function()
if Logic.Connections.ESP then Logic.Connections.ESP:Disconnect() end
if Logic.Connections.LockZoom then Logic.Connections.LockZoom:Disconnect() end
if Logic.Connections.PlayerAdded then Logic.Connections.PlayerAdded:Disconnect() end
if Logic.Connections.PlayerRemoving then Logic.Connections.PlayerRemoving:Disconnect() end
if Logic.Connections.DashInput then Logic.Connections.DashInput:Disconnect() end
pcall(function() RunService:UnbindFromRenderStep("RazorbillTargetLock") end)
if Logic.LockState.ESPGui then
pcall(function() Logic.LockState.ESPGui:Destroy() end)
end
if Logic.LockState.LockBodyGyro then
pcall(function() Logic.LockState.LockBodyGyro:Destroy() end)
end
if Logic.LockState.FOVCircle then pcall(function() Logic.LockState.FOVCircle:Remove() end) end
if Logic.LockState.TargetInfoName then pcall(function() Logic.LockState.TargetInfoName:Remove() end) end
if Logic.LockState.TargetInfoHP then pcall(function() Logic.LockState.TargetInfoHP:Remove() end) end
if Logic.LockState.TargetInfoDist then pcall(function() Logic.LockState.TargetInfoDist:Remove() end) end
if Logic.LockState.TargetInfoLine then pcall(function() Logic.LockState.TargetInfoLine:Remove() end) end
stopPathfinding()
if workspace.CurrentCamera then
workspace.CurrentCamera.CameraType = Enum.CameraType.Custom
local char = Player.Character
local hum = char and char:FindFirstChildOfClass("Humanoid")
if hum then
workspace.CurrentCamera.CameraSubject = hum
hum.AutoRotate = true
end
end
for _, e in pairs(Logic.ESPObjects) do
hideAll(e)
removeAll(e)
end
Logic.ESPObjects = {}
end)Loads code from the internet. It downloads more code when it runs (loadstring + HttpGet), which can change after it was posted. From: raw.githubusercontent.com, games.roblox.com.
Stay safe
Never paste your .ROBLOSECURITY cookie anywhere, and use an alt account with scripts.

Universal