-- ============================================ -- AUTO PARRY BY BACKWOOD -- v15.0 — Slightly More Aggressive (Controlled) -- ============================================ local success, err = pcall(function() for _, name in ipairs({"AutoParryByBackwood", "BWS_ESP", "BWS_Ring", "BWS_TriggerFOV"}) do local old = game:GetService("CoreGui"):FindFirstChild(name) if old then old:Destroy() end end local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UIS = game:GetService("UserInputService") local VIM = game:GetService("VirtualInputManager") local TweenService = game:GetService("TweenService") local Player = Players.LocalPlayer local Camera = workspace.CurrentCamera if not getgenv().BWS then getgenv().BWS = {} end local defaults = { Enabled = true, PingComp = true, ExtraMs = 20, FireDebounce = 0.070, MaxParryDistance = 43, FastBallDistance = 72, FastBallSpeed = 70, ClashEnabled = true, ClashSpeedMult = 1.22, ClashMinRate = 0.013, ClashMaxRate = 0.085, AutoCurve = true, CurveDir = "AtTarget", CurvePower = 105, ShowRing = true, BallESP = true, OnlyTargetedAtMe = true, TriggerBot = true, TriggerMode = "Crosshair", TriggerFOV = 82, TriggerRange = 27, TriggerDelay = 0.040, TriggerHoldKey = "F", TriggerShowFOV = true, TriggerESP = true, TriggerOnlyAlive = true, AutoClicker = false, AutoClickerCPS = 80, } for k, v in pairs(defaults) do if getgenv().BWS[k] == nil then getgenv().BWS[k] = v end end local CFG = getgenv().BWS local State = { parriedBalls = {}, lastParry = 0, lastFireTime = 0, ballCache = {}, prevBallVel = {}, prevBallPos = {}, velHistory = {}, clashCount = {}, inClash = false, clashUntil = 0, clashRate = 0.05, frame = 0, globalLock = 0, ping = 0.05, playerVel = Vector3.zero, prevPlayerPos = Vector3.zero, blockConns = {}, lastClashFire = 0, triggerHeld = false, lastTriggerFire = 0, triggerTarget = nil, triggerHighlight = nil, autoClickerEnabled = false, lastAutoClick = 0, } local ESPFolder = Instance.new("Folder") ESPFolder.Name = "BWS_ESP" ESPFolder.Parent = game:GetService("CoreGui") local RingFolder = Instance.new("Folder") RingFolder.Name = "BWS_Ring" RingFolder.Parent = workspace local ActiveESP = {} task.spawn(function() while true do task.wait(1.8) pcall(function() local stats = game:GetService("Stats") local pms = stats.Network.ServerStatsItem["Data Ping"]:GetValue() State.ping = math.clamp(pms / 1000, 0.02, 0.5) end) end end) local function CacheBlock() State.blockConns = {} local gui = Player:FindFirstChild("PlayerGui") if not gui then return end local hotbar = gui:FindFirstChild("Hotbar") if not hotbar then return end local btn = hotbar:FindFirstChild("Block") if not btn then return end if not getconnections then return end pcall(function() for _, sig in ipairs({"Activated", "MouseButton1Click", "MouseButton1Down"}) do for _, conn in ipairs(getconnections(btn[sig])) do table.insert(State.blockConns, conn) end end end) end task.delay(1.3, CacheBlock) Player.ChildAdded:Connect(function(c) if c.Name == "PlayerGui" then task.delay(1.3, CacheBlock) end end) local function RawFire() local now = tick() if now - State.lastFireTime < CFG.FireDebounce then return false end if now < State.globalLock then return false end State.lastFireTime = now State.globalLock = now + 0.055 if #State.blockConns > 0 then for _, conn in ipairs(State.blockConns) do pcall(function() conn:Fire() end) end return true end CacheBlock() if #State.blockConns > 0 then for _, conn in ipairs(State.blockConns) do pcall(function() conn:Fire() end) end return true end pcall(function() VIM:SendMouseButtonEvent(0, 0, 0, true, game, 0) VIM:SendMouseButtonEvent(0, 0, 0, false, game, 0) end) return true end local function DoAutoClick() pcall(function() VIM:SendMouseButtonEvent(0, 0, 0, true, game, 0) VIM:SendMouseButtonEvent(0, 0, 0, false, game, 0) end) end UIS.InputBegan:Connect(function(input, gpe) if gpe then return end if input.KeyCode == Enum.KeyCode.Four then State.autoClickerEnabled = not State.autoClickerEnabled print(State.autoClickerEnabled and "[Backwood] AutoClicker ON" or "[Backwood] AutoClicker OFF") end end) RunService.Heartbeat:Connect(function() if not CFG.AutoClicker or not State.autoClickerEnabled then return end local now = tick() local interval = 1 / math.clamp(CFG.AutoClickerCPS, 20, 110) if now - State.lastAutoClick >= interval then State.lastAutoClick = now DoAutoClick() end end) local function GetTriggerTarget() local char = Player.Character local HRP = char and char:FindFirstChild("HumanoidRootPart") if not HRP then return nil end local mode = CFG.TriggerMode local mousePos = UIS:GetMouseLocation() local camPos = Camera.CFrame.Position local look = Camera.CFrame.LookVector local best, bestScore = nil, math.huge for _, p in ipairs(Players:GetPlayers()) do if p ~= Player and p.Character then local h = p.Character:FindFirstChild("HumanoidRootPart") local hum = p.Character:FindFirstChild("Humanoid") if h and hum and (not CFG.TriggerOnlyAlive or hum.Health > 0) then local dist = (HRP.Position - h.Position).Magnitude local sp, onScreen = Camera:WorldToViewportPoint(h.Position) if mode == "Crosshair" then if onScreen then local d = (Vector2.new(sp.X, sp.Y) - mousePos).Magnitude if d < 34 and d < bestScore then best, bestScore = p, d end end elseif mode == "FOV" then if onScreen then local d = (Vector2.new(sp.X, sp.Y) - mousePos).Magnitude if d <= CFG.TriggerFOV and d < bestScore then best, bestScore = p, d end end elseif mode == "Proximity" then if dist <= CFG.TriggerRange then local toEnemy = (h.Position - camPos) local dir = toEnemy.Magnitude > 0.01 and toEnemy.Unit or Vector3.zero local dot = look:Dot(dir) if dot > 0.28 and dist < bestScore then best, bestScore = p, dist end end end end end end return best end local function TriggerFire() local now = tick() if now - State.lastTriggerFire < CFG.TriggerDelay then return false end if RawFire() then State.lastTriggerFire = now State.lastParry = now return true end return false end local TriggerSG = Instance.new("ScreenGui") TriggerSG.Name = "BWS_TriggerFOV" TriggerSG.ResetOnSpawn = false TriggerSG.IgnoreGuiInset = true TriggerSG.Parent = game:GetService("CoreGui") local FOVCircle = Instance.new("Frame") FOVCircle.Size = UDim2.new(0, CFG.TriggerFOV * 2, 0, CFG.TriggerFOV * 2) FOVCircle.AnchorPoint = Vector2.new(0.5, 0.5) FOVCircle.Position = UDim2.new(0.5, 0, 0.5, 0) FOVCircle.BackgroundTransparency = 1 FOVCircle.BorderSizePixel = 0 FOVCircle.Visible = false FOVCircle.Parent = TriggerSG Instance.new("UICorner", FOVCircle).CornerRadius = UDim.new(1, 0) local fovStroke = Instance.new("UIStroke", FOVCircle) fovStroke.Color = Color3.fromRGB(255, 0, 180) fovStroke.Thickness = 1.2 fovStroke.Transparency = 0.35 local function UpdateFOVCircle() local show = CFG.TriggerBot and CFG.TriggerShowFOV and (CFG.TriggerMode == "FOV" or CFG.TriggerMode == "Crosshair") FOVCircle.Visible = show if show then local r = (CFG.TriggerMode == "Crosshair") and 30 or CFG.TriggerFOV FOVCircle.Size = UDim2.new(0, r * 2, 0, r * 2) local mp = UIS:GetMouseLocation() FOVCircle.Position = UDim2.new(0, mp.X, 0, mp.Y) fovStroke.Color = State.triggerTarget and Color3.fromRGB(0, 255, 80) or Color3.fromRGB(255, 0, 180) end end local function UpdateTriggerHighlight(target) if State.triggerHighlight then pcall(function() State.triggerHighlight:Destroy() end) State.triggerHighlight = nil end if not CFG.TriggerESP or not target or not target.Character then return end local h = target.Character:FindFirstChild("HumanoidRootPart") if not h then return end local box = Instance.new("BoxHandleAdornment") box.Adornee = h box.Size = Vector3.new(3.1, 4.1, 2.1) box.Color3 = Color3.fromRGB(255, 0, 180) box.Transparency = 0.55 box.ZIndex = 10 box.Parent = h State.triggerHighlight = box end UIS.InputBegan:Connect(function(input, gpe) if gpe then return end if CFG.TriggerHoldKey ~= "" then local ok, code = pcall(function() return Enum.KeyCode[CFG.TriggerHoldKey] end) if ok and input.KeyCode == code then State.triggerHeld = true end end end) UIS.InputEnded:Connect(function(input) if CFG.TriggerHoldKey ~= "" then local ok, code = pcall(function() return Enum.KeyCode[CFG.TriggerHoldKey] end) if ok and input.KeyCode == code then State.triggerHeld = false end end end) local function GetBallVel(ball) local z = ball:FindFirstChild("zoomies") if z then local vv = z:FindFirstChild("VectorVelocity") if vv then local ok, val = pcall(function() if vv:IsA("VectorValue") then return vv.Value end if typeof(vv.VectorVelocity) == "Vector3" then return vv.VectorVelocity end end) if ok and val and typeof(val) == "Vector3" then return val end end end return ball.AssemblyLinearVelocity end local function UpdateVelHistory(ball, vel) if not State.velHistory[ball] then State.velHistory[ball] = {} end local hist = State.velHistory[ball] table.insert(hist, 1, vel) if #hist > 5 then table.remove(hist) end end local function IsCurving(ball) local hist = State.velHistory[ball] if not hist or #hist < 3 then return false end local a, b = hist[1], hist[3] if a.Magnitude < 9 or b.Magnitude < 9 then return false end return a.Unit:Dot(b.Unit) < 0.83 end local function IsBall(obj) if not obj:IsA("BasePart") then return false end if obj:GetAttribute("realBall") then return true end local n = obj.Name:lower() if n:find("ball") then if (obj:IsA("Part") and obj.Shape == Enum.PartType.Ball) or obj:IsA("MeshPart") then return true end end return false end local function CleanObj(obj) State.ballCache[obj] = nil State.parriedBalls[obj] = nil State.prevBallPos[obj] = nil State.prevBallVel[obj] = nil State.velHistory[obj] = nil State.clashCount[obj] = nil if ActiveESP[obj] then ActiveESP[obj]:Destroy() ActiveESP[obj] = nil end end local function TrackObj(obj) if State.ballCache[obj] then return end if not IsBall(obj) then return end State.ballCache[obj] = true obj.AncestryChanged:Connect(function() if not obj:IsDescendantOf(workspace) then CleanObj(obj) end end) end task.spawn(function() for _, d in ipairs(workspace:GetDescendants()) do pcall(TrackObj, d) end end) workspace.DescendantAdded:Connect(function(obj) pcall(TrackObj, obj) end) local function GetCurveTarget(ball) local ballPos = ball.Position local ballVel = GetBallVel(ball) if ballVel.Magnitude < 1 then return nil end local fwd = ballVel.Unit local HRP = Player.Character and Player.Character:FindFirstChild("HumanoidRootPart") local dir = CFG.CurveDir local pwr = CFG.CurvePower if dir == "AtTarget" and HRP then local best, bestD = nil, math.huge for _, p in ipairs(Players:GetPlayers()) do if p ~= Player and p.Character then local h = p.Character:FindFirstChild("HumanoidRootPart") local hum = p.Character:FindFirstChild("Humanoid") if h and hum and hum.Health > 0 then local d = (HRP.Position - h.Position).Magnitude if d < bestD then bestD = d; best = h end end end end if best then return best.Position + Vector3.new(0, 2.1, 0) end dir = "Up" end if dir == "Random" then dir = ({"Up", "Left", "Right"})[math.random(3)] end if dir == "Up" then return ballPos + fwd * 52 + Vector3.new(0, pwr, 0) elseif dir == "Down" then return ballPos + fwd * 52 + Vector3.new(0, -pwr, 0) elseif dir == "Left" then local left = Vector3.new(0, 1, 0):Cross(fwd) if left.Magnitude > 0.01 then left = left.Unit else left = Vector3.new(1, 0, 0) end return ballPos + fwd * 52 + left * pwr elseif dir == "Right" then local right = fwd:Cross(Vector3.new(0, 1, 0)) if right.Magnitude > 0.01 then right = right.Unit else right = Vector3.new(1, 0, 0) end return ballPos + fwd * 52 + right * pwr end return ballPos + fwd * 52 + Vector3.new(0, pwr, 0) end local function AimAt(worldPos) local sp, onScreen = Camera:WorldToViewportPoint(worldPos) if onScreen then return sp.X, sp.Y end local vp = Camera.ViewportSize local center = Vector2.new(vp.X/2, vp.Y/2) local d = Vector2.new(sp.X, sp.Y) - center if d.Magnitude > 0 then local edge = center + d.Unit * math.min(vp.X, vp.Y) * 0.45 return edge.X, edge.Y end return nil, nil end local function Parry(ball, useCurve) local now = tick() if now < State.globalLock then return false end local cd = State.parriedBalls[ball] or 0 if now < cd then return false end if useCurve and CFG.AutoCurve then local target = GetCurveTarget(ball) if target then local cx, cy = AimAt(target) local mp = UIS:GetMouseLocation() if cx and mousemoveabs then pcall(function() mousemoveabs(cx, cy) end) RawFire() pcall(function() mousemoveabs(mp.X, mp.Y) end) else RawFire() end else RawFire() end else RawFire() end State.lastParry = now State.parriedBalls[ball] = now + (State.inClash and 0.055 or 0.13) return true end local function UpdateClashRate(ball, speed, flipped) local cd = State.clashCount[ball] if not cd then cd = {hits = 0, lastFlip = 0} State.clashCount[ball] = cd end if flipped then cd.hits = cd.hits + 1 cd.lastFlip = tick() end local now = tick() local clash = (cd.hits >= 1 and (now - cd.lastFlip) < 2.6) or speed > 82 if clash then State.inClash = true State.clashUntil = now + 1.05 local normalized = math.clamp((speed - 48) / 255, 0, 1) local rate = CFG.ClashMaxRate - (CFG.ClashMaxRate - CFG.ClashMinRate) * normalized State.clashRate = math.clamp(rate / CFG.ClashSpeedMult, CFG.ClashMinRate, CFG.ClashMaxRate) end return clash end local function IsBallThreateningMe(ball, pPos) if CFG.OnlyTargetedAtMe then local target = ball:GetAttribute("target") if target ~= Player.Name then return false end end local bPos = ball.Position local bVel = GetBallVel(ball) local speed = bVel.Magnitude if speed < 0.45 then return false end local toPlayer = pPos - bPos local dist = toPlayer.Magnitude if dist < 0.22 then return true, dist, speed, bVel, 1 end local toPlayerDir = toPlayer / dist local dot = bVel.Unit:Dot(toPlayerDir) local curve = IsCurving(ball) local minDot = curve and 0.035 or 0.07 if dot < minDot then return false end local maxDist = (speed > CFG.FastBallSpeed) and CFG.FastBallDistance or CFG.MaxParryDistance if dist > maxDist then return false end return true, dist, speed, bVel, dot end local function CalcETA(ball, pPos, pVel) local bPos = ball.Position local bVel = GetBallVel(ball) local relVel = bVel - pVel local toP = pPos - bPos local dist = toP.Magnitude if dist < 0.14 then return 0 end local closing = relVel:Dot(toP.Unit) if closing <= 0.035 then return 999 end return dist / closing end task.spawn(function() while true do task.wait() if State.inClash and CFG.Enabled and CFG.ClashEnabled then local now = tick() if now > State.clashUntil then State.inClash = false else local HRP = Player.Character and Player.Character:FindFirstChild("HumanoidRootPart") if HRP then local pPos = HRP.Position local hasThreat = false for ball in pairs(State.ballCache) do if ball and ball.Parent and IsBallThreateningMe(ball, pPos) then hasThreat = true break end end if hasThreat and (now - State.lastClashFire) >= State.clashRate then State.lastClashFire = now RawFire() State.lastParry = now elseif not hasThreat then State.inClash = false end end end end end end) local function MakeESP(ball) if ActiveESP[ball] then return end local bg = Instance.new("BillboardGui") bg.Adornee = ball bg.Size = UDim2.new(0, 150, 0, 28) bg.StudsOffset = Vector3.new(0, 2.4, 0) bg.AlwaysOnTop = true bg.Parent = ESPFolder local tl = Instance.new("TextLabel", bg) tl.Name = "Info" tl.Size = UDim2.new(1, 0, 1, 0) tl.BackgroundTransparency = 1 tl.TextColor3 = Color3.fromRGB(255, 70, 70) tl.Font = Enum.Font.GothamBold tl.TextSize = 11 tl.TextStrokeTransparency = 0.4 ActiveESP[ball] = bg end local function UpdateESP(ball, pPos) local bg = ActiveESP[ball] if not bg then return end local tl = bg:FindFirstChild("Info") if not tl then return end local target = ball:GetAttribute("target") local dist = math.floor((pPos - ball.Position).Magnitude) local spd = math.floor(GetBallVel(ball).Magnitude) if target == Player.Name then tl.Text = "⚠ YOU | " .. dist .. " | " .. spd tl.TextColor3 = Color3.fromRGB(255, 50, 50) else tl.Text = (target or "●") .. " | " .. dist tl.TextColor3 = Color3.fromRGB(150, 170, 220) end end local RING_SEG = 12 local RingParts = {} local ringRadius = 10 local ringColor = Color3.fromRGB(120, 40, 200) local cachedFloorY, lastFloorT = 0, 0 local rayP = RaycastParams.new() rayP.FilterType = Enum.RaycastFilterType.Exclude local function BuildRing() for _, p in ipairs(RingParts) do pcall(function() p:Destroy() end) end RingParts = {} for i = 1, RING_SEG do local s = Instance.new("Part") s.Anchored = true s.CanCollide = false s.CanTouch = false s.CanQuery = false s.CastShadow = false s.Size = Vector3.new(2, 0.1, 0.35) s.Material = Enum.Material.Neon s.Color = Color3.fromRGB(120, 40, 200) s.Transparency = 0.4 s.Parent = RingFolder RingParts[i] = s end end BuildRing() local function FloorY(pos) local now = tick() if now - lastFloorT < 0.35 then return cachedFloorY end lastFloorT = now local filterList = {Player.Character} for _, p in ipairs(RingParts) do filterList[#filterList+1] = p end rayP.FilterDescendantsInstances = filterList local r = workspace:Raycast(pos + Vector3.new(0, 5, 0), Vector3.new(0, -40, 0), rayP) cachedFloorY = r and (r.Position.Y + 0.05) or (pos.Y - 3) return cachedFloorY end local function UpdateRing(hrp, closeDist, state) if not CFG.ShowRing or not CFG.Enabled then for i = 1, RING_SEG do if RingParts[i] then RingParts[i].Transparency = 1 end end return end local targetR = 2 + 8 * math.clamp(closeDist / 40, 0, 1) ringRadius = ringRadius + (targetR - ringRadius) * 0.2 local tc = state == "clash" and Color3.fromRGB(255, 0, 180) or state == "parry" and Color3.fromRGB(0, 255, 80) or state == "danger" and Color3.fromRGB(255, 40, 40) or Color3.fromRGB(120, 40, 200) ringColor = ringColor:Lerp(tc, 0.25) local fy = FloorY(hrp) local segLen = math.max((2 * math.pi * ringRadius) / RING_SEG, 0.4) local tr = state == "clash" and 0.08 or state == "parry" and 0.12 or state == "danger" and 0.18 or 0.4 for i = 1, RING_SEG do local a = (i / RING_SEG) * math.pi * 2 local s = RingParts[i] if s then s.Size = Vector3.new(segLen, 0.1, 0.35) s.CFrame = CFrame.new(hrp.X + math.cos(a)*ringRadius, fy, hrp.Z + math.sin(a)*ringRadius) * CFrame.Angles(0, -a + math.pi/2, 0) s.Color = ringColor s.Transparency = tr end end end -- UI (same structure as before) local ACCENT = Color3.fromRGB(130, 55, 210) local ACCENT2 = Color3.fromRGB(165, 85, 240) local BG = Color3.fromRGB(14, 11, 22) local BG2 = Color3.fromRGB(22, 18, 30) local BG3 = Color3.fromRGB(30, 25, 42) local TXT = Color3.fromRGB(215, 210, 230) local DIM = Color3.fromRGB(55, 40, 75) local SG = Instance.new("ScreenGui") SG.Name = "AutoParryByBackwood" SG.ResetOnSpawn = false SG.ZIndexBehavior = Enum.ZIndexBehavior.Sibling SG.IgnoreGuiInset = true SG.Parent = game:GetService("CoreGui") local Pill = Instance.new("TextButton") Pill.Size = UDim2.new(0, 36, 0, 36) Pill.Position = UDim2.new(0, 8, 0.5, -18) Pill.BackgroundColor3 = BG Pill.Text = "⚔" Pill.TextColor3 = Color3.new(1,1,1) Pill.TextSize = 18 Pill.Font = Enum.Font.GothamBold Pill.BorderSizePixel = 0 Pill.Active = true Pill.Draggable = true Pill.Parent = SG Instance.new("UICorner", Pill).CornerRadius = UDim.new(0, 10) Instance.new("UIStroke", Pill).Color = ACCENT local Panel = Instance.new("Frame") Panel.Size = UDim2.new(0, 240, 0, 0) Panel.Position = UDim2.new(0, 52, 0.5, -200) Panel.BackgroundColor3 = BG Panel.BorderSizePixel = 0 Panel.ClipsDescendants = true Panel.Active = true Panel.Draggable = true Panel.Visible = false Panel.Parent = SG Instance.new("UICorner", Panel).CornerRadius = UDim.new(0, 10) local pStroke = Instance.new("UIStroke", Panel) pStroke.Color = ACCENT pStroke.Thickness = 1.2 local Header = Instance.new("Frame", Panel) Header.Size = UDim2.new(1, 0, 0, 32) Header.BackgroundColor3 = BG2 Header.BorderSizePixel = 0 Instance.new("UICorner", Header).CornerRadius = UDim.new(0, 10) local TitleLbl = Instance.new("TextLabel", Header) TitleLbl.Size = UDim2.new(1, -40, 1, 0) TitleLbl.Position = UDim2.new(0, 10, 0, 0) TitleLbl.BackgroundTransparency = 1 TitleLbl.Text = "Backwood v15.0" TitleLbl.TextColor3 = Color3.new(1,1,1) TitleLbl.Font = Enum.Font.GothamBold TitleLbl.TextSize = 12 TitleLbl.TextXAlignment = Enum.TextXAlignment.Left local Dot = Instance.new("Frame", Header) Dot.Size = UDim2.new(0, 8, 0, 8) Dot.Position = UDim2.new(1, -18, 0.5, -4) Dot.BackgroundColor3 = Color3.fromRGB(0, 255, 80) Dot.BorderSizePixel = 0 Instance.new("UICorner", Dot).CornerRadius = UDim.new(1, 0) local TabBar = Instance.new("Frame", Panel) TabBar.Size = UDim2.new(1, -8, 0, 24) TabBar.Position = UDim2.new(0, 4, 0, 35) TabBar.BackgroundTransparency = 1 local TabContent = Instance.new("Frame", Panel) TabContent.Size = UDim2.new(1, -4, 1, -64) TabContent.Position = UDim2.new(0, 2, 0, 62) TabContent.BackgroundTransparency = 1 TabContent.ClipsDescendants = true local tabs = {"Main", "Clash", "Curve", "Trigger", "Visual"} local tabFrames, tabButtons = {}, {} for _, name in ipairs(tabs) do local page = Instance.new("ScrollingFrame", TabContent) page.Size = UDim2.new(1, 0, 1, 0) page.BackgroundTransparency = 1 page.BorderSizePixel = 0 page.ScrollBarThickness = 2 page.ScrollBarImageColor3 = ACCENT page.AutomaticCanvasSize = Enum.AutomaticSize.Y page.Visible = (name == "Main") Instance.new("UIListLayout", page).Padding = UDim.new(0, 3) local pad = Instance.new("UIPadding", page) pad.PaddingLeft = UDim.new(0, 2) pad.PaddingRight = UDim.new(0, 2) pad.PaddingTop = UDim.new(0, 2) tabFrames[name] = page end local tabLay = Instance.new("UIListLayout", TabBar) tabLay.FillDirection = Enum.FillDirection.Horizontal tabLay.Padding = UDim.new(0, 3) for _, name in ipairs(tabs) do local tb = Instance.new("TextButton", TabBar) tb.Size = UDim2.new(0, 44, 1, 0) tb.BackgroundColor3 = (name == "Main") and ACCENT or BG3 tb.Text = name tb.TextColor3 = TXT tb.Font = Enum.Font.GothamBold tb.TextSize = 9 tb.BorderSizePixel = 0 tb.AutoButtonColor = false Instance.new("UICorner", tb).CornerRadius = UDim.new(0, 6) tabButtons[name] = tb tb.MouseButton1Click:Connect(function() for n, f in pairs(tabFrames) do f.Visible = (n == name) tabButtons[n].BackgroundColor3 = (n == name) and ACCENT or BG3 end end) end local function MkToggle(parent, text, key, order) local btn = Instance.new("TextButton", parent) btn.Size = UDim2.new(1, 0, 0, 26) btn.BackgroundColor3 = BG3 btn.BorderSizePixel = 0 btn.Text = "" btn.AutoButtonColor = false btn.LayoutOrder = order or 0 Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 5) local lbl = Instance.new("TextLabel", btn) lbl.Size = UDim2.new(1, -44, 1, 0) lbl.Position = UDim2.new(0, 8, 0, 0) lbl.BackgroundTransparency = 1 lbl.Text = text lbl.TextColor3 = TXT lbl.Font = Enum.Font.Gotham lbl.TextSize = 10 lbl.TextXAlignment = Enum.TextXAlignment.Left local track = Instance.new("Frame", btn) track.Size = UDim2.new(0, 28, 0, 14) track.Position = UDim2.new(1, -36, 0.5, -7) track.BackgroundColor3 = CFG[key] and ACCENT or DIM track.BorderSizePixel = 0 Instance.new("UICorner", track).CornerRadius = UDim.new(1, 0) local knob = Instance.new("Frame", track) knob.Size = UDim2.new(0, 10, 0, 10) knob.Position = CFG[key] and UDim2.new(1, -12, 0.5, -5) or UDim2.new(0, 2, 0.5, -5) knob.BackgroundColor3 = Color3.new(1,1,1) knob.BorderSizePixel = 0 Instance.new("UICorner", knob).CornerRadius = UDim.new(1, 0) btn.MouseButton1Click:Connect(function() CFG[key] = not CFG[key] TweenService:Create(track, TweenInfo.new(0.15), {BackgroundColor3 = CFG[key] and ACCENT or DIM}):Play() TweenService:Create(knob, TweenInfo.new(0.15, Enum.EasingStyle.Back), { Position = CFG[key] and UDim2.new(1, -12, 0.5, -5) or UDim2.new(0, 2, 0.5, -5) }):Play() end) end local function MkSlider(parent, text, key, mn, mx, stp, order) local f = Instance.new("Frame", parent) f.Size = UDim2.new(1, 0, 0, 34) f.BackgroundColor3 = BG3 f.BorderSizePixel = 0 f.LayoutOrder = order or 0 Instance.new("UICorner", f).CornerRadius = UDim.new(0, 5) local lbl = Instance.new("TextLabel", f) lbl.Size = UDim2.new(1, -44, 0, 14) lbl.Position = UDim2.new(0, 8, 0, 1) lbl.BackgroundTransparency = 1 lbl.Text = text lbl.TextColor3 = TXT lbl.Font = Enum.Font.Gotham lbl.TextSize = 9 lbl.TextXAlignment = Enum.TextXAlignment.Left local val = Instance.new("TextLabel", f) val.Size = UDim2.new(0, 36, 0, 14) val.Position = UDim2.new(1, -42, 0, 1) val.BackgroundTransparency = 1 val.Text = tostring(CFG[key]) val.TextColor3 = ACCENT2 val.Font = Enum.Font.GothamBold val.TextSize = 9 local bar = Instance.new("TextButton", f) bar.Size = UDim2.new(1, -16, 0, 5) bar.Position = UDim2.new(0, 8, 0, 22) bar.BackgroundColor3 = Color3.fromRGB(38, 30, 52) bar.BorderSizePixel = 0 bar.Text = "" bar.AutoButtonColor = false Instance.new("UICorner", bar).CornerRadius = UDim.new(1, 0) local fill = Instance.new("Frame", bar) fill.Size = UDim2.new(math.clamp((CFG[key]-mn)/(mx-mn), 0, 1), 0, 1, 0) fill.BackgroundColor3 = ACCENT fill.BorderSizePixel = 0 Instance.new("UICorner", fill).CornerRadius = UDim.new(1, 0) local dragging = false local function update(i) if not dragging then return end local r = math.clamp((i.Position.X - bar.AbsolutePosition.X) / bar.AbsoluteSize.X, 0, 1) local v = math.floor((mn + (mx-mn)*r)/stp + 0.5)*stp v = math.clamp(v, mn, mx) CFG[key] = v fill.Size = UDim2.new(r, 0, 1, 0) val.Text = string.format(stp < 1 and "%.3f" or "%d", v) end bar.InputBegan:Connect(function(i) if i.UserInputType == Enum.UserInputType.MouseButton1 or i.UserInputType == Enum.UserInputType.Touch then dragging = true; update(i) end end) UIS.InputEnded:Connect(function(i) if i.UserInputType == Enum.UserInputType.MouseButton1 or i.UserInputType == Enum.UserInputType.Touch then dragging = false end end) UIS.InputChanged:Connect(function(i) if i.UserInputType == Enum.UserInputType.MouseMovement or i.UserInputType == Enum.UserInputType.Touch then update(i) end end) end local function MkDropdown(parent, text, key, options, order) local f = Instance.new("Frame", parent) f.Size = UDim2.new(1, 0, 0, 26) f.BackgroundColor3 = BG3 f.BorderSizePixel = 0 f.LayoutOrder = order or 0 f.ClipsDescendants = true Instance.new("UICorner", f).CornerRadius = UDim.new(0, 5) local lbl = Instance.new("TextLabel", f) lbl.Size = UDim2.new(0.45, 0, 0, 26) lbl.Position = UDim2.new(0, 8, 0, 0) lbl.BackgroundTransparency = 1 lbl.Text = text lbl.TextColor3 = TXT lbl.Font = Enum.Font.Gotham lbl.TextSize = 9 lbl.TextXAlignment = Enum.TextXAlignment.Left local sel = Instance.new("TextButton", f) sel.Size = UDim2.new(0.5, -6, 0, 20) sel.Position = UDim2.new(0.5, 0, 0, 3) sel.BackgroundColor3 = Color3.fromRGB(35, 28, 50) sel.BorderSizePixel = 0 sel.Text = CFG[key] .. " ▼" sel.TextColor3 = ACCENT2 sel.Font = Enum.Font.GothamBold sel.TextSize = 9 sel.AutoButtonColor = false Instance.new("UICorner", sel).CornerRadius = UDim.new(0, 4) local open = false sel.MouseButton1Click:Connect(function() open = not open if open then f.Size = UDim2.new(1, 0, 0, 26 + #options*20 + 4) for idx, opt in ipairs(options) do local ob = Instance.new("TextButton", f) ob.Name = "dd_" .. opt ob.Size = UDim2.new(0.5, -6, 0, 18) ob.Position = UDim2.new(0.5, 0, 0, 24 + (idx-1)*20) ob.BackgroundColor3 = Color3.fromRGB(30, 25, 45) ob.BorderSizePixel = 0 ob.Text = opt ob.TextColor3 = (opt == CFG[key]) and ACCENT2 or TXT ob.Font = Enum.Font.Gotham ob.TextSize = 9 ob.AutoButtonColor = false Instance.new("UICorner", ob).CornerRadius = UDim.new(0, 4) ob.MouseButton1Click:Connect(function() CFG[key] = opt sel.Text = opt .. " ▼" open = false f.Size = UDim2.new(1, 0, 0, 26) for _, c in ipairs(f:GetChildren()) do if c.Name:sub(1,3) == "dd_" then c:Destroy() end end end) end else f.Size = UDim2.new(1, 0, 0, 26) for _, c in ipairs(f:GetChildren()) do if c.Name:sub(1,3) == "dd_" then c:Destroy() end end end end) end MkToggle(tabFrames.Main, "Auto Parry", "Enabled", 1) MkToggle(tabFrames.Main, "Only Target Me", "OnlyTargetedAtMe", 2) MkToggle(tabFrames.Main, "Ping Compensation", "PingComp", 3) MkToggle(tabFrames.Main, "Auto Clicker (Key 4)", "AutoClicker", 4) MkSlider(tabFrames.Main, "Auto Clicker CPS", "AutoClickerCPS", 20, 110, 1, 5) MkSlider(tabFrames.Main, "Extra Safety (ms)", "ExtraMs", 0, 60, 5, 6) MkSlider(tabFrames.Main, "Fire Debounce (s)", "FireDebounce", 0.05, 0.15, 0.005, 7) MkSlider(tabFrames.Main, "Parry Distance", "MaxParryDistance", 15, 55, 1, 8) MkSlider(tabFrames.Main, "Fast Ball Distance", "FastBallDistance", 25, 85, 1, 9) MkSlider(tabFrames.Main, "Fast Ball Speed", "FastBallSpeed", 50, 200, 5, 10) MkToggle(tabFrames.Clash, "Enable Clash Mode", "ClashEnabled", 1) MkSlider(tabFrames.Clash, "Speed Multiplier", "ClashSpeedMult", 0.6, 1.8, 0.05, 2) MkSlider(tabFrames.Clash, "Min Rate", "ClashMinRate", 0.01, 0.08, 0.005, 3) MkSlider(tabFrames.Clash, "Max Rate", "ClashMaxRate", 0.05, 0.15, 0.005, 4) MkToggle(tabFrames.Curve, "Auto Curve", "AutoCurve", 1) MkDropdown(tabFrames.Curve, "Direction", "CurveDir", {"AtTarget", "Random", "Up", "Down", "Left", "Right"}, 2) MkSlider(tabFrames.Curve, "Curve Power", "CurvePower", 20, 180, 5, 3) MkToggle(tabFrames.Trigger, "Trigger Bot", "TriggerBot", 1) MkDropdown(tabFrames.Trigger, "Mode", "TriggerMode", {"Crosshair", "FOV", "Proximity"}, 2) MkSlider(tabFrames.Trigger, "FOV Radius", "TriggerFOV", 30, 150, 5, 3) MkSlider(tabFrames.Trigger, "Proximity Range", "TriggerRange", 10, 45, 1, 4) MkSlider(tabFrames.Trigger, "Trigger Delay", "TriggerDelay", 0.02, 0.15, 0.005, 5) MkToggle(tabFrames.Trigger, "Show FOV Circle", "TriggerShowFOV", 6) MkToggle(tabFrames.Trigger, "Target Highlight", "TriggerESP", 7) MkToggle(tabFrames.Trigger, "Only Alive", "TriggerOnlyAlive", 8) MkToggle(tabFrames.Visual, "Floor Ring", "ShowRing", 1) MkToggle(tabFrames.Visual, "Ball ESP", "BallESP", 2) local menuOpen = false local PANEL_HEIGHT = 420 local function ToggleMenu() menuOpen = not menuOpen if menuOpen then Panel.Visible = true TweenService:Create(Panel, TweenInfo.new(0.25, Enum.EasingStyle.Back), {Size = UDim2.new(0, 240, 0, PANEL_HEIGHT)}):Play() else TweenService:Create(Panel, TweenInfo.new(0.18), {Size = UDim2.new(0, 240, 0, 0)}):Play() task.delay(0.2, function() if not menuOpen then Panel.Visible = false end end) end end Pill.MouseButton1Click:Connect(ToggleMenu) UIS.InputBegan:Connect(function(input, gpe) if gpe then return end if input.KeyCode == Enum.KeyCode.Insert then ToggleMenu() end end) RunService.RenderStepped:Connect(function(dt) State.frame = State.frame + 1 local f = State.frame if f % 14 == 0 then Dot.BackgroundColor3 = State.inClash and Color3.fromRGB(255, 0, 180) or (State.triggerTarget and Color3.fromRGB(255, 0, 180)) or (State.autoClickerEnabled and Color3.fromRGB(255, 150, 0)) or (CFG.Enabled and Color3.fromRGB(0, 255, 80) or Color3.fromRGB(80, 80, 80)) end local char = Player.Character local HRP = char and char:FindFirstChild("HumanoidRootPart") if not CFG.Enabled or not HRP then if not CFG.Enabled then for i = 1, RING_SEG do if RingParts[i] then RingParts[i].Transparency = 1 end end end return end local pPos = HRP.Position local now = tick() if dt > 0 and State.prevPlayerPos ~= Vector3.zero then State.playerVel = (pPos - State.prevPlayerPos) / dt end State.prevPlayerPos = pPos if f % 22 == 0 then for b, expiry in pairs(State.parriedBalls) do if now > expiry then State.parriedBalls[b] = nil end end end local ringState = "idle" local closeDist = 999 for ball in pairs(State.ballCache) do if ball and ball.Parent then local bPos = ball.Position local dist = (pPos - bPos).Magnitude if CFG.BallESP and f % 9 == 0 then if dist < 190 then if not ActiveESP[ball] then MakeESP(ball) end UpdateESP(ball, pPos) elseif ActiveESP[ball] then ActiveESP[ball]:Destroy() ActiveESP[ball] = nil end end if dist > 85 then State.prevBallVel[ball] = nil State.prevBallPos[ball] = nil State.velHistory[ball] = nil else local bVel = GetBallVel(ball) local speed = bVel.Magnitude if speed < 1 and State.prevBallPos[ball] and dt > 0 then bVel = (bPos - State.prevBallPos[ball]) / dt speed = bVel.Magnitude end UpdateVelHistory(ball, bVel) local flipped = false local prevVel = State.prevBallVel[ball] if prevVel and prevVel.Magnitude > 14 and speed > 14 then if bVel:Dot(prevVel) / (speed * prevVel.Magnitude) < -0.22 then flipped = true end end State.prevBallPos[ball] = bPos State.prevBallVel[ball] = bVel local threat, tDist, tSpeed = IsBallThreateningMe(ball, pPos) if threat then closeDist = math.min(closeDist, tDist) ringState = "danger" local isClash = UpdateClashRate(ball, tSpeed, flipped) local eta = CalcETA(ball, pPos, State.playerVel) local curving = IsCurving(ball) local pingSec = CFG.PingComp and State.ping or 0 local safety = (CFG.ExtraMs or 20) / 1000 local triggerWindow = pingSec + safety + 0.048 if tSpeed > 120 then triggerWindow = triggerWindow + 0.022 end if tSpeed > 180 then triggerWindow = triggerWindow + 0.028 end if curving then triggerWindow = triggerWindow + 0.018 end local shouldParry = eta <= triggerWindow or tDist < 17 or (tSpeed > 95 and tDist < 30) or (tSpeed > 160 and tDist < 45) or (curving and tDist < 34) if isClash then ringState = "clash" elseif shouldParry then if Parry(ball, true) then ringState = "parry" end end end end end end if CFG.TriggerBot then local holdOk = (CFG.TriggerHoldKey == "") or State.triggerHeld if holdOk then local target = GetTriggerTarget() if target ~= State.triggerTarget then State.triggerTarget = target UpdateTriggerHighlight(target) end if target then TriggerFire() ringState = "clash" end else if State.triggerTarget then State.triggerTarget = nil UpdateTriggerHighlight(nil) end end if f % 4 == 0 then UpdateFOVCircle() end else FOVCircle.Visible = false end if State.inClash then ringState = "clash" end if (now - State.lastParry) < 0.18 and ringState == "idle" then ringState = "parry" end if f % 4 == 0 then UpdateRing(pPos, closeDist, ringState) end end) RunService.Heartbeat:Connect(function() if not CFG.Enabled or State.inClash then return end local now = tick() if now < State.globalLock then return end local HRP = Player.Character and Player.Character:FindFirstChild("HumanoidRootPart") if not HRP then return end local pPos = HRP.Position for ball in pairs(State.ballCache) do if ball and ball.Parent and not State.parriedBalls[ball] then if ball:GetAttribute("target") == Player.Name then local dist = (pPos - ball.Position).Magnitude if dist < 15 then local bVel = GetBallVel(ball) if bVel.Magnitude > 1 then local toP = pPos - ball.Position if toP.Magnitude > 0.01 and bVel.Unit:Dot(toP.Unit) > 0.06 then Parry(ball, true) break end end end end end end end) Player.CharacterRemoving:Connect(function() State.parriedBalls = {} State.prevBallPos = {} State.prevBallVel = {} State.velHistory = {} State.clashCount = {} State.playerVel = Vector3.zero State.prevPlayerPos = Vector3.zero State.globalLock = 0 State.inClash = false State.lastFireTime = 0 State.autoClickerEnabled = false UpdateTriggerHighlight(nil) for i = 1, RING_SEG do if RingParts[i] then RingParts[i].Transparency = 1 end end for _, bg in pairs(ActiveESP) do bg:Destroy() end ActiveESP = {} end) local notif = Instance.new("TextLabel", SG) notif.Size = UDim2.new(0, 340, 0, 34) notif.Position = UDim2.new(0.5, -170, 0, -50) notif.BackgroundColor3 = BG notif.TextColor3 = Color3.new(1,1,1) notif.Font = Enum.Font.GothamBold notif.TextSize = 12 notif.Text = "⚔ Backwood v15.0 — Slightly More Aggressive" notif.BorderSizePixel = 0 Instance.new("UICorner", notif).CornerRadius = UDim.new(0, 8) Instance.new("UIStroke", notif).Color = ACCENT TweenService:Create(notif, TweenInfo.new(0.4, Enum.EasingStyle.Back), {Position = UDim2.new(0.5, -170, 0, 12)}):Play() task.delay(2.5, function() TweenService:Create(notif, TweenInfo.new(0.25), {Position = UDim2.new(0.5, -170, 0, -50)}):Play() task.wait(0.3) notif:Destroy() end) print("══════════════════════════════") print("Auto parry by backwood ") print("95%") print("") print("") print("") print("══════════════════════════════") end) if not success then warn("[Backwood] ERROR: " .. tostring(err)) end