-- ClientTeleportAndCosmetics.lua (LocalScript) -- Local-only GUI with: Teleport random, Teleport to player, Spam-teleport toggle, HeadSit (local), -- Orbit cosmetic parts (local), Minimize + Close. -- WARNING: All actions only move your own character locally. Do NOT attempt to use this to affect others. local Players = game:GetService("Players") local RunService = game:GetService("RunService") local player = Players.LocalPlayer -- track character local char = player.Character or player.CharacterAdded:Wait() player.CharacterAdded:Connect(function(c) char = c end) -- ---------- GUI ---------- local screenGui = Instance.new("ScreenGui") screenGui.Name = "LocalTeleportCosmetics" screenGui.ResetOnSpawn = false screenGui.Parent = player:WaitForChild("PlayerGui") local frame = Instance.new("Frame") frame.Name = "Main" frame.Size = UDim2.new(0, 560, 0, 220) -- wide, not tall frame.Position = UDim2.new(0, 30, 0, 60) frame.BackgroundColor3 = Color3.fromRGB(40, 120, 40) frame.BorderSizePixel = 0 frame.Active = true frame.Draggable = true frame.Parent = screenGui local frameCorner = Instance.new("UICorner", frame) frameCorner.CornerRadius = UDim.new(0, 10) -- Top bar local top = Instance.new("Frame", frame) top.Size = UDim2.new(1, 0, 0, 36) top.Position = UDim2.new(0,0,0,0) top.BackgroundTransparency = 1 local title = Instance.new("TextLabel", top) title.Size = UDim2.new(0.6, 0, 1, 0) title.Position = UDim2.new(0,12,0,0) title.BackgroundTransparency = 1 title.Text = "Teleport & Cosy" title.Font = Enum.Font.GothamBold title.TextSize = 20 title.TextColor3 = Color3.fromRGB(255,255,255) title.TextXAlignment = Enum.TextXAlignment.Left -- Credits small label local credits = Instance.new("TextLabel", top) credits.Size = UDim2.new(0.25, 0, 1, 0) credits.Position = UDim2.new(0.65, 0, 0, 0) credits.BackgroundTransparency = 1 credits.Font = Enum.Font.Gotham credits.TextSize = 14 credits.TextColor3 = Color3.fromRGB(230,230,230) credits.Text = "made by blah20180" credits.TextXAlignment = Enum.TextXAlignment.Center -- Minimize and Close local minBtn = Instance.new("TextButton", top) minBtn.Size = UDim2.new(0, 36, 0, 28) minBtn.Position = UDim2.new(1, -90, 0, 4) minBtn.Text = "_" minBtn.Font = Enum.Font.GothamBold minBtn.TextSize = 20 minBtn.BackgroundColor3 = Color3.fromRGB(100,100,100) minBtn.TextColor3 = Color3.fromRGB(255,255,255) minBtn.AutoButtonColor = true local minCorner = Instance.new("UICorner", minBtn); minCorner.CornerRadius = UDim.new(0,6) local closeBtn = Instance.new("TextButton", top) closeBtn.Size = UDim2.new(0, 36, 0, 28) closeBtn.Position = UDim2.new(1, -44, 0, 4) closeBtn.Text = "X" closeBtn.Font = Enum.Font.GothamBold closeBtn.TextSize = 20 closeBtn.BackgroundColor3 = Color3.fromRGB(160,40,40) closeBtn.TextColor3 = Color3.fromRGB(255,255,255) local closeCorner = Instance.new("UICorner", closeBtn); closeCorner.CornerRadius = UDim.new(0,6) closeBtn.MouseButton1Click:Connect(function() screenGui:Destroy() end) local content = Instance.new("Frame", frame) content.Size = UDim2.new(1, -24, 1, -52) content.Position = UDim2.new(0, 12, 0, 40) content.BackgroundTransparency = 1 -- layout: we'll put controls in two columns local leftX = 6 local rightX = 290 local row = 6 local function place(obj, col) if col == "right" then obj.Position = UDim2.new(0, rightX, 0, row) else obj.Position = UDim2.new(0, leftX, 0, row) end row = row + 46 end local function makeButton(text) local b = Instance.new("TextButton") b.Size = UDim2.new(0, 260, 0, 40) b.BackgroundColor3 = Color3.fromRGB(30,130,30) b.Font = Enum.Font.Gotham b.TextColor3 = Color3.fromRGB(255,255,255) b.TextSize = 16 b.Text = text local c = Instance.new("UICorner", b); c.CornerRadius = UDim.new(0,6) b.Parent = content return b end local function makeTextbox(placeholder) local t = Instance.new("TextBox") t.Size = UDim2.new(0, 260, 0, 36) t.BackgroundColor3 = Color3.fromRGB(24,120,24) t.Font = Enum.Font.Gotham t.TextSize = 16 t.PlaceholderText = placeholder t.TextColor3 = Color3.fromRGB(255,255,255) local c = Instance.new("UICorner", t); c.CornerRadius = UDim.new(0,6) t.Parent = content return t end -- Buttons & boxes local teleportRandomBtn = makeButton("Teleport to Random Player (local)") place(teleportRandomBtn, "left") local teleportToBtn = makeButton("Teleport to Player (single, local)") place(teleportToBtn, "left") local teleportText = makeTextbox("Target player username") teleportText.Position = UDim2.new(0, leftX, 0, row); row = row + 46 local spamToggleBtn = makeButton("Toggle Spam-Teleport to Player") place(spamToggleBtn, "left") local headsitBtn = makeButton("HeadSit (local)") place(headsitBtn, "right") local headsitText = makeTextbox("Target player username for HeadSit") headsitText.Position = UDim2.new(0, rightX, 0, row); row = row + 46 local orbitToggleBtn = makeButton("Toggle Orbit Visuals Around Me") place(orbitToggleBtn, "right") local orbitCountBox = makeTextbox("Orbit count (default 5)") orbitCountBox.Position = UDim2.new(0, rightX, 0, row); row = row + 46 -- Small info label local info = Instance.new("TextLabel", content) info.Size = UDim2.new(1, -12, 0, 40) info.Position = UDim2.new(0, 6, 0, row) info.BackgroundTransparency = 1 info.Font = Enum.Font.Gotham info.TextSize = 13 info.TextColor3 = Color3.fromRGB(230,230,230) info.Text = "All effects are local to your client. Do not use to harass others." row = row + 46 -- Minimize behavior local minimized = false minBtn.MouseButton1Click:Connect(function() minimized = not minimized for _, child in ipairs(content:GetChildren()) do child.Visible = not minimized end frame.Size = minimized and UDim2.new(0, 560, 0, 40) or UDim2.new(0, 560, 0, 220) end) -- ---------- Functionality ---------- local function findPlayerByName(name) if not name or name == "" then return nil end -- try exact match first local p = Players:FindFirstChild(name) if p then return p end -- try case-insensitive match local lname = name:lower() for _, pl in ipairs(Players:GetPlayers()) do if pl.Name:lower():find(lname, 1, true) or (pl.DisplayName and pl.DisplayName:lower():find(lname,1,true)) then return pl end end return nil end -- Teleport local player to another player's HRP (local only) local function teleportLocalToPlayer(targetPlayer) if not targetPlayer or not targetPlayer.Character then return false end local targetHRP = targetPlayer.Character:FindFirstChild("HumanoidRootPart") if not targetHRP then return false end -- Ensure our character exists and has HRP char = player.Character if not char then return false end local myHRP = char:FindFirstChild("HumanoidRootPart") if not myHRP then return false end -- Move local player slightly above the target myHRP.CFrame = targetHRP.CFrame * CFrame.new(0, 3, 0) return true end -- Teleport random player teleportRandomBtn.MouseButton1Click:Connect(function() local list = Players:GetPlayers() if #list <= 1 then return end -- choose random other player local choices = {} for _, p in ipairs(list) do if p ~= player then table.insert(choices, p) end end if #choices == 0 then return end local target = choices[math.random(1, #choices)] local ok = teleportLocalToPlayer(target) if not ok then -- optional local feedback warn("Teleport failed.") end end) -- Teleport to player single teleportToBtn.MouseButton1Click:Connect(function() local target = findPlayerByName(teleportText.Text) if not target then warn("Player not found: "..tostring(teleportText.Text)) return end teleportLocalToPlayer(target) end) -- Spam teleport toggle (teleport YOUR local character repeatedly to target) local spamTeleporting = false spamToggleBtn.MouseButton1Click:Connect(function() spamTeleporting = not spamTeleporting spamToggleBtn.Text = spamTeleporting and "Stop Spam-Teleport" or "Toggle Spam-Teleport to Player" end) -- HeadSit: continuously position your HRP on target's head (local-only) local headSitting = false local headTarget = nil headsitBtn.MouseButton1Click:Connect(function() local target = findPlayerByName(headsitText.Text) if not target then warn("Target for HeadSit not found.") return end if not target.Character or not target.Character:FindFirstChild("Head") then warn("Target has no head.") return end headSitting = not headSitting headTarget = headSitting and target or nil headsitBtn.Text = headSitting and "Stop HeadSit" or "HeadSit (local)" end) -- Orbit visuals: create client-side decorative parts that orbit your HRP local orbiting = false local orbitParts = {} orbitToggleBtn.MouseButton1Click:Connect(function() orbiting = not orbiting orbitToggleBtn.Text = orbiting and "Stop Orbit Visuals" or "Toggle Orbit Visuals Around Me" if orbiting then local count = math.clamp(tonumber(orbitCountBox.Text) or 5, 1, 20) -- create orbit parts (these are regular Parts parented to workspace; they may replicate in some environments) for i = 1, count do local p = Instance.new("Part") p.Size = Vector3.new(0.8,0.8,0.8) p.Anchored = true p.CanCollide = false p.BrickColor = BrickColor.Random() p.Material = Enum.Material.Neon p.Name = "LocalOrbitPart_"..i p.Parent = workspace table.insert(orbitParts, p) end else for _, p in ipairs(orbitParts) do if p and p.Parent then p:Destroy() end end orbitParts = {} end end) -- Main render loop for spam teleport, headsit, and orbit local t = 0 RunService.RenderStepped:Connect(function(dt) -- spam teleport behavior if spamTeleporting then local target = findPlayerByName(teleportText.Text) if target and target.Character and target.Character:FindFirstChild("HumanoidRootPart") and char and char:FindFirstChild("HumanoidRootPart") then -- teleport frequently but with a small delay between teleports (we are inside RenderStepped so do every frame; -- to avoid extreme update rates, teleport only every ~0.08s using accumulator) -- We'll implement via simple time accumulator: if not script:FindFirstChild("__spamTimer") then local marker = Instance.new("NumberValue"); marker.Name = "__spamTimer"; marker.Parent = script marker.Value = 0 end local marker = script:FindFirstChild("__spamTimer") marker.Value = marker.Value + dt if marker.Value >= 0.08 then marker.Value = 0 local tgtHRP = target.Character.HumanoidRootPart char.HumanoidRootPart.CFrame = tgtHRP.CFrame * CFrame.new(0, 3, 0) end end end -- HeadSit local positioning if headSitting and headTarget and headTarget.Character and headTarget.Character:FindFirstChild("Head") and char and char:FindFirstChild("HumanoidRootPart") then local head = headTarget.Character.Head -- place our HRP slightly above the head (visual sitting) local sitCFrame = head.CFrame * CFrame.new(0, 0.6, 0) * CFrame.Angles(0, math.rad(180), 0) char.HumanoidRootPart.CFrame = sitCFrame -- Optionally set Humanoid.PlatformStand = true for better visual stability (local-only) local humanoid = char:FindFirstChildOfClass("Humanoid") if humanoid then humanoid.PlatformStand = true end else -- restore PlatformStand when not head-sitting local humanoid = char:FindFirstChildOfClass("Humanoid") if humanoid and humanoid.PlatformStand then humanoid.PlatformStand = false end end -- Orbit visuals update if orbiting and #orbitParts > 0 and char and char:FindFirstChild("HumanoidRootPart") then t = t + dt * 1.5 local center = char.HumanoidRootPart.Position local n = #orbitParts local radius = 4 for i, p in ipairs(orbitParts) do local angle = t + (i-1)*(2*math.pi/n) local offset = Vector3.new(math.cos(angle)*radius, 1.6, math.sin(angle)*radius) p.Position = center + offset p.CFrame = CFrame.new(p.Position) * CFrame.Angles(0, angle, 0) end end end) -- Clean up created objects when player leaves or script is removed player.AncestryChanged:Connect(function(_, parent) if not parent then for _, p in ipairs(orbitParts) do if p and p.Parent then p:Destroy() end end orbitParts = {} end end) -- Final note printed for clarity print("Local teleport & cosmetics GUI loaded (client-only). Use responsibly.")