--// SETTINGS local folder = workspace:WaitForChild("Chests") local player = game.Players.LocalPlayer local delayBeforePrompt = 0.7 local holdTime = 4.3 local delayBetweenChests = 5 -- Camera settings (tweak these if needed) local cameraHeight = 9 -- Higher = camera higher above chest local cameraZoom = 0.8 -- Lower number = more zoomed in (0.5 = very close, 1.5 = farther) -- Server hop settings local serverHopDelay = 2 local maxPlayersInNewServer = 20 --// SERVICES local vim = game:GetService("VirtualInputManager") local camera = workspace.CurrentCamera local teleportService = game:GetService("TeleportService") local httpService = game:GetService("HttpService") --// GET PRIMARY PART local function getPart(model) return model:FindFirstChildWhichIsA("BasePart", true) or model.PrimaryPart end --// TELEPORT TO CHEST local function teleportTo(part) local root = player.Character and player.Character:FindFirstChild("HumanoidRootPart") if root and part then root.CFrame = part.CFrame * CFrame.new(0, 5, 0) end end --// LOOK DOWN WITH PLAYER CAMERA (more natural + zoomed in + higher) local function lookAtChest(part) if not part then return end local oldCameraType = camera.CameraType local oldCameraMode = player.CameraMode -- Switch to Scriptable briefly for precise control, then back to Custom camera.CameraType = Enum.CameraType.Scriptable -- Position camera higher and more centered local lookFrom = part.Position + Vector3.new(0, cameraHeight, 2) -- raised + slight forward local lookAt = part.Position + Vector3.new(0, 1.5, 0) camera.CFrame = CFrame.lookAt(lookFrom, lookAt) -- Zoom in (FOV control) local originalFOV = camera.FieldOfView camera.FieldOfView = originalFOV * cameraZoom -- smaller = zoomed in task.wait(0.6) -- let it settle -- Restore camera type but keep the zoomed view briefly camera.CameraType = Enum.CameraType.Custom player.CameraMode = Enum.CameraMode.LockFirstPerson -- feels more "player camera" return oldCameraType, oldCameraMode, originalFOV end local function restoreCamera(oldType, oldMode, originalFOV) if oldType then camera.CameraType = oldType end if oldMode then player.CameraMode = oldMode end if originalFOV then camera.FieldOfView = originalFOV end end --// HOLD E local function holdE(duration) vim:SendKeyEvent(true, Enum.KeyCode.E, false, game) task.wait(duration) vim:SendKeyEvent(false, Enum.KeyCode.E, false, game) end --// INTERACT WITH ONE CHEST local function interact(chest) local part = getPart(chest) if not part then warn("No part found in", chest.Name) return end print("→ Teleporting to", chest.Name) teleportTo(part) task.wait(1.2) local oldType, oldMode, originalFOV = lookAtChest(part) task.wait(delayBeforePrompt) print("→ Holding E on", chest.Name) holdE(holdTime) task.wait(0.8) restoreCamera(oldType, oldMode, originalFOV) print("✅ Finished", chest.Name) end --// SERVER HOP local function serverHop() print("All chests collected! Server hopping in " .. serverHopDelay .. " seconds...") task.wait(serverHopDelay) local placeId = game.PlaceId local currentJobId = game.JobId local success, servers = pcall(function() return httpService:JSONDecode(game:HttpGet( "https://games.roblox.com/v1/games/" .. placeId .. "/servers/Public?sortOrder=Asc&limit=100" )) end) if not success or not servers or not servers.data then teleportService:Teleport(placeId) return end local validServers = {} for _, server in ipairs(servers.data) do if server.id ~= currentJobId and server.playing and server.playing <= maxPlayersInNewServer then table.insert(validServers, server) end end if #validServers > 0 then local chosen = validServers[math.random(1, #validServers)] print("Hopping to server with " .. chosen.playing .. " players") teleportService:TeleportToPlaceInstance(placeId, chosen.id, player) else teleportService:Teleport(placeId) end end --// MAIN LOOP while true do local chests = folder:GetChildren() if #chests == 0 then print("No chests found, waiting...") task.wait(3) continue end print("Starting collection of " .. #chests .. " chests...") for _, chest in ipairs(chests) do if chest:IsA("Model") then interact(chest) task.wait(delayBetweenChests) end end print("✅ Finished all chests in this server!") serverHop() task.wait(10) end