Run it
Copy the script and paste it into your executor.
()
success, result = (()
.()
)
success result
(obj)
obj obj.Remove
(() obj:() )
.new
waited =
waited <
.()
waited = waited +
()
ExecutorName =
(()
identifyexecutor
ExecutorName = ()
getexecutorname
ExecutorName = ()
)
Players = :()
RunService = :()
UserInputService = :()
ReplicatedStorage = :()
Workspace = :()
LocalPlayer = Players.LocalPlayer
Config = {
ESP_Enabled = ,
ESP_Killer = ,
ESP_Survivor = ,
ESP_Generator = ,
ESP_Gate = ,
ESP_Hook = ,
ESP_Pallet = ,
ESP_Window = ,
ESP_Distance = ,
ESP_Names = ,
ESP_Health = ,
ESP_Skeleton = ,
ESP_Offscreen = ,
ESP_Velocity = ,
ESP_ClosestHook = ,
ESP_MaxDist = ,
ESP_PlayerChams = ,
ESP_ObjectChams = ,
RADAR_Enabled = ,
RADAR_Size = ,
RADAR_Circle = ,
RADAR_Killer = ,
RADAR_Survivor = ,
RADAR_Generator = ,
RADAR_Pallet = ,
AUTO_Generator = ,
AUTO_GenMode = ,
AUTO_LeaveGen = ,
AUTO_LeaveDist = ,
AUTO_Attack = ,
AUTO_AttackRange = ,
HITBOX_Enabled = ,
HITBOX_Size = ,
AUTO_TeleAway = ,
AUTO_TeleAwayDist = ,
AUTO_Parry = ,
AUTO_SkillCheck = ,
SURV_NoFall = ,
SURV_AutoWiggle = ,
KILLER_DestroyPallets = ,
KILLER_FullGenBreak = ,
KILLER_NoPalletStun = ,
KILLER_AutoHook = ,
KILLER_AntiBlind = ,
KILLER_NoSlowdown = ,
KILLER_DoubleTap = ,
KILLER_InfiniteLunge = ,
SPEED_Enabled = ,
SPEED_Value = ,
SPEED_Method = ,
KEY_Speed = .KeyCode.C,
NOCLIP_Enabled = ,
KEY_Noclip = .KeyCode.V,
FLY_Enabled = ,
FLY_Speed = ,
FLY_Method = ,
KEY_Fly = .KeyCode.F,
JUMP_Power = ,
JUMP_Infinite = ,
NO_Fog = ,
CAM_FOVEnabled = ,
CAM_FOV = ,
CAM_ThirdPerson = ,
CAM_ShiftLock = ,
FLING_Enabled = ,
FLING_Strength = ,
BEAT_Survivor = ,
BEAT_Killer = ,
TP_Offset = ,
MENU_Open = ,
MENU_Tab = ,
KEY_Menu = .KeyCode.Insert,
KEY_Panic = .KeyCode.Home,
KEY_LeaveGen = .KeyCode.Q,
KEY_StopGen = .KeyCode.X,
KEY_TP_Gen = .KeyCode.G,
KEY_TP_Gate = .KeyCode.T,
KEY_TP_Hook = .KeyCode.H,
AIM_Enabled = ,
AIM_UseRMB = ,
AIM_FOV = ,
AIM_Smooth = ,
AIM_TargetPart = ,
AIM_VisCheck = ,
AIM_ShowFOV = ,
AIM_Predict = ,
SPEAR_Aimbot = ,
SPEAR_Gravity = ,
SPEAR_Speed =
}
Tuning = {
ESP_RefreshRate = ,
ESP_VisCheckRate = ,
Gen_RefreshRate = ,
CacheRefreshRate = ,
Box_WidthRatio = ,
Name_Offset = ,
Dist_Offset = ,
Health_Width = ,
Health_Offset = ,
Offscreen_Edge = ,
Offscreen_Size = ,
Skel_Thickness = ,
Box_Thickness = ,
RadarRange = ,
RadarDotSize = ,
RadarArrowSize =
}
Colors = {
Killer = .(, , ),
KillerVis = .(, , ),
Survivor = .(, , ),
SurvivorVis = .(, , ),
Generator = .(, , ),
GeneratorDone = .(, , ),
Gate = .(, , ),
Hook = .(, , ),
HookClose = .(, , ),
Pallet = .(, , ),
Window = .(, , ),
Skeleton = .(, , ),
SkeletonVis = .(, , ),
Offscreen = .(, , ),
HealthHigh = .(, , ),
HealthMid = .(, , ),
HealthLow = .(, , ),
HealthBg = .(, , ),
UI_Bg = .(, , ),
UI_Card = .(, , ),
UI_CardHover = .(, , ),
UI_Border = .(, , ),
UI_Accent = .(, , ),
UI_AccentDim = .(, , ),
UI_Text = .(, , ),
UI_TextDim = .(, , ),
UI_On = .(, , ),
UI_Off = .(, , ),
UI_Sidebar = .(, , ),
UI_TabActive = .(, , ),
UI_TabInactive = .(, , ),
RadarBg = .(, , ),
RadarBorder = .(, , ),
RadarYou = .(, , )
}
ChamsColors = {
Killer = {fill = .(, , ), outline = .(, , ), fillTrans = },
Survivor = {fill = .(, , ), outline = .(, , ), fillTrans = },
Generator = {fill = .(, , ), outline = .(, , ), fillTrans = },
Gate = {fill = .(, , ), outline = .(, , ), fillTrans = },
Hook = {fill = .(, , ), outline = .(, , ), fillTrans = },
HookClose = {fill = .(, , ), outline = .(, , ), fillTrans = },
Pallet = {fill = .(, , ), outline = .(, , ), fillTrans = },
Window = {fill = .(, , ), outline = .(, , ), fillTrans = }
}
Bones_R15 = {
{, }, {, },
{, }, {, }, {, },
{, }, {, }, {, },
{, }, {, }, {, },
{, }, {, }, {, }
}
Bones_R6 = {
{, }, {, }, {, }, {, }, {, }
}
State = {
Unloaded = ,
LastESPUpdate = ,
LastVisCheck = ,
LastGenUpdate = ,
LastCacheUpdate = ,
LastTeleAway = ,
AimTarget = ,
AimHolding = ,
OriginalSpeed = ,
LastFogState = ,
KillerTarget = ,
LastBeatTP = ,
LastFinishPos = ,
BeatSurvivorDone =
}
Cache = {
Players = {},
Generators = {},
Gates = {},
Hooks = {},
Pallets = {},
Windows = {},
Visibility = {},
ClosestHook =
}
Connections = {}
Unload
()
LocalPlayer.Team
name = LocalPlayer.Team.Name
name ==
name ==
(player)
player player.Team player.Team.Name ==
(player)
player player.Team player.Team.Name ==
()
char = LocalPlayer.Character
char char:()
(char)
char:() ~=
(pos)
root = ()
root .huge
(pos - root.Position).Magnitude
(char)
char
cam = .CurrentCamera
cam
origin = cam.CFrame.Position
parts = {, , , }
params = RaycastParams.()
params.FilterType = .RaycastFilterType.Blacklist
params.FilterDescendantsInstances = {cam, LocalPlayer.Character, char}
_, partName (parts)
part = char:(partName)
part
dir = part.Position - origin
ray = :(origin, dir, params)
ray
(pos)
cam = .CurrentCamera
cam .(), ,
screen, onScreen = cam:(pos)
.(screen.X, screen.Y), onScreen, screen.Z
(a, b, t)
a + (b - a) * t
(c1, c2, t)
.(
c1.R + (c2.R - c1.R) * t,
c1.G + (c2.G - c1.G) * t,
c1.B + (c2.B - c1.B) * t
)
Chams = {
Objects = {},
Labels = {}
}
Chams.(target, colorData, label)
target target:()
existing = target:()
existing existing:()
highlight = .()
highlight.Name =
highlight.Adornee = target
highlight.FillColor = colorData.fill
highlight.OutlineColor = colorData.outline
highlight.FillTransparency = colorData.fillTrans
highlight.OutlineTransparency =
highlight.DepthMode = .HighlightDepthMode.AlwaysOnTop
highlight.Parent = target
data = {highlight = highlight, target = target}
label
rootPart = target:() (target:() target:()) target
rootPart
billboard = .()
billboard.Name =
billboard.Size = .(, , , )
billboard.AlwaysOnTop =
billboard.StudsOffset = .(, , )
billboard.Adornee = rootPart
billboard.Parent = target
textLabel = .()
textLabel.Size = .(, , , )
textLabel.BackgroundTransparency =
textLabel.TextColor3 = colorData.outline
textLabel.TextStrokeColor3 = .(, , )
textLabel.TextStrokeTransparency =
textLabel.Font = .Font.Gotham
textLabel.TextSize =
textLabel.TextScaled =
textLabel.Text = label
textLabel.Parent = billboard
data.billboard = billboard
data.textLabel = textLabel
data.rootPart = rootPart
Chams.Objects[target] = data
data
Chams.(target, newLabel, newDist)
data = Chams.Objects[target]
data
data.textLabel newLabel
text = newLabel
newDist Config.ESP_Distance
text = text .. .. .(newDist) ..
data.textLabel.Text = text
Chams.(target, colorData)
data = Chams.Objects[target]
data data.highlight
data.highlight.FillColor = colorData.fill
data.highlight.OutlineColor = colorData.outline
data.highlight.FillTransparency = colorData.fillTrans
data.textLabel
data.textLabel.TextColor3 = colorData.outline
Chams.(target)
data = Chams.Objects[target]
data
data.highlight data.highlight.Parent
data.highlight:()
data.billboard data.billboard.Parent
data.billboard:()
Chams.Objects[target] =
target
existing = target:()
existing existing:()
existingLabel = target:()
existingLabel existingLabel:()
Chams.()
target, _ (Chams.Objects)
Chams.(target)
Chams.Objects = {}
ESP = {
cache = {},
objectCache = {},
velocityData = {}
}
ESP.()
skel = {}
i = ,
skel[i] = .()
skel[i].Thickness =
skel[i].Visible =
box = {}
i = ,
box[i] = .()
box[i].Thickness =
box[i].Visible =
{
Box = box,
Name = .(),
Dist = .(),
Skel = skel,
HealthBg = .(),
HealthBar = .(),
Offscreen = .(),
VelLine = .(),
VelArrow = .()
}
ESP.(esp)
_, l (esp.Box)
l.Thickness =
l.Visible =
esp.Name.Size =
esp.Name.Font = .Fonts.Monospace
esp.Name.Center =
esp.Name.Outline =
esp.Name.Visible =
esp.Dist.Size =
esp.Dist.Font = .Fonts.Monospace
esp.Dist.Center =
esp.Dist.Outline =
esp.Dist.Color = .(, , )
esp.Dist.Visible =
_, l (esp.Skel)
l.Thickness =
l.Visible =
esp.HealthBg.Filled =
esp.HealthBg.Color = Colors.HealthBg
esp.HealthBg.Visible =
esp.HealthBar.Filled =
esp.HealthBar.Visible =
esp.Offscreen.Filled =
esp.Offscreen.Visible =
esp.VelLine.Thickness =
esp.VelLine.Color = .(, , )
esp.VelLine.Visible =
esp.VelArrow.Filled =
esp.VelArrow.Color = .(, , )
esp.VelArrow.Visible =
ESP.(esp)
esp
_, l (esp.Box) l.Visible =
esp.Name.Visible =
esp.Dist.Visible =
_, l (esp.Skel) l.Visible =
esp.HealthBg.Visible =
esp.HealthBar.Visible =
esp.Offscreen.Visible =
esp.VelLine.Visible =
esp.VelArrow.Visible =
ESP.(esp)
esp
(()
_, l (esp.Box) l:()
esp.Name:()
esp.Dist:()
_, l (esp.Skel) l:()
esp.HealthBg:()
esp.HealthBar:()
esp.Offscreen:()
esp.VelLine:()
esp.VelArrow:()
)
ESP.()
_, esp (ESP.cache)
ESP.(esp)
ESP.()
validPlayers = {}
_, p (Players:())
validPlayers[p] =
player, esp (ESP.cache)
validPlayers[player]
ESP.(esp)
ESP.(esp)
ESP.cache[player] =
ESP.velocityData[player] =
ESP.()
box = {}
i = ,
box[i] = .()
box[i].Thickness =
box[i].Visible =
{
Box = box,
Label = .(),
Dist = .()
}
ESP.(esp)
_, l (esp.Box)
l.Thickness =
l.Visible =
esp.Label.Size =
esp.Label.Font = .Fonts.Monospace
esp.Label.Center =
esp.Label.Outline =
esp.Label.Visible =
esp.Dist.Size =
esp.Dist.Font = .Fonts.Monospace
esp.Dist.Center =
esp.Dist.Outline =
esp.Dist.Color = .(, , )
esp.Dist.Visible =
ESP.(esp)
esp
_, l (esp.Box) l.Visible =
esp.Label.Visible =
esp.Dist.Visible =
ESP.(esp)
esp
(()
_, l (esp.Box) l:()
esp.Label:()
esp.Dist:()
)
ESP.(esp, player, char, cam, screenSize, screenCenter)
root = char:()
head = char:()
hum = char:()
root head
ESP.(esp)
myRoot = ()
dist = myRoot (root.Position - myRoot.Position).Magnitude
dist > Config.ESP_MaxDist
ESP.(esp)
isKillerPlayer = (player)
visible = Cache.Visibility[player]
col = isKillerPlayer (visible Colors.KillerVis Colors.Killer) (visible Colors.SurvivorVis Colors.Survivor)
skelCol = visible Colors.SkeletonVis Colors.Skeleton
headPos = head.Position + .(, , )
feetPos = root.Position - .(, , )
rs = cam:(root.Position)
hs = cam:(headPos)
fs = cam:(feetPos)
onScreen = rs.Z > rs.X > rs.X < screenSize.X rs.Y > rs.Y < screenSize.Y
onScreen
_, l (esp.Box) l.Visible =
esp.Name.Visible =
esp.Dist.Visible =
_, l (esp.Skel) l.Visible =
esp.HealthBg.Visible =
esp.HealthBar.Visible =
esp.VelLine.Visible =
esp.VelArrow.Visible =
Config.ESP_Offscreen visible
dx = rs.X - screenCenter.X
dy = rs.Y - screenCenter.Y
angle = .(dy, dx)
edge =
arrowX = .(screenCenter.X + .(angle) * (screenSize.X/ - edge), edge, screenSize.X - edge)
arrowY = .(screenCenter.Y + .(angle) * (screenSize.Y/ - edge), edge, screenSize.Y - edge)
fwd = .(.(angle), .(angle))
right = .(-fwd.Y, fwd.X)
pos = .(arrowX, arrowY)
arrowSize =
esp.Offscreen.PointA = pos + fwd * arrowSize
esp.Offscreen.PointB = pos - fwd * arrowSize/ - right * arrowSize/
esp.Offscreen.PointC = pos - fwd * arrowSize/ + right * arrowSize/
esp.Offscreen.Color = col
esp.Offscreen.Visible =
esp.Offscreen.Visible =
esp.Offscreen.Visible =
boxTop = hs.Y
boxBottom = fs.Y
boxHeight = .(boxBottom - boxTop)
boxWidth = boxHeight *
cx = rs.X
esp.Box[].From = .(cx - boxWidth/, boxTop)
esp.Box[].To = .(cx + boxWidth/, boxTop)
esp.Box[].From = .(cx + boxWidth/, boxTop)
esp.Box[].To = .(cx + boxWidth/, boxBottom)
esp.Box[].From = .(cx + boxWidth/, boxBottom)
esp.Box[].To = .(cx - boxWidth/, boxBottom)
esp.Box[].From = .(cx - boxWidth/, boxBottom)
esp.Box[].To = .(cx - boxWidth/, boxTop)
_, l (esp.Box)
l.Color = col
l.Visible =
Config.ESP_Names
esp.Name.Text = player.Name
esp.Name.Position = .(cx, boxTop - )
esp.Name.Color = col
esp.Name.Visible =
esp.Name.Visible =
Config.ESP_Distance
esp.Dist.Text = .(dist) ..
esp.Dist.Position = .(cx, boxBottom + )
esp.Dist.Visible =
esp.Dist.Visible =
Config.ESP_Health hum
pct = .(hum.Health / hum.MaxHealth, , )
barX = cx - boxWidth/ -
barH = boxHeight * pct
esp.HealthBg.Position = .(barX - , boxTop - )
esp.HealthBg.Size = .(, boxHeight + )
esp.HealthBg.Visible =
esp.HealthBar.Position = .(barX, boxBottom - barH)
esp.HealthBar.Size = .(, barH)
esp.HealthBar.Color = pct > Colors.HealthHigh pct > Colors.HealthMid Colors.HealthLow
esp.HealthBar.Visible =
esp.HealthBg.Visible =
esp.HealthBar.Visible =
Config.ESP_Skeleton
bones = (char) Bones_R6 Bones_R15
i, b (bones)
esp.Skel[i]
p1 = char:(b[])
p2 = char:(b[])
p1 p2
s1 = cam:(p1.Position)
s2 = cam:(p2.Position)
s1.Z > s2.Z >
esp.Skel[i].From = .(s1.X, s1.Y)
esp.Skel[i].To = .(s2.X, s2.Y)
esp.Skel[i].Color = skelCol
esp.Skel[i].Visible =
esp.Skel[i].Visible =
esp.Skel[i].Visible =
i = #bones + , #esp.Skel
esp.Skel[i] esp.Skel[i].Visible =
_, l (esp.Skel) l.Visible =
vd = ESP.velocityData[player]
vd
vd = {pos = root.Position, vel = .zero, time = ()}
ESP.velocityData[player] = vd
now = ()
dt = now - vd.time
dt >
rawVel = (root.Position - vd.pos) / dt
vd.vel = vd.vel * + rawVel *
vd.pos = root.Position
vd.time = now
Config.ESP_Velocity
velFlat = .(vd.vel.X, , vd.vel.Z)
velMag = velFlat.Magnitude
velMag >
futurePos = root.Position + velFlat.Unit * .(velMag * , , )
futureScreen, futureOn = cam:(futurePos)
futureOn futureScreen.Z >
esp.VelLine.From = .(rs.X, rs.Y)
esp.VelLine.To = .(futureScreen.X, futureScreen.Y)
esp.VelLine.Visible =
dx, dy = futureScreen.X - rs.X, futureScreen.Y - rs.Y
len = .(dx*dx + dy*dy)
len >
fx, fy = dx/len, dy/len
esp.VelArrow.PointA = .(futureScreen.X, futureScreen.Y)
esp.VelArrow.PointB = .(futureScreen.X - fx* + fy*, futureScreen.Y - fy* - fx*)
esp.VelArrow.PointC = .(futureScreen.X - fx* - fy*, futureScreen.Y - fy* + fx*)
esp.VelArrow.Visible =
esp.VelArrow.Visible =
esp.VelLine.Visible =
esp.VelArrow.Visible =
esp.VelLine.Visible =
esp.VelArrow.Visible =
esp.VelLine.Visible =
esp.VelArrow.Visible =
ESP.(esp, pos, label, color, cam)
myRoot = ()
dist = myRoot (pos - myRoot.Position).Magnitude
dist > Config.ESP_MaxDist
ESP.(esp)
screen = cam:(pos)
screen.Z <=
ESP.(esp)
size = .( / screen.Z, , )
esp.Box[].From = .(screen.X - size/, screen.Y - size/)
esp.Box[].To = .(screen.X + size/, screen.Y - size/)
esp.Box[].From = .(screen.X + size/, screen.Y - size/)
esp.Box[].To = .(screen.X + size/, screen.Y + size/)
esp.Box[].From = .(screen.X + size/, screen.Y + size/)
esp.Box[].To = .(screen.X - size/, screen.Y + size/)
esp.Box[].From = .(screen.X - size/, screen.Y + size/)
esp.Box[].To = .(screen.X - size/, screen.Y - size/)
_, l (esp.Box)
l.Color = color
l.Visible =
esp.Label.Text = label
esp.Label.Position = .(screen.X, screen.Y - size/ - )
esp.Label.Color = color
esp.Label.Visible =
Config.ESP_Distance
esp.Dist.Text = .(dist) ..
esp.Dist.Position = .(screen.X, screen.Y + size/ + )
esp.Dist.Visible =
esp.Dist.Visible =
ESP.(cam, screenSize, screenCenter)
Config.ESP_Enabled
ESP.()
ESP.()
_, player (Players:())
player ~= LocalPlayer
char = player.Character
char char:()
ESP.cache[player] ESP.(ESP.cache[player])
isKillerPlayer = (player)
shouldShow = (isKillerPlayer Config.ESP_Killer) ( isKillerPlayer Config.ESP_Survivor)
shouldShow
ESP.cache[player] ESP.(ESP.cache[player])
Chams.(char)
Config.ESP_PlayerChams
ESP.cache[player]
ESP.cache[player] = ESP.()
ESP.(ESP.cache[player])
ESP.(ESP.cache[player], player, char, cam, screenSize, screenCenter)
Chams.(char)
ESP.cache[player] ESP.(ESP.cache[player])
colorData = isKillerPlayer ChamsColors.Killer ChamsColors.Survivor
root = char:()
dist = root (root.Position)
Chams.Objects[char]
Chams.(char, colorData, player.Name)
Chams.(char, colorData)
Chams.(char, player.Name, dist)
Radar = {
bg = .(),
circleBg = .(),
border = .(),
circleBorder = .(),
cross1 = .(),
cross2 = .(),
center = .(),
dots = {},
objectDots = {},
palletSquares = {}
}
Radar.bg.Filled =
Radar.bg.Color = Colors.RadarBg
Radar.bg.Transparency =
Radar.circleBg.Filled =
Radar.circleBg.Color = Colors.RadarBg
Radar.circleBg.Transparency =
Radar.circleBg.NumSides =
Radar.border.Filled =
Radar.border.Color = Colors.RadarBorder
Radar.border.Thickness =
Radar.circleBorder.Filled =
Radar.circleBorder.Color = Colors.RadarBorder
Radar.circleBorder.Thickness =
Radar.circleBorder.NumSides =
Radar.cross1.Color = .(, , )
Radar.cross1.Thickness =
Radar.cross2.Color = .(, , )
Radar.cross2.Thickness =
Radar.center.Filled =
Radar.center.Color = Colors.RadarYou
i = ,
d = .()
d.Filled =
d.Visible =
Radar.dots[i] = d
i = ,
d = .()
d.Filled =
d.Visible =
d.NumSides =
Radar.objectDots[i] = d
i = ,
d = .()
d.Filled =
d.Visible =
Radar.palletSquares[i] = d
Radar.()
Radar.bg.Visible =
Radar.circleBg.Visible =
Radar.border.Visible =
Radar.circleBorder.Visible =
Radar.center.Visible =
Radar.cross1.Visible =
Radar.cross2.Visible =
_, d (Radar.dots) d.Visible =
_, d (Radar.objectDots) d.Visible =
_, d (Radar.palletSquares) d.Visible =
Radar.(cam)
Config.RADAR_Enabled
Radar.()
size = Config.RADAR_Size
pos = .(cam.ViewportSize.X - size - , )
center = pos + .(size/, size/)
Config.RADAR_Circle
Radar.bg.Visible =
Radar.border.Visible =
Radar.circleBg.Position = center
Radar.circleBg.Radius = size/
Radar.circleBg.Visible =
Radar.circleBorder.Position = center
Radar.circleBorder.Radius = size/
Radar.circleBorder.Visible =
Radar.circleBg.Visible =
Radar.circleBorder.Visible =
Radar.bg.Position = pos
Radar.bg.Size = .(size, size)
Radar.bg.Visible =
Radar.border.Position = pos
Radar.border.Size = .(size, size)
Radar.border.Visible =
Radar.cross1.From = .(center.X, pos.Y + )
Radar.cross1.To = .(center.X, pos.Y + size - )
Radar.cross1.Visible =
Radar.cross2.From = .(pos.X + , center.Y)
Radar.cross2.To = .(pos.X + size - , center.Y)
Radar.cross2.Visible =
myChar = LocalPlayer.Character
myRoot = myChar myChar:()
myLook = cam.CFrame.LookVector
myRoot
Radar.center.Visible =
_, d (Radar.dots) d.Visible =
_, d (Radar.objectDots) d.Visible =
_, d (Radar.palletSquares) d.Visible =
myAngle = .(-myLook.X, -myLook.Z)
cosA, sinA = .(myAngle), .(myAngle)
scale = (size/ - ) / Tuning.RadarRange
idx =
objIdx =
palletIdx =
Config.RADAR_Killer
_, player (Players:())
player == LocalPlayer
idx > #Radar.dots
(player)
char = player.Character
char
root = char:()
root
rx, rz = root.Position.X - myRoot.Position.X, root.Position.Z - myRoot.Position.Z
dist2D = .(rx^ + rz^)
dist2D < Tuning.RadarRange
rotX = rx * cosA - rz * sinA
rotZ = rx * sinA + rz * cosA
radarX, radarY = rotX * scale, rotZ * scale
maxD = size/ -
rDist = .(radarX^ + radarY^)
rDist > maxD
radarX, radarY = radarX/rDist*maxD, radarY/rDist*maxD
dotPos = center + .(radarX, radarY)
dot = Radar.dots[idx]
head = char:()
eAngle = head .(-head.CFrame.LookVector.X, -head.CFrame.LookVector.Z) - myAngle
eFwd = .(-.(eAngle), -.(eAngle))
eRight = .(-eFwd.Y, eFwd.X)
dot.PointA = dotPos + eFwd * Tuning.RadarDotSize
dot.PointB = dotPos - eFwd * Tuning.RadarDotSize/ + eRight * Tuning.RadarDotSize/
dot.PointC = dotPos - eFwd * Tuning.RadarDotSize/ - eRight * Tuning.RadarDotSize/
dot.Color = Colors.Killer
dot.Visible =
idx = idx +
Config.RADAR_Survivor
_, player (Players:())
player == LocalPlayer
idx > #Radar.dots
(player)
char = player.Character
char
root = char:()
root
rx, rz = root.Position.X - myRoot.Position.X, root.Position.Z - myRoot.Position.Z
dist2D = .(rx^ + rz^)
dist2D < Tuning.RadarRange
rotX = rx * cosA - rz * sinA
rotZ = rx * sinA + rz * cosA
radarX, radarY = rotX * scale, rotZ * scale
maxD = size/ -
rDist = .(radarX^ + radarY^)
rDist > maxD
radarX, radarY = radarX/rDist*maxD, radarY/rDist*maxD
dotPos = center + .(radarX, radarY)
dot = Radar.dots[idx]
head = char:()
eAngle = head .(-head.CFrame.LookVector.X, -head.CFrame.LookVector.Z) - myAngle
eFwd = .(-.(eAngle), -.(eAngle))
eRight = .(-eFwd.Y, eFwd.X)
dot.PointA = dotPos + eFwd * Tuning.RadarDotSize
dot.PointB = dotPos - eFwd * Tuning.RadarDotSize/ + eRight * Tuning.RadarDotSize/
dot.PointC = dotPos - eFwd * Tuning.RadarDotSize/ - eRight * Tuning.RadarDotSize/
dot.Color = Colors.Survivor
dot.Visible =
idx = idx +
Config.RADAR_Generator
_, gen (Cache.Generators)
objIdx > #Radar.objectDots
gen.part gen.part.Parent
rx, rz = gen.part.Position.X - myRoot.Position.X, gen.part.Position.Z - myRoot.Position.Z
dist2D = .(rx^ + rz^)
dist2D < Tuning.RadarRange
rotX = rx * cosA - rz * sinA
rotZ = rx * sinA + rz * cosA
radarX, radarY = rotX * scale, rotZ * scale
maxD = size/ -
rDist = .(radarX^ + radarY^)
rDist > maxD
radarX, radarY = radarX/rDist*maxD, radarY/rDist*maxD
dotPos = center + .(radarX, radarY)
dot = Radar.objectDots[objIdx]
dot.Position = dotPos
dot.Radius =
dot.Color = Colors.Generator
dot.Visible =
objIdx = objIdx +
Config.RADAR_Pallet
_, pallet (Cache.Pallets)
palletIdx > #Radar.palletSquares
pallet.part pallet.part.Parent
rx, rz = pallet.part.Position.X - myRoot.Position.X, pallet.part.Position.Z - myRoot.Position.Z
dist2D = .(rx^ + rz^)
dist2D < Tuning.RadarRange
rotX = rx * cosA - rz * sinA
rotZ = rx * sinA + rz * cosA
radarX, radarY = rotX * scale, rotZ * scale
maxD = size/ -
rDist = .(radarX^ + radarY^)
rDist > maxD
radarX, radarY = radarX/rDist*maxD, radarY/rDist*maxD
dotPos = center + .(radarX, radarY)
square = Radar.palletSquares[palletIdx]
squareSize =
square.Position = dotPos - .(squareSize/, squareSize/)
square.Size = .(squareSize, squareSize)
square.Color = Colors.Pallet
square.Visible =
palletIdx = palletIdx +
i = idx, #Radar.dots Radar.dots[i].Visible =
i = objIdx, #Radar.objectDots Radar.objectDots[i].Visible =
i = palletIdx, #Radar.palletSquares Radar.palletSquares[i].Visible =
Radar.center.PointA = center + .(, -Tuning.RadarArrowSize)
Radar.center.PointB = center + .(-Tuning.RadarArrowSize/, Tuning.RadarArrowSize/)
Radar.center.PointC = center + .(Tuning.RadarArrowSize/, Tuning.RadarArrowSize/)
Radar.center.Visible =
Aimbot = {}
Aimbot.(char)
char
partName = Config.AIM_TargetPart
partName ==
char:()
partName ==
char:() char:()
char:()
Aimbot.(cam, screenCenter)
cam
myRole = ()
closestPlayer =
closestDist = Config.AIM_FOV
_, player (Players:())
player ~= LocalPlayer player.Character player.Team
shouldTarget =
myRole == (player)
shouldTarget =
myRole == (player)
shouldTarget =
shouldTarget
targetPart = Aimbot.(player.Character)
targetPart
passVisCheck =
Config.AIM_VisCheck Cache.Visibility[player]
passVisCheck =
passVisCheck
screenPos, onScreen, depth = (targetPart.Position)
onScreen depth >
dist = (screenPos - screenCenter).Magnitude
dist < closestDist
closestDist = dist
closestPlayer = player
closestPlayer
Aimbot.(target, targetPart)
target targetPart
pos = targetPart.Position
Config.AIM_Predict
root = target.Character target.Character:()
root
velocity = root.Velocity
pos = pos + velocity *
pos
Aimbot.(cam, targetPos)
cam targetPos
currentCF = cam.CFrame
targetCF = .(currentCF.Position, targetPos)
smooth = Config.AIM_Smooth
cam.CFrame = currentCF:(targetCF, smooth)
Aimbot.(cam, screenSize, screenCenter)
Config.AIM_Enabled
State.AimTarget =
State.AimHolding
State.AimTarget =
target = Aimbot.(cam, screenCenter)
State.AimTarget = target
target target.Character
targetPart = Aimbot.(target.Character)
targetPart
predictedPos = Aimbot.(target, targetPart)
predictedPos
Aimbot.(cam, predictedPos)
()
map = Workspace:()
map
Cache.Generators = {}
Cache.Gates = {}
Cache.Hooks = {}
Cache.Pallets = {}
Cache.Windows = {}
newGenerators = {}
newGates = {}
newHooks = {}
newPallets = {}
newWindows = {}
_, obj (map:())
obj:()
part = obj:()
part
obj.Name ==
.(newGenerators, {model = obj, part = part})
obj.Name ==
.(newGates, {model = obj, part = part})
obj.Name ==
.(newHooks, {model = obj, part = part})
obj.Name == obj.Name:():()
.(newPallets, {model = obj, part = part})
obj.Name ==
.(newWindows, {model = obj, part = part})
Cache.Generators = newGenerators
Cache.Gates = newGates
Cache.Hooks = newHooks
Cache.Pallets = newPallets
Cache.Windows = newWindows
root = ()
root #Cache.Hooks >
closest, closestDist = , .huge
_, hook (Cache.Hooks)
hook.part
d = (hook.part.Position - root.Position).Magnitude
d < closestDist
closestDist = d
closest = hook
Cache.ClosestHook = closest
()
_, player (Players:())
player ~= LocalPlayer player.Character
Cache.Visibility[player] = (player.Character)
(cam)
_, esp (ESP.objectCache)
ESP.(esp)
_, obj (Cache.Generators)
target = obj.model obj.part
Config.ESP_Generator obj.part obj.part.Parent
Config.ESP_ObjectChams
Chams.Objects[target]
Chams.(target, ChamsColors.Generator, )
Chams.(target, , (obj.part.Position))
key = (target)
ESP.objectCache[key]
ESP.objectCache[key] = ESP.()
ESP.(ESP.objectCache[key])
ESP.(ESP.objectCache[key], obj.part.Position, , Colors.Generator, cam)
Chams.(target)
Chams.(target)
_, obj (Cache.Gates)
target = obj.model obj.part
Config.ESP_Gate obj.part obj.part.Parent
Config.ESP_ObjectChams
Chams.Objects[target]
Chams.(target, ChamsColors.Gate, )
Chams.(target, , (obj.part.Position))
key = (target)
ESP.objectCache[key]
ESP.objectCache[key] = ESP.()
ESP.(ESP.objectCache[key])
ESP.(ESP.objectCache[key], obj.part.Position, , Colors.Gate, cam)
Chams.(target)
Chams.(target)
_, obj (Cache.Hooks)
target = obj.model obj.part
isClosest = Config.ESP_ClosestHook obj == Cache.ClosestHook
Config.ESP_Hook obj.part obj.part.Parent
useColor = isClosest Colors.HookClose Colors.Hook
useChams = isClosest ChamsColors.HookClose ChamsColors.Hook
useLabel = isClosest
Config.ESP_ObjectChams
Chams.Objects[target]
Chams.(target, useChams, useLabel)
Chams.(target, useChams)
Chams.(target, useLabel, (obj.part.Position))
key = (target)
ESP.objectCache[key]
ESP.objectCache[key] = ESP.()
ESP.(ESP.objectCache[key])
ESP.(ESP.objectCache[key], obj.part.Position, useLabel, useColor, cam)
Chams.(target)
Chams.(target)
_, obj (Cache.Pallets)
target = obj.model obj.part
Config.ESP_Pallet obj.part obj.part.Parent
Config.ESP_ObjectChams
Chams.Objects[target]
Chams.(target, ChamsColors.Pallet, )
Chams.(target, , (obj.part.Position))
key = (target)
ESP.objectCache[key]
ESP.objectCache[key] = ESP.()
ESP.(ESP.objectCache[key])
ESP.(ESP.objectCache[key], obj.part.Position, , Colors.Pallet, cam)
Chams.(target)
Chams.(target)
_, obj (Cache.Windows)
target = obj.model obj.part
Config.ESP_Window obj.part obj.part.Parent
Config.ESP_ObjectChams
Chams.Objects[target]
Chams.(target, ChamsColors.Window, )
Chams.(target, , (obj.part.Position))
key = (target)
ESP.objectCache[key]
ESP.objectCache[key] = ESP.()
ESP.(ESP.objectCache[key])
ESP.(ESP.objectCache[key], obj.part.Position, , Colors.Window, cam)
Chams.(target)
Chams.(target)
()
Config.AUTO_Generator =
(()
char = LocalPlayer.Character
char
root = char:()
humanoid = char:()
root
map = Workspace:()
map
_, obj (map:())
obj:() obj.Name ==
genPart = obj:()
genPart
dist = (genPart.Position - root.Position).Magnitude
dist <
dir = (root.Position - genPart.Position).Unit
dir.Magnitude ~= dir.Magnitude dir = .(, , )
root.CFrame = .(root.Position + dir * + .(, , ))
humanoid
humanoid:(.HumanoidStateType.GettingUp)
humanoid.PlatformStand =
humanoid.Sit =
humanoid.WalkSpeed = State.OriginalSpeed
humanoid.JumpPower =
animator = humanoid humanoid:()
animator
_, track (animator:())
track:()
_, part (char:())
part:()
part.CanCollide =
root
root.Velocity = .(, , )
root.RotVelocity = .(, , )
)
()
root = ()
root
nearestGen, nearestDist = , .huge
_, gen (Cache.Generators)
dist = (gen.part.Position)
dist < nearestDist
nearestDist = dist
nearestGen = gen
nearestGen nearestDist > Config.AUTO_LeaveDist
direction = (root.Position - nearestGen.part.Position).Unit
escapePos = root.Position + direction * (Config.AUTO_LeaveDist + )
_, part (LocalPlayer.Character:())
part:() part.CanCollide =
root.CFrame = .(escapePos + .(, Config.TP_Offset, ))
.(, ()
LocalPlayer.Character
_, part (LocalPlayer.Character:())
part:() part.Name ~=
part.CanCollide =
)
(index)
#Cache.Generators ==
sorted = {}
_, gen (Cache.Generators)
.(sorted, {gen = gen, dist = (gen.part.Position)})
.(sorted, (a, b) a.dist < b.dist )
target = sorted[index ]
target
root = ()
root
_, part (LocalPlayer.Character:())
part:() part.CanCollide =
root.CFrame = target.gen.part.CFrame + .(, Config.TP_Offset, )
.(, ()
LocalPlayer.Character
_, part (LocalPlayer.Character:())
part:() part.Name ~=
part.CanCollide =
)
()
#Cache.Gates ==
closest, closestDist = , .huge
_, gate (Cache.Gates)
dist = (gate.part.Position)
dist < closestDist
closestDist = dist
closest = gate
closest
root = ()
root
_, part (LocalPlayer.Character:())
part:() part.CanCollide =
root.CFrame = closest.part.CFrame + .(, Config.TP_Offset, )
.(, ()
LocalPlayer.Character
_, part (LocalPlayer.Character:())
part:() part.Name ~=
part.CanCollide =
)
()
Cache.ClosestHook
root = ()
root
_, part (LocalPlayer.Character:())
part:() part.CanCollide =
root.CFrame = Cache.ClosestHook.part.CFrame + .(, Config.TP_Offset, )
.(, ()
LocalPlayer.Character
_, part (LocalPlayer.Character:())
part:() part.Name ~=
part.CanCollide =
)
()
root = ()
root .huge
_, player (Players:())
player ~= LocalPlayer (player)
killerRoot = player.Character player.Character:()
killerRoot
(killerRoot.Position - root.Position).Magnitude, killerRoot.Position
.huge,
()
Config.AUTO_TeleAway
() ==
now = ()
now - State.LastTeleAway <
root = ()
root
killerDist, killerPos = ()
killerDist > Config.AUTO_TeleAwayDist
State.LastTeleAway = now
bestSpot =
bestDist =
_, gate (Cache.Gates)
gate.part killerPos
gatePos = gate.part.Position
distFromKiller = (gatePos - killerPos).Magnitude
distFromKiller > bestDist
bestDist = distFromKiller
bestSpot = gatePos
bestSpot bestDist <
_, gen (Cache.Generators)
gen.part killerPos
genPos = gen.part.Position
distFromKiller = (genPos - killerPos).Magnitude
distFromKiller > bestDist
bestDist = distFromKiller
bestSpot = genPos
bestSpot killerPos
direction = (root.Position - killerPos).Unit
bestSpot = root.Position + direction *
bestSpot
_, part (LocalPlayer.Character:())
part:() part.CanCollide =
root.CFrame = .(bestSpot + .(, Config.TP_Offset, ))
.(, ()
LocalPlayer.Character
_, part (LocalPlayer.Character:())
part:() part.Name ~=
part.CanCollide =
)
OriginalHitboxSizes = {}
local function UpdateHitboxes()
if GetRole() ~= "Killer" then
for player, originalSize in pairs(OriginalHitboxSizes) do
if player and player.Character then
local root = player.Character:FindFirstChild("HumanoidRootPart")
if root then
root.Size = originalSize
root.Transparency = 1
root.CanCollide = true
end
end
end
OriginalHitboxSizes = {}
return
end
if not Config.HITBOX_Enabled then
for player, originalSize in pairs(OriginalHitboxSizes) do
if player and player.Character then
local root = player.Character:FindFirstChild("HumanoidRootPart")
if root then
root.Size = originalSize
root.Transparency = 1
root.CanCollide = true
end
end
end
OriginalHitboxSizes = {}
return
end
for _, player in ipairs(Players:GetPlayers()) do
if player ~= LocalPlayer and IsSurvivor(player) then
local char = player.Character
if char then
local root = char:FindFirstChild("HumanoidRootPart")
local hum = char:FindFirstChildOfClass("Humanoid")
if root and hum and hum.Health > 0 then
if not OriginalHitboxSizes[player] then
OriginalHitboxSizes[player] = root.Size
end
local size = Config.HITBOX_Size
root.Size = Vector3.new(size, size, size)
root.CanCollide = false
root.Transparency = 0.7
elseif root then
if OriginalHitboxSizes[player] then
root.Size = OriginalHitboxSizes[player]
root.Transparency = 1
root.CanCollide = true
OriginalHitboxSizes[player] = nil
end
end
end
end
end
end
Players.PlayerRemoving:Connect(function(player)
OriginalHitboxSizes[player] = nil
end)
local function AutoAttack()
if not Config.AUTO_Attack then return end
if GetRole() ~= "Killer" then return end
local root = GetCharacterRoot()
if not root then return end
for _, player in ipairs(Players:GetPlayers()) do
if player ~= LocalPlayer and player.Character then
local targetRoot = player.Character:FindFirstChild("HumanoidRootPart")
if targetRoot then
local dist = (targetRoot.Position - root.Position).Magnitude
if dist <= Config.AUTO_AttackRange then
pcall(function()
local remotes = ReplicatedStorage:FindFirstChild("Remotes")
if remotes then
local attacks = remotes:FindFirstChild("Attacks")
if attacks then
local basicAttack = attacks:FindFirstChild("BasicAttack")
if basicAttack then
basicAttack:FireServer(false)
end
end
end
end)
break
end
end
end
end
end
local LastParryTime = 0
local function AutoParry()
if not Config.AUTO_Parry then return end
if GetRole() ~= "Survivor" then return end
if tick() - LastParryTime < 0.5 then return end
local root = GetCharacterRoot()
if not root then return end
for _, player in ipairs(Players:GetPlayers()) do
if player ~= LocalPlayer and IsKiller(player) and player.Character then
local killerRoot = player.Character:FindFirstChild("HumanoidRootPart")
if killerRoot then
local dist = (killerRoot.Position - root.Position).Magnitude
if dist <= 15 then
pcall(function()
local remotes = ReplicatedStorage:FindFirstChild("Remotes")
if remotes then
local items = remotes:FindFirstChild("Items")
if items then
local dagger = items:FindFirstChild("Parrying Dagger")
if dagger then
local parry = dagger:FindFirstChild("parry")
if parry then
parry:FireServer()
LastParryTime = tick()
end
end
end
end
end)
break
end
end
end
end
end
local LastWiggleTime = 0
local function AutoWiggle()
if not Config.SURV_AutoWiggle then return end
if GetRole() ~= "Survivor" then return end
if tick() - LastWiggleTime < 0.3 then return end
pcall(function()
local remotes = ReplicatedStorage:FindFirstChild("Remotes")
if remotes then
local carry = remotes:FindFirstChild("Carry")
if carry then
local selfUnhook = carry:FindFirstChild("SelfUnHookEvent")
if selfUnhook then
selfUnhook:FireServer()
LastWiggleTime = tick()
end
end
end
end)
end
local QTEHandler = {
Monitoring = false,
FrameConn = nil,
UIConn = nil,
Elements = nil
}
local function QTE_SimulateInput()
local inputMgr = game:GetService("VirtualInputManager")
inputMgr:SendKeyEvent(true, Enum.KeyCode.Space, false, game)
task.defer(function()
inputMgr:SendKeyEvent(false, Enum.KeyCode.Space, false, game)
end)
end
local function QTE_GetUIElements()
local pg = LocalPlayer:FindFirstChild("PlayerGui")
if not pg then return nil end
local prompt = pg:FindFirstChild("SkillCheckPromptGui")
if not prompt then return nil end
local frame = prompt:FindFirstChild("Check")
if not frame then return nil end
return {
frame = frame,
needle = frame:FindFirstChild("Line"),
target = frame:FindFirstChild("Goal")
}
end
local function QTE_IsNeedleInZone(needleAngle, targetAngle)
local needle = needleAngle % 360
local target = targetAngle % 360
local sweetSpotStart = (target + 104) % 360
local sweetSpotEnd = (target + 114) % 360
if sweetSpotStart > sweetSpotEnd then
return needle >= sweetSpotStart or needle <= sweetSpotEnd
end
return needle >= sweetSpotStart and needle <= sweetSpotEnd
end
local function QTE_StopMonitoring()
if QTEHandler.FrameConn then
QTEHandler.FrameConn:Disconnect()
QTEHandler.FrameConn = nil
end
QTEHandler.Monitoring = false
end
local function QTE_FrameUpdate()
if not Config.AUTO_SkillCheck or GetRole() ~= "Survivor" then
QTE_StopMonitoring()
return
end
local ui = QTEHandler.Elements
if not ui or not ui.needle or not ui.target then
QTE_StopMonitoring()
return
end
if QTE_IsNeedleInZone(ui.needle.Rotation, ui.target.Rotation) then
QTE_SimulateInput()
QTE_StopMonitoring()
end
end
local function QTE_StartMonitoring()
if QTEHandler.Monitoring then return end
QTEHandler.Monitoring = true
QTEHandler.FrameConn = RunService.Heartbeat:Connect(QTE_FrameUpdate)
end
local function QTE_OnVisibilityChange()
if not Config.AUTO_SkillCheck or GetRole() ~= "Survivor" then
QTE_StopMonitoring()
return
end
local ui = QTEHandler.Elements
if ui and ui.frame and ui.frame.Visible then
QTE_StartMonitoring()
else
QTE_StopMonitoring()
end
end
local function SetupSkillCheckMonitor()
pcall(function()
QTE_StopMonitoring()
if QTEHandler.UIConn then
QTEHandler.UIConn:Disconnect()
QTEHandler.UIConn = nil
end
local ui = QTE_GetUIElements()
if not ui or not ui.frame or not ui.needle or not ui.target then return end
QTEHandler.Elements = ui
QTEHandler.UIConn = ui.frame:GetPropertyChangedSignal("Visible"):Connect(QTE_OnVisibilityChange)
end)
end
local function DestroyAllPallets()
if not Config.KILLER_DestroyPallets then return end
if GetRole() ~= "Killer" then return end
pcall(function()
local remotes = ReplicatedStorage:FindFirstChild("Remotes")
if remotes then
local pallet = remotes:FindFirstChild("Pallet")
if pallet then
local jason = pallet:FindFirstChild("Jason")
if jason then
local destroyGlobal = jason:FindFirstChild("Destroy-Global")
if destroyGlobal then
destroyGlobal:FireServer()
end
local destroy = jason:FindFirstChild("Destroy")
if destroy then
local map = workspace:FindFirstChild("Map")
if map then
for _, obj in ipairs(map:GetDescendants()) do
if obj.Name:lower():find("pallet") and obj:IsA("Model") then
destroy:FireServer(obj)
end
end
end
end
end
end
end
end)
end
local LastGenBreakTime = 0
local function FullGenBreak()
if not Config.KILLER_FullGenBreak then return end
if GetRole() ~= "Killer" then return end
if tick() - LastGenBreakTime < 0.3 then return end
local root = GetCharacterRoot()
if not root then return end
pcall(function()
local remotes = ReplicatedStorage:FindFirstChild("Remotes")
if remotes then
local generator = remotes:FindFirstChild("Generator")
if generator then
local breakEvent = generator:FindFirstChild("BreakGenEvent")
if breakEvent then
local map = workspace:FindFirstChild("Map")
if map then
for _, obj in ipairs(map:GetDescendants()) do
if obj.Name:lower():find("generator") or obj.Name:lower():find("gen") then
local genPart = obj:IsA("BasePart") and obj or obj:FindFirstChildWhichIsA("BasePart")
if genPart then
local dist = (genPart.Position - root.Position).Magnitude
if dist <= 15 then
breakEvent:FireServer(obj)
LastGenBreakTime = tick()
end
end
end
end
end
end
end
end
end)
end
local function UpdateSpeed()
local char = LocalPlayer.Character
if not char then return end
local hum = char:FindFirstChildOfClass("Humanoid")
if not hum then return end
if State.OriginalSpeed == 16 and hum.WalkSpeed ~= Config.SPEED_Value then
State.OriginalSpeed = hum.WalkSpeed
end
if Config.SPEED_Enabled then
hum.WalkSpeed = Config.SPEED_Value
else
hum.WalkSpeed = State.OriginalSpeed
end
end
local NoclipWasOn = false
local function UpdateNoclip()
local char = LocalPlayer.Character
if not char then return end
if Config.NOCLIP_Enabled then
for _, part in ipairs(char:GetDescendants()) do
if part:IsA("BasePart") then
part.CanCollide = false
end
end
NoclipWasOn = true
elseif NoclipWasOn then
for _, part in ipairs(char:GetDescendants()) do
if part:IsA("BasePart") and part.Name ~= "HumanoidRootPart" then
part.CanCollide = true
end
end
NoclipWasOn = false
end
end
local FogCache = {}
local function RemoveFog()
pcall(function()
local map = Workspace:FindFirstChild("Map")
if map then
for _, obj in ipairs(map:GetDescendants()) do
if obj.Name:lower():find("fog") or obj:IsA("Atmosphere") or obj:IsA("BloomEffect") or obj:IsA("BlurEffect") or obj:IsA("ColorCorrectionEffect") then
if not FogCache[obj] then
FogCache[obj] = {enabled = obj:IsA("PostEffect") and obj.Enabled or true, parent = obj.Parent}
end
if obj:IsA("PostEffect") then
obj.Enabled = false
else
obj.Parent = nil
end
end
end
end
end)
pcall(function()
local lighting = game:GetService("Lighting")
for _, obj in ipairs(lighting:GetChildren()) do
if obj:IsA("Atmosphere") or obj.Name:lower():find("fog") then
if not FogCache[obj] then
FogCache[obj] = {enabled = obj:IsA("Atmosphere") or true, parent = obj.Parent}
end
if obj:IsA("Atmosphere") then
obj.Density = 0
else
obj.Parent = nil
end
end
end
lighting.FogEnd = 100000
lighting.FogStart = 0
end)
end
local function RestoreFog()
pcall(function()
for obj, data in pairs(FogCache) do
if obj and data.parent then
if obj:IsA("PostEffect") then
obj.Enabled = data.enabled
else
obj.Parent = data.parent
end
end
end
FogCache = {}
local lighting = game:GetService("Lighting")
lighting.FogEnd = 1000
end)
end
local function UpdateNoFall()
if not Config.SURV_NoFall then return end
local char = LocalPlayer.Character
if not char then return end
local hum = char:FindFirstChildOfClass("Humanoid")
if hum then
hum:SetStateEnabled(Enum.HumanoidStateType.FallingDown, false)
hum:SetStateEnabled(Enum.HumanoidStateType.Ragdoll, false)
end
end
local function SetupAntiBlind()
pcall(function()
local remotes = ReplicatedStorage:FindFirstChild("Remotes")
if not remotes then return end
local items = remotes:FindFirstChild("Items")
if not items then return end
local flashlight = items:FindFirstChild("Flashlight")
if not flashlight then return end
local gotBlinded = flashlight:FindFirstChild("GotBlinded")
if gotBlinded and gotBlinded:IsA("RemoteEvent") then
local oldFire = gotBlinded.FireServer
gotBlinded.FireServer = function(self, ...)
if Config.KILLER_AntiBlind and GetRole() == "Killer" then
return nil
end
return oldFire(self, ...)
end
end
end)
end
local function UpdateNoSlowdown()
if not Config.KILLER_NoSlowdown then return end
if GetRole() ~= "Killer" then return end
local char = LocalPlayer.Character
if not char then return end
local hum = char:FindFirstChildOfClass("Humanoid")
if not hum then return end
if hum.WalkSpeed < 16 then
hum.WalkSpeed = State.OriginalSpeed or 16
end
end
local LastDoubleTapTime = 0
local function DoubleTap()
if not Config.KILLER_DoubleTap then return end
if GetRole() ~= "Killer" then return end
if tick() - LastDoubleTapTime < 0.5 then return end
pcall(function()
local remotes = ReplicatedStorage:FindFirstChild("Remotes")
if not remotes then return end
local attacks = remotes:FindFirstChild("Attacks")
if not attacks then return end
local basicAttack = attacks:FindFirstChild("BasicAttack")
if basicAttack then
basicAttack:FireServer(false)
task.wait(0.05)
basicAttack:FireServer(false)
LastDoubleTapTime = tick()
end
end)
end
local function InfiniteLunge()
if not Config.KILLER_InfiniteLunge then return end
if GetRole() ~= "Killer" then return end
local char = LocalPlayer.Character
if not char then return end
local hum = char:FindFirstChildOfClass("Humanoid")
if not hum then return end
local root = char:FindFirstChild("HumanoidRootPart")
if root then
local lookVector = root.CFrame.LookVector
root.Velocity = lookVector * 100 + Vector3.new(0, 10, 0)
end
end
local function SetupNoPalletStun()
pcall(function()
local remotes = ReplicatedStorage:FindFirstChild("Remotes")
if not remotes then return end
local pallet = remotes:FindFirstChild("Pallet")
if pallet then
local jason = pallet:FindFirstChild("Jason")
if jason then
local stun = jason:FindFirstChild("Stun")
local stunDrop = jason:FindFirstChild("StunDrop")
if stun and stun:IsA("RemoteEvent") then
local mt = getrawmetatable(game)
if mt and setreadonly then
setreadonly(mt, false)
local oldIndex = mt.__namecall
mt.__namecall = newcclosure(function(self, ...)
if Config.KILLER_NoPalletStun and GetRole() == "Killer" then
if self == stun or self == stunDrop then
return nil
end
end
return oldIndex(self, ...)
end)
setreadonly(mt, true)
end
end
end
end
local mechanics = remotes:FindFirstChild("Mechanics")
if mechanics then
local palletStun = mechanics:FindFirstChild("PalletStun")
if palletStun and palletStun:IsA("RemoteEvent") then
end
end
end)
end
local OriginalCameraType = nil
local ThirdPersonWasActive = false
local function UpdateThirdPerson()
local cam = workspace.CurrentCamera
if not cam then return end
local isKiller = GetRole() == "Killer"
local shouldBeActive = Config.CAM_ThirdPerson and isKiller
if shouldBeActive then
if not ThirdPersonWasActive then
OriginalCameraType = cam.CameraType
end
cam.CameraType = Enum.CameraType.Custom
local char = LocalPlayer.Character
if char then
local hum = char:FindFirstChildOfClass("Humanoid")
if hum then hum.CameraOffset = Vector3.new(2, 1, 8) end
end
ThirdPersonWasActive = true
elseif ThirdPersonWasActive then
if OriginalCameraType then
cam.CameraType = OriginalCameraType
OriginalCameraType = nil
end
local char = LocalPlayer.Character
if char then
local hum = char:FindFirstChildOfClass("Humanoid")
if hum then hum.CameraOffset = Vector3.new(0, 0, 0) end
end
ThirdPersonWasActive = false
end
end
local function UpdateShiftLock()
if not Config.CAM_ShiftLock then return end
local char = LocalPlayer.Character
if not char then return end
local root = char:FindFirstChild("HumanoidRootPart")
local cam = workspace.CurrentCamera
if not root or not cam then return end
local camLook = cam.CFrame.LookVector
local flatLook = Vector3.new(camLook.X, 0, camLook.Z).Unit
root.CFrame = CFrame.new(root.Position, root.Position + flatLook)
end
local OriginalFOV = nil
local function UpdateCameraFOV()
local cam = workspace.CurrentCamera
if not cam then return end
if not OriginalFOV then
OriginalFOV = cam.FieldOfView
end
if Config.CAM_FOVEnabled then
cam.FieldOfView = Config.CAM_FOV
elseif OriginalFOV then
cam.FieldOfView = OriginalFOV
end
end
local FlyConnection = nil
local FlyBodyVelocity = nil
local FlyBodyGyro = nil
local function UpdateFly()
local char = LocalPlayer.Character
if not char then return end
local root = char:FindFirstChild("HumanoidRootPart")
local hum = char:FindFirstChildOfClass("Humanoid")
if not root or not hum then return end
if Config.FLY_Enabled then
hum.PlatformStand = true
if not FlyBodyVelocity then
FlyBodyVelocity = Instance.new("BodyVelocity")
FlyBodyVelocity.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
FlyBodyVelocity.Velocity = Vector3.zero
FlyBodyVelocity.Parent = root
end
if not FlyBodyGyro then
FlyBodyGyro = Instance.new("BodyGyro")
FlyBodyGyro.MaxTorque = Vector3.new(math.huge, math.huge, math.huge)
FlyBodyGyro.P = 9e4
FlyBodyGyro.Parent = root
end
local cam = workspace.CurrentCamera
local moveDir = Vector3.zero
if UserInputService:IsKeyDown(Enum.KeyCode.W) then
moveDir = moveDir + cam.CFrame.LookVector
end
if UserInputService:IsKeyDown(Enum.KeyCode.S) then
moveDir = moveDir - cam.CFrame.LookVector
end
if UserInputService:IsKeyDown(Enum.KeyCode.A) then
moveDir = moveDir - cam.CFrame.RightVector
end
if UserInputService:IsKeyDown(Enum.KeyCode.D) then
moveDir = moveDir + cam.CFrame.RightVector
end
if UserInputService:IsKeyDown(Enum.KeyCode.Space) then
moveDir = moveDir + Vector3.new(0, 1, 0)
end
if UserInputService:IsKeyDown(Enum.KeyCode.LeftControl) or UserInputService:IsKeyDown(Enum.KeyCode.LeftShift) then
moveDir = moveDir - Vector3.new(0, 1, 0)
end
if moveDir.Magnitude > 0 then
moveDir = moveDir.Unit * Config.FLY_Speed
end
if Config.FLY_Method == "Velocity" then
FlyBodyVelocity.Velocity = moveDir
else
FlyBodyVelocity.Velocity = Vector3.zero
if moveDir.Magnitude > 0 then
root.CFrame = root.CFrame + moveDir * 0.05
end
end
FlyBodyGyro.CFrame = cam.CFrame
else
if FlyBodyVelocity then
FlyBodyVelocity:Destroy()
FlyBodyVelocity = nil
end
if FlyBodyGyro then
FlyBodyGyro:Destroy()
FlyBodyGyro = nil
end
if hum then
hum.PlatformStand = false
end
end
end
local InfiniteJumpConnection = nil
local function SetupInfiniteJump()
if InfiniteJumpConnection then
InfiniteJumpConnection:Disconnect()
InfiniteJumpConnection = nil
end
InfiniteJumpConnection = UserInputService.JumpRequest:Connect(function()
if not Config.JUMP_Infinite then return end
local char = LocalPlayer.Character
if not char then return end
local hum = char:FindFirstChildOfClass("Humanoid")
if hum then
hum:ChangeState(Enum.HumanoidStateType.Jumping)
end
end)
end
local OriginalJumpPower = nil
local function UpdateJumpPower()
local char = LocalPlayer.Character
if not char then return end
local hum = char:FindFirstChildOfClass("Humanoid")
if not hum then return end
if not OriginalJumpPower then
OriginalJumpPower = hum.JumpPower
end
if Config.JUMP_Power ~= 50 then
hum.JumpPower = Config.JUMP_Power
hum.UseJumpPower = true
end
end
local function FlingNearest()
if not Config.FLING_Enabled then return end
local root = GetCharacterRoot()
if not root then return end
local closest, closestDist = nil, math.huge
for _, player in ipairs(Players:GetPlayers()) do
if player ~= LocalPlayer and player.Character then
local targetRoot = player.Character:FindFirstChild("HumanoidRootPart")
if targetRoot then
local dist = (targetRoot.Position - root.Position).Magnitude
if dist < closestDist then
closestDist = dist
closest = player
end
end
end
end
if closest and closest.Character then
local targetRoot = closest.Character:FindFirstChild("HumanoidRootPart")
if targetRoot then
local originalPos = root.CFrame
for i = 1, 10 do
root.CFrame = targetRoot.CFrame
root.Velocity = Vector3.new(Config.FLING_Strength, Config.FLING_Strength/2, Config.FLING_Strength)
root.RotVelocity = Vector3.new(9999, 9999, 9999)
task.wait()
end
root.CFrame = originalPos
root.Velocity = Vector3.zero
root.RotVelocity = Vector3.zero
end
end
end
local function FlingAll()
if not Config.FLING_Enabled then return end
local root = GetCharacterRoot()
if not root then return end
local originalPos = root.CFrame
for _, player in ipairs(Players:GetPlayers()) do
if player ~= LocalPlayer and player.Character then
local targetRoot = player.Character:FindFirstChild("HumanoidRootPart")
if targetRoot then
for i = 1, 5 do
root.CFrame = targetRoot.CFrame
root.Velocity = Vector3.new(Config.FLING_Strength, Config.FLING_Strength/2, Config.FLING_Strength)
root.RotVelocity = Vector3.new(9999, 9999, 9999)
task.wait()
end
end
end
end
root.CFrame = originalPos
root.Velocity = Vector3.zero
root.RotVelocity = Vector3.zero
end
local function SpearAimbot(targetPos)
if not Config.SPEAR_Aimbot then return nil end
if GetRole() ~= "Killer" then return nil end
local root = GetCharacterRoot()
if not root then return nil end
local startPos = root.Position + Vector3.new(0, 2, 0)
local distance = (targetPos - startPos).Magnitude
local gravity = Config.SPEAR_Gravity
local speed = Config.SPEAR_Speed
local time = distance / speed
local gravityDrop = 0.5 * gravity * time * time
local aimPos = targetPos + Vector3.new(0, gravityDrop, 0)
return aimPos
end
local function UpdateSpearAim()
if not Config.SPEAR_Aimbot then return end
if GetRole() ~= "Killer" then return end
local root = GetCharacterRoot()
if not root then return end
local closest, closestDist = nil, math.huge
for _, player in ipairs(Players:GetPlayers()) do
if player ~= LocalPlayer and IsSurvivor(player) and player.Character then
local targetRoot = player.Character:FindFirstChild("HumanoidRootPart")
if targetRoot then
local dist = (targetRoot.Position - root.Position).Magnitude
if dist < closestDist and Cache.Visibility[player] then
closestDist = dist
closest = player
end
end
end
end
if closest and closest.Character then
local targetRoot = closest.Character:FindFirstChild("HumanoidRootPart")
if targetRoot then
local aimPos = SpearAimbot(targetRoot.Position)
if aimPos then
local cam = workspace.CurrentCamera
if cam then
cam.CFrame = CFrame.new(cam.CFrame.Position, aimPos)
end
end
end
end
end
local Tabs = {
{name = "ESP"},
{name = "AIM"},
{name = "SURV"},
{name = "KILL"},
{name = "MOVE"},
{name = "MISC"}
}
local MenuItems = {
{tab = 1, name = "GENERAL", type = "label"},
{tab = 1, name = "Enable ESP", key = "ESP_Enabled", type = "toggle"},
{tab = 1, name = "Max Distance", key = "ESP_MaxDist", type = "slider", min = 100, max = 1000, step = 50},
{tab = 1, name = "PLAYERS", type = "label"},
{tab = 1, name = "Killer", key = "ESP_Killer", type = "toggle"},
{tab = 1, name = "Survivor", key = "ESP_Survivor", type = "toggle"},
{tab = 1, name = "Player Mode", key = "ESP_PlayerChams", type = "mode"},
{tab = 1, name = "OBJECTS", type = "label"},
{tab = 1, name = "Generator", key = "ESP_Generator", type = "toggle"},
{tab = 1, name = "Gate", key = "ESP_Gate", type = "toggle"},
{tab = 1, name = "Hook", key = "ESP_Hook", type = "toggle"},
{tab = 1, name = "Pallet", key = "ESP_Pallet", type = "toggle"},
{tab = 1, name = "Window", key = "ESP_Window", type = "toggle"},
{tab = 1, name = "Closest Hook", key = "ESP_ClosestHook", type = "toggle"},
{tab = 1, name = "Object Mode", key = "ESP_ObjectChams", type = "mode"},
{tab = 1, name = "DETAILS", type = "label"},
{tab = 1, name = "Names", key = "ESP_Names", type = "toggle"},
{tab = 1, name = "Distance", key = "ESP_Distance", type = "toggle"},
{tab = 1, name = "Health", key = "ESP_Health", type = "toggle"},
{tab = 1, name = "Skeleton", key = "ESP_Skeleton", type = "toggle"},
{tab = 1, name = "Offscreen", key = "ESP_Offscreen", type = "toggle"},
{tab = 1, name = "Velocity", key = "ESP_Velocity", type = "toggle"},
{tab = 1, name = "RADAR", type = "label"},
{tab = 1, name = "Radar Enable", key = "RADAR_Enabled", type = "toggle"},
{tab = 1, name = "Radar Size", key = "RADAR_Size", type = "slider", min = 80, max = 200, step = 10},
{tab = 1, name = "Radar Circle", key = "RADAR_Circle", type = "toggle"},
{tab = 1, name = "Show Killer", key = "RADAR_Killer", type = "toggle"},
{tab = 1, name = "Show Survivor", key = "RADAR_Survivor", type = "toggle"},
{tab = 1, name = "Show Generator", key = "RADAR_Generator", type = "toggle"},
{tab = 1, name = "Show Pallet", key = "RADAR_Pallet", type = "toggle"},
{tab = 2, name = "CAMERA AIMBOT", type = "label"},
{tab = 2, name = "Enable", key = "AIM_Enabled", type = "toggle"},
{tab = 2, name = "Use RMB", key = "AIM_UseRMB", type = "toggle"},
{tab = 2, name = "Show FOV", key = "AIM_ShowFOV", type = "toggle"},
{tab = 2, name = "FOV Size", key = "AIM_FOV", type = "slider", min = 50, max = 400, step = 10},
{tab = 2, name = "Smoothness", key = "AIM_Smooth", type = "slider", min = 0.1, max = 1, step = 0.05},
{tab = 2, name = "Target Part", key = "AIM_TargetPart", type = "dropdown", options = {"Head", "Torso", "Root"}},
{tab = 2, name = "Visibility", key = "AIM_VisCheck", type = "toggle"},
{tab = 2, name = "Prediction", key = "AIM_Predict", type = "toggle"},
{tab = 2, name = "SPEAR AIMBOT (VEIL)", type = "label"},
{tab = 2, name = "Spear Aimbot", key = "SPEAR_Aimbot", type = "toggle"},
{tab = 2, name = "Spear Gravity", key = "SPEAR_Gravity", type = "slider", min = 10, max = 200, step = 5},
{tab = 2, name = "Spear Speed", key = "SPEAR_Speed", type = "slider", min = 50, max = 300, step = 10},
{tab = 3, name = "GENERATORS", type = "label"},
{tab = 3, name = "Auto Generator", key = "AUTO_Generator", type = "toggle"},
{tab = 3, name = "Gen Speed", key = "AUTO_GenMode", type = "dropdown", options = {"Fast", "Slow"}},
{tab = 3, name = "Leave Gen Key", key = "KEY_LeaveGen", type = "keybind"},
{tab = 3, name = "Stop Gen Key", key = "KEY_StopGen", type = "keybind"},
{tab = 3, name = "Leave Dist", key = "AUTO_LeaveDist", type = "slider", min = 10, max = 30, step = 2},
{tab = 3, name = "SURVIVAL", type = "label"},
{tab = 3, name = "No Fall Dmg", key = "SURV_NoFall", type = "toggle"},
{tab = 3, name = "Flee Killer", key = "AUTO_TeleAway", type = "toggle"},
{tab = 3, name = "Flee Distance", key = "AUTO_TeleAwayDist", type = "slider", min = 20, max = 80, step = 5},
{tab = 3, name = "Auto Parry", key = "AUTO_Parry", type = "toggle"},
{tab = 3, name = "Auto Wiggle", key = "SURV_AutoWiggle", type = "toggle"},
{tab = 3, name = "Perfect Skill Check", key = "AUTO_SkillCheck", type = "toggle"},
{tab = 3, name = "BEAT GAME", type = "label"},
{tab = 3, name = "Beat Survivor", key = "BEAT_Survivor", type = "toggle"},
{tab = 4, name = "COMBAT", type = "label"},
{tab = 4, name = "Auto Attack", key = "AUTO_Attack", type = "toggle"},
{tab = 4, name = "Attack Range", key = "AUTO_AttackRange", type = "slider", min = 5, max = 20, step = 1},
{tab = 4, name = "Double Tap (instant kill)", key = "KILLER_DoubleTap", type = "toggle"},
{tab = 4, name = "Infinite Lunge", key = "KILLER_InfiniteLunge", type = "toggle"},
{tab = 4, name = "Auto Hook", key = "KILLER_AutoHook", type = "toggle"},
{tab = 4, name = "HITBOX", type = "label"},
{tab = 4, name = "Hitbox Expand", key = "HITBOX_Enabled", type = "toggle"},
{tab = 4, name = "Hitbox Size", key = "HITBOX_Size", type = "slider", min = 5, max = 30, step = 1},
{tab = 4, name = "PROTECTION", type = "label"},
{tab = 4, name = "No Pallet Stun", key = "KILLER_NoPalletStun", type = "toggle"},
{tab = 4, name = "Anti Blind", key = "KILLER_AntiBlind", type = "toggle"},
{tab = 4, name = "No Slowdown", key = "KILLER_NoSlowdown", type = "toggle"},
{tab = 4, name = "DESTRUCTION", type = "label"},
{tab = 4, name = "Full Gen Break", key = "KILLER_FullGenBreak", type = "toggle"},
{tab = 4, name = "Destroy Pallets", key = "KILLER_DestroyPallets", type = "toggle"},
{tab = 4, name = "CAMERA", type = "label"},
{tab = 4, name = "Third Person", key = "CAM_ThirdPerson", type = "toggle"},
{tab = 4, name = "Shift Lock", key = "CAM_ShiftLock", type = "toggle"},
{tab = 4, name = "BEAT GAME", type = "label"},
{tab = 4, name = "Beat Killer", key = "BEAT_Killer", type = "toggle"},
{tab = 5, name = "SPEED", type = "label"},
{tab = 5, name = "Speed Hack", key = "SPEED_Enabled", type = "toggle"},
{tab = 5, name = "Speed Value", key = "SPEED_Value", type = "slider", min = 16, max = 150, step = 2},
{tab = 5, name = "Speed Method", key = "SPEED_Method", type = "dropdown", options = {"Attribute", "TP"}},
{tab = 5, name = "Speed Key", key = "KEY_Speed", type = "keybind"},
{tab = 5, name = "FLIGHT", type = "label"},
{tab = 5, name = "Fly", key = "FLY_Enabled", type = "toggle"},
{tab = 5, name = "Fly Speed", key = "FLY_Speed", type = "slider", min = 10, max = 200, step = 5},
{tab = 5, name = "Fly Method", key = "FLY_Method", type = "dropdown", options = {"CFrame", "Velocity"}},
{tab = 5, name = "Fly Key", key = "KEY_Fly", type = "keybind"},
{tab = 5, name = "JUMP", type = "label"},
{tab = 5, name = "Jump Power", key = "JUMP_Power", type = "slider", min = 50, max = 200, step = 5},
{tab = 5, name = "Infinite Jump", key = "JUMP_Infinite", type = "toggle"},
{tab = 5, name = "COLLISION", type = "label"},
{tab = 5, name = "Noclip", key = "NOCLIP_Enabled", type = "toggle"},
{tab = 5, name = "Noclip Key", key = "KEY_Noclip", type = "keybind"},
{tab = 5, name = "TELEPORT", type = "label"},
{tab = 5, name = "TP Height", key = "TP_Offset", type = "slider", min = 0, max = 10, step = 1},
{tab = 5, name = "TP to Gen", type = "button", action = function() TeleportToGenerator(1) end},
{tab = 5, name = "TP to Gate", type = "button", action = function() TeleportToGate() end},
{tab = 5, name = "TP to Hook", type = "button", action = function() TeleportToHook() end},
{tab = 5, name = "Gen Key", key = "KEY_TP_Gen", type = "keybind"},
{tab = 5, name = "Gate Key", key = "KEY_TP_Gate", type = "keybind"},
{tab = 5, name = "Hook Key", key = "KEY_TP_Hook", type = "keybind"},
{tab = 6, name = "VISUAL", type = "label"},
{tab = 6, name = "No Fog", key = "NO_Fog", type = "toggle"},
{tab = 6, name = "FOV Enabled", key = "CAM_FOVEnabled", type = "toggle"},
{tab = 6, name = "FOV Value", key = "CAM_FOV", type = "slider", min = 30, max = 120, step = 5},
{tab = 6, name = "FLING", type = "label"},
{tab = 6, name = "Fling Enable", key = "FLING_Enabled", type = "toggle"},
{tab = 6, name = "Fling Strength", key = "FLING_Strength", type = "slider", min = 1000, max = 50000, step = 1000},
{tab = 6, name = "Fling Nearest", type = "button", action = function() FlingNearest() end},
{tab = 6, name = "Fling All", type = "button", action = function() FlingAll() end},
{tab = 6, name = "MENU", type = "label"},
{tab = 6, name = "Menu Key", key = "KEY_Menu", type = "keybind"},
{tab = 6, name = "Panic Key", key = "KEY_Panic", type = "keybind"}
}
local GUI = {
Drawings = {},
Visible = true,
AnimProgress = 1,
TargetAnim = 1,
HoverStates = {},
ItemHover = {},
TabHover = {},
ScrollOffset = 0,
MaxScroll = 0,
Dragging = false,
ScrollbarDragging = false,
Position = nil,
PositionOffset = Vector2.new(0, 0),
ItemPositions = {},
TabPositions = {},
ContentBounds = {},
ScrollbarBounds = {},
EditingKeybind = nil
}
local KeyNames = {
[Enum.KeyCode.Q] = "Q", [Enum.KeyCode.W] = "W", [Enum.KeyCode.E] = "E", [Enum.KeyCode.R] = "R",
[Enum.KeyCode.T] = "T", [Enum.KeyCode.Y] = "Y", [Enum.KeyCode.U] = "U", [Enum.KeyCode.I] = "I",
[Enum.KeyCode.O] = "O", [Enum.KeyCode.P] = "P", [Enum.KeyCode.A] = "A", [Enum.KeyCode.S] = "S",
[Enum.KeyCode.D] = "D", [Enum.KeyCode.F] = "F", [Enum.KeyCode.G] = "G", [Enum.KeyCode.H] = "H",
[Enum.KeyCode.J] = "J", [Enum.KeyCode.K] = "K", [Enum.KeyCode.L] = "L", [Enum.KeyCode.Z] = "Z",
[Enum.KeyCode.X] = "X", [Enum.KeyCode.C] = "C", [Enum.KeyCode.V] = "V", [Enum.KeyCode.B] = "B",
[Enum.KeyCode.N] = "N", [Enum.KeyCode.M] = "M",
[Enum.KeyCode.One] = "1", [Enum.KeyCode.Two] = "2", [Enum.KeyCode.Three] = "3",
[Enum.KeyCode.Four] = "4", [Enum.KeyCode.Five] = "5", [Enum.KeyCode.Six] = "6",
[Enum.KeyCode.Seven] = "7", [Enum.KeyCode.Eight] = "8", [Enum.KeyCode.Nine] = "9",
[Enum.KeyCode.Zero] = "0",
[Enum.KeyCode.Insert] = "INS", [Enum.KeyCode.Home] = "HOME", [Enum.KeyCode.End] = "END",
[Enum.KeyCode.Delete] = "DEL", [Enum.KeyCode.PageUp] = "PGUP", [Enum.KeyCode.PageDown] = "PGDN",
[Enum.KeyCode.F1] = "F1", [Enum.KeyCode.F2] = "F2", [Enum.KeyCode.F3] = "F3", [Enum.KeyCode.F4] = "F4",
[Enum.KeyCode.F5] = "F5", [Enum.KeyCode.F6] = "F6", [Enum.KeyCode.F7] = "F7", [Enum.KeyCode.F8] = "F8",
[Enum.KeyCode.LeftShift] = "LSHIFT", [Enum.KeyCode.RightShift] = "RSHIFT",
[Enum.KeyCode.LeftControl] = "LCTRL", [Enum.KeyCode.RightControl] = "RCTRL",
[Enum.KeyCode.LeftAlt] = "LALT", [Enum.KeyCode.RightAlt] = "RALT",
[Enum.KeyCode.Backquote] = "`", [Enum.KeyCode.Tab] = "TAB"
}
local function GetKeyName(keyCode)
return KeyNames[keyCode] or tostring(keyCode):gsub("Enum.KeyCode.", "")
end
function GUI.Create()
GUI.Drawings.Bg = Drawing.new("Square")
GUI.Drawings.Bg.Filled = true
GUI.Drawings.Bg.Color = Colors.UI_Bg
GUI.Drawings.Bg.Visible = false
GUI.Drawings.Border = Drawing.new("Square")
GUI.Drawings.Border.Filled = false
GUI.Drawings.Border.Color = Colors.UI_Border
GUI.Drawings.Border.Thickness = 1
GUI.Drawings.Border.Visible = false
GUI.Drawings.DragBar = Drawing.new("Square")
GUI.Drawings.DragBar.Filled = true
GUI.Drawings.DragBar.Color = Colors.UI_Sidebar
GUI.Drawings.DragBar.Visible = false
GUI.Drawings.Sidebar = Drawing.new("Square")
GUI.Drawings.Sidebar.Filled = true
GUI.Drawings.Sidebar.Color = Colors.UI_Sidebar
GUI.Drawings.Sidebar.Visible = false
GUI.Drawings.ScrollbarBg = Drawing.new("Square")
GUI.Drawings.ScrollbarBg.Filled = true
GUI.Drawings.ScrollbarBg.Color = Color3.fromRGB(25, 25, 30)
GUI.Drawings.ScrollbarBg.Visible = false
GUI.Drawings.ScrollbarThumb = Drawing.new("Square")
GUI.Drawings.ScrollbarThumb.Filled = true
GUI.Drawings.ScrollbarThumb.Color = Colors.UI_Accent
GUI.Drawings.ScrollbarThumb.Visible = false
GUI.Drawings.Tabs = {}
for i = 1, #Tabs do
GUI.Drawings.Tabs[i] = {
Bg = Drawing.new("Square"),
Label = Drawing.new("Text"),
Indicator = Drawing.new("Square")
}
GUI.Drawings.Tabs[i].Bg.Filled = true
GUI.Drawings.Tabs[i].Bg.Visible = false
GUI.Drawings.Tabs[i].Label.Size = 15
GUI.Drawings.Tabs[i].Label.Font = Drawing.Fonts.UI
GUI.Drawings.Tabs[i].Label.Center = true
GUI.Drawings.Tabs[i].Label.Outline = true
GUI.Drawings.Tabs[i].Label.Visible = false
GUI.Drawings.Tabs[i].Indicator.Filled = true
GUI.Drawings.Tabs[i].Indicator.Color = Colors.UI_Accent
GUI.Drawings.Tabs[i].Indicator.Visible = false
end
GUI.Drawings.Items = {}
for i = 1, 25 do
GUI.Drawings.Items[i] = {
Bg = Drawing.new("Square"),
SelectBar = Drawing.new("Square"),
Label = Drawing.new("Text"),
Value = Drawing.new("Text"),
Toggle = Drawing.new("Square"),
ToggleKnob = Drawing.new("Square"),
SliderBg = Drawing.new("Square"),
SliderFill = Drawing.new("Square")
}
local item = GUI.Drawings.Items[i]
item.Bg.Filled = true
item.Bg.Visible = false
item.SelectBar.Filled = true
item.SelectBar.Color = Colors.UI_Accent
item.SelectBar.Visible = false
item.Label.Size = 15
item.Label.Font = Drawing.Fonts.UI
item.Label.Outline = true
item.Label.Visible = false
item.Value.Size = 14
item.Value.Font = Drawing.Fonts.UI
item.Value.Outline = true
item.Value.Visible = false
item.Toggle.Filled = true
item.Toggle.Visible = false
item.ToggleKnob.Filled = true
item.ToggleKnob.Color = Color3.new(1, 1, 1)
item.ToggleKnob.Visible = false
item.SliderBg.Filled = true
item.SliderBg.Color = Colors.UI_Off
item.SliderBg.Visible = false
item.SliderFill.Filled = true
item.SliderFill.Color = Colors.UI_Accent
item.SliderFill.Visible = false
end
GUI.Drawings.Footer = Drawing.new("Square")
GUI.Drawings.Footer.Filled = true
GUI.Drawings.Footer.Color = Colors.UI_Sidebar
GUI.Drawings.Footer.Visible = false
GUI.Drawings.Hint = Drawing.new("Text")
GUI.Drawings.Hint.Size = 13
GUI.Drawings.Hint.Font = Drawing.Fonts.UI
GUI.Drawings.Hint.Color = Colors.UI_TextDim
GUI.Drawings.Hint.Outline = true
GUI.Drawings.Hint.Text = "INS HOME TAB"
GUI.Drawings.Hint.Visible = false
GUI.Drawings.Role = Drawing.new("Text")
GUI.Drawings.Role.Size = 13
GUI.Drawings.Role.Font = Drawing.Fonts.UI
GUI.Drawings.Role.Outline = true
GUI.Drawings.Role.Visible = false
GUI.Drawings.AutoGenHint = Drawing.new("Text")
GUI.Drawings.AutoGenHint.Size = 16
GUI.Drawings.AutoGenHint.Font = Drawing.Fonts.UI
GUI.Drawings.AutoGenHint.Center = true
GUI.Drawings.AutoGenHint.Outline = true
GUI.Drawings.AutoGenHint.Color = Colors.UI_Accent
GUI.Drawings.AutoGenHint.Visible = false
GUI.Drawings.FOVCircle = Drawing.new("Circle")
GUI.Drawings.FOVCircle.Thickness = 1
GUI.Drawings.FOVCircle.Color = Colors.UI_Accent
GUI.Drawings.FOVCircle.Filled = false
GUI.Drawings.FOVCircle.NumSides = 60
GUI.Drawings.FOVCircle.Transparency = 0.8
GUI.Drawings.FOVCircle.Visible = false
end
function GUI.Hide()
local keepVisible = {FOVCircle = true, AutoGenHint = true}
for name, drawing in pairs(GUI.Drawings) do
if keepVisible[name] then
elseif type(drawing) == "table" then
for _, subDrawing in pairs(drawing) do
if type(subDrawing) == "table" then
for _, d in pairs(subDrawing) do
if d.Visible ~= nil then d.Visible = false end
end
elseif subDrawing.Visible ~= nil then
subDrawing.Visible = false
end
end
elseif drawing.Visible ~= nil then
drawing.Visible = false
end
end
end
function GUI.Render()
GUI.TargetAnim = Config.MENU_Open and 1 or 0
GUI.AnimProgress = Lerp(GUI.AnimProgress, GUI.TargetAnim, 0.15)
if GUI.AnimProgress < 0.01 then
GUI.Hide()
return
end
local cam = workspace.CurrentCamera
if not cam then return end
local screenSize = cam.ViewportSize
local menuW, menuH = 300, 420
local sidebarW = 60
local dragBarH = 22
local footerH = 30
local scrollbarW = 6
if not GUI.Position then
GUI.Position = Vector2.new(screenSize.X / 2 - menuW / 2, screenSize.Y / 2 - menuH / 2)
end
if GUI.Dragging then
local mouse = UserInputService:GetMouseLocation()
GUI.Position = mouse - GUI.PositionOffset
GUI.Position = Vector2.new(
math.clamp(GUI.Position.X, 0, screenSize.X - menuW),
math.clamp(GUI.Position.Y, 0, screenSize.Y - menuH)
)
end
local animAlpha = GUI.AnimProgress
local x = GUI.Position.X
local y = GUI.Position.Y
GUI.Drawings.Bg.Position = Vector2.new(x, y)
GUI.Drawings.Bg.Size = Vector2.new(menuW, menuH)
GUI.Drawings.Bg.Transparency = animAlpha * 0.95
GUI.Drawings.Bg.Visible = true
GUI.Drawings.Border.Position = Vector2.new(x, y)
GUI.Drawings.Border.Size = Vector2.new(menuW, menuH)
GUI.Drawings.Border.Transparency = animAlpha
GUI.Drawings.Border.Visible = true
GUI.Drawings.DragBar.Position = Vector2.new(x + sidebarW, y)
GUI.Drawings.DragBar.Size = Vector2.new(menuW - sidebarW, dragBarH)
GUI.Drawings.DragBar.Transparency = animAlpha * 0.95
GUI.Drawings.DragBar.Visible = true
GUI.Drawings.Sidebar.Position = Vector2.new(x, y)
GUI.Drawings.Sidebar.Size = Vector2.new(sidebarW, menuH)
GUI.Drawings.Sidebar.Transparency = animAlpha * 0.95
GUI.Drawings.Sidebar.Visible = true
GUI.TabPositions = {}
local tabY = y + 15
local tabH = 36
for i, tab in ipairs(Tabs) do
local tabDrawing = GUI.Drawings.Tabs[i]
local isSelected = (i == Config.MENU_Tab)
GUI.TabHover[i] = GUI.TabHover[i] or 0
GUI.TabHover[i] = Lerp(GUI.TabHover[i], isSelected and 1 or 0, 0.2)
local bgColor = LerpColor(Colors.UI_Sidebar, Colors.UI_Card, GUI.TabHover[i])
tabDrawing.Bg.Position = Vector2.new(x + 5, tabY)
tabDrawing.Bg.Size = Vector2.new(sidebarW - 10, tabH)
tabDrawing.Bg.Color = bgColor
tabDrawing.Bg.Transparency = animAlpha * 0.9
tabDrawing.Bg.Visible = true
GUI.TabPositions[i] = {x = x + 5, y = tabY, w = sidebarW - 10, h = tabH}
tabDrawing.Label.Position = Vector2.new(x + sidebarW / 2, tabY + tabH / 2 - 7)
tabDrawing.Label.Text = tab.name
tabDrawing.Label.Color = LerpColor(Colors.UI_TextDim, Colors.UI_Text, GUI.TabHover[i])
tabDrawing.Label.Transparency = animAlpha
tabDrawing.Label.Visible = true
local indicatorH = (tabH - 10) * GUI.TabHover[i]
if indicatorH > 1 then
tabDrawing.Indicator.Position = Vector2.new(x + sidebarW - 3, tabY + tabH/2 - indicatorH/2)
tabDrawing.Indicator.Size = Vector2.new(3, indicatorH)
tabDrawing.Indicator.Transparency = animAlpha
tabDrawing.Indicator.Visible = true
else
tabDrawing.Indicator.Visible = false
end
tabY = tabY + tabH + 6
end
local contentX = x + sidebarW + 10
local contentY = y + dragBarH + 8
local contentW = menuW - sidebarW - 20 - scrollbarW
local contentH = menuH - dragBarH - footerH - 16
local itemH = 30
local itemSpacing = 4
local itemIdx = 0
local currentTabItemIdx = 0
GUI.ContentBounds = {x = contentX, y = contentY, w = contentW, h = contentH}
local tabItemCount = 0
for _, item in ipairs(MenuItems) do
if item.tab == Config.MENU_Tab then tabItemCount = tabItemCount + 1 end
end
local totalContentH = tabItemCount * (itemH + itemSpacing)
GUI.MaxScroll = math.max(0, totalContentH - contentH)
GUI.ScrollOffset = math.clamp(GUI.ScrollOffset, 0, GUI.MaxScroll)
local scrollbarX = x + menuW - scrollbarW - 6
local scrollbarY = contentY
local scrollbarH = contentH
GUI.Drawings.ScrollbarBg.Position = Vector2.new(scrollbarX, scrollbarY)
GUI.Drawings.ScrollbarBg.Size = Vector2.new(scrollbarW, scrollbarH)
GUI.Drawings.ScrollbarBg.Transparency = animAlpha * 0.6
GUI.Drawings.ScrollbarBg.Visible = true
GUI.ScrollbarBounds = {x = scrollbarX, y = scrollbarY, w = scrollbarW, h = scrollbarH}
if GUI.MaxScroll > 0 then
local thumbH = math.max(30, scrollbarH * (contentH / totalContentH))
local thumbY = scrollbarY + (GUI.ScrollOffset / GUI.MaxScroll) * (scrollbarH - thumbH)
GUI.Drawings.ScrollbarThumb.Position = Vector2.new(scrollbarX, thumbY)
GUI.Drawings.ScrollbarThumb.Size = Vector2.new(scrollbarW, thumbH)
GUI.Drawings.ScrollbarThumb.Transparency = animAlpha
GUI.Drawings.ScrollbarThumb.Visible = true
GUI.ScrollbarBounds.thumbH = thumbH
else
GUI.Drawings.ScrollbarThumb.Visible = false
GUI.ScrollbarBounds.thumbH = 0
end
GUI.ItemPositions = {}
for _, menuItem in ipairs(MenuItems) do
if menuItem.tab == Config.MENU_Tab then
currentTabItemIdx = currentTabItemIdx + 1
local rawY = contentY + (currentTabItemIdx - 1) * (itemH + itemSpacing) - GUI.ScrollOffset
local isVisible = rawY >= contentY - 2 and rawY <= contentY + contentH - itemH + 5
if isVisible then
itemIdx = itemIdx + 1
if itemIdx > 25 then break end
local item = GUI.Drawings.Items[itemIdx]
local itemY = rawY
local isSelected = (currentTabItemIdx == SelectedItem)
GUI.ItemPositions[itemIdx] = {x = contentX, y = itemY, w = contentW, h = itemH, idx = currentTabItemIdx}
local itemKey = Config.MENU_Tab .. "_" .. itemIdx
GUI.ItemHover[itemKey] = GUI.ItemHover[itemKey] or 0
local targetHover = isSelected and 1 or 0
GUI.ItemHover[itemKey] = Lerp(GUI.ItemHover[itemKey], targetHover, 0.2)
local bgColor = LerpColor(Colors.UI_Card, Colors.UI_CardHover, GUI.ItemHover[itemKey])
item.Bg.Position = Vector2.new(contentX, itemY)
item.Bg.Size = Vector2.new(contentW, itemH)
item.Bg.Color = bgColor
item.Bg.Transparency = animAlpha * 0.9
item.Bg.Visible = true
local selectBarWidth = 4 * GUI.ItemHover[itemKey]
if selectBarWidth > 0.5 then
item.SelectBar.Position = Vector2.new(contentX, itemY)
item.SelectBar.Size = Vector2.new(selectBarWidth, itemH)
item.SelectBar.Transparency = animAlpha
item.SelectBar.Visible = true
else
item.SelectBar.Visible = false
end
local labelColor = LerpColor(Colors.UI_Text, Colors.UI_Accent, GUI.ItemHover[itemKey] * 0.5)
item.Label.Position = Vector2.new(contentX + 10, itemY + 7)
item.Label.Text = menuItem.name
item.Label.Color = labelColor
item.Label.Transparency = animAlpha
item.Label.Visible = true
if menuItem.type == "toggle" then
local isOn = Config[menuItem.key]
local toggleColor = LerpColor(Colors.UI_Off, Colors.UI_On, isOn and 1 or 0)
local toggleX = contentX + contentW - 42
local toggleY = itemY + 7
local toggleW = 32
local toggleH = 16
local knobSize = 12
item.Toggle.Position = Vector2.new(toggleX, toggleY)
item.Toggle.Size = Vector2.new(toggleW, toggleH)
item.Toggle.Color = toggleColor
item.Toggle.Transparency = animAlpha
item.Toggle.Visible = true
local knobX = isOn and (toggleX + toggleW - knobSize - 2) or (toggleX + 2)
item.ToggleKnob.Position = Vector2.new(knobX, toggleY + 2)
item.ToggleKnob.Size = Vector2.new(knobSize, knobSize)
item.ToggleKnob.Transparency = animAlpha
item.ToggleKnob.Visible = true
item.Value.Visible = false
item.SliderBg.Visible = false
item.SliderFill.Visible = false
elseif menuItem.type == "slider" then
local val = Config[menuItem.key]
local pct = (val - menuItem.min) / (menuItem.max - menuItem.min)
local valText = menuItem.step < 1 and string.format("%.2f", val) or tostring(math.floor(val))
item.Value.Position = Vector2.new(contentX + contentW - 45, itemY + 7)
item.Value.Text = valText
item.Value.Color = Colors.UI_TextDim
item.Value.Transparency = animAlpha
item.Value.Visible = true
item.SliderBg.Position = Vector2.new(contentX + 10, itemY + itemH - 7)
item.SliderBg.Size = Vector2.new(contentW - 60, 4)
item.SliderBg.Transparency = animAlpha * 0.8
item.SliderBg.Visible = true
item.SliderFill.Position = Vector2.new(contentX + 10, itemY + itemH - 7)
item.SliderFill.Size = Vector2.new((contentW - 60) * pct, 4)
item.SliderFill.Transparency = animAlpha
item.SliderFill.Visible = true
item.Toggle.Visible = false
item.ToggleKnob.Visible = false
elseif menuItem.type == "button" then
item.Value.Position = Vector2.new(contentX + contentW - 40, itemY + 7)
item.Value.Text = "[GO]"
item.Value.Color = LerpColor(Colors.UI_Accent, Colors.UI_Text, GUI.ItemHover[itemKey])
item.Value.Transparency = animAlpha
item.Value.Visible = true
item.Toggle.Visible = false
item.ToggleKnob.Visible = false
item.SliderBg.Visible = false
item.SliderFill.Visible = false
elseif menuItem.type == "label" then
item.Label.Color = Colors.UI_Accent
item.Label.Position = Vector2.new(contentX + 10, itemY + 7)
item.Value.Visible = false
item.Toggle.Visible = false
item.ToggleKnob.Visible = false
item.SliderBg.Visible = false
item.SliderFill.Visible = false
item.Bg.Color = Colors.UI_Sidebar
item.SelectBar.Visible = false
elseif menuItem.type == "info" then
item.Label.Color = Colors.UI_TextDim
item.Label.Position = Vector2.new(contentX + 10, itemY + 7)
item.Value.Visible = false
item.Toggle.Visible = false
item.ToggleKnob.Visible = false
item.SliderBg.Visible = false
item.SliderFill.Visible = false
item.Bg.Color = Colors.UI_Bg
item.SelectBar.Visible = false
elseif menuItem.type == "keybind" then
local keyCode = Config[menuItem.key]
local keyText = GUI.EditingKeybind == menuItem.key and "[...]" or ("[" .. GetKeyName(keyCode) .. "]")
item.Value.Position = Vector2.new(contentX + contentW - 50, itemY + 7)
item.Value.Text = keyText
item.Value.Color = GUI.EditingKeybind == menuItem.key and Colors.UI_Accent or Colors.UI_Text
item.Value.Transparency = animAlpha
item.Value.Visible = true
item.Toggle.Visible = false
item.ToggleKnob.Visible = false
item.SliderBg.Visible = false
item.SliderFill.Visible = false
elseif menuItem.type == "mode" then
local isChams = Config[menuItem.key]
item.Value.Position = Vector2.new(contentX + contentW - 85, itemY + 7)
item.Value.Text = isChams and "DRAW | [CHAMS]" or "[DRAW] | CHAMS"
item.Value.Color = Colors.UI_Text
item.Value.Transparency = animAlpha
item.Value.Visible = true
item.Toggle.Visible = false
item.ToggleKnob.Visible = false
item.SliderBg.Visible = false
item.SliderFill.Visible = false
elseif menuItem.type == "dropdown" then
local currentVal = Config[menuItem.key]
local displayText = "[" .. tostring(currentVal):upper() .. "]"
item.Value.Position = Vector2.new(contentX + contentW - 60, itemY + 7)
item.Value.Text = displayText
item.Value.Color = Colors.UI_Accent
item.Value.Transparency = animAlpha
item.Value.Visible = true
item.Toggle.Visible = false
item.ToggleKnob.Visible = false
item.SliderBg.Visible = false
item.SliderFill.Visible = false
end
end
end
end
for i = itemIdx + 1, 25 do
local item = GUI.Drawings.Items[i]
item.Bg.Visible = false
item.SelectBar.Visible = false
item.Label.Visible = false
item.Value.Visible = false
item.Toggle.Visible = false
item.ToggleKnob.Visible = false
item.SliderBg.Visible = false
item.SliderFill.Visible = false
end
GUI.Drawings.Footer.Position = Vector2.new(x + sidebarW, y + menuH - footerH)
GUI.Drawings.Footer.Size = Vector2.new(menuW - sidebarW, footerH)
GUI.Drawings.Footer.Transparency = animAlpha * 0.95
GUI.Drawings.Footer.Visible = true
GUI.Drawings.Hint.Position = Vector2.new(x + sidebarW + 10, y + menuH - footerH + 8)
GUI.Drawings.Hint.Transparency = animAlpha * 0.7
GUI.Drawings.Hint.Visible = true
local role = GetRole()
GUI.Drawings.Role.Position = Vector2.new(x + menuW - 55, y + menuH - footerH + 8)
GUI.Drawings.Role.Text = role
GUI.Drawings.Role.Color = role == "Killer" and Colors.Killer or role == "Survivor" and Colors.Survivor or Colors.UI_TextDim
GUI.Drawings.Role.Transparency = animAlpha
GUI.Drawings.Role.Visible = true
end
local SelectedItem = 1
local function HandleInput(input, gameProcessed)
if State.Unloaded then return end
local menuW, menuH = 300, 420
local sidebarW = 60
local dragBarH = 22
local footerH = 30
if GUI.EditingKeybind and input.UserInputType == Enum.UserInputType.Keyboard then
if input.KeyCode ~= Enum.KeyCode.Escape then
Config[GUI.EditingKeybind] = input.KeyCode
end
GUI.EditingKeybind = nil
return
end
if input.UserInputType == Enum.UserInputType.Keyboard then
if input.KeyCode == Config.KEY_Panic then
Unload()
return
end
if input.KeyCode == Config.KEY_Menu and not gameProcessed then
Config.MENU_Open = not Config.MENU_Open
return
end
if (Config.AUTO_LeaveGen or Config.AUTO_Generator) and input.KeyCode == Config.KEY_LeaveGen and not gameProcessed then
LeaveGenerator()
return
end
if input.KeyCode == Config.KEY_StopGen and not gameProcessed then
StopAutoGen()
return
end
if input.KeyCode == Config.KEY_TP_Gen and not gameProcessed then
TeleportToGenerator(1)
return
end
if input.KeyCode == Config.KEY_TP_Gate and not gameProcessed then
TeleportToGate()
return
end
if input.KeyCode == Config.KEY_TP_Hook and not gameProcessed then
TeleportToHook()
return
end
if input.KeyCode == Config.KEY_Speed and not gameProcessed then
Config.SPEED_Enabled = not Config.SPEED_Enabled
return
end
if input.KeyCode == Config.KEY_Noclip and not gameProcessed then
Config.NOCLIP_Enabled = not Config.NOCLIP_Enabled
return
end
if input.KeyCode == Config.KEY_Fly and not gameProcessed then
Config.FLY_Enabled = not Config.FLY_Enabled
return
end
end
if input.UserInputType == Enum.UserInputType.MouseButton2 then
if Config.AIM_Enabled and Config.AIM_UseRMB then
State.AimHolding = true
end
end
if input.UserInputType == Enum.UserInputType.MouseButton1 then
if Config.MENU_Open and GUI.Position then
local mouse = UserInputService:GetMouseLocation()
local x, y = GUI.Position.X, GUI.Position.Y
if mouse.X >= x + sidebarW and mouse.X <= x + menuW and
mouse.Y >= y and mouse.Y <= y + dragBarH then
GUI.Dragging = true
GUI.PositionOffset = mouse - GUI.Position
return
end
if GUI.ScrollbarBounds and GUI.MaxScroll > 0 then
local sb = GUI.ScrollbarBounds
if mouse.X >= sb.x and mouse.X <= sb.x + sb.w + 10 and
mouse.Y >= sb.y and mouse.Y <= sb.y + sb.h then
GUI.ScrollbarDragging = true
local pct = math.clamp((mouse.Y - sb.y) / sb.h, 0, 1)
GUI.ScrollOffset = pct * GUI.MaxScroll
return
end
end
for i, pos in pairs(GUI.TabPositions) do
if mouse.X >= pos.x and mouse.X <= pos.x + pos.w and
mouse.Y >= pos.y and mouse.Y <= pos.y + pos.h then
Config.MENU_Tab = i
SelectedItem = 1
GUI.ScrollOffset = 0
GUI.EditingKeybind = nil
return
end
end
for i, pos in pairs(GUI.ItemPositions) do
if mouse.X >= pos.x and mouse.X <= pos.x + pos.w and
mouse.Y >= pos.y and mouse.Y <= pos.y + pos.h then
local tabItems = {}
for _, item in ipairs(MenuItems) do
if item.tab == Config.MENU_Tab then
table.insert(tabItems, item)
end
end
local menuItem = tabItems[pos.idx]
if menuItem then
SelectedItem = pos.idx
if menuItem.type == "toggle" then
Config[menuItem.key] = not Config[menuItem.key]
elseif menuItem.type == "mode" then
Config[menuItem.key] = not Config[menuItem.key]
elseif menuItem.type == "dropdown" then
local opts = menuItem.options
local current = Config[menuItem.key]
local idx = 1
for i, opt in ipairs(opts) do
if opt == current then idx = i break end
end
idx = idx + 1
if idx > #opts then idx = 1 end
Config[menuItem.key] = opts[idx]
elseif menuItem.type == "button" and menuItem.action then
menuItem.action()
elseif menuItem.type == "slider" then
local sliderX = pos.x + 10
local sliderW = pos.w - 60
local pct = math.clamp((mouse.X - sliderX) / sliderW, 0, 1)
local val = menuItem.min + pct * (menuItem.max - menuItem.min)
val = math.floor(val / menuItem.step + 0.5) * menuItem.step
Config[menuItem.key] = math.clamp(val, menuItem.min, menuItem.max)
elseif menuItem.type == "keybind" then
GUI.EditingKeybind = menuItem.key
end
end
return
end
end
end
end
if not Config.MENU_Open then return end
if input.UserInputType ~= Enum.UserInputType.Keyboard then return end
local tabItems = {}
for _, item in ipairs(MenuItems) do
if item.tab == Config.MENU_Tab then
table.insert(tabItems, item)
end
end
local function isSelectable(item)
return item.type ~= "label" and item.type ~= "info"
end
if input.KeyCode == Enum.KeyCode.Up then
local startIdx = SelectedItem
repeat
SelectedItem = SelectedItem - 1
if SelectedItem < 1 then SelectedItem = #tabItems end
until isSelectable(tabItems[SelectedItem]) or SelectedItem == startIdx
elseif input.KeyCode == Enum.KeyCode.Down then
local startIdx = SelectedItem
repeat
SelectedItem = SelectedItem + 1
if SelectedItem > #tabItems then SelectedItem = 1 end
until isSelectable(tabItems[SelectedItem]) or SelectedItem == startIdx
elseif input.KeyCode == Enum.KeyCode.Tab then
Config.MENU_Tab = Config.MENU_Tab + 1
if Config.MENU_Tab > #Tabs then Config.MENU_Tab = 1 end
SelectedItem = 1
GUI.ScrollOffset = 0
local newTabItems = {}
for _, item in ipairs(MenuItems) do
if item.tab == Config.MENU_Tab then
table.insert(newTabItems, item)
end
end
for i, item in ipairs(newTabItems) do
if isSelectable(item) then
SelectedItem = i
break
end
end
elseif input.KeyCode == Enum.KeyCode.Return or input.KeyCode == Enum.KeyCode.Space then
local selectedMenuItem = tabItems[SelectedItem]
if selectedMenuItem then
if selectedMenuItem.type == "toggle" then
Config[selectedMenuItem.key] = not Config[selectedMenuItem.key]
elseif selectedMenuItem.type == "mode" then
Config[selectedMenuItem.key] = not Config[selectedMenuItem.key]
elseif selectedMenuItem.type == "dropdown" then
local opts = selectedMenuItem.options
local current = Config[selectedMenuItem.key]
local idx = 1
for i, opt in ipairs(opts) do
if opt == current then idx = i break end
end
idx = idx + 1
if idx > #opts then idx = 1 end
Config[selectedMenuItem.key] = opts[idx]
elseif selectedMenuItem.type == "button" and selectedMenuItem.action then
selectedMenuItem.action()
elseif selectedMenuItem.type == "keybind" then
GUI.EditingKeybind = selectedMenuItem.key
end
end
elseif input.KeyCode == Enum.KeyCode.Left then
local selectedMenuItem = tabItems[SelectedItem]
if selectedMenuItem and selectedMenuItem.type == "slider" then
local newVal = Config[selectedMenuItem.key] - selectedMenuItem.step
Config[selectedMenuItem.key] = math.clamp(newVal, selectedMenuItem.min, selectedMenuItem.max)
end
elseif input.KeyCode == Enum.KeyCode.Right then
local selectedMenuItem = tabItems[SelectedItem]
if selectedMenuItem and selectedMenuItem.type == "slider" then
local newVal = Config[selectedMenuItem.key] + selectedMenuItem.step
Config[selectedMenuItem.key] = math.clamp(newVal, selectedMenuItem.min, selectedMenuItem.max)
end
end
end
local function HandleScroll(input)
if State.Unloaded then return end
if not Config.MENU_Open or not GUI.Position then return end
local menuW, menuH = 300, 420
local sidebarW = 60
local dragBarH = 22
local footerH = 30
local mouse = UserInputService:GetMouseLocation()
local x, y = GUI.Position.X, GUI.Position.Y
if mouse.X >= x + sidebarW and mouse.X <= x + menuW and
mouse.Y >= y + dragBarH and mouse.Y <= y + menuH - footerH then
local scrollAmount = input.Position.Z * 40
GUI.ScrollOffset = math.clamp(GUI.ScrollOffset - scrollAmount, 0, GUI.MaxScroll)
end
end
local function MainLoop()
if State.Unloaded then return end
local cam = workspace.CurrentCamera
if not cam then return end
local screenSize = cam.ViewportSize
local screenCenter = Vector2.new(screenSize.X / 2, screenSize.Y / 2)
local now = tick()
if now - State.LastCacheUpdate >= Tuning.CacheRefreshRate then
State.LastCacheUpdate = now
ScanMap()
end
if now - State.LastVisCheck >= Tuning.ESP_VisCheckRate then
State.LastVisCheck = now
UpdateVisibility()
end
ESP.step(cam, screenSize, screenCenter)
UpdateObjectESP(cam)
Radar.step(cam)
if Config.AUTO_Generator and GUI.Drawings.AutoGenHint then
local leaveKey = GetKeyName(Config.KEY_LeaveGen)
local stopKey = GetKeyName(Config.KEY_StopGen)
GUI.Drawings.AutoGenHint.Text = "AUTO GEN | [" .. leaveKey .. "] Leave [" .. stopKey .. "] Stop"
GUI.Drawings.AutoGenHint.Position = Vector2.new(screenSize.X / 2, 30)
GUI.Drawings.AutoGenHint.Visible = true
elseif GUI.Drawings.AutoGenHint then
GUI.Drawings.AutoGenHint.Visible = false
end
Aimbot.Update(cam, screenSize, screenCenter)
if GUI.Drawings.FOVCircle then
if Config.AIM_Enabled and Config.AIM_ShowFOV then
GUI.Drawings.FOVCircle.Position = screenCenter
GUI.Drawings.FOVCircle.Radius = Config.AIM_FOV
GUI.Drawings.FOVCircle.Color = State.AimTarget and Colors.UI_On or Colors.UI_Accent
GUI.Drawings.FOVCircle.Visible = true
else
GUI.Drawings.FOVCircle.Visible = false
end
end
GUI.Render()
end
local function UpdateFog()
if Config.NO_Fog ~= State.LastFogState then
State.LastFogState = Config.NO_Fog
if Config.NO_Fog then
RemoveFog()
else
RestoreFog()
end
end
end
local function BeatGameSurvivor()
if not Config.BEAT_Survivor then
State.BeatSurvivorDone = false
State.LastFinishPos = nil
return
end
if GetRole() ~= "Survivor" then return end
local root = GetCharacterRoot()
if not root then return end
local map = Workspace:FindFirstChild("Map")
if not map then return end
local exitPos = nil
pcall(function()
if map:FindFirstChild("RooftopHitbox") or map:FindFirstChild("Rooftop") then
exitPos = Vector3.new(3098.16, 454.04, -4918.74)
return
end
if map:FindFirstChild("HooksMeat") then
exitPos = Vector3.new(1546.12, 152.21, -796.72)
return
end
if map:FindFirstChild("churchbell") then
exitPos = Vector3.new(760.98, -20.14, -78.48)
return
end
local finish = map:FindFirstChild("Finishline") or map:FindFirstChild("FinishLine") or map:FindFirstChild("Fininshline")
if finish then
if finish:IsA("BasePart") then
exitPos = finish.Position
elseif finish:IsA("Model") then
local part = finish:FindFirstChildWhichIsA("BasePart")
if part then exitPos = part.Position end
end
return
end
for _, obj in ipairs(map:GetDescendants()) do
if obj.Name:lower():find("finish") then
if obj:IsA("BasePart") then
exitPos = obj.Position
break
elseif obj:IsA("Model") then
local part = obj:FindFirstChildWhichIsA("BasePart")
if part then
exitPos = part.Position
break
end
end
end
end
if not exitPos then
for _, obj in ipairs(map:GetDescendants()) do
if obj:IsA("MeshPart") and obj.Material == Enum.Material.Limestone then
exitPos = Vector3.new(-947.90, 152.12, -7579.52)
break
end
end
end
if not exitPos then
for _, obj in ipairs(map:GetDescendants()) do
if obj:IsA("MeshPart") and obj.Material == Enum.Material.Leather then
exitPos = Vector3.new(1546.12, 152.21, -796.72)
break
end
end
end
end)
if not exitPos then return end
if State.LastFinishPos then
local dist = (exitPos - State.LastFinishPos).Magnitude
if dist > 50 then
State.BeatSurvivorDone = false
end
end
if State.BeatSurvivorDone then return end
root.CFrame = CFrame.new(exitPos + Vector3.new(0, 3, 0))
State.BeatSurvivorDone = true
State.LastFinishPos = exitPos
end
local function GetHealthPercent(hum)
if not hum or hum.MaxHealth <= 0 then return 0 end
return hum.Health / hum.MaxHealth
end
local function IsPlayerDowned(hum)
local pct = GetHealthPercent(hum)
return pct <= 0.25 and pct > 0
end
local function IsPlayerAlive(hum)
local pct = GetHealthPercent(hum)
return pct > 0.25
end
local function BeatGameKiller()
if not Config.BEAT_Killer then
State.KillerTarget = nil
return
end
if GetRole() ~= "Killer" then
State.KillerTarget = nil
return
end
local root = GetCharacterRoot()
if not root then return end
local target = State.KillerTarget
local needNewTarget = true
if target and target.Character then
local targetRoot = target.Character:FindFirstChild("HumanoidRootPart")
local targetHum = target.Character:FindFirstChildOfClass("Humanoid")
if targetRoot and targetHum and IsPlayerAlive(targetHum) then
needNewTarget = false
else
State.KillerTarget = nil
end
end
if needNewTarget then
local survivors = {}
for _, player in ipairs(Players:GetPlayers()) do
if player ~= LocalPlayer and IsSurvivor(player) and player.Character then
local pRoot = player.Character:FindFirstChild("HumanoidRootPart")
local pHum = player.Character:FindFirstChildOfClass("Humanoid")
if pRoot and pHum and IsPlayerAlive(pHum) then
table.insert(survivors, player)
end
end
end
if #survivors > 0 then
local closestDist = math.huge
local closest = nil
for _, player in ipairs(survivors) do
local pRoot = player.Character:FindFirstChild("HumanoidRootPart")
local dist = (pRoot.Position - root.Position).Magnitude
if dist < closestDist then
closestDist = dist
closest = player
end
end
State.KillerTarget = closest
target = closest
else
State.KillerTarget = nil
return
end
end
if not target or not target.Character then return end
local targetRoot = target.Character:FindFirstChild("HumanoidRootPart")
local targetHum = target.Character:FindFirstChildOfClass("Humanoid")
if not targetRoot or not targetHum then
State.KillerTarget = nil
return
end
if not IsPlayerAlive(targetHum) then
State.KillerTarget = nil
return
end
for _, part in ipairs(LocalPlayer.Character:GetDescendants()) do
if part:IsA("BasePart") then part.CanCollide = false end
end
local targetPos = targetRoot.Position
local direction = (root.Position - targetPos).Unit
if direction.Magnitude ~= direction.Magnitude then
direction = Vector3.new(1, 0, 0)
end
local offsetPos = targetPos + direction * 3 + Vector3.new(0, 1, 0)
root.CFrame = CFrame.new(offsetPos, targetPos)
pcall(function()
local remotes = ReplicatedStorage:FindFirstChild("Remotes")
if remotes then
local attacks = remotes:FindFirstChild("Attacks")
if attacks then
local basicAttack = attacks:FindFirstChild("BasicAttack")
if basicAttack then
basicAttack:FireServer(false)
end
end
end
end)
end
local LastAutoHookTime = 0
local AutoHookState = {
phase = 0,
target = nil,
startTime = 0,
spamCount = 0
}
local function AutoHook_SpamSpace(duration)
task.spawn(function()
local vim = game:GetService("VirtualInputManager")
local endTime = tick() + duration
while tick() < endTime do
pcall(function()
vim:SendKeyEvent(true, Enum.KeyCode.Space, false, game)
task.wait(0.05)
vim:SendKeyEvent(false, Enum.KeyCode.Space, false, game)
end)
task.wait(0.08)
end
end)
end
local function AutoHook_LookAt(targetPos)
local cam = workspace.CurrentCamera
if not cam then return end
local root = GetCharacterRoot()
if not root then return end
cam.CFrame = CFrame.new(cam.CFrame.Position, targetPos)
end
local function AutoHook_IsHookOccupied(hook)
if not hook or not hook.part then return true end
for _, player in ipairs(Players:GetPlayers()) do
if player ~= LocalPlayer and IsSurvivor(player) and player.Character then
local pRoot = player.Character:FindFirstChild("HumanoidRootPart")
if pRoot then
local dist = (pRoot.Position - hook.part.Position).Magnitude
if dist < 8 then
return true
end
end
end
end
return false
end
local function AutoHook_FindBestHook()
local root = GetCharacterRoot()
if not root then return nil end
local bestHook = nil
local bestDist = math.huge
for _, hook in ipairs(Cache.Hooks) do
if hook.part and hook.part.Parent then
if not AutoHook_IsHookOccupied(hook) then
local dist = (hook.part.Position - root.Position).Magnitude
if dist < bestDist then
bestDist = dist
bestHook = hook
end
end
end
end
return bestHook
end
local function AutoHook()
if not Config.KILLER_AutoHook then
AutoHookState.phase = 0
AutoHookState.target = nil
return
end
if GetRole() ~= "Killer" then
AutoHookState.phase = 0
AutoHookState.target = nil
return
end
local root = GetCharacterRoot()
if not root then return end
local char = LocalPlayer.Character
if not char then return end
if AutoHookState.phase == 3 then
if tick() - AutoHookState.startTime > 2 then
AutoHookState.phase = 0
AutoHookState.target = nil
LastAutoHookTime = tick()
end
return
end
if AutoHookState.phase == 2 then
local hook = AutoHook_FindBestHook()
if hook and hook.part then
for _, part in ipairs(char:GetDescendants()) do
if part:IsA("BasePart") then part.CanCollide = false end
end
local hookPos = hook.part.Position
root.CFrame = CFrame.new(hookPos + Vector3.new(0, 2, 0), hookPos)
AutoHook_LookAt(hookPos)
AutoHook_SpamSpace(1.5)
task.delay(0.3, function()
if LocalPlayer.Character then
for _, part in ipairs(LocalPlayer.Character:GetDescendants()) do
if part:IsA("BasePart") and part.Name ~= "HumanoidRootPart" then
part.CanCollide = true
end
end
end
end)
AutoHookState.phase = 3
AutoHookState.startTime = tick()
else
AutoHookState.phase = 0
AutoHookState.target = nil
end
return
end
if AutoHookState.phase == 1 then
if tick() - AutoHookState.startTime > 1.5 then
AutoHookState.phase = 2
end
return
end
if tick() - LastAutoHookTime < 0.5 then return end
local closestDowned = nil
local closestDist = math.huge
for _, player in ipairs(Players:GetPlayers()) do
if player ~= LocalPlayer and IsSurvivor(player) and player.Character then
local targetRoot = player.Character:FindFirstChild("HumanoidRootPart")
local targetHum = player.Character:FindFirstChildOfClass("Humanoid")
if targetRoot and targetHum and IsPlayerDowned(targetHum) then
local dist = (targetRoot.Position - root.Position).Magnitude
if dist < closestDist then
closestDist = dist
closestDowned = {player = player, root = targetRoot}
end
end
end
end
if closestDowned then
for _, part in ipairs(char:GetDescendants()) do
if part:IsA("BasePart") then part.CanCollide = false end
end
local targetPos = closestDowned.root.Position
root.CFrame = CFrame.new(targetPos + Vector3.new(0, 3, 0), targetPos + Vector3.new(0, -5, 0))
AutoHook_LookAt(targetPos)
AutoHook_SpamSpace(1.5)
AutoHookState.phase = 1
AutoHookState.target = closestDowned.player
AutoHookState.startTime = tick()
task.delay(0.5, function()
if LocalPlayer.Character then
for _, part in ipairs(LocalPlayer.Character:GetDescendants()) do
if part:IsA("BasePart") and part.Name ~= "HumanoidRootPart" then
part.CanCollide = true
end
end
end
end)
end
end
local function AutoLoop()
while not State.Unloaded do
AutoAttack()
TeleportAway()
UpdateNoFall()
AutoWiggle()
DoubleTap()
UpdateNoSlowdown()
AutoHook()
UpdateSpeed()
UpdateNoclip()
UpdateFly()
UpdateJumpPower()
UpdateFog()
UpdateCameraFOV()
UpdateThirdPerson()
UpdateShiftLock()
UpdateHitboxes()
UpdateSpearAim()
BeatGameSurvivor()
BeatGameKiller()
task.wait(0.1)
end
end
Unload = function()
State.Unloaded = true
Config.AUTO_Generator = false
Config.AUTO_Attack = false
Config.AUTO_TeleAway = false
Config.SPEED_Enabled = false
Config.NOCLIP_Enabled = false
Config.BEAT_Survivor = false
Config.BEAT_Killer = false
Config.HITBOX_Enabled = false
Config.FLY_Enabled = false
Config.FLING_Enabled = false
Config.KILLER_DoubleTap = false
Config.KILLER_InfiniteLunge = false
Config.KILLER_AutoHook = false
Config.AUTO_SkillCheck = false
State.KillerTarget = nil
AutoHookState.phase = 0
AutoHookState.target = nil
pcall(QTE_StopMonitoring)
if QTEHandler.UIConn then
pcall(function() QTEHandler.UIConn:Disconnect() end)
QTEHandler.UIConn = nil
end
for player, originalSize in pairs(OriginalHitboxSizes) do
pcall(function()
if player and player.Character then
local root = player.Character:FindFirstChild("HumanoidRootPart")
if root then
root.Size = originalSize
root.Transparency = 1
root.CanCollide = true
end
end
end)
end
OriginalHitboxSizes = {}
pcall(function()
local hum = LocalPlayer.Character and LocalPlayer.Character:FindFirstChildOfClass("Humanoid")
if hum then hum.WalkSpeed = State.OriginalSpeed end
end)
pcall(function()
local hum = LocalPlayer.Character and LocalPlayer.Character:FindFirstChildOfClass("Humanoid")
if hum and OriginalJumpPower then hum.JumpPower = OriginalJumpPower end
end)
pcall(function()
local cam = workspace.CurrentCamera
if cam and OriginalFOV then cam.FieldOfView = OriginalFOV end
end)
pcall(function()
local hum = LocalPlayer.Character and LocalPlayer.Character:FindFirstChildOfClass("Humanoid")
if hum then hum.CameraOffset = Vector3.new(0, 0, 0) end
local cam = workspace.CurrentCamera
if cam and OriginalCameraType then cam.CameraType = OriginalCameraType end
end)
pcall(function()
if FlyBodyVelocity then FlyBodyVelocity:Destroy() end
if FlyBodyGyro then FlyBodyGyro:Destroy() end
local hum = LocalPlayer.Character and LocalPlayer.Character:FindFirstChildOfClass("Humanoid")
if hum then hum.PlatformStand = false end
end)
pcall(function()
if InfiniteJumpConnection then InfiniteJumpConnection:Disconnect() end
end)
pcall(function()
local char = LocalPlayer.Character
if char then
for _, part in ipairs(char:GetDescendants()) do
if part:IsA("BasePart") and part.Name ~= "HumanoidRootPart" then
part.CanCollide = true
end
end
end
end)
if Config.NO_Fog then
RestoreFog()
end
for name, conn in pairs(Connections) do
if conn then
pcall(function() conn:Disconnect() end)
Connections[name] = nil
end
end
for _, esp in pairs(ESP.cache) do
ESP.destroy(esp)
end
ESP.cache = {}
for _, esp in pairs(ESP.objectCache) do
ESP.destroyObject(esp)
end
ESP.objectCache = {}
Chams.ClearAll()
pcall(function()
for _, obj in pairs(workspace:GetDescendants()) do
if obj.Name == "_ViolenceChams" or obj.Name == "_ViolenceLabel" then
pcall(function() obj:Destroy() end)
end
end
for _, player in pairs(Players:GetPlayers()) do
if player.Character then
local c = player.Character:FindFirstChild("_ViolenceChams")
if c then c:Destroy() end
local l = player.Character:FindFirstChild("_ViolenceLabel")
if l then l:Destroy() end
end
end
end)
pcall(function()
Radar.bg:Remove()
Radar.circleBg:Remove()
Radar.border:Remove()
Radar.circleBorder:Remove()
Radar.cross1:Remove()
Radar.cross2:Remove()
Radar.center:Remove()
for _, d in pairs(Radar.dots) do
if d then d:Remove() end
end
for _, d in pairs(Radar.objectDots) do
if d then d:Remove() end
end
for _, d in pairs(Radar.palletSquares) do
if d then d:Remove() end
end
end)
for _, drawing in pairs(GUI.Drawings) do
if type(drawing) == "table" then
for _, subDrawing in pairs(drawing) do
if type(subDrawing) == "table" then
for _, d in pairs(subDrawing) do
SafeRemove(d)
end
else
SafeRemove(subDrawing)
end
end
else
SafeRemove(drawing)
end
end
GUI.Drawings = {}
end
local function Init()
GUI.Create()
ScanMap()
pcall(SetupAntiBlind)
pcall(SetupNoPalletStun)
pcall(SetupInfiniteJump)
pcall(SetupSkillCheckMonitor)
Connections.Input = UserInputService.InputBegan:Connect(HandleInput)
Connections.InputEnd = UserInputService.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
GUI.Dragging = false
GUI.ScrollbarDragging = false
end
if input.UserInputType == Enum.UserInputType.MouseButton2 then
if Config.AIM_UseRMB then
State.AimHolding = false
State.AimTarget = nil
end
end
end)
Connections.InputChanged = UserInputService.InputChanged:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseWheel then
HandleScroll(input)
elseif input.UserInputType == Enum.UserInputType.MouseMovement then
if GUI.ScrollbarDragging and GUI.ScrollbarBounds and GUI.MaxScroll > 0 then
local mouse = UserInputService:GetMouseLocation()
local sb = GUI.ScrollbarBounds
local pct = math.clamp((mouse.Y - sb.y) / sb.h, 0, 1)
GUI.ScrollOffset = pct * GUI.MaxScroll
end
end
end)
Connections.Render = RunService.RenderStepped:Connect(MainLoop)
task.spawn(AutoLoop)
task.spawn(function()
local repairRemote, skillRemote
local lastScan = 0
local genPoints = {}
while not State.Unloaded do
if Config.AUTO_Generator then
if not repairRemote then
local r = ReplicatedStorage:FindFirstChild("Remotes")
local g = r and r:FindFirstChild("Generator")
repairRemote = g and g:FindFirstChild("RepairEvent")
skillRemote = g and g:FindFirstChild("SkillCheckResultEvent")
end
if tick() - lastScan > 2 then
genPoints = {}
local m = Workspace:FindFirstChild("Map")
if m then
for _, v in ipairs(m:GetDescendants()) do
if v:IsA("Model") and v.Name == "Generator" then
for _, c in ipairs(v:GetChildren()) do
if c.Name:match("GeneratorPoint") then
table.insert(genPoints, {gen = v, pt = c})
end
end
end
end
end
lastScan = tick()
end
if repairRemote and skillRemote then
local mode = Config.AUTO_GenMode == "Fast"
for _, data in ipairs(genPoints) do
pcall(repairRemote.FireServer, repairRemote, data.pt, true)
pcall(skillRemote.FireServer, skillRemote, mode and "success" or "neutral", mode and 1 or 0, data.gen, data.pt)
end
end
end
task.wait(0.15)
end
end)
Connections.PlayerLeft = Players.PlayerRemoving:Connect(function(player)
if ESP.cache[player] then
ESP.hide(ESP.cache[player])
ESP.destroy(ESP.cache[player])
ESP.cache[player] = nil
end
if player.Character then
Chams.Remove(player.Character)
end
Cache.Visibility[player] = nil
end)
Connections.PlayerAdded = Players.PlayerAdded:Connect(function(player)
player.CharacterAdded:Connect(function()
task.wait(1)
ScanMap()
end)
end)
end
Init()
NOT FOR XENO USE HIGHER UNC EXECUTOR. I will see if I make a xeno script but the drawing apis are limited.. This is a free source so if there is something you think its missing or could do better, you should change it or you can request it down in comments. NO MOBILE right now.. this is just a PC script i will release a separate mobile script, but again this is a source you can always make your own.. some features may not work on all executors. Features: ESP: Boxes Names Distance Health Bars Skeleton Velocity/Prediction Offscreen Indicators Player Chams Object Chams Killer ESP Radar ESP - Objects, Killer, Survivors Survivor ESP Generator ESP Gate ESP Hook ESP Pallet ESP Window ESP Closest Hook Highlight Max Distance Aimbot: RMB Aimbot FOV Circle FOV Size Smoothing Target Part (Head/Torso/Root) Visibility Check Prediction Spear Aimbot (Veil Killer) Spear Gravity Compensation Spear Speed Survivor: Auto Generator AutoWiggle Perfect Skill Check Gen Speed (Fast/Slow) Leave Gen Hotkey Stop Gen Hotkey Leave Distance No Fall Damage Flee Killer Flee Distance Auto Parry Beat Survivor (Teleport to Exit) Killer: Auto Attack Attack Range Double Tap (Instant Kill) Infinite Lunge Hitbox Expande

Universal