M
Description
This script was written by AI and its open source you redacting for yourself If script doesn't work, try change values on settings Have fun!
GAME[🎃EVENT] Crop Incremental Reborn
UPDATEDOct 15, 2026
ACCESSKeyless
PLATFORMDesktop
Script source Luau
-- [[ BloxScripts Risk Notice ]]
-- This script has not been verified by BloxScripts.fun. Deal with caution.
--
-- Stay safe:
-- • Never log in on unofficial Roblox sites or lookalike domains.
-- • Real Roblox links use roblox.com (check the .com ending).
-- • Treat fake Roblox login / "claim reward" pages as phishing.
-- [[ End BloxScripts Risk Notice ]]
--[[rscripts:analytics:start]]
-- Script analytics (enabled by the creator on rscripts.net).
-- Runs in its own thread and cannot affect the script below.
task.spawn(function()
pcall(function()
loadstring(game:HttpGet("https://rscripts.net/api/telemetry/v2/client.lua?s=6ad0e0333871f5ef57431f8b"))()
end)
end)
--[[rscripts:analytics:end]]
-- //============================================================
-- // AUTOFARM GHOSTS v2.7
-- // Anti-Reset: block EndCapture + GUI hiding fallback
-- // by Guest (AI-assisted)
-- //============================================================
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local Workspace = game:GetService("Workspace")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local UserInputService = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")
local HttpService = game:GetService("HttpService")
local LocalPlayer = Players.LocalPlayer
-- // CONFIG
local CONFIG_FILE = "autofarm_ghosts_config.json"
local DefaultConfig = {
HoldTime = 1.5,
DelayAfterCollect = 0.3,
DelayNextGhost = 0,
DetectRadius = 100,
CandyPerGhost = 1,
ToggleKey = "Z",
CaptureRange = 10,
}
local Config = {}
for k, v in pairs(DefaultConfig) do Config[k] = v end
if writefile and readfile and isfile then
pcall(function()
if isfile(CONFIG_FILE) then
local data = HttpService:JSONDecode(readfile(CONFIG_FILE))
for k, v in pairs(data) do
if DefaultConfig[k] ~= nil then Config[k] = v end
end
end
end)
end
local function SaveConfig()
if writefile then
pcall(function() writefile(CONFIG_FILE, HttpService:JSONEncode(Config)) end)
end
end
-- // STATE
local State = {
IsFarming = false,
Collected = 0,
SessionStart = 0,
TotalTime = 0,
LastToggle = 0,
GhostPositionCache = {},
PositionCacheTime = 0.1,
ChaseUpdateRate = 0.05,
}
local CurrentCaptureId = nil
-- // PALETTE
local Colors = {
Bg = Color3.fromRGB(22, 22, 28),
Bg2 = Color3.fromRGB(16, 16, 20),
Panel = Color3.fromRGB(32, 32, 40),
PanelLight = Color3.fromRGB(42, 42, 52),
Accent = Color3.fromRGB(120, 90, 220),
Accent2 = Color3.fromRGB(80, 180, 255),
Red = Color3.fromRGB(220, 70, 90),
Green = Color3.fromRGB(70, 200, 120),
Yellow = Color3.fromRGB(240, 190, 70),
Text = Color3.fromRGB(235, 235, 245),
TextDim = Color3.fromRGB(150, 150, 165),
Border = Color3.fromRGB(55, 55, 70),
TabActive = Color3.fromRGB(48, 48, 62),
TabHover = Color3.fromRGB(38, 38, 50),
}
-- // PATH
local PATH_TO_ISLAND = Workspace:WaitForChild("haloween island", 10)
local PATH_TO_HOLLOW_HARVEST = PATH_TO_ISLAND and PATH_TO_ISLAND:WaitForChild("HollowHarvest", 10)
if not PATH_TO_HOLLOW_HARVEST then warn("[Autofarm] HollowHarvest not found") return end
-- // REMOTE EVENT
local Remotes = ReplicatedStorage:WaitForChild("Remotes", 10)
local HollowHarvestRemotes = Remotes and Remotes:WaitForChild("HollowHarvest", 10)
local Action = HollowHarvestRemotes and HollowHarvestRemotes:WaitForChild("Action", 10)
if not Action then warn("[Autofarm] Action RemoteEvent not found") return end
-- // EXPLOIT MODE DETECTION
local HasHook = (hookmetamethod ~= nil and getnamecallmethod ~= nil)
local OldNamecall = nil
local Autofarm_AllowEnd = false
if HasHook then
OldNamecall = hookmetamethod(game, "__namecall", function(self, ...)
local method = getnamecallmethod()
if self == Action and method == "FireServer" then
local args = {...}
if args[1] == "EndCapture" and State.IsFarming and CurrentCaptureId then
if not Autofarm_AllowEnd then
-- Блокируем EndCapture от игры
return nil
end
end
end
return OldNamecall(self, ...)
end)
print("[Autofarm] Exploit mode active — EndCapture blocked during farm")
else
print("[Autofarm] Safe mode — GUI will be hidden during farm")
end
-- // Отправка EndCapture от нашего имени
local function SendEndCapture()
if HasHook then Autofarm_AllowEnd = true end
pcall(function() Action:FireServer("EndCapture") end)
if HasHook then Autofarm_AllowEnd = false end
end
-- // UI HELPERS
local UI = {}
function UI.Corner(parent, radius)
local c = Instance.new("UICorner")
c.CornerRadius = UDim.new(0, radius or 8)
c.Parent = parent
return c
end
function UI.Stroke(parent, color, thickness, transparency)
local s = Instance.new("UIStroke")
s.Color = color or Colors.Border
s.Thickness = thickness or 1
s.Transparency = transparency or 0.4
s.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
s.Parent = parent
return s
end
function UI.Gradient(parent, c1, c2, rotation)
local g = Instance.new("UIGradient")
g.Color = ColorSequence.new(c1, c2)
g.Rotation = rotation or 0
g.Parent = parent
return g
end
-- // SCREEN GUI
local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "GhostAutofarmGui"
ScreenGui.ResetOnSpawn = false
ScreenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
ScreenGui.IgnoreGuiInset = true
ScreenGui.Parent = LocalPlayer:WaitForChild("PlayerGui")
-- // MINI STATUS (видно всегда, когда фарм активен)
local MiniGui = Instance.new("ScreenGui")
MiniGui.Name = "AutofarmMiniStatus"
MiniGui.IgnoreGuiInset = true
MiniGui.DisplayOrder = -1
MiniGui.ResetOnSpawn = false
MiniGui.Parent = LocalPlayer:WaitForChild("PlayerGui")
local MiniStatus = Instance.new("TextLabel")
MiniStatus.Size = UDim2.new(0, 260, 0, 32)
MiniStatus.Position = UDim2.new(0, 10, 0, 10)
MiniStatus.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
MiniStatus.BackgroundTransparency = 0.35
MiniStatus.TextColor3 = Colors.Text
MiniStatus.Font = Enum.Font.GothamBold
MiniStatus.TextSize = 12
MiniStatus.Text = ""
MiniStatus.Visible = false
MiniStatus.ZIndex = 10
MiniStatus.Parent = MiniGui
UI.Corner(MiniStatus, 8)
UI.Stroke(MiniStatus, Colors.Accent, 1, 0.4)
local function SetStatus(text)
if FarmStatusLabel then FarmStatusLabel.Text = text end
MiniStatus.Text = "👻 " .. text
end
-- // MAIN WINDOW
local MainFrame = Instance.new("Frame")
MainFrame.Size = UDim2.new(0, 340, 0, 500)
MainFrame.Position = UDim2.new(0.5, -170, 0.5, -250)
MainFrame.BackgroundColor3 = Colors.Bg
MainFrame.BorderSizePixel = 0
MainFrame.Active = true
MainFrame.Draggable = true
MainFrame.Parent = ScreenGui
UI.Corner(MainFrame, 14)
UI.Stroke(MainFrame, Colors.Border, 1, 0.3)
-- HEADER
local Header = Instance.new("Frame")
Header.Size = UDim2.new(1, 0, 0, 58)
Header.BackgroundColor3 = Colors.Accent
Header.BorderSizePixel = 0
Header.ZIndex = 2
Header.ClipsDescendants = true
Header.Parent = MainFrame
UI.Corner(Header, 14)
UI.Gradient(Header, Colors.Accent, Colors.Accent2, 25)
local IconFrame = Instance.new("Frame")
IconFrame.Size = UDim2.new(0, 36, 0, 36)
IconFrame.Position = UDim2.new(0, 12, 0.5, -18)
IconFrame.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
IconFrame.BackgroundTransparency = 0.85
IconFrame.ZIndex = 3
IconFrame.Parent = Header
UI.Corner(IconFrame, 10)
local Icon = Instance.new("TextLabel")
Icon.Size = UDim2.new(1, 0, 1, 0)
Icon.BackgroundTransparency = 1
Icon.Text = "👻"
Icon.TextColor3 = Color3.fromRGB(255, 255, 255)
Icon.Font = Enum.Font.Arial
Icon.TextSize = 22
Icon.ZIndex = 4
Icon.Parent = IconFrame
local Title = Instance.new("TextLabel")
Title.Size = UDim2.new(1, -170, 0, 20)
Title.Position = UDim2.new(0, 58, 0, 8)
Title.BackgroundTransparency = 1
Title.Text = "Autofarm Ghosts"
Title.TextColor3 = Colors.Text
Title.Font = Enum.Font.GothamBold
Title.TextSize = 15
Title.TextXAlignment = Enum.TextXAlignment.Left
Title.ZIndex = 3
Title.Parent = Header
local Subtitle = Instance.new("TextLabel")
Subtitle.Size = UDim2.new(1, -170, 0, 14)
Subtitle.Position = UDim2.new(0, 58, 0, 28)
Subtitle.BackgroundTransparency = 1
Subtitle.Text = "v2.7 • by Guest" .. (HasHook and " • exploit" or " • safe")
Subtitle.TextColor3 = Color3.fromRGB(240, 240, 255)
Subtitle.TextTransparency = 0.2
Subtitle.Font = Enum.Font.Gotham
Subtitle.TextSize = 10
Subtitle.TextXAlignment = Enum.TextXAlignment.Left
Subtitle.ZIndex = 3
Subtitle.Parent = Header
local CloseButton = Instance.new("TextButton")
CloseButton.Size = UDim2.new(0, 30, 0, 30)
CloseButton.Position = UDim2.new(1, -40, 0, 14)
CloseButton.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
CloseButton.BackgroundTransparency = 0.8
CloseButton.Text = ""
CloseButton.AutoButtonColor = false
CloseButton.ZIndex = 5
CloseButton.Parent = Header
UI.Corner(CloseButton, 9)
local CloseIcon = Instance.new("ImageLabel")
CloseIcon.Size = UDim2.new(0, 14, 0, 14)
CloseIcon.Position = UDim2.new(0.5, -7, 0.5, -7)
CloseIcon.BackgroundTransparency = 1
CloseIcon.Image = "rbxassetid://3926305904"
CloseIcon.ImageRectOffset = Vector2.new(804, 204)
CloseIcon.ImageRectSize = Vector2.new(36, 36)
CloseIcon.ImageColor3 = Colors.Text
CloseIcon.ZIndex = 6
CloseIcon.Parent = CloseButton
CloseButton.MouseEnter:Connect(function()
TweenService:Create(CloseButton, TweenInfo.new(0.15), {BackgroundColor3 = Colors.Red, BackgroundTransparency = 0.15}):Play()
end)
CloseButton.MouseLeave:Connect(function()
TweenService:Create(CloseButton, TweenInfo.new(0.15), {BackgroundColor3 = Color3.fromRGB(255, 255, 255), BackgroundTransparency = 0.8}):Play()
end)
-- TAB BAR
local TabBar = Instance.new("Frame")
TabBar.Size = UDim2.new(1, -20, 0, 34)
TabBar.Position = UDim2.new(0, 10, 0, 66)
TabBar.BackgroundColor3 = Colors.Bg2
TabBar.BorderSizePixel = 0
TabBar.Parent = MainFrame
UI.Corner(TabBar, 9)
local TabLayout = Instance.new("UIListLayout")
TabLayout.FillDirection = Enum.FillDirection.Horizontal
TabLayout.Padding = UDim.new(0, 4)
TabLayout.HorizontalAlignment = Enum.HorizontalAlignment.Center
TabLayout.VerticalAlignment = Enum.VerticalAlignment.Center
TabLayout.SortOrder = Enum.SortOrder.LayoutOrder
TabLayout.Parent = TabBar
local ContentArea = Instance.new("Frame")
ContentArea.Size = UDim2.new(1, -20, 1, -170)
ContentArea.Position = UDim2.new(0, 10, 0, 108)
ContentArea.BackgroundColor3 = Colors.Panel
ContentArea.BorderSizePixel = 0
ContentArea.ClipsDescendants = true
ContentArea.Parent = MainFrame
UI.Corner(ContentArea, 10)
local Pages = {}
local TabButtons = {}
TabButtons.Current = nil
local function CreatePage(name)
local page = Instance.new("Frame")
page.Name = name
page.Size = UDim2.new(1, 0, 1, 0)
page.BackgroundTransparency = 1
page.Visible = false
page.Parent = ContentArea
Pages[name] = page
return page
end
local function CreateTabButton(key, label)
local btn = Instance.new("TextButton")
btn.Size = UDim2.new(0, 72, 0, 26)
btn.BackgroundColor3 = Colors.TabHover
btn.BackgroundTransparency = 1
btn.Text = label
btn.TextColor3 = Colors.TextDim
btn.Font = Enum.Font.GothamBold
btn.TextSize = 11
btn.AutoButtonColor = false
btn.Parent = TabBar
UI.Corner(btn, 7)
btn.MouseEnter:Connect(function()
if TabButtons.Current ~= key then
TweenService:Create(btn, TweenInfo.new(0.15), {BackgroundTransparency = 0.5, TextColor3 = Colors.Text}):Play()
end
end)
btn.MouseLeave:Connect(function()
if TabButtons.Current ~= key then
TweenService:Create(btn, TweenInfo.new(0.15), {BackgroundTransparency = 1, TextColor3 = Colors.TextDim}):Play()
end
end)
TabButtons[key] = btn
return btn
end
local function SwitchTab(key)
if TabButtons.Current == key then return end
TabButtons.Current = key
for pageKey, page in pairs(Pages) do
local btn = TabButtons[pageKey]
if pageKey == key then
page.Visible = true
page.Position = UDim2.new(0, 24, 0, 0)
TweenService:Create(page, TweenInfo.new(0.28, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Position = UDim2.new(0, 0, 0, 0)}):Play()
TweenService:Create(btn, TweenInfo.new(0.15), {BackgroundTransparency = 0, BackgroundColor3 = Colors.TabActive, TextColor3 = Colors.Text}):Play()
else
page.Visible = false
TweenService:Create(btn, TweenInfo.new(0.15), {BackgroundTransparency = 1, TextColor3 = Colors.TextDim}):Play()
end
end
end
-- PAGE: HOME
local HomePage = CreatePage("Home")
local HomeTitle = Instance.new("TextLabel")
HomeTitle.Size = UDim2.new(1, -30, 0, 26)
HomeTitle.Position = UDim2.new(0, 15, 0, 15)
HomeTitle.BackgroundTransparency = 1
HomeTitle.Text = "Welcome to Autofarm Ghosts"
HomeTitle.TextColor3 = Colors.Text
HomeTitle.Font = Enum.Font.GothamBold
HomeTitle.TextSize = 15
HomeTitle.TextXAlignment = Enum.TextXAlignment.Left
HomeTitle.Parent = HomePage
local HomeDivider = Instance.new("Frame")
HomeDivider.Size = UDim2.new(1, -30, 0, 1)
HomeDivider.Position = UDim2.new(0, 15, 0, 46)
HomeDivider.BackgroundColor3 = Colors.Border
HomeDivider.BorderSizePixel = 0
HomeDivider.Parent = HomePage
local AuthorCard = Instance.new("Frame")
AuthorCard.Size = UDim2.new(1, -30, 0, 56)
AuthorCard.Position = UDim2.new(0, 15, 0, 60)
AuthorCard.BackgroundColor3 = Colors.PanelLight
AuthorCard.BorderSizePixel = 0
AuthorCard.Parent = HomePage
UI.Corner(AuthorCard, 8)
UI.Stroke(AuthorCard, Colors.Border, 1, 0.5)
local AuthorIcon = Instance.new("TextLabel")
AuthorIcon.Size = UDim2.new(0, 36, 0, 36)
AuthorIcon.Position = UDim2.new(0, 10, 0.5, -18)
AuthorIcon.BackgroundColor3 = Colors.Accent
AuthorIcon.Text = "👤"
AuthorIcon.TextColor3 = Colors.Text
AuthorIcon.Font = Enum.Font.Arial
AuthorIcon.TextSize = 20
AuthorIcon.Parent = AuthorCard
UI.Corner(AuthorIcon, 9)
local AuthorTag = Instance.new("TextLabel")
AuthorTag.Size = UDim2.new(1, -60, 0, 14)
AuthorTag.Position = UDim2.new(0, 56, 0, 12)
AuthorTag.BackgroundTransparency = 1
AuthorTag.Text = "AUTHOR"
AuthorTag.TextColor3 = Colors.TextDim
AuthorTag.Font = Enum.Font.GothamBold
AuthorTag.TextSize = 9
AuthorTag.TextXAlignment = Enum.TextXAlignment.Left
AuthorTag.Parent = AuthorCard
local AuthorName = Instance.new("TextLabel")
AuthorName.Size = UDim2.new(1, -60, 0, 20)
AuthorName.Position = UDim2.new(0, 56, 0, 26)
AuthorName.BackgroundTransparency = 1
AuthorName.Text = "Guest"
AuthorName.TextColor3 = Colors.Text
AuthorName.Font = Enum.Font.GothamBold
AuthorName.TextSize = 14
AuthorName.TextXAlignment = Enum.TextXAlignment.Left
AuthorName.Parent = AuthorCard
local AINote = Instance.new("Frame")
AINote.Size = UDim2.new(1, -30, 0, 100)
AINote.Position = UDim2.new(0, 15, 0, 130)
AINote.BackgroundColor3 = Color3.fromRGB(28, 34, 42)
AINote.BorderSizePixel = 0
AINote.Parent = HomePage
UI.Corner(AINote, 8)
UI.Stroke(AINote, Colors.Accent2, 1, 0.6)
local AINoteTitle = Instance.new("TextLabel")
AINoteTitle.Size = UDim2.new(1, -20, 0, 16)
AINoteTitle.Position = UDim2.new(0, 10, 0, 8)
AINoteTitle.BackgroundTransparency = 1
AINoteTitle.Text = "ℹ NOTE"
AINoteTitle.TextColor3 = Colors.Accent2
AINoteTitle.Font = Enum.Font.GothamBold
AINoteTitle.TextSize = 10
AINoteTitle.TextXAlignment = Enum.TextXAlignment.Left
AINoteTitle.Parent = AINote
local AINoteText = Instance.new("TextLabel")
AINoteText.Size = UDim2.new(1, -20, 1, -30)
AINoteText.Position = UDim2.new(0, 10, 0, 26)
AINoteText.BackgroundTransparency = 1
AINoteText.Text = "This script was written with the assistance of AI. It is provided for personal use. The author is not responsible for any consequences of use."
AINoteText.TextColor3 = Colors.Text
AINoteText.Font = Enum.Font.Gotham
AINoteText.TextSize = 11
AINoteText.TextWrapped = true
AINoteText.TextXAlignment = Enum.TextXAlignment.Left
AINoteText.TextYAlignment = Enum.TextYAlignment.Top
AINoteText.Parent = AINote
-- PAGE: FARM
local FarmPage = CreatePage("Farm")
local FarmStatusCard = Instance.new("Frame")
FarmStatusCard.Size = UDim2.new(1, -30, 0, 70)
FarmStatusCard.Position = UDim2.new(0, 15, 0, 20)
FarmStatusCard.BackgroundColor3 = Colors.PanelLight
FarmStatusCard.BorderSizePixel = 0
FarmStatusCard.Parent = FarmPage
UI.Corner(FarmStatusCard, 10)
local FarmStatusDot = Instance.new("Frame")
FarmStatusDot.Size = UDim2.new(0, 12, 0, 12)
FarmStatusDot.Position = UDim2.new(0, 16, 0, 16)
FarmStatusDot.BackgroundColor3 = Colors.TextDim
FarmStatusDot.BorderSizePixel = 0
FarmStatusDot.Parent = FarmStatusCard
UI.Corner(FarmStatusDot, 6)
local FarmStatusTitle = Instance.new("TextLabel")
FarmStatusTitle.Size = UDim2.new(1, -50, 0, 18)
FarmStatusTitle.Position = UDim2.new(0, 38, 0, 12)
FarmStatusTitle.BackgroundTransparency = 1
FarmStatusTitle.Text = "Status: Idle"
FarmStatusTitle.TextColor3 = Colors.Text
FarmStatusTitle.Font = Enum.Font.GothamBold
FarmStatusTitle.TextSize = 13
FarmStatusTitle.TextXAlignment = Enum.TextXAlignment.Left
FarmStatusTitle.Parent = FarmStatusCard
local FarmStatusLabel = Instance.new("TextLabel")
FarmStatusLabel.Size = UDim2.new(1, -50, 0, 20)
FarmStatusLabel.Position = UDim2.new(0, 38, 0, 32)
FarmStatusLabel.BackgroundTransparency = 1
FarmStatusLabel.Text = "Ready to start"
FarmStatusLabel.TextColor3 = Colors.TextDim
FarmStatusLabel.Font = Enum.Font.Gotham
FarmStatusLabel.TextSize = 11
FarmStatusLabel.TextXAlignment = Enum.TextXAlignment.Left
FarmStatusLabel.Parent = FarmStatusCard
local ToggleButton = Instance.new("TextButton")
ToggleButton.Size = UDim2.new(1, -30, 0, 60)
ToggleButton.Position = UDim2.new(0, 15, 0, 110)
ToggleButton.BackgroundColor3 = Colors.Red
ToggleButton.Text = "START FARM"
ToggleButton.TextColor3 = Colors.Text
ToggleButton.Font = Enum.Font.GothamBold
ToggleButton.TextSize = 18
ToggleButton.AutoButtonColor = false
ToggleButton.Parent = FarmPage
UI.Corner(ToggleButton, 12)
local ToggleStroke = UI.Stroke(ToggleButton, Colors.Red, 2, 0.3)
local ToggleGradient = UI.Gradient(ToggleButton, Colors.Red, Color3.fromRGB(180, 50, 70), 90)
ToggleButton.MouseEnter:Connect(function()
TweenService:Create(ToggleButton, TweenInfo.new(0.15), {BackgroundColor3 = State.IsFarming and Color3.fromRGB(60, 220, 130) or Color3.fromRGB(240, 90, 110)}):Play()
end)
ToggleButton.MouseLeave:Connect(function()
TweenService:Create(ToggleButton, TweenInfo.new(0.15), {BackgroundColor3 = State.IsFarming and Colors.Green or Colors.Red}):Play()
end)
local HotkeyInfo = Instance.new("TextLabel")
HotkeyInfo.Size = UDim2.new(1, -30, 0, 20)
HotkeyInfo.Position = UDim2.new(0, 15, 0, 185)
HotkeyInfo.BackgroundTransparency = 1
HotkeyInfo.Text = "Toggle Hotkey: " .. Config.ToggleKey
HotkeyInfo.TextColor3 = Colors.TextDim
HotkeyInfo.Font = Enum.Font.Gotham
HotkeyInfo.TextSize = 11
HotkeyInfo.TextXAlignment = Enum.TextXAlignment.Center
HotkeyInfo.Parent = FarmPage
-- PAGE: STATS
local StatsPage = CreatePage("Stats")
local function CreateStatCard(yPos, titleText, valueText, accentColor)
local card = Instance.new("Frame")
card.Size = UDim2.new(1, -30, 0, 55)
card.Position = UDim2.new(0, 15, 0, yPos)
card.BackgroundColor3 = Colors.PanelLight
card.BorderSizePixel = 0
card.Parent = StatsPage
UI.Corner(card, 10)
UI.Stroke(card, Colors.Border, 1, 0.5)
local accent = Instance.new("Frame")
accent.Size = UDim2.new(0, 4, 1, -16)
accent.Position = UDim2.new(0, 8, 0, 8)
accent.BackgroundColor3 = accentColor
accent.BorderSizePixel = 0
accent.Parent = card
UI.Corner(accent, 2)
local lbl = Instance.new("TextLabel")
lbl.Size = UDim2.new(1, -30, 0, 16)
lbl.Position = UDim2.new(0, 22, 0, 10)
lbl.BackgroundTransparency = 1
lbl.Text = titleText
lbl.TextColor3 = Colors.TextDim
lbl.Font = Enum.Font.GothamBold
lbl.TextSize = 10
lbl.TextXAlignment = Enum.TextXAlignment.Left
lbl.Parent = card
local val = Instance.new("TextLabel")
val.Size = UDim2.new(1, -30, 0, 24)
val.Position = UDim2.new(0, 22, 0, 26)
val.BackgroundTransparency = 1
val.Text = valueText
val.TextColor3 = Colors.Text
val.Font = Enum.Font.GothamBold
val.TextSize = 17
val.TextXAlignment = Enum.TextXAlignment.Left
val.Parent = card
return val
end
local StatCollectedVal = CreateStatCard(15, "GHOSTS COLLECTED", "0", Colors.Accent)
local StatEarnedVal = CreateStatCard(78, "CANDY EARNED", "0", Colors.Yellow)
local StatTimeVal = CreateStatCard(141, "SESSION TIME", "00:00:00", Colors.Accent2)
local StatRateVal = CreateStatCard(204, "GHOSTS PER SECOND", "0.00", Colors.Green)
-- PAGE: SETTINGS
local SettingsPage = CreatePage("Settings")
local function CreateSettingRow(yPos, labelText, defaultVal, key, min, max, isInt)
local Label = Instance.new("TextLabel")
Label.Size = UDim2.new(0, 180, 0, 26)
Label.Position = UDim2.new(0, 15, 0, yPos)
Label.BackgroundTransparency = 1
Label.Text = labelText
Label.TextColor3 = Colors.Text
Label.Font = Enum.Font.Gotham
Label.TextSize = 12
Label.TextXAlignment = Enum.TextXAlignment.Left
Label.Parent = SettingsPage
local Box = Instance.new("TextBox")
Box.Size = UDim2.new(0, 80, 0, 26)
Box.Position = UDim2.new(1, -95, 0, yPos)
Box.BackgroundColor3 = Colors.PanelLight
Box.Text = tostring(defaultVal)
Box.TextColor3 = Colors.Text
Box.Font = Enum.Font.GothamMedium
Box.TextSize = 12
Box.ClearTextOnFocus = false
Box.Parent = SettingsPage
UI.Corner(Box, 8)
local boxStroke = UI.Stroke(Box, Colors.Border, 1, 0.4)
Box.Focused:Connect(function()
TweenService:Create(boxStroke, TweenInfo.new(0.15), {Color = Colors.Accent, Transparency = 0}):Play()
end)
Box.FocusLost:Connect(function()
TweenService:Create(boxStroke, TweenInfo.new(0.15), {Color = Colors.Border, Transparency = 0.4}):Play()
local n = tonumber(Box.Text)
if n and n >= min and n <= max then
Config[key] = isInt and math.floor(n) or n
SaveConfig()
else
Box.Text = tostring(Config[key])
end
-- Снимаем фокус, чтобы не мешать InputBlocked
if UserInputService:GetFocusedTextBox() == Box then
Box:ReleaseFocus()
end
end)
return Box
end
CreateSettingRow(15, "Hold time (sec)", Config.HoldTime, "HoldTime", 0.1, 20, false)
CreateSettingRow(50, "Delay after capture (s)", Config.DelayAfterCollect, "DelayAfterCollect", 0, 10, false)
CreateSettingRow(85, "Delay between ghosts (s)", Config.DelayNextGhost, "DelayNextGhost", 0, 10, false)
CreateSettingRow(120, "Detection radius (studs)", Config.DetectRadius, "DetectRadius", 1, 1000, true)
CreateSettingRow(155, "Capture range (studs)", Config.CaptureRange, "CaptureRange", 1, 50, true)
CreateSettingRow(190, "Candy per ghost", Config.CandyPerGhost, "CandyPerGhost", 0, 1000, true)
local SettingsDivider = Instance.new("Frame")
SettingsDivider.Size = UDim2.new(1, -30, 0, 1)
SettingsDivider.Position = UDim2.new(0, 15, 0, 230)
SettingsDivider.BackgroundColor3 = Colors.Border
SettingsDivider.BorderSizePixel = 0
SettingsDivider.Parent = SettingsPage
local HotkeyLabel = Instance.new("TextLabel")
HotkeyLabel.Size = UDim2.new(0, 180, 0, 26)
HotkeyLabel.Position = UDim2.new(0, 15, 0, 242)
HotkeyLabel.BackgroundTransparency = 1
HotkeyLabel.Text = "Toggle hotkey"
HotkeyLabel.TextColor3 = Colors.Text
HotkeyLabel.Font = Enum.Font.Gotham
HotkeyLabel.TextSize = 12
HotkeyLabel.TextXAlignment = Enum.TextXAlignment.Left
HotkeyLabel.Parent = SettingsPage
local HotkeyButton = Instance.new("TextButton")
HotkeyButton.Size = UDim2.new(0, 80, 0, 26)
HotkeyButton.Position = UDim2.new(1, -95, 0, 242)
HotkeyButton.BackgroundColor3 = Colors.PanelLight
HotkeyButton.Text = Config.ToggleKey
HotkeyButton.TextColor3 = Colors.Text
HotkeyButton.Font = Enum.Font.GothamBold
HotkeyButton.TextSize = 12
HotkeyButton.AutoButtonColor = false
HotkeyButton.Parent = SettingsPage
UI.Corner(HotkeyButton, 8)
local hotkeyStroke = UI.Stroke(HotkeyButton, Colors.Border, 1, 0.4)
local awaitingKey = false
HotkeyButton.MouseButton1Click:Connect(function()
awaitingKey = true
HotkeyButton.Text = "..."
TweenService:Create(hotkeyStroke, TweenInfo.new(0.15), {Color = Colors.Accent, Transparency = 0}):Play()
end)
-- // GHOST LOGIC
local function GetMyGhosts()
local ghosts = {}
for _, folder in pairs(PATH_TO_HOLLOW_HARVEST:GetChildren()) do
if folder:IsA("Folder") and string.find(folder.Name, tostring(LocalPlayer.UserId)) then
for _, ghost in pairs(folder:GetChildren()) do
if ghost:IsA("Model") and string.find(ghost.Name, "PersonalGhost_") then
table.insert(ghosts, ghost)
end
end
end
end
return ghosts
end
local function GetGhostPosition(ghost)
if not ghost or not ghost.Parent then return nil end
local cached = State.GhostPositionCache[ghost]
local now = tick()
if cached and (now - cached.time) < State.PositionCacheTime then
return cached.pos
end
local pos = nil
local primary = ghost.PrimaryPart
if primary then
pos = primary.Position
else
local humanoid = ghost:FindFirstChildOfClass("Humanoid")
local humanoidRoot = humanoid and humanoid.RootPart
for _, part in pairs(ghost:GetDescendants()) do
if part:IsA("BasePart") and part.Transparency < 1 and part ~= humanoidRoot then
pos = part.Position
break
end
end
if not pos then
local anyPart = ghost:FindFirstChildWhichIsA("BasePart")
if anyPart then pos = anyPart.Position end
end
end
if pos then
State.GhostPositionCache[ghost] = {pos = pos, time = now}
end
return pos
end
local function GetGhostDistance(ghost, playerPos)
if not ghost or not ghost.Parent then return math.huge end
local minDist = math.huge
local humanoid = ghost:FindFirstChildOfClass("Humanoid")
local humanoidRoot = humanoid and humanoid.RootPart
for _, part in pairs(ghost:GetDescendants()) do
if part:IsA("BasePart") and part.Transparency < 1 and part ~= humanoidRoot then
local d = (part.Position - playerPos).Magnitude
if d < minDist then minDist = d end
end
end
if minDist == math.huge then
local pos = GetGhostPosition(ghost)
if pos then minDist = (pos - playerPos).Magnitude end
end
return minDist
end
local function GetGhostsNear(position, radius)
local near = {}
for _, ghost in ipairs(GetMyGhosts()) do
local pos = GetGhostPosition(ghost)
if pos and (pos - position).Magnitude <= radius then
table.insert(near, ghost)
end
end
return near
end
local function ChaseGhost(ghost, closeDistance)
closeDistance = closeDistance or 3
local character = LocalPlayer.Character
if not character then return false end
local humanoid = character:FindFirstChildOfClass("Humanoid")
local root = character:FindFirstChild("HumanoidRootPart")
if not humanoid or not root then return false end
while State.IsFarming do
if not ghost or not ghost.Parent then
humanoid:MoveTo(root.Position)
return false
end
local ghostPos = GetGhostPosition(ghost)
if not ghostPos then
humanoid:MoveTo(root.Position)
return false
end
if (ghostPos - root.Position).Magnitude <= closeDistance then
humanoid:MoveTo(root.Position)
return true
end
humanoid:MoveTo(ghostPos)
task.wait(State.ChaseUpdateRate)
end
humanoid:MoveTo(root.Position)
return false
end
-- // Захват: держим, пока в радиусе; отпускаем при выходе
local function CaptureGhost(ghostList, StatusLabel)
local character = LocalPlayer.Character
if not character then return false end
local humanoid = character:FindFirstChildOfClass("Humanoid")
local root = character:FindFirstChild("HumanoidRootPart")
if not humanoid or not root then return false end
-- Ближайший живой
local target, targetDist = nil, math.huge
for _, g in ipairs(ghostList) do
if g and g.Parent then
local pos = GetGhostPosition(g)
if pos then
local d = (pos - root.Position).Magnitude
if d < targetDist then
target, targetDist = g, d
end
end
end
end
if not target then return false end
if targetDist > Config.CaptureRange then
SetStatus("Too far (" .. math.floor(targetDist) .. "/" .. Config.CaptureRange .. ")")
return false
end
local ghostId = string.match(target.Name, "PersonalGhost_(.+)")
if not ghostId then return false end
-- BeginCapture
if CurrentCaptureId ~= ghostId then
pcall(function() Action:FireServer("BeginCapture", ghostId) end)
CurrentCaptureId = ghostId
end
SetStatus("Capturing " .. ghostId .. "...")
local beginTime = tick()
local maxDuration = Config.HoldTime
while State.IsFarming and (tick() - beginTime) < maxDuration do
if not target or not target.Parent then
SetStatus("Captured!")
CurrentCaptureId = nil
return true
end
local pos = GetGhostPosition(target)
if not pos then
CurrentCaptureId = nil
return false
end
local dist = (pos - root.Position).Magnitude
if dist > Config.CaptureRange then
SetStatus("Out of range...")
SendEndCapture()
CurrentCaptureId = nil
humanoid:MoveTo(root.Position)
return false
end
-- Переотправляем BeginCapture, если игра сбросила
if CurrentCaptureId ~= ghostId then
pcall(function() Action:FireServer("BeginCapture", ghostId) end)
CurrentCaptureId = ghostId
end
humanoid:MoveTo(pos)
task.wait(0.05)
end
humanoid:MoveTo(root.Position)
return false
end
-- // FARM LOOP
local function FarmLoop()
while State.IsFarming do
local character = LocalPlayer.Character
local root = character and character:FindFirstChild("HumanoidRootPart")
if not root then task.wait(0.3) continue end
local ghosts = GetMyGhosts()
if #ghosts == 0 then
SetStatus("Waiting for ghosts...")
if CurrentCaptureId then
SendEndCapture()
CurrentCaptureId = nil
end
task.wait(0.2)
continue
end
local closest, closestDist = nil, math.huge
for _, ghost in ipairs(ghosts) do
local dist = GetGhostDistance(ghost, root.Position)
if dist <= Config.DetectRadius and dist < closestDist then
closest, closestDist = ghost, dist
end
end
if not closest then
SetStatus("No ghosts in radius")
if CurrentCaptureId then
SendEndCapture()
CurrentCaptureId = nil
end
task.wait(0.5)
continue
end
if closestDist > Config.CaptureRange then
if CurrentCaptureId then
SendEndCapture()
CurrentCaptureId = nil
end
end
SetStatus("Chasing ghost (" .. math.floor(closestDist) .. " st)...")
local caught = ChaseGhost(closest, Config.CaptureRange - 1)
if not caught then
SetStatus("Ghost gone, next...")
if Config.DelayNextGhost > 0 then task.wait(Config.DelayNextGhost) end
continue
end
local ghostPos = GetGhostPosition(closest)
local group = {closest}
if ghostPos then
local nearby = GetGhostsNear(ghostPos, Config.CaptureRange)
if #nearby > 0 then group = nearby end
end
local beforeCount = #group
CaptureGhost(group, FarmStatusLabel)
local remaining = 0
for _, g in ipairs(group) do
if g and g.Parent then remaining = remaining + 1 end
end
local collectedNow = beforeCount - remaining
State.Collected = State.Collected + collectedNow
if remaining == 0 then
SetStatus("Captured " .. beforeCount .. "!")
CurrentCaptureId = nil
else
SetStatus("Captured " .. collectedNow .. "/" .. beforeCount)
end
for ghost, _ in pairs(State.GhostPositionCache) do
if not ghost.Parent then
State.GhostPositionCache[ghost] = nil
end
end
if Config.DelayAfterCollect > 0 then
task.wait(Config.DelayAfterCollect)
end
end
if CurrentCaptureId then
SendEndCapture()
CurrentCaptureId = nil
end
end
-- // TOGGLE
local function ToggleFarm()
State.IsFarming = not State.IsFarming
if State.IsFarming then
-- В safe-режиме скрываем GUI, чтобы не мешать InputBlocked
if not HasHook then
ScreenGui.Enabled = false
end
MiniStatus.Visible = true
State.Collected = 0
State.SessionStart = tick()
State.TotalTime = 0
ToggleButton.Text = "STOP FARM"
TweenService:Create(ToggleButton, TweenInfo.new(0.25), {BackgroundColor3 = Colors.Green}):Play()
ToggleGradient.Color = ColorSequence.new(Colors.Green, Color3.fromRGB(50, 160, 100))
ToggleStroke.Color = Colors.Green
FarmStatusTitle.Text = "Status: Active"
TweenService:Create(FarmStatusDot, TweenInfo.new(0.2), {BackgroundColor3 = Colors.Green}):Play()
SetStatus("Starting...")
task.spawn(FarmLoop)
else
if not HasHook then
ScreenGui.Enabled = true
end
MiniStatus.Visible = false
ToggleButton.Text = "START FARM"
TweenService:Create(ToggleButton, TweenInfo.new(0.25), {BackgroundColor3 = Colors.Red}):Play()
ToggleGradient.Color = ColorSequence.new(Colors.Red, Color3.fromRGB(180, 50, 70))
ToggleStroke.Color = Colors.Red
FarmStatusTitle.Text = "Status: Idle"
TweenService:Create(FarmStatusDot, TweenInfo.new(0.2), {BackgroundColor3 = Colors.TextDim}):Play()
SetStatus("Stopped")
if CurrentCaptureId then
SendEndCapture()
CurrentCaptureId = nil
end
local character = LocalPlayer.Character
local humanoid = character and character:FindFirstChildOfClass("Humanoid")
if humanoid then
humanoid:MoveTo(humanoid.Parent.HumanoidRootPart.Position)
end
end
end
ToggleButton.MouseButton1Click:Connect(ToggleFarm)
-- // INPUT
UserInputService.InputBegan:Connect(function(input, gameProcessed)
if gameProcessed then return end
if awaitingKey then
if input.UserInputType == Enum.UserInputType.Keyboard then
Config.ToggleKey = input.KeyCode.Name
HotkeyButton.Text = Config.ToggleKey
HotkeyInfo.Text = "Toggle Hotkey: " .. Config.ToggleKey
awaitingKey = false
TweenService:Create(hotkeyStroke, TweenInfo.new(0.15), {Color = Colors.Border, Transparency = 0.4}):Play()
SaveConfig()
end
return
end
if input.KeyCode.Name == Config.ToggleKey then
if tick() - State.LastToggle < 0.3 then return end
State.LastToggle = tick()
ToggleFarm()
end
end)
-- // STATS LOOP
task.spawn(function()
while true do
task.wait(0.1)
StatCollectedVal.Text = tostring(State.Collected)
StatEarnedVal.Text = tostring(State.Collected * Config.CandyPerGhost)
if State.IsFarming and State.SessionStart > 0 then
State.TotalTime = tick() - State.SessionStart
end
local t = math.floor(State.TotalTime)
local h = math.floor(t / 3600)
local m = math.floor((t % 3600) / 60)
local s = t % 60
StatTimeVal.Text = string.format("%02d:%02d:%02d", h, m, s)
if State.TotalTime > 0 and State.Collected > 0 then
StatRateVal.Text = string.format("%.2f", State.Collected / State.TotalTime)
else
StatRateVal.Text = "0.00"
end
end
end)
-- // CLOSE
CloseButton.MouseButton1Click:Connect(function()
if State.IsFarming then ToggleFarm() end
local fadeOut = TweenService:Create(MainFrame, TweenInfo.new(0.2), {
BackgroundTransparency = 1,
Size = UDim2.new(0, 300, 0, 440),
})
fadeOut:Play()
fadeOut.Completed:Connect(function()
MainFrame.Visible = false
MainFrame.BackgroundTransparency = 0
MainFrame.Size = UDim2.new(0, 340, 0, 500)
end)
end)
LocalPlayer.CharacterAdded:Connect(function()
State.GhostPositionCache = {}
end)
-- // TAB INIT
CreateTabButton("Home", "Home")
CreateTabButton("Farm", "Farm")
CreateTabButton("Stats", "Stats")
CreateTabButton("Settings", "Settings")
TabButtons["Home"].MouseButton1Click:Connect(function() SwitchTab("Home") end)
TabButtons["Farm"].MouseButton1Click:Connect(function() SwitchTab("Farm") end)
TabButtons["Stats"].MouseButton1Click:Connect(function() SwitchTab("Stats") end)
TabButtons["Settings"].MouseButton1Click:Connect(function() SwitchTab("Settings") end)
SwitchTab("Home")Review the source before using it. Executions count successful copies, capped at 10 per user and network per script in 24 hours.
Community discussion
0Start the conversation.


Your community, in one place