--// Services local Players = game:GetService("Players") local RunService = game:GetService("RunService") local CoreGui = game:GetService("CoreGui") local Workspace = game:GetService("Workspace") --// Vars local speaker = Players.LocalPlayer local HitboxGay = false local loopRunning = false local player = Players.LocalPlayer local lastTrue = 0 local cooldown = 2.5 -- seconds --// Animation Checker local function isAnimationPlaying(ids) local now = tick() local hum = player.Character and player.Character:FindFirstChildOfClass("Humanoid") local animator = hum and hum:FindFirstChildOfClass("Animator") if not animator then return false end if typeof(ids) ~= "table" then ids = { ids } end for _, track in ipairs(animator:GetPlayingAnimationTracks()) do local animId = track.Animation.AnimationId:match("%d+") for _, id in ipairs(ids) do if animId == tostring(id) then local elapsed = now - lastTrue if elapsed == 0 or elapsed > cooldown then lastTrue = now return true elseif elapsed <= 1 then return true else return false end end end end return false end --// UI Setup local gui = Instance.new("ScreenGui") gui.Name = "HitboxGayGui" gui.Parent = CoreGui local button = Instance.new("TextButton") button.Size = UDim2.new(0, 150, 0, 50) button.Position = UDim2.new(0.4, 0, 0.2, 0) button.Text = "Hitbox: OFF" button.BackgroundColor3 = Color3.fromRGB(40, 40, 40) button.TextColor3 = Color3.fromRGB(255, 255, 255) button.Active = true button.Draggable = true button.Parent = gui -- cooldown display loop task.spawn(function() while true do RunService.RenderStepped:Wait() if HitboxGay then local now = tick() local elapsed = now - lastTrue if elapsed < cooldown and elapsed > 0.4 then local remaining = math.max(0, cooldown - elapsed) button.Text = ("Hitbox: Cooldown (%.1f)"):format(remaining) else button.Text = "Hitbox: ON" end else button.Text = "Hitbox: OFF" end end end) --// Root fetcher local function getRoot(character) return character and character:FindFirstChild("HumanoidRootPart") end --// Nearest Humanoid Finder local checkBoxSize = Vector3.new(100, 50, 100) local function isDescendantOf(obj, parent) return obj and parent and obj:IsDescendantOf(parent) end local function getNearestHumanoid() if not speaker.Character then return nil end local root = getRoot(speaker.Character) if not root then return nil end local char = speaker.Character local isSurvivor = isDescendantOf(char, Workspace.Players:FindFirstChild("Survivors")) local isKiller = isDescendantOf(char, Workspace.Players:FindFirstChild("Killers")) local targetGroup = nil if isSurvivor then targetGroup = Workspace.Players:FindFirstChild("Killers") elseif isKiller then targetGroup = Workspace.Players:FindFirstChild("Survivors") end local parts = Workspace:GetPartBoundsInBox(root.CFrame, checkBoxSize) local nearest, dist = nil, math.huge for _, part in pairs(parts) do local c = part:FindFirstAncestorOfClass("Model") if c and c:FindFirstChild("Humanoid") and c:FindFirstChild("HumanoidRootPart") then if c ~= speaker.Character and c.Humanoid.Health > 0 then _G.IsNpc = false local valid = false if targetGroup then valid = isDescendantOf(c, targetGroup) else valid = true end if valid then local hrp = c.HumanoidRootPart local d = (hrp.Position - root.Position).Magnitude if d < dist then dist = d nearest = hrp end end end end end if not nearest then for _, part in pairs(parts) do local c = part:FindFirstAncestorOfClass("Model") if c and c:FindFirstChild("Humanoid") and c:FindFirstChild("HumanoidRootPart") then if c ~= speaker.Character and c.Humanoid.Health > 0 then _G.IsNpc = true local hrp = c.HumanoidRootPart local d = (hrp.Position - root.Position).Magnitude if d < dist then dist = d nearest = hrp end end end end end return nearest end --// Hitbox Loop local function startHitboxGay() if loopRunning then return end loopRunning = true task.spawn(function() while HitboxGay do RunService.Heartbeat:Wait() local character = speaker.Character local root = getRoot(character) local vel, movel = nil, 0.1 while not (character and character.Parent and root and root.Parent) do RunService.Heartbeat:Wait() character = speaker.Character root = getRoot(character) end vel = root.Velocity local ReplicatedStorage = game:GetService("ReplicatedStorage") local ids = { 105018679651616, 138386253518573, 109073770803138, 117991143485398, 124853830813308, 72036716319034, 83315617640528, } if isAnimationPlaying(ids) then local target = getNearestHumanoid() if target then local futurePos if not _G.IsNpc then local predictionTime = 0.3 futurePos = target.Position + target.Velocity * predictionTime else futurePos = target.Position end local offset = futurePos - root.Position local distance = offset.Magnitude local direction = offset.Unit local speed = distance * 4 root.Velocity = vel + Vector3.new(direction.X * speed, direction.Y * speed, direction.Z * speed) end end RunService.RenderStepped:Wait() if character and root then root.Velocity = vel end RunService.Stepped:Wait() if character and root then root.Velocity = vel + Vector3.new(0, movel, 0) movel = -movel end end loopRunning = false end) end --// Toggle button.MouseButton1Click:Connect(function() HitboxGay = not HitboxGay if HitboxGay then startHitboxGay() end end)