
KeylessUniversal

local Players = game:GetService("Players")
local LocalPlayer = Players.LocalPlayer
local UserInputService = game:GetService("UserInputService")
local CoreGui = game:GetService("CoreGui")
local RunService = game:GetService("RunService")
local TweenService = game:GetService("TweenService")
-- Destroy old UI if it exists
if CoreGui:FindFirstChild("TargetFlingUI") then
CoreGui.TargetFlingUI:Destroy()
end
-- Modern Theme Configurations
local themes = {
Blue = {
Main = Color3.fromRGB(25, 25, 35),
Accent = Color3.fromRGB(35, 90, 190),
Selected = Color3.fromRGB(50, 120, 220),
SubBg = Color3.fromRGB(35, 35, 45),
Text = Color3.fromRGB(240, 240, 245),
Stroke = Color3.fromRGB(60, 60, 75)
},
Red = {
Main = Color3.fromRGB(40, 25, 25),
Accent = Color3.fromRGB(190, 35, 35),
Selected = Color3.fromRGB(220, 50, 50),
SubBg = Color3.fromRGB(50, 30, 30),
Text = Color3.fromRGB(245, 240, 240),
Stroke = Color3.fromRGB(80, 50, 50)
},
Green = {
Main = Color3.fromRGB(25, 40, 25),
Accent = Color3.fromRGB(35, 190, 35),
Selected = Color3.fromRGB(50, 220, 50),
SubBg = Color3.fromRGB(30, 50, 30),
Text = Color3.fromRGB(240, 245, 240),
Stroke = Color3.fromRGB(50, 80, 50)
},
Purple = {
Main = Color3.fromRGB(35, 25, 45),
Accent = Color3.fromRGB(120, 50, 200),
Selected = Color3.fromRGB(145, 70, 230),
SubBg = Color3.fromRGB(45, 35, 55),
Text = Color3.fromRGB(245, 240, 250),
Stroke = Color3.fromRGB(75, 60, 85)
},
Orange = {
Main = Color3.fromRGB(45, 30, 20),
Accent = Color3.fromRGB(220, 120, 30),
Selected = Color3.fromRGB(245, 145, 50),
SubBg = Color3.fromRGB(55, 40, 30),
Text = Color3.fromRGB(250, 245, 240),
Stroke = Color3.fromRGB(85, 65, 45)
},
Monochrome = {
Main = Color3.fromRGB(30, 30, 30),
Accent = Color3.fromRGB(90, 90, 90),
Selected = Color3.fromRGB(120, 120, 120),
SubBg = Color3.fromRGB(40, 40, 40),
Text = Color3.fromRGB(255, 255, 255),
Stroke = Color3.fromRGB(60, 60, 60)
}
}
local themeNames = {"Blue", "Red", "Green", "Purple", "Orange", "Monochrome"}
local currentThemeIndex = 1
-- GUI Setup
local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "TargetFlingUI"
ScreenGui.ResetOnSpawn = false
ScreenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
ScreenGui.Parent = CoreGui
local MainFrame = Instance.new("Frame")
MainFrame.Size = UDim2.new(0, 350, 0, 450)
MainFrame.Position = UDim2.new(0.5, -175, 0.5, -225)
MainFrame.BackgroundColor3 = themes.Blue.Main
MainFrame.BackgroundTransparency = 0.1
MainFrame.BorderSizePixel = 0
MainFrame.Parent = ScreenGui
local UICorner = Instance.new("UICorner")
UICorner.CornerRadius = UDim.new(0, 10)
UICorner.Parent = MainFrame
local UIStroke = Instance.new("UIStroke")
UIStroke.Color = themes.Blue.Stroke
UIStroke.Thickness = 1
UIStroke.Transparency = 0.2
UIStroke.Parent = MainFrame
local UIGradient = Instance.new("UIGradient")
UIGradient.Rotation = 45
UIGradient.Color = ColorSequence.new(themes.Blue.Main, themes.Blue.SubBg)
UIGradient.Transparency = NumberSequence.new(0.1, 0.2)
UIGradient.Parent = MainFrame
-- Make GUI Draggable
local dragToggle, dragInput, dragStart, startPos
MainFrame.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
dragToggle = true
dragStart = input.Position
startPos = MainFrame.Position
input.Changed:Connect(function()
if input.UserInputState == Enum.UserInputState.End then
dragToggle = false
end
end)
end
end)
MainFrame.InputChanged:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then
dragInput = input
end
end)
UserInputService.InputChanged:Connect(function(input)
if input == dragInput and dragToggle then
local delta = input.Position - dragStart
MainFrame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
end
end)
-- Header
local HeaderFrame = Instance.new("Frame")
HeaderFrame.Size = UDim2.new(1, 0, 0, 45)
HeaderFrame.BackgroundTransparency = 1
HeaderFrame.Parent = MainFrame
local Title = Instance.new("TextLabel")
Title.Size = UDim2.new(1, -160, 1, 0)
Title.Position = UDim2.new(0, 15, 0, 0)
Title.BackgroundTransparency = 1
Title.Text = "Target fling"
Title.TextColor3 = themes.Blue.Text
Title.TextSize = 18
Title.Font = Enum.Font.GothamBold
Title.TextXAlignment = Enum.TextXAlignment.Left
Title.Parent = HeaderFrame
-- Theme Button (T)
local ThemeBtn = Instance.new("TextButton")
ThemeBtn.Size = UDim2.new(0, 30, 0, 30)
ThemeBtn.Position = UDim2.new(1, -145, 0.5, -15)
ThemeBtn.BackgroundColor3 = themes.Blue.Accent
ThemeBtn.BackgroundTransparency = 0.1
ThemeBtn.Text = "T"
ThemeBtn.TextColor3 = themes.Blue.Text
ThemeBtn.TextSize = 14
ThemeBtn.Font = Enum.Font.GothamBold
ThemeBtn.Parent = HeaderFrame
local UICorner_Theme = Instance.new("UICorner")
UICorner_Theme.CornerRadius = UDim.new(0, 8)
UICorner_Theme.Parent = ThemeBtn
-- Refresh Button (R)
local RefreshBtn = Instance.new("TextButton")
RefreshBtn.Size = UDim2.new(0, 30, 0, 30)
RefreshBtn.Position = UDim2.new(1, -110, 0.5, -15)
RefreshBtn.BackgroundColor3 = themes.Blue.Accent
RefreshBtn.BackgroundTransparency = 0.1
RefreshBtn.Text = "R"
RefreshBtn.TextColor3 = themes.Blue.Text
RefreshBtn.TextSize = 14
RefreshBtn.Font = Enum.Font.GothamBold
RefreshBtn.Parent = HeaderFrame
local UICorner_Refresh = Instance.new("UICorner")
UICorner_Refresh.CornerRadius = UDim.new(0, 8)
UICorner_Refresh.Parent = RefreshBtn
-- Info Button (?)
local InfoBtn = Instance.new("TextButton")
InfoBtn.Size = UDim2.new(0, 30, 0, 30)
InfoBtn.Position = UDim2.new(1, -75, 0.5, -15)
InfoBtn.BackgroundColor3 = themes.Blue.Accent
InfoBtn.BackgroundTransparency = 0.1
InfoBtn.Text = "?"
InfoBtn.TextColor3 = themes.Blue.Text
InfoBtn.TextSize = 14
InfoBtn.Font = Enum.Font.GothamBold
InfoBtn.Parent = HeaderFrame
local UICorner_Info = Instance.new("UICorner")
UICorner_Info.CornerRadius = UDim.new(0, 8)
UICorner_Info.Parent = InfoBtn
-- Close Button (X)
local CloseBtn = Instance.new("TextButton")
CloseBtn.Size = UDim2.new(0, 30, 0, 30)
CloseBtn.Position = UDim2.new(1, -40, 0.5, -15)
CloseBtn.BackgroundColor3 = Color3.fromRGB(200, 50, 50)
CloseBtn.BackgroundTransparency = 0.1
CloseBtn.Text = "X"
CloseBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
CloseBtn.TextSize = 14
CloseBtn.Font = Enum.Font.GothamBold
CloseBtn.Parent = HeaderFrame
local UICorner_Close = Instance.new("UICorner")
UICorner_Close.CornerRadius = UDim.new(0, 8)
UICorner_Close.Parent = CloseBtn
CloseBtn.MouseButton1Click:Connect(function()
ScreenGui:Destroy()
end)
-- Info Panel (About)
local InfoPanel = Instance.new("Frame")
InfoPanel.Size = UDim2.new(1, 0, 1, 0)
InfoPanel.BackgroundColor3 = themes.Blue.Main
InfoPanel.BackgroundTransparency = 0.05
InfoPanel.BorderSizePixel = 0
InfoPanel.Visible = false
InfoPanel.ZIndex = 10
InfoPanel.Parent = MainFrame
local UICorner_InfoPanel = Instance.new("UICorner")
UICorner_InfoPanel.CornerRadius = UDim.new(0, 10)
UICorner_InfoPanel.Parent = InfoPanel
local UIGradient_Info = Instance.new("UIGradient")
UIGradient_Info.Rotation = 45
UIGradient_Info.Color = ColorSequence.new(themes.Blue.Main, themes.Blue.SubBg)
UIGradient_Info.Parent = InfoPanel
local AboutTitle = Instance.new("TextLabel")
AboutTitle.Size = UDim2.new(1, 0, 0, 60)
AboutTitle.Position = UDim2.new(0, 0, 0.3, 0)
AboutTitle.BackgroundTransparency = 1
AboutTitle.Text = "About"
AboutTitle.TextColor3 = themes.Blue.Text
AboutTitle.TextSize = 48
AboutTitle.Font = Enum.Font.GothamBold
AboutTitle.Parent = InfoPanel
local AboutText = Instance.new("TextLabel")
AboutText.Size = UDim2.new(1, -40, 0, 30)
AboutText.Position = UDim2.new(0, 20, 0, 200)
AboutText.BackgroundTransparency = 1
AboutText.Text = "basically a target fling."
AboutText.TextColor3 = themes.Blue.Text
AboutText.TextSize = 16
AboutText.Font = Enum.Font.Gotham
AboutText.Parent = InfoPanel
local InfoCloseBtn = Instance.new("TextButton")
InfoCloseBtn.Size = UDim2.new(0, 100, 0, 35)
InfoCloseBtn.Position = UDim2.new(0.5, -50, 0.8, 0)
InfoCloseBtn.BackgroundColor3 = themes.Blue.Accent
InfoCloseBtn.BackgroundTransparency = 0.1
InfoCloseBtn.Text = "Close"
InfoCloseBtn.TextColor3 = themes.Blue.Text
InfoCloseBtn.TextSize = 14
InfoCloseBtn.Font = Enum.Font.GothamBold
InfoCloseBtn.Parent = InfoPanel
local UICorner_InfoClose = Instance.new("UICorner")
UICorner_InfoClose.CornerRadius = UDim.new(0, 8)
UICorner_InfoClose.Parent = InfoCloseBtn
InfoBtn.MouseButton1Click:Connect(function()
InfoPanel.Visible = not InfoPanel.Visible
end)
InfoCloseBtn.MouseButton1Click:Connect(function()
InfoPanel.Visible = false
end)
-- Search Bar
local SearchBox = Instance.new("TextBox")
SearchBox.Size = UDim2.new(1, -30, 0, 35)
SearchBox.Position = UDim2.new(0, 15, 0, 55)
SearchBox.BackgroundColor3 = themes.Blue.SubBg
SearchBox.BackgroundTransparency = 0.1
SearchBox.Text = ""
SearchBox.PlaceholderText = "Search players..."
SearchBox.TextColor3 = themes.Blue.Text
SearchBox.PlaceholderColor3 = Color3.fromRGB(150, 150, 150)
SearchBox.TextSize = 14
SearchBox.Font = Enum.Font.Gotham
SearchBox.ClearTextOnFocus = false
SearchBox.Parent = MainFrame
local UICorner_Search = Instance.new("UICorner")
UICorner_Search.CornerRadius = UDim.new(0, 8)
UICorner_Search.Parent = SearchBox
local UIStroke_Search = Instance.new("UIStroke")
UIStroke_Search.Color = themes.Blue.Stroke
UIStroke_Search.Thickness = 1
UIStroke_Search.Transparency = 0.2
UIStroke_Search.Parent = SearchBox
-- Player List Scrolling Frame
local PlayerScroll = Instance.new("ScrollingFrame")
PlayerScroll.Size = UDim2.new(1, -30, 1, -215)
PlayerScroll.Position = UDim2.new(0, 15, 0, 100)
PlayerScroll.BackgroundColor3 = themes.Blue.SubBg
PlayerScroll.BackgroundTransparency = 0.1
PlayerScroll.BorderSizePixel = 0
PlayerScroll.ScrollBarThickness = 4
PlayerScroll.CanvasSize = UDim2.new(0, 0, 0, 0)
PlayerScroll.Parent = MainFrame
local UICorner_Scroll = Instance.new("UICorner")
UICorner_Scroll.CornerRadius = UDim.new(0, 8)
UICorner_Scroll.Parent = PlayerScroll
local UIPadding_Scroll = Instance.new("UIPadding")
UIPadding_Scroll.PaddingTop = UDim.new(0, 8)
UIPadding_Scroll.PaddingBottom = UDim.new(0, 8)
UIPadding_Scroll.PaddingLeft = UDim.new(0, 8)
UIPadding_Scroll.PaddingRight = UDim.new(0, 8)
UIPadding_Scroll.Parent = PlayerScroll
local UIList = Instance.new("UIListLayout")
UIList.SortOrder = Enum.SortOrder.LayoutOrder
UIList.Padding = UDim.new(0, 6)
UIList.Parent = PlayerScroll
-- Select All Button
local SelectAllBtn = Instance.new("TextButton")
SelectAllBtn.Size = UDim2.new(1, -16, 0, 35)
SelectAllBtn.BackgroundColor3 = themes.Blue.Accent
SelectAllBtn.BackgroundTransparency = 0.1
SelectAllBtn.Text = "Select All"
SelectAllBtn.TextColor3 = themes.Blue.Text
SelectAllBtn.TextSize = 14
SelectAllBtn.Font = Enum.Font.GothamBold
SelectAllBtn.LayoutOrder = -1
SelectAllBtn.Parent = PlayerScroll
local UICorner_SelectAll = Instance.new("UICorner")
UICorner_SelectAll.CornerRadius = UDim.new(0, 6)
UICorner_SelectAll.Parent = SelectAllBtn
-- Status Label
local StatusLabel = Instance.new("TextLabel")
StatusLabel.Size = UDim2.new(1, -30, 0, 20)
StatusLabel.Position = UDim2.new(0, 15, 1, -95)
StatusLabel.BackgroundTransparency = 1
StatusLabel.Text = "Idle"
StatusLabel.TextColor3 = Color3.fromRGB(150, 150, 150)
StatusLabel.TextSize = 12
StatusLabel.Font = Enum.Font.Gotham
StatusLabel.TextXAlignment = Enum.TextXAlignment.Left
StatusLabel.Parent = MainFrame
-- Start Button
local StartBtn = Instance.new("TextButton")
StartBtn.Size = UDim2.new(1, -30, 0, 40)
StartBtn.Position = UDim2.new(0, 15, 1, -55)
StartBtn.BackgroundColor3 = themes.Blue.Accent
StartBtn.BackgroundTransparency = 0.1
StartBtn.Text = "Start"
StartBtn.TextColor3 = themes.Blue.Text
StartBtn.TextSize = 16
StartBtn.Font = Enum.Font.GothamBold
StartBtn.Parent = MainFrame
local UICorner_Start = Instance.new("UICorner")
UICorner_Start.CornerRadius = UDim.new(0, 8)
UICorner_Start.Parent = StartBtn
-- Logic Variables
local selectedPlayers = {}
local playerButtons = {}
local allSelected = false
local isFlinging = false
-- Apply Theme Function
local function applyTheme()
local theme = themes[themeNames[currentThemeIndex]]
MainFrame.BackgroundColor3 = theme.Main
UIGradient.Color = ColorSequence.new(theme.Main, theme.SubBg)
UIStroke.Color = theme.Stroke
InfoPanel.BackgroundColor3 = theme.Main
UIGradient_Info.Color = ColorSequence.new(theme.Main, theme.SubBg)
AboutTitle.TextColor3 = theme.Text
AboutText.TextColor3 = theme.Text
InfoCloseBtn.BackgroundColor3 = theme.Accent
InfoCloseBtn.TextColor3 = theme.Text
PlayerScroll.BackgroundColor3 = theme.SubBg
SearchBox.BackgroundColor3 = theme.SubBg
UIStroke_Search.Color = theme.Stroke
SelectAllBtn.BackgroundColor3 = theme.Accent
StartBtn.BackgroundColor3 = theme.Accent
ThemeBtn.BackgroundColor3 = theme.Accent
RefreshBtn.BackgroundColor3 = theme.Accent
InfoBtn.BackgroundColor3 = theme.Accent
Title.TextColor3 = theme.Text
ThemeBtn.TextColor3 = theme.Text
RefreshBtn.TextColor3 = theme.Text
InfoBtn.TextColor3 = theme.Text
CloseBtn.TextColor3 = theme.Text
SelectAllBtn.TextColor3 = theme.Text
StartBtn.TextColor3 = theme.Text
SearchBox.TextColor3 = theme.Text
for player, btn in pairs(playerButtons) do
if selectedPlayers[player] then
btn.BackgroundColor3 = theme.Selected
else
btn.BackgroundColor3 = theme.Main
end
btn.UIStroke.Color = theme.Stroke
btn.TextColor3 = theme.Text
end
end
ThemeBtn.MouseButton1Click:Connect(function()
currentThemeIndex = (currentThemeIndex % #themeNames) + 1
applyTheme()
end)
-- Notification Function
local function notify(text, isSuccess)
local notifGui = Instance.new("ScreenGui")
notifGui.Name = "FlingNotification"
notifGui.Parent = CoreGui
local notifFrame = Instance.new("Frame")
notifFrame.Size = UDim2.new(0, 250, 0, 60)
notifFrame.Position = UDim2.new(0.5, -125, 0, -100)
notifFrame.BackgroundColor3 = Color3.fromRGB(20, 20, 25)
notifFrame.BackgroundTransparency = 0.1
notifFrame.BorderSizePixel = 0
notifFrame.Parent = notifGui
local corner = Instance.new("UICorner")
corner.CornerRadius = UDim.new(0, 8)
corner.Parent = notifFrame
local stroke = Instance.new("UIStroke")
stroke.Color = isSuccess and Color3.fromRGB(50, 200, 50) or Color3.fromRGB(200, 50, 50)
stroke.Thickness = 2
stroke.Parent = notifFrame
local label = Instance.new("TextLabel")
label.Size = UDim2.new(1, -10, 1, -10)
label.Position = UDim2.new(0, 5, 0, 5)
label.BackgroundTransparency = 1
label.Text = text
label.TextColor3 = Color3.fromRGB(255, 255, 255)
label.TextSize = 15
label.Font = Enum.Font.GothamBold
label.TextWrapped = true
label.Parent = notifFrame
TweenService:Create(notifFrame, TweenInfo.new(0.4, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Position = UDim2.new(0.5, -125, 0, 20)}):Play()
task.delay(3, function()
TweenService:Create(notifFrame, TweenInfo.new(0.4, Enum.EasingStyle.Quad, Enum.EasingDirection.In), {Position = UDim2.new(0.5, -125, 0, -100)}):Play()
task.wait(0.5)
notifGui:Destroy()
end)
end
local function updateCanvasSize()
task.defer(function()
PlayerScroll.CanvasSize = UDim2.new(0, 0, 0, UIList.AbsoluteContentSize.Y + 16)
end)
end
local function filterPlayers(searchText)
for player, btn in pairs(playerButtons) do
if player.Name:lower():match(searchText:lower()) then
btn.Visible = true
else
btn.Visible = false
end
end
updateCanvasSize()
end
SearchBox:GetPropertyChangedSignal("Text"):Connect(function()
if not isFlinging then
filterPlayers(SearchBox.Text)
end
end)
local function updateButton(btn, player)
local theme = themes[themeNames[currentThemeIndex]]
if selectedPlayers[player] then
btn.Text = "[X] " .. player.Name
btn.BackgroundColor3 = theme.Selected
btn.UIStroke.Color = theme.Accent
else
btn.Text = "[ ] " .. player.Name
btn.BackgroundColor3 = theme.Main
btn.UIStroke.Color = theme.Stroke
end
end
local function createPlayerButton(player)
if player == LocalPlayer then return end
local theme = themes[themeNames[currentThemeIndex]]
local btn = Instance.new("TextButton")
btn.Size = UDim2.new(1, 0, 0, 35)
btn.BackgroundColor3 = theme.Main
btn.BackgroundTransparency = 0.1
btn.TextColor3 = theme.Text
btn.TextSize = 14
btn.Font = Enum.Font.Gotham
btn.TextXAlignment = Enum.TextXAlignment.Left
btn.Parent = PlayerScroll
local corner = Instance.new("UICorner")
corner.CornerRadius = UDim.new(0, 6)
corner.Parent = btn
local stroke = Instance.new("UIStroke")
stroke.Color = theme.Stroke
stroke.Thickness = 1
stroke.Transparency = 0.2
stroke.Name = "UIStroke"
stroke.Parent = btn
local padding = Instance.new("UIPadding")
padding.PaddingLeft = UDim.new(0, 10)
padding.Parent = btn
selectedPlayers[player] = false
updateButton(btn, player)
btn.MouseButton1Click:Connect(function()
if isFlinging then return end
selectedPlayers[player] = not selectedPlayers[player]
updateButton(btn, player)
end)
playerButtons[player] = btn
filterPlayers(SearchBox.Text)
updateCanvasSize()
end
local function refreshPlayers()
for p, btn in pairs(playerButtons) do
if btn and btn.Parent then
btn:Destroy()
end
end
playerButtons = {}
selectedPlayers = {}
allSelected = false
SelectAllBtn.Text = "Select All"
for _, p in pairs(Players:GetPlayers()) do
createPlayerButton(p)
end
filterPlayers(SearchBox.Text)
updateCanvasSize()
end
RefreshBtn.MouseButton1Click:Connect(refreshPlayers)
-- Populate Player List initially
refreshPlayers()
Players.PlayerAdded:Connect(createPlayerButton)
Players.PlayerRemoving:Connect(function(player)
if playerButtons[player] then
playerButtons[player]:Destroy()
playerButtons[player] = nil
selectedPlayers[player] = nil
updateCanvasSize()
end
end)
SelectAllBtn.MouseButton1Click:Connect(function()
if isFlinging then return end
allSelected = not allSelected
for p, btn in pairs(playerButtons) do
if btn.Visible then
selectedPlayers[p] = allSelected
updateButton(btn, p)
end
end
if allSelected then
SelectAllBtn.Text = "Deselect All"
else
SelectAllBtn.Text = "Select All"
end
end)
-- Check if target has been flung
local function checkFlingState(targetChar)
if not targetChar then return false end
local hum = targetChar:FindFirstChildOfClass("Humanoid")
local hrp = targetChar:FindFirstChild("HumanoidRootPart")
if not hum or not hrp then return false end
if hum:GetState() == Enum.HumanoidStateType.FallingDown then return true end
if hrp.AssemblyLinearVelocity.Magnitude > 150 then return true end
if hrp.AssemblyAngularVelocity.Magnitude > 150 then return true end
if hum.Health <= 0 then return true end
return false
end
-- Improved Fling Sequence
local function startFling()
if isFlinging then return end
isFlinging = true
StartBtn.Text = "Flinging..."
StartBtn.BackgroundColor3 = Color3.fromRGB(150, 150, 50)
StatusLabel.Text = "Preparing to fling..."
local char = LocalPlayer.Character
local hum = char and char:FindFirstChildOfClass("Humanoid")
local hrp = char and char:FindFirstChild("HumanoidRootPart")
if not hum or not hrp or hum.Health <= 0 then
notify("failed to fling.", false)
isFlinging = false
StartBtn.Text = "Start"
StatusLabel.Text = "Idle"
applyTheme()
return
end
-- Save current coordinate
local originalCFrame = hrp.CFrame
-- Gather selected targets
local targets = {}
for p, isSelected in pairs(selectedPlayers) do
if isSelected then
table.insert(targets, p)
end
end
if #targets == 0 then
notify("failed to fling.", false)
isFlinging = false
StartBtn.Text = "Start"
StatusLabel.Text = "Idle"
applyTheme()
return
end
local success = true
for index, targetPlayer in ipairs(targets) do
if not success then break end
if not targetPlayer.Parent then continue end
local targetChar = targetPlayer.Character
local targetHum = targetChar and targetChar:FindFirstChildOfClass("Humanoid")
local targetHrp = targetChar and targetChar:FindFirstChild("HumanoidRootPart")
if targetChar and targetHum and targetHrp and targetHum.Health > 0 then
StatusLabel.Text = "Targeting: " .. targetPlayer.Name
local flung = false
local startTime = tick()
-- Active loop to continuously chase and spin
local spinConn
spinConn = RunService.Heartbeat:Connect(function()
if not targetHrp or not targetHrp.Parent or targetHum.Health <= 0 or not hrp or not hrp.Parent then return end
-- Stick to target's HRP to maximize collision physics
hrp.CFrame = targetHrp.CFrame
hrp.AssemblyLinearVelocity = Vector3.new(0, 0, 0)
hrp.AssemblyAngularVelocity = Vector3.new(0, 9999, 0)
end)
-- Wait up to 3 seconds to verify fling
while tick() - startTime < 3 do
if hum.Health <= 0 then break end
if checkFlingState(targetChar) then
flung = true
break
end
task.wait()
end
if spinConn then spinConn:Disconnect() end
-- Stop our own spin momentarily
if hrp and hrp.Parent then
hrp.AssemblyAngularVelocity = Vector3.new(0, 0, 0)
hrp.AssemblyLinearVelocity = Vector3.new(0, 0, 0)
end
if not flung then
success = false
else
StatusLabel.Text = "Flung " .. targetPlayer.Name .. " successfully."
task.wait(0.5) -- Small buffer before next target
end
end
end
-- Return to saved coordinate (spawn)
StatusLabel.Text = "Returning to spawn..."
if char and hrp and hrp.Parent then
hrp.CFrame = originalCFrame
hrp.AssemblyLinearVelocity = Vector3.new(0, 0, 0)
hrp.AssemblyAngularVelocity = Vector3.new(0, 0, 0)
end
if success then
notify("Success!!!!!!", true)
StatusLabel.Text = "Success"
else
notify("failed to fling.", false)
StatusLabel.Text = "Failed"
end
isFlinging = false
StartBtn.Text = "Start"
applyTheme()
task.wait(2)
if not isFlinging then
StatusLabel.Text = "Idle"
end
end
StartBtn.MouseButton1Click:Connect(startFling)
applyTheme()



Ok