-- Load Rayfield UI
local Rayfield = loadstring(game:HttpGet('https://[Log in to view URL]'))()

-- Wait until the game and character fully load
repeat wait() until game:IsLoaded() and game.Players.LocalPlayer and game.Players.LocalPlayer.Character

-- Rayfield Window
local Window = Rayfield:CreateWindow({
    Name = "T_T Hub",
    LoadingTitle = "T_T Hub",
    LoadingSubtitle = "powered by Chaos Lord",
    ConfigurationSaving = { Enabled = false },
    Discord = { Enabled = false },
    KeySystem = false
})

local MainTab = Window:CreateTab("Settings", 4483362458)
MainTab:CreateSection("Main")

-- Variables
local autoParryEnabled = false
local lastParryTime = 0
local parryCount = 0
local parryCooldown = 1
local parryRange = 15
local pingOffset = 0.1
local predictionTime = 0.2
local detectionDelay = 0.05
local remote = nil

-- Try to find the RemoteEvent
task.spawn(function()
    while not remote do
        remote = game:GetService("ReplicatedStorage"):FindFirstChild("Parry")
        if not remote then
            warn("[T_T Hub] Waiting for 'Parry' RemoteEvent...")
        end
        task.wait(1)
    end
    print("[T_T Hub] 'Parry' RemoteEvent found.")
end)

-- UI Controls
MainTab:CreateToggle({
    Name = "Auto Parry",
    CurrentValue = false,
    Flag = "AutoParryToggle",
    Callback = function(Value)
        autoParryEnabled = Value
        Rayfield:Notify({
            Title = "Auto Parry",
            Content = Value and "Enabled All Features" or "Disabled All Features",
            Duration = 3
        })
    end,
})

MainTab:CreateSlider({
    Name = "Parry Range",
    Range = {5, 30},
    Increment = 1,
    Suffix = "studs",
    CurrentValue = parryRange,
    Callback = function(Value)
        parryRange = Value
    end,
})

MainTab:CreateSlider({
    Name = "Parry Cooldown",
    Range = {0.2, 2},
    Increment = 0.1,
    Suffix = "sec",
    CurrentValue = parryCooldown,
    Callback = function(Value)
        parryCooldown = Value
    end,
})

MainTab:CreateSlider({
    Name = "Ping Compensation",
    Range = {0, 0.5},
    Increment = 0.05,
    Suffix = "sec",
    CurrentValue = pingOffset,
    Callback = function(Value)
        pingOffset = Value
    end,
})

-- Counter GUI
local screenGui = Instance.new("ScreenGui", game.CoreGui)
local counterLabel = Instance.new("TextLabel", screenGui)
counterLabel.Size = UDim2.new(0, 200, 0, 40)
counterLabel.Position = UDim2.new(0, 20, 0, 60)
counterLabel.BackgroundTransparency = 1
counterLabel.TextScaled = true
counterLabel.Font = Enum.Font.SourceSansBold
counterLabel.TextColor3 = Color3.new(1, 1, 1)
counterLabel.TextStrokeTransparency = 0.6
counterLabel.Text = "Parries: 0"

-- Keybind (P) to toggle Auto Parry
game:GetService("UserInputService").InputBegan:Connect(function(input, gp)
    if not gp and input.KeyCode == Enum.KeyCode.P then
        autoParryEnabled = not autoParryEnabled
        Rayfield:Notify({
            Title = "Keybind Toggled",
            Content = autoParryEnabled and "Enabled" or "Disabled",
            Duration = 2
        })
    end
end)

-- Function to perform parry
local function performParry()
    if remote and (tick() - lastParryTime) >= (parryCooldown - pingOffset) then
        remote:FireServer()
        lastParryTime = tick()
        parryCount += 1
        counterLabel.Text = "Parries: " .. tostring(parryCount)
    end
end

-- FPS Monitoring (only runs if autoParryEnabled)
task.spawn(function()
    while true do
        if autoParryEnabled then
            local frames = 0
            local start = tick()
            while tick() - start < 1 do
                frames += 1
                task.wait()
            end

            if frames < 40 then
                detectionDelay = 0.1
                predictionTime = 0.3
            elseif frames > 70 then
                detectionDelay = 0.03
                predictionTime = 0.15
            else
                detectionDelay = 0.05
                predictionTime = 0.2
            end
        end
        task.wait(2)
    end
end)

-- Main detection logic (checks every frame if autoParryEnabled is true)
task.spawn(function()
    while true do
        if autoParryEnabled and remote then
            task.wait(detectionDelay)
            local player = game.Players.LocalPlayer
            local char = player.Character or player.CharacterAdded:Wait()
            local hrp = char:FindFirstChild("HumanoidRootPart")

            if hrp then
                for _, obj in pairs(workspace:GetDescendants()) do
                    if obj:IsA("BasePart") and obj.Name:lower():find("ball") then
                        local futurePos = obj.Position + (obj.Velocity * predictionTime)
                        local futureDist = (futurePos - hrp.Position).Magnitude
                        local relVel = (obj.Velocity - hrp.Velocity).Unit
                        local dirToPlayer = (hrp.Position - obj.Position).Unit
                        local threat = relVel:Dot(dirToPlayer) > 0.5

                        if futureDist <= parryRange and threat then
                            performParry()
                            break
                        end
                    end
                end
            end
        else
            task.wait(0.5)
        end
    end
end)

-- Confirmation message
Rayfield:Notify({
    Title = "Script Ready",
    Content = "Auto Parry is fully optimized and connected to your toggle.",
    Duration = 5
})

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: