local Players = game:GetService("Players") local RunService = game:GetService("RunService") local player = Players.LocalPlayer local ownerId = put ur main account id local altList = {alt account's id} local isOwner = (player.UserId == ownerId) local isAlt = table.find(altList, player.UserId) ~= nil local whitelist = {} -- [userid] = true local currentTarget = ownerId local orbitLoop, orbitCo = false, nil local orbitSpeed = 1 local orbitHeight = 5 local orbitRadius = 5 local insaneOrbit = false local doRespawnTeleport = false local autospawnEnabled = false local lastPosition = nil -- ▶️ Utility: parse "-cmd arg" local function parse(msg) return msg:match("^%-(%w+)%s*(.*)") end local function isWhitelisted(id) return whitelist[id] end local function canControl(id) return id == ownerId or isWhitelisted(id) end local function tpToTarget(offset) local char = player.Character local target = Players:GetPlayerByUserId(currentTarget) if char and target and target.Character then local root = char:FindFirstChild("HumanoidRootPart") local troot = target.Character:FindFirstChild("HumanoidRootPart") if root and troot then root.CFrame = troot.CFrame * (offset or CFrame.new()) end end end local function startOrbitLoop() if orbitLoop or not isAlt then return end orbitLoop = true orbitCo = coroutine.create(function() local t = 0 while orbitLoop do t = t + RunService.Heartbeat:Wait() * orbitSpeed local angle = t local h = insaneOrbit and (math.sin(t * 2) * orbitHeight) or orbitHeight local r = insaneOrbit and (orbitRadius + math.sin(t * 3)) or orbitRadius local x = math.cos(angle) * r local z = math.sin(angle) * r tpToTarget(CFrame.new(x, h, z)) end end) coroutine.resume(orbitCo) end local function stopOrbitLoop() orbitLoop = false insaneOrbit = false end player.CharacterRemoving:Connect(function(char) if char then local root = char:FindFirstChild("HumanoidRootPart") if root then lastPosition = root.CFrame end end if autospawnEnabled or doRespawnTeleport then player:LoadCharacter() end end) player.CharacterAdded:Connect(function(char) if autospawnEnabled and lastPosition then wait(0.5) local r = char:WaitForChild("HumanoidRootPart") r.CFrame = lastPosition end if doRespawnTeleport then wait(0.5) tpToTarget() doRespawnTeleport = false end end) local function listCommands() local cmds = { "-test", "-tpall", "-side", "-stopside", "-orbit [speed]", "-low", "-up", "-stoporbit", "-orbitsane", "-re", "-as", "-leave", "-listcommands", "-whitelist [username]", -- extra fun commands: "-dance", "-jump", "-wave", "-sit", "-spin", "-freeze", "-unfreeze", "-flash", "-follow", "-bring" } if isAlt then for _, c in ipairs(cmds) do player:Chat(c) end end end local danceAnim = Instance.new("Animation"); danceAnim.AnimationId = "rbxassetid://241286613" local waveAnim = Instance.new("Animation"); waveAnim.AnimationId = "rbxassetid://495327236" local function onChatted(playerObj, msg) local speakerId = playerObj.UserId local cmd, arg = parse(msg) if not cmd or not canControl(speakerId) then return end currentTarget = isWhitelisted(speakerId) and speakerId or ownerId if cmd == "listcommands" then listCommands() elseif cmd == "whitelist" and speakerId == ownerId then local success, id = pcall(Players.GetUserIdFromNameAsync, Players, arg) if success and id then whitelist[id] = true; print("Whitelisted:", arg, id) end elseif cmd == "test" then if isOwner then print("himain") elseif isAlt then print("hialt") end elseif cmd == "tpall" then if isAlt then tpToTarget() end elseif cmd == "side" then if isAlt then local idx = table.find(altList, player.UserId) local offset = CFrame.new((idx == 1 and -5 or 5), 0, 0) tpToTarget(offset) end elseif cmd == "stopside" then if isAlt then tpToTarget() end elseif cmd == "orbit" then local s = tonumber(arg) if s then orbitSpeed = s end if isAlt then startOrbitLoop() end elseif cmd == "stoporbit" then if isAlt then stopOrbitLoop() end elseif cmd == "low" then orbitHeight = orbitHeight - 2; print("Orbit height:", orbitHeight) elseif cmd == "up" then orbitHeight = orbitHeight + 2; print("Orbit height:", orbitHeight) elseif cmd == "orbitsane" then if isAlt then insaneOrbit = true; startOrbitLoop() end elseif cmd == "re" then if isOwner or isAlt then doRespawnTeleport = true end elseif cmd == "as" and isOwner then autospawnEnabled = not autospawnEnabled; print("Autospawn:", autospawnEnabled) elseif cmd == "leave" then if isAlt then player:Kick("Left by owner command") end -- extra commands elseif cmd == "dance" and isAlt then local track = player.Character.Humanoid:LoadAnimation(danceAnim); track:Play() elseif cmd == "jump" and isAlt then player.Character.Humanoid.Jump = true elseif cmd == "wave" and isAlt then local track = player.Character.Humanoid:LoadAnimation(waveAnim); track:Play() elseif cmd == "sit" and isAlt then player.Character.Humanoid.Sit = true elseif cmd == "spin" and isAlt then spawn(function() local root = player.Character.HumanoidRootPart for i=1,360 do root.CFrame = root.CFrame * CFrame.Angles(0,math.rad(1),0); wait(0.01) end end) elseif cmd == "freeze" and isAlt then player.Character.Humanoid.WalkSpeed = 0 elseif cmd == "unfreeze" and isAlt then player.Character.Humanoid.WalkSpeed = 16 elseif cmd == "flash" and isAlt then spawn(function() local parts = player.Character:GetDescendants() for i=1,3 do for _,p in ipairs(parts) do if p:IsA("BasePart") then p.Transparency = 0.5; wait(0.05); p.Transparency = 0 end end end end) elseif cmd == "follow" and isAlt then spawn(function() while isAlt do tpToTarget(CFrame.new()); wait(0.5) end end) elseif cmd == "bring" and (isAlt or isOwner) then -- bring all players to target for _,pl in ipairs(Players:GetPlayers()) do if pl.Character and pl.Character:FindFirstChild("HumanoidRootPart") then pl.Character.HumanoidRootPart.CFrame = Players:GetPlayerByUserId(currentTarget).Character.HumanoidRootPart.CFrame end end end end for _, pl in ipairs(Players:GetPlayers()) do pl.Chatted:Connect(function(m) onChatted(pl, m) end) end Players.PlayerAdded:Connect(function(pl) pl.Chatted:Connect(function(m) onChatted(pl, m) end) end)