local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local Workspace = game:GetService("Workspace") local player = Players.LocalPlayer local function firstValidChild(container, name, validate) for _, child in ipairs(container:GetChildren()) do if child.Name == name then if not validate or validate(child) then return child end end end return nil end local function getTargetPart() local rooms = firstValidChild(Workspace, "Rooms", function(c) return c:FindFirstChild("EndRoom") ~= nil end) if not rooms then return nil end local endRoom = firstValidChild(rooms, "EndRoom", function(c) return c:FindFirstChild("Elevator1") ~= nil end) if not endRoom then return nil end local elevator1 = firstValidChild(endRoom, "Elevator1", function(c) return c:FindFirstChild("ExitSign") ~= nil end) if not elevator1 then return nil end local exitSign = firstValidChild(elevator1, "ExitSign", nil) if not exitSign then return nil end if not (exitSign:IsA("BasePart") or exitSign:IsA("Model")) then return nil end return exitSign end local screenGui = Instance.new("ScreenGui") screenGui.Name = "TeleportLoopGui" screenGui.ResetOnSpawn = false screenGui.Parent = player:WaitForChild("PlayerGui") local frame = Instance.new("Frame") frame.Size = UDim2.new(0, 220, 0, 75) frame.Position = UDim2.new(0, 20, 0, 20) frame.BackgroundColor3 = Color3.fromRGB(15, 15, 15) frame.BackgroundTransparency = 0.4 frame.BorderSizePixel = 0 frame.ClipsDescendants = true frame.Parent = screenGui local frameStroke = Instance.new("UIStroke") frameStroke.Color = Color3.fromRGB(255, 255, 255) frameStroke.Transparency = 0.85 frameStroke.Thickness = 1 frameStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border frameStroke.Parent = frame local dragArea = Instance.new("Frame") dragArea.Name = "DragArea" dragArea.Size = UDim2.new(1, 0, 0, 25) dragArea.Position = UDim2.new(0, 0, 0, 0) dragArea.BackgroundTransparency = 1 dragArea.Parent = frame local titleLabel = Instance.new("TextLabel") titleLabel.Size = UDim2.new(1, -70, 0, 20) titleLabel.Position = UDim2.new(0, 10, 0, 5) titleLabel.BackgroundTransparency = 1 titleLabel.Text = "FARMER" titleLabel.TextColor3 = Color3.fromRGB(220, 220, 220) titleLabel.Font = Enum.Font.GothamMedium titleLabel.TextSize = 13 titleLabel.TextXAlignment = Enum.TextXAlignment.Left titleLabel.Parent = frame local function createBtn(text, pos) local btn = Instance.new("TextButton") btn.Size = UDim2.new(0, 20, 0, 20) btn.Position = pos btn.BackgroundTransparency = 1 btn.Text = text btn.TextColor3 = Color3.fromRGB(150, 150, 150) btn.Font = Enum.Font.GothamMedium btn.TextSize = (text == "X" and 14 or 18) btn.AutoButtonColor = false btn.Parent = frame return btn end local minimizeButton = createBtn("-", UDim2.new(1, -45, 0, 5)) local closeButton = createBtn("X", UDim2.new(1, -25, 0, 5)) local isMonster = (player.Team and player.Team.Name == "Monster") local button = Instance.new("TextButton") button.Size = UDim2.new(1, -20, 0, 36) button.Position = UDim2.new(0, 10, 0, 28) button.BackgroundColor3 = isMonster and Color3.fromRGB(255, 255, 50) or Color3.fromRGB(255, 50, 50) button.BackgroundTransparency = 0.85 button.Text = isMonster and "LOOP: STOPPED" or "LOOP: OFF" button.TextColor3 = isMonster and Color3.fromRGB(200, 200, 50) or Color3.fromRGB(255, 120, 120) button.Font = Enum.Font.GothamMedium button.TextSize = 13 button.AutoButtonColor = false button.Active = not isMonster button.Parent = frame local buttonStroke = Instance.new("UIStroke") buttonStroke.Color = isMonster and Color3.fromRGB(255, 255, 50) or Color3.fromRGB(255, 50, 50) buttonStroke.Transparency = 0.6 buttonStroke.Thickness = 1 buttonStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border buttonStroke.Parent = button local dragging, dragStart, startPos = false, nil, nil dragArea.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then local objects = UserInputService:GetGuiObjectsAtPosition(input.Position) for _, obj in pairs(objects) do if obj == closeButton or obj == minimizeButton then return end end dragging = true dragStart = input.Position startPos = frame.Position end end) UserInputService.InputChanged:Connect(function(input) if dragging and input.UserInputType == Enum.UserInputType.MouseMovement then local delta = input.Position - dragStart local screenSize = screenGui.AbsoluteSize local frameSize = frame.AbsoluteSize local startX = (startPos.X.Scale * screenSize.X) + startPos.X.Offset local startY = (startPos.Y.Scale * screenSize.Y) + startPos.Y.Offset local clampedX = math.clamp(startX + delta.X, 0, screenSize.X - frameSize.X) local clampedY = math.clamp(startY + delta.Y, 0, screenSize.Y - frameSize.Y) frame.Position = UDim2.new(0, clampedX, 0, clampedY) end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = false end end) local isMinimized = false minimizeButton.MouseButton1Click:Connect(function() isMinimized = not isMinimized if isMinimized then minimizeButton.Text = "+" frame.Size = UDim2.new(0, 220, 0, 30) button.Visible = false else minimizeButton.Text = "-" button.Visible = true frame.Size = UDim2.new(0, 220, 0, 75) end end) local looping = false local connection = nil local function startLoop() looping = true button.Text = "LOOP: ON" button.BackgroundColor3 = Color3.fromRGB(50, 255, 100) button.TextColor3 = Color3.fromRGB(120, 255, 150) buttonStroke.Color = Color3.fromRGB(50, 255, 100) connection = RunService.Heartbeat:Connect(function() local character = player.Character if not character then return end local hrp = character:FindFirstChild("HumanoidRootPart") if not hrp then return end local targetPart = getTargetPart() if not targetPart then return end local ok, err = pcall(function() local targetCFrame = targetPart:IsA("BasePart") and targetPart.CFrame or targetPart:GetPivot() hrp.CFrame = targetCFrame * CFrame.new(5, -8, 0) end) end) end local function stopLoop() looping = false button.Text = "LOOP: OFF" button.BackgroundColor3 = Color3.fromRGB(255, 50, 50) button.TextColor3 = Color3.fromRGB(255, 120, 120) buttonStroke.Color = Color3.fromRGB(255, 50, 50) if connection then connection:Disconnect() connection = nil end end button.MouseButton1Click:Connect(function() if isMonster then return end if looping then stopLoop() else startLoop() end end) closeButton.MouseButton1Click:Connect(function() stopLoop() screenGui:Destroy() end)