Further enhance and add in an advanced predictive algorithm and replace the auto-block method with heartbeat so it wouldn't be framerate dependent. Also, make it so when it detects these animations close to your humanoid proximity, it'll block and track the humanoidrootpart that's playing this animations:

Left Dash: rbxassetid://10480796021
Right Dash: rbxassetid://10480793962
Front Dash: rbxassetid://10479335397
Back Dash: rbxassetid://10491993682

```
local players = game:GetService("Players")
local plr = players.LocalPlayer
local cd = false
local Settings = {
    Autoparry = { Toggle = true, Range = 25, Delay = 0,Fov = 180, Facing = false,Dodgerange = 3,Aimhelper = false,},ESP = { Toggle = false, Config = {} },
    Tpaura = {Toggle = false,},
}

local anims = {
    --saitama
    ["rbxassetid://10469493270"] = { [1] = 0, [2] = 0.30 },
    ["rbxassetid://10469630950"] = { [1] = 0, [2] = 0.30 },
    ["rbxassetid://10469639222"] = { [1] = 0, [2] = 0.30 },
    ["rbxassetid://10469643643"] = { [1] = 0, [2] = 0.30 },
    --hunter
    ["rbxassetid://13532562418"] = { [1] = 0, [2] = 0.30 },
    ["rbxassetid://13532600125"] = { [1] = 0, [2] = 0.30 },
    ["rbxassetid://13532604085"] = { [1] = 0, [2] = 0.30 },
    ["rbxassetid://13294471966"] = { [1] = 0, [2] = 0.30 },
    --cyborg
    ["rbxassetid://13491635433"] = { [1] = 0, [2] = 0.30 },
    ["rbxassetid://13296577783"] = { [1] = 0, [2] = 0.30 },
    ["rbxassetid://13295919399"] = { [1] = 0, [2] = 0.30 },
    ["rbxassetid://13295936866"] = { [1] = 0, [2] = 0.30 },
    --ninja
    ["rbxassetid://13370310513"] = { [1] = 0, [2] = 0.30 },
    ["rbxassetid://13390230973"] = { [1] = 0, [2] = 0.30 },
    ["rbxassetid://13378751717"] = { [1] = 0, [2] = 0.30 },
    ["rbxassetid://13378708199"] = { [1] = 0, [2] = 0.30 },
    abilities = {
    }
}
local dodges = {
    ["rbxassetid://10479335397"] = { [1] = 0, [2] = 0.50 }, 
    ["rbxassetid://13380255751"] = { [1] = 0, [2] = 0.50 }
}
local barrages = {
    ["rbxassetid://10466974800"] = { [1] = 0.20, [2] = 1.80 },
    ["rbxassetid://12534735382"] = { [1] = 0.20, [2] = 1.80 }
}
local abilities = {
    ["rbxassetid://10468665991"] = { [1] = 0.15, [2] = 0.60 },
    ["rbxassetid://13376869471"] = { [1] = 0.05, [2] = 1 },
    ["rbxassetid://13376962659"] = { [1] = 0, [2] = 2 },
    ["rbxassetid://12296882427"] = { [1] = 0.05, [2] = 1 },--sonic
    ["rbxassetid://13309500827"] = { [1] = 0.05, [2] = 1 },--sonic
    ["rbxassetid://13365849295"] = { [1] = 0, [2] = 1 },--sonic
    ["rbxassetid://13377153603"] = { [1] = 0, [2] = 1 },--soni
    ["rbxassetid://12509505723"] = { [1] = 0.09, [2] = 2 }, -- dash for cyborg lmao

}

local closestplr, anim, plrDirection, unit, value,dodge
function closest()
    closestplr = {}
    for i, v in next, players:GetChildren() do -- we want to use GetChildren instead of GetPlayers because we love children (written by mac)
        if v.Character and plr.Character:WaitForChild("HumanoidRootPart", 1) and v ~= plr and v.Character ~= plr.Character and v.Character:FindFirstChild("HumanoidRootPart")
            and (v.Character.HumanoidRootPart.Position - plr.Character.HumanoidRootPart.Position).Magnitude < Settings.Autoparry.Range
        then
            table.insert(closestplr, v)
        end
    end
    return closestplr
end



function attackchecker()
    for i,Anim in next, plr.Character.Humanoid.Animator:GetPlayingAnimationTracks() do
        z = anims[Anim.Animation.AnimationId] 
        q = dodges[Anim.Animation.AnimationId]
        j = abilities[Anim.Animation.AnimationId]
        k =  barrages[Anim.Animation.AnimationId]
        if z or q or j or k then  return true
        else return false
        end
    end
end

function isfacing(object)
    if Settings.Autoparry.Toggle then
        if Settings.Autoparry.Facing then
            plrDirection = plr.Character.Head.CFrame.LookVector
            unit = (object.Head.CFrame.p - plr.Character.Head.CFrame.p).Unit
            value = math.pow((plrDirection - unit).Magnitude / 2, 2)
            if value >= Settings.Autoparry.Fov / 360 then
                return false
            else
                return true
            end
        else
            return true
        end
    end
end 

function allowed(enemy)
    if not plr.Character:FindFirstChild("M1ing") and not attackchecker() and isfacing(enemy) then 
        return true
    end
end

local durations = {
    ["anim" ] = 0.3,
    ["dodge" ] = 0.9,
    ["barrage" ] = 0.9,
    ["ability" ] = 0.6,
}

function def(action)
    if cd then
        return
end
    task.wait(Settings.Autoparry.Delay)
print("parry attempt".."|"..action)
    cd = true
    plr.Character.Communicate:FireServer({["Goal"] = "KeyPress", ["Key"] = Enum.KeyCode.F})
    task.wait(durations[action])
    plr.Character.Communicate:FireServer({["Goal"] = "KeyRelease",["Key"] = Enum.KeyCode.F})
    cd = false
end

function barragechecker(enemy)
    if enemy:FindFirstChild("BarrageBind") then
        return true
    else
        return false
    end
end

function lookat(enemy)
    if Settings.Autoparry.Aimhelper then
        plr.Character.HumanoidRootPart.CFrame = CFrame.lookAt(plr.Character.HumanoidRootPart.Position, enemy.HumanoidRootPart.Position)
    end
end

function parry()
    for i, c in closest() do
        if c and plr.Character:WaitForChild("HumanoidRootPart", 2) and c.Character and c.Character:FindFirstChild("Humanoid") and c.Character.Humanoid:FindFirstChild("Animator")
        then
            for i, v in next, c.Character.Humanoid.Animator:GetPlayingAnimationTracks() do
                anim = anims[v.Animation.AnimationId] 
                dodge = dodges[v.Animation.AnimationId]
                ability = abilities[v.Animation.AnimationId]
                barrage = barrages[v.Animation.AnimationId]
                if allowed(c.Character) and  anim  and v.TimePosition >= anim[1] and v.TimePosition <= anim[2] then
                    task.spawn(function()
                        def("anim")
                        lookat(c.Character)
                    end)
                elseif allowed(c.Character) and dodge  and v.TimePosition > dodge[1] and v.TimePosition < dodge[2]   then
                    task.spawn(function()
                        def("dodge")
                        lookat(c.Character)
                    end)
                elseif allowed(c.Character) and  barrage and v.TimePosition > barrage[1] and v.TimePosition < barrage[2]   then
                    task.spawn(function()
                        def("barrage")
                        lookat(c.Character)
                    end)
                elseif allowed(c.Character) and ability and v.TimePosition > ability[1] and v.TimePosition < ability[2]  then
                    task.spawn(function()
                        def("ability")
                        lookat(c.Character)
                    end)
                end
            end
         end
    end
end



task.spawn(function()
    game:GetService("RunService").RenderStepped:Connect(function()
        if Settings.Autoparry.Toggle then
            parry()
        end
    end)
end)

warn("Executed")