Hat orbit Modded
Key RequiredUniversal

Hat orbit Modded

Universal ScriptAstellAstell 751 views 220 executesUpdated Dec 22, 2025
Unrated
00
Lua Script•210 lines (7473 chars)
--[[
	Commands:
	
	.orbit playername   - Make your hats orbit a specific player
	.mode number        - Switch between several modes (1–11)
	.speed number       - Adjust how fast the hats orbit
	.offset number      - Set the orbit radius
	.angular X Y Z      - Set the spinning angular velocity
	.toggle             - Turn orbit on or off
	.height number      - Set vertical height of hats
	.rainbow on/off     - Enable or disable rainbow hat colors
	.reset              - Reset hats to your own character
	.spread number      - Adjust angle spread between hats
	.randommode         - Automatically switch modes randomly
	.stoprandom         - Stop automatic random mode switching
	]]


local G2L = {};

G2L["1"] = Instance.new("ScreenGui", game:GetService("Players").LocalPlayer:WaitForChild("PlayerGui"));
G2L["1"]["ZIndexBehavior"] = Enum.ZIndexBehavior.Sibling;
G2L["1"]["ResetOnSpawn"] = false;


G2L["2"] = Instance.new("LocalScript", G2L["1"]);


G2L["3"] = Instance.new("TextLabel", G2L["1"]);
G2L["3"]["BorderSizePixel"] = 0;
G2L["3"]["TextSize"] = 14;
G2L["3"]["TextTransparency"] = 0.51;
G2L["3"]["BackgroundColor3"] = Color3.fromRGB(255, 255, 255);
G2L["3"]["FontFace"] = Font.new([[rbxasset://fonts/families/SourceSansPro.json]], Enum.FontWeight.Regular, Enum.FontStyle.Normal);
G2L["3"]["TextColor3"] = Color3.fromRGB(255, 255, 255);
G2L["3"]["BackgroundTransparency"] = 1;
G2L["3"]["Size"] = UDim2.new(0, 200, 0, 50);
G2L["3"]["BorderColor3"] = Color3.fromRGB(0, 0, 0);
G2L["3"]["Text"] = [[Modded By OrangyGuicy]];
G2L["3"]["Position"] = UDim2.new(0.47743, 0, 0.88271, 0);

local function C_2()
local script = G2L["2"];

	local Players = game:GetService("Players")
	local RunService = game:GetService("RunService")
	local plr = Players.LocalPlayer
	
	local chr = plr.Character or plr.CharacterAdded:Wait()
	while not chr:FindFirstChild("HumanoidRootPart") or not chr:FindFirstChild("Humanoid") do
		chr = plr.Character or plr.CharacterAdded:Wait()
		wait()
	end
	local hum = chr:WaitForChild("Humanoid")
	
	local mov, mov2 = {}, {}
	local offset, speed, height = 10, 0.5, 0
	local angular = Vector3.new(0,0,0)
	local toggle, rainbow = true, false
	local followTarget = chr
	local spread, mode = 360, 1
	local hoverHeight, smoothSpeed = 8, 0.4
	
	local randomModeActive = false
	
	
	local function ftp(str)
		local pt = {}
		if str ~= "me" and str ~= "random" then
			for _, v in pairs(Players:GetPlayers()) do
				if v.Name:lower():find(str:lower()) then
					table.insert(pt, v)
				end
			end
		elseif str == "me" then
			table.insert(pt, plr)
		elseif str == "random" then
			table.insert(pt, Players:GetPlayers()[math.random(1, #Players:GetPlayers())])
		end
		return pt
	end
	
	
	for _, v in pairs(hum:GetAccessories()) do
		local b = v.Handle
		b.Anchored = false
		b.CanCollide = false
		b.Massless = true
		b.CustomPhysicalProperties = PhysicalProperties.new(0,0,0,0,0)
		b:BreakJoints()
	
		for _, k in pairs(v:GetChildren()) do
			if not k:IsA("SpecialMesh") and not k:IsA("Part") then
				k:Destroy()
			end
		end
	
		local a0 = Instance.new("Attachment", b)
		local a1 = Instance.new("Attachment", chr.Head)
	
		local align = Instance.new("AlignPosition", b)
		align.Attachment0 = a0
		align.Attachment1 = a1
		align.MaxForce = 1e7
		align.MaxVelocity = math.huge
		align.Responsiveness = 200
		align.RigidityEnabled = true
	
		local still = Instance.new("BodyAngularVelocity", b)
		still.MaxTorque = Vector3.new(math.huge, math.huge, math.huge)
		still.AngularVelocity = Vector3.new(0,0,0)
	
		table.insert(mov, a1)
		table.insert(mov2, still)
	end
	
	
	RunService.RenderStepped:Connect(function()
		if not toggle then return end
	
		for i, v in pairs(mov) do
			local indexAngle = (i-1)*(spread/#mov)
			local fixedHeight = height
			local orbitPos
	
	
			if mode == 1 then
				orbitPos = followTarget.HumanoidRootPart.Position + Vector3.new(math.cos(tick()*speed + indexAngle)*offset, fixedHeight, math.sin(tick()*speed + indexAngle)*offset)
			elseif mode == 2 then
				orbitPos = followTarget.HumanoidRootPart.Position + Vector3.new(offset, fixedHeight, offset)
			elseif mode == 3 then
				orbitPos = followTarget.HumanoidRootPart.Position + Vector3.new(math.sin(tick()*speed + indexAngle)*offset, fixedHeight, math.sin(tick()*speed + indexAngle)*offset)
			elseif mode == 4 then
				orbitPos = followTarget.HumanoidRootPart.Position + Vector3.new(math.cos(tick()*i)*offset, fixedHeight, math.sin(tick()*i)*offset)
			elseif mode == 5 then
				orbitPos = followTarget.HumanoidRootPart.Position + Vector3.new(math.random(-offset, offset), fixedHeight, math.random(-offset, offset))
			elseif mode == 6 then
				orbitPos = followTarget.HumanoidRootPart.Position + Vector3.new(indexAngle, fixedHeight, 0)
			elseif mode == 7 then
				orbitPos = followTarget.HumanoidRootPart.Position + Vector3.new(0, fixedHeight, indexAngle)
			elseif mode == 8 then
				orbitPos = followTarget.HumanoidRootPart.Position + Vector3.new(math.cos(tick()*i)*offset*2, fixedHeight, math.sin(tick()*i)*offset*2)
			elseif mode == 9 then
				orbitPos = followTarget.HumanoidRootPart.Position + Vector3.new(math.sin(tick() + i)*offset, fixedHeight, math.cos(tick() + i)*offset)
			elseif mode == 10 then
				orbitPos = followTarget.HumanoidRootPart.Position + Vector3.new(0, fixedHeight + 5, 0)
			elseif mode == 11 then
				orbitPos = followTarget.HumanoidRootPart.Position + Vector3.new(plr:GetMouse().Hit.p.X, plr:GetMouse().Hit.p.Y + 5, plr:GetMouse().Hit.p.Z)
			else
				orbitPos = followTarget.HumanoidRootPart.Position + Vector3.new(math.cos(tick()*speed + indexAngle)*offset, fixedHeight, math.sin(tick()*speed + indexAngle)*offset)
			end
	
	
			local currentPos = followTarget.HumanoidRootPart.CFrame:ToWorldSpace(CFrame.new(v.Position)).Position
			local finalPos = currentPos:Lerp(orbitPos, 0.4)
			v.Position = followTarget.HumanoidRootPart.CFrame:ToObjectSpace(CFrame.new(finalPos)).Position
	
	
			mov2[i].AngularVelocity = angular
		end
	
	
		if rainbow then
			for _, acc in pairs(hum:GetAccessories()) do
				if acc.Handle:IsA("BasePart") then
					acc.Handle.Color = Color3.fromHSV(tick()%1,1,1)
				end
			end
		end
	end)
	
	
	plr.Chatted:Connect(function(msg)
		local args = msg:split(" ")
		local cmd = args[1]:lower()
	
		if cmd == ".orbit" then
			local targets = ftp(args[2])
			if targets[1] then followTarget = targets[1].Character end
		elseif cmd == ".speed" then speed = tonumber(args[2]) or speed
		elseif cmd == ".mode" then mode = tonumber(args[2]) or 1
		elseif cmd == ".offset" then offset = tonumber(args[2]) or offset
		elseif cmd == ".angular" or cmd == ".spin" then
			angular = Vector3.new(tonumber(args[2]) or 0, tonumber(args[3]) or 0, tonumber(args[4]) or 0)
		elseif cmd == ".toggle" then toggle = not toggle
		elseif cmd == ".height" then height = tonumber(args[2]) or height
		elseif cmd == ".rainbow" then rainbow = args[2] == "on"
		elseif cmd == ".reset" then
			followTarget = chr
			for _, v in pairs(mov) do v.Parent = chr.Head; v.Position = Vector3.new(0,0,0) end
		elseif cmd == ".spread" then spread = tonumber(args[2]) or spread
		elseif cmd == ".randommode" then
			randomModeActive = true
			spawn(function()
				while randomModeActive do
					mode = math.random(1, 11)
					print("Random mode switched to:", mode)
					wait(0.5) 
				end
			end)
		elseif cmd == ".stoprandom" then
			randomModeActive = false
			print("Random mode deactivated")
		end
	end)
	
end;
task.spawn(C_2);

return G2L["1"], require;

Features & Information

i hope u guys like it. :3

Community Comments (1)

MissksjMissksjMay 26, 2026

Client sided

More Scripts for Universal Scripts