-- WARNING! Dont use get all exits if baldi still doing intro thing or he will
-- be super fast
local repo = 'https://raw.githubusercontent.com/violin-suzutsuki/LinoriaLib/main/'
local Lib = loadstring(game:HttpGet(repo .. 'Library.lua'))()
local Theme = loadstring(game:HttpGet(repo .. 'addons/ThemeManager.lua'))()
local Save = loadstring(game:HttpGet(repo .. 'addons/SaveManager.lua'))()
-- ==========================================
-- ESP SYSTEM
-- ==========================================
local ESP = (function()
local self = {
Font = Enum.Font.RobotoCondensed,
Rainbow = false, Tracers = false, Unloaded = false,
ShowDistance = false, MatchColors = true, Arrows = false,
TextTransparency = 0, TracerOrigin = "Bottom",
FillTransparency = 0.75, OutlineTransparency = 0,
TextOutlineTransparency = 0, FadeTime = 0.2, RenderLimit = 240,
TracerSize = 0.5, ArrowRadius = 200, TextSize = 18, DistanceSizeRatio = 0.8,
OutlineColor = Color3.fromRGB(255, 255, 255),
RainbowColor = Color3.fromRGB(255, 255, 255),
ElementsEnabled = {}, TransparencyEnabled = {},
Highlights = {}, Labels = {}, Frames = {}, Lines = {},
ArrowsTable = {}, ColorTable = {}, TextTable = {},
ConnectionsTable = {}, Objects = {}, TotalObjects = {},
NotebookObjects = {}
}
local rs = {h = 0, hue = 0, step = 0, color = Color3.new()}
local rbConn, camConn
local cloneref = cloneref or function(o) return o end
local Players = cloneref(game:GetService("Players"))
local coregui = getgenv and cloneref(game:GetService("CoreGui")) or Players.LocalPlayer.PlayerGui
local ws = cloneref(workspace)
local runsvc = cloneref(game:GetService("RunService"))
local tween = cloneref(game:GetService("TweenService"))
local uis = cloneref(game:GetService("UserInputService"))
local lp = Players.LocalPlayer
local function getHiddenUI()
if gethui then return gethui() end
local f = Instance.new("Folder", coregui)
f.Name = ("%032x"):format(math.random(0, 2^31))
return f
end
function self:randstr()
local s = {}
local pool = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
for i = 1, 24 do s[i] = pool:sub(math.random(1, #pool)) end
return table.concat(s)
end
local hiddenUI = getHiddenUI()
local cam = ws.CurrentCamera
local sg = Instance.new("ScreenGui")
sg.ResetOnSpawn = false
sg.IgnoreGuiInset = true
sg.Name = self:randstr()
sg.Parent = hiddenUI
local hlFolder = Instance.new("Folder")
hlFolder.Name = self:randstr()
hlFolder.Parent = sg
local bbFolder = Instance.new("Folder")
bbFolder.Name = self:randstr()
bbFolder.Parent = sg
local trFrame = Instance.new("Frame")
trFrame.Size = UDim2.new(1, 0, 1, 0)
trFrame.BackgroundTransparency = 1
trFrame.Visible = false
trFrame.Name = self:randstr()
trFrame.Parent = sg
local arFrame = Instance.new("Frame")
arFrame.Size = UDim2.new(1, 0, 1, 0)
arFrame.BackgroundTransparency = 1
arFrame.Visible = false
arFrame.Name = self:randstr()
arFrame.Parent = sg
local arrowTpl = Instance.new("ImageLabel")
arrowTpl.Image = "rbxassetid://16368985219"
arrowTpl.Size = UDim2.new(0, 50, 0, 50)
arrowTpl.AnchorPoint = Vector2.new(0.5, 0.5)
arrowTpl.BackgroundTransparency = 1
arrowTpl.ImageTransparency = 1
local arCon = Instance.new("UIAspectRatioConstraint")
arCon.AspectRatio = 1
arCon.Name = self:randstr()
arCon.Parent = arrowTpl
local function mkTween(obj, props)
if not obj or not obj.Parent then return nil end
return tween:Create(obj, TweenInfo.new(self.FadeTime, Enum.EasingStyle.Quad), props)
end
local function playTween(obj, props)
if not obj or not obj.Parent then return end
local t = mkTween(obj, props)
if t then t:Play() end
end
local function destroyData(obj)
if self.Highlights[obj] then self.Highlights[obj]:Destroy() self.Highlights[obj] = nil end
if self.Frames[obj] then self.Frames[obj]:Destroy() self.Frames[obj] = nil end
if self.Lines[obj] then
if self.Lines[obj][1] then self.Lines[obj][1]:Destroy() end
self.Lines[obj] = nil
end
if self.ArrowsTable[obj] then self.ArrowsTable[obj]:Destroy() self.ArrowsTable[obj] = nil end
if self.ConnectionsTable[obj] then
for _, c in ipairs(self.ConnectionsTable[obj]) do c:Disconnect() end
self.ConnectionsTable[obj] = nil
end
self.Labels[obj] = nil
self.ColorTable[obj] = nil
self.TextTable[obj] = nil
self.ElementsEnabled[obj] = nil
self.TransparencyEnabled[obj] = nil
self.Objects[obj] = nil
self.NotebookObjects[obj] = nil
for i = #self.TotalObjects, 1, -1 do
if self.TotalObjects[i] == obj then table.remove(self.TotalObjects, i) break end
end
end
function self:AddESP(params)
local obj = params.Object
if self.ElementsEnabled[obj] == true or self.Unloaded then return end
if not obj:IsA("BasePart") and not obj:IsA("Model") then return end
self.ElementsEnabled[obj] = true
self.TransparencyEnabled[obj] = false
self.ConnectionsTable[obj] = self.ConnectionsTable[obj] or {}
if params.IsNotebook then
self.NotebookObjects[obj] = true
end
local hl = Instance.new("Highlight")
hl.FillTransparency = 1
hl.OutlineTransparency = 1
hl.Name = self:randstr()
hl.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
hl.Adornee = obj
hl.Parent = hlFolder
self.Highlights[obj] = hl
local tf = Instance.new("Frame")
tf.Visible = false
tf.Name = self:randstr()
tf.Size = UDim2.fromScale(1, 1)
tf.BackgroundTransparency = 1
tf.AnchorPoint = Vector2.new(0.5, 0.5)
tf.Parent = bbFolder
local tl = Instance.new("TextLabel")
tl.Name = self:randstr()
tl.BackgroundTransparency = 1
tl.Text = params.Text
tl.TextTransparency = 1
tl.TextStrokeTransparency = self.TextOutlineTransparency
tl.Size = UDim2.new(1, 0, 1, 0)
tl.Font = self.Font
tl.TextSize = self.TextSize
tl.RichText = true
tl.TextColor3 = params.Color
tl.Parent = tf
self.Frames[obj] = tf
self.Labels[obj] = tl
self.ColorTable[obj] = params.Color
self.TextTable[obj] = params.Text
self.Objects[obj] = obj
table.insert(self.TotalObjects, obj)
playTween(hl, {FillTransparency = self.FillTransparency})
playTween(hl, {OutlineTransparency = self.OutlineTransparency})
local fade = mkTween(tl, {TextTransparency = self.TextTransparency})
if fade then
fade.Completed:Once(function() self.TransparencyEnabled[obj] = true end)
fade:Play()
end
playTween(tl, {TextStrokeTransparency = self.TextOutlineTransparency})
local lf = Instance.new("Frame")
lf.Size = UDim2.new(0, 0, 0, 0)
lf.BackgroundTransparency = 1
lf.AnchorPoint = Vector2.new(0.5, 0.5)
lf.Name = self:randstr()
lf.Parent = trFrame
local sk = Instance.new("UIStroke")
sk.Thickness = self.TracerSize
sk.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
sk.Transparency = 1
sk.Name = self:randstr()
sk.Parent = lf
playTween(lf, {BackgroundTransparency = 0})
playTween(sk, {Transparency = 0})
self.Lines[obj] = {lf, sk}
task.spawn(function()
local last = 0
local function render()
if not obj or not obj:IsDescendantOf(game) then
self:RemoveESP(obj)
return
end
if self.NotebookObjects[obj] then
local bbg = obj:FindFirstChildWhichIsA("BillboardGui")
if bbg and not bbg.Enabled then
self:RemoveESP(obj)
return
end
end
local pos = obj:GetPivot().Position
local sp, onScreen = cam:WorldToViewportPoint(pos)
local frame = self.Frames[obj]
local label = self.Labels[obj]
local ch = self.Highlights[obj]
local ld = self.Lines[obj]
if ld and ld[1] then ld[1].Visible = onScreen end
if frame then
frame.Visible = onScreen
if onScreen then frame.Position = UDim2.new(0, sp.X, 0, sp.Y) end
end
if not onScreen then
if ch then ch:Destroy() self.Highlights[obj] = nil ch = nil end
elseif self.ElementsEnabled[obj] == true and not ch then
ch = Instance.new("Highlight")
ch.FillTransparency = 1
ch.OutlineTransparency = 1
ch.Name = self:randstr()
ch.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
ch.Adornee = obj
ch.Parent = hlFolder
self.Highlights[obj] = ch
end
local color = self.Rainbow and rs.color or self.ColorTable[obj] or Color3.fromRGB(255, 255, 255)
if label then label.TextColor3 = color end
if ch then
local dist = math.floor((cam.CFrame.Position - pos).Magnitude)
local distText = self.ShowDistance and ("\n" .. '<font size="' .. math.round(self.TextSize * self.DistanceSizeRatio) .. '">[' .. dist .. ']</font>') or ""
if label then label.Text = self.TextTable[obj] .. distText end
ch.Enabled = true
ch.FillColor = color
ch.OutlineColor = self.MatchColors and color or self.OutlineColor
if self.TransparencyEnabled[obj] == true then
ch.FillTransparency = self.FillTransparency
ch.OutlineTransparency = self.OutlineTransparency
if label then
label.TextTransparency = self.TextTransparency
label.TextStrokeTransparency = self.TextOutlineTransparency
end
end
end
if ld and ch and self.Tracers and onScreen then
local ss = cam.ViewportSize
local origin
if self.TracerOrigin == "Center" then origin = Vector2.new(ss.X / 2, ss.Y / 2)
elseif self.TracerOrigin == "Top" then origin = Vector2.new(ss.X / 2, 0)
elseif self.TracerOrigin == "Mouse" then origin = Vector2.new(lp:GetMouse().X, uis:GetMouseLocation().Y)
else origin = Vector2.new(ss.X / 2, ss.Y) end
local dest = Vector2.new(sp.X, sp.Y)
local mid = (origin + dest) / 2
local rot = math.deg(math.atan2(dest.Y - origin.Y, dest.X - origin.X))
local len = (origin - dest).Magnitude
ld[1].Position = UDim2.new(0, mid.X, 0, mid.Y)
ld[1].Size = UDim2.new(0, len, 0, 1)
ld[1].Rotation = rot
ld[1].BackgroundColor3 = color
ld[1].BorderSizePixel = 0
ld[1].Visible = true
ld[2].Color = color
ld[2].Thickness = self.TracerSize
end
if self.Arrows then
local ar = self.ArrowsTable[obj]
if ar == nil and self.ElementsEnabled[obj] == true then
ar = arrowTpl:Clone()
ar.Name = self:randstr()
ar:WaitForChild(arCon.Name, 5)
ar.Parent = arFrame
self.ArrowsTable[obj] = ar
playTween(ar, {ImageTransparency = 0})
elseif ar and self.ElementsEnabled[obj] == true then
if onScreen and sp.Z > 0 then ar.Visible = false
else
local ss = cam.ViewportSize
local sc = Vector2.new(ss.X / 2, ss.Y / 2)
local toObj = (pos - cam.CFrame.Position).Unit
local dir = Vector2.new(sp.X, sp.Y) - sc
if cam.CFrame.LookVector:Dot(toObj) < 0 then dir = -dir end
local angle = math.atan2(dir.Y, dir.X)
local radius = math.min(ss.X, ss.Y) / 2 - (400 - self.ArrowRadius)
local ap = sc + dir.Unit * radius
ar.Position = UDim2.new(0, ap.X, 0, ap.Y)
ar.Rotation = math.deg(angle) - 90
ar.Visible = true
ar.ImageColor3 = self.Rainbow and self.RainbowColor or self.ColorTable[obj]
end
end
end
end
local conn
conn = runsvc.Heartbeat:Connect(function(dt)
last = last + dt
if last >= 1 / self.RenderLimit then
last = 0
if self.ElementsEnabled[obj] ~= true then conn:Disconnect() return end
render()
end
end)
table.insert(self.ConnectionsTable[obj], conn)
end)
end
function self:RemoveESP(obj)
if self.Unloaded or self.ElementsEnabled[obj] ~= true then return end
self.ElementsEnabled[obj] = false
self.TransparencyEnabled[obj] = false
if self.Labels[obj] and self.Labels[obj].Parent then
playTween(self.Labels[obj], {TextTransparency = 1})
end
if self.Lines[obj] then
if self.Lines[obj][1] and self.Lines[obj][1].Parent then
playTween(self.Lines[obj][1], {BackgroundTransparency = 1})
end
if self.Lines[obj][2] and self.Lines[obj][2].Parent then
playTween(self.Lines[obj][2], {Transparency = 1})
end
end
if self.Highlights[obj] and self.Highlights[obj].Parent then
playTween(self.Highlights[obj], {FillTransparency = 1})
playTween(self.Highlights[obj], {OutlineTransparency = 1})
end
if self.ArrowsTable[obj] and self.ArrowsTable[obj].Parent then
playTween(self.ArrowsTable[obj], {ImageTransparency = 1})
end
task.delay(self.FadeTime + 0.05, function()
if self.ElementsEnabled[obj] == false then
destroyData(obj)
else
if self.Highlights[obj] and self.Highlights[obj].Parent then
playTween(self.Highlights[obj], {FillTransparency = self.FillTransparency})
playTween(self.Highlights[obj], {OutlineTransparency = self.OutlineTransparency})
end
end
end)
end
function self:UpdateText(obj, text)
if self.TextTable[obj] then self.TextTable[obj] = text end
end
function self:UpdateColor(obj, color)
self.ColorTable[obj] = color
if self.Labels[obj] and not self.Rainbow then self.Labels[obj].TextColor3 = color end
end
function self:Unload()
if self.Unloaded then return end
self.Unloaded = true
for _, o in pairs(self.Objects) do self:RemoveESP(o) end
for _, conns in pairs(self.ConnectionsTable) do
for _, c in ipairs(conns) do c:Disconnect() end
end
if rbConn then rbConn:Disconnect() end
if camConn then camConn:Disconnect() end
sg.Enabled = false
end
rbConn = runsvc.RenderStepped:Connect(function(dt)
rs.step = rs.step + dt
if rs.step >= (1 / 60) then
rs.step = 0
rs.h = rs.h + (1 / 400)
if rs.h > 1 then rs.h = 0 end
rs.hue = rs.h
rs.color = Color3.fromHSV(rs.hue, 0.8, 1)
self.RainbowColor = rs.color
end
end)
camConn = ws:GetPropertyChangedSignal("CurrentCamera"):Connect(function()
cam = ws.CurrentCamera
end)
return self
end)()
-- ==========================================
-- MAIN MENU
-- ==========================================
local Window = Lib:CreateWindow({
Title = 'Lighting + ESP + Speed + Game',
Center = true, AutoShow = true, TabPadding = 8, MenuFadeTime = 0.2
})
local Tabs = {
Main = Window:AddTab('Main'),
Game = Window:AddTab('Game'),
Speed = Window:AddTab('Speed'),
ESP = Window:AddTab('ESP'),
['UI Settings'] = Window:AddTab('UI Settings'),
}
-- ==========================================
-- VARIABLES
-- ==========================================
local lp = game:GetService('Players').LocalPlayer
local Lighting = game:GetService('Lighting')
local fogOn = false
local fogSaved = {}
local fogConns = {}
local fogSelfChange = false
local ccOff = false
local fireOff = false
local cinOff = false
local walkSpd = 16
local runSpd = 24
local pColor = Color3.fromRGB(0, 255, 0)
local bColor = Color3.fromRGB(255, 0, 0)
local tColor = Color3.fromRGB(255, 255, 0)
local nColor = Color3.fromRGB(0, 255, 255)
local pEsp = false
local bEsp = false
local tEsp = false
local nEsp = false
local function getNum(obj, fb)
if typeof(obj) == "number" then return obj end
if typeof(obj) == "Instance" and obj:IsA("ValueBase") then return obj.Value end
return fb
end
-- ==========================================
-- TAB: MAIN (Lighting & UI)
-- ==========================================
local lgMain = Tabs.Main:AddLeftGroupbox('Lighting')
lgMain:AddToggle('FogToggle', {
Text = 'Remove Fog',
Default = false,
Callback = function(v)
fogOn = v
if v then
fogSaved.FogEnd = Lighting.FogEnd
fogSaved.FogStart = Lighting.FogStart or 0
fogSelfChange = true
Lighting.FogEnd = 9999
fogSelfChange = false
fogConns[#fogConns + 1] = Lighting:GetPropertyChangedSignal("FogEnd"):Connect(function()
if not fogSelfChange and fogOn then
fogSaved.FogEnd = Lighting.FogEnd
fogSelfChange = true
Lighting.FogEnd = 9999
fogSelfChange = false
end
end)
fogConns[#fogConns + 1] = Lighting:GetPropertyChangedSignal("FogStart"):Connect(function()
if not fogSelfChange and fogOn then
fogSaved.FogStart = Lighting.FogStart
end
end)
else
for _, conn in ipairs(fogConns) do conn:Disconnect() end
fogConns = {}
fogSelfChange = true
if fogSaved.FogEnd then Lighting.FogEnd = fogSaved.FogEnd end
if fogSaved.FogStart then Lighting.FogStart = fogSaved.FogStart end
fogSelfChange = false
end
end
})
lgMain:AddToggle('ColorCorrectionToggle', {
Text = 'Disable ColorCorrection',
Default = false,
Callback = function(v)
ccOff = v
local cc = Lighting:FindFirstChildOfClass('ColorCorrectionEffect')
if cc then cc.Enabled = not v end
end
})
lgMain:AddDivider()
lgMain:AddToggle('FireUIToggle', {
Text = 'Hide Fire UI',
Default = false,
Callback = function(v)
fireOff = v
local g = lp.PlayerGui:FindFirstChild('Fire')
if g then g.Enabled = not v end
end
})
lgMain:AddToggle('CinematicUIToggle', {
Text = 'Hide Cinematic UI',
Default = false,
Callback = function(v)
cinOff = v
local g = lp.PlayerGui:FindFirstChild('Cinematic')
if g then g.Enabled = not v end
end
})
-- ==========================================
-- TAB: GAME
-- ==========================================
local lgGame = Tabs.Game:AddLeftGroupbox('Game Actions')
lgGame:AddButton('Collect All Notebooks', function()
local map = workspace:FindFirstChild("Map")
if not map then return end
local notebooksFolder = map:FindFirstChild("Notebooks")
if not notebooksFolder then return end
local char = lp.Character
if not char then return end
local root = char:FindFirstChild("HumanoidRootPart")
if not root then return end
local origCFrame = root.CFrame
local collected = 0
for _, book in ipairs(notebooksFolder:GetChildren()) do
if book:IsA("Model") or book:IsA("BasePart") then
root.CFrame = book:GetPivot() + Vector3.new(0, 3, 0)
task.wait(0.1)
local cd = book:FindFirstChildWhichIsA("ClickDetector")
if cd then
if fireclickdetector then
pcall(function() fireclickdetector(cd) end)
end
end
if firetouchinterest then
pcall(function()
local part = book:IsA("BasePart") and book or book:FindFirstChildWhichIsA("BasePart")
if part then firetouchinterest(part, root, 0) end
end)
end
task.wait(0.1)
collected = collected + 1
end
end
root.CFrame = origCFrame
print("Collected " .. collected .. " notebooks, teleported back")
end)
lgGame:AddButton('Get All Exits', function()
local map = workspace:FindFirstChild("Map")
if not map then return end
local exitsFolder = map:FindFirstChild("Exit")
if not exitsFolder then return end
local char = lp.Character
if not char then return end
local root = char:FindFirstChild("HumanoidRootPart")
if not root then return end
local origCFrame = root.CFrame
local touched = 0
for _, exitObj in ipairs(exitsFolder:GetChildren()) do
root.CFrame = exitObj:GetPivot() + Vector3.new(0, 3, 0)
task.wait(0.1)
if firetouchinterest then
pcall(function()
local part = exitObj:IsA("BasePart") and exitObj or exitObj:FindFirstChildWhichIsA("BasePart")
if part then firetouchinterest(part, root, 0) end
end)
end
local ti = exitObj:FindFirstChildWhichIsA("TouchInterest")
if not ti then ti = exitObj:FindFirstChildWhichIsA("TouchInterest", true) end
if ti then
pcall(function() ti.Touched:Fire(root) end)
end
task.wait(0.1)
touched = touched + 1
end
root.CFrame = origCFrame
print("Triggered " .. touched .. " exits, teleported back")
end)
lgGame:AddDivider()
lgGame:AddButton('Delete All Blocks', function()
local map = workspace:FindFirstChild("Map")
if not map then return end
local blocksFolder = map:FindFirstChild("BlockWall")
if not blocksFolder then return end
local children = {}
for _, obj in ipairs(blocksFolder:GetChildren()) do
table.insert(children, obj)
end
local count = 0
for _, obj in ipairs(children) do
if obj:IsA("BasePart") or obj:IsA("Model") then
obj:Destroy()
count = count + 1
end
end
print("Deleted " .. count .. " blocks from BlockWall")
end)
lgGame:AddDivider()
-- See Baldi (Through Walls) — проверка раз в 1 секунду
local baldiCheckConnection = nil
local baldiSeeEnabled = false
lgGame:AddToggle('SeeBaldiToggle', {
Text = 'See Baldi (Through Walls)',
Default = false,
Callback = function(v)
baldiSeeEnabled = v
if baldiCheckConnection then
baldiCheckConnection:Disconnect()
baldiCheckConnection = nil
end
if not v then
local map = workspace:FindFirstChild("Map")
if map then
local npcFolder = map:FindFirstChild("Npc")
if npcFolder then
local baldi = npcFolder:FindFirstChild("Baldi")
if baldi then
local root = baldi:FindFirstChild("HumanoidRootPart")
if root then
local billboard = root:FindFirstChildWhichIsA("BillboardGui")
if billboard then
billboard.AlwaysOnTop = false
billboard.Enabled = true
end
end
end
end
end
print("Baldi visibility disabled")
return
end
local lastCheck = 0
baldiCheckConnection = game:GetService("RunService").Heartbeat:Connect(function()
lastCheck = lastCheck + 1
if lastCheck < 60 then return end
lastCheck = 0
if not baldiSeeEnabled then return end
local map = workspace:FindFirstChild("Map")
if not map then return end
local npcFolder = map:FindFirstChild("Npc")
if not npcFolder then return end
local baldi = npcFolder:FindFirstChild("Baldi")
if not baldi then return end
local root = baldi:FindFirstChild("HumanoidRootPart")
if not root then return end
local billboard = root:FindFirstChildWhichIsA("BillboardGui")
if billboard then
billboard.AlwaysOnTop = true
billboard.Enabled = true
else
for _, obj in ipairs(root:GetDescendants()) do
if obj:IsA("BillboardGui") then
obj.AlwaysOnTop = true
obj.Enabled = true
break
end
end
end
end)
print("Baldi visibility enabled. Auto-check running every 1 second.")
end
})
-- Click Aura
lgGame:AddDivider()
local clickAuraOn = false
local notebookAuraDist = 15
local doorAuraDist = 15
lgGame:AddToggle('ClickAuraToggle', {
Text = 'Click Aura',
Default = false,
Callback = function(v)
clickAuraOn = v
end
})
lgGame:AddSlider('NotebookAuraDist', {
Text = 'Notebook Aura Distance',
Default = 15,
Min = 5, Max = 200, Rounding = 0,
Callback = function(v)
notebookAuraDist = v
end
})
lgGame:AddSlider('DoorAuraDist', {
Text = 'Door Aura Distance',
Default = 15,
Min = 5, Max = 200, Rounding = 0,
Callback = function(v)
doorAuraDist = v
end
})
task.spawn(function()
while true do
task.wait(0.1)
if not clickAuraOn then continue end
local char = lp.Character
if not char then continue end
local root = char:FindFirstChild("HumanoidRootPart")
if not root then continue end
local rootPos = root.Position
local map = workspace:FindFirstChild("Map")
if not map then continue end
local notebooksFolder = map:FindFirstChild("Notebooks")
if notebooksFolder then
for _, book in ipairs(notebooksFolder:GetChildren()) do
local cd = book:FindFirstChildWhichIsA("ClickDetector")
if cd then
local bookPos = book:GetPivot().Position
local dist = (rootPos - bookPos).Magnitude
if dist <= notebookAuraDist then
if fireclickdetector then
pcall(function() fireclickdetector(cd) end)
end
end
end
end
end
local doorFolder = map:FindFirstChild("Door")
if doorFolder then
for _, door in ipairs(doorFolder:GetChildren()) do
local clickDoor = door:FindFirstChild("ClickDoor")
if clickDoor then
local cd = clickDoor:FindFirstChildWhichIsA("ClickDetector")
if cd then
local doorPos = clickDoor:GetPivot().Position
local dist = (rootPos - doorPos).Magnitude
if dist <= doorAuraDist then
if fireclickdetector then
pcall(function() fireclickdetector(cd) end)
end
end
end
end
end
end
end
end)
-- ==========================================
-- TAB: SPEED
-- ==========================================
local sg = Tabs.Speed:AddLeftGroupbox('Speed Settings')
local cWalk = getNum(lp.WalkSpeed, 16)
local cRun = getNum(lp.RunSpeed, 24)
walkSpd = cWalk
runSpd = cRun
sg:AddSlider('WalkSpeedSlider', {
Text = 'WalkSpeed',
Default = cWalk,
Min = 0, Max = 500, Rounding = 0,
Callback = function(v)
walkSpd = v
local w = lp.WalkSpeed
if typeof(w) == "Instance" and w:IsA("ValueBase") then w.Value = v else lp.WalkSpeed = v end
end
})
sg:AddSlider('RunSpeedSlider', {
Text = 'RunSpeed',
Default = cRun,
Min = 0, Max = 500, Rounding = 0,
Callback = function(v)
runSpd = v
local r = lp.RunSpeed
if typeof(r) == "Instance" and r:IsA("ValueBase") then r.Value = v else lp.RunSpeed = v end
end
})
sg:AddDivider()
local noAccel = false
local noAccelConn
sg:AddToggle('RemoveAcceleration', {
Text = 'Remove Acceleration',
Default = false,
Callback = function(v)
noAccel = v
if v then
noAccelConn = game:GetService('RunService').Heartbeat:Connect(function()
local root, hum = lp.Character and lp.Character:FindFirstChild('HumanoidRootPart'), lp.Character and lp.Character:FindFirstChildOfClass('Humanoid')
if not root or not hum or hum.Health <= 0 then return end
local spd = walkSpd
local dir = hum.MoveDirection
if dir.Magnitude > 0 then
root.AssemblyLinearVelocity = Vector3.new(dir.X * spd, root.AssemblyLinearVelocity.Y, dir.Z * spd)
else
root.AssemblyLinearVelocity = Vector3.new(0, root.AssemblyLinearVelocity.Y, 0)
end
end)
else
if noAccelConn then noAccelConn:Disconnect() noAccelConn = nil end
end
end
})
-- ==========================================
-- TAB: ESP
-- ==========================================
local function refreshPlayer(p)
if not pEsp or p == lp then return end
local c = p.Character
if not c or ESP.ElementsEnabled[c] == true then return end
if c:FindFirstChild('HumanoidRootPart') then
ESP:AddESP({Object = c, Text = p.DisplayName or p.Name, Color = pColor})
end
end
local function refreshAllPlayers()
if not pEsp then return end
for _, p in ipairs(game:GetService('Players'):GetPlayers()) do
if p ~= lp then refreshPlayer(p) end
end
end
local function refreshBaldi()
if not bEsp then return end
local b = workspace:FindFirstChild("Map")
if b then b = b:FindFirstChild("Npc") end
if b then b = b:FindFirstChild("Baldi") end
if b and ESP.ElementsEnabled[b] ~= true then
ESP:AddESP({Object = b, Text = 'Baldi', Color = bColor})
end
end
local function refreshTiles()
if not tEsp then return end
local m = workspace:FindFirstChild("Map")
if not m then return end
local f = m:FindFirstChild("ProjectTile")
if not f then return end
for _, item in ipairs(f:GetChildren()) do
if not ESP.ElementsEnabled[item] and (item:IsA("BasePart") or item:IsA("Model")) then
ESP:AddESP({Object = item, Text = item.Name, Color = tColor})
end
end
end
local function refreshNotebooks()
if not nEsp then return end
local map = workspace:FindFirstChild("Map")
if not map then return end
local notebooksFolder = map:FindFirstChild("Notebooks")
if not notebooksFolder then return end
for _, book in ipairs(notebooksFolder:GetChildren()) do
if (book:IsA("Model") or book:IsA("BasePart")) and not ESP.ElementsEnabled[book] then
local bbg = book:FindFirstChildWhichIsA("BillboardGui")
if bbg and not bbg.Enabled then continue end
ESP:AddESP({Object = book, Text = "Book", Color = nColor, IsNotebook = true})
end
end
end
local eg = Tabs.ESP:AddLeftGroupbox('ESP Settings')
eg:AddToggle('PlayerESPToggle', {
Text = 'Player ESP',
Default = false,
Callback = function(v)
pEsp = v
if v then
for _, p in ipairs(game:GetService('Players'):GetPlayers()) do
if p ~= lp and p.Character and p.Character:FindFirstChild('HumanoidRootPart') then
ESP:AddESP({Object = p.Character, Text = p.DisplayName or p.Name, Color = pColor})
end
end
else
for _, p in ipairs(game:GetService('Players'):GetPlayers()) do
if p ~= lp and p.Character then ESP:RemoveESP(p.Character) end
end
end
end
})
eg:AddToggle('NpcESPToggle', {
Text = 'Baldi ESP',
Default = false,
Callback = function(v)
bEsp = v
local b = workspace:FindFirstChild("Map")
if b then b = b:FindFirstChild("Npc"); if b then b = b:FindFirstChild("Baldi") end end
if v and b then ESP:AddESP({Object = b, Text = 'Baldi', Color = bColor})
elseif not v and b then ESP:RemoveESP(b) end
end
})
eg:AddToggle('ProjectTileESPToggle', {
Text = 'ProjectTile ESP',
Default = false,
Callback = function(v)
tEsp = v
local m = workspace:FindFirstChild("Map")
if not m then return end
local f = m:FindFirstChild("ProjectTile")
if not f then return end
if v then
for _, item in ipairs(f:GetChildren()) do
if item:IsA("BasePart") or item:IsA("Model") then
ESP:AddESP({Object = item, Text = item.Name, Color = tColor})
end
end
else
for _, item in ipairs(f:GetChildren()) do ESP:RemoveESP(item) end
end
end
})
eg:AddToggle('NotebookESPToggle', {
Text = 'Notebook ESP',
Default = false,
Callback = function(v)
nEsp = v
if v then
refreshNotebooks()
else
local map = workspace:FindFirstChild("Map")
if map then
local f = map:FindFirstChild("Notebooks")
if f then
for _, item in ipairs(f:GetChildren()) do ESP:RemoveESP(item) end
end
end
end
end
})
eg:AddDivider()
eg:AddLabel('Player Color'):AddColorPicker('PlayerColor', {
Default = pColor,
Title = 'Player ESP Color',
Callback = function(c)
pColor = c
for _, p in ipairs(game:GetService('Players'):GetPlayers()) do
if p ~= lp and p.Character then ESP:UpdateColor(p.Character, c) end
end
end
})
eg:AddLabel('Baldi Color'):AddColorPicker('NpcColor', {
Default = bColor,
Title = 'Baldi ESP Color',
Callback = function(c)
bColor = c
local b = workspace:FindFirstChild("Map")
if b then b = b:FindFirstChild("Npc"); if b then b = b:FindFirstChild("Baldi") end end
if b then ESP:UpdateColor(b, c) end
end
})
eg:AddLabel('ProjectTile Color'):AddColorPicker('ProjectTileColor', {
Default = tColor,
Title = 'ProjectTile ESP Color',
Callback = function(c)
tColor = c
local m = workspace:FindFirstChild("Map")
if not m then return end
local f = m:FindFirstChild("ProjectTile")
if not f then return end
for _, item in ipairs(f:GetChildren()) do ESP:UpdateColor(item, c) end
end
})
eg:AddLabel('Notebook Color'):AddColorPicker('NotebookColor', {
Default = nColor,
Title = 'Notebook ESP Color',
Callback = function(c)
nColor = c
local map = workspace:FindFirstChild("Map")
if not map then return end
local f = map:FindFirstChild("Notebooks")
if not f then return end
for _, item in ipairs(f:GetChildren()) do ESP:UpdateColor(item, c) end
end
})
local eo = Tabs.ESP:AddRightGroupbox('ESP Options')
eo:AddToggle('ShowDistance', {
Text = 'Show Distance',
Default = false,
Callback = function(v) ESP.ShowDistance = v end
})
eo:AddToggle('Tracers', {
Text = 'Tracers',
Default = false,
Callback = function(v) ESP.Tracers = v end
})
eo:AddDropdown('TracerOrigin', {
Values = {'Bottom', 'Center', 'Top', 'Mouse'},
Default = 1,
Text = 'Tracer Origin',
Callback = function(v) ESP.TracerOrigin = v end
})
eo:AddSlider('TracerSize', {
Text = 'Tracer Thickness',
Default = 1, Min = 1, Max = 5, Rounding = 0,
Callback = function(v) ESP.TracerSize = v end
})
eo:AddToggle('Rainbow', {
Text = 'Rainbow Color',
Default = false,
Callback = function(v) ESP.Rainbow = v end
})
eo:AddToggle('Arrows', {
Text = 'Off-screen Arrows',
Default = false,
Callback = function(v) ESP.Arrows = v end
})
eo:AddSlider('TextSize', {
Text = 'Text Size',
Default = 18, Min = 8, Max = 40, Rounding = 0,
Callback = function(v) ESP.TextSize = v end
})
eo:AddSlider('FillTransparency', {
Text = 'Fill Transparency',
Default = 0.75, Min = 0, Max = 1, Rounding = 2,
Callback = function(v) ESP.FillTransparency = v end
})
-- ==========================================
-- ENFORCE LOOP
-- ==========================================
task.spawn(function()
while true do
task.wait(1)
local cc = Lighting:FindFirstChildOfClass('ColorCorrectionEffect')
if cc then
if ccOff and cc.Enabled ~= false then cc.Enabled = false
elseif not ccOff and cc.Enabled ~= true then cc.Enabled = true end
end
local fg = lp.PlayerGui:FindFirstChild('Fire')
if fg then
if fireOff and fg.Enabled ~= false then fg.Enabled = false
elseif not fireOff and fg.Enabled ~= true then fg.Enabled = true end
end
local cg = lp.PlayerGui:FindFirstChild('Cinematic')
if cg then
if cinOff and cg.Enabled ~= false then cg.Enabled = false
elseif not cinOff and cg.Enabled ~= true then cg.Enabled = true end
end
local wRaw = lp.WalkSpeed
local wCur = getNum(wRaw, 16)
if wCur ~= walkSpd then
if typeof(wRaw) == "Instance" and wRaw:IsA("ValueBase") then wRaw.Value = walkSpd
else pcall(function() lp.WalkSpeed = walkSpd end) end
end
local rRaw = lp.RunSpeed
local rCur = getNum(rRaw, 24)
if rCur ~= runSpd then
if typeof(rRaw) == "Instance" and rRaw:IsA("ValueBase") then rRaw.Value = runSpd
else pcall(function() lp.RunSpeed = runSpd end) end
end
end
end)
-- ==========================================
-- ESP REFRESH LOOP
-- ==========================================
local plrs = game:GetService('Players')
task.spawn(function()
while true do
task.wait(5)
if pEsp then refreshAllPlayers() end
if bEsp then refreshBaldi() end
if tEsp then refreshTiles() end
if nEsp then refreshNotebooks() end
end
end)
-- ==========================================
-- PLAYER EVENTS
-- ==========================================
plrs.PlayerAdded:Connect(function(p)
p.CharacterAdded:Connect(function(c)
task.wait(0.5)
if pEsp and c:FindFirstChild('HumanoidRootPart') then
ESP:AddESP({Object = c, Text = p.DisplayName or p.Name, Color = pColor})
end
end)
end)
plrs.PlayerRemoving:Connect(function(p)
if not pEsp then return end
if p.Character then ESP:RemoveESP(p.Character) end
end)
for _, p in ipairs(plrs:GetPlayers()) do
if p ~= lp then
p.CharacterAdded:Connect(function(c)
task.wait(0.5)
if pEsp and c:FindFirstChild('HumanoidRootPart') then
ESP:AddESP({Object = c, Text = p.DisplayName or p.Name, Color = pColor})
end
end)
end
end
-- ==========================================
-- CHILDADDED EVENTS
-- ==========================================
task.spawn(function()
local m = workspace:FindFirstChild("Map")
if not m then
local conn = workspace.ChildAdded:Connect(function(child)
if child.Name == "Map" then
conn:Disconnect()
local f = child:FindFirstChild("ProjectTile")
if f then
f.ChildAdded:Connect(function(item)
if tEsp and (item:IsA("BasePart") or item:IsA("Model")) then
task.wait(0.1)
ESP:AddESP({Object = item, Text = item.Name, Color = tColor})
end
end)
end
end
end)
else
local f = m:FindFirstChild("ProjectTile")
if f then
f.ChildAdded:Connect(function(item)
if tEsp and (item:IsA("BasePart") or item:IsA("Model")) then
task.wait(0.1)
ESP:AddESP({Object = item, Text = item.Name, Color = tColor})
end
end)
end
end
end)
task.spawn(function()
local m = workspace:FindFirstChild("Map")
if not m then
local conn = workspace.ChildAdded:Connect(function(child)
if child.Name == "Map" then
conn:Disconnect()
local f = child:FindFirstChild("Notebooks")
if f then
f.ChildAdded:Connect(function(item)
if nEsp and (item:IsA("BasePart") or item:IsA("Model")) then
task.wait(0.1)
ESP:AddESP({Object = item, Text = "Book", Color = nColor, IsNotebook = true})
end
end)
end
end
end)
else
local f = m:FindFirstChild("Notebooks")
if f then
f.ChildAdded:Connect(function(item)
if nEsp and (item:IsA("BasePart") or item:IsA("Model")) then
task.wait(0.1)
ESP:AddESP({Object = item, Text = "Book", Color = nColor, IsNotebook = true})
end
end)
end
end
end)
-- ==========================================
-- TAB: UI SETTINGS
-- ==========================================
local mg = Tabs['UI Settings']:AddLeftGroupbox('Menu')
mg:AddButton('Unload', function() ESP:Unload(); Lib:Unload() end)
mg:AddLabel('Menu bind'):AddKeyPicker('MenuKeybind', {Default = 'End', NoUI = true, Text = 'Menu keybind'})
Lib.ToggleKeybind = Options.MenuKeybind
Theme:SetLibrary(Lib)
Save:SetLibrary(Lib)
Save:IgnoreThemeSettings()
Save:SetIgnoreIndexes({'MenuKeybind'})
Theme:SetFolder('MyScriptHub')
Save:SetFolder('MyScriptHub/lighting-esp-speed')
Save:BuildConfigSection(Tabs['UI Settings'])
Theme:ApplyToTab(Tabs['UI Settings'])
Save:LoadAutoloadConfig()So basically script for SubterBaldi: Legacy game and its pretty good i think
idk bro someone actually playing ts and it has no anti cheat
1-- WARNING! Dont use get all exits if baldi still doing intro thing or he will
2-- be super fast
3local repo = 'https://raw.githubusercontent.com/violin-suzutsuki/LinoriaLib/main/'
4local Lib = loadstring(game:HttpGet(repo .. 'Library.lua'))()
5local Theme = loadstring(game:HttpGet(repo .. 'addons/ThemeManager.lua'))()
6local Save = loadstring(game:HttpGet(repo .. 'addons/SaveManager.lua'))()
7
8-- ==========================================
9-- ESP SYSTEM
10-- ==========================================
11local ESP = (function()
12 local self = {
13 Font = Enum.Font.RobotoCondensed,
14 Rainbow = false, Tracers = false, Unloaded = false,
15 ShowDistance = false, MatchColors = true, Arrows = false,
16 TextTransparency = 0, TracerOrigin = "Bottom",
17 FillTransparency = 0.75, OutlineTransparency = 0,
18 TextOutlineTransparency = 0, FadeTime = 0.2, RenderLimit = 240,
19 TracerSize = 0.5, ArrowRadius = 200, TextSize = 18, DistanceSizeRatio = 0.8,
20 OutlineColor = Color3.fromRGB(255, 255, 255),
21 RainbowColor = Color3.fromRGB(255, 255, 255),
22 ElementsEnabled = {}, TransparencyEnabled = {},
23 Highlights = {}, Labels = {}, Frames = {}, Lines = {},
24 ArrowsTable = {}, ColorTable = {}, TextTable = {},
25 ConnectionsTable = {}, Objects = {}, TotalObjects = {},
26 NotebookObjects = {}
27 }
28
29 local rs = {h = 0, hue = 0, step = 0, color = Color3.new()}
30 local rbConn, camConn
31
32 local cloneref = cloneref or function(o) return o end
33 local Players = cloneref(game:GetService("Players"))
34 local coregui = getgenv and cloneref(game:GetService("CoreGui")) or Players.LocalPlayer.PlayerGui
35 local ws = cloneref(workspace)
36 local runsvc = cloneref(game:GetService("RunService"))
37 local tween = cloneref(game:GetService("TweenService"))
38 local uis = cloneref(game:GetService("UserInputService"))
39 local lp = Players.LocalPlayer
40
41 local function getHiddenUI()
42 if gethui then return gethui() end
43 local f = Instance.new("Folder", coregui)
44 f.Name = ("%032x"):format(math.random(0, 2^31))
45 return f
46 end
47
48 function self:randstr()
49 local s = {}
50 local pool = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
51 for i = 1, 24 do s[i] = pool:sub(math.random(1, #pool)) end
52 return table.concat(s)
53 end
54
55 local hiddenUI = getHiddenUI()
56 local cam = ws.CurrentCamera
57
58 local sg = Instance.new("ScreenGui")
59 sg.ResetOnSpawn = false
60 sg.IgnoreGuiInset = true
61 sg.Name = self:randstr()
62 sg.Parent = hiddenUI
63
64 local hlFolder = Instance.new("Folder")
65 hlFolder.Name = self:randstr()
66 hlFolder.Parent = sg
67
68 local bbFolder = Instance.new("Folder")
69 bbFolder.Name = self:randstr()
70 bbFolder.Parent = sg
71
72 local trFrame = Instance.new("Frame")
73 trFrame.Size = UDim2.new(1, 0, 1, 0)
74 trFrame.BackgroundTransparency = 1
75 trFrame.Visible = false
76 trFrame.Name = self:randstr()
77 trFrame.Parent = sg
78
79 local arFrame = Instance.new("Frame")
80 arFrame.Size = UDim2.new(1, 0, 1, 0)
81 arFrame.BackgroundTransparency = 1
82 arFrame.Visible = false
83 arFrame.Name = self:randstr()
84 arFrame.Parent = sg
85
86 local arrowTpl = Instance.new("ImageLabel")
87 arrowTpl.Image = "rbxassetid://16368985219"
88 arrowTpl.Size = UDim2.new(0, 50, 0, 50)
89 arrowTpl.AnchorPoint = Vector2.new(0.5, 0.5)
90 arrowTpl.BackgroundTransparency = 1
91 arrowTpl.ImageTransparency = 1
92 local arCon = Instance.new("UIAspectRatioConstraint")
93 arCon.AspectRatio = 1
94 arCon.Name = self:randstr()
95 arCon.Parent = arrowTpl
96
97 local function mkTween(obj, props)
98 if not obj or not obj.Parent then return nil end
99 return tween:Create(obj, TweenInfo.new(self.FadeTime, Enum.EasingStyle.Quad), props)
100 end
101 local function playTween(obj, props)
102 if not obj or not obj.Parent then return end
103 local t = mkTween(obj, props)
104 if t then t:Play() end
105 end
106
107 local function destroyData(obj)
108 if self.Highlights[obj] then self.Highlights[obj]:Destroy() self.Highlights[obj] = nil end
109 if self.Frames[obj] then self.Frames[obj]:Destroy() self.Frames[obj] = nil end
110 if self.Lines[obj] then
111 if self.Lines[obj][1] then self.Lines[obj][1]:Destroy() end
112 self.Lines[obj] = nil
113 end
114 if self.ArrowsTable[obj] then self.ArrowsTable[obj]:Destroy() self.ArrowsTable[obj] = nil end
115 if self.ConnectionsTable[obj] then
116 for _, c in ipairs(self.ConnectionsTable[obj]) do c:Disconnect() end
117 self.ConnectionsTable[obj] = nil
118 end
119 self.Labels[obj] = nil
120 self.ColorTable[obj] = nil
121 self.TextTable[obj] = nil
122 self.ElementsEnabled[obj] = nil
123 self.TransparencyEnabled[obj] = nil
124 self.Objects[obj] = nil
125 self.NotebookObjects[obj] = nil
126 for i = #self.TotalObjects, 1, -1 do
127 if self.TotalObjects[i] == obj then table.remove(self.TotalObjects, i) break end
128 end
129 end
130
131 function self:AddESP(params)
132 local obj = params.Object
133 if self.ElementsEnabled[obj] == true or self.Unloaded then return end
134 if not obj:IsA("BasePart") and not obj:IsA("Model") then return end
135
136 self.ElementsEnabled[obj] = true
137 self.TransparencyEnabled[obj] = false
138 self.ConnectionsTable[obj] = self.ConnectionsTable[obj] or {}
139
140 if params.IsNotebook then
141 self.NotebookObjects[obj] = true
142 end
143
144 local hl = Instance.new("Highlight")
145 hl.FillTransparency = 1
146 hl.OutlineTransparency = 1
147 hl.Name = self:randstr()
148 hl.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
149 hl.Adornee = obj
150 hl.Parent = hlFolder
151 self.Highlights[obj] = hl
152
153 local tf = Instance.new("Frame")
154 tf.Visible = false
155 tf.Name = self:randstr()
156 tf.Size = UDim2.fromScale(1, 1)
157 tf.BackgroundTransparency = 1
158 tf.AnchorPoint = Vector2.new(0.5, 0.5)
159 tf.Parent = bbFolder
160
161 local tl = Instance.new("TextLabel")
162 tl.Name = self:randstr()
163 tl.BackgroundTransparency = 1
164 tl.Text = params.Text
165 tl.TextTransparency = 1
166 tl.TextStrokeTransparency = self.TextOutlineTransparency
167 tl.Size = UDim2.new(1, 0, 1, 0)
168 tl.Font = self.Font
169 tl.TextSize = self.TextSize
170 tl.RichText = true
171 tl.TextColor3 = params.Color
172 tl.Parent = tf
173
174 self.Frames[obj] = tf
175 self.Labels[obj] = tl
176 self.ColorTable[obj] = params.Color
177 self.TextTable[obj] = params.Text
178 self.Objects[obj] = obj
179 table.insert(self.TotalObjects, obj)
180
181 playTween(hl, {FillTransparency = self.FillTransparency})
182 playTween(hl, {OutlineTransparency = self.OutlineTransparency})
183
184 local fade = mkTween(tl, {TextTransparency = self.TextTransparency})
185 if fade then
186 fade.Completed:Once(function() self.TransparencyEnabled[obj] = true end)
187 fade:Play()
188 end
189 playTween(tl, {TextStrokeTransparency = self.TextOutlineTransparency})
190
191 local lf = Instance.new("Frame")
192 lf.Size = UDim2.new(0, 0, 0, 0)
193 lf.BackgroundTransparency = 1
194 lf.AnchorPoint = Vector2.new(0.5, 0.5)
195 lf.Name = self:randstr()
196 lf.Parent = trFrame
197
198 local sk = Instance.new("UIStroke")
199 sk.Thickness = self.TracerSize
200 sk.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
201 sk.Transparency = 1
202 sk.Name = self:randstr()
203 sk.Parent = lf
204
205 playTween(lf, {BackgroundTransparency = 0})
206 playTween(sk, {Transparency = 0})
207 self.Lines[obj] = {lf, sk}
208
209 task.spawn(function()
210 local last = 0
211 local function render()
212 if not obj or not obj:IsDescendantOf(game) then
213 self:RemoveESP(obj)
214 return
215 end
216
217 if self.NotebookObjects[obj] then
218 local bbg = obj:FindFirstChildWhichIsA("BillboardGui")
219 if bbg and not bbg.Enabled then
220 self:RemoveESP(obj)
221 return
222 end
223 end
224
225 local pos = obj:GetPivot().Position
226 local sp, onScreen = cam:WorldToViewportPoint(pos)
227 local frame = self.Frames[obj]
228 local label = self.Labels[obj]
229 local ch = self.Highlights[obj]
230 local ld = self.Lines[obj]
231
232 if ld and ld[1] then ld[1].Visible = onScreen end
233 if frame then
234 frame.Visible = onScreen
235 if onScreen then frame.Position = UDim2.new(0, sp.X, 0, sp.Y) end
236 end
237 if not onScreen then
238 if ch then ch:Destroy() self.Highlights[obj] = nil ch = nil end
239 elseif self.ElementsEnabled[obj] == true and not ch then
240 ch = Instance.new("Highlight")
241 ch.FillTransparency = 1
242 ch.OutlineTransparency = 1
243 ch.Name = self:randstr()
244 ch.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
245 ch.Adornee = obj
246 ch.Parent = hlFolder
247 self.Highlights[obj] = ch
248 end
249
250 local color = self.Rainbow and rs.color or self.ColorTable[obj] or Color3.fromRGB(255, 255, 255)
251 if label then label.TextColor3 = color end
252 if ch then
253 local dist = math.floor((cam.CFrame.Position - pos).Magnitude)
254 local distText = self.ShowDistance and ("\n" .. '<font size="' .. math.round(self.TextSize * self.DistanceSizeRatio) .. '">[' .. dist .. ']</font>') or ""
255 if label then label.Text = self.TextTable[obj] .. distText end
256 ch.Enabled = true
257 ch.FillColor = color
258 ch.OutlineColor = self.MatchColors and color or self.OutlineColor
259 if self.TransparencyEnabled[obj] == true then
260 ch.FillTransparency = self.FillTransparency
261 ch.OutlineTransparency = self.OutlineTransparency
262 if label then
263 label.TextTransparency = self.TextTransparency
264 label.TextStrokeTransparency = self.TextOutlineTransparency
265 end
266 end
267 end
268
269 if ld and ch and self.Tracers and onScreen then
270 local ss = cam.ViewportSize
271 local origin
272 if self.TracerOrigin == "Center" then origin = Vector2.new(ss.X / 2, ss.Y / 2)
273 elseif self.TracerOrigin == "Top" then origin = Vector2.new(ss.X / 2, 0)
274 elseif self.TracerOrigin == "Mouse" then origin = Vector2.new(lp:GetMouse().X, uis:GetMouseLocation().Y)
275 else origin = Vector2.new(ss.X / 2, ss.Y) end
276
277 local dest = Vector2.new(sp.X, sp.Y)
278 local mid = (origin + dest) / 2
279 local rot = math.deg(math.atan2(dest.Y - origin.Y, dest.X - origin.X))
280 local len = (origin - dest).Magnitude
281 ld[1].Position = UDim2.new(0, mid.X, 0, mid.Y)
282 ld[1].Size = UDim2.new(0, len, 0, 1)
283 ld[1].Rotation = rot
284 ld[1].BackgroundColor3 = color
285 ld[1].BorderSizePixel = 0
286 ld[1].Visible = true
287 ld[2].Color = color
288 ld[2].Thickness = self.TracerSize
289 end
290
291 if self.Arrows then
292 local ar = self.ArrowsTable[obj]
293 if ar == nil and self.ElementsEnabled[obj] == true then
294 ar = arrowTpl:Clone()
295 ar.Name = self:randstr()
296 ar:WaitForChild(arCon.Name, 5)
297 ar.Parent = arFrame
298 self.ArrowsTable[obj] = ar
299 playTween(ar, {ImageTransparency = 0})
300 elseif ar and self.ElementsEnabled[obj] == true then
301 if onScreen and sp.Z > 0 then ar.Visible = false
302 else
303 local ss = cam.ViewportSize
304 local sc = Vector2.new(ss.X / 2, ss.Y / 2)
305 local toObj = (pos - cam.CFrame.Position).Unit
306 local dir = Vector2.new(sp.X, sp.Y) - sc
307 if cam.CFrame.LookVector:Dot(toObj) < 0 then dir = -dir end
308 local angle = math.atan2(dir.Y, dir.X)
309 local radius = math.min(ss.X, ss.Y) / 2 - (400 - self.ArrowRadius)
310 local ap = sc + dir.Unit * radius
311 ar.Position = UDim2.new(0, ap.X, 0, ap.Y)
312 ar.Rotation = math.deg(angle) - 90
313 ar.Visible = true
314 ar.ImageColor3 = self.Rainbow and self.RainbowColor or self.ColorTable[obj]
315 end
316 end
317 end
318 end
319
320 local conn
321 conn = runsvc.Heartbeat:Connect(function(dt)
322 last = last + dt
323 if last >= 1 / self.RenderLimit then
324 last = 0
325 if self.ElementsEnabled[obj] ~= true then conn:Disconnect() return end
326 render()
327 end
328 end)
329 table.insert(self.ConnectionsTable[obj], conn)
330 end)
331 end
332
333 function self:RemoveESP(obj)
334 if self.Unloaded or self.ElementsEnabled[obj] ~= true then return end
335 self.ElementsEnabled[obj] = false
336 self.TransparencyEnabled[obj] = false
337
338 if self.Labels[obj] and self.Labels[obj].Parent then
339 playTween(self.Labels[obj], {TextTransparency = 1})
340 end
341 if self.Lines[obj] then
342 if self.Lines[obj][1] and self.Lines[obj][1].Parent then
343 playTween(self.Lines[obj][1], {BackgroundTransparency = 1})
344 end
345 if self.Lines[obj][2] and self.Lines[obj][2].Parent then
346 playTween(self.Lines[obj][2], {Transparency = 1})
347 end
348 end
349 if self.Highlights[obj] and self.Highlights[obj].Parent then
350 playTween(self.Highlights[obj], {FillTransparency = 1})
351 playTween(self.Highlights[obj], {OutlineTransparency = 1})
352 end
353 if self.ArrowsTable[obj] and self.ArrowsTable[obj].Parent then
354 playTween(self.ArrowsTable[obj], {ImageTransparency = 1})
355 end
356
357 task.delay(self.FadeTime + 0.05, function()
358 if self.ElementsEnabled[obj] == false then
359 destroyData(obj)
360 else
361 if self.Highlights[obj] and self.Highlights[obj].Parent then
362 playTween(self.Highlights[obj], {FillTransparency = self.FillTransparency})
363 playTween(self.Highlights[obj], {OutlineTransparency = self.OutlineTransparency})
364 end
365 end
366 end)
367 end
368
369 function self:UpdateText(obj, text)
370 if self.TextTable[obj] then self.TextTable[obj] = text end
371 end
372
373 function self:UpdateColor(obj, color)
374 self.ColorTable[obj] = color
375 if self.Labels[obj] and not self.Rainbow then self.Labels[obj].TextColor3 = color end
376 end
377
378 function self:Unload()
379 if self.Unloaded then return end
380 self.Unloaded = true
381 for _, o in pairs(self.Objects) do self:RemoveESP(o) end
382 for _, conns in pairs(self.ConnectionsTable) do
383 for _, c in ipairs(conns) do c:Disconnect() end
384 end
385 if rbConn then rbConn:Disconnect() end
386 if camConn then camConn:Disconnect() end
387 sg.Enabled = false
388 end
389
390 rbConn = runsvc.RenderStepped:Connect(function(dt)
391 rs.step = rs.step + dt
392 if rs.step >= (1 / 60) then
393 rs.step = 0
394 rs.h = rs.h + (1 / 400)
395 if rs.h > 1 then rs.h = 0 end
396 rs.hue = rs.h
397 rs.color = Color3.fromHSV(rs.hue, 0.8, 1)
398 self.RainbowColor = rs.color
399 end
400 end)
401
402 camConn = ws:GetPropertyChangedSignal("CurrentCamera"):Connect(function()
403 cam = ws.CurrentCamera
404 end)
405
406 return self
407end)()
408
409-- ==========================================
410-- MAIN MENU
411-- ==========================================
412local Window = Lib:CreateWindow({
413 Title = 'Lighting + ESP + Speed + Game',
414 Center = true, AutoShow = true, TabPadding = 8, MenuFadeTime = 0.2
415})
416
417local Tabs = {
418 Main = Window:AddTab('Main'),
419 Game = Window:AddTab('Game'),
420 Speed = Window:AddTab('Speed'),
421 ESP = Window:AddTab('ESP'),
422 ['UI Settings'] = Window:AddTab('UI Settings'),
423}
424
425-- ==========================================
426-- VARIABLES
427-- ==========================================
428local lp = game:GetService('Players').LocalPlayer
429local Lighting = game:GetService('Lighting')
430
431local fogOn = false
432local fogSaved = {}
433local fogConns = {}
434local fogSelfChange = false
435local ccOff = false
436local fireOff = false
437local cinOff = false
438local walkSpd = 16
439local runSpd = 24
440local pColor = Color3.fromRGB(0, 255, 0)
441local bColor = Color3.fromRGB(255, 0, 0)
442local tColor = Color3.fromRGB(255, 255, 0)
443local nColor = Color3.fromRGB(0, 255, 255)
444local pEsp = false
445local bEsp = false
446local tEsp = false
447local nEsp = false
448
449local function getNum(obj, fb)
450 if typeof(obj) == "number" then return obj end
451 if typeof(obj) == "Instance" and obj:IsA("ValueBase") then return obj.Value end
452 return fb
453end
454
455-- ==========================================
456-- TAB: MAIN (Lighting & UI)
457-- ==========================================
458local lgMain = Tabs.Main:AddLeftGroupbox('Lighting')
459
460lgMain:AddToggle('FogToggle', {
461 Text = 'Remove Fog',
462 Default = false,
463 Callback = function(v)
464 fogOn = v
465 if v then
466 fogSaved.FogEnd = Lighting.FogEnd
467 fogSaved.FogStart = Lighting.FogStart or 0
468 fogSelfChange = true
469 Lighting.FogEnd = 9999
470 fogSelfChange = false
471 fogConns[#fogConns + 1] = Lighting:GetPropertyChangedSignal("FogEnd"):Connect(function()
472 if not fogSelfChange and fogOn then
473 fogSaved.FogEnd = Lighting.FogEnd
474 fogSelfChange = true
475 Lighting.FogEnd = 9999
476 fogSelfChange = false
477 end
478 end)
479 fogConns[#fogConns + 1] = Lighting:GetPropertyChangedSignal("FogStart"):Connect(function()
480 if not fogSelfChange and fogOn then
481 fogSaved.FogStart = Lighting.FogStart
482 end
483 end)
484 else
485 for _, conn in ipairs(fogConns) do conn:Disconnect() end
486 fogConns = {}
487 fogSelfChange = true
488 if fogSaved.FogEnd then Lighting.FogEnd = fogSaved.FogEnd end
489 if fogSaved.FogStart then Lighting.FogStart = fogSaved.FogStart end
490 fogSelfChange = false
491 end
492 end
493})
494
495lgMain:AddToggle('ColorCorrectionToggle', {
496 Text = 'Disable ColorCorrection',
497 Default = false,
498 Callback = function(v)
499 ccOff = v
500 local cc = Lighting:FindFirstChildOfClass('ColorCorrectionEffect')
501 if cc then cc.Enabled = not v end
502 end
503})
504
505lgMain:AddDivider()
506
507lgMain:AddToggle('FireUIToggle', {
508 Text = 'Hide Fire UI',
509 Default = false,
510 Callback = function(v)
511 fireOff = v
512 local g = lp.PlayerGui:FindFirstChild('Fire')
513 if g then g.Enabled = not v end
514 end
515})
516
517lgMain:AddToggle('CinematicUIToggle', {
518 Text = 'Hide Cinematic UI',
519 Default = false,
520 Callback = function(v)
521 cinOff = v
522 local g = lp.PlayerGui:FindFirstChild('Cinematic')
523 if g then g.Enabled = not v end
524 end
525})
526
527-- ==========================================
528-- TAB: GAME
529-- ==========================================
530local lgGame = Tabs.Game:AddLeftGroupbox('Game Actions')
531
532lgGame:AddButton('Collect All Notebooks', function()
533 local map = workspace:FindFirstChild("Map")
534 if not map then return end
535 local notebooksFolder = map:FindFirstChild("Notebooks")
536 if not notebooksFolder then return end
537
538 local char = lp.Character
539 if not char then return end
540 local root = char:FindFirstChild("HumanoidRootPart")
541 if not root then return end
542
543 local origCFrame = root.CFrame
544 local collected = 0
545
546 for _, book in ipairs(notebooksFolder:GetChildren()) do
547 if book:IsA("Model") or book:IsA("BasePart") then
548 root.CFrame = book:GetPivot() + Vector3.new(0, 3, 0)
549 task.wait(0.1)
550
551 local cd = book:FindFirstChildWhichIsA("ClickDetector")
552 if cd then
553 if fireclickdetector then
554 pcall(function() fireclickdetector(cd) end)
555 end
556 end
557
558 if firetouchinterest then
559 pcall(function()
560 local part = book:IsA("BasePart") and book or book:FindFirstChildWhichIsA("BasePart")
561 if part then firetouchinterest(part, root, 0) end
562 end)
563 end
564
565 task.wait(0.1)
566 collected = collected + 1
567 end
568 end
569
570 root.CFrame = origCFrame
571 print("Collected " .. collected .. " notebooks, teleported back")
572end)
573
574lgGame:AddButton('Get All Exits', function()
575 local map = workspace:FindFirstChild("Map")
576 if not map then return end
577 local exitsFolder = map:FindFirstChild("Exit")
578 if not exitsFolder then return end
579
580 local char = lp.Character
581 if not char then return end
582 local root = char:FindFirstChild("HumanoidRootPart")
583 if not root then return end
584
585 local origCFrame = root.CFrame
586 local touched = 0
587
588 for _, exitObj in ipairs(exitsFolder:GetChildren()) do
589 root.CFrame = exitObj:GetPivot() + Vector3.new(0, 3, 0)
590 task.wait(0.1)
591
592 if firetouchinterest then
593 pcall(function()
594 local part = exitObj:IsA("BasePart") and exitObj or exitObj:FindFirstChildWhichIsA("BasePart")
595 if part then firetouchinterest(part, root, 0) end
596 end)
597 end
598
599 local ti = exitObj:FindFirstChildWhichIsA("TouchInterest")
600 if not ti then ti = exitObj:FindFirstChildWhichIsA("TouchInterest", true) end
601 if ti then
602 pcall(function() ti.Touched:Fire(root) end)
603 end
604
605 task.wait(0.1)
606 touched = touched + 1
607 end
608
609 root.CFrame = origCFrame
610 print("Triggered " .. touched .. " exits, teleported back")
611end)
612
613lgGame:AddDivider()
614
615lgGame:AddButton('Delete All Blocks', function()
616 local map = workspace:FindFirstChild("Map")
617 if not map then return end
618
619 local blocksFolder = map:FindFirstChild("BlockWall")
620 if not blocksFolder then return end
621
622 local children = {}
623 for _, obj in ipairs(blocksFolder:GetChildren()) do
624 table.insert(children, obj)
625 end
626
627 local count = 0
628 for _, obj in ipairs(children) do
629 if obj:IsA("BasePart") or obj:IsA("Model") then
630 obj:Destroy()
631 count = count + 1
632 end
633 end
634
635 print("Deleted " .. count .. " blocks from BlockWall")
636end)
637
638lgGame:AddDivider()
639
640-- See Baldi (Through Walls) — проверка раз в 1 секунду
641local baldiCheckConnection = nil
642local baldiSeeEnabled = false
643
644lgGame:AddToggle('SeeBaldiToggle', {
645 Text = 'See Baldi (Through Walls)',
646 Default = false,
647 Callback = function(v)
648 baldiSeeEnabled = v
649
650 if baldiCheckConnection then
651 baldiCheckConnection:Disconnect()
652 baldiCheckConnection = nil
653 end
654
655 if not v then
656 local map = workspace:FindFirstChild("Map")
657 if map then
658 local npcFolder = map:FindFirstChild("Npc")
659 if npcFolder then
660 local baldi = npcFolder:FindFirstChild("Baldi")
661 if baldi then
662 local root = baldi:FindFirstChild("HumanoidRootPart")
663 if root then
664 local billboard = root:FindFirstChildWhichIsA("BillboardGui")
665 if billboard then
666 billboard.AlwaysOnTop = false
667 billboard.Enabled = true
668 end
669 end
670 end
671 end
672 end
673 print("Baldi visibility disabled")
674 return
675 end
676
677 local lastCheck = 0
678 baldiCheckConnection = game:GetService("RunService").Heartbeat:Connect(function()
679 lastCheck = lastCheck + 1
680 if lastCheck < 60 then return end
681 lastCheck = 0
682
683 if not baldiSeeEnabled then return end
684
685 local map = workspace:FindFirstChild("Map")
686 if not map then return end
687
688 local npcFolder = map:FindFirstChild("Npc")
689 if not npcFolder then return end
690
691 local baldi = npcFolder:FindFirstChild("Baldi")
692 if not baldi then return end
693
694 local root = baldi:FindFirstChild("HumanoidRootPart")
695 if not root then return end
696
697 local billboard = root:FindFirstChildWhichIsA("BillboardGui")
698 if billboard then
699 billboard.AlwaysOnTop = true
700 billboard.Enabled = true
701 else
702 for _, obj in ipairs(root:GetDescendants()) do
703 if obj:IsA("BillboardGui") then
704 obj.AlwaysOnTop = true
705 obj.Enabled = true
706 break
707 end
708 end
709 end
710 end)
711
712 print("Baldi visibility enabled. Auto-check running every 1 second.")
713 end
714})
715
716-- Click Aura
717lgGame:AddDivider()
718
719local clickAuraOn = false
720local notebookAuraDist = 15
721local doorAuraDist = 15
722
723lgGame:AddToggle('ClickAuraToggle', {
724 Text = 'Click Aura',
725 Default = false,
726 Callback = function(v)
727 clickAuraOn = v
728 end
729})
730
731lgGame:AddSlider('NotebookAuraDist', {
732 Text = 'Notebook Aura Distance',
733 Default = 15,
734 Min = 5, Max = 200, Rounding = 0,
735 Callback = function(v)
736 notebookAuraDist = v
737 end
738})
739
740lgGame:AddSlider('DoorAuraDist', {
741 Text = 'Door Aura Distance',
742 Default = 15,
743 Min = 5, Max = 200, Rounding = 0,
744 Callback = function(v)
745 doorAuraDist = v
746 end
747})
748
749task.spawn(function()
750 while true do
751 task.wait(0.1)
752 if not clickAuraOn then continue end
753
754 local char = lp.Character
755 if not char then continue end
756 local root = char:FindFirstChild("HumanoidRootPart")
757 if not root then continue end
758 local rootPos = root.Position
759
760 local map = workspace:FindFirstChild("Map")
761 if not map then continue end
762
763 local notebooksFolder = map:FindFirstChild("Notebooks")
764 if notebooksFolder then
765 for _, book in ipairs(notebooksFolder:GetChildren()) do
766 local cd = book:FindFirstChildWhichIsA("ClickDetector")
767 if cd then
768 local bookPos = book:GetPivot().Position
769 local dist = (rootPos - bookPos).Magnitude
770 if dist <= notebookAuraDist then
771 if fireclickdetector then
772 pcall(function() fireclickdetector(cd) end)
773 end
774 end
775 end
776 end
777 end
778
779 local doorFolder = map:FindFirstChild("Door")
780 if doorFolder then
781 for _, door in ipairs(doorFolder:GetChildren()) do
782 local clickDoor = door:FindFirstChild("ClickDoor")
783 if clickDoor then
784 local cd = clickDoor:FindFirstChildWhichIsA("ClickDetector")
785 if cd then
786 local doorPos = clickDoor:GetPivot().Position
787 local dist = (rootPos - doorPos).Magnitude
788 if dist <= doorAuraDist then
789 if fireclickdetector then
790 pcall(function() fireclickdetector(cd) end)
791 end
792 end
793 end
794 end
795 end
796 end
797 end
798end)
799
800-- ==========================================
801-- TAB: SPEED
802-- ==========================================
803local sg = Tabs.Speed:AddLeftGroupbox('Speed Settings')
804local cWalk = getNum(lp.WalkSpeed, 16)
805local cRun = getNum(lp.RunSpeed, 24)
806walkSpd = cWalk
807runSpd = cRun
808
809sg:AddSlider('WalkSpeedSlider', {
810 Text = 'WalkSpeed',
811 Default = cWalk,
812 Min = 0, Max = 500, Rounding = 0,
813 Callback = function(v)
814 walkSpd = v
815 local w = lp.WalkSpeed
816 if typeof(w) == "Instance" and w:IsA("ValueBase") then w.Value = v else lp.WalkSpeed = v end
817 end
818})
819
820sg:AddSlider('RunSpeedSlider', {
821 Text = 'RunSpeed',
822 Default = cRun,
823 Min = 0, Max = 500, Rounding = 0,
824 Callback = function(v)
825 runSpd = v
826 local r = lp.RunSpeed
827 if typeof(r) == "Instance" and r:IsA("ValueBase") then r.Value = v else lp.RunSpeed = v end
828 end
829})
830
831sg:AddDivider()
832
833local noAccel = false
834local noAccelConn
835sg:AddToggle('RemoveAcceleration', {
836 Text = 'Remove Acceleration',
837 Default = false,
838 Callback = function(v)
839 noAccel = v
840 if v then
841 noAccelConn = game:GetService('RunService').Heartbeat:Connect(function()
842 local root, hum = lp.Character and lp.Character:FindFirstChild('HumanoidRootPart'), lp.Character and lp.Character:FindFirstChildOfClass('Humanoid')
843 if not root or not hum or hum.Health <= 0 then return end
844 local spd = walkSpd
845 local dir = hum.MoveDirection
846 if dir.Magnitude > 0 then
847 root.AssemblyLinearVelocity = Vector3.new(dir.X * spd, root.AssemblyLinearVelocity.Y, dir.Z * spd)
848 else
849 root.AssemblyLinearVelocity = Vector3.new(0, root.AssemblyLinearVelocity.Y, 0)
850 end
851 end)
852 else
853 if noAccelConn then noAccelConn:Disconnect() noAccelConn = nil end
854 end
855 end
856})
857
858-- ==========================================
859-- TAB: ESP
860-- ==========================================
861local function refreshPlayer(p)
862 if not pEsp or p == lp then return end
863 local c = p.Character
864 if not c or ESP.ElementsEnabled[c] == true then return end
865 if c:FindFirstChild('HumanoidRootPart') then
866 ESP:AddESP({Object = c, Text = p.DisplayName or p.Name, Color = pColor})
867 end
868end
869
870local function refreshAllPlayers()
871 if not pEsp then return end
872 for _, p in ipairs(game:GetService('Players'):GetPlayers()) do
873 if p ~= lp then refreshPlayer(p) end
874 end
875end
876
877local function refreshBaldi()
878 if not bEsp then return end
879 local b = workspace:FindFirstChild("Map")
880 if b then b = b:FindFirstChild("Npc") end
881 if b then b = b:FindFirstChild("Baldi") end
882 if b and ESP.ElementsEnabled[b] ~= true then
883 ESP:AddESP({Object = b, Text = 'Baldi', Color = bColor})
884 end
885end
886
887local function refreshTiles()
888 if not tEsp then return end
889 local m = workspace:FindFirstChild("Map")
890 if not m then return end
891 local f = m:FindFirstChild("ProjectTile")
892 if not f then return end
893 for _, item in ipairs(f:GetChildren()) do
894 if not ESP.ElementsEnabled[item] and (item:IsA("BasePart") or item:IsA("Model")) then
895 ESP:AddESP({Object = item, Text = item.Name, Color = tColor})
896 end
897 end
898end
899
900local function refreshNotebooks()
901 if not nEsp then return end
902 local map = workspace:FindFirstChild("Map")
903 if not map then return end
904 local notebooksFolder = map:FindFirstChild("Notebooks")
905 if not notebooksFolder then return end
906 for _, book in ipairs(notebooksFolder:GetChildren()) do
907 if (book:IsA("Model") or book:IsA("BasePart")) and not ESP.ElementsEnabled[book] then
908 local bbg = book:FindFirstChildWhichIsA("BillboardGui")
909 if bbg and not bbg.Enabled then continue end
910 ESP:AddESP({Object = book, Text = "Book", Color = nColor, IsNotebook = true})
911 end
912 end
913end
914
915local eg = Tabs.ESP:AddLeftGroupbox('ESP Settings')
916
917eg:AddToggle('PlayerESPToggle', {
918 Text = 'Player ESP',
919 Default = false,
920 Callback = function(v)
921 pEsp = v
922 if v then
923 for _, p in ipairs(game:GetService('Players'):GetPlayers()) do
924 if p ~= lp and p.Character and p.Character:FindFirstChild('HumanoidRootPart') then
925 ESP:AddESP({Object = p.Character, Text = p.DisplayName or p.Name, Color = pColor})
926 end
927 end
928 else
929 for _, p in ipairs(game:GetService('Players'):GetPlayers()) do
930 if p ~= lp and p.Character then ESP:RemoveESP(p.Character) end
931 end
932 end
933 end
934})
935
936eg:AddToggle('NpcESPToggle', {
937 Text = 'Baldi ESP',
938 Default = false,
939 Callback = function(v)
940 bEsp = v
941 local b = workspace:FindFirstChild("Map")
942 if b then b = b:FindFirstChild("Npc"); if b then b = b:FindFirstChild("Baldi") end end
943 if v and b then ESP:AddESP({Object = b, Text = 'Baldi', Color = bColor})
944 elseif not v and b then ESP:RemoveESP(b) end
945 end
946})
947
948eg:AddToggle('ProjectTileESPToggle', {
949 Text = 'ProjectTile ESP',
950 Default = false,
951 Callback = function(v)
952 tEsp = v
953 local m = workspace:FindFirstChild("Map")
954 if not m then return end
955 local f = m:FindFirstChild("ProjectTile")
956 if not f then return end
957 if v then
958 for _, item in ipairs(f:GetChildren()) do
959 if item:IsA("BasePart") or item:IsA("Model") then
960 ESP:AddESP({Object = item, Text = item.Name, Color = tColor})
961 end
962 end
963 else
964 for _, item in ipairs(f:GetChildren()) do ESP:RemoveESP(item) end
965 end
966 end
967})
968
969eg:AddToggle('NotebookESPToggle', {
970 Text = 'Notebook ESP',
971 Default = false,
972 Callback = function(v)
973 nEsp = v
974 if v then
975 refreshNotebooks()
976 else
977 local map = workspace:FindFirstChild("Map")
978 if map then
979 local f = map:FindFirstChild("Notebooks")
980 if f then
981 for _, item in ipairs(f:GetChildren()) do ESP:RemoveESP(item) end
982 end
983 end
984 end
985 end
986})
987
988eg:AddDivider()
989
990eg:AddLabel('Player Color'):AddColorPicker('PlayerColor', {
991 Default = pColor,
992 Title = 'Player ESP Color',
993 Callback = function(c)
994 pColor = c
995 for _, p in ipairs(game:GetService('Players'):GetPlayers()) do
996 if p ~= lp and p.Character then ESP:UpdateColor(p.Character, c) end
997 end
998 end
999})
1000
1001eg:AddLabel('Baldi Color'):AddColorPicker('NpcColor', {
1002 Default = bColor,
1003 Title = 'Baldi ESP Color',
1004 Callback = function(c)
1005 bColor = c
1006 local b = workspace:FindFirstChild("Map")
1007 if b then b = b:FindFirstChild("Npc"); if b then b = b:FindFirstChild("Baldi") end end
1008 if b then ESP:UpdateColor(b, c) end
1009 end
1010})
1011
1012eg:AddLabel('ProjectTile Color'):AddColorPicker('ProjectTileColor', {
1013 Default = tColor,
1014 Title = 'ProjectTile ESP Color',
1015 Callback = function(c)
1016 tColor = c
1017 local m = workspace:FindFirstChild("Map")
1018 if not m then return end
1019 local f = m:FindFirstChild("ProjectTile")
1020 if not f then return end
1021 for _, item in ipairs(f:GetChildren()) do ESP:UpdateColor(item, c) end
1022 end
1023})
1024
1025eg:AddLabel('Notebook Color'):AddColorPicker('NotebookColor', {
1026 Default = nColor,
1027 Title = 'Notebook ESP Color',
1028 Callback = function(c)
1029 nColor = c
1030 local map = workspace:FindFirstChild("Map")
1031 if not map then return end
1032 local f = map:FindFirstChild("Notebooks")
1033 if not f then return end
1034 for _, item in ipairs(f:GetChildren()) do ESP:UpdateColor(item, c) end
1035 end
1036})
1037
1038local eo = Tabs.ESP:AddRightGroupbox('ESP Options')
1039
1040eo:AddToggle('ShowDistance', {
1041 Text = 'Show Distance',
1042 Default = false,
1043 Callback = function(v) ESP.ShowDistance = v end
1044})
1045
1046eo:AddToggle('Tracers', {
1047 Text = 'Tracers',
1048 Default = false,
1049 Callback = function(v) ESP.Tracers = v end
1050})
1051
1052eo:AddDropdown('TracerOrigin', {
1053 Values = {'Bottom', 'Center', 'Top', 'Mouse'},
1054 Default = 1,
1055 Text = 'Tracer Origin',
1056 Callback = function(v) ESP.TracerOrigin = v end
1057})
1058
1059eo:AddSlider('TracerSize', {
1060 Text = 'Tracer Thickness',
1061 Default = 1, Min = 1, Max = 5, Rounding = 0,
1062 Callback = function(v) ESP.TracerSize = v end
1063})
1064
1065eo:AddToggle('Rainbow', {
1066 Text = 'Rainbow Color',
1067 Default = false,
1068 Callback = function(v) ESP.Rainbow = v end
1069})
1070
1071eo:AddToggle('Arrows', {
1072 Text = 'Off-screen Arrows',
1073 Default = false,
1074 Callback = function(v) ESP.Arrows = v end
1075})
1076
1077eo:AddSlider('TextSize', {
1078 Text = 'Text Size',
1079 Default = 18, Min = 8, Max = 40, Rounding = 0,
1080 Callback = function(v) ESP.TextSize = v end
1081})
1082
1083eo:AddSlider('FillTransparency', {
1084 Text = 'Fill Transparency',
1085 Default = 0.75, Min = 0, Max = 1, Rounding = 2,
1086 Callback = function(v) ESP.FillTransparency = v end
1087})
1088
1089-- ==========================================
1090-- ENFORCE LOOP
1091-- ==========================================
1092task.spawn(function()
1093 while true do
1094 task.wait(1)
1095 local cc = Lighting:FindFirstChildOfClass('ColorCorrectionEffect')
1096 if cc then
1097 if ccOff and cc.Enabled ~= false then cc.Enabled = false
1098 elseif not ccOff and cc.Enabled ~= true then cc.Enabled = true end
1099 end
1100
1101 local fg = lp.PlayerGui:FindFirstChild('Fire')
1102 if fg then
1103 if fireOff and fg.Enabled ~= false then fg.Enabled = false
1104 elseif not fireOff and fg.Enabled ~= true then fg.Enabled = true end
1105 end
1106
1107 local cg = lp.PlayerGui:FindFirstChild('Cinematic')
1108 if cg then
1109 if cinOff and cg.Enabled ~= false then cg.Enabled = false
1110 elseif not cinOff and cg.Enabled ~= true then cg.Enabled = true end
1111 end
1112
1113 local wRaw = lp.WalkSpeed
1114 local wCur = getNum(wRaw, 16)
1115 if wCur ~= walkSpd then
1116 if typeof(wRaw) == "Instance" and wRaw:IsA("ValueBase") then wRaw.Value = walkSpd
1117 else pcall(function() lp.WalkSpeed = walkSpd end) end
1118 end
1119
1120 local rRaw = lp.RunSpeed
1121 local rCur = getNum(rRaw, 24)
1122 if rCur ~= runSpd then
1123 if typeof(rRaw) == "Instance" and rRaw:IsA("ValueBase") then rRaw.Value = runSpd
1124 else pcall(function() lp.RunSpeed = runSpd end) end
1125 end
1126 end
1127end)
1128
1129-- ==========================================
1130-- ESP REFRESH LOOP
1131-- ==========================================
1132local plrs = game:GetService('Players')
1133task.spawn(function()
1134 while true do
1135 task.wait(5)
1136 if pEsp then refreshAllPlayers() end
1137 if bEsp then refreshBaldi() end
1138 if tEsp then refreshTiles() end
1139 if nEsp then refreshNotebooks() end
1140 end
1141end)
1142
1143-- ==========================================
1144-- PLAYER EVENTS
1145-- ==========================================
1146plrs.PlayerAdded:Connect(function(p)
1147 p.CharacterAdded:Connect(function(c)
1148 task.wait(0.5)
1149 if pEsp and c:FindFirstChild('HumanoidRootPart') then
1150 ESP:AddESP({Object = c, Text = p.DisplayName or p.Name, Color = pColor})
1151 end
1152 end)
1153end)
1154
1155plrs.PlayerRemoving:Connect(function(p)
1156 if not pEsp then return end
1157 if p.Character then ESP:RemoveESP(p.Character) end
1158end)
1159
1160for _, p in ipairs(plrs:GetPlayers()) do
1161 if p ~= lp then
1162 p.CharacterAdded:Connect(function(c)
1163 task.wait(0.5)
1164 if pEsp and c:FindFirstChild('HumanoidRootPart') then
1165 ESP:AddESP({Object = c, Text = p.DisplayName or p.Name, Color = pColor})
1166 end
1167 end)
1168 end
1169end
1170
1171-- ==========================================
1172-- CHILDADDED EVENTS
1173-- ==========================================
1174task.spawn(function()
1175 local m = workspace:FindFirstChild("Map")
1176 if not m then
1177 local conn = workspace.ChildAdded:Connect(function(child)
1178 if child.Name == "Map" then
1179 conn:Disconnect()
1180 local f = child:FindFirstChild("ProjectTile")
1181 if f then
1182 f.ChildAdded:Connect(function(item)
1183 if tEsp and (item:IsA("BasePart") or item:IsA("Model")) then
1184 task.wait(0.1)
1185 ESP:AddESP({Object = item, Text = item.Name, Color = tColor})
1186 end
1187 end)
1188 end
1189 end
1190 end)
1191 else
1192 local f = m:FindFirstChild("ProjectTile")
1193 if f then
1194 f.ChildAdded:Connect(function(item)
1195 if tEsp and (item:IsA("BasePart") or item:IsA("Model")) then
1196 task.wait(0.1)
1197 ESP:AddESP({Object = item, Text = item.Name, Color = tColor})
1198 end
1199 end)
1200 end
1201 end
1202end)
1203
1204task.spawn(function()
1205 local m = workspace:FindFirstChild("Map")
1206 if not m then
1207 local conn = workspace.ChildAdded:Connect(function(child)
1208 if child.Name == "Map" then
1209 conn:Disconnect()
1210 local f = child:FindFirstChild("Notebooks")
1211 if f then
1212 f.ChildAdded:Connect(function(item)
1213 if nEsp and (item:IsA("BasePart") or item:IsA("Model")) then
1214 task.wait(0.1)
1215 ESP:AddESP({Object = item, Text = "Book", Color = nColor, IsNotebook = true})
1216 end
1217 end)
1218 end
1219 end
1220 end)
1221 else
1222 local f = m:FindFirstChild("Notebooks")
1223 if f then
1224 f.ChildAdded:Connect(function(item)
1225 if nEsp and (item:IsA("BasePart") or item:IsA("Model")) then
1226 task.wait(0.1)
1227 ESP:AddESP({Object = item, Text = "Book", Color = nColor, IsNotebook = true})
1228 end
1229 end)
1230 end
1231 end
1232end)
1233
1234-- ==========================================
1235-- TAB: UI SETTINGS
1236-- ==========================================
1237local mg = Tabs['UI Settings']:AddLeftGroupbox('Menu')
1238mg:AddButton('Unload', function() ESP:Unload(); Lib:Unload() end)
1239mg:AddLabel('Menu bind'):AddKeyPicker('MenuKeybind', {Default = 'End', NoUI = true, Text = 'Menu keybind'})
1240Lib.ToggleKeybind = Options.MenuKeybind
1241
1242Theme:SetLibrary(Lib)
1243Save:SetLibrary(Lib)
1244Save:IgnoreThemeSettings()
1245Save:SetIgnoreIndexes({'MenuKeybind'})
1246Theme:SetFolder('MyScriptHub')
1247Save:SetFolder('MyScriptHub/lighting-esp-speed')
1248Save:BuildConfigSection(Tabs['UI Settings'])
1249Theme:ApplyToTab(Tabs['UI Settings'])
1250Save:LoadAutoloadConfig()