-- ═══════════════════════════════════════════════════════════════ -- 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")