-- 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)