Diablo Hub West Bound I Open Source
Key Required Patched

Diablo Hub West Bound I Open Source

WestboundErasedDiabloErasedDiablo 2.9K views 84 executesUpdated Nov 26, 2025
5.0/ 5(6 votes)
60100% Positive
Lua Script•499 lines (17589 chars)
local Players = game:GetService("Players")
local Workspace = game:GetService("Workspace")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local RunService = game:GetService("RunService")
local TweenService = game:GetService("TweenService")
local UserInputService = game:GetService("UserInputService")
local VirtualUser = game:GetService("VirtualUser")
local StatsService = game:GetService("Stats")
local SoundService = game:GetService("SoundService")
local localPlayer = Players.LocalPlayer
local character = localPlayer.Character or localPlayer.CharacterAdded:Wait()
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
local humanoidRootPart = character:FindFirstChild("HumanoidRootPart")
local bag = localPlayer:WaitForChild("States"):WaitForChild("Bag")
local bagSizeLevel = localPlayer:WaitForChild("Stats"):WaitForChild("BagSizeLevel"):WaitForChild("CurrentAmount")
local robEvent = ReplicatedStorage:WaitForChild("GeneralEvents"):WaitForChild("Rob")
local targetPosition = CFrame.new(1636.62537, 104.349976, -1736.184)
local function ensureAntiDeath(char)
local ok, h = pcall(function()
local hum = char:FindFirstChildWhichIsA("Humanoid")
if not hum then return end
local cloned = hum:Clone()
        cloned.Parent = char
        localPlayer.Character = nil
        cloned:SetStateEnabled(Enum.HumanoidStateType.Dead, false)
        cloned:SetStateEnabled(Enum.HumanoidStateType.FallingDown, false)
        cloned:SetStateEnabled(Enum.HumanoidStateType.Physics, false)
        hum:Destroy()
        localPlayer.Character = char
local cam = Workspace.CurrentCamera
        cam.CameraSubject = cloned
        cam.CFrame = cam.CFrame
        cloned.DisplayDistanceType = Enum.HumanoidDisplayDistanceType.None
local animate = char:FindFirstChild("Animate")
if animate then
            animate.Disabled = true
            task.wait(0.07)
            animate.Disabled = false
end
        cloned.Health = cloned.MaxHealth
        humanoid = cloned
        humanoidRootPart = char:FindFirstChild("HumanoidRootPart")
end)
return ok
end
ensureAntiDeath(character)
localPlayer.Idled:Connect(function()
    VirtualUser:CaptureController()
    VirtualUser:ClickButton2(Vector2.new())
end)
if getgenv().AntiAfkExecuted and game.CoreGui:FindFirstChild("DiabloAutoFarmUI") then
    getgenv().AntiAfkExecuted = false
    getgenv().AutoFarmActive = false
game.CoreGui.DiabloAutoFarmUI:Destroy()
end
getgenv().AntiAfkExecuted = true
getgenv().AutoFarmActive = false
local FAST_LOOP_INTERVAL = 0.08
local function formatNumber(n)
local s = tostring(n)
while true do
local k
        s, k = string.gsub(s, "^(-?%d+)(%d%d%d)", "%1,%2")
if k == 0 then break end
end
return s
end
local cashRegisters = {}
local safes = {}
local function clearTable(t)
for i = 1, #t do t[i] = nil end
end
local function updateCaches()
    clearTable(cashRegisters)
    clearTable(safes)
for _, child in ipairs(Workspace:GetChildren()) do
if child:IsA("Model") then
if child.Name == "CashRegister" then
                table.insert(cashRegisters, child)
elseif child.Name == "Safe" then
                table.insert(safes, child)
end
end
end
end
updateCaches()
Workspace.ChildAdded:Connect(function(child)
if child:IsA("Model") then
if child.Name == "CashRegister" then
            table.insert(cashRegisters, child)
elseif child.Name == "Safe" then
            table.insert(safes, child)
end
end
end)
Workspace.ChildRemoved:Connect(function(child)
if child:IsA("Model") then
if child.Name == "CashRegister" then
for i = #cashRegisters, 1, -1 do
if cashRegisters[i] == child then table.remove(cashRegisters, i) end
end
elseif child.Name == "Safe" then
for i = #safes, 1, -1 do
if safes[i] == child then table.remove(safes, i) end
end
end
end
end)
local function moveTo(cf)
if humanoidRootPart and cf then
        humanoidRootPart.CFrame = cf
end
end
local function findNearestCashRegister()
if not humanoidRootPart then return nil end
local best, bestDist = nil, math.huge
for _, reg in ipairs(cashRegisters) do
if reg and reg.Parent and reg:IsDescendantOf(Workspace) then
local openPart = reg:FindFirstChild("Open")
if openPart then
local d = (humanoidRootPart.Position - openPart.Position).Magnitude
if d < bestDist then
                    bestDist = d
                    best = {model = reg, openPart = openPart}
end
end
end
end
return best
end
local function findNearestSafe()
if not humanoidRootPart then return nil end
local best, bestDist = nil, math.huge
for _, s in ipairs(safes) do
if s and s.Parent and s:IsDescendantOf(Workspace) and s:FindFirstChild("Amount") and s.Amount.Value > 0 then
local safePart = s:FindFirstChild("Safe")
if safePart then
local d = (humanoidRootPart.Position - safePart.Position).Magnitude
if d < bestDist then
                    bestDist = d
                    best = {model = s, safePart = safePart}
end
end
end
end
return best
end
local function attemptRegister(regData)
if not regData or not regData.model then return false end
local ok = pcall(function()
        moveTo(regData.openPart.CFrame)
        robEvent:FireServer("Register", {
            Part = regData.model:FindFirstChild("Union"),
            OpenPart = regData.openPart,
            ActiveValue = regData.model:FindFirstChild("Active"),
            Active = true
})
end)
return ok
end
local function attemptSafe(sData)
if not sData or not sData.model then return false end
local ok = pcall(function()
        moveTo(sData.safePart.CFrame)
local openFlag = sData.model:FindFirstChild("Open")
if openFlag and openFlag.Value then
            robEvent:FireServer("Safe", sData.model)
else
local openSafe = sData.model:FindFirstChild("OpenSafe")
if openSafe then
                openSafe:FireServer("Completed")
end
            robEvent:FireServer("Safe", sData.model)
end
end)
return ok
end
local function farmOnce()
if bag.Value >= bagSizeLevel.Value then
        moveTo(targetPosition)
return false
end
local reg = findNearestCashRegister()
if reg then
if attemptRegister(reg) then return true end
end
local s = findNearestSafe()
if s then
if attemptSafe(s) then return true end
end
return false
end
local function createNotifierGUI()
local gui = Instance.new("ScreenGui")
    gui.Name = "DiabloNotifier"
    gui.ResetOnSpawn = false
    gui.Parent = game.CoreGui
local container = Instance.new("Frame")
    container.Name = "Container"
    container.AnchorPoint = Vector2.new(0.5, 0)
    container.Position = UDim2.new(0.5, 0, 0, 6)
    container.Size = UDim2.new(0, 380, 0, 0)
    container.BackgroundTransparency = 1
    container.Parent = gui
return gui, container
end
local notifierGui, notifierContainer = createNotifierGUI()
local activeNotifiers = {}
local function repositionNotifiers()
for i, v in ipairs(activeNotifiers) do
if v and v.frame then
local targetY = 6 + (i - 1) * 56
            TweenService:Create(v.frame, TweenInfo.new(0.25, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Position = UDim2.new(0.5, 0, 0, targetY)}):Play()
end
end
end
local function notify(text, timeSec)
    timeSec = timeSec or 3
if not notifierContainer or notifierContainer.Parent == nil then
        notifierGui, notifierContainer = createNotifierGUI()
end
local frame = Instance.new("Frame")
    frame.Size = UDim2.new(0, 340, 0, 50)
    frame.Position = UDim2.new(0.5, 0, 0, -60)
    frame.AnchorPoint = Vector2.new(0.5, 0)
    frame.BackgroundTransparency = 1
    frame.BackgroundColor3 = Color3.fromRGB(25, 25, 25)
    frame.BorderSizePixel = 0
    frame.Parent = notifierContainer
local uic = Instance.new("UICorner", frame)
    uic.CornerRadius = UDim.new(0, 10)
local uistroke = Instance.new("UIStroke", frame)
    uistroke.Thickness = 1
    uistroke.Color = Color3.fromRGB(100, 100, 100)
    uistroke.Transparency = 0.5
local txt = Instance.new("TextLabel", frame)
    txt.Size = UDim2.new(1, -20, 1, 0)
    txt.Position = UDim2.new(0, 10, 0, 0)
    txt.BackgroundTransparency = 1
    txt.Text = tostring(text)
    txt.Font = Enum.Font.GothamBold
    txt.TextSize = 16
    txt.TextColor3 = Color3.fromRGB(255, 255, 255)
    txt.TextXAlignment = Enum.TextXAlignment.Left
    txt.TextTransparency = 1
local snd = Instance.new("Sound", frame)
    snd.SoundId = "rbxassetid://3442983711"
    snd.Volume = 1
    snd.PlayOnRemove = false
    snd:Play()
    table.insert(activeNotifiers, {frame = frame})
    repositionNotifiers()
local appearTween = TweenService:Create(frame, TweenInfo.new(0.35, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Position = UDim2.new(0.5, 0, 0, 6 + (#activeNotifiers - 1) * 56), BackgroundTransparency = 0})
    appearTween:Play()
    TweenService:Create(txt, TweenInfo.new(0.35, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {TextTransparency = 0}):Play()
spawn(function()
        task.wait(timeSec)
local disappearTween = TweenService:Create(frame, TweenInfo.new(0.35, Enum.EasingStyle.Quad, Enum.EasingDirection.In), {Position = UDim2.new(0.5, 0, 0, -60), BackgroundTransparency = 1})
        disappearTween:Play()
        TweenService:Create(txt, TweenInfo.new(0.35, Enum.EasingStyle.Quad, Enum.EasingDirection.In), {TextTransparency = 1}):Play()
        disappearTween.Completed:Wait()
        frame:Destroy()
for i = #activeNotifiers, 1, -1 do
if activeNotifiers[i] and activeNotifiers[i].frame == frame then
                table.remove(activeNotifiers, i)
end
end
        repositionNotifiers()
end)
end
local AutoFarmUI = Instance.new("ScreenGui")
AutoFarmUI.Name = "DiabloAutoFarmUI"
AutoFarmUI.Parent = game.CoreGui
AutoFarmUI.ResetOnSpawn = false
local MainFrame = Instance.new("Frame")
MainFrame.Size = UDim2.new(0, 320, 0, 160)
MainFrame.Position = UDim2.new(0.5, -160, 0.5, -80)
MainFrame.AnchorPoint = Vector2.new(0.5, 0.5)
MainFrame.BackgroundTransparency = 0
MainFrame.BackgroundColor3 = Color3.fromRGB(18, 18, 25)
MainFrame.BorderSizePixel = 0
MainFrame.Parent = AutoFarmUI
local MainCorner = Instance.new("UICorner", MainFrame)
MainCorner.CornerRadius = UDim.new(0, 14)
local Accent = Instance.new("Frame", MainFrame)
Accent.Size = UDim2.new(1, 0, 0, 40)
Accent.Position = UDim2.new(0, 0, 0, 0)
Accent.BackgroundTransparency = 0
Accent.BackgroundColor3 = Color3.fromRGB(45, 10, 90)
Accent.BorderSizePixel = 0
local g = Instance.new("UIGradient", Accent)
g.Color = ColorSequence.new{ ColorSequenceKeypoint.new(0, Color3.fromRGB(120, 25, 200)), ColorSequenceKeypoint.new(1, Color3.fromRGB(60, 10, 140)) }
g.Rotation = 45
local Title = Instance.new("TextLabel", Accent)
Title.Size = UDim2.new(0.75, 0, 1, 0)
Title.Position = UDim2.new(0.02, 0, 0, 0)
Title.BackgroundTransparency = 1
Title.Text = "Diablo Hub W.B"
Title.TextColor3 = Color3.fromRGB(255, 255, 255)
Title.Font = Enum.Font.GothamBlack
Title.TextSize = 14
Title.TextXAlignment = Enum.TextXAlignment.Left
local credit = Instance.new("TextLabel", Accent)
credit.Size = UDim2.new(0.23, -10, 1, 0)
credit.Position = UDim2.new(0.75, 0, 0, 0)
credit.BackgroundTransparency = 1
credit.Text = "Made by Diablo"
credit.TextColor3 = Color3.fromRGB(200, 200, 200)
credit.Font = Enum.Font.Gotham
credit.TextSize = 12
credit.TextXAlignment = Enum.TextXAlignment.Right
local content = Instance.new("Frame", MainFrame)
content.Size = UDim2.new(1, -16, 1, -56)
content.Position = UDim2.new(0, 8, 0, 48)
content.BackgroundTransparency = 1
local contentCorner = Instance.new("UICorner", content)
contentCorner.CornerRadius = UDim.new(0, 12)
local statsList = Instance.new("Frame", content)
statsList.Size = UDim2.new(0.6, 0, 1, 0)
statsList.Position = UDim2.new(0, 0, 0, 0)
statsList.BackgroundTransparency = 1
local function makeStatLabel(txt, y)
local lbl = Instance.new("TextLabel", statsList)
    lbl.Size = UDim2.new(1, 0, 0, 18)
    lbl.Position = UDim2.new(0, 0, 0, y)
    lbl.BackgroundTransparency = 1
    lbl.TextXAlignment = Enum.TextXAlignment.Left
    lbl.Font = Enum.Font.Gotham
    lbl.TextSize = 13
    lbl.TextColor3 = Color3.fromRGB(230, 230, 230)
    lbl.Text = txt
return lbl
end
local PingLabel = makeStatLabel("Ping: Calculating...", 0)
local CashLabel = makeStatLabel("Earnings: $0", 22)
local FPSLabel = makeStatLabel("FPS: Calculating...", 44)
local TimerLabel = makeStatLabel("Time: 00:00:00", 66)
local StatusLabel = makeStatLabel("Status: Stopped", 88)
local controls = Instance.new("Frame", content)
controls.Size = UDim2.new(0.4, 0, 1, 0)
controls.Position = UDim2.new(0.6, 0, 0, 0)
controls.BackgroundTransparency = 1
local StartBtn = Instance.new("TextButton", controls)
StartBtn.Size = UDim2.new(1, -10, 0, 36)
StartBtn.Position = UDim2.new(0, 5, 0, 0)
StartBtn.Text = "START"
StartBtn.Font = Enum.Font.GothamBlack
StartBtn.TextSize = 14
StartBtn.TextColor3 = Color3.fromRGB(20, 20, 20)
StartBtn.BackgroundColor3 = Color3.fromRGB(120, 25, 200)
StartBtn.AutoButtonColor = true
StartBtn.BorderSizePixel = 0
local StartCorner = Instance.new("UICorner", StartBtn)
StartCorner.CornerRadius = UDim.new(0, 8)
local StopBtn = Instance.new("TextButton", controls)
StopBtn.Size = UDim2.new(1, -10, 0, 28)
StopBtn.Position = UDim2.new(0, 5, 0, 44)
StopBtn.Text = "STOP"
StopBtn.Font = Enum.Font.GothamBold
StopBtn.TextSize = 13
StopBtn.TextColor3 = Color3.fromRGB(230, 230, 230)
StopBtn.BackgroundColor3 = Color3.fromRGB(50, 50, 60)
StopBtn.AutoButtonColor = true
StopBtn.BorderSizePixel = 0
local StopCorner = Instance.new("UICorner", StopBtn)
StopCorner.CornerRadius = UDim.new(0, 8)
local pulse = Instance.new("Frame", Accent)
pulse.Size = UDim2.new(0, 10, 0, 10)
pulse.Position = UDim2.new(0.98, -20, 0.5, -5)
pulse.AnchorPoint = Vector2.new(1, 0.5)
pulse.BackgroundColor3 = Color3.fromRGB(255, 170, 0)
pulse.BorderSizePixel = 0
local pulseCorner = Instance.new("UICorner", pulse)
pulseCorner.CornerRadius = UDim.new(0, 10)
spawn(function()
while AutoFarmUI.Parent and AutoFarmUI.Parent ~= nil do
        TweenService:Create(pulse, TweenInfo.new(0.9, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut, -1, true), {BackgroundTransparency = 0.3, Size = UDim2.new(0, 14, 0, 14)}):Play()
        task.wait(1.8)
end
end)
do
local dragging, dragStart, startPos
local currentTween
    MainFrame.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
            dragging = true
            dragStart = input.Position
            startPos = MainFrame.Position
            input.Changed:Connect(function()
if input.UserInputState == Enum.UserInputState.End then
                    dragging = false
end
end)
end
end)
    MainFrame.InputChanged:Connect(function(input)
if dragging and input.UserInputType == Enum.UserInputType.MouseMovement then
local delta = input.Position - dragStart
local target = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
if currentTween then currentTween:Cancel() end
            currentTween = TweenService:Create(MainFrame, TweenInfo.new(0.05, Enum.EasingStyle.Sine, Enum.EasingDirection.Out), {Position = target})
            currentTween:Play()
end
end)
end
spawn(function()
while true do
local dt = RunService.RenderStepped:Wait()
        FPSLabel.Text = "FPS: " .. tostring(math.floor(1 / dt))
end
end)
spawn(function()
while true do
        task.wait(0.8)
local perfStats = StatsService:FindFirstChild("PerformanceStats")
if perfStats and perfStats:FindFirstChild("Ping") then
            PingLabel.Text = "Ping: " .. tostring(math.floor(perfStats.Ping:GetValue())) .. "ms"
end
end
end)
local leaderstats = localPlayer:WaitForChild("leaderstats")
local cashStat = leaderstats:WaitForChild("$$")
local initialCash = cashStat.Value
local seconds, minutes, hours = 0, 0, 0
spawn(function()
while true do
        task.wait(0.9)
local earned = cashStat.Value - initialCash
        CashLabel.Text = "Earnings: $" .. formatNumber(earned)
end
end)
spawn(function()
while true do
        task.wait(1)
        seconds = seconds + 1
if seconds >= 60 then seconds = 0 minutes = minutes + 1 end
if minutes >= 60 then minutes = 0 hours = hours + 1 end
        TimerLabel.Text = string.format("Time: %02d:%02d:%02d", hours, minutes, seconds)
end
end)
local farmThread
local function startFarming()
if getgenv().AutoFarmActive then return end
    getgenv().AutoFarmActive = true
    StatusLabel.Text = "Status: Running"
    notify("AutoFarm started — Diablo & Westbound", 2.5)
    farmThread = coroutine.create(function()
while getgenv().AutoFarmActive do
local ok = pcall(function()
                farmOnce()
end)
            task.wait(FAST_LOOP_INTERVAL)
end
end)
    coroutine.resume(farmThread)
end
local function resetProgress()
    initialCash = cashStat.Value
    seconds, minutes, hours = 0, 0, 0
    CashLabel.Text = "Earnings: $0"
    TimerLabel.Text = "Time: 00:00:00"
end
local function stopFarming()
if not getgenv().AutoFarmActive then
        resetProgress()
return
end
    getgenv().AutoFarmActive = false
    StatusLabel.Text = "Status: Stopped"
    notify("AutoFarm stopped", 1.8)
    resetProgress()
end
StartBtn.MouseButton1Click:Connect(function()
    startFarming()
end)
StopBtn.MouseButton1Click:Connect(function()
    stopFarming()
end)
UserInputService.InputBegan:Connect(function(inp, gp)
if gp then return end
if inp.KeyCode == Enum.KeyCode.RightShift then
        AutoFarmUI:Destroy()
        notifierGui:Destroy()
        getgenv().AutoFarmActive = false
        resetProgress()
end
end)
AutoFarmUI.AncestryChanged:Connect(function(_, parent)
if not parent then
        getgenv().AutoFarmActive = false
        resetProgress()
end
end)
localPlayer.CharacterAdded:Connect(function(char)
    character = char
    task.wait(0.2)
    humanoidRootPart = character:WaitForChild("HumanoidRootPart")
    ensureAntiDeath(character)
end)

Features & Information

Just an Auto Farm

Community Comments (5)

srukoscppsrukoscppNov 26, 2025

works very well verified

RaterSSSRaterSSSDec 3, 2025

@AdvertiserBlox can i do it for robux not money?

KingVin_TheCreatorKingVin_TheCreatorJan 24, 2026

How do you download it?

mambotak11mambotak11Apr 11, 2026

can u update it bro will be very greatful

mambotak11mambotak11Apr 11, 2026

can u update it bro will be very greatful

More Scripts for Westbound