Created
September 15, 2026 01:29
-
-
Save Surpprf/46462b97725ed2e1370d53caebca2d91 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| _G.HopLink = _G.HopLink or "YOUR_GIST_RAW_LINK_HERE" | |
| if _G.ActiveConnections then | |
| for _, conn in pairs(_G.ActiveConnections) do | |
| if typeof(conn) == "RBXScriptConnection" then | |
| conn:Disconnect() | |
| end | |
| end | |
| end | |
| _G.ActiveConnections = {} | |
| if _G.ActiveThreads then | |
| for _, thread in pairs(_G.ActiveThreads) do | |
| if typeof(thread) == "thread" then | |
| pcall(task.cancel, thread) | |
| end | |
| end | |
| end | |
| _G.ActiveThreads = {} | |
| -- Global state preservation | |
| _G.autofarmEnabled = _G.autofarmEnabled or false | |
| _G.cashDropSniperEnabled = _G.cashDropSniperEnabled or false | |
| _G.isSpamming = _G.isSpamming or false | |
| _G.SpamE = _G.SpamE or false | |
| _G.RestrictedPlayerScannerActive = _G.RestrictedPlayerScannerActive or false | |
| _G.FeaturesToRestore = _G.FeaturesToRestore or {} | |
| -- Services | |
| local player = game.Players.LocalPlayer | |
| local UserInputService = game:GetService("UserInputService") | |
| local TweenService = game:GetService("TweenService") | |
| local RunService = game:GetService("RunService") | |
| local VirtualInputManager = game:GetService("VirtualInputManager") | |
| local HttpService = game:GetService("HttpService") | |
| local TeleportService = game:GetService("TeleportService") | |
| local CoreGui = game:GetService("CoreGui") | |
| local ReplicatedStorage = game:GetService("ReplicatedStorage") | |
| local Workspace = game:GetService("Workspace") | |
| -- Wait for game load | |
| if not game:IsLoaded() then | |
| game.Loaded:Wait() | |
| end | |
| -- Intro skip | |
| task.spawn(function() | |
| pcall(function() | |
| local playerGui = player:WaitForChild("PlayerGui", 15) | |
| if not playerGui then return end | |
| local introGui = playerGui:FindFirstChild("INTRO") or playerGui:WaitForChild("INTRO", 10) | |
| if not introGui then return end | |
| local introScript = introGui:FindFirstChildOfClass("LocalScript") | |
| local loadedVal = player:FindFirstChild("Loaded") | |
| if loadedVal and loadedVal:IsA("BoolValue") then | |
| loadedVal.Value = true | |
| end | |
| if introScript and getsenv then | |
| pcall(function() | |
| local env = getsenv(introScript) | |
| if env.ReturnCamera then env.ReturnCamera() end | |
| if env.FinalOfIntro then env.FinalOfIntro() end | |
| end) | |
| end | |
| if ReplicatedStorage:FindFirstChild("Events") and ReplicatedStorage.Events:FindFirstChild("IntroEnd") then | |
| pcall(function() | |
| ReplicatedStorage.Events.IntroEnd:FireServer() | |
| end) | |
| end | |
| local playBtn = introGui:FindFirstChild("PlayButton") | |
| if playBtn and getconnections then | |
| for _, sig in ipairs({playBtn.MouseButton1Click, playBtn.Activated, playBtn.MouseButton1Down}) do | |
| for _, conn in ipairs(getconnections(sig)) do | |
| if conn.Function then | |
| task.spawn(conn.Function) | |
| end | |
| end | |
| end | |
| end | |
| local camera = Workspace.CurrentCamera | |
| if camera then | |
| camera.CameraType = Enum.CameraType.Custom | |
| if player.Character and player.Character:FindFirstChildOfClass("Humanoid") then | |
| camera.CameraSubject = player.Character:FindFirstChildOfClass("Humanoid") | |
| end | |
| end | |
| pcall(function() | |
| local PlayerScripts = player:FindFirstChild("PlayerScripts") | |
| if PlayerScripts and PlayerScripts:FindFirstChild("PlayerModule") then | |
| local controls = require(PlayerScripts.PlayerModule):GetControls() | |
| controls:Enable() | |
| end | |
| end) | |
| introGui.Enabled = false | |
| introGui:Destroy() | |
| end) | |
| end) | |
| -- Clean old GUIs | |
| for _, guiName in ipairs({"AestheticGui", "CustomNotificationGui"}) do | |
| pcall(function() | |
| local playerGui = player:FindFirstChild("PlayerGui") | |
| if playerGui then | |
| local staleGui = playerGui:FindFirstChild(guiName) | |
| if staleGui then | |
| staleGui:Destroy() | |
| end | |
| end | |
| end) | |
| end | |
| local guiPosition = UDim2.new(0.5, -90, 0, 10) | |
| local function trackConnection(conn) | |
| table.insert(_G.ActiveConnections, conn) | |
| return conn | |
| end | |
| local function trackThread(thread) | |
| table.insert(_G.ActiveThreads, thread) | |
| return thread | |
| end | |
| local function createCustomNotification(header, message) | |
| pcall(function() | |
| local notification = Instance.new("Frame") | |
| notification.Name = "CustomNotification" | |
| notification.BackgroundColor3 = Color3.fromRGB(25, 25, 30) | |
| notification.Size = UDim2.new(0, 220, 0, 80) | |
| notification.Position = UDim2.new(1, 250, 1, -10) | |
| notification.AnchorPoint = Vector2.new(1, 1) | |
| notification.BorderSizePixel = 0 | |
| notification.ClipsDescendants = true | |
| local UICorner = Instance.new("UICorner") | |
| UICorner.CornerRadius = UDim.new(0, 10) | |
| UICorner.Parent = notification | |
| local stroke = Instance.new("UIStroke") | |
| stroke.Color = Color3.fromRGB(55, 55, 65) | |
| stroke.Thickness = 1 | |
| stroke.Parent = notification | |
| local headerLabel = Instance.new("TextLabel") | |
| headerLabel.Name = "Header" | |
| headerLabel.BackgroundTransparency = 1 | |
| headerLabel.Size = UDim2.new(1, -10, 0, 30) | |
| headerLabel.Position = UDim2.new(0, 5, 0, 5) | |
| headerLabel.Text = header | |
| headerLabel.TextColor3 = Color3.fromRGB(235, 235, 245) | |
| headerLabel.TextScaled = true | |
| headerLabel.Font = Enum.Font.GothamBold | |
| headerLabel.TextSize = 18 | |
| headerLabel.TextXAlignment = Enum.TextXAlignment.Center | |
| headerLabel.TextYAlignment = Enum.TextYAlignment.Center | |
| headerLabel.Parent = notification | |
| local messageLabel = Instance.new("TextLabel") | |
| messageLabel.Name = "Message" | |
| messageLabel.BackgroundTransparency = 1 | |
| messageLabel.Size = UDim2.new(1, -10, 1, -40) | |
| messageLabel.Position = UDim2.new(0, 5, 0, 35) | |
| messageLabel.Text = message | |
| messageLabel.TextColor3 = Color3.fromRGB(180, 180, 195) | |
| messageLabel.TextScaled = true | |
| messageLabel.Font = Enum.Font.Gotham | |
| messageLabel.TextSize = 12 | |
| messageLabel.TextXAlignment = Enum.TextXAlignment.Center | |
| messageLabel.TextYAlignment = Enum.TextYAlignment.Top | |
| messageLabel.TextWrapped = true | |
| messageLabel.Parent = notification | |
| local screenGui = Instance.new("ScreenGui") | |
| screenGui.Name = "CustomNotificationGui" | |
| screenGui.Parent = player:WaitForChild("PlayerGui", 10) | |
| notification.Parent = screenGui | |
| local function slideIn() | |
| TweenService:Create(notification, TweenInfo.new(0.5, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), { | |
| Position = UDim2.new(1, -10, 1, -10) | |
| }):Play() | |
| end | |
| local function slideOut() | |
| local tween = TweenService:Create(notification, TweenInfo.new(0.5, Enum.EasingStyle.Quint, Enum.EasingDirection.In), { | |
| Position = UDim2.new(1, 250, 1, -10) | |
| }) | |
| tween:Play() | |
| trackConnection(tween.Completed:Connect(function() | |
| screenGui:Destroy() | |
| end)) | |
| end | |
| trackThread(task.spawn(function() | |
| slideIn() | |
| task.wait(4) | |
| if notification.Parent then | |
| slideOut() | |
| end | |
| end)) | |
| end) | |
| end | |
| local restrictedPlayers = { | |
| "emiromania3", "GamerGardenia", "nsomniakk", "Discoperiet", "0bungxa", | |
| "XoAngelsLuckXo", "TrueMystic04", "TemmieTerra", "RealHeatDeveloper", | |
| "AwesomegamerPC", "ViralNorth" | |
| } | |
| local function startCheck() | |
| if _G.RestrictedPlayerScannerActive then | |
| createCustomNotification("Check", "Already Active") | |
| return | |
| end | |
| _G.RestrictedPlayerScannerActive = true | |
| createCustomNotification("Check", "Active") | |
| trackThread(task.spawn(function() | |
| while _G.RestrictedPlayerScannerActive do | |
| for _, plr in pairs(game.Players:GetPlayers()) do | |
| for _, restrictedName in ipairs(restrictedPlayers) do | |
| if string.lower(plr.Name) == string.lower(restrictedName) then | |
| createCustomNotification("Check", "Player Detected") | |
| task.wait(1.5) | |
| _G.RestrictedPlayerScannerActive = false | |
| pcall(function() game:Shutdown() end) | |
| return | |
| end | |
| end | |
| end | |
| task.wait(1) | |
| end | |
| end)) | |
| end | |
| local spamEThread = nil | |
| local function startSpamELoop() | |
| if spamEThread then return end | |
| spamEThread = task.spawn(function() | |
| while _G.SpamE do | |
| for i = 1, 75 do | |
| if not _G.SpamE then break end | |
| VirtualInputManager:SendKeyEvent(true, Enum.KeyCode.E, false, game) | |
| task.wait(0.002) | |
| VirtualInputManager:SendKeyEvent(false, Enum.KeyCode.E, false, game) | |
| task.wait(0.002) | |
| end | |
| task.wait(0.01) | |
| end | |
| spamEThread = nil | |
| end) | |
| trackThread(spamEThread) | |
| end | |
| local function toggleSpamE() | |
| _G.SpamE = not _G.SpamE | |
| if _G.SpamE then | |
| startSpamELoop() | |
| createCustomNotification("Spam E", "Active") | |
| else | |
| createCustomNotification("Spam E", "Inactive") | |
| end | |
| end | |
| _G.SpamE = true | |
| startSpamELoop() | |
| local isHealing = false | |
| local isFalling = false | |
| local isDoingSmugglerRun = false | |
| local camera = workspace.CurrentCamera | |
| local cameraConnection = nil | |
| local robbedRegisters = {} | |
| local snipedDrops = {} | |
| local sniperThread = nil | |
| local POSITIONS = { | |
| HEAL = Vector3.new(-1146, -153, -966), | |
| SAFE = Vector3.new(-3029.5, 2331.1, -1955.1), | |
| SPECIAL_REGISTER = Vector3.new(-1005.2, 2.3, -116.8) | |
| } | |
| local RESTRICTED_ZONES = { | |
| {minX = -1000, maxX = -970, minZ = -120, maxZ = -100}, | |
| {minX = -1128, maxX = -1088, minZ = -810, maxZ = -750} | |
| } | |
| local SPECIAL_REGISTER_ZONE = { minX = -1035, maxX = -970, minZ = -140, maxZ = -100 } | |
| local BANNED_REGISTERS = { | |
| {-1004.93188, 2.22742605, -118.676834, 0, 0, 1, 0, 1, -0, -1, 0, 0} | |
| } | |
| local BANNED_CASH_LOCATION = { | |
| position = Vector3.new(-1288.16602, -0.954563677, -617.465027) | |
| } | |
| local SMUGGLER_RUN_POSITIONS = { | |
| START = Vector3.new(-1336, 2, -394), | |
| DROP_OFF = Vector3.new(-458, 2, -599) | |
| } | |
| local hopping = false | |
| -- IMPROVED QUEUE & HOP SYSTEM | |
| local function queueScriptImproved() | |
| local link = _G.HopLink | |
| if not link or link == "" or link == "YOUR_GIST_RAW_LINK_HERE" then return end | |
| local queueteleport = (syn and syn.queue_on_teleport) or queue_on_teleport or (fluxus and fluxus.queue_on_teleport) | |
| if not queueteleport then return end | |
| -- Encode state for restore | |
| local stateToRestore = { | |
| autofarm = _G.autofarmEnabled, | |
| cashsniper = _G.cashDropSniperEnabled, | |
| spamE = _G.SpamE, | |
| hopCounter = (_G.HopAttemptCounter or 0) + 1 | |
| } | |
| local stateJson = HttpService:JSONEncode(stateToRestore) | |
| -- Robust queued code with multiple retry strategies | |
| local queuedCode = [[ | |
| if not game:IsLoaded() then | |
| local loadStart = tick() | |
| while not game:IsLoaded() and (tick() - loadStart) < 15 do | |
| game.Loaded:Wait() | |
| end | |
| end | |
| task.wait(1.5) | |
| local link = "]] .. link .. [[" | |
| local stateJson = ']] .. stateJson .. [[' | |
| local maxRetries = 12 | |
| local success = false | |
| -- Try to restore state | |
| pcall(function() | |
| if HttpService and stateJson and stateJson ~= "" then | |
| local state = HttpService:JSONDecode(stateJson) | |
| _G.autofarmEnabled = state.autofarm or false | |
| _G.cashDropSniperEnabled = state.cashsniper or false | |
| _G.SpamE = state.spamE or false | |
| _G.HopAttemptCounter = state.hopCounter or 1 | |
| end | |
| end) | |
| -- Multiple load strategies | |
| for attempt = 1, maxRetries do | |
| local ok, err = pcall(function() | |
| local response = (request or http_request or (syn and syn.request) or (fluxus and fluxus.request))({ | |
| Url = link, | |
| Method = "GET", | |
| Timeout = 10 | |
| }) | |
| if response and response.Body then | |
| loadstring(response.Body)() | |
| success = true | |
| end | |
| end) | |
| if success then | |
| break | |
| end | |
| task.wait(2) | |
| end | |
| -- Fallback: direct loadstring | |
| if not success then | |
| pcall(function() | |
| loadstring(game:HttpGet(link))() | |
| end) | |
| end | |
| ]] | |
| pcall(queueteleport, queuedCode) | |
| end | |
| local function getValidServers() | |
| local servers = {} | |
| local requestFunction = request or http_request or (syn and syn.request) or (fluxus and fluxus.request) | |
| if requestFunction then | |
| local ok, req = pcall(function() | |
| return requestFunction({ | |
| Url = "https://games.roblox.com/v1/games/" .. game.PlaceId .. "/servers/Public?sortOrder=Desc&limit=100", | |
| Method = "GET", | |
| Timeout = 8 | |
| }) | |
| end) | |
| if ok and req and req.Body then | |
| local decodeOk, body = pcall(function() | |
| return HttpService:JSONDecode(req.Body) | |
| end) | |
| if decodeOk and body and body.data then | |
| for _, v in ipairs(body.data) do | |
| if type(v) == "table" and tonumber(v.playing) and tonumber(v.maxPlayers) | |
| and v.playing < v.maxPlayers and v.id ~= game.JobId then | |
| table.insert(servers, v.id) | |
| end | |
| end | |
| end | |
| end | |
| end | |
| return servers | |
| end | |
| local function serverHop() | |
| if hopping then return end | |
| hopping = true | |
| -- Queue before teleport | |
| queueScriptImproved() | |
| -- Brief delay to ensure queue registers | |
| task.wait(0.3) | |
| -- Find and teleport to valid server | |
| local servers = getValidServers() | |
| if #servers > 0 then | |
| pcall(function() | |
| TeleportService:TeleportToPlaceInstance(game.PlaceId, servers[math.random(1, #servers)], player) | |
| end) | |
| else | |
| -- Fallback: generic teleport | |
| pcall(function() | |
| TeleportService:Teleport(game.PlaceId, player) | |
| end) | |
| end | |
| -- Reset flag after safe delay | |
| task.wait(10) | |
| hopping = false | |
| end | |
| -- ErrorPrompt detection | |
| local function onErrorPrompt(child) | |
| if child and child.Name == "ErrorPrompt" and not hopping then | |
| hopping = true | |
| task.spawn(function() | |
| task.wait(0.5) | |
| pcall(serverHop) | |
| task.wait(12) | |
| hopping = false | |
| end) | |
| end | |
| end | |
| -- Hook into ErrorPrompt detection | |
| pcall(function() | |
| local function hookOverlay(overlay) | |
| if overlay then | |
| trackConnection(overlay.ChildAdded:Connect(onErrorPrompt)) | |
| for _, existing in ipairs(overlay:GetChildren()) do | |
| onErrorPrompt(existing) | |
| end | |
| end | |
| end | |
| local robloxPromptGui = CoreGui:FindFirstChild("RobloxPromptGui") | |
| if robloxPromptGui then | |
| hookOverlay(robloxPromptGui:FindFirstChild("promptOverlay")) | |
| end | |
| trackConnection(CoreGui.DescendantAdded:Connect(function(desc) | |
| if desc.Name == "promptOverlay" and desc.Parent and desc.Parent.Name == "RobloxPromptGui" then | |
| hookOverlay(desc) | |
| elseif desc.Name == "ErrorPrompt" then | |
| onErrorPrompt(desc) | |
| end | |
| end)) | |
| end) | |
| -- Continuous ErrorPrompt polling | |
| trackThread(task.spawn(function() | |
| while true do | |
| pcall(function() | |
| local promptGui = CoreGui:FindFirstChild("RobloxPromptGui") | |
| if promptGui then | |
| local overlay = promptGui:FindFirstChild("promptOverlay") | |
| if overlay then | |
| for _, child in ipairs(overlay:GetChildren()) do | |
| if child.Name == "ErrorPrompt" then | |
| onErrorPrompt(child) | |
| end | |
| end | |
| end | |
| end | |
| end) | |
| task.wait(1) | |
| end | |
| end)) | |
| local function lockTopDownCamera() | |
| camera.CameraType = Enum.CameraType.Scriptable | |
| if cameraConnection then cameraConnection:Disconnect() end | |
| cameraConnection = trackConnection(RunService.RenderStepped:Connect(function() | |
| local character = player.Character | |
| if character and character:FindFirstChild("Head") then | |
| local headPos = character.Head.Position | |
| camera.CFrame = CFrame.new(headPos + Vector3.new(0, 5, 0), headPos) | |
| end | |
| end)) | |
| end | |
| local function unlockCamera() | |
| if cameraConnection then | |
| cameraConnection:Disconnect() | |
| cameraConnection = nil | |
| end | |
| camera.CameraType = Enum.CameraType.Custom | |
| end | |
| local function rapidTeleportOnToggleOff() | |
| local targetPosition = Vector3.new(-1023, 57, -383) | |
| trackThread(task.spawn(function() | |
| for i = 1, 50 do | |
| if _G.autofarmEnabled or _G.cashDropSniperEnabled then break end | |
| if player.Character and player.Character:FindFirstChild("HumanoidRootPart") then | |
| local hrp = player.Character.HumanoidRootPart | |
| hrp.CFrame = CFrame.new(targetPosition) | |
| hrp.AssemblyLinearVelocity = Vector3.new(0, 0, 0) | |
| else | |
| break | |
| end | |
| task.wait(0.006) | |
| end | |
| end)) | |
| end | |
| local function toggleAutofarm() | |
| _G.autofarmEnabled = not _G.autofarmEnabled | |
| if _G.autofarmEnabled then | |
| _G.isSpamming = true | |
| lockTopDownCamera() | |
| createCustomNotification("AutoFarm", "Active") | |
| else | |
| _G.isSpamming = false | |
| unlockCamera() | |
| rapidTeleportOnToggleOff() | |
| createCustomNotification("AutoFarm", "Inactive") | |
| end | |
| end | |
| local function toggleCashDropSniper() | |
| _G.cashDropSniperEnabled = not _G.cashDropSniperEnabled | |
| if _G.cashDropSniperEnabled then | |
| createCustomNotification("CashDrop", "Active") | |
| sniperThread = trackThread(task.spawn(function() | |
| while _G.cashDropSniperEnabled do | |
| local char = player.Character | |
| if char and char:FindFirstChild("HumanoidRootPart") then | |
| local hrp = char.HumanoidRootPart | |
| local cashDropFound = nil | |
| for _, obj in ipairs(game.Workspace:GetChildren()) do | |
| if obj.Name == "CashDrop" and not snipedDrops[obj] then | |
| cashDropFound = obj | |
| break | |
| end | |
| end | |
| if cashDropFound then | |
| snipedDrops[cashDropFound] = true | |
| trackThread(task.delay(10, function() | |
| snipedDrops[cashDropFound] = nil | |
| end)) | |
| local targetPos | |
| if cashDropFound:IsA("Model") then | |
| targetPos = cashDropFound:GetPivot().Position | |
| elseif cashDropFound:IsA("BasePart") then | |
| targetPos = cashDropFound.Position | |
| end | |
| if targetPos then | |
| hrp.CFrame = CFrame.new(targetPos) | |
| hrp.AssemblyLinearVelocity = Vector3.new(0, 0, 0) | |
| task.wait(0.8) | |
| if char and char:FindFirstChild("HumanoidRootPart") then | |
| hrp.CFrame = CFrame.new(hrp.Position.X, 100000, hrp.Position.Z) | |
| hrp.AssemblyLinearVelocity = Vector3.new(0, 0, 0) | |
| end | |
| task.wait(2) | |
| end | |
| else | |
| if hrp.Position.Y < 90000 then | |
| hrp.CFrame = CFrame.new(hrp.Position.X, 100000, hrp.Position.Z) | |
| hrp.AssemblyLinearVelocity = Vector3.new(0, 0, 0) | |
| end | |
| end | |
| end | |
| task.wait(0.001) | |
| end | |
| end)) | |
| else | |
| createCustomNotification("CashDrop", "Inactive") | |
| if sniperThread then | |
| task.cancel(sniperThread) | |
| sniperThread = nil | |
| end | |
| rapidTeleportOnToggleOff() | |
| end | |
| end | |
| local function isPositionRestricted(position) | |
| for _, zone in ipairs(RESTRICTED_ZONES) do | |
| if position.X >= zone.minX and position.X <= zone.maxX and position.Z >= zone.minZ and position.Z <= zone.maxZ then | |
| return true | |
| end | |
| end | |
| return false | |
| end | |
| local function teleportPlayerToPosition(position, stayTime) | |
| if _G.autofarmEnabled and (position == POSITIONS.HEAL or not isPositionRestricted(position)) and player.Character and not isFalling and not isDoingSmugglerRun then | |
| local hrp = player.Character:FindFirstChild("HumanoidRootPart") | |
| if hrp then | |
| hrp.CFrame = CFrame.new(position + Vector3.new(0, 5, 0)) | |
| hrp.AssemblyLinearVelocity = Vector3.new(0, 0, 0) | |
| task.wait(stayTime) | |
| end | |
| end | |
| end | |
| local function modifyProximityPrompts(folderName) | |
| trackThread(task.spawn(function() | |
| local folder = game.Workspace:WaitForChild(folderName, 30) | |
| if not folder then return end | |
| local hookedPrompts = {} | |
| local function fixPrompt(prompt) | |
| if prompt:IsA("ProximityPrompt") then | |
| prompt.HoldDuration = 0 | |
| prompt.KeyboardKeyCode = Enum.KeyCode.E | |
| prompt.RequiresLineOfSight = false | |
| local parentModel = prompt.Parent and prompt.Parent.Parent | |
| if parentModel and parentModel.Name == "Cash Register" and not hookedPrompts[prompt] then | |
| hookedPrompts[prompt] = true | |
| trackConnection(prompt.Triggered:Connect(function() | |
| robbedRegisters[parentModel] = true | |
| trackThread(task.delay(300, function() | |
| robbedRegisters[parentModel] = nil | |
| end)) | |
| end)) | |
| end | |
| end | |
| end | |
| for _, desc in ipairs(folder:GetDescendants()) do | |
| fixPrompt(desc) | |
| end | |
| trackConnection(folder.DescendantAdded:Connect(fixPrompt)) | |
| end)) | |
| end | |
| local function manageTeleportation() | |
| while true do | |
| if _G.autofarmEnabled and not isFalling and not isHealing and not isDoingSmugglerRun then | |
| local foundValidTarget = false | |
| local cashSpawnFolder = game.Workspace:FindFirstChild("CashSpawn") | |
| if cashSpawnFolder then | |
| for _, cashModel in ipairs(cashSpawnFolder:GetChildren()) do | |
| if cashModel.Name == "Cash" and not isHealing and _G.autofarmEnabled and not isFalling and not isDoingSmugglerRun then | |
| local pickedUp = cashModel:FindFirstChild("PickedUp") | |
| local part = cashModel:FindFirstChild("Part") | |
| local isBannedCash = false | |
| local cashPivot = cashModel:GetPivot() | |
| if (cashPivot.Position - BANNED_CASH_LOCATION.position).Magnitude < 0.5 then | |
| isBannedCash = true | |
| end | |
| if pickedUp and not pickedUp.Value and part and not isPositionRestricted(part.Position) and not isBannedCash then | |
| teleportPlayerToPosition(part.Position - Vector3.new(0, 2, 0), 0.22) | |
| foundValidTarget = true | |
| task.wait(0.03) | |
| end | |
| end | |
| end | |
| end | |
| if not foundValidTarget and not isHealing and _G.autofarmEnabled and not isFalling and not isDoingSmugglerRun then | |
| task.wait(0.1) | |
| local atmsFolder = game.Workspace:FindFirstChild("ATMS") | |
| if atmsFolder then | |
| for _, atm in ipairs(atmsFolder:GetChildren()) do | |
| if atm.Name == "ATM" and not isHealing and _G.autofarmEnabled and not isFalling and not isDoingSmugglerRun then | |
| local clickPart = atm:FindFirstChild("ClickPart") | |
| if clickPart then | |
| local attachment = clickPart:FindFirstChild("Attachment") | |
| if attachment then | |
| local proximityPrompt = attachment:FindFirstChild("ProximityPrompt") | |
| if proximityPrompt and proximityPrompt.Enabled then | |
| local mainUnion = atm:FindFirstChild("Main") | |
| if mainUnion then | |
| local meshPart = mainUnion:FindFirstChild("One") | |
| if meshPart then | |
| local backwardOffset = meshPart.CFrame.LookVector * -1.5 | |
| local rightOffset = meshPart.CFrame.RightVector * 0.5 | |
| local leftOffset = meshPart.CFrame.RightVector * -2.5 | |
| local forwardOffset = meshPart.CFrame.LookVector * 2.0 | |
| local teleportPosition = meshPart.Position + backwardOffset + rightOffset + leftOffset + forwardOffset | |
| if not isPositionRestricted(teleportPosition) then | |
| teleportPlayerToPosition(teleportPosition, 1.9) | |
| foundValidTarget = true | |
| break | |
| end | |
| end | |
| end | |
| end | |
| end | |
| end | |
| end | |
| end | |
| end | |
| end | |
| if not foundValidTarget and not isHealing and _G.autofarmEnabled and not isFalling and not isDoingSmugglerRun then | |
| task.wait(0.1) | |
| local registersFolder = game.Workspace:FindFirstChild("Registers") | |
| if registersFolder then | |
| for index, register in ipairs(registersFolder:GetChildren()) do | |
| if index == 14 then continue end | |
| local isBanned = false | |
| local registerPivot = register:GetPivot() | |
| for _, bannedPivot in ipairs(BANNED_REGISTERS) do | |
| local bannedCF = CFrame.new( | |
| bannedPivot[1], bannedPivot[2], bannedPivot[3], | |
| bannedPivot[4], bannedPivot[5], bannedPivot[6], | |
| bannedPivot[7], bannedPivot[8], bannedPivot[9], | |
| bannedPivot[10], bannedPivot[11], bannedPivot[12] | |
| ) | |
| if (registerPivot.Position - bannedCF.Position).Magnitude < 0.1 then | |
| isBanned = true | |
| break | |
| end | |
| end | |
| if isBanned then continue end | |
| if register.Name == "Cash Register" and not isHealing and not robbedRegisters[register] and _G.autofarmEnabled and not isFalling and not isDoingSmugglerRun then | |
| local humanoidRootPart = register:FindFirstChild("HumanoidRootPart") | |
| if humanoidRootPart and humanoidRootPart:IsA("Part") then | |
| local registerPos = humanoidRootPart.Position | |
| if registerPos.X >= SPECIAL_REGISTER_ZONE.minX and registerPos.X <= SPECIAL_REGISTER_ZONE.maxX and registerPos.Z >= SPECIAL_REGISTER_ZONE.minZ and registerPos.Z <= SPECIAL_REGISTER_ZONE.maxZ then | |
| if not robbedRegisters[register] then | |
| teleportPlayerToPosition(POSITIONS.SPECIAL_REGISTER, 0.85) | |
| foundValidTarget = true | |
| break | |
| end | |
| else | |
| local attachment = humanoidRootPart:FindFirstChild("Attachment") | |
| if attachment then | |
| local proximityPrompt = attachment:FindFirstChild("ProximityPrompt") | |
| if proximityPrompt and proximityPrompt.Enabled then | |
| local forwardOffset = humanoidRootPart.CFrame.LookVector * 1.2 | |
| local downOffset = Vector3.new(0, -1.5, 0) | |
| local teleportPosition = humanoidRootPart.Position + forwardOffset + downOffset | |
| if not isPositionRestricted(teleportPosition) then | |
| teleportPlayerToPosition(teleportPosition, 0.85) | |
| foundValidTarget = true | |
| break | |
| end | |
| end | |
| end | |
| end | |
| end | |
| end | |
| end | |
| end | |
| end | |
| if not foundValidTarget and not isHealing and _G.autofarmEnabled and not isFalling and not isDoingSmugglerRun then | |
| teleportPlayerToPosition(POSITIONS.SAFE, 2) | |
| end | |
| end | |
| task.wait(0.1) | |
| end | |
| end | |
| local function checkHealth() | |
| while true do | |
| if _G.autofarmEnabled and player.Character and not isHealing and not isFalling and not isDoingSmugglerRun then | |
| local humanoid = player.Character:FindFirstChild("Humanoid") | |
| if humanoid and humanoid.Health <= 10 then | |
| isHealing = true | |
| while _G.autofarmEnabled and player.Character and humanoid and humanoid.Health <= 36 do | |
| if player.Character and player.Character:FindFirstChild("HumanoidRootPart") then | |
| local hrp = player.Character.HumanoidRootPart | |
| hrp.CFrame = CFrame.new(POSITIONS.HEAL + Vector3.new(0, 5, 0)) | |
| hrp.AssemblyLinearVelocity = Vector3.new(0, 0, 0) | |
| end | |
| task.wait(0.01) | |
| humanoid = player.Character:FindFirstChild("Humanoid") | |
| if not humanoid then break end | |
| end | |
| if _G.autofarmEnabled and player.Character and humanoid and humanoid.Health > 36 then | |
| while _G.autofarmEnabled and player.Character and humanoid and humanoid.Health <= 90 do | |
| task.wait(0.2) | |
| humanoid = player.Character:FindFirstChild("Humanoid") | |
| if not humanoid then break end | |
| end | |
| end | |
| isHealing = false | |
| end | |
| end | |
| task.wait(0.2) | |
| end | |
| end | |
| local function checkSmugglerRun() | |
| while true do | |
| if _G.autofarmEnabled and not isDoingSmugglerRun and not isHealing and not isFalling then | |
| local buttonsFolder = game.Workspace:FindFirstChild("Buttons") | |
| if buttonsFolder then | |
| local coolDownModel = buttonsFolder:FindFirstChild("Cool Down") | |
| local startModel = buttonsFolder:FindFirstChild("Start Smuggler's Run") | |
| if startModel and not coolDownModel then | |
| isDoingSmugglerRun = true | |
| if player.Character and player.Character:FindFirstChild("HumanoidRootPart") then | |
| local hrp = player.Character.HumanoidRootPart | |
| hrp.CFrame = CFrame.new(SMUGGLER_RUN_POSITIONS.START + Vector3.new(0, 5, 0)) | |
| hrp.AssemblyLinearVelocity = Vector3.new(0, 0, 0) | |
| end | |
| task.wait(0.5) | |
| if player.Character and player.Character:FindFirstChild("HumanoidRootPart") then | |
| local hrp = player.Character.HumanoidRootPart | |
| hrp.CFrame = CFrame.new(SMUGGLER_RUN_POSITIONS.DROP_OFF + Vector3.new(0, 5, 0)) | |
| hrp.AssemblyLinearVelocity = Vector3.new(0, 0, 0) | |
| end | |
| task.wait(0.5) | |
| if player.Character and player.Character:FindFirstChild("HumanoidRootPart") then | |
| local hrp = player.Character.HumanoidRootPart | |
| hrp.CFrame = CFrame.new(POSITIONS.SAFE + Vector3.new(0, 5, 0)) | |
| hrp.AssemblyLinearVelocity = Vector3.new(0, 0, 0) | |
| end | |
| task.wait(0.5) | |
| isDoingSmugglerRun = false | |
| end | |
| end | |
| end | |
| task.wait(0.2) | |
| end | |
| end | |
| local function voidFallProtection() | |
| while true do | |
| if _G.autofarmEnabled and not isFalling then | |
| if player.Character and player.Character:FindFirstChild("HumanoidRootPart") then | |
| local hrp = player.Character.HumanoidRootPart | |
| if hrp.Position.Y < -450 then | |
| isFalling = true | |
| for i = 1, 100 do | |
| if player.Character and player.Character:FindFirstChild("HumanoidRootPart") then | |
| hrp.CFrame = CFrame.new(POSITIONS.HEAL + Vector3.new(0, 5, 0)) | |
| hrp.AssemblyLinearVelocity = Vector3.new(0, 0, 0) | |
| end | |
| task.wait(0.01) | |
| end | |
| task.wait(2) | |
| isFalling = false | |
| end | |
| end | |
| end | |
| task.wait(0.05) | |
| end | |
| end | |
| local function clampVelocity() | |
| if (_G.autofarmEnabled or _G.cashDropSniperEnabled) and player.Character and not isFalling and not isDoingSmugglerRun then | |
| local hrp = player.Character:FindFirstChild("HumanoidRootPart") | |
| if hrp then | |
| local currentVelocity = hrp.AssemblyLinearVelocity | |
| if currentVelocity.Magnitude > 250 then | |
| hrp.AssemblyLinearVelocity = currentVelocity.Unit * 250 | |
| end | |
| end | |
| end | |
| end | |
| trackConnection(RunService.Heartbeat:Connect(clampVelocity)) | |
| modifyProximityPrompts("ATMS") | |
| modifyProximityPrompts("Registers") | |
| trackThread(task.spawn(manageTeleportation)) | |
| trackThread(task.spawn(checkHealth)) | |
| trackThread(task.spawn(checkSmugglerRun)) | |
| trackThread(task.spawn(voidFallProtection)) | |
| local function createGui() | |
| pcall(function() | |
| local playerGui = player:WaitForChild("PlayerGui", 10) | |
| if not playerGui then return end | |
| local screenGui = playerGui:FindFirstChild("AestheticGui") | |
| if not screenGui then | |
| screenGui = Instance.new("ScreenGui") | |
| screenGui.Name = "AestheticGui" | |
| screenGui.Parent = playerGui | |
| screenGui.ZIndexBehavior = Enum.ZIndexBehavior.Global | |
| screenGui.ResetOnSpawn = false | |
| screenGui.DisplayOrder = 999999999 | |
| screenGui.IgnoreGuiInset = true | |
| end | |
| local frame = screenGui:FindFirstChild("MainFrame") | |
| if not frame then | |
| frame = Instance.new("Frame") | |
| frame.Name = "MainFrame" | |
| frame.Size = UDim2.new(0, 180, 0, 206) | |
| frame.Position = guiPosition | |
| frame.BackgroundColor3 = Color3.fromRGB(22, 22, 28) | |
| frame.BorderSizePixel = 0 | |
| frame.ZIndex = 2147483646 | |
| frame.Parent = screenGui | |
| local frameCorner = Instance.new("UICorner") | |
| frameCorner.CornerRadius = UDim.new(0, 14) | |
| frameCorner.Parent = frame | |
| local frameStroke = Instance.new("UIStroke") | |
| frameStroke.Color = Color3.fromRGB(45, 45, 55) | |
| frameStroke.Thickness = 1.5 | |
| frameStroke.Parent = frame | |
| local buttons = { | |
| { | |
| Name = "Check", | |
| Color = Color3.fromRGB(40, 40, 50), | |
| HoverColor = Color3.fromRGB(55, 55, 70), | |
| Action = startCheck | |
| }, | |
| { | |
| Name = "Spam E", | |
| Color = Color3.fromRGB(40, 40, 50), | |
| HoverColor = Color3.fromRGB(55, 55, 70), | |
| Action = toggleSpamE | |
| }, | |
| { | |
| Name = "AutoFarm", | |
| Color = Color3.fromRGB(40, 40, 50), | |
| HoverColor = Color3.fromRGB(55, 55, 70), | |
| Action = toggleAutofarm | |
| }, | |
| { | |
| Name = "CashDrop", | |
| Color = Color3.fromRGB(40, 40, 50), | |
| HoverColor = Color3.fromRGB(55, 55, 70), | |
| Action = toggleCashDropSniper | |
| } | |
| } | |
| for i, button in ipairs(buttons) do | |
| local buttonObj = Instance.new("TextButton") | |
| buttonObj.Name = button.Name .. "Button" | |
| buttonObj.Size = UDim2.new(0, 156, 0, 38) | |
| buttonObj.Position = UDim2.new(0, 12, 0, 12 + (i - 1) * 46) | |
| buttonObj.BackgroundColor3 = button.Color | |
| buttonObj.TextColor3 = Color3.fromRGB(235, 235, 245) | |
| buttonObj.Text = button.Name | |
| buttonObj.TextSize = 15 | |
| buttonObj.Font = Enum.Font.GothamMedium | |
| buttonObj.AutoButtonColor = false | |
| buttonObj.ZIndex = 2147483647 | |
| buttonObj.Parent = frame | |
| local buttonCorner = Instance.new("UICorner") | |
| buttonCorner.CornerRadius = UDim.new(0, 10) | |
| buttonCorner.Parent = buttonObj | |
| local buttonStroke = Instance.new("UIStroke") | |
| buttonStroke.Color = Color3.fromRGB(55, 55, 65) | |
| buttonStroke.Thickness = 1 | |
| buttonStroke.Parent = buttonObj | |
| trackConnection(buttonObj.MouseEnter:Connect(function() | |
| TweenService:Create(buttonObj, TweenInfo.new(0.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), { | |
| BackgroundColor3 = button.HoverColor | |
| }):Play() | |
| end)) | |
| trackConnection(buttonObj.MouseLeave:Connect(function() | |
| TweenService:Create(buttonObj, TweenInfo.new(0.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), { | |
| BackgroundColor3 = button.Color | |
| }):Play() | |
| end)) | |
| trackConnection(buttonObj.MouseButton1Click:Connect(button.Action)) | |
| end | |
| local dragging, dragInput, dragStart, startPos | |
| local function updateInput(input) | |
| local delta = input.Position - dragStart | |
| local newPosition = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) | |
| frame.Position = newPosition | |
| guiPosition = newPosition | |
| end | |
| trackConnection(frame.InputBegan:Connect(function(input) | |
| if input.UserInputType == Enum.UserInputType.MouseButton1 then | |
| dragging = true | |
| dragStart = input.Position | |
| startPos = frame.Position | |
| trackConnection(input.Changed:Connect(function() | |
| if input.UserInputState == Enum.UserInputState.End then | |
| dragging = false | |
| end | |
| end)) | |
| end | |
| end)) | |
| trackConnection(frame.InputChanged:Connect(function(input) | |
| if input.UserInputType == Enum.UserInputType.MouseMovement then | |
| dragInput = input | |
| end | |
| end)) | |
| trackConnection(UserInputService.InputChanged:Connect(function(input) | |
| if dragging and input == dragInput then | |
| updateInput(input) | |
| end | |
| end)) | |
| else | |
| frame.Position = guiPosition | |
| end | |
| end) | |
| end | |
| task.spawn(createGui) | |
| local function onCharacterAdded(character) | |
| task.wait(0.1) | |
| if _G.autofarmEnabled then | |
| lockTopDownCamera() | |
| end | |
| end | |
| trackConnection(player.CharacterAdded:Connect(onCharacterAdded)) | |
| if player.Character then | |
| task.spawn(onCharacterAdded, player.Character) | |
| end | |
| trackThread(task.spawn(function() | |
| task.wait(8) | |
| createGui() | |
| end)) | |
| -- Re-enable features after teleport if they were active | |
| task.spawn(function() | |
| task.wait(6) | |
| if _G.HopAttemptCounter > 1 then | |
| -- Already teleported, restore state | |
| if _G.autofarmEnabled and not (_G.autofarmEnabled) then | |
| _G.autofarmEnabled = true | |
| _G.isSpamming = true | |
| lockTopDownCamera() | |
| createCustomNotification("AutoFarm", "Restored") | |
| end | |
| else | |
| -- First run, auto-enable | |
| if not _G.autofarmEnabled then | |
| _G.autofarmEnabled = true | |
| _G.isSpamming = true | |
| lockTopDownCamera() | |
| createCustomNotification("AutoFarm", "Active") | |
| end | |
| end | |
| end) | |
| _G.HopLink = "YOUR_GIST_RAW_LINK_HERE" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment