Zum Inhalt springen
Funktioniert

BodyMounter - Fling players/ Mount players/ Fling aura + more trolling commands [Open Source]

CLclarkdevlinorg1 AufrufeUniversal26. Juli 2026
Teilen
BodyMounter - Fling players/ Mount players/ Fling aura + more trolling commands [Open Source]

Script-Code

Lua
--[[
	Type CMDS for a list of commands. The command bar is positioned at the bottom left.
	On your screen it looks like nothing is happening, but on the server/players screen it looks as if you are "welded" to players
	Fling command is "fling PlayerName"
	
	Chatting commands WILL NOT WORK! please use the command bar
	
	- HSTf04233
--]]

local BM_getgenv  = getgenv or function() return _G end
local BM_cloneref = cloneref or function(a) return a end

-- Check if script is already running.
local ScriptIdentifier = "BODY_MOUNTER_SCRIPT1"
if BM_getgenv()[ScriptIdentifier] then
	print("THIS SCRIPT IS ALREADY RUNNING! [BodyMounter]. Exit the old script before re running.")
	return
end
BM_getgenv()[ScriptIdentifier] = true

-- Must be a KeyCode enum. Set to nil/false to disable keybind.
local KEYBIND_FocusCommandBar    = Enum.KeyCode.T
local KEYBIND_ExecuteStopCommand = Enum.KeyCode.Y

-- If false, all messages will be printed to the Roblox console instead.
local GUI_NotificationsEnabled = true

local CommandsList = {
	{"stop", "Stops any commands that are running."},
	
	{"fling", "PlayerNames", "Attempts to fling the player(s), input 'all' to fling everyone. *PLAYER COLLISIONS ONLY!!*"},
	{"loopfling", "PlayerNames", "Repeatedly flings the player (or players) until the \"stop\" command is used. *PLAYER COLLISIONS ONLY!!*"},
	
	{"flingaura", "Radius(optional)", "Flings anyone in the radius or anyone you touch. *PLAYER COLLISIONS ONLY!!*"},
	
	{"headsit", "PlayerName", "Sit on the player's head."},
	{"facesit", "PlayerName", "Sit on the player's face."},
	{"backsit", "PlayerName", "Sit on the player's back."},
	{"armsit", "PlayerName", "Sit on the player's arm"},
	{"handsit", "PlayerName", "Sit on the player's hand"},
	{"rootsit", "PlayerName", "Sit on the player's HumanoidRootPart"},
	{"standon", "PlayerName", "Stand on the player's head."},
	{"orbit", "PlayerName", "Spins around the player."},
	{"sphereorbit", "PlayerName", "Orbit around the player in a sphere"},
	{"floor", "PlayerName", "Become a floor under a player. If player collisions are enabled, this *might* make the player fly."},
	{"fan", "PlayerName", "Spin above the player's head."},
	{"merge", "PlayerName", "Merges with the player's body."},
	{"playerwalk", "PlayerName", "BodyPartName(optional)", "Allows you to walk around a player while attached to them.\n    The blue box is a guess of where you are on the server."},
	{"antifling", "true/false", "*BUGGY, MAYBE DON'T USE* enables/ disables anti fling"},
	
	{},		-- padding
	
	{"exit", "Completely unload this gui/ script."},
	
	{},
	
	if KEYBIND_FocusCommandBar then {"hidecmdbar", "Hide the command bar. Use the focus keybind to use command bar."} else 0,
	if KEYBIND_FocusCommandBar then {"showcmdbar", "Show the command bar."} else 0,
	
	{},
	
	{"The PlayerName input searches through player names and display names.\nUse the @ prefix to only search player names and not display names.\n   Example: \"fling @Hyper\" will only fling players with the name \"Hyper\" and will ignore display names."},
	
	{},
	
	if KEYBIND_FocusCommandBar    then {"KEYBIND: Pressing '" .. KEYBIND_FocusCommandBar.Name .. "' focuses the command bar."} else 0,
	if KEYBIND_ExecuteStopCommand then {"KEYBIND: Pressing '" .. KEYBIND_ExecuteStopCommand.Name .. "' stops any commands that are running."} else 0,
	
	{},
	
	"- HSTf04233"
}

local SCRIPT_CONNECTIONS = {}
local SCRIPT_IS_EXITED = false

-- 16384 (2^14) is the network limit for velocity.
local FlingVelocity = Vector3.new(16384, -16384, 16384)

local CMDBar_IsFocused = false

local RNG = Random.new()
local Sprintf = string.format

local CurrentCharacterModelMountedWith = nil
local MyCurrentMountedObject = nil

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

local Heartbeat = RunService.Heartbeat
local Stepped = RunService.Stepped

local LocalPlayer = Players.LocalPlayer

local AmIAPoorPerson = true
pcall(function ()		-- Check if we have access to the CoreGui.
	game:GetService("CoreGui"):FindFirstChild(".")
	AmIAPoorPerson = false
end)

local Animations = {
	Sit = {
		R6  = "rbxassetid://178130996",
		R15 = "rbxassetid://2506281703",
	}
}

local GuiParent
if AmIAPoorPerson then
	GuiParent = LocalPlayer:FindFirstChildWhichIsA("PlayerGui") -- BROKE NIGGA ALERT 
else
	GuiParent = BM_cloneref(game:GetService("CoreGui"))
end
if gethui then
	GuiParent = gethui()
end

local MainScreenGui = Instance.new("ScreenGui")
MainScreenGui.ResetOnSpawn = false
MainScreenGui.DisplayOrder = 5
MainScreenGui.ClipToDeviceSafeArea = false
MainScreenGui.Parent = GuiParent

local NotifyAreaFrame = Instance.new("Frame")
NotifyAreaFrame.AnchorPoint = Vector2.new(0, 1)
NotifyAreaFrame.Position = UDim2.new(0, 20, 1, -60)
NotifyAreaFrame.BackgroundTransparency = 1
NotifyAreaFrame.Size = UDim2.fromOffset(400, 300)

local UIList = Instance.new("UIListLayout")
UIList.Padding = UDim.new(0, 0)
UIList.VerticalAlignment = Enum.VerticalAlignment.Bottom
UIList.Parent = NotifyAreaFrame

if GUI_NotificationsEnabled then
	NotifyAreaFrame.Parent = MainScreenGui
end

local MaxNotifications = 12
local NotificationUIs = {}
local NOTIFICATION_ID = 0
function Notify(Msg: string, TimeAlive: number?)
	if SCRIPT_IS_EXITED then return end
	
	-- Change GUI_NotificationsEnabled (at the top of the script) to false to disable UI notifications
	if not GUI_NotificationsEnabled then
		print(Msg)
		return
	end
	if #Msg > 3000 then
		Msg = string.sub(Msg, 1, 3000) .. "[..]"
	end
	NOTIFICATION_ID += 1
	
	local NTextLabel = Instance.new("TextLabel")
	NTextLabel.Text = Msg
	NTextLabel.BorderSizePixel = 0
	NTextLabel.BackgroundTransparency = 0.75
	NTextLabel.BackgroundColor3 = Color3.new(0, 0, 0)
	NTextLabel.TextColor3 = Color3.new(1, 1, 1)
	NTextLabel.Size = UDim2.new(1, 0, 0, 10)
	if #Msg > 220 then
		NTextLabel.TextSize = 8
	elseif #Msg > 80 then
		NTextLabel.TextSize = 14
	else
		NTextLabel.TextSize = 16
	end
	NTextLabel.TextXAlignment = Enum.TextXAlignment.Left
	NTextLabel.AutomaticSize = Enum.AutomaticSize.XY
	NTextLabel.LayoutOrder = NOTIFICATION_ID
	
	if string.sub(Msg, 1, 1) == ">" then
		NTextLabel.TextColor3 = Color3.new(0.9, 0.9, 1)
		NTextLabel.FontFace = Font.fromEnum(Enum.Font.Code)
		NTextLabel.TextSize *= 1.5
	end
	
	local UIPadding = Instance.new("UIPadding")
	UIPadding.PaddingLeft  = UDim.new(0, 4)
	UIPadding.PaddingRight = UDim.new(0, 4)
	UIPadding.PaddingTop    = UDim.new(0, 2)
	UIPadding.PaddingBottom = UDim.new(0, 2)
	UIPadding.Parent = NTextLabel
	
	NTextLabel.Parent = NotifyAreaFrame
	
	task.delay(TimeAlive or 7, function ()
		table.insert(NotificationUIs, NTextLabel)
		if #NotificationUIs > MaxNotifications then
			local First = NotificationUIs[1]
			if First then
				First:Destroy()
				table.remove(NotificationUIs, 1)
			end
		end
		if not CMDBar_IsFocused then
			NTextLabel.Visible = false
		end
	end)
end

--[[
	PlayerSearchMode = 0 is actual name and DisplayName.
	PlayerSearchMode = 1 is actual name.
	PlayerSearchMode = 2 is DisplayName.
	Regardless of any mode, the @ prefix will always search with actual names. Example: "@Hyper" will only choose the players with the name "Hyper" and will never search display names.
]]
local PlayerSearchMode = 0

function GetPlayersFromString(PlayerString, OverrideSearchMode): {Player}
	if not PlayerString or PlayerString == "" then
		return {}
	end
	
	local PlayerSearchMode = OverrideSearchMode or PlayerSearchMode
	
	local SearchByNameAllowed = PlayerSearchMode == 0 or PlayerSearchMode == 1
	local SearchByDisplayNameAllowed = PlayerSearchMode == 0 or PlayerSearchMode == 2
	
	local CheckAll = true
	
	if string.sub(PlayerString, 1, 1) == "@" then
		SearchByNameAllowed = true
		SearchByDisplayNameAllowed = false
		PlayerString = string.sub(PlayerString, 2)
		CheckAll = false
	end
	
	local PlayerStringLower = string.lower(PlayerString)
	local PlayerStringLength = #PlayerString
	
	local PlayersFound = {}
	
	local CurrentPlayers = Players:GetPlayers()
	
	if CheckAll and PlayerStringLower == "all" or PlayerStringLower == "others" then
		table.remove(CurrentPlayers, table.find(CurrentPlayers, LocalPlayer))
		return CurrentPlayers
	end
	
	for _, Player in pairs(CurrentPlayers) do
		if Player == LocalPlayer then continue end
		
		local PlayerName = Player.Name
		local PlayerNameLower = string.lower(PlayerName)
		local PlayerDisplayName = string.lower(Player.DisplayName)
		
		if PlayerName == PlayerString and SearchByNameAllowed then
			-- This player has the exact name we are searching for! Only choose him
			return {Player}
		end
		
		if PlayerDisplayName == PlayerString and SearchByDisplayNameAllowed then
			return {Player}
		end
		
		if SearchByNameAllowed and string.sub(PlayerNameLower, 1, PlayerStringLength) == PlayerStringLower then
			table.insert(PlayersFound, Player)
			continue
		end
		
		if SearchByDisplayNameAllowed and string.sub(PlayerDisplayName, 1, PlayerStringLength) == PlayerStringLower then
			table.insert(PlayersFound, Player)
			continue
		end
	end
	
	return PlayersFound
end

local GetPlayerFromString = function(PlayerString)
	-- Find the first player from string
	return GetPlayersFromString(PlayerString)[1]
end

function StopAnimations(Humanoid)
	local Animator: Animator = Humanoid:FindFirstChildWhichIsA("Animator")
	if Animator then
		for _, a in Animator:GetPlayingAnimationTracks() do
			a:Stop(0.0001)
		end
	end
end

type MountObject = {
	Part: BasePart,
	Size: Vector3,
	
	Offset: CFrame,
	OscillateSpeed: number,
	OscillateOffsetY: NumberRange,
	
	SetVelocity: Vector3,
	RootVelocity: Vector3,
	RootRotVelocity: Vector3,
	
	ForceStopAnimations: boolean,
	NoHipHeight: boolean,
	RespectRotation: boolean,
	RespectPhysicsVelocity: boolean,
	AntiSleep: boolean,
	IsActive: boolean
}

function MountWithPart(Part: BasePart, Offset: CFrame?, SetVelocity: Vector3?): MountObject?
	local MyCharacter = LocalPlayer.Character
	if not MyCharacter then
		Notify("Mount failed due to no LocalPlayer.Character...")
		return nil
	end
	local MyHumanoid = MyCharacter:FindFirstChildWhichIsA("Humanoid")
	if not MyHumanoid then
		Notify("Mount failed due to no Local Humanoid...")
		return nil
	end
	local MyCharacterRootPart: BasePart = (MyHumanoid.RootPart or MyCharacter:FindFirstChild("HumanoidRootPart")):: BasePart
	if not MyCharacterRootPart or not MyCharacterRootPart:IsA("BasePart") then
		MyCharacterRootPart = MyHumanoid.RootPart:: BasePart
	end
	
	if not MyCharacterRootPart then
		Notify("Mount failed due to no Local HumanoidRootPart...")
		return nil
	end
	
	local IsMyHumanoidR6 = MyHumanoid.RigType == Enum.HumanoidRigType.R6
	
	local MyCurrentRootPartCFrame = MyCharacterRootPart.CFrame
	
	-- Yeah I'm not using metatables, cry about it.
	local self: MountObject = {
		Part = Part,
		Size = Part.Size,
		
		Offset = Offset or CFrame.identity,
		OscillateSpeed = 10,
		OscillateOffsetY = NumberRange.new(0, 0),
		
		SetVelocity = SetVelocity or Vector3.zero,
		RootVelocity = Vector3.zero,
		RootRotVelocity = Vector3.zero,
		
		ForceStopAnimations = false,
		NoHipHeight = false,
		RespectRotation = false,
		RespectPhysicsVelocity = false,
		AntiSleep = true,
		IsActive = true
	}
	
	local RootPart = Part.AssemblyRootPart or Part
	
	local UseOriginalRootPartPosition = RootPart == Part or Part:IsDescendantOf(MyCharacter)
	
	local OriginalRootPartCFrame = RootPart.CFrame
	local OriginalPartParent = Part.Parent
	
	local PrimaryPart = OriginalPartParent
	if OriginalPartParent and PrimaryPart:IsA("Model") then
		PrimaryPart = PrimaryPart.PrimaryPart
	else
		PrimaryPart = nil
	end
	
	local OriginalPartCollisionGroup = Part.CollisionGroup
	Part.CollisionGroup = "Default"
	Part.LocalTransparencyModifier = 1
	Part.Parent = workspace.Terrain
	Part.CanQuery = false
	Part.CanCollide = false
	Part.Massless = false
	Part.CustomPhysicalProperties = PhysicalProperties.new(100, 0.5, 0.5)
	
	local PlatformPart = Instance.new("Part")
	PlatformPart.Size = Vector3.new(10, 1, 10)
	PlatformPart.CFrame = Part.CFrame
	PlatformPart.RootPriority = Part.RootPriority-1
	PlatformPart.CustomPhysicalProperties = PhysicalProperties.new(100, 0.5, 0.5)
	PlatformPart.Transparency = 1
	PlatformPart.LocalTransparencyModifier = 0.5
	PlatformPart.Parent = workspace.Terrain
	
	MyCurrentMountedObject = self
	
	local NoCollisionConstraints = {}
	local SavedJoints = {}
	for _, Joint in pairs(Part:GetJoints()) do
		table.insert(SavedJoints, {
			Joint = Joint,
			OriginalParent = Joint.Parent
		})
		Joint.Parent = nil
	end
	
	local PlatformWeld = Instance.new("Weld")
	PlatformWeld.Part0 = Part
	PlatformWeld.Part1 = PlatformPart
	PlatformWeld.Parent = PlatformPart
	
	local MyLastRootVelocity = MyCharacterRootPart.Velocity
	
	local SetCFrame = Part.CFrame
	local StandPartCFrameTo = CFrame.identity
	
	local OverlapColParams = OverlapParams.new()
	OverlapColParams.CollisionGroup = MyCharacterRootPart.CollisionGroup
	OverlapColParams.RespectCanCollide = false
	OverlapColParams.FilterDescendantsInstances = {MyCharacter}
	OverlapColParams.FilterType = Enum.RaycastFilterType.Blacklist
	
	local SteppedConnection = Stepped:Connect(function ()
		local MyHipHeight = MyHumanoid.HipHeight-0.05
		if IsMyHumanoidR6 then
			MyHipHeight = MyHipHeight + MyCharacterRootPart.Size.Y/2
		end
		
		MyHipHeight += (MyCharacterRootPart.Size.Y/2)+0.5
		
		if MyHumanoid then
			-- Don't allow our humanoid to "fall"
			MyHumanoid:ChangeState(Enum.HumanoidStateType.Running)
			-- This shoudn't trigger any anti-cheats? surely...
		end
		
		local OscillateSpeed = math.pi*self.OscillateSpeed
		
		local OffsetCF = self.Offset
		local OscillateYDelta = self.OscillateOffsetY.Max-self.OscillateOffsetY.Min
		local OscillateY = self.OscillateOffsetY.Min + (math.sin(os.clock()*OscillateSpeed)+1)*0.5*OscillateYDelta
		OffsetCF *= CFrame.new(0, OscillateY, 0)
		
		PlatformWeld.C0 = OffsetCF
		if self.NoHipHeight then
			PlatformWeld.C0 *= CFrame.new(0, -MyHipHeight, 0)
		end
		
		local UseOriginalRootPartPosition = UseOriginalRootPartPosition or not self.AntiSleep
		
		StandPartCFrameTo = CFrame.new(not UseOriginalRootPartPosition and RootPart.Position or OriginalRootPartCFrame.Position)
		
		local FallDestroyHeight = if workspace.FallHeightEnabled then workspace.FallenPartsDestroyHeight+30 else -math.huge
		
		if StandPartCFrameTo.Y <= FallDestroyHeight then
			StandPartCFrameTo = CFrame.new(StandPartCFrameTo.Position*Vector3.new(1, 0, 1))+Vector3.new(0, FallDestroyHeight, 0)
		end
		
		if StandPartCFrameTo.Position.Magnitude >= 200000 then
			-- Raycasts don't work this far out... (Humanoids use raycasts for the floor checks)... Clamp the position so they'll work
			StandPartCFrameTo = CFrame.new(StandPartCFrameTo.Position.Unit*200000)
		end
		
		-- Disable collisions around the player.
		-- We do this because we want to the humanoid to only stand on the platform part
		local PartsFind = workspace:GetPartBoundsInRadius(PlatformPart.Position, 30, OverlapColParams)
		for _, OtherPart in pairs(PartsFind) do
			if OtherPart == PlatformPart then continue end
			if NoCollisionConstraints[OtherPart] then continue end
			
			OverlapColParams:AddToFilter(OtherPart)
			
			local NCC = Instance.new("NoCollisionConstraint")
			NCC.Part0 = OtherPart
			NCC.Part1 = MyCharacterRootPart
			NCC.Parent = OtherPart
			
			NoCollisionConstraints[OtherPart] = NCC
		end
		
		local Rotation = CFrame.identity
		
		if self.RespectRotation then
			Rotation = OffsetCF.Rotation
		else
			StandPartCFrameTo = StandPartCFrameTo * PlatformWeld.C0:Inverse() * Rotation * CFrame.new(0, 2, 0)
		end
		Part.CFrame = StandPartCFrameTo
		
		Part.Anchored = false
		
		SetCFrame = CFrame.new(PlatformPart.Position) * Rotation * CFrame.new(0, MyHipHeight, 0)
		MyCharacterRootPart.CFrame = SetCFrame
		
		Part.AssemblyLinearVelocity = Vector3.zero
		Part.AssemblyAngularVelocity = Vector3.zero
		MyCharacterRootPart.Velocity = Vector3.zero
		if self.RespectPhysicsVelocity then
			MyCharacterRootPart.Velocity = MyLastRootVelocity
		end
		MyCharacterRootPart.AssemblyAngularVelocity = Vector3.zero
	end)
	
	local HeartbeatConnection = Heartbeat:Connect(function ()
		if MyCharacter ~= LocalPlayer.Character or (OriginalPartParent and OriginalPartParent.Parent == nil) then
			self.IsActive = false
			self:Destroy()
			if (OriginalPartParent and OriginalPartParent.Parent == nil) then
				self.IsActive = true
			end
			return
		end
		MyLastRootVelocity = MyCharacterRootPart.Velocity
		self.RootVelocity = MyLastRootVelocity
		self.RootRotVelocity = MyCharacterRootPart.RotVelocity
		
		local SetVelocity = self.SetVelocity
		if self.AntiSleep then
			-- Add a bit of noise to the velocity to prevent the humanoid from sleeping on the server.
			-- (Annoying things might happen if we don't do this)
			SetVelocity += (RNG:NextUnitVector()*0.1)
		end
		
		MyCharacterRootPart.Velocity = SetVelocity
		MyCharacterRootPart.CFrame = SetCFrame
		Part.CFrame = StandPartCFrameTo
		Part.AssemblyLinearVelocity = Vector3.zero
		Part.AssemblyAngularVelocity = Vector3.zero
		
		if self.ForceStopAnimations then
			StopAnimations(MyHumanoid)
		end
	end)
	
	function self:PlayAnimation(Anim)
		local AnimationId = typeof(Anim) == "string" and Anim
		
		if not AnimationId then
			-- Anim is a table (should contain .R6 and .R15)
			AnimationId = IsMyHumanoidR6 and Anim.R6 or Anim.R15
			if not AnimationId then
				-- Can't play animation...
				return
			end
		end
		
		if self.AnimationTrack then
			self.AnimationTrack:Stop()
			self.AnimationTrack = nil
		end
		
		local AnimationObject = Instance.new("Animation")
		AnimationObject.AnimationId = AnimationId
		
		local Animator = MyHumanoid:FindFirstChildWhichIsA("Animator")
		if Animator then
			local AnimationTrack = Animator:LoadAnimation(AnimationObject)
			AnimationTrack.Priority = Enum.AnimationPriority.Action
			AnimationTrack.Looped = true
			AnimationTrack:Play()
			
			self.AnimationTrack = AnimationTrack
		end
	end
	
	function self:Destroy()
		-- Clean up
		
		Part.Size = self.Size
		pcall(function ()
			Part.Parent = OriginalPartParent
		end)
		Part.CollisionGroup = OriginalPartCollisionGroup
		Part.CustomPhysicalProperties = PhysicalProperties.new(Part.Material)
		Part.LocalTransparencyModifier = 0
		
		PlatformPart:Destroy()
		if SteppedConnection then
			SteppedConnection:Disconnect()
			SteppedConnection = nil
		end
		
		if HeartbeatConnection then
			HeartbeatConnection:Disconnect()
			HeartbeatConnection = nil
		end
		
		self.IsActive = false
		if self.AnimationTrack then
			self.AnimationTrack:Stop()
			self.AnimationTrack = nil
		end
		for _, JI in pairs(SavedJoints) do
			pcall(function ()
				-- Joint might have been destroyed... This is wrapped inside pcall incase .Parent is locked
				JI.Joint.Parent = JI.OriginalParent
			end)
		end
		for _, NCC in pairs(NoCollisionConstraints) do
			NCC:Destroy()
		end
		if MyCurrentMountedObject == self then
			MyCurrentMountedObject = nil
		end
		
		MyCharacterRootPart.CFrame = MyCurrentRootPartCFrame
		MyCharacterRootPart.Velocity = Vector3.zero
		MyCharacterRootPart.RotVelocity = Vector3.zero
		if PrimaryPart and PrimaryPart.Parent and OriginalPartParent:IsA("Model") and OriginalPartParent.Parent then
			OriginalPartParent.PrimaryPart = PrimaryPart
		end
	end
	
	return self
end

local LOOPFLING_ID = 0
	
function UnmountWithCharacterModel()
	if not CurrentCharacterModelMountedWith then
		return
	end
	
	if MyCurrentMountedObject then
		MyCurrentMountedObject:Destroy()
	end
	
	local Humanoid: Humanoid = CurrentCharacterModelMountedWith:FindFirstChildWhichIsA("Humanoid"):: Humanoid
	
	if Humanoid then
		-- Rebuild the humanoid 
		pcall(function () Humanoid:BuildRigFromAttachments() end)
	end
end

function MountWithCharacterModel(Model, BodyPart: {string} | string, Offset, SetVelocity): MountObject?
	UnmountWithCharacterModel()
	
	if MyCurrentMountedObject then
		MyCurrentMountedObject:Destroy()
	end
	
	CurrentCharacterModelMountedWith = Model
	
	local Humanoid = Model:FindFirstChildWhichIsA("Humanoid")
	
	if not Humanoid then
		Notify("Character model doesn't have a Humanoid! :" .. Model.Name)
		return nil
	end
	
	Humanoid:SetStateEnabled(Enum.HumanoidStateType.Dead, false)
	Humanoid.BreakJointsOnDeath = false
	
	local BodyPartFind = nil
	if typeof(BodyPart) == "string" then
		BodyPartFind = Model:FindFirstChild(BodyPart)
	elseif typeof(BodyPart) == "table" then
		for _, BodyPartCheck in pairs(BodyPart) do
			BodyPartFind = Model:FindFirstChild(BodyPartCheck)
			if BodyPartFind then
				break
			end
		end
	else
		BodyPartFind = BodyPart
	end
	
	if not BodyPartFind then
		return nil
	end
	
	return MountWithPart(BodyPartFind, Offset, SetVelocity)
end

function DoesPlayerAndCharacterExist(Player, PlayerName)
	if not Player then
		if not PlayerName or string.lower(PlayerName) == "all" or string.lower(PlayerName) == "others" then
			Notify("No player found.")
		else
			Notify("Could not find player \"" .. PlayerName .. "\".")
		end
		return false
	end
	
	if not Player.Character then
		if not PlayerName then
			Notify("Player doesn't have a character.")
		else
			Notify("Player \"" .. PlayerName .. "\" doesn't have a character.")
		end
		return false
	end
	
	return true
end

local CurrentCommandsGui = nil

function OpenCommandsMenu()
	if CurrentCommandsGui then
		CurrentCommandsGui:Destroy()
		CurrentCommandsGui = nil
	end
	
	local ViewportSize = workspace.CurrentCamera.ViewportSize
	
	local CommandsGui = Instance.new("Frame")
	CommandsGui.AnchorPoint = Vector2.new(0.5, 0)
	CommandsGui.Position = UDim2.new(0.5, 0, 0.5, -ViewportSize.Y/3)
	CommandsGui.Size = UDim2.new(0.6, 200, 0.6, 100)
	CommandsGui.Active = true
	CommandsGui.BackgroundColor3 = Color3.new(0.2, 0.2, 0.2)
	CommandsGui.BackgroundTransparency = 0.5
	CommandsGui.BorderSizePixel = 0
	
	local DragFrame = Instance.new("Frame")
	DragFrame.BackgroundTransparency = 1
	DragFrame.BorderSizePixel = 0
	DragFrame.Size = UDim2.new(1, 0, 1, 0)
	DragFrame.Parent = CommandsGui
	
	local IsDragging = false
	
	-- Draggable help menu
	DragFrame.InputBegan:Connect(function (InputObject)
		if IsDragging then
			return
		end
		
		-- Support them mobile niggas
		local IsMobileDrag = InputObject.UserInputType == Enum.UserInputType.Touch
		
		if InputObject.UserInputType == Enum.UserInputType.MouseButton1 or IsMobileDrag then
			IsDragging = true
			
			local MousePos = IsMobileDrag and Vector2.new(InputObject.Position.X, InputObject.Position.Y)
								or UserInputService:GetMouseLocation()
			local MouseToMenuOffset = Vector2.new(MousePos.X, MousePos.Y)
									  - Vector2.new(CommandsGui.Position.X.Offset, CommandsGui.Position.Y.Offset)
			
			local InputEndedEvent; InputEndedEvent = UserInputService.InputEnded:Connect(function (EndedInputObject)
				if EndedInputObject == InputObject then
					InputEndedEvent:Disconnect()
					InputEndedEvent = nil
				end
			end)
			
			while InputEndedEvent and CommandsGui.Parent do
				if InputEndedEvent and not InputEndedEvent.Connected then break end
				if SCRIPT_IS_EXITED then break end
				
				local NewMousePos = IsMobileDrag and InputObject.Position or UserInputService:GetMouseLocation()
				local MoveDelta = Vector2.new(NewMousePos.X-MousePos.X, NewMousePos.Y-MousePos.Y)
				CommandsGui.Position = CommandsGui.Position + UDim2.fromOffset(MoveDelta.X, MoveDelta.Y)
				
				MousePos += Vector2.new(
					math.floor(math.abs(MoveDelta.X))*math.sign(MoveDelta.X),
					math.floor(math.abs(MoveDelta.Y))*math.sign(MoveDelta.Y), 
					0
				)
				task.wait()
			end
			
			if InputEndedEvent then
				InputEndedEvent:Disconnect()
				InputEndedEvent = nil
			end
			
			IsDragging = false
		end
	end)
	
	CurrentCommandsGui = CommandsGui
	
	local ExitButton = Instance.new("TextButton")
	ExitButton.Text = "X"
	ExitButton.TextSize = 17
	ExitButton.BorderSizePixel = 0
	ExitButton.TextColor3 = Color3.new(1, 1, 1)
	ExitButton.BackgroundColor3 = Color3.fromRGB(156, 0, 0)
	ExitButton.Size = UDim2.new(0, 40, 0, 20)
	ExitButton.AnchorPoint = Vector2.new(1, 0)
	ExitButton.Position = UDim2.new(1, 0, 0, 0)
	
	ExitButton.Activated:Connect(function ()
		CurrentCommandsGui:Destroy()
		CurrentCommandsGui = nil
	end)
	
	ExitButton.Parent = CommandsGui
	
	local TitleLabel = Instance.new("TextLabel")
	TitleLabel.Text = "Commands"
	TitleLabel.AutomaticSize = Enum.AutomaticSize.X
	TitleLabel.TextXAlignment = Enum.TextXAlignment.Left
	TitleLabel.TextSize = 15
	TitleLabel.BorderSizePixel = 0
	TitleLabel.TextColor3 = Color3.new(1, 1, 1)
	TitleLabel.BackgroundTransparency = 1
	TitleLabel.Size = UDim2.new(0, 30, 0, 35)
	TitleLabel.AnchorPoint = Vector2.new(0, 0)
	TitleLabel.Position = UDim2.new(0, 10, 0, 0)
	TitleLabel.Parent = CommandsGui
	
	local ScrollingFrame = Instance.new("ScrollingFrame")
	ScrollingFrame.ElasticBehavior = Enum.ElasticBehavior.Never
	ScrollingFrame.AutomaticCanvasSize = Enum.AutomaticSize.XY
	ScrollingFrame.CanvasSize = UDim2.new(0, 0, 0 , 0)
	ScrollingFrame.Position = UDim2.new(0, 15, 0, 35)
	ScrollingFrame.BackgroundTransparency = 0.5
	ScrollingFrame.BackgroundColor3 = Color3.new(0, 0, 0)
	ScrollingFrame.Size = UDim2.new(1, -30, 1, -50)
	ScrollingFrame.Parent = CommandsGui
	
	local UIListLayout = Instance.new("UIListLayout")
	UIListLayout.SortOrder = Enum.SortOrder.LayoutOrder
	UIListLayout.Parent = ScrollingFrame
	
	for i, StringCommand in pairs(CommandsList) do
		if StringCommand == 0 then
			continue
		end
		local CmdString_T = {}
		local CSI = 1
		
		local TextSize = 20
		local FontFace = Font.fromEnum(Enum.Font.RobotoMono)
		
		if typeof(StringCommand) == "table" then
			for j, String in pairs(StringCommand) do
				if j == 1 then
					CmdString_T[CSI] = String
				elseif j == #StringCommand then
					CmdString_T[CSI] = " - " .. String
				else
					CmdString_T[CSI] = " " .. String
				end
				CSI += 1
			end
		elseif typeof(StringCommand) == "string" then
			table.insert(CmdString_T, StringCommand)
			FontFace = Font.fromEnum(Enum.Font.Code)
			FontFace.Weight = Enum.FontWeight.Bold
			TextSize = 22
		end
		
		local CmdString = table.concat(CmdString_T)
		
		local CommandLabel = Instance.new("TextLabel")
		CommandLabel.Name = "cmd." .. i
		CommandLabel.LayoutOrder = i
		CommandLabel.Text = CmdString
		CommandLabel.FontFace = FontFace
		CommandLabel.TextSize = TextSize
		CommandLabel.TextXAlignment = Enum.TextXAlignment.Left
		CommandLabel.TextColor3 = Color3.new(1, 1, 1)
		CommandLabel.BackgroundTransparency = 1
		CommandLabel.Size = UDim2.new(0, 10, 0, 10)
		CommandLabel.AutomaticSize = Enum.AutomaticSize.XY
		CommandLabel.Parent = ScrollingFrame
		
		local UIPadding = Instance.new("UIPadding")
		UIPadding.PaddingLeft = UDim.new(0, 5)
		UIPadding.Parent = CommandLabel
	end
	
	CommandsGui.Parent = MainScreenGui
end

function IsCharacterAlive(Character)
	if not Character then
		return false
	end
	local Hum: Humanoid = Character:FindFirstChildWhichIsA("Humanoid")
	if not Hum or not Hum:IsA("Humanoid") then
		return false
	end
	if Hum.Health <= 0 or Hum:GetState() == Enum.HumanoidStateType.Dead then
		return false
	end
	local FirstBasePart = Character:FindFirstChildWhichIsA("BasePart")
	if not FirstBasePart then
		-- The player might have fallen out of the world?
		-- For some reason, falling out of the world makes the humanoid to think its not dead? and it starts regening health???
		-- To counteract this, just check to see if there are any parts left in the character model.
		return false
	end
	
	-- ALIVE!
	return true
end

function GetNearestPlayerFromPosition(Position, MaxDistance)
	local Distance = MaxDistance or 10000
	local Player = nil
	
	for _, PlayerFind in pairs(Players:GetPlayers()) do
		local Character = PlayerFind.Character
		if not Character or PlayerFind == LocalPlayer then
			continue
		end
		if not IsCharacterAlive(Character) then
			continue
		end
		
		local PlayerPosition = Character:GetPivot().Position
		if not Character.PrimaryPart then
			local RootPart = Character:FindFirstChild("HumanoidRootPart") or
							 Character:FindFirstChild("Head") or
							 Character:FindFirstChild("Torso") or
							 Character:FindFirstChild("UpperTorso")
			if not RootPart then
				-- Wth can't find RootPart?? skip this tweaker
				continue
			end
			if RootPart:IsA("BasePart") then
				PlayerPosition = RootPart.Position
			end
		end
		
		local PlayerDistance = (Position-PlayerPosition).Magnitude
		
		if Distance > PlayerDistance then
			Distance = PlayerDistance
			Player = PlayerFind
		end
	end
	
	return Player
end

function CheckIsPartAndCanCollide(Part: BasePart?)
	if not Part or not Part:IsA("BasePart") or not Part.CanCollide then
		return false
	end
	return true
end

function GetCharacterCollisionPart(Character: Model)
	local ColPart: BasePart = Character:FindFirstChild("HumanoidRootPart")
	if not CheckIsPartAndCanCollide(ColPart) then
		ColPart = Character:FindFirstChild("PlayerCollision") or Character:FindFirstChild("Collision")
		if not CheckIsPartAndCanCollide(ColPart) then
			ColPart = Character:FindFirstChild("Torso") or Character:FindFirstChild("UpperTorso") or Character:FindFirstChild("LowerTorso")
		end
	end
	
	if not CheckIsPartAndCanCollide(ColPart) then
		ColPart = Character:FindFirstChildWhichIsA("BasePart")
		if not CheckIsPartAndCanCollide(ColPart) then
			return nil
		end
	end
	
	return ColPart
end

function CheckCollisionsEnabled(PlayersFound: {Player})
	local LocalCharacter = LocalPlayer.Character
	if not LocalCharacter then return end
	local MyRootPart: BasePart = GetCharacterCollisionPart(LocalCharacter)
	if not MyRootPart then return end
	
	--local CollisionsAreEnabled = true
	for _, Player in pairs(PlayersFound) do
		local Character = Player.Character
		if not Character then continue end
		
		local RootPart = GetCharacterCollisionPart(Character)
		if RootPart then
			local CanCollide = MyRootPart:CanCollideWith(RootPart)
			if not CanCollide then
				Notify("Collisions may not be enabled for this game. This action might not work!")
				return false
			end
		end
	end
	
	return true
end

function GetLocalHipHeight()
	local LocalCharacter = LocalPlayer.Character
	if not LocalCharacter then return 0 end
	
	local Humanoid = LocalCharacter:FindFirstChildWhichIsA("Humanoid")
	if not Humanoid then return 0 end
	
	local HipHeight = Humanoid.HipHeight
	if Humanoid.RigType == Enum.HumanoidRigType.R6 and Humanoid.RootPart then
		HipHeight += Humanoid.RootPart.Size.Y
	end
	
	return HipHeight
end

local GFlingDirectionPart

local AntiFlingEnabled = false

function CheckBooleanString(BooleanString: string?, CurrentFlag: boolean?)
	local BooleanString = string.lower(tostring(BooleanString or ""))
	
	local IsToggle = (not BooleanString or
		(BooleanString ~= "true" and BooleanString ~= "false" and
		 BooleanString ~= "on" and BooleanString ~= "off"))
	
	if IsToggle then
		if CurrentFlag == true then
			return false
		else
			return true
		end
	else
		if BooleanString == "true" or BooleanString == "on" then
			return true
		else
			return false
		end
	end
	return true
end

-- This is used for the PlayerWalk command because R6 body part names have spaces in them.
local R6BodyPartNames = {
	RightArm = "Right Arm",
	RightLeg = "Right Leg",
	LeftArm  = "Left Arm",
	LeftLeg  = "Left Leg",
}

local HideCommandBarUntilFocus = false
local CommandLineTextBox = nil

function Command_Stop(NoNotification: boolean?)
	local AnythingStopped = false
	if MyCurrentMountedObject then
		MyCurrentMountedObject.ActuallyStopped = true
		if not NoNotification then
			Notify("Command stopped.")
		end
		AnythingStopped = true
	end
	UnmountWithCharacterModel()
	if MyCurrentMountedObject then
		MyCurrentMountedObject.ActuallyStopped = true
		MyCurrentMountedObject:Destroy()
	end
	if LOOPFLING_ID ~= 0 then
		LOOPFLING_ID = 0
		if not NoNotification then
			Notify("LoopFling stopped.")
		end
		AnythingStopped = true
	end
	LOOPFLING_ID = 0
	if GFlingDirectionPart then
		GFlingDirectionPart:Destroy()
		GFlingDirectionPart = nil
		if not NoNotification then
			Notify("FlingAura stopped.")
		end
		AnythingStopped = true
	end
	if not AnythingStopped and not NoNotification then
		if not AntiFlingEnabled then
			Notify("Nothing stopped.")
		else
			Notify("Nothing stopped, although antifling is enabled! Disable it by typing >\"antifling false\"")
		end
	end
end

local CommandFunctions; CommandFunctions = {
	cmds = OpenCommandsMenu,
	commands = OpenCommandsMenu,
	help = OpenCommandsMenu,
	h    = OpenCommandsMenu,
	
	stop = Command_Stop,
	s    = Command_Stop,
	
	hidecmdbar = function()
		if not KEYBIND_FocusCommandBar then
			Notify("Cannot hide command bar without a keybind!")
			return
		end
		if not UserInputService.KeyboardEnabled then
			Notify("Cannot hide command bar without a keyboard...")
			return
		end
		HideCommandBarUntilFocus = true
		if CommandLineTextBox then
			CommandLineTextBox.Visible = false
		end
		Notify("Command bar hidden, press '" .. KEYBIND_FocusCommandBar.Name .. "' to use the command bar.")
	end,
	showcmdbar = function()
		HideCommandBarUntilFocus = false
		if CommandLineTextBox then
			CommandLineTextBox.Visible = true
		end
	end,
	
	fling = function(PlayerName, FlingDuration)
		local FlingDuration = tonumber(FlingDuration or 0.6)
		
		local PlayersFound = GetPlayersFromString(PlayerName)
		
		if #PlayersFound <= 0 then
			if not PlayerName or PlayerName == "" then
				PlayerName = " "
			end
			if string.lower(PlayerName) == "aura" then
				-- Bruh
				Notify("Could not find player \"aura\"... Did you mean to type the command \"flingaura\"?")
			else
				if string.lower(PlayerName) == "all" or string.lower(PlayerName) == "others" then
					Notify("No other players exist in the server to fling")
				else
					Notify("Could not find player \"" ..PlayerName.. "\"")
				end
			end
			return
		end
		
		CheckCollisionsEnabled(PlayersFound)
		
		for _, Player in pairs(PlayersFound) do
			if not Player.Character then continue end
			local Mount = MountWithCharacterModel(
				Player.Character,
				{"Torso", "UpperTorso", "HumanoidRootPart"},
				CFrame.Angles(math.pi, 0, 0) * CFrame.new(0, 2, 0),
				FlingVelocity
			)
			if not Mount then
				-- No mount object created... can't fling this player
				continue
			end
			Mount.NoHipHeight = true
			Mount.ForceStopAnimations = true
			Mount.OscillateSpeed = 40
			Mount.OscillateOffsetY = NumberRange.new(-2, 0)
			task.wait(FlingDuration)
			if Mount.ActuallyStopped then
				-- WE STOPPED!
				return
			end
			UnmountWithCharacterModel()
		end
	end,
	loopfling = function(PlayerName, FlingDuration)
		local FlingDuration = tonumber(FlingDuration or 0.6)
		
		local PlayersFound = GetPlayersFromString(PlayerName)
		local PlayerFound = PlayersFound[1]
		if not PlayerFound then
			Notify("Player not found")
			return
		end
		Command_Stop(true)
		
		local IsSearchingEveryone = string.lower(PlayerName) == "all" or string.lower(PlayerName) == "others"
		
		local NextPlayerCycleTime = math.max(1, FlingDuration)
		local PlayerAt = 1
		
		CheckCollisionsEnabled(PlayersFound)
		
		LOOPFLING_ID = RNG:NextInteger(-(2^53), (2^53))
		local MyId = LOOPFLING_ID
		
		local PlrNames = {}
		for _, Plr in pairs(PlayersFound) do
			table.insert(PlrNames, Plr.Name)
		end
		table.sort(PlrNames)		-- Sort a-z
		Notify("Loop flinging {" .. table.concat(PlrNames, ", ") .. "}")
		
		local Mount = nil
		local CurrentPlayerChar = PlayerFound.Character
		while (not Mount or not Mount.ActuallyStopped) and MyId == LOOPFLING_ID do
			if SCRIPT_IS_EXITED then break end
			
			if PlayerAt > #PlayersFound then
				PlayerAt = 1
				if IsSearchingEveryone then
					PlayersFound = GetPlayersFromString(PlayerName)
					if not PlayersFound[1] then
						task.wait(0.1)
						continue
					end
				end
			end
			if #PlayersFound <= 0 or (Mount and Mount.ActuallyStopped) then
				Notify("Loop fling has stopped due to all the player(s) leaving.")
				break
			end
			local PlayerFound = PlayersFound[PlayerAt]
			if not PlayerFound then
				-- Huh?
				break
			end
			if not PlayerFound.Parent then
				-- Player has left... so sad
				table.remove(PlayersFound, table.find(PlayersFound, PlayerFound))
				PlayerAt += 1
				NextPlayerCycleTime = FlingDuration
				continue
			end
			if not Mount or not Mount.IsActive or (PlayerFound.Character ~= CurrentPlayerChar) then
				CurrentPlayerChar = PlayerFound.Character
				if CurrentPlayerChar and IsCharacterAlive(CurrentPlayerChar) then
					Mount = MountWithCharacterModel(
						PlayerFound.Character,
						{"Torso", "UpperTorso", "HumanoidRootPart"},
						CFrame.Angles(math.pi, 0, 0) * CFrame.new(0, 2, 0),
						FlingVelocity
					)
					LOOPFLING_ID = MyId
					if Mount then
						Mount.NoHipHeight = true
						--Mount.AntiSleep = false
						Mount.ForceStopAnimations = true
						Mount.OscillateSpeed = 40
						Mount.OscillateOffsetY = NumberRange.new(-2, 0)
					else
						PlayerAt += 1
						task.wait(0.1)
						continue
					end
				else
					CurrentPlayerChar = nil
				end
			end
			if CurrentPlayerChar then
				if not IsCharacterAlive(CurrentPlayerChar) then
					PlayerAt += 1
					NextPlayerCycleTime = FlingDuration
					UnmountWithCharacterModel()
					CurrentPlayerChar = nil
				end
			end
			if not Mount then
				break
			end
			local DT = task.wait(1/30)
			if MyId ~= LOOPFLING_ID then break end
			NextPlayerCycleTime -= DT
			if Mount.ActuallyStopped then
				break
			end
			if NextPlayerCycleTime <= 0 then
				PlayerAt += 1
				NextPlayerCycleTime = FlingDuration
			end
		end
		
		if MyId == LOOPFLING_ID then
			LOOPFLING_ID = 0
		end
	end,
	headsit = function(PlayerName)
		local PlayerFound = GetPlayerFromString(PlayerName)
		if not DoesPlayerAndCharacterExist(PlayerFound, PlayerName) then return end
		
		local Mount = MountWithCharacterModel(PlayerFound.Character, {"Head", "Torso"}, CFrame.new(0, -GetLocalHipHeight()+0.5, 0))
		Mount:PlayAnimation(Animations.Sit)
	end,
	facesit = function(PlayerName)
		local PlayerFound = GetPlayerFromString(PlayerName)
		if not DoesPlayerAndCharacterExist(PlayerFound, PlayerName) then return end
		
		local Mount = MountWithCharacterModel(PlayerFound.Character, {"Head"},
											  CFrame.Angles(-math.pi/2, 0, 0) * CFrame.new(0, -GetLocalHipHeight()+0.5, 0))
		Mount:PlayAnimation(Animations.Sit)
	end,
	backsit = function(PlayerName)
		local PlayerFound = GetPlayerFromString(PlayerName)
		if not DoesPlayerAndCharacterExist(PlayerFound, PlayerName) then return end
		
		local Mount = MountWithCharacterModel(PlayerFound.Character, {"UpperTorso", "Torso"},
											  CFrame.Angles(math.pi/2, 0, 0) * CFrame.new(0, -GetLocalHipHeight()+0.5, 0), nil)
		Mount:PlayAnimation(Animations.Sit)
	end,
	armsit = function(PlayerName)
		local PlayerFound = GetPlayerFromString(PlayerName)
		if not DoesPlayerAndCharacterExist(PlayerFound, PlayerName) then return end
		
		local Mount = MountWithCharacterModel(PlayerFound.Character, {
				"Right Arm", "RightUpperArm", "RightHand",
				"Left Arm", "LeftUpperArm", "LeftHand"
			}, CFrame.Angles(0, 0, -math.pi/2) * CFrame.new(0, -GetLocalHipHeight()+0.5, 0))
		Mount:PlayAnimation(Animations.Sit)
	end,
	handsit = function(PlayerName)
		local PlayerFound = GetPlayerFromString(PlayerName)
		if not DoesPlayerAndCharacterExist(PlayerFound, PlayerName) then return end
		
		local Offset = CFrame.new(0, -GetLocalHipHeight(), 0)*CFrame.Angles(0, math.pi/2, 0)
		local Mount = MountWithCharacterModel(PlayerFound.Character, {"RightHand", "Right Arm"},
											  CFrame.Angles(math.pi, 0, 0) * Offset)
		Mount:PlayAnimation(Animations.Sit)
	end,
	rootsit = function(PlayerName)
		local PlayerFound = GetPlayerFromString(PlayerName)
		if not DoesPlayerAndCharacterExist(PlayerFound, PlayerName) then return end
		
		MountWithCharacterModel(PlayerFound.Character, {"HumanoidRootPart", "UpperTorso", "Torso"},
								CFrame.Angles(-math.pi/2, 0, 0) * CFrame.new(0, -1, -0.5))
	end,
	standon = function(PlayerName)
		local PlayerFound = GetPlayerFromString(PlayerName)
		if not DoesPlayerAndCharacterExist(PlayerFound, PlayerName) then return end
		
		MountWithCharacterModel(PlayerFound.Character, {"Head"}, CFrame.new(0, 0.5, 0))
	end,
	floor = function(PlayerName)
		local PlayerFound = GetPlayerFromString(PlayerName)
		if not DoesPlayerAndCharacterExist(PlayerFound, PlayerName) then return end
		
		UnmountWithCharacterModel()
		
		local OtherCharacter = PlayerFound.Character
		local OtherHumanoid = OtherCharacter:FindFirstChildWhichIsA("Humanoid")
		local HumanoidRootPart = OtherCharacter:FindFirstChild("HumanoidRootPart")
		if not OtherHumanoid then return end
		
		local LocalCharacter = LocalPlayer.Character
		
		local Mount = MountWithCharacterModel(OtherCharacter, {"HumanoidRootPart"}, CFrame.identity, nil)
		if not Mount then return end
		Mount.NoHipHeight = true
		Mount.ForceStopAnimations = true
		
		while Mount.IsActive do
			local HipHeight = OtherHumanoid.HipHeight
			if HumanoidRootPart and HumanoidRootPart:IsA("BasePart") then
				HipHeight += HumanoidRootPart.Size.Y*0.5
				if OtherHumanoid.RigType == Enum.HumanoidRigType.R6 then
					HipHeight += HumanoidRootPart.Size.Y*0.5
				end
			end
			
			Mount.Offset = CFrame.new(0, -HipHeight, 0) * CFrame.Angles(math.pi*0.5, 0, 0)
			if LocalCharacter then
				local lHumanoidRootPart = LocalCharacter:FindFirstChild("HumanoidRootPart")
				if lHumanoidRootPart then
					Mount.Offset *= CFrame.new(0, 0, (lHumanoidRootPart.Size.Z*0.5) + 0.1)
				end
			end
			Mount.Offset *= CFrame.Angles(0, 0, (os.clock()*math.pi*20))
			task.wait()
		end
	end,
	fan = function(PlayerName, Speed)
		local PlayerFound = GetPlayerFromString(PlayerName)
		if not DoesPlayerAndCharacterExist(PlayerFound, PlayerName) then return end
		
		UnmountWithCharacterModel()
		
		local LocalCharacter = LocalPlayer.Character
		
		local Mount = MountWithCharacterModel(PlayerFound.Character, {"Head"}, CFrame.identity, nil)
		if not Mount then return end
		Mount.NoHipHeight = true
		
		local DefaultSpeed = 3
		
		local Speed = tonumber(Speed) or DefaultSpeed
		if Speed ~= Speed then
			Speed = DefaultSpeed
		end
		
		while Mount.IsActive do
			Mount.Offset = CFrame.new(0, 3, 0) * CFrame.Angles(-math.pi*0.5, 0, 0)
			Mount.Offset *= CFrame.Angles(0, 0, (os.clock()*math.pi*Speed))
			task.wait()
		end
	end,
	playerwalk = function(PlayerName, BodyPartName, Floor, Direction)
		local PlayerFound = GetPlayerFromString(PlayerName)
		if not DoesPlayerAndCharacterExist(PlayerFound, PlayerName) then return end
		
		BodyPartName = R6BodyPartNames[BodyPartName] or BodyPartName or "n"
		
		local MyCharacter = LocalPlayer.Character
		
		local MyHumanoid = MyCharacter:FindFirstChildWhichIsA("Humanoid")
		local MyRootPart = MyCharacter:FindFirstChild("HumanoidRootPart")
		
		local PlayerCharacter = PlayerFound.Character
		
		local PlayerCharacterRoot = PlayerCharacter:FindFirstChild("HumanoidRootPart") or PlayerCharacter.PrimaryPart
		
		if MyCurrentMountedObject then
			MyCurrentMountedObject:Destroy()
		end
		
		local Last = PlayerCharacter.Archivable
		PlayerCharacter.Archivable = true
		local PlayerClone = PlayerCharacter:Clone()
		PlayerCharacter.Archivable = Last
		
		local AttachPart = PlayerClone:FindFirstChild(BodyPartName) or
			PlayerClone:FindFirstChild("LowerTorso") or
			PlayerClone:FindFirstChild("Torso")
		
		if not AttachPart or not PlayerCharacterRoot then
			Notify("BodyParts {" .. BodyPartName .. ", LowerTorso, Torso} not found.")
			return
		end
		
		AttachPart.Anchored = true
		AttachPart.Velocity = Vector3.zero
		AttachPart.RotVelocity = Vector3.zero
		
		local Highlight = Instance.new("Highlight")
		Highlight.Adornee = PlayerClone
		Highlight.FillTransparency = 0.64
		Highlight.Parent = MainScreenGui
		
		PlayerClone.Parent = workspace.Terrain
		
		local IsMergingActualRootPart = AttachPart == PlayerCharacterRoot
		
		local Offset = CFrame.new(0, -4, 4)
		local Mount = MountWithCharacterModel(PlayerFound.Character, {BodyPartName, "LowerTorso", "Torso"}, Offset, nil)
		if not Mount then return end
		Mount.RespectRotation = true
		Mount.RespectPhysicsVelocity = true
		
		local WhereIActuallyAm = Instance.new("Part")
		WhereIActuallyAm.Anchored = true
		WhereIActuallyAm.CanCollide = false
		WhereIActuallyAm.CanQuery = false
		WhereIActuallyAm.Size = Vector3.new(3, 4, 1)
		WhereIActuallyAm.Material = Enum.Material.Neon
		WhereIActuallyAm.Transparency = 0.5
		WhereIActuallyAm.Color = Color3.new(0, 0.25, 1)
		
		local BoxHandleAdornee = Instance.new("BoxHandleAdornment")
		BoxHandleAdornee.Adornee = WhereIActuallyAm
		BoxHandleAdornee.Transparency = 0.8
		BoxHandleAdornee.Size = WhereIActuallyAm.Size
		BoxHandleAdornee.Color3 = Color3.new(0, 1, 1)
		BoxHandleAdornee.ZIndex = 1
		BoxHandleAdornee.AlwaysOnTop = true
		BoxHandleAdornee.Parent = MainScreenGui
		
		WhereIActuallyAm.Parent = workspace
		
		local Direction = tonumber(Direction or 1) or 1
		
		local RotOffset = CFrame.identity
		
		if Direction == 1 then
			RotOffset = CFrame.identity
		elseif Direction == 2 then
			RotOffset = CFrame.Angles(math.pi*0.5, 0, 0)
		elseif Direction == 3 then
			RotOffset = CFrame.Angles(math.pi, 0, 0)
		elseif Direction == 4 then
			RotOffset = CFrame.Angles(0, 0, math.pi*0.5)
		end
		
		local DefaultFloor = -2.5
		
		local Floor = tonumber(Floor or DefaultFloor) or DefaultFloor
		if Floor ~= Floor then
			Floor = DefaultFloor
		end
		
		Notify(Sprintf("[PlayerWalk] BodyPart=\"%s\", Floor=%0.2f", AttachPart.Name, Floor))
		if IsMergingActualRootPart then
			Notify("[PlayerWalk] Mounting to HumanoidRootPart is buggy and is NOT RECOMMENDED!")
		end
		
		local Gravity = 0
		
		local Jump = false
		
		local JumpConnection = MyHumanoid.Jumping:Connect(function ()
			Jump = true
		end)
		
		local NROffset = Mount.Offset
		
		while Mount.IsActive do
			local DT = task.wait()
			if SCRIPT_IS_EXITED then break end
			
			local MyRootVelocity = Mount.RootVelocity*Vector3.new(1, 0, 1)
			if Jump then
				Gravity = 30
				Jump = false
			end
			if Mount.Offset.Y <= Floor then
				MyRootVelocity += Vector3.new(0, ((Floor-Mount.Offset.Y)/DT)+Gravity, 0)
				if Gravity < 0 then
					Gravity = 0
				end
			else
				Gravity -= DT*math.max(workspace.Gravity, 50)
				MyRootVelocity += Vector3.new(0, Gravity, 0)
			end
			local MyRotationVelocity = Mount.RootRotVelocity*DT
			Mount.SetVelocity = MyRootVelocity
			NROffset = (NROffset * CFrame.Angles(0, (MyRotationVelocity.Y), 0)) + MyRootVelocity*DT
			Mount.Offset = RotOffset * NROffset
			AttachPart.CFrame = Mount.Part.CFrame
			
			WhereIActuallyAm.CFrame = PlayerCharacterRoot.CFrame * Mount.Offset * CFrame.new(0, 3, 0)
		end
		
		if JumpConnection then
			JumpConnection:Disconnect()
			JumpConnection = nil
		end
		
		WhereIActuallyAm:Destroy()
		
		Highlight:Destroy()
		BoxHandleAdornee:Destroy()
		
		PlayerClone:Destroy()
	end,
	orbit = function(PlayerName)
		local PlayerFound = GetPlayerFromString(PlayerName)
		if not DoesPlayerAndCharacterExist(PlayerFound, PlayerName) then return end

		local Mount = MountWithCharacterModel(PlayerFound.Character, {"UpperTorso", "Torso", "Head"}, CFrame.new(0, -2, 1))
		Mount.NoHipHeight = true
		
		local Speed = 0.75
		
		local RandomOffset = RNG:NextNumber(0, 10)

		while Mount.IsActive do
			task.wait(0.02)
			local SpinTick  = ((os.clock()+RandomOffset)*Speed*360*0.75)%360
			local SpinTick2 = ((os.clock()+RandomOffset)*Speed*360*0.5)%360
			Mount.Offset = CFrame.Angles(0, math.rad(SpinTick), 0) * CFrame.new(0, 0, 4) * CFrame.Angles(0, math.rad(SpinTick2), 0)
		end
	end,
	sphereorbit = function(PlayerName)
		local PlayerFound = GetPlayerFromString(PlayerName)
		if not DoesPlayerAndCharacterExist(PlayerFound, PlayerName) then return end
		
		local Mount = MountWithCharacterModel(PlayerFound.Character, {"UpperTorso", "Torso", "Head"}, CFrame.new(0, -2, 1))
		local RandomVector = RNG:NextUnitVector()
		
		local CFrameOrbitAngle = CFrame.Angles(RandomVector.X, RandomVector.Y, RandomVector.Z)
		
		local NoiseVector = RandomVector*1000
		
		while Mount.IsActive do
			local DeltaTime = task.wait(0.02)
			local Noise  = math.noise(NoiseVector.X, NoiseVector.Y, NoiseVector.Z)
			local Noise2 = math.noise(NoiseVector.X, NoiseVector.Y, -NoiseVector.Z)
			
			NoiseVector += Vector3.new(DeltaTime, DeltaTime, DeltaTime)*0.2
			
			CFrameOrbitAngle *= CFrame.Angles(DeltaTime*Noise2*5, DeltaTime*3, DeltaTime*Noise*5)
			Mount.Offset = CFrameOrbitAngle * CFrame.new(0, -4, 5)
		end
	end,
	merge = function(PlayerName)
		local PlayerFound = GetPlayerFromString(PlayerName)
		if not DoesPlayerAndCharacterExist(PlayerFound, PlayerName) then return end
		
		local Mount = MountWithCharacterModel(PlayerFound.Character, {"UpperTorso", "Torso", "Head"}, nil, nil)
		Mount.NoHipHeight = true
	end,
	antifling = function(EnabledString)
		-- This attempts to stop your character from being flinged WITHOUT disabling collisions on every player
		-- ... Although this implementation is really buggy, you shoudn't use this command seriously :)
		
		local WasEnabled = AntiFlingEnabled
		AntiFlingEnabled = CheckBooleanString(EnabledString, AntiFlingEnabled)
		if AntiFlingEnabled then
			Notify("AntiFling Enabled ")
		else
			Notify("AntiFling Disabled ")
		end
		if AntiFlingEnabled and WasEnabled then
			-- Already enabled!
			return
		end
		
		local LocalCharacter = LocalPlayer.Character
		
		local LastVelocity = Vector3.zero
		local LastPosition = Vector3.zero
		
		local NextNotifyFling = os.clock()
		
		while AntiFlingEnabled do
			RunService.Stepped:Wait()		-- Before physics
			if SCRIPT_IS_EXITED then break end
			
			if GFlingDirectionPart then
				-- FlingAura has it's own anti fling
				continue
			end
			if LocalPlayer ~= LocalPlayer.Character then
				LocalCharacter = LocalPlayer.Character
				if not LocalCharacter then
					continue
				end
				local HumanoidRootPart = LocalCharacter:FindFirstChild("HumanoidRootPart")
				if not HumanoidRootPart or not HumanoidRootPart:IsA("BasePart") then
					LocalCharacter = nil
				end
				if HumanoidRootPart then
					LastVelocity = HumanoidRootPart.Velocity
					LastPosition = HumanoidRootPart.Position
				end
			end
			local MyRootPart = nil
			if LocalCharacter and IsCharacterAlive(LocalCharacter) then
				MyRootPart = LocalCharacter:FindFirstChild("HumanoidRootPart")
				if not MyRootPart or not MyRootPart:IsA("BasePart") then
					continue
				end
			end
			
			RunService.Heartbeat:Wait()		-- After physics
			
			if MyRootPart then
				local Humanoid = LocalCharacter:FindFirstChildWhichIsA("Humanoid")
				local Vel = MyRootPart.Velocity
				if MyRootPart.RotVelocity.Magnitude > 100 then
					MyRootPart.RotVelocity = MyRootPart.RotVelocity.Unit*100
				end
				if Humanoid and Humanoid:GetState() == Enum.HumanoidStateType.FallingDown then
					if Humanoid:GetStateEnabled(Enum.HumanoidStateType.GettingUp) then
						Humanoid:ChangeState(Enum.HumanoidStateType.GettingUp)
					else
						Humanoid:ChangeState(Enum.HumanoidStateType.Running)
					end
				end
				if Vel.Magnitude > 100 then
					local DistMag = (LastVelocity-Vel).Magnitude
					if DistMag > 110 then
						-- Possibly flinged?
						LastVelocity = LastVelocity:Lerp(Vector3.zero, 0.1)
						MyRootPart.Velocity = LastVelocity
						MyRootPart.CFrame = CFrame.new(LastPosition) * MyRootPart.CFrame.Rotation
						if os.clock() > NextNotifyFling then
							NextNotifyFling = os.clock()+2
							Notify("\"AntiFling\" canceled attempted fling?")
						end
					else
						LastVelocity = Vel
						LastPosition = MyRootPart.Position
					end
				else
					LastVelocity = Vel
					LastPosition = MyRootPart.Position
				end
			end
		end
	end,
	flingaura = function(Radius)
		-- TODO: Camera focus is messed up with shift lock (Roblox bug :/)
		
		local Radius = tonumber(Radius) or 10
		local FLING_UNANCHORED_PARTS = false
		
		local MyCharacter = LocalPlayer.Character
		
		if not MyCharacter then
			Notify("Local Character not found")
			return
		end
		
		Notify(Sprintf("FlingAura enabled, Radius=%0.1f", Radius))
		
		local Humanoid = MyCharacter:FindFirstChildWhichIsA("Humanoid")
		if not Humanoid then
			Notify("Local Humanoid not found")
			return
		end
		
		local MyRootPart: BasePart = MyCharacter.PrimaryPart:: BasePart
		if Humanoid.RigType == Enum.HumanoidRigType.R6 then
			MyRootPart = (
				MyCharacter:FindFirstChild("HumanoidRootPart") or
				Humanoid.RootPart or
				MyRootPart:WaitForChild("HumanoidRootPart", 0.1))
		:: BasePart
		end
		if not MyRootPart then
			Notify("Local HumanoidRootPart not found")
			return
		end
		local LastVelocity = MyRootPart.Velocity
		local LastRotVelocity = MyRootPart.RotVelocity
		if GFlingDirectionPart then
			LastVelocity = Vector3.zero
			LastRotVelocity = Vector3.zero
		end
		
		local RadiusPart: Part = Instance.new("Part")
		RadiusPart.Shape = Enum.PartType.Cylinder
		RadiusPart.Size = Vector3.new(0.1, math.min(Radius*2, 2048), math.min(Radius*2, 2048))
		RadiusPart.Anchored = true
		RadiusPart.CanCollide = false
		RadiusPart.CanQuery = false
		RadiusPart.CanTouch = false
		RadiusPart.Material = Enum.Material.ForceField
		RadiusPart.Color = Color3.new(1, 0, 0)
		RadiusPart.CastShadow = false
		RadiusPart.CFrame = CFrame.new(MyRootPart.Position) * CFrame.Angles(0, 0, math.pi/2)
		if Radius <= 0 then
			RadiusPart.Transparency = 1
		else
			RadiusPart.Transparency = 0.5
			RadiusPart.Parent = workspace
		end
		GFlingDirectionPart = RadiusPart
		
		local NextDirectionTick = os.clock()
		local CurrentRandomDirection = Vector3.new(0, 1, 0)
		
		local OldHipHeight = Humanoid.HipHeight
		
		local LastRootPartCFrame = MyRootPart.CFrame
		
		local RenderStepCON = RunService.RenderStepped:Connect(function ()	-- RenderStepped runs after network
			-- This fixes humanoid running/ jumping states
			MyRootPart.Velocity = LastVelocity
		end)
		
		local AntiFlicker_PosY = 0
		local AntiSleepTick = 0
		
		while MyCharacter:IsDescendantOf(workspace) and GFlingDirectionPart == RadiusPart do
			Heartbeat:Wait()
			if SCRIPT_IS_EXITED then break end
			if MyCurrentMountedObject then continue end
			
			if GFlingDirectionPart ~= RadiusPart then
				MyRootPart.Velocity = LastVelocity
				MyRootPart.CFrame = LastRootPartCFrame
				break
			end
			-- Prevent flinging ourselves!
			local MagDist = (MyRootPart.Velocity-LastVelocity).Magnitude
			if MagDist <= 90 then
				-- We weren't "flinged" this frame
				LastVelocity = MyRootPart.Velocity
				LastRotVelocity = MyRootPart.RotVelocity
			else
				LastVelocity = LastVelocity:Lerp(Vector3.zero, 0.1)
			end
			if Humanoid:GetState() == Enum.HumanoidStateType.FallingDown then
				if Humanoid:GetStateEnabled(Enum.HumanoidStateType.GettingUp) then
					Humanoid:ChangeState(Enum.HumanoidStateType.GettingUp)
				else
					Humanoid:ChangeState(Enum.HumanoidStateType.Running)
				end
			end
			LastRootPartCFrame = MyRootPart.CFrame
			
			if LastVelocity.Magnitude >= 500 then
				LastVelocity = LastVelocity.Unit*500
			end
			if LastRotVelocity.Magnitude >= 200 then
				LastRotVelocity = LastRotVelocity.Unit*200
			end
			
			local MyPosition = MyRootPart.Position
			local NearestPlayer = GetNearestPlayerFromPosition(MyPosition, 1+(Radius))
			
			local DoingRandomDirection = not NearestPlayer
			
			if LastVelocity.Magnitude > 5 then
				CurrentRandomDirection = LastVelocity.Unit
			end
			
			local Direction = CurrentRandomDirection
			if not DoingRandomDirection then
				local Dir = (NearestPlayer.Character:GetPivot().Position-MyPosition).Unit
				Direction = (Dir+Vector3.new(0, 0.25, 0)).Unit
			end
			
			local NearestUnanchoredPart = nil
			
			if not NearestPlayer and FLING_UNANCHORED_PARTS then
				local CheckRadius = math.min(Radius, 400)
				
				local CheckerParams = OverlapParams.new()
				CheckerParams.MaxParts = math.huge
				CheckerParams.CollisionGroup = MyRootPart.CollisionGroup
				CheckerParams.RespectCanCollide = true
				CheckerParams.FilterType = Enum.RaycastFilterType.Blacklist
				CheckerParams.FilterDescendantsInstances = {MyCharacter}
				
				local PartChecker = Instance.new("Part")
				PartChecker.Position = MyPosition
				PartChecker.Size = Vector3.one*CheckRadius*2
				
				local Parts = workspace:GetPartsInPart(PartChecker, CheckerParams)
				
				local NDist = math.huge
				
				for _, Part: BasePart in pairs(Parts) do
					if Part:IsGrounded() then continue end
					
					local Dist = (MyPosition-Part.Position).Magnitude
					if Dist < NDist or math.random(1, 90) == 1 then
						NearestUnanchoredPart = Part
						NDist = Dist
					end
				end
				
				if NearestUnanchoredPart then
					DoingRandomDirection = false
				end
			end
			
			if NextDirectionTick < os.clock() then
				CurrentRandomDirection = RNG:NextUnitVector()
				NextDirectionTick = os.clock()+0.2
			end
			
			local PositionOffset = Humanoid.MoveDirection*0.5
			if LastVelocity.Magnitude > 5 then
				PositionOffset += LastVelocity.Unit*Vector3.new(0.5, 1, 0.5)
			end
			
			local RandomAngle = CFrame.Angles(0, 0, 0)
			
			if DoingRandomDirection then
				RadiusPart.Color = Color3.new(1, 0, 0)
				PositionOffset = PositionOffset
			elseif Radius >= 0.5 then
				if NearestUnanchoredPart then
					RadiusPart.Color = Color3.new(1, 1, 0)
					NearestUnanchoredPart.AssemblyLinearVelocity = -FlingVelocity
					local GoDir = -(MyPosition-NearestUnanchoredPart.Position)
					PositionOffset = GoDir + (RNG:NextUnitVector()*Vector3.new(1, 0, 1)*2.5)
				end
				if NearestPlayer and NearestPlayer.Character:FindFirstChild("HumanoidRootPart") then
					RadiusPart.Color = Color3.new(0, 1, 0)
					local NCharacter = NearestPlayer.Character
					local NearestPlayerRootPart = NCharacter:FindFirstChild("HumanoidRootPart")
					
					local NPlrVelocity = NearestPlayerRootPart.Velocity
					local Humanoid = NCharacter:FindFirstChildWhichIsA("Humanoid")
					if Humanoid then
						-- Adjusting the velocity to MoveDirection improves latency
						local MoveDir = Humanoid.MoveDirection
						if MoveDir.Magnitude > 0.1 then
							MoveDir = MoveDir.Unit
							NPlrVelocity = (MoveDir * (NPlrVelocity*Vector3.new(1, 0, 1)).Magnitude) + Vector3.new(0, NPlrVelocity.Y, 0)
						end
					end
					
					if NPlrVelocity.Magnitude >= 100 then
						-- Don't try to predict people going super speed...
						NPlrVelocity = Vector3.zero
					end
					
					local PredictStrength = 0.4 + (math.sin(os.clock()*math.pi*3)+1)*0.1
					
					-- Try to predict where the player is going
					local PredictPosition = NearestPlayerRootPart.Position+((NPlrVelocity*PredictStrength)*Vector3.new(1, 0.25, 1))
					
					local PlayerDirection = -(MyPosition-PredictPosition)
					PositionOffset = PlayerDirection + (RNG:NextUnitVector()*Vector3.new(1, 0, 1)*2.5)
					
					if UserSettings():GetService("UserGameSettings").RotationType ~= Enum.RotationType.CameraRelative then
						-- Intense camera flickering happens when shift lock is on (Roblox issue :/)
						RandomAngle = CFrame.Angles(0, math.random()*math.pi*2, 0)
					end
				end
			end
			if LastVelocity.Magnitude <= 4 then
				-- This prevents flickering on the server when standing still.
				-- Although it still might flicker when Enum.RotationType.CameraRelative (aka ShiftLock/Firstperson) is active...
				PositionOffset += Vector3.new(0, AntiFlicker_PosY*0.003, 0)
				AntiFlicker_PosY += 1
				if AntiFlicker_PosY > 10 then
					AntiFlicker_PosY = -10
				end
			end
			
			Humanoid.CameraOffset = -(MyRootPart.CFrame * RandomAngle):ToObjectSpace(CFrame.new(MyPosition+PositionOffset)).Position
			
			if RadiusPart then
				RadiusPart.CFrame = CFrame.new(MyRootPart.Position+Vector3.new(0, -MyRootPart.Size.Y*0.5, 0)) * CFrame.Angles(0, 0, math.pi/2)
			end
			
			MyRootPart.CFrame = (MyRootPart.CFrame + PositionOffset) * RandomAngle
			
			MyRootPart.Velocity = (Direction*28377)+LastVelocity + RNG:NextUnitVector()*2
			MyRootPart.RotVelocity = Vector3.zero
			
			Stepped:Wait()
			MyRootPart.Velocity = LastVelocity
			MyRootPart.RotVelocity = LastRotVelocity
			
			AntiSleepTick += 1
			if AntiSleepTick > 1 then
				AntiSleepTick = 0
			end
			-- This fixes a bug with NextGenerationReplication enabled
			MyRootPart.CFrame = LastRootPartCFrame + Vector3.new(0, if AntiSleepTick == 0 then 0.05 else -0.05, 0)
		end
		
		if GFlingDirectionPart == RadiusPart then
			GFlingDirectionPart = nil
		end
		
		RadiusPart:Destroy()
		RenderStepCON:Disconnect()
		
		Humanoid.CameraOffset = Vector3.zero
	end,
	
	exit = function()
		-- Completely remove the gui and all script connections
		if MyCurrentMountedObject then
			MyCurrentMountedObject.ActuallyStopped = true
		end
		UnmountWithCharacterModel()
		if MyCurrentMountedObject then
			MyCurrentMountedObject.ActuallyStopped = true
			MyCurrentMountedObject:Destroy()
			MyCurrentMountedObject = nil
		end
		if GFlingDirectionPart then
			GFlingDirectionPart:Destroy()
			GFlingDirectionPart = nil
		end
		
		MainScreenGui:Destroy()
		for _, Connection in pairs(SCRIPT_CONNECTIONS) do
			if Connection.Connected then
				Connection:Disconnect()
			end
		end
		table.clear(SCRIPT_CONNECTIONS)
		table.clear(CommandFunctions)
		
		BM_getgenv()[ScriptIdentifier] = nil
	end,
}

CommandFunctions.flingloop   = CommandFunctions.loopfling
CommandFunctions.repeatfling = CommandFunctions.loopfling
CommandFunctions.flingrepeat = CommandFunctions.loopfling

function FixupArgs(Args: {string}): {string}
	local NewArgs = {}
	for i=1, #Args do
		if Args[i] == "" then continue end
		
		local ArgStr = Args[i]
		while string.sub(ArgStr, 1, 1) == "\n" or string.sub(ArgStr, 1, 1) == "\r" do
			ArgStr = string.sub(ArgStr, 2)
		end
		
		if ArgStr ~= "" then
			table.insert(NewArgs, ArgStr)
		end
	end
	
	return NewArgs
end

function ExecuteCommand(CommandString)
	if CommandString == "" then return end
	
	local CommandArgs = string.split(CommandString, " ")
	CommandArgs = FixupArgs(CommandArgs)
	
	local CommandName = CommandArgs[1] or ""
	local CommandNameLower = string.lower(CommandName)
	if CommandName == "" then return end
	
	Notify(">" .. table.concat(CommandArgs, " "))
	
	local F_Command = CommandFunctions[CommandNameLower]
	if F_Command then
		local COPY_CommandArgs = table.clone(CommandArgs)
		table.remove(COPY_CommandArgs, 1)
		
		F_Command(table.unpack(COPY_CommandArgs))
	else
		Notify("Command \"" .. CommandName .. "\" doesn't exist, type cmds for help!")
	end
end

CommandLineTextBox = Instance.new("TextBox")
CommandLineTextBox.Size = UDim2.new(0, 400, 0, 30)
CommandLineTextBox.AutomaticSize = Enum.AutomaticSize.XY
CommandLineTextBox.BackgroundColor3 = Color3.new(0.25, 0.25, 0.25)
CommandLineTextBox.BackgroundTransparency = 0.4
CommandLineTextBox.BorderSizePixel = 4
CommandLineTextBox.BorderColor3 = Color3.new(0.75, 0.75, 0.75)
CommandLineTextBox.TextColor3 = Color3.new(1, 1, 1)
CommandLineTextBox.PlaceholderColor3 = Color3.new(0.75, 0.75, 0.75)
CommandLineTextBox.PlaceholderText = "[BodyMounter]"
if KEYBIND_FocusCommandBar then
	CommandLineTextBox.PlaceholderText ..= " Press \"" .. KEYBIND_FocusCommandBar.Name .. "\" to focus."
end
CommandLineTextBox.Text = ""
CommandLineTextBox.ClearTextOnFocus = false
CommandLineTextBox.AnchorPoint = Vector2.new(0, 1)
CommandLineTextBox.Position = UDim2.new(0, 20, 1, -20)		-- Bottom left
CommandLineTextBox.TextXAlignment = Enum.TextXAlignment.Left
CommandLineTextBox.TextSize = 18

local UIPadding = Instance.new("UIPadding")
UIPadding.PaddingLeft = UDim.new(0, 4)
UIPadding.PaddingRight = UDim.new(0, 4)
UIPadding.Parent = CommandLineTextBox

local UISizeConstraint = Instance.new("UISizeConstraint")
UISizeConstraint.MaxSize = Vector2.new(600, 100)
UISizeConstraint.Parent = CommandLineTextBox

CommandLineTextBox.Parent = MainScreenGui

local TextFocusedConnection = CommandLineTextBox.Focused:Connect(function ()
	CMDBar_IsFocused = true
	for _, TextUI in pairs(NotificationUIs) do
		TextUI.Visible = true
	end
	if HideCommandBarUntilFocus then
		CommandLineTextBox.Visible = true
	end
	CommandLineTextBox.BorderColor3 = Color3.new(0.2, 1, 1)
end)

local TextFocusLostConnection = CommandLineTextBox.FocusLost:Connect(function (WasEnter)
	CMDBar_IsFocused = false
	for _, TextUI in pairs(NotificationUIs) do
		TextUI.Visible = false
	end
	if HideCommandBarUntilFocus then
		CommandLineTextBox.Visible = false
	end
	CommandLineTextBox.BorderColor3 = Color3.new(0.75, 0.75, 0.75)
	if WasEnter then
		task.spawn(ExecuteCommand, CommandLineTextBox.Text)
		CommandLineTextBox.Text = ""
	end
end)

local InputBeganConnection = UserInputService.InputBegan:Connect(function (InputObject, Prs)
	if Prs then return end
	if InputObject.KeyCode == KEYBIND_FocusCommandBar then
		task.wait()
		CommandLineTextBox:CaptureFocus()
	end
	
	if InputObject.KeyCode == KEYBIND_ExecuteStopCommand then
		ExecuteCommand("stop")
	end
end)

table.insert(SCRIPT_CONNECTIONS, TextFocusedConnection)
table.insert(SCRIPT_CONNECTIONS, TextFocusLostConnection)
table.insert(SCRIPT_CONNECTIONS, InputBeganConnection)

Beschreibung

This is a command based script (similar to IY). This script is great for trolling streamers or flinging an entire server! **WORKS WITH R6 & R15!** Example commands: - fling all **Will fling everyone in the server if collisions are enabled!** - loopfling all **Will fling everyone continuously until the 'stop' command is typed** - loopfling Hyper **Will continuously fling anyone with the name 'Hyper' until the 'stop' command is typed** - flingaura 20 **Will fling anyone within a 20 stud radius of your character** - headsit Hyper **Will sit on the head of the first player named 'Hyper'** - backsit @Hyper **Will sit on the back of the first player named 'Hyper'; Ignores display names** I made this script a long while ago for private use. But now since other people have discovered the "mounting" method, I have decided to fix up the script and release it. (This script does not use raknet. I have no idea if other scripts use raknet or not... I haven't exploited since Synapse left 💀) Unedited video showing the playerwalk + fling command: [https://youtu.be/KB1lfVh-aMQ](https://youtu.be/KB1lfVh-aMQ) (ignore the audio...) List of commands ***(More details for each command is included in the script!)***: - fling - loopfling - flingaura - - headsit, facesit, backsit, armsit, handsit. rootsit - standon - orbit, sphereorbit - floor - fan - merge - playerwalk - antifling \*BUGGY, DON'T USE!\* - - stop - exit

Kommentare (0)

Melde an, um an der Unterhaltung teilzunehmen

  • Sei der Erste, der kommentiert.

Häufig gestellte Fragen

Wie verwende ich den BodyMounter - Fling players/ Mount players/ Fling aura + more trolling commands [Open Source]-Script?
Kopiere den obigen Code, öffne deinen Roblox-Executor, füge den Code ein und drücke Ausführen, während du im Spiel bist. Die Funktionen werden sofort aktiviert, sobald der Script läuft.
Ist der BodyMounter - Fling players/ Mount players/ Fling aura + more trolling commands [Open Source]-Script kostenlos?
Ja. Dieser Script ist völlig kostenlos zu kopieren und zu verwenden. Wenn er ein Schlüsselsystem nutzt, folge dem Link "Schlüssel erhalten", um ihn kostenlos freizuschalten.
Ist der BodyMounter - Fling players/ Mount players/ Fling aura + more trolling commands [Open Source]-Script sicher zu verwenden?
Der vollständige Quellcode wird auf dieser Seite angezeigt, damit du genau lesen kannst, was er tut, bevor du ihn ausführst. Verwende immer einen vertrauenswürdigen Executor, und denke daran, dass die Verwendung von Scripts gegen die Nutzungsbedingungen von Roblox verstößt — verwende sie auf eigene Gefahr.
Welcher Executor funktioniert mit BodyMounter - Fling players/ Mount players/ Fling aura + more trolling commands [Open Source]?
Dieser Script funktioniert mit den meisten beliebten Roblox-Executoren. Besuche unsere Executor-Seite, um einen vertrauenswürdigen kostenlosen oder kostenpflichtigen Executor für dein Gerät zu finden.
BodyMounter - Fling players/ Mount players/ Fling aura + more trolling commands [Open Source] | BloxScripter