跳至內容
可用

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

CLclarkdevlinorg1 次瀏覽Universal2026年7月26日
分享
BodyMounter - Fling players/ Mount players/ Fling aura + more trolling commands [Open Source]

腳本程式碼

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)

描述

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

評論 (0)

登入以參與討論

  • 成為第一個評論的人。

常見問題

如何使用 BodyMounter - Fling players/ Mount players/ Fling aura + more trolling commands [Open Source] 腳本?
複製上方的腳本程式碼,開啟你的 Roblox 執行器,貼上程式碼,然後在遊戲中點擊執行。腳本執行後功能會立即啟用。
BodyMounter - Fling players/ Mount players/ Fling aura + more trolling commands [Open Source] 腳本免費嗎?
是的。此腳本免費複製和使用。如果使用金鑰系統,請透過「獲取金鑰」連結免費解鎖。
使用 BodyMounter - Fling players/ Mount players/ Fling aura + more trolling commands [Open Source] 腳本安全嗎?
完整原始碼顯示在此頁面上,讓你在執行前準確了解其功能。請始終使用可信的執行器,並記住使用腳本違反 Roblox 服務條款,風險自負。
哪個執行器相容 BodyMounter - Fling players/ Mount players/ Fling aura + more trolling commands [Open Source]?
此腳本相容大多數熱門 Roblox 執行器。查看我們的執行器頁面,為你的裝置找到可信的免費或付費執行器。
BodyMounter - Fling players/ Mount players/ Fling aura + more trolling commands [Open Source] | BloxScripter