Touch NaNFling
Key RequiredUniversal Patched

Touch NaNFling

Universal ScriptWuzRERBornWuzRERBorn 5.7K views 160 executesUpdated Apr 22, 2026
Unrated
00
Lua Scriptβ€’763 lines (25384 chars)
-- ═══════════════════════════════════════════════════════════════
--   NaN FLING v2 | Patched script :(
-- ═══════════════════════════════════════════════════════════════

local CONFIG = {
    -- Fling
    FLING_DURATION  = 1.5,
    TOUCH_DISTANCE  = 3,
    TOUCH_COOLDOWN  = 3,

    -- GUI
    WIDTH  = 380,
    HEIGHT = 260,
    BG     = Color3.fromRGB(10, 10, 10),
    PANEL  = Color3.fromRGB(18, 18, 18),
    TITLE  = Color3.fromRGB(30, 30, 30),
    STROKE = Color3.fromRGB(60, 60, 60),
    WHITE  = Color3.fromRGB(240, 240, 240),
    GREY   = Color3.fromRGB(140, 140, 140),
    DIM    = Color3.fromRGB(60, 60, 60),
    ACCENT = Color3.fromRGB(220, 220, 220),
}

-- ═══════════════════════════════════════════════════════════════
--   SERVICES
-- ═══════════════════════════════════════════════════════════════

local Players          = game:GetService("Players")
local RunService       = game:GetService("RunService")
local TweenService     = game:GetService("TweenService")
local UserInputService = game:GetService("UserInputService")

local player  = Players.LocalPlayer
local camera  = workspace.CurrentCamera
local isMobile = UserInputService.TouchEnabled and not UserInputService.KeyboardEnabled

-- ═══════════════════════════════════════════════════════════════
--   STATE
-- ═══════════════════════════════════════════════════════════════

local activeFlings      = {}
local touchFlingEnabled = false
local touchConnections  = {}
local magnitudeConns    = {}
local touchCooldowns    = {}
local isMinimized       = false

-- ═══════════════════════════════════════════════════════════════
--   HELPERS
-- ═══════════════════════════════════════════════════════════════

local function getChar()
    return player.Character
end

local function getHRP()
    local c = getChar()
    return c and c:FindFirstChild("HumanoidRootPart")
end

local function getHum()
    local c = getChar()
    return c and c:FindFirstChildOfClass("Humanoid")
end

local function getPlayerByName(name)
    name = name:lower()
    local exact, partial = {}, {}
    for _, plr in ipairs(Players:GetPlayers()) do
        if plr ~= player then
            local n = plr.Name:lower()
            local d = plr.DisplayName:lower()
            if n == name or d == name then
                table.insert(exact, plr)
            elseif n:find(name, 1, true) or d:find(name, 1, true) then
                table.insert(partial, plr)
            end
        end
    end
    return #exact > 0 and exact or partial
end

-- ═══════════════════════════════════════════════════════════════
--   GUI FACTORY
-- ═══════════════════════════════════════════════════════════════

if player.PlayerGui:FindFirstChild("NaNFlingGUI") then
    player.PlayerGui.NaNFlingGUI:Destroy()
end

local screenGui = Instance.new("ScreenGui")
screenGui.Name = "NaNFlingGUI"
screenGui.ResetOnSpawn = false
screenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
screenGui.Parent = player.PlayerGui

local function makeCorner(r, p)
    local c = Instance.new("UICorner")
    c.CornerRadius = UDim.new(0, r or 8)
    c.Parent = p
    return c
end

local function makeStroke(col, thick, p)
    local s = Instance.new("UIStroke")
    s.Color = col or CONFIG.STROKE
    s.Thickness = thick or 1
    s.Parent = p
    return s
end

local function makeGradient(c0, c1, rot, p)
    local g = Instance.new("UIGradient")
    g.Color = ColorSequence.new(c0, c1)
    g.Rotation = rot or 90
    g.Parent = p
    return g
end

-- ═══════════════════════════════════════════════════════════════
--   WARNING OVERLAY
-- ═══════════════════════════════════════════════════════════════

local warningFrame = Instance.new("Frame")
warningFrame.Size = UDim2.new(0, 500, 0, 160)
warningFrame.Position = UDim2.new(0.5, -250, 0.5, -80)
warningFrame.BackgroundColor3 = Color3.fromRGB(180, 0, 0)
warningFrame.BorderSizePixel = 0
warningFrame.ZIndex = 10
warningFrame.Parent = screenGui

local uiCorner = Instance.new("UICorner")
uiCorner.CornerRadius = UDim.new(0, 12)
uiCorner.Parent = warningFrame

local uiStroke = Instance.new("UIStroke")
uiStroke.Color = Color3.fromRGB(255, 80, 80)
uiStroke.Thickness = 4
uiStroke.Parent = warningFrame

local warningIcon = Instance.new("TextLabel")
warningIcon.Size = UDim2.new(1, 0, 0, 50)
warningIcon.Position = UDim2.new(0, 0, 0, 10)
warningIcon.BackgroundTransparency = 1
warningIcon.Text = "⚠️ WARNING ⚠️"
warningIcon.TextColor3 = Color3.fromRGB(255, 255, 0)
warningIcon.Font = Enum.Font.SourceSansBold
warningIcon.TextSize = 36
warningIcon.ZIndex = 11
warningIcon.Parent = warningFrame

local warningText = Instance.new("TextLabel")
warningText.Size = UDim2.new(1, -20, 0, 60)
warningText.Position = UDim2.new(0, 10, 0, 60)
warningText.BackgroundTransparency = 1
warningText.Text = "THIS SCRIPT NO LONGER WORKS!\nIt has been patched by Roblox :("
warningText.TextColor3 = Color3.fromRGB(255, 255, 255)
warningText.Font = Enum.Font.SourceSansBold
warningText.TextSize = 22
warningText.TextWrapped = true
warningText.ZIndex = 11
warningText.Parent = warningFrame

local closeButton = Instance.new("TextButton")
closeButton.Size = UDim2.new(0, 140, 0, 36)
closeButton.Position = UDim2.new(0.5, -70, 1, -46)
closeButton.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
closeButton.Text = "Close"
closeButton.TextColor3 = Color3.fromRGB(255, 255, 255)
closeButton.Font = Enum.Font.SourceSansBold
closeButton.TextSize = 18
closeButton.ZIndex = 12
closeButton.Parent = warningFrame

local closeBtnCorner = Instance.new("UICorner")
closeBtnCorner.CornerRadius = UDim.new(0, 8)
closeBtnCorner.Parent = closeButton

closeButton.MouseButton1Click:Connect(function()
    warningFrame:Destroy()
end)

-- ═══════════════════════════════════════════════════════════════
--   MAIN FRAME
-- ═══════════════════════════════════════════════════════════════

local mainFrame = Instance.new("Frame")
mainFrame.Name = "MainFrame"
mainFrame.Size = UDim2.new(0, CONFIG.WIDTH, 0, CONFIG.HEIGHT)
mainFrame.Position = UDim2.new(0.5, -CONFIG.WIDTH/2, -0.5, 0)
mainFrame.BackgroundColor3 = CONFIG.BG
mainFrame.BorderSizePixel = 0
mainFrame.Active = true
mainFrame.Parent = screenGui
makeCorner(10, mainFrame)
makeStroke(CONFIG.STROKE, 1, mainFrame)

TweenService:Create(mainFrame, TweenInfo.new(0.45, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {
    Position = UDim2.new(0.5, -CONFIG.WIDTH/2, 0.5, -CONFIG.HEIGHT/2)
}):Play()

-- ═══════════════════════════════════════════════════════════════
--   TITLE BAR
-- ═══════════════════════════════════════════════════════════════

local titleBar = Instance.new("Frame")
titleBar.Size = UDim2.new(1, 0, 0, 44)
titleBar.BackgroundColor3 = CONFIG.TITLE
titleBar.BorderSizePixel = 0
titleBar.Parent = mainFrame
makeCorner(10, titleBar)
makeGradient(Color3.fromRGB(25, 25, 25), Color3.fromRGB(12, 12, 12), 90, titleBar)

local titleFix = Instance.new("Frame")
titleFix.Size = UDim2.new(1, 0, 0.5, 0)
titleFix.Position = UDim2.new(0, 0, 0.5, 0)
titleFix.BackgroundColor3 = CONFIG.TITLE
titleFix.BorderSizePixel = 0
titleFix.Parent = titleBar

local titleLabel = Instance.new("TextLabel")
titleLabel.Size = UDim2.new(1, -80, 1, 0)
titleLabel.Position = UDim2.new(0, 14, 0, 0)
titleLabel.BackgroundTransparency = 1
titleLabel.Text = "NaN FLING"
titleLabel.TextColor3 = CONFIG.WHITE
titleLabel.TextSize = 16
titleLabel.Font = Enum.Font.GothamBold
titleLabel.TextXAlignment = Enum.TextXAlignment.Left
titleLabel.Parent = titleBar

coroutine.wrap(function()
    while titleLabel and titleLabel.Parent do
        TweenService:Create(titleLabel, TweenInfo.new(1.2, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut), {
            TextColor3 = CONFIG.GREY
        }):Play()
        task.wait(1.2)
        TweenService:Create(titleLabel, TweenInfo.new(1.2, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut), {
            TextColor3 = CONFIG.WHITE
        }):Play()
        task.wait(1.2)
    end
end)()

local closeBtn = Instance.new("TextButton")
closeBtn.Size = UDim2.new(0, 30, 0, 30)
closeBtn.Position = UDim2.new(1, -40, 0, 7)
closeBtn.BackgroundColor3 = CONFIG.PANEL
closeBtn.Text = "βˆ’"
closeBtn.TextColor3 = CONFIG.GREY
closeBtn.TextSize = 18
closeBtn.Font = Enum.Font.GothamBold
closeBtn.BorderSizePixel = 0
closeBtn.Parent = titleBar
makeCorner(6, closeBtn)
makeStroke(CONFIG.STROKE, 1, closeBtn)

-- ═══════════════════════════════════════════════════════════════
--   CONTENT
-- ═══════════════════════════════════════════════════════════════

local content = Instance.new("Frame")
content.Size = UDim2.new(1, -24, 1, -56)
content.Position = UDim2.new(0, 12, 0, 50)
content.BackgroundTransparency = 1
content.Parent = mainFrame

local inputLabel = Instance.new("TextLabel")
inputLabel.Size = UDim2.new(1, 0, 0, 20)
inputLabel.BackgroundTransparency = 1
inputLabel.Text = "PLAYER"
inputLabel.TextColor3 = CONFIG.GREY
inputLabel.TextSize = 11
inputLabel.Font = Enum.Font.GothamBold
inputLabel.TextXAlignment = Enum.TextXAlignment.Left
inputLabel.Parent = content

local playerBox = Instance.new("TextBox")
playerBox.Size = UDim2.new(1, 0, 0, 38)
playerBox.Position = UDim2.new(0, 0, 0, 22)
playerBox.BackgroundColor3 = CONFIG.PANEL
playerBox.BorderSizePixel = 0
playerBox.PlaceholderText = "nome do player..."
playerBox.PlaceholderColor3 = CONFIG.DIM
playerBox.Text = ""
playerBox.TextColor3 = CONFIG.WHITE
playerBox.TextSize = 14
playerBox.Font = Enum.Font.Gotham
playerBox.ClearTextOnFocus = false
playerBox.Parent = content
makeCorner(6, playerBox)
makeStroke(CONFIG.STROKE, 1, playerBox)

playerBox.Focused:Connect(function()
    TweenService:Create(playerBox:FindFirstChildOfClass("UIStroke"), TweenInfo.new(0.2), {
        Color = CONFIG.ACCENT
    }):Play()
end)
playerBox.FocusLost:Connect(function()
    TweenService:Create(playerBox:FindFirstChildOfClass("UIStroke"), TweenInfo.new(0.2), {
        Color = CONFIG.STROKE
    }):Play()
end)

local function makeBtn(txt, xScale, xOff, yPos)
    local btn = Instance.new("TextButton")
    btn.Size = UDim2.new(xScale, -4, 0, 36)
    btn.Position = UDim2.new(xOff, xOff == 0 and 0 or 4, 0, yPos)
    btn.BackgroundColor3 = CONFIG.PANEL
    btn.Text = txt
    btn.TextColor3 = CONFIG.WHITE
    btn.TextSize = 13
    btn.Font = Enum.Font.GothamBold
    btn.BorderSizePixel = 0
    btn.Parent = content
    makeCorner(6, btn)
    makeStroke(CONFIG.STROKE, 1, btn)
    btn.MouseEnter:Connect(function()
        TweenService:Create(btn, TweenInfo.new(0.15), {BackgroundColor3 = CONFIG.DIM}):Play()
    end)
    btn.MouseLeave:Connect(function()
        TweenService:Create(btn, TweenInfo.new(0.15), {BackgroundColor3 = CONFIG.PANEL}):Play()
    end)
    return btn
end

local viewBtn  = makeBtn("VIEW",  0.5, 0,   70)
local flingBtn = makeBtn("FLING", 0.5, 0.5, 70)

local function makeToggle(txt, yPos, initOn)
    local btn = Instance.new("TextButton")
    btn.Size = UDim2.new(1, 0, 0, 32)
    btn.Position = UDim2.new(0, 0, 0, yPos)
    btn.BackgroundColor3 = initOn and CONFIG.DIM or CONFIG.PANEL
    btn.Text = txt .. (initOn and "  ON" or "  OFF")
    btn.TextColor3 = initOn and CONFIG.WHITE or CONFIG.GREY
    btn.TextSize = 12
    btn.Font = Enum.Font.GothamBold
    btn.TextXAlignment = Enum.TextXAlignment.Left
    btn.BorderSizePixel = 0
    btn.Parent = content
    makeCorner(6, btn)
    local s = makeStroke(initOn and CONFIG.ACCENT or CONFIG.STROKE, 1, btn)

    local pad = Instance.new("UIPadding")
    pad.PaddingLeft = UDim.new(0, 10)
    pad.Parent = btn

    local function setState(on)
        btn.BackgroundColor3 = on and CONFIG.DIM or CONFIG.PANEL
        btn.TextColor3 = on and CONFIG.WHITE or CONFIG.GREY
        s.Color = on and CONFIG.ACCENT or CONFIG.STROKE
    end

    return btn, setState
end

local touchToggle, setTouch = makeToggle("TOUCH FLING", 118, false)

local statusLabel = Instance.new("TextLabel")
statusLabel.Size = UDim2.new(1, 0, 0, 18)
statusLabel.Position = UDim2.new(0, 0, 0, 162)
statusLabel.BackgroundTransparency = 1
statusLabel.Text = "idle"
statusLabel.TextColor3 = CONFIG.DIM
statusLabel.TextSize = 11
statusLabel.Font = Enum.Font.Gotham
statusLabel.TextXAlignment = Enum.TextXAlignment.Left
statusLabel.Parent = content

local function setStatus(txt)
    statusLabel.Text = txt
end

local cooldownBG = Instance.new("Frame")
cooldownBG.Size = UDim2.new(1, 0, 0, 4)
cooldownBG.Position = UDim2.new(0, 0, 0, 184)
cooldownBG.BackgroundColor3 = CONFIG.PANEL
cooldownBG.BorderSizePixel = 0
cooldownBG.Parent = content
makeCorner(2, cooldownBG)

local cooldownBar = Instance.new("Frame")
cooldownBar.Size = UDim2.new(0, 0, 1, 0)
cooldownBar.BackgroundColor3 = CONFIG.ACCENT
cooldownBar.BorderSizePixel = 0
cooldownBar.Parent = cooldownBG
makeCorner(2, cooldownBar)

local function animateCooldown(duration)
    cooldownBar.Size = UDim2.new(0, 0, 1, 0)
    TweenService:Create(cooldownBar, TweenInfo.new(duration, Enum.EasingStyle.Linear), {
        Size = UDim2.new(1, 0, 1, 0)
    }):Play()
end

local minimizeBtn = Instance.new("TextButton")
minimizeBtn.Size = UDim2.new(0, 80, 0, 30)
minimizeBtn.Position = UDim2.new(1, -90, 1, -40)
minimizeBtn.BackgroundColor3 = CONFIG.PANEL
minimizeBtn.Text = "FLING"
minimizeBtn.TextColor3 = CONFIG.GREY
minimizeBtn.TextSize = 12
minimizeBtn.Font = Enum.Font.GothamBold
minimizeBtn.BorderSizePixel = 0
minimizeBtn.Visible = false
minimizeBtn.ZIndex = 100
minimizeBtn.Parent = screenGui
makeCorner(8, minimizeBtn)
makeStroke(CONFIG.STROKE, 1, minimizeBtn)

local stopViewBtn = Instance.new("TextButton")
stopViewBtn.Size = UDim2.new(0, 70, 0, 28)
stopViewBtn.Position = UDim2.new(1, -80, 0.5, -14)
stopViewBtn.BackgroundColor3 = CONFIG.PANEL
stopViewBtn.Text = "STOP VIEW"
stopViewBtn.TextColor3 = CONFIG.GREY
stopViewBtn.TextSize = 11
stopViewBtn.Font = Enum.Font.GothamBold
stopViewBtn.BorderSizePixel = 0
stopViewBtn.Visible = false
stopViewBtn.ZIndex = 100
stopViewBtn.Parent = screenGui
makeCorner(6, stopViewBtn)
makeStroke(CONFIG.STROKE, 1, stopViewBtn)

-- ═══════════════════════════════════════════════════════════════
--   DRAG
-- ═══════════════════════════════════════════════════════════════

local dragging, dragStart, startPos
titleBar.InputBegan:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton1 or
       input.UserInputType == Enum.UserInputType.Touch then
        dragging = true
        dragStart = input.Position
        startPos  = mainFrame.Position
        input.Changed:Connect(function()
            if input.UserInputState == Enum.UserInputState.End then
                dragging = false
            end
        end)
    end
end)
UserInputService.InputChanged:Connect(function(input)
    if dragging and (input.UserInputType == Enum.UserInputType.MouseMovement or
                     input.UserInputType == Enum.UserInputType.Touch) then
        local d = input.Position - dragStart
        mainFrame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + d.X,
                                       startPos.Y.Scale, startPos.Y.Offset + d.Y)
    end
end)

-- ═══════════════════════════════════════════════════════════════
--   NOTIFY
-- ═══════════════════════════════════════════════════════════════

local notifY = -10
local function notify(title, msg, duration)
    duration = duration or 3

    local notif = Instance.new("Frame")
    notif.Size = UDim2.new(0, 260, 0, 56)
    notif.Position = UDim2.new(1, 10, 1, notifY - 56)
    notif.BackgroundColor3 = CONFIG.PANEL
    notif.BorderSizePixel = 0
    notif.ZIndex = 200
    notif.Parent = screenGui
    makeCorner(6, notif)
    makeStroke(CONFIG.STROKE, 1, notif)

    local tl = Instance.new("TextLabel")
    tl.Size = UDim2.new(1, -12, 0, 20)
    tl.Position = UDim2.new(0, 10, 0, 6)
    tl.BackgroundTransparency = 1
    tl.Text = title
    tl.TextColor3 = CONFIG.WHITE
    tl.TextSize = 12
    tl.Font = Enum.Font.GothamBold
    tl.TextXAlignment = Enum.TextXAlignment.Left
    tl.ZIndex = 201
    tl.Parent = notif

    local ml = Instance.new("TextLabel")
    ml.Size = UDim2.new(1, -12, 0, 20)
    ml.Position = UDim2.new(0, 10, 0, 28)
    ml.BackgroundTransparency = 1
    ml.Text = msg
    ml.TextColor3 = CONFIG.GREY
    ml.TextSize = 11
    ml.Font = Enum.Font.Gotham
    ml.TextXAlignment = Enum.TextXAlignment.Left
    ml.TextWrapped = true
    ml.ZIndex = 201
    ml.Parent = notif

    TweenService:Create(notif, TweenInfo.new(0.3, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {
        Position = UDim2.new(1, -270, 1, notifY - 56)
    }):Play()

    task.delay(duration, function()
        TweenService:Create(notif, TweenInfo.new(0.25, Enum.EasingStyle.Back, Enum.EasingDirection.In), {
            Position = UDim2.new(1, 10, 1, notifY - 56)
        }):Play()
        task.wait(0.3)
        notif:Destroy()
    end)
end

-- ═══════════════════════════════════════════════════════════════
--   NaN FLING
-- ═══════════════════════════════════════════════════════════════

local function nanFling(targetPlayer, fromTouch)
    if not targetPlayer or targetPlayer == player then return end
    if activeFlings[targetPlayer] then return end
    if not sethiddenproperty then
        notify("ERRO", "executor sem sethiddenproperty")
        return
    end

    if fromTouch and touchCooldowns[targetPlayer] then
        if tick() - touchCooldowns[targetPlayer] < CONFIG.TOUCH_COOLDOWN then return end
    end

    local char    = getChar()
    local trgtChr = targetPlayer.Character
    if not char or not trgtChr then return end

    local hrp     = char:FindFirstChild("HumanoidRootPart")
    local hum     = char:FindFirstChildOfClass("Humanoid")
    local trgtHRP = trgtChr:FindFirstChild("HumanoidRootPart")
    if not hrp or not hum or not trgtHRP then return end

    activeFlings[targetPlayer] = true
    if fromTouch then touchCooldowns[targetPlayer] = tick() end

    local savedPos = hrp.CFrame
    local NaN    = 0/0
    local NaNVec = Vector3.new(NaN, NaN, NaN)

    setStatus("flinging " .. targetPlayer.Name)
    animateCooldown(CONFIG.FLING_DURATION)
    notify("FLING", targetPlayer.Name, 2)

    hum.PlatformStand = true
    local startTime = tick()

    local conn
    conn = RunService.Heartbeat:Connect(function()
        if (tick() - startTime) >= CONFIG.FLING_DURATION or not char.Parent or not trgtChr.Parent then
            conn:Disconnect()
            activeFlings[targetPlayer] = nil

            if hum then hum.PlatformStand = false end
            task.wait()

            if hrp and hrp.Parent then
                hrp.AssemblyLinearVelocity = Vector3.zero
                hrp.AssemblyAngularVelocity = Vector3.zero
                pcall(function() hrp.Velocity = Vector3.zero hrp.RotVelocity = Vector3.zero end)
            end

            pcall(function() sethiddenproperty(hrp, "PhysicsRepRootPart", nil) end)
            pcall(function() sethiddenproperty(hum, "MoveDirectionInternal", Vector3.zero) end)

            task.wait()

            if hrp and hrp.Parent and savedPos then
                hrp.CFrame = savedPos
                task.wait()
                hrp.AssemblyLinearVelocity = Vector3.zero
                hrp.AssemblyAngularVelocity = Vector3.zero
                notify("RETORNOU", "voltou pra posiΓ§Γ£o original", 1.5)
            end

            setStatus("idle")
            return
        end

        hrp.CFrame = trgtHRP.CFrame
        hrp.AssemblyLinearVelocity = NaNVec
        hrp.AssemblyAngularVelocity = NaNVec
        pcall(function() hum:Move(NaNVec) end)
        pcall(function() sethiddenproperty(hrp, "PhysicsRepRootPart", trgtHRP) end)
        pcall(function() sethiddenproperty(hum, "MoveDirectionInternal", NaNVec) end)
    end)
end

-- ═══════════════════════════════════════════════════════════════
--   TOUCH FLING
-- ═══════════════════════════════════════════════════════════════

local function clearTouchConns()
    for _, c in pairs(touchConnections) do if c then c:Disconnect() end end
    for _, c in pairs(magnitudeConns)   do if c then c:Disconnect() end end
    touchConnections = {}
    magnitudeConns   = {}
end

local function setupTouchFling()
    clearTouchConns()
    if not touchFlingEnabled then return end

    local char = getChar()
    if not char then return end

    local mc = RunService.Heartbeat:Connect(function()
        if not touchFlingEnabled then return end
        local h = getHRP()
        if not h then return end
        for _, plr in ipairs(Players:GetPlayers()) do
            if plr ~= player then
                local tc = plr.Character
                if tc then
                    local th = tc:FindFirstChild("HumanoidRootPart")
                    if th and (h.Position - th.Position).Magnitude < CONFIG.TOUCH_DISTANCE then
                        nanFling(plr, true)
                    end
                end
            end
        end
    end)
    table.insert(magnitudeConns, mc)

    for _, part in ipairs(char:GetChildren()) do
        if part:IsA("BasePart") and part.Name ~= "HumanoidRootPart" then
            local c = part.Touched:Connect(function(hit)
                if not touchFlingEnabled then return end
                local tp = Players:GetPlayerFromCharacter(hit.Parent)
                if tp and tp ~= player then nanFling(tp, true) end
            end)
            table.insert(touchConnections, c)
        end
    end

    setStatus("touch fling ativo")
end

-- ═══════════════════════════════════════════════════════════════
--   VIEW
-- ═══════════════════════════════════════════════════════════════

local function viewPlayer(targetPlayer)
    if not targetPlayer or targetPlayer == player then
        notify("ERRO", "player invΓ‘lido")
        return
    end
    local tc = targetPlayer.Character
    if not tc then notify("ERRO", "sem character") return end
    local th = tc:FindFirstChild("HumanoidRootPart") or tc:FindFirstChild("Head")
    if not th then notify("ERRO", "sem HRP") return end

    camera.CameraSubject = th
    stopViewBtn.Visible = true
    notify("VIEW", "spectando " .. targetPlayer.Name)
end

local function stopViewing()
    local h = getHum()
    if h then
        camera.CameraSubject = h
        stopViewBtn.Visible = false
        notify("VIEW", "cΓ’mera restaurada", 1.5)
    end
end

-- ═══════════════════════════════════════════════════════════════
--   BUTTON LOGIC
-- ═══════════════════════════════════════════════════════════════

local function resolveTarget()
    local name = playerBox.Text:match("^%s*(.-)%s*$")
    if name == "" then notify("AVISO", "escreve o nome do player") return nil end
    local results = getPlayerByName(name)
    if #results == 0 then notify("ERRO", "player nΓ£o encontrado: " .. name) return nil end
    if #results > 1 then notify("AVISO", #results .. " matches β€” usando o primeiro") end
    return results[1]
end

viewBtn.MouseButton1Click:Connect(function()
    local t = resolveTarget()
    if t then viewPlayer(t) end
end)

flingBtn.MouseButton1Click:Connect(function()
    local t = resolveTarget()
    if t then nanFling(t, false) end
end)

playerBox.FocusLost:Connect(function(enter)
    if enter then flingBtn.MouseButton1Click:Fire() end
end)

stopViewBtn.MouseButton1Click:Connect(stopViewing)

closeBtn.MouseButton1Click:Connect(function()
    isMinimized = true
    TweenService:Create(mainFrame, TweenInfo.new(0.3, Enum.EasingStyle.Back, Enum.EasingDirection.In), {
        Position = UDim2.new(0.5, -CONFIG.WIDTH/2, -0.5, 0)
    }):Play()
    task.wait(0.35)
    mainFrame.Visible = false
    minimizeBtn.Visible = true
end)

minimizeBtn.MouseButton1Click:Connect(function()
    isMinimized = false
    mainFrame.Visible = true
    mainFrame.Position = UDim2.new(0.5, -CONFIG.WIDTH/2, -0.5, 0)
    TweenService:Create(mainFrame, TweenInfo.new(0.4, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {
        Position = UDim2.new(0.5, -CONFIG.WIDTH/2, 0.5, -CONFIG.HEIGHT/2)
    }):Play()
    minimizeBtn.Visible = false
end)

touchToggle.MouseButton1Click:Connect(function()
    touchFlingEnabled = not touchFlingEnabled
    setTouch(touchFlingEnabled)
    touchToggle.Text = "TOUCH FLING  " .. (touchFlingEnabled and "ON" or "OFF")
    if touchFlingEnabled then
        setupTouchFling()
        notify("TOUCH FLING", "ativo β€” encosta nos players")
    else
        clearTouchConns()
        setStatus("idle")
        notify("TOUCH FLING", "desativado", 2)
    end
end)

-- ═══════════════════════════════════════════════════════════════
--   KEYBINDS (desktop)
-- ═══════════════════════════════════════════════════════════════

if not isMobile then
    UserInputService.InputBegan:Connect(function(input, gp)
        if gp then return end
        if input.KeyCode == Enum.KeyCode.R then stopViewing() end
        if input.KeyCode == Enum.KeyCode.X then
            isMinimized = not isMinimized
            mainFrame.Visible = not isMinimized
            minimizeBtn.Visible = isMinimized
        end
    end)
end

-- ═══════════════════════════════════════════════════════════════
--   RESPAWN
-- ═══════════════════════════════════════════════════════════════

player.CharacterAdded:Connect(function()
    task.wait(1)
    if touchFlingEnabled then setupTouchFling() end
end)

-- ═══════════════════════════════════════════════════════════════
--   INIT
-- ═══════════════════════════════════════════════════════════════

task.wait(0.5)
notify("LOADED", "NaN Fling v2 pronto" .. (isMobile and " [mobile]" or ""), 3)
setStatus("idle")
print("NaN Fling v2 carregado")

Features & Information

The STRONGEST Fling script you'll ever see in this site :D (it can permakill people on slap battles lololol, Update: nvm u cant do that anymore i guess 😭) update 28/05: shii it got patched, im leaking the src code now cus yes
#universal#fling#nanfling

Community Comments (19)

WuzRERBornWuzRERBornApr 22, 2026

Warning: This script DOES NOT work on solara or xeno

dancinmandancinmanApr 27, 2026

genuinely a really good fling script

Replying to @dancinman
WuzRERBornWuzRERBornApr 28, 2026

@dancinman thx

oatssioatssiMay 13, 2026

character.Humanoid:Move(Vector3.one * 1e31) would be a better alternative it should support basically every executor + doesnt stutter or cause really any issues at all

Replying to @oatssi
WuzRERBornWuzRERBornMay 14, 2026

@oatssi hmm thank you for the info

Replying to @WuzRERBorn
oatssioatssiMay 16, 2026

@WuzRERBorn ya

Replying to @oatssi
WuzRERBornWuzRERBornMay 25, 2026

@oatssi oh wow, it instantly kills people thats nice

skiddityboyyyskiddityboyyyMay 28, 2026

its patched. roblox killed it. goodbye to a month of it being discovered then patched

Replying to @skiddityboyyy
WuzRERBornWuzRERBornMay 28, 2026

@skiddityboyyy ty for the info bro

Replying to @skiddityboyyy
WuzRERBornWuzRERBornMay 28, 2026

@skiddityboyyy btw this was found way before i made this script

Replying to @skiddityboyyy
oatssioatssiJun 22, 2026

@skiddityboyyy ive had these methods for months if not years lol

olQXolQXAug 23, 2026

Dude this is so easy to fix

Replying to @olQX
WuzRERBornWuzRERBornSep 19, 2026

@olQX tf? what is it then?

Replying to @WuzRERBorn
olQXolQXSep 20, 2026

@WuzRERBorn stimulation

Replying to @WuzRERBorn
olQXolQXSep 20, 2026

@WuzRERBorn just DM me if you wanna see my discord is .tungtungtungsahur_

olQXolQXAug 23, 2026

Not patched we found a new way

Replying to @olQX
WhishidowWhishidowSep 17, 2026

@olQX what's the new way?

olQXolQXAug 26, 2026

Same guy who got triggered and threaten me btw

Replying to @olQX
WuzRERBornWuzRERBornSep 19, 2026

@olQX who 😭

More Scripts for Universal Scripts