Version / Update: v1.0.0
- Download / Script Link
- -- TSB PRO PACK: FIXED RETICLE BUG + PERSISTENT UI
repeat task.wait() until game:IsLoaded()
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local VIM = game:GetService("VirtualInputManager")
local LocalPlayer = Players.LocalPlayer
local Camera = workspace.CurrentCamera
_G.PureLockActive = false
_G.SpeedChangerActive = false
_G.TrueReactive = false
_G.CustomSpeedValue = 1
local LockedTarget = nil
-- === IMPROVED RETICLE CLEANUP ===
local function ClearReticles()
for _, v in pairs(workspace:GetDescendants()) do
if v.Name == "LockReticle" then
v:Destroy()
end
end
end
local function CreateReticle(parent)
ClearReticles() -- Kill old ones before making a new one
local billboard = Instance.new("BillboardGui")
billboard.Name = "LockReticle"
billboard.Size = UDim2.new(4, 0, 4, 0)
billboard.AlwaysOnTop = true
billboard.Parent = parent
local frame = Instance.new("Frame", billboard)
frame.Size = UDim2.new(1, 0, 1, 0)
frame.BackgroundTransparency = 1
local stroke = Instance.new("UIStroke", frame)
stroke.Color = Color3.new(1, 1, 1)
stroke.Thickness = 2
local cross = Instance.new("TextLabel", billboard)
cross.Size = UDim2.new(1, 0, 1, 0)
cross.BackgroundTransparency = 1
cross.Text = "+"
cross.TextColor3 = Color3.new(1, 1, 1)
cross.TextSize = 40
cross.Font = Enum.Font.SourceSans
return billboard
end
-- === THE INTERFACE ===
local function CreateUI()
if game:GetService("CoreGui"):FindFirstChild("TSB_PRO_PACK") then
game:GetService("CoreGui").TSB_PRO_PACK:Destroy()
end
local sg = Instance.new("ScreenGui", game:GetService("CoreGui"))
sg.Name = "TSB_PRO_PACK"
sg.ResetOnSpawn = false
local camBtn = Instance.new("TextButton", sg)
camBtn.Size = UDim2.new(0, 160, 0, 45)
camBtn.Position = UDim2.new(0.5, -170, 0.02, 0)
camBtn.Text = "camlock"
camBtn.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
camBtn.TextColor3 = Color3.new(1, 1, 1)
camBtn.Font = Enum.Font.SourceSans
camBtn.TextSize = 18
camBtn.Draggable = true
Instance.new("UIStroke", camBtn).Thickness = 2
local blockBtn = Instance.new("TextButton", sg)
blockBtn.Size = UDim2.new(0, 160, 0, 45)
blockBtn.Position = UDim2.new(0.5, 10, 0.02, 0)
blockBtn.Text = "auto block"
blockBtn.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
blockBtn.TextColor3 = Color3.new(1, 1, 1)
blockBtn.Font = Enum.Font.SourceSans
blockBtn.TextSize = 18
blockBtn.Draggable = true
Instance.new("UIStroke", blockBtn).Thickness = 2
local speedToggle = Instance.new("TextButton", camBtn)
speedToggle.Size = UDim2.new(1, 0, 0, 35)
speedToggle.Position = UDim2.new(0, 0, 1, 10)
speedToggle.Text = "speed changer"
speedToggle.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
speedToggle.TextColor3 = Color3.new(0, 1, 0.5)
speedToggle.Font = Enum.Font.SourceSans
speedToggle.TextSize = 16
Instance.new("UIStroke", speedToggle).Color = Color3.new(0, 1, 0.5)
local speedInput = Instance.new("TextBox", speedToggle)
speedInput.Size = UDim2.new(1, 0, 0, 30)
speedInput.Position = UDim2.new(0, 0, 1, 5)
speedInput.PlaceholderText = "type speed..."
speedInput.Text = tostring(_G.CustomSpeedValue)
speedInput.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
speedInput.TextColor3 = Color3.new(1, 1, 1)
speedInput.Font = Enum.Font.SourceSans
speedInput.TextSize = 14
camBtn.MouseButton1Click:Connect(function()
_G.PureLockActive = not _G.PureLockActive
if not _G.PureLockActive then
LockedTarget = nil
camBtn.Text = "camlock"
camBtn.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
ClearReticles() -- BUG FIX: Force clear on toggle off
else
camBtn.Text = "scanning..."
camBtn.BackgroundColor3 = Color3.fromRGB(150, 0, 0)
end
end)
blockBtn.MouseButton1Click:Connect(function()
_G.TrueReactive = not _G.TrueReactive
blockBtn.Text = _G.TrueReactive and "block: ON" or "auto block"
end)
speedToggle.MouseButton1Click:Connect(function()
_G.SpeedChangerActive = not _G.SpeedChangerActive
speedToggle.Text = _G.SpeedChangerActive and "speed: ON" or "speed changer"
end)
speedInput.FocusLost:Connect(function()
local val = tonumber(speedInput.Text)
if val then _G.CustomSpeedValue = val end
end)
return camBtn
end
local MainCamBtn = CreateUI()
-- THE ENGINE
RunService.RenderStepped:Connect(function()
local myChar = LocalPlayer.Character
if not myChar or not myChar:FindFirstChild("HumanoidRootPart") then return end
if _G.PureLockActive then
if not LockedTarget then
local closestDist = 150
for _, v in pairs(workspace:GetDescendants()) do
if v:IsA("Humanoid") and v.Parent and v.Parent:FindFirstChild("HumanoidRootPart") then
if v.Parent ~= myChar and not v.Parent:IsAncestorOf(myChar) then
local d = (myChar.HumanoidRootPart.Position - v.Parent.HumanoidRootPart.Position).Magnitude
if d < closestDist then
closestDist = d
LockedTarget = v.Parent
CreateReticle(LockedTarget.HumanoidRootPart) -- Create once per target
end
end
end
end
end
if LockedTarget and LockedTarget:FindFirstChild("HumanoidRootPart") and LockedTarget.Humanoid.Health > 0 then
MainCamBtn.Text = "locked: " .. LockedTarget.Name
Camera.CFrame = CFrame.new(Camera.CFrame.Position, LockedTarget.HumanoidRootPart.Position)
else
LockedTarget = nil
ClearReticles() -- BUG FIX: Clear when target dies or is lost
if _G.PureLockActive then MainCamBtn.Text = "scanning..." end
end
end
if _G.SpeedChangerActive and myChar.Humanoid.MoveDirection.Magnitude > 0 then
myChar.HumanoidRootPart.CFrame = myChar.HumanoidRootPart.CFrame + (myChar.Humanoid.MoveDirection * (_G.CustomSpeedValue / 10))
end
if _G.TrueReactive then
local shouldBlock = false
for _, v in pairs(workspace:GetDescendants()) do
if v:IsA("Humanoid") and v.Parent and v.Parent ~= myChar and v.Parent:FindFirstChild("HumanoidRootPart") then
if (myChar.HumanoidRootPart.Position - v.Parent.HumanoidRootPart.Position).Magnitude < 14 then
for _, track in pairs(v:GetPlayingAnimationTracks()) do
if track.IsPlaying and track.Length > 0 and track.Length < 1.4 then
shouldBlock = true break
end
end
end
end
end
VIM:SendKeyEvent(shouldBlock, Enum.KeyCode.F, false, game)
end
end)[ View More ]
I can help you how to become a pro
- Works on mobile
- Yes