local Players = game:GetService("Players") local player = Players.LocalPlayer local TP_INTERVAL = 5 -- segundos local Spawn1 = workspace:WaitForChild("Spawn1") local Spawn2 = workspace:WaitForChild("Spawn2") -- Esperar personaje local function getCharacter() return player.Character or player.CharacterAdded:Wait() end -- Quitar colisión a un modelo local function disableCollision(model) for _, obj in ipairs(model:GetDescendants()) do if obj:IsA("BasePart") then obj.CanCollide = false end end end -- Centro real del modelo local function getModelCenter(model) if model.PrimaryPart then return model.PrimaryPart.CFrame end for _, obj in ipairs(model:GetDescendants()) do if obj:IsA("BasePart") then return obj.CFrame end end return nil end -- Ver si el jugador está dentro de un Spawn local function isInsideSpawn(hrp, spawnModel) local cf, size = spawnModel:GetBoundingBox() local relative = cf:PointToObjectSpace(hrp.Position) return math.abs(relative.X) <= size.X/2 and math.abs(relative.Y) <= size.Y/2 and math.abs(relative.Z) <= size.Z/2 end -- Obtener Greens dentro de un Spawn local function getGreensFromSpawn(spawnModel) local greens = {} for _, obj in ipairs(spawnModel:GetDescendants()) do if obj:IsA("Model") and obj.Name == "Green" then table.insert(greens, obj) end end return greens end -- Loop principal task.spawn(function() local character = getCharacter() local hrp = character:WaitForChild("HumanoidRootPart") while true do local targetGreens = nil -- Detectar en qué Spawn está el jugador if isInsideSpawn(hrp, Spawn1) then targetGreens = getGreensFromSpawn(Spawn2) elseif isInsideSpawn(hrp, Spawn2) then targetGreens = getGreensFromSpawn(Spawn1) end -- TP si hay Greens válidos if targetGreens and #targetGreens > 0 then local green = targetGreens[math.random(1, #targetGreens)] if green and green.Parent then disableCollision(green) local centerCF = getModelCenter(green) if centerCF then hrp.CFrame = centerCF * CFrame.new(0, 1, 0) end end end task.wait(TP_INTERVAL) end end)