-- [[ Rscripts Risk Notice ]] -- This script is not verified by rscripts.net. 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 Rscripts 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")