lazy autofarm
Key Required Verified

lazy autofarm

[HIGHLIGHTS] 🌊FE2 2023TomatoTomato 148 views 421 executesUpdated Aug 9, 2026
Unrated
00
Lua Script•324 lines (11134 chars)
-- FE2 Master Controller: Fixed Round-1 Immediate Startup Check
-- Fixes: Instantly detects and runs on Round 1 even if executed mid-round

local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local RunService = game:GetService("RunService")

local LocalPlayer = Players.LocalPlayer
local PlayerGui = LocalPlayer:WaitForChild("PlayerGui")
local Remote = ReplicatedStorage:WaitForChild("Remote")
local StartClientMapTimer = Remote:WaitForChild("StartClientMapTimer")

-- ============================================================================
-- MASTER GUI DASHBOARD
-- ============================================================================
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "FE2_MasterControllerGui_FixedRound1"
screenGui.ResetOnSpawn = false
screenGui.Parent = PlayerGui

local mainFrame = Instance.new("Frame")
mainFrame.Name = "MainFrame"
mainFrame.Size = UDim2.new(0, 280, 0, 130)
mainFrame.Position = UDim2.new(0.02, 0, 0.35, 0)
mainFrame.BackgroundColor3 = Color3.fromRGB(20, 20, 28)
mainFrame.BackgroundTransparency = 0.15
mainFrame.BorderSizePixel = 0
mainFrame.Active = true
mainFrame.Draggable = true
mainFrame.Parent = screenGui

local corner = Instance.new("UICorner")
corner.CornerRadius = UDim.new(0, 8)
corner.Parent = mainFrame

local stroke = Instance.new("UIStroke")
stroke.Color = Color3.fromRGB(60, 60, 80)
stroke.Thickness = 1.5
stroke.Parent = mainFrame

local titleLabel = Instance.new("TextLabel")
titleLabel.Name = "Title"
titleLabel.Size = UDim2.new(1, -20, 0, 25)
titleLabel.Position = UDim2.new(0, 10, 0, 6)
titleLabel.BackgroundTransparency = 1
titleLabel.Text = "âš¡ FE2 Master Controller"
titleLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
titleLabel.TextSize = 13
titleLabel.Font = Enum.Font.GothamBold
titleLabel.TextXAlignment = Enum.TextXAlignment.Left
titleLabel.Parent = mainFrame

local statusLabel = Instance.new("TextLabel")
statusLabel.Name = "StatusText"
statusLabel.Size = UDim2.new(1, -20, 0, 32)
statusLabel.Position = UDim2.new(0, 10, 0, 32)
statusLabel.BackgroundTransparency = 1
statusLabel.Text = "Status: Idle / Waiting for round..."
statusLabel.TextColor3 = Color3.fromRGB(200, 200, 215)
statusLabel.TextSize = 11
statusLabel.Font = Enum.Font.GothamMedium
statusLabel.TextXAlignment = Enum.TextXAlignment.Left
statusLabel.TextWrapped = true
statusLabel.Parent = mainFrame

local voteStatusLabel = Instance.new("TextLabel")
voteStatusLabel.Name = "VoteStatusText"
voteStatusLabel.Size = UDim2.new(1, -20, 0, 22)
voteStatusLabel.Position = UDim2.new(0, 10, 0, 66)
voteStatusLabel.BackgroundTransparency = 1
voteStatusLabel.Text = "Map Vote: Auto-Voter Active"
voteStatusLabel.TextColor3 = Color3.fromRGB(241, 196, 15)
voteStatusLabel.TextSize = 11
voteStatusLabel.Font = Enum.Font.GothamMedium
voteStatusLabel.TextXAlignment = Enum.TextXAlignment.Left
voteStatusLabel.Parent = mainFrame

local countLabel = Instance.new("TextLabel")
countLabel.Name = "CountText"
countLabel.Size = UDim2.new(1, -20, 0, 22)
countLabel.Position = UDim2.new(0, 10, 0, 92)
countLabel.BackgroundTransparency = 1
countLabel.Text = "Buttons Found: 0"
countLabel.TextColor3 = Color3.fromRGB(150, 150, 170)
countLabel.TextSize = 11
countLabel.Font = Enum.Font.Gotham
countLabel.TextXAlignment = Enum.TextXAlignment.Left
countLabel.Parent = mainFrame

-- ============================================================================
-- MODULE 1: ALERT & ESCAPE CONFIRMATION LISTENER
-- ============================================================================
local escapedConfirmed = false

local function checkTextForEscape(text)
	if type(text) == "string" and string.find(text, "Escaped") then
		escapedConfirmed = true
		statusLabel.Text = "Status: Escaped Confirmed by Server!"
	end
end

-- Hook Remote.Alert
local remoteAlert = Remote:FindFirstChild("Alert")
if remoteAlert and remoteAlert:IsA("RemoteEvent") then
	remoteAlert.OnClientEvent:Connect(function(text)
		checkTextForEscape(text)
	end)
end

-- Hook CL_MAIN_GameScript.Alert
local playerScripts = LocalPlayer:FindFirstChild("PlayerScripts")
local gameScript = playerScripts and playerScripts:FindFirstChild("CL_MAIN_GameScript")
local bindableAlert = gameScript and gameScript:FindFirstChild("Alert")
if bindableAlert and bindableAlert:IsA("BindableEvent") then
	bindableAlert.Event:Connect(function(text)
		checkTextForEscape(text)
	end)
end

-- ============================================================================
-- MODULE 2: BACKGROUND AUTO MAP VOTER
-- ============================================================================
local newMapVoteRemote = Remote:FindFirstChild("NewMapVote")
if newMapVoteRemote and newMapVoteRemote:IsA("RemoteEvent") then
	newMapVoteRemote.OnClientEvent:Connect(function(mapPayload, isVotable)
		if not (mapPayload and mapPayload.mapData) then return end

		local myUserId = tostring(LocalPlayer.UserId)
		local existingVote = mapPayload.pVotes and mapPayload.pVotes[myUserId]
		if existingVote and existingVote.voteCount and existingVote.voteCount > 0 then
			return
		end

		local targetMap = nil
		for _, mapInfo in ipairs(mapPayload.mapData) do
			if mapInfo.displayMap and not mapInfo.cooldown and not mapInfo.locked then
				targetMap = mapInfo
				break
			end
		end

		if not targetMap then
			for _, mapInfo in ipairs(mapPayload.mapData) do
				if mapInfo.displayMap and not mapInfo.cooldown then
					targetMap = mapInfo
					break
				end
			end
		end

		if targetMap then
			local updVoteRemote = Remote:FindFirstChild("UpdMapVote")
			if updVoteRemote and updVoteRemote:IsA("RemoteEvent") then
				updVoteRemote:FireServer(targetMap.ID, 0)
				voteStatusLabel.Text = "Map Vote: Voted " .. tostring(targetMap.name)
			end
		end
	end)
end

-- ============================================================================
-- MODULE 3: MAP SCANNER & TOUCHINTEREST SPAMMER
-- ============================================================================

local function scanAndAddNewButtons(map, buttonList, knownSet)
	if not map then return 0 end
	local newlyAddedCount = 0

	for _, desc in ipairs(map:GetDescendants()) do
		if desc:IsA("BasePart") then
			local hasTouchInterest = desc:FindFirstChildOfClass("TouchInterest") ~= nil or desc:FindFirstChild("TouchInterest") ~= nil

			if hasTouchInterest and not knownSet[desc] then
				local nameLower = desc.Name:lower()
				local parentNameLower = desc.Parent and desc.Parent.Name:lower() or ""

				local isExcluded = nameLower:find("exit") or nameLower:find("spawn") or nameLower:find("air") or parentNameLower:find("airtank") or parentNameLower:find("exit")

				if not isExcluded then
					knownSet[desc] = true
					table.insert(buttonList, desc)
					newlyAddedCount = newlyAddedCount + 1
				end
			end
		end
	end
	return newlyAddedCount
end

local function waitForMapLoad()
	local timeout = tick() + 4
	while tick() < timeout do
		local multiplayer = workspace:FindFirstChild("Multiplayer")
		local map = multiplayer and multiplayer:FindFirstChild("Map")
		if map and #map:GetChildren() > 0 then
			task.wait(0.5)
			return map
		end
		task.wait(0.1)
	end
	return nil
end

local function isExitActive(exitPart)
	if not (exitPart and exitPart:IsDescendantOf(workspace)) then
		return false
	end

	local locatorGui = PlayerGui:FindFirstChild("LocatorGui")
	local locater = locatorGui and locatorGui:FindFirstChild("Locater")
	if locater and locater.Visible then
		local line = locater:FindFirstChild("Line")
		if line and line:IsA("BasePart") and line.Size.X > 0 then
			local beamTargetPos = (line.CFrame * CFrame.new(line.Size.X * 0.5, 0, 0)).Position
			if (beamTargetPos - exitPart.Position).Magnitude <= 15 then
				return true
			end
		end
	end

	return false
end

local function findExitRegion(map)
	if not map then return nil end
	for _, desc in ipairs(map:GetDescendants()) do
		if (desc.Name == "ExitRegion" or desc.Name == "ExitBlock") and desc:IsA("BasePart") then
			return desc
		end
	end
	return nil
end

-- ============================================================================
-- MAIN ROUND CONTROLLER
-- ============================================================================
local currentRoundID = 0

local function startRoundLogic()
	currentRoundID = currentRoundID + 1
	local myRoundID = currentRoundID
	escapedConfirmed = false

	statusLabel.Text = "Status: Waiting for map models..."
	local map = waitForMapLoad()

	local buttons = {}
	local knownSet = {}

	scanAndAddNewButtons(map, buttons, knownSet)
	countLabel.Text = string.format("Buttons Found: %d", #buttons)
	statusLabel.Text = string.format("Status: Spamming %d buttons...", #buttons)

	-- LOOP 1: Background Button Scanner
	task.spawn(function()
		while currentRoundID == myRoundID and not escapedConfirmed do
			task.wait(0.3)
			if map and map.Parent then
				local newlyDiscovered = scanAndAddNewButtons(map, buttons, knownSet)
				if newlyDiscovered > 0 then
					countLabel.Text = string.format("Buttons Found: %d", #buttons)
					statusLabel.Text = string.format("Status: Spamming %d buttons...", #buttons)
				end
			end
		end
	end)

	-- LOOP 2: Remote Spammer & Repeat Escape Controller
	task.spawn(function()
		local pressedRemote = Remote:FindFirstChild("PressedMapButton")
		local survivedRemote = Remote:FindFirstChild("Survived")
		local escapeAttemptActive = false

		while currentRoundID == myRoundID and not escapedConfirmed and task.wait(1/60) do
			-- A. Spam PressedMapButton on ALL discovered button hitboxes
			if pressedRemote and pressedRemote:IsA("RemoteEvent") then
				for i = 1, #buttons do
					local btnPart = buttons[i]
					if btnPart and btnPart.Parent and btnPart:IsDescendantOf(workspace) then
						pressedRemote:FireServer(btnPart)
					end
				end
			end

			-- B. Repeat Escape Attempts once Exit becomes active
			if not escapedConfirmed and not escapeAttemptActive then
				local exitPart = findExitRegion(map)
				if exitPart and isExitActive(exitPart) then
					escapeAttemptActive = true
					statusLabel.Text = "Status: Attempting Escape..."

					-- REPEAT ATTEMPT LOOP
					task.spawn(function()
						while currentRoundID == myRoundID and not escapedConfirmed do
							if survivedRemote then
								pcall(function()
									if survivedRemote:IsA("RemoteFunction") then
										local result = survivedRemote:InvokeServer(LocalPlayer)
										if result == true then
											escapedConfirmed = true
											statusLabel.Text = "Status: Escaped Confirmed!"
										end
									elseif survivedRemote:IsA("RemoteEvent") then
										survivedRemote:FireServer(LocalPlayer)
									end
								end)
							end
							task.wait(0.1) -- Retries escape every 0.1s
						end
					end)
				end
			end
		end
	end)
end

-- Connect to Map Timer for subsequent rounds
StartClientMapTimer.OnClientEvent:Connect(startRoundLogic)

-- STARTUP CHECK (Ensures Round 1 runs immediately if executed mid-round)
local existingMap = workspace:FindFirstChild("Multiplayer") and workspace.Multiplayer:FindFirstChild("Map")
if existingMap and #existingMap:GetChildren() > 0 then
	task.spawn(startRoundLogic)
end

Features & Information

presses buttons, escapes, force votes, lazy bruh
#lazy#farm#auto

Community Comments (0)

No comments yet for this script.