local Players = game:GetService("Players")
local VirtualUser = game:GetService("VirtualUser")
local UserInputService = game:GetService("UserInputService")
local LOCAL_PLAYER = Players.LocalPlayer
local Config = {
isEnabled = true,
radius = 7,
blockDelayMin = 200,
blockDelayMax = 225,
showSphere = false
}
local SAFE_ANIMATIONS = {
["180426354"] = true,
["180435792"] = true,
["180435557"] = true,
["180435571"] = true,
["684969250"] = true,
["12246410284"] = true,
["684949179"] = true,
["180436148"] = true,
["7950784441"] = true,
["12245963642"] = true,
["16398226659"] = true,
["6691954521"] = true,
["6768460286"] = true,
["6835294179"] = true,
["6835294624"] = true,
["6835295587"] = true,
["6835295340"] = true,
["6835295768"] = true,
["6843685401"] = true,
["6843686183"] = true,
["6843688241"] = true,
["6844129816"] = true,
["6844132951"] = true,
["6848072990"] = true,
["6857596237"] = true,
["6887306042"] = true,
["6887334158"] = true,
["6891877544"] = true,
["6910931126"] = true,
["9819726292"] = true,
["9819735529"] = true,
["9819745648"] = true,
["9819790668"] = true,
["9819806597"] = true,
["9819811478"] = true,
["9819823356"] = true,
["9819830644"] = true,
["9822389499"] = true,
["9825822267"] = true,
["9825834442"] = true,
["6846937588"] = true,
["6846943217"] = true,
["11116879670"] = true,
["10950534442"] = true,
["103336801329780"] = true,
["11116773443"] = true,
["11116829154"] = true,
["11116842345"] = true,
["11116851650"] = true,
["11116868980"] = true,
["11116876082"] = true,
["11116879769"] = true,
["11116883670"] = true,
["11116904044"] = true,
["11116906510"] = true,
["11116911916"] = true,
["11116928049"] = true,
["11116935344"] = true,
["11116942197"] = true,
["11116953107"] = true,
["11739213999"] = true,
["11739218535"] = true,
["11739221487"] = true,
["11824454279"] = true,
["12110667126"] = true,
["12110738932"] = true,
["12110743424"] = true,
["12119297992"] = true,
["15171648575"] = true,
["15434704458"] = true,
["15434415778"] = true,
["15434491089"] = true,
["15434493570"] = true,
["15744847038"] = true,
["16203609238"] = true,
["16294404827"] = true,
["17003507450"] = true,
["18357490871"] = true,
["18570567181"] = true,
["18570580687"] = true,
["18570584513"] = true,
["18570587568"] = true,
["18570592488"] = true,
["18570596139"] = true,
["6849692501"] = true,
["6849441527"] = true,
["7950763400"] = true,
["7814314769"] = true,
["6849491789"] = true,
["6835295052"] = true,
["6849489471"] = true,
["8201303807"] = true,
["10697528876"] = true,
["8201293554"] = true,
["16398208032"] = true,
["11580783004"] = true,
["18570602813"] = true,
["18570605663"] = true,
["18570610312"] = true,
["18570613289"] = true,
["18570616732"] = true,
["18570620535"] = true,
["18570623746"] = true,
["18570626263"] = true,
["18570632470"] = true,
["18570671957"] = true,
["18570683512"] = true,
["18570687683"] = true,
["18850450498"] = true,
["85696117023177"] = true,
["123461108716822"] = true,
["1190149394074304"] = true,
["116839058176293"] = true,
["752942489704875"] = true,
["130879133604226"] = true,
["11580787715"] = true,
["6835295057"] = true,
["7814305242"] = true,
["119813141112551"] = true,
["80008594862427"] = true,
}
local function normalizeAnimationId(id)
if not id then return nil end
local s = tostring(id)
local m = s:match("id=(%d+)")
if m then return m end
return s:match("(%d+)")
end
local function getDistance(player)
local char, localChar = player.Character, LOCAL_PLAYER.Character
if not (char and localChar) then return math.huge end
local root = char:FindFirstChild("HumanoidRootPart")
local localRoot = localChar:FindFirstChild("HumanoidRootPart")
if not (root and localRoot) then return math.huge end
return (root.Position - localRoot.Position).Magnitude
end
local blocking = false
local lastBlockTime = 0
local blockCooldown = 0.5
local function addUICorner(inst, px)
local corner = Instance.new("UICorner")
corner.CornerRadius = UDim.new(0, px or 12)
corner.Parent = inst
end
local function createGradient(frame, color1, color2, rotation)
local grad = Instance.new("UIGradient")
grad.Color = ColorSequence.new({
ColorSequenceKeypoint.new(0, color1),
ColorSequenceKeypoint.new(1, color2),
})
grad.Rotation = rotation or 45
grad.Parent = frame
end
local spherePart = nil
local sphereUpdateConnection = nil
local function updateSphere()
if spherePart then
spherePart:Destroy()
spherePart = nil
end
if sphereUpdateConnection then
sphereUpdateConnection:Disconnect()
sphereUpdateConnection = nil
end
if not Config.showSphere then return end
local char = LOCAL_PLAYER.Character
if not char then return end
local root = char:FindFirstChild("HumanoidRootPart")
if not root then return end
spherePart = Instance.new("Part")
spherePart.Name = "RadiusSphere"
spherePart.Shape = Enum.PartType.Ball
spherePart.Size = Vector3.new(Config.radius * 2, Config.radius * 2, Config.radius * 2)
spherePart.Transparency = 0.7
spherePart.Color = Color3.fromRGB(255, 105, 180)
spherePart.Material = Enum.Material.ForceField
spherePart.CanCollide = false
spherePart.CanTouch = false
spherePart.CanQuery = false
spherePart.Massless = true
spherePart.Anchored = true
spherePart.Parent = workspace
sphereUpdateConnection = game:GetService("RunService").RenderStepped:Connect(function()
if spherePart and root and root.Parent then
spherePart.CFrame = root.CFrame
spherePart.Size = Vector3.new(Config.radius * 2, Config.radius * 2, Config.radius * 2)
end
end)
end
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "AutoBlockGUI"
screenGui.ResetOnSpawn = false
screenGui.Parent = LOCAL_PLAYER:WaitForChild("PlayerGui")
local mainFrame = Instance.new("Frame")
mainFrame.Size = UDim2.new(0, 280, 0, 380)
mainFrame.Position = UDim2.new(0, 20, 0, 20)
mainFrame.BackgroundColor3 = Color3.fromRGB(255, 192, 203)
mainFrame.BorderSizePixel = 0
mainFrame.Parent = screenGui
createGradient(mainFrame, Color3.fromRGB(255, 182, 193), Color3.fromRGB(255, 105, 180))
addUICorner(mainFrame, 16)
mainFrame.Visible = true
local layout = Instance.new("UIListLayout")
layout.Parent = mainFrame
layout.FillDirection = Enum.FillDirection.Vertical
layout.HorizontalAlignment = Enum.HorizontalAlignment.Center
layout.VerticalAlignment = Enum.VerticalAlignment.Top
layout.Padding = UDim.new(0, 10)
local padding = Instance.new("UIPadding")
padding.Parent = mainFrame
padding.PaddingTop = UDim.new(0, 12)
padding.PaddingLeft = UDim.new(0, 10)
padding.PaddingRight = UDim.new(0, 10)
local toggleButton = Instance.new("TextButton")
toggleButton.Size = UDim2.new(1, -20, 0, 45)
toggleButton.BackgroundColor3 = Color3.fromRGB(255, 182, 193)
toggleButton.TextColor3 = Color3.fromRGB(255, 20, 147)
toggleButton.Font = Enum.Font.GothamBold
toggleButton.TextSize = 20
toggleButton.Parent = mainFrame
createGradient(toggleButton, Color3.fromRGB(255, 182, 193), Color3.fromRGB(255, 105, 180))
addUICorner(toggleButton, 12)
local statusLabel = Instance.new("TextLabel")
statusLabel.Size = UDim2.new(1, -20, 0, 35)
statusLabel.BackgroundColor3 = Color3.fromRGB(255, 240, 245)
statusLabel.TextColor3 = Color3.fromRGB(199, 21, 133)
statusLabel.Font = Enum.Font.GothamSemibold
statusLabel.TextSize = 18
statusLabel.Parent = mainFrame
addUICorner(statusLabel, 10)
local blockTimeLabel = Instance.new("TextLabel")
blockTimeLabel.Size = UDim2.new(1, -20, 0, 25)
blockTimeLabel.BackgroundTransparency = 1
blockTimeLabel.TextColor3 = Color3.fromRGB(199, 21, 133)
blockTimeLabel.Font = Enum.Font.GothamSemibold
blockTimeLabel.TextSize = 16
blockTimeLabel.Text = "Last Block: N/A"
blockTimeLabel.Parent = mainFrame
local cooldownBar = Instance.new("Frame")
cooldownBar.Size = UDim2.new(1, -20, 0, 8)
cooldownBar.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
cooldownBar.BorderSizePixel = 0
cooldownBar.Visible = false
cooldownBar.Parent = mainFrame
addUICorner(cooldownBar, 8)
local cooldownFill = Instance.new("Frame")
cooldownFill.Size = UDim2.new(0, 0, 1, 0)
cooldownFill.BackgroundColor3 = Color3.fromRGB(255, 105, 180)
cooldownFill.BorderSizePixel = 0
cooldownFill.Parent = cooldownBar
addUICorner(cooldownFill, 8)
local radiusContainer = Instance.new("Frame")
radiusContainer.Size = UDim2.new(1, -20, 0, 50)
radiusContainer.BackgroundTransparency = 1
radiusContainer.Parent = mainFrame
local radiusLabel = Instance.new("TextLabel")
radiusLabel.Size = UDim2.new(1, 0, 0, 20)
radiusLabel.Position = UDim2.new(0, 0, 0, 0)
radiusLabel.BackgroundTransparency = 1
radiusLabel.TextColor3 = Color3.fromRGB(199, 21, 133)
radiusLabel.Font = Enum.Font.GothamSemibold
radiusLabel.TextSize = 16
radiusLabel.Text = "Radius: " .. Config.radius .. " studs"
radiusLabel.Parent = radiusContainer
local radiusSliderBg = Instance.new("Frame")
radiusSliderBg.Size = UDim2.new(1, 0, 0, 8)
radiusSliderBg.Position = UDim2.new(0, 0, 0, 25)
radiusSliderBg.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
radiusSliderBg.BorderSizePixel = 0
radiusSliderBg.Parent = radiusContainer
addUICorner(radiusSliderBg, 8)
local radiusSliderFill = Instance.new("Frame")
radiusSliderFill.Size = UDim2.new((Config.radius - 5) / 25, 0, 1, 0)
radiusSliderFill.BackgroundColor3 = Color3.fromRGB(255, 105, 180)
radiusSliderFill.BorderSizePixel = 0
radiusSliderFill.Parent = radiusSliderBg
addUICorner(radiusSliderFill, 8)
local radiusButton = Instance.new("TextButton")
radiusButton.Size = UDim2.new(1, 0, 1, 0)
radiusButton.BackgroundTransparency = 1
radiusButton.Text = ""
radiusButton.Parent = radiusSliderBg
local minDelayContainer = Instance.new("Frame")
minDelayContainer.Size = UDim2.new(1, -20, 0, 50)
minDelayContainer.BackgroundTransparency = 1
minDelayContainer.Parent = mainFrame
local minDelayLabel = Instance.new("TextLabel")
minDelayLabel.Size = UDim2.new(1, 0, 0, 20)
minDelayLabel.Position = UDim2.new(0, 0, 0, 0)
minDelayLabel.BackgroundTransparency = 1
minDelayLabel.TextColor3 = Color3.fromRGB(199, 21, 133)
minDelayLabel.Font = Enum.Font.GothamSemibold
minDelayLabel.TextSize = 16
minDelayLabel.Text = "Min Delay: " .. Config.blockDelayMin .. "ms"
minDelayLabel.Parent = minDelayContainer
local minDelaySliderBg = Instance.new("Frame")
minDelaySliderBg.Size = UDim2.new(1, 0, 0, 8)
minDelaySliderBg.Position = UDim2.new(0, 0, 0, 25)
minDelaySliderBg.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
minDelaySliderBg.BorderSizePixel = 0
minDelaySliderBg.Parent = minDelayContainer
addUICorner(minDelaySliderBg, 8)
local minDelaySliderFill = Instance.new("Frame")
minDelaySliderFill.Size = UDim2.new((Config.blockDelayMin - 50) / 450, 0, 1, 0)
minDelaySliderFill.BackgroundColor3 = Color3.fromRGB(255, 105, 180)
minDelaySliderFill.BorderSizePixel = 0
minDelaySliderFill.Parent = minDelaySliderBg
addUICorner(minDelaySliderFill, 8)
local minDelayButton = Instance.new("TextButton")
minDelayButton.Size = UDim2.new(1, 0, 1, 0)
minDelayButton.BackgroundTransparency = 1
minDelayButton.Text = ""
minDelayButton.Parent = minDelaySliderBg
local maxDelayContainer = Instance.new("Frame")
maxDelayContainer.Size = UDim2.new(1, -20, 0, 50)
maxDelayContainer.BackgroundTransparency = 1
maxDelayContainer.Parent = mainFrame
local maxDelayLabel = Instance.new("TextLabel")
maxDelayLabel.Size = UDim2.new(1, 0, 0, 20)
maxDelayLabel.Position = UDim2.new(0, 0, 0, 0)
maxDelayLabel.BackgroundTransparency = 1
maxDelayLabel.TextColor3 = Color3.fromRGB(199, 21, 133)
maxDelayLabel.Font = Enum.Font.GothamSemibold
maxDelayLabel.TextSize = 16
maxDelayLabel.Text = "Max Delay: " .. Config.blockDelayMax .. "ms"
maxDelayLabel.Parent = maxDelayContainer
local maxDelaySliderBg = Instance.new("Frame")
maxDelaySliderBg.Size = UDim2.new(1, 0, 0, 8)
maxDelaySliderBg.Position = UDim2.new(0, 0, 0, 25)
maxDelaySliderBg.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
maxDelaySliderBg.BorderSizePixel = 0
maxDelaySliderBg.Parent = maxDelayContainer
addUICorner(maxDelaySliderBg, 8)
local maxDelaySliderFill = Instance.new("Frame")
maxDelaySliderFill.Size = UDim2.new((Config.blockDelayMax - 50) / 450, 0, 1, 0)
maxDelaySliderFill.BackgroundColor3 = Color3.fromRGB(255, 105, 180)
maxDelaySliderFill.BorderSizePixel = 0
maxDelaySliderFill.Parent = maxDelaySliderBg
addUICorner(maxDelaySliderFill, 8)
local maxDelayButton = Instance.new("TextButton")
maxDelayButton.Size = UDim2.new(1, 0, 1, 0)
maxDelayButton.BackgroundTransparency = 1
maxDelayButton.Text = ""
maxDelayButton.Parent = maxDelaySliderBg
local sphereToggle = Instance.new("TextButton")
sphereToggle.Size = UDim2.new(1, -20, 0, 40)
sphereToggle.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
sphereToggle.TextColor3 = Color3.fromRGB(255, 105, 180)
sphereToggle.Font = Enum.Font.GothamBold
sphereToggle.TextSize = 18
sphereToggle.Text = "Show Sphere: OFF"
sphereToggle.Parent = mainFrame
addUICorner(sphereToggle, 12)
local function updateStatusLabel(isBlocking)
if isBlocking then
statusLabel.Text = "Status: Blocking!"
statusLabel.TextColor3 = Color3.fromRGB(255, 0, 0)
else
if Config.isEnabled then
statusLabel.Text = "Status: Active"
statusLabel.TextColor3 = Color3.fromRGB(0, 255, 0)
else
statusLabel.Text = "Status: Idle"
statusLabel.TextColor3 = Color3.fromRGB(199, 21, 133)
end
end
end
if Config.isEnabled then
toggleButton.Text = "Disable Auto-Block"
toggleButton.BackgroundColor3 = Color3.fromRGB(255, 105, 180)
toggleButton.TextColor3 = Color3.fromRGB(255, 255, 255)
else
toggleButton.Text = "Enable Auto-Block"
toggleButton.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
toggleButton.TextColor3 = Color3.fromRGB(255, 105, 180)
end
updateStatusLabel(false)
toggleButton.MouseButton1Click:Connect(function()
Config.isEnabled = not Config.isEnabled
if Config.isEnabled then
toggleButton.Text = "Disable Auto-Block"
toggleButton.BackgroundColor3 = Color3.fromRGB(255, 105, 180)
toggleButton.TextColor3 = Color3.fromRGB(255, 255, 255)
else
toggleButton.Text = "Enable Auto-Block"
toggleButton.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
toggleButton.TextColor3 = Color3.fromRGB(255, 105, 180)
end
updateStatusLabel(false)
end)
sphereToggle.MouseButton1Click:Connect(function()
Config.showSphere = not Config.showSphere
if Config.showSphere then
sphereToggle.Text = "Show Sphere: ON"
sphereToggle.BackgroundColor3 = Color3.fromRGB(255, 105, 180)
sphereToggle.TextColor3 = Color3.fromRGB(255, 255, 255)
else
sphereToggle.Text = "Show Sphere: OFF"
sphereToggle.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
sphereToggle.TextColor3 = Color3.fromRGB(255, 105, 180)
end
updateSphere()
end)
local radiusDragging = false
radiusButton.MouseButton1Down:Connect(function()
radiusDragging = true
end)
UserInputService.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
radiusDragging = false
end
end)
UserInputService.InputChanged:Connect(function(input)
if radiusDragging and input.UserInputType == Enum.UserInputType.MouseMovement then
local mousePos = UserInputService:GetMouseLocation()
local sliderPos = radiusSliderBg.AbsolutePosition
local sliderSize = radiusSliderBg.AbsoluteSize
local relativeX = math.clamp(mousePos.X - sliderPos.X, 0, sliderSize.X)
local percentage = relativeX / sliderSize.X
Config.radius = math.floor(5 + (percentage * 25))
radiusLabel.Text = "Radius: " .. Config.radius .. " studs"
radiusSliderFill.Size = UDim2.new(percentage, 0, 1, 0)
if Config.showSphere then
updateSphere()
end
end
end)
local minDelayDragging = false
minDelayButton.MouseButton1Down:Connect(function()
minDelayDragging = true
end)
UserInputService.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
minDelayDragging = false
end
end)
UserInputService.InputChanged:Connect(function(input)
if minDelayDragging and input.UserInputType == Enum.UserInputType.MouseMovement then
local mousePos = UserInputService:GetMouseLocation()
local sliderPos = minDelaySliderBg.AbsolutePosition
local sliderSize = minDelaySliderBg.AbsoluteSize
local relativeX = math.clamp(mousePos.X - sliderPos.X, 0, sliderSize.X)
local percentage = relativeX / sliderSize.X
Config.blockDelayMin = math.floor(50 + (percentage * 450))
if Config.blockDelayMin > Config.blockDelayMax then
Config.blockDelayMin = Config.blockDelayMax
end
minDelayLabel.Text = "Min Delay: " .. Config.blockDelayMin .. "ms"
minDelaySliderFill.Size = UDim2.new((Config.blockDelayMin - 50) / 450, 0, 1, 0)
end
end)
local maxDelayDragging = false
maxDelayButton.MouseButton1Down:Connect(function()
maxDelayDragging = true
end)
UserInputService.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
maxDelayDragging = false
end
end)
UserInputService.InputChanged:Connect(function(input)
if maxDelayDragging and input.UserInputType == Enum.UserInputType.MouseMovement then
local mousePos = UserInputService:GetMouseLocation()
local sliderPos = maxDelaySliderBg.AbsolutePosition
local sliderSize = maxDelaySliderBg.AbsoluteSize
local relativeX = math.clamp(mousePos.X - sliderPos.X, 0, sliderSize.X)
local percentage = relativeX / sliderSize.X
Config.blockDelayMax = math.floor(50 + (percentage * 450))
if Config.blockDelayMax < Config.blockDelayMin then
Config.blockDelayMax = Config.blockDelayMin
end
maxDelayLabel.Text = "Max Delay: " .. Config.blockDelayMax .. "ms"
maxDelaySliderFill.Size = UDim2.new((Config.blockDelayMax - 50) / 450, 0, 1, 0)
end
end)
LOCAL_PLAYER.CharacterAdded:Connect(function()
task.wait(1)
if Config.showSphere then
updateSphere()
end
end)
local function handleAnimation(player, animTrack)
if not Config.isEnabled or player == LOCAL_PLAYER or UserInputService:GetFocusedTextBox() or blocking then
return
end
local animIdRaw
if animTrack and animTrack.Animation then
animIdRaw = animTrack.Animation.AnimationId
end
local animId = normalizeAnimationId(animIdRaw)
if animId and SAFE_ANIMATIONS[animId] then
return
end
local distance = getDistance(player)
if distance > Config.radius then return end
local currentTime = tick()
if (currentTime - lastBlockTime) < blockCooldown then return end
lastBlockTime = currentTime
blocking = true
updateStatusLabel(true)
local randomDelayMs = math.random(Config.blockDelayMin, Config.blockDelayMax)
local randomDelay = randomDelayMs / 1000
blockTimeLabel.Text = "Last Block: " .. math.floor(randomDelayMs) .. "ms"
task.wait(randomDelay)
if not UserInputService:GetFocusedTextBox() then
pcall(function()
VirtualUser:Button2Down(Vector2.new(0, 0), workspace.CurrentCamera.CFrame)
task.wait(0.1)
VirtualUser:Button2Up(Vector2.new(0, 0), workspace.CurrentCamera.CFrame)
end)
end
blocking = false
cooldownBar.Visible = true
cooldownFill.Size = UDim2.new(1, 0, 1, 0)
local elapsed = 0
local duration = blockCooldown
while elapsed < duration do
task.wait(0.03)
elapsed = elapsed + 0.03
local remaining = 1 - (elapsed / duration)
if remaining < 0 then remaining = 0 end
cooldownFill.Size = UDim2.new(remaining, 0, 1, 0)
end
cooldownBar.Visible = false
updateStatusLabel(false)
end
local function initializePlayerTracking(player)
local function onCharacterAdded(character)
local humanoid = character:WaitForChild("Humanoid")
local animator = humanoid:FindFirstChildOfClass("Animator") or Instance.new("Animator", humanoid)
animator.AnimationPlayed:Connect(function(animTrack)
local ok, err = pcall(function()
handleAnimation(player, animTrack)
end)
if not ok then
end
end)
end
if player.Character then
pcall(onCharacterAdded, player.Character)
end
player.CharacterAdded:Connect(onCharacterAdded)
end
for _, player in ipairs(Players:GetPlayers()) do
initializePlayerTracking(player)
end
Players.PlayerAdded:Connect(initializePlayerTracking)
UserInputService.InputBegan:Connect(function(input, gameProcessed)
if gameProcessed then return end
if input.UserInputType == Enum.UserInputType.Keyboard and input.KeyCode == Enum.KeyCode.R then
mainFrame.Visible = not mainFrame.Visible
end
end)