universal parry fling script
Key RequiredUniversal

universal parry fling script

Universal Scriptc00lk144c00lk144 886 views 7.3K executesUpdated Sep 17, 2026
Unrated
00
Lua Script•542 lines (18546 chars)
-- Services
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local TweenService = game:GetService("TweenService")
local UserInputService = game:GetService("UserInputService")
local Workspace = game:GetService("Workspace")

local player = Players.LocalPlayer

-- Prevent duplicate GUI across resets
if player.PlayerGui:FindFirstChild("ParryFlingGui") then
    player.PlayerGui.ParryFlingGui:Destroy()
end

-- Create GUI Container
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "ParryFlingGui"
screenGui.ResetOnSpawn = false
screenGui.Parent = player.PlayerGui

--- ==========================================
--- SETTINGS STATES & CONFIG
--- ==========================================
local minigameEnabled = true
local noPartMode = false
local defaultFlingHeight = 257
local currentFlingHeight = 257

--- ==========================================
--- 1. PARRY BUTTON & SETTINGS (NEAR JUMP BUTTON)
--- ==========================================
local parryButton = Instance.new("TextButton")
parryButton.Name = "ParryButton"
parryButton.Size = UDim2.new(0, 65, 0, 65)
parryButton.Position = UDim2.new(1, -115, 1, -165)
parryButton.BackgroundColor3 = Color3.fromRGB(30, 30, 40)
parryButton.TextColor3 = Color3.fromRGB(255, 255, 255)
parryButton.Text = "⚡"
parryButton.TextSize = 26
parryButton.Font = Enum.Font.GothamBold
parryButton.AutoButtonColor = true
parryButton.Parent = screenGui

local btnCorner = Instance.new("UICorner")
btnCorner.CornerRadius = UDim.new(1, 0)
btnCorner.Parent = parryButton

local btnStroke = Instance.new("UIStroke")
btnStroke.Color = Color3.fromRGB(255, 75, 75)
btnStroke.Thickness = 2.5
btnStroke.Parent = parryButton

-- Settings / Menu Button
local menuButton = Instance.new("TextButton")
menuButton.Name = "MenuButton"
menuButton.Size = UDim2.new(0, 45, 0, 45)
menuButton.Position = UDim2.new(1, -170, 1, -155)
menuButton.BackgroundColor3 = Color3.fromRGB(40, 40, 50)
menuButton.TextColor3 = Color3.fromRGB(255, 255, 255)
menuButton.Text = "⚙️"
menuButton.TextSize = 20
menuButton.Font = Enum.Font.GothamBold
menuButton.Parent = screenGui

local menuBtnCorner = Instance.new("UICorner")
menuBtnCorner.CornerRadius = UDim.new(1, 0)
menuBtnCorner.Parent = menuButton

-- Height Counter Display (Studs High)
local heightLabel = Instance.new("TextLabel")
heightLabel.Name = "HeightLabel"
heightLabel.Size = UDim2.new(0, 200, 0, 30)
heightLabel.Position = UDim2.new(0.5, -100, 0.08, 0)
heightLabel.BackgroundTransparency = 1
heightLabel.Text = "Height: 0 Studs"
heightLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
heightLabel.Font = Enum.Font.GothamBold
heightLabel.TextSize = 18
heightLabel.Parent = screenGui

local heightStroke = Instance.new("UIStroke")
heightStroke.Color = Color3.fromRGB(0, 0, 0)
heightStroke.Thickness = 2
heightStroke.Parent = heightLabel

--- ==========================================
--- 2. SCROLLABLE SETTINGS MENU (CENTERED)
--- ==========================================
local settingsMenu = Instance.new("Frame")
settingsMenu.Size = UDim2.new(0, 220, 0, 240)
settingsMenu.Position = UDim2.new(0.5, -110, 0.5, -120)
settingsMenu.BackgroundColor3 = Color3.fromRGB(20, 20, 25)
settingsMenu.Visible = false
settingsMenu.Parent = screenGui

local menuCorner = Instance.new("UICorner")
menuCorner.CornerRadius = UDim.new(0, 12)
menuCorner.Parent = settingsMenu

local menuStroke = Instance.new("UIStroke")
menuStroke.Color = Color3.fromRGB(80, 80, 100)
menuStroke.Thickness = 2
menuStroke.Parent = settingsMenu

local menuTitle = Instance.new("TextLabel")
menuTitle.Size = UDim2.new(1, 0, 0, 35)
menuTitle.BackgroundTransparency = 1
menuTitle.Text = "MODES & SETTINGS"
menuTitle.TextColor3 = Color3.fromRGB(255, 255, 255)
menuTitle.Font = Enum.Font.GothamBold
menuTitle.TextSize = 13
menuTitle.Parent = settingsMenu

-- Scrolling Frame Container
local scrollingFrame = Instance.new("ScrollingFrame")
scrollingFrame.Size = UDim2.new(1, -10, 1, -45)
scrollingFrame.Position = UDim2.new(0, 5, 0, 40)
scrollingFrame.BackgroundTransparency = 1
scrollingFrame.CanvasSize = UDim2.new(0, 0, 0, 190)
scrollingFrame.ScrollBarThickness = 4
scrollingFrame.Parent = settingsMenu

-- Toggle 1: Minigame Switch
local mgToggleBtn = Instance.new("TextButton")
mgToggleBtn.Size = UDim2.new(1, -10, 0, 38)
mgToggleBtn.Position = UDim2.new(0, 5, 0, 5)
mgToggleBtn.BackgroundColor3 = Color3.fromRGB(50, 50, 65)
mgToggleBtn.TextColor3 = Color3.fromRGB(0, 255, 120)
mgToggleBtn.Text = "Minigame: ON"
mgToggleBtn.Font = Enum.Font.GothamBold
mgToggleBtn.TextSize = 12
mgToggleBtn.Parent = scrollingFrame

local mgToggleCorner = Instance.new("UICorner")
mgToggleCorner.CornerRadius = UDim.new(0, 8)
mgToggleCorner.Parent = mgToggleBtn

mgToggleBtn.MouseButton1Click:Connect(function()
    minigameEnabled = not minigameEnabled
    if minigameEnabled then
        mgToggleBtn.Text = "Minigame: ON"
        mgToggleBtn.TextColor3 = Color3.fromRGB(0, 255, 120)
    else
        mgToggleBtn.Text = "Minigame: OFF"
        mgToggleBtn.TextColor3 = Color3.fromRGB(255, 80, 80)
    end
end)

-- Toggle 2: No-Part Mode Switch
local partToggleBtn = Instance.new("TextButton")
partToggleBtn.Size = UDim2.new(1, -10, 0, 38)
partToggleBtn.Position = UDim2.new(0, 5, 0, 48)
partToggleBtn.BackgroundColor3 = Color3.fromRGB(50, 50, 65)
partToggleBtn.TextColor3 = Color3.fromRGB(255, 80, 80)
partToggleBtn.Text = "No-Part Mode: OFF"
partToggleBtn.Font = Enum.Font.GothamBold
partToggleBtn.TextSize = 12
partToggleBtn.Parent = scrollingFrame

local partToggleCorner = Instance.new("UICorner")
partToggleCorner.CornerRadius = UDim.new(0, 8)
partToggleCorner.Parent = partToggleBtn

partToggleBtn.MouseButton1Click:Connect(function()
    noPartMode = not noPartMode
    if noPartMode then
        partToggleBtn.Text = "No-Part Mode: ON"
        partToggleBtn.TextColor3 = Color3.fromRGB(0, 255, 120)
    else
        partToggleBtn.Text = "No-Part Mode: OFF"
        partToggleBtn.TextColor3 = Color3.fromRGB(255, 80, 80)
    end
end)

-- Setting 3: Fling Height TextBox (Type your own height)
local heightBox = Instance.new("TextBox")
heightBox.Size = UDim2.new(1, -10, 0, 38)
heightBox.Position = UDim2.new(0, 5, 0, 91)
heightBox.BackgroundColor3 = Color3.fromRGB(50, 50, 65)
heightBox.TextColor3 = Color3.fromRGB(255, 210, 50)
heightBox.Text = tostring(currentFlingHeight)
heightBox.PlaceholderText = "Enter Height..."
heightBox.Font = Enum.Font.GothamBold
heightBox.TextSize = 12
heightBox.ClearTextOnFocus = false
heightBox.Parent = scrollingFrame

local heightBoxCorner = Instance.new("UICorner")
heightBoxCorner.CornerRadius = UDim.new(0, 8)
heightBoxCorner.Parent = heightBox

heightBox.FocusLost:Connect(function(enterPressed)
    local num = tonumber(heightBox.Text)
    if num then
        currentFlingHeight = num
    else
        heightBox.Text = tostring(currentFlingHeight)
    end
end)

-- Setting 4: Reset Height Button
local resetHeightBtn = Instance.new("TextButton")
resetHeightBtn.Size = UDim2.new(1, -10, 0, 34)
resetHeightBtn.Position = UDim2.new(0, 5, 0, 134)
resetHeightBtn.BackgroundColor3 = Color3.fromRGB(70, 40, 40)
resetHeightBtn.TextColor3 = Color3.fromRGB(255, 100, 100)
resetHeightBtn.Text = "Reset Height (257)"
resetHeightBtn.Font = Enum.Font.GothamBold
resetHeightBtn.TextSize = 11
resetHeightBtn.Parent = scrollingFrame

local resetCorner = Instance.new("UICorner")
resetCorner.CornerRadius = UDim.new(0, 8)
resetCorner.Parent = resetHeightBtn

resetHeightBtn.MouseButton1Click:Connect(function()
    currentFlingHeight = defaultFlingHeight
    heightBox.Text = tostring(currentFlingHeight)
end)

-- Open/Close Menu
menuButton.MouseButton1Click:Connect(function()
    settingsMenu.Visible = not settingsMenu.Visible
end)

--- ==========================================
--- 3. RED-THEMED ⭕ MINIGAME SYSTEM
--- ==========================================
local minigameActive = false
local minigameSessionId = 0

local mgBg = Instance.new("Frame")
mgBg.Size = UDim2.new(1, 0, 1, 0)
mgBg.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
mgBg.BackgroundTransparency = 0.5
mgBg.Visible = false
mgBg.Parent = screenGui

local mgFrame = Instance.new("Frame")
mgFrame.Size = UDim2.new(0, 220, 0, 220)
mgFrame.Position = UDim2.new(0.5, -110, 0.5, -110)
mgFrame.BackgroundTransparency = 1
mgFrame.Visible = false
mgFrame.Parent = screenGui

local outerRing = Instance.new("Frame")
outerRing.Size = UDim2.new(0, 200, 0, 200)
outerRing.Position = UDim2.new(0.5, -100, 0.5, -100)
outerRing.BackgroundTransparency = 1
outerRing.Parent = mgFrame

local outerStroke = Instance.new("UIStroke")
outerStroke.Color = Color3.fromRGB(255, 50, 50)
outerStroke.Thickness = 3
outerStroke.Transparency = 0.3
outerStroke.Parent = outerRing

local outerCorner = Instance.new("UICorner")
outerCorner.CornerRadius = UDim.new(1, 0)
outerCorner.Parent = outerRing

local targetCircle = Instance.new("Frame")
targetCircle.Size = UDim2.new(0, 65, 0, 65)
targetCircle.Position = UDim2.new(0.5, -32.5, 0.5, -32.5)
targetCircle.BackgroundTransparency = 1
targetCircle.Parent = mgFrame

local targetStroke = Instance.new("UIStroke")
targetStroke.Color = Color3.fromRGB(255, 30, 30)
targetStroke.Thickness = 3.5
targetStroke.Parent = targetCircle

local targetCorner = Instance.new("UICorner")
targetCorner.CornerRadius = UDim.new(1, 0)
targetCorner.Parent = targetCircle

local shrinkCircle = Instance.new("Frame")
shrinkCircle.Size = UDim2.new(0, 190, 0, 190)
shrinkCircle.Position = UDim2.new(0.5, -95, 0.5, -95)
shrinkCircle.BackgroundTransparency = 1
shrinkCircle.Parent = mgFrame

local shrinkStroke = Instance.new("UIStroke")
shrinkStroke.Color = Color3.fromRGB(255, 80, 80)
shrinkStroke.Thickness = 5
shrinkStroke.Parent = shrinkCircle

local shrinkCorner = Instance.new("UICorner")
shrinkCorner.CornerRadius = UDim.new(1, 0)
shrinkCorner.Parent = shrinkCircle

local function showPopup(text, color)
    local popup = Instance.new("TextLabel")
    popup.Size = UDim2.new(0, 250, 0, 60)
    popup.Position = UDim2.new(0.5, -125, 0.38, 0)
    popup.BackgroundTransparency = 1
    popup.Text = text
    popup.TextColor3 = color
    popup.Font = Enum.Font.GothamBlack
    popup.TextSize = 36
    popup.Parent = screenGui

    local strokeEffect = Instance.new("UIStroke")
    strokeEffect.Color = Color3.fromRGB(0, 0, 0)
    strokeEffect.Thickness = 2
    strokeEffect.Parent = popup

    local tweenInfo = TweenInfo.new(0.7, Enum.EasingStyle.Back, Enum.EasingDirection.Out)
    TweenService:Create(popup, tweenInfo, {
        Position = UDim2.new(0.5, -125, 0.28, 0),
        TextTransparency = 1
    }):Play()

    task.delay(0.7, function()
        popup:Destroy()
    end)
end

--- ==========================================
--- 4. PHYSICAL TOUCH HITBOX & HEIGHT TRACKER
--- ==========================================
local isTouchingValidPart = false
local lastTouchedPart = nil

local function setupCharacter(char)
    local humanoidRootPart = char:WaitForChild("HumanoidRootPart", 5)
    if not humanoidRootPart then return end

    local hitbox = Instance.new("Part")
    hitbox.Name = "ParryHitbox"
    hitbox.Size = Vector3.new(0.8, 8, 0.8)
    hitbox.Transparency = 0.6
    hitbox.BrickColor = BrickColor.new("Bright red")
    hitbox.Material = Enum.Material.Neon
    hitbox.CanCollide = false
    hitbox.Anchored = false
    hitbox.Parent = char

    local weld = Instance.new("WeldConstraint")
    hitbox.CFrame = humanoidRootPart.CFrame + Vector3.new(0, 4.5, 0)
    weld.Part0 = humanoidRootPart
    weld.Part1 = hitbox
    weld.Parent = hitbox

    isTouchingValidPart = false
    lastTouchedPart = nil
    local touchingPartsCount = 0

    hitbox.Touched:Connect(function(hit)
        if hit and hit.Parent and hit.Parent ~= char and not hit:IsDescendantOf(char) and hit.Transparency < 1 then
            touchingPartsCount += 1
            isTouchingValidPart = true
            lastTouchedPart = hit
            hitbox.BrickColor = BrickColor.new("Bright green")
        end
    end)

    hitbox.TouchEnded:Connect(function(hit)
        if hit and hit.Parent and hit.Parent ~= char and not hit:IsDescendantOf(char) then
            touchingPartsCount = math.max(0, touchingPartsCount - 1)
            if touchingPartsCount == 0 then
                isTouchingValidPart = false
                hitbox.BrickColor = BrickColor.new("Bright red")
            end
        end
    end)
end

if player.Character then
    task.spawn(function()
        setupCharacter(player.Character)
    end)
end
player.CharacterAdded:Connect(setupCharacter)

RunService.RenderStepped:Connect(function()
    if noPartMode or isTouchingValidPart then
        btnStroke.Color = Color3.fromRGB(0, 255, 128)
    else
        btnStroke.Color = Color3.fromRGB(255, 75, 75)
    end

    local char = player.Character
    local root = char and char:FindFirstChild("HumanoidRootPart")
    if root then
        local currentHeight = math.floor(root.Position.Y + 0.5)
        heightLabel.Text = "Height: " .. tostring(currentHeight) .. " Studs"
    end
end)

--- ==========================================
--- 5. SMOOTH SPINNING FLING LAUNCHER
--- ==========================================
local function executeFling(flingHeightOverride)
    local char = player.Character
    local root = char and char:FindFirstChild("HumanoidRootPart")
    if not root then return end

    if lastTouchedPart and lastTouchedPart:IsA("BasePart") and not noPartMode then
        local centerPart = lastTouchedPart
        local affectedParts = {}
        local regionSize = Vector3.new(20, 20, 20)
        local overlapParams = OverlapParams.new()
        overlapParams.FilterType = Enum.RaycastFilterType.Exclude
        overlapParams.FilterDescendantsInstances = {char}

        local nearbyParts = Workspace:GetPartBoundsInBox(centerPart.CFrame, regionSize, overlapParams)
        table.insert(affectedParts, centerPart)

        for _, part in ipairs(nearbyParts) do
            if part:IsA("BasePart") then
                table.insert(affectedParts, part)
            end
        end

        for _, part in ipairs(affectedParts) do
            pcall(function() part.CanCollide = false end)
        end

        task.delay(2.0, function()
            for _, part in ipairs(affectedParts) do
                if part and part.Parent then
                    pcall(function() part.CanCollide = true end)
                end
            end
        end)
    end

    local targetHeight = flingHeightOverride or currentFlingHeight
    -- Physics calculation to convert desired height into accurate burst velocity accounting for gravity
    local calculatedVelocityY = math.sqrt(2 * Workspace.Gravity * targetHeight) * 1.05

    local bodyVelocity = Instance.new("BodyVelocity")
    bodyVelocity.Velocity = Vector3.new(0, calculatedVelocityY, 0)
    bodyVelocity.MaxForce = Vector3.new(60000, 60000, 60000)
    bodyVelocity.Parent = root

    local bodyAngularVelocity = Instance.new("BodyAngularVelocity")
    bodyAngularVelocity.AngularVelocity = Vector3.new(0, 350, 0) -- High speed smooth spin
    bodyAngularVelocity.MaxTorque = Vector3.new(0, 500000, 0)
    bodyAngularVelocity.Parent = root

    task.delay(0.22, function()
        if bodyVelocity then bodyVelocity:Destroy() end
    end)

    local connection
    connection = RunService.RenderStepped:Connect(function()
        if not root or not root.Parent then
            if connection then connection:Disconnect() end
            return
        end

        if root.AssemblyLinearVelocity.Y <= 0 then
            if bodyAngularVelocity then bodyAngularVelocity:Destroy() end
            connection:Disconnect()
        end
    end)
end

--- ==========================================
--- PARRY BUTTON CLICK EVENT
--- ==========================================
local shrinkTween
parryButton.MouseButton1Click:Connect(function()
    if minigameActive then return end
    
    if not noPartMode and not isTouchingValidPart then
        showPopup("NOTHING TO PARRY!", Color3.fromRGB(255, 80, 80))
        return
    end

    if not minigameEnabled then
        showPopup("PARRY! ⚡", Color3.fromRGB(0, 255, 120))
        executeFling(currentFlingHeight)
        return
    end

    minigameActive = true
    minigameSessionId += 1
    local currentSession = minigameSessionId

    local char = player.Character
    local root = char and char:FindFirstChild("HumanoidRootPart")
    local humanoid = char and char:FindFirstChildOfClass("Humanoid")
    if root then root.Anchored = true end
    if humanoid then humanoid.PlatformStand = true end

    mgBg.Visible = true
    mgFrame.Visible = true

    shrinkCircle.Size = UDim2.new(0, 190, 0, 190)
    shrinkCircle.Position = UDim2.new(0.5, -95, 0.5, -95)

    shrinkTween = TweenService:Create(shrinkCircle, TweenInfo.new(0.75, Enum.EasingStyle.Linear), {
        Size = UDim2.new(0, 65, 0, 65),
        Position = UDim2.new(0.5, -32.5, 0.5, -32.5)
    })
    
    shrinkTween:Play()

    local function endMinigame()
        if root then root.Anchored = false end
        if humanoid then humanoid.PlatformStand = false end
        mgBg.Visible = false
        mgFrame.Visible = false
    end

    local inputConnection
    inputConnection = UserInputService.InputBegan:Connect(function(input)
        if (input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch) and minigameActive and currentSession == minigameSessionId then
            minigameActive = false
            shrinkTween:Cancel()
            inputConnection:Disconnect()
            endMinigame()

            local currentSize = shrinkCircle.AbsoluteSize.X
            local targetSize = targetCircle.AbsoluteSize.X
            local diff = math.abs(currentSize - targetSize)

            if diff <= 14 then
                showPopup("PERFECT! ⚡", Color3.fromRGB(0, 255, 120))
                executeFling(currentFlingHeight)
            elseif diff <= 32 then
                showPopup("GREAT! ✨", Color3.fromRGB(255, 210, 50))
                local greatHeight = math.max(0, currentFlingHeight - 100)
                executeFling(greatHeight)
            else
                showPopup("MISS... ❌", Color3.fromRGB(255, 60, 60))
            end
        end
    end)

    task.delay(0.78, function()
        if minigameActive and currentSession == minigameSessionId then
            minigameActive = false
            if inputConnection then inputConnection:Disconnect() end
            endMinigame()
            showPopup("TOO LATE!", Color3.fromRGB(255, 60, 60))
        end
    end)
end)

Features & Information

ai slop universal parry fling inspired by parry fling you know it, i made this script because i was bored,

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts