local Players = game:GetService("Players") local ReplicatedStorage = game:GetService("ReplicatedStorage") local RunService = game:GetService("RunService") local LocalPlayer = Players.LocalPlayer local PlaceBlock = ReplicatedStorage:WaitForChild("Remotes"):WaitForChild("PlaceBlock") local BLOCK = "Oak Planks" local INNER_RADIUS = 3 local WALL = 2 local HEIGHT = 6 local UNDER_OFFSET = 20 local BUILD_WAIT = 5 local function place(pos) PlaceBlock:FireServer(workspace["1Grass"], Enum.NormalId.Top, pos, BLOCK) end local function buildCage(targetRoot) local cx = math.floor(targetRoot.Position.X) local cz = math.floor(targetRoot.Position.Z) local baseY = math.floor(targetRoot.Position.Y - 3) local outer = INNER_RADIUS + WALL for y = 0, HEIGHT - 1 do for x = -outer, outer do for z = -outer, outer do local inside = x > -INNER_RADIUS and x < INNER_RADIUS and z > -INNER_RADIUS and z < INNER_RADIUS and y > 0 and y < HEIGHT - 1 if not inside then place(Vector3.new(cx + x, baseY + y, cz + z)) end end end task.wait() end end local function lockLocalPlayerUnder(targetRoot) local char = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait() local root = char:WaitForChild("HumanoidRootPart") local savedCFrame = root.CFrame root.Anchored = true root.CFrame = targetRoot.CFrame * CFrame.new(0, -UNDER_OFFSET, 0) local savedCameraType = workspace.CurrentCamera.CameraType local savedCameraSubject = workspace.CurrentCamera.CameraSubject workspace.CurrentCamera.CameraType = Enum.CameraType.Attach workspace.CurrentCamera.CameraSubject = targetRoot return function() root.CFrame = savedCFrame root.Anchored = false workspace.CurrentCamera.CameraType = savedCameraType workspace.CurrentCamera.CameraSubject = savedCameraSubject end end for _, player in ipairs(Players:GetPlayers()) do if player ~= LocalPlayer then local char = player.Character if char and char:FindFirstChild("HumanoidRootPart") then local targetRoot = char.HumanoidRootPart local unlock = lockLocalPlayerUnder(targetRoot) buildCage(targetRoot) task.wait(BUILD_WAIT) unlock() task.wait(0.3) end end end