local doJewl=true local doBank=true local doTrain=true local green,red=Color3.fromRGB(0,240,0),Color3.fromRGB(240,0,0) local maxSpeed = 375 --max studs/s by anti exploit local vaultMaxSecs = 999 local jewlAllowCrims = false --interface local gui = Instance.new("ScreenGui") gui.ResetOnSpawn=false gui.Name = "AutoRob" local main = Instance.new("Frame",gui) main.BackgroundTransparency=0.02 main.BackgroundColor3=Color3.fromRGB(0,50,100) main.Active=true main.Draggable=true main.Position=UDim2.new(0.2,0,0.2,0) main.Size=UDim2.new(0,350,0,234) main.ZIndex=3 local indent = Instance.new("Frame",main) indent.BackgroundTransparency=1 indent.Position=UDim2.new(0,25,0,25) indent.Size=UDim2.new(1,-50,1,-50) local CloseBtn = Instance.new("TextButton",main) CloseBtn.BackgroundTransparency=1 CloseBtn.Position=UDim2.new(1,-20,0,0) CloseBtn.Size=UDim2.new(0,20,0,20) CloseBtn.Font=Enum.Font.SourceSansBold CloseBtn.Text="X" CloseBtn.TextScaled=true CloseBtn.TextColor3=Color3.new(1,1,1) CloseBtn.TextStrokeTransparency=0.7 local CogBtn = Instance.new("ImageButton",main) CogBtn.BackgroundTransparency=1 CogBtn.Position=UDim2.new(0,0,0,0) CogBtn.Size=UDim2.new(0,20,0,20) CogBtn.Image="rbxassetid://135740223" local AbortBtn = Instance.new("TextButton",indent) AbortBtn.Style=Enum.ButtonStyle.RobloxRoundButton AbortBtn.AutoButtonColor=false AbortBtn.Position=UDim2.new(0.25,0,0.6,-5) AbortBtn.Size=UDim2.new(0.5,0,0.185,0) AbortBtn.Font=Enum.Font.SourceSans AbortBtn.Text="ABORT" AbortBtn.TextScaled=false AbortBtn.TextSize=25 local JewlBtn = Instance.new("TextButton",indent) JewlBtn.BackgroundColor3=doJewl and green or red JewlBtn.Position=UDim2.new(0.8) JewlBtn.Size=UDim2.new(0.2,0,0.185,-5) JewlBtn.Font=Enum.Font.SourceSansSemibold JewlBtn.Text=doJewl and "YES" or "NO" JewlBtn.TextScaled=true local BankBtn = Instance.new("TextButton",indent) BankBtn.BackgroundColor3=doBank and green or red BankBtn.Position=UDim2.new(0.8,0,0.2,0) BankBtn.Size=UDim2.new(0.2,0,0.185,-5) BankBtn.Font=Enum.Font.SourceSansSemibold BankBtn.Text=doBank and "YES" or "NO" BankBtn.TextScaled=true local TrainBtn = Instance.new("TextButton",indent) TrainBtn.BackgroundColor3=doTrain and green or red TrainBtn.Position=UDim2.new(0.8,0,0.4,0) TrainBtn.Size=UDim2.new(0.2,0,0.185,-5) TrainBtn.Font=Enum.Font.SourceSansSemibold TrainBtn.Text=doTrain and "YES" or "NO" TrainBtn.TextScaled=true local lbl1 = Instance.new("TextLabel",indent) lbl1.BackgroundTransparency=1 lbl1.Position=UDim2.new(0,0,0,-5) lbl1.Size=UDim2.new(0.8,0,0.185,0) lbl1.Font=Enum.Font.SourceSans lbl1.Text="Auto Rob Jewelry:" lbl1.TextScaled=true lbl1.TextColor3=Color3.new(1,1,1) lbl1.TextStrokeTransparency=0.8 local lbl2 = Instance.new("TextLabel",indent) lbl2.BackgroundTransparency=1 lbl2.Position=UDim2.new(0,0,0.2,-7) lbl2.Size=UDim2.new(0.8,0,0.185,0) lbl2.Font=Enum.Font.SourceSans lbl2.Text="Auto Rob Bank:" lbl2.TextScaled=true lbl2.TextColor3=Color3.new(1,1,1) lbl2.TextStrokeTransparency=0.8 local lbl3 = Instance.new("TextLabel",indent) lbl3.BackgroundTransparency=1 lbl3.Position=UDim2.new(0,0,0.4,-7) lbl3.Size=UDim2.new(0.8,0,0.185,0) lbl3.Font=Enum.Font.SourceSans lbl3.Text="Auto Rob Train:" lbl3.TextScaled=true lbl3.TextColor3=Color3.new(1,1,1) lbl3.TextStrokeTransparency=0.8 local Status = Instance.new("TextLabel",indent) Status.BackgroundTransparency=0.25 Status.BackgroundColor3=Color3.new(1,1,1) Status.Position=UDim2.new(0,0,0.8,0) Status.Size=UDim2.new(1,0,0.185,0) Status.Font=Enum.Font.Code Status.Text="Status:" Status.TextScaled=false Status.TextSize=15 Status.TextXAlignment=Enum.TextXAlignment.Left local setsframe = Instance.new("Frame",main) setsframe.BackgroundTransparency=0.02 setsframe.BackgroundColor3=Color3.new(.88,.88,.88) setsframe.BorderColor3=main.BackgroundColor3 setsframe.BorderSizePixel=5 setsframe.Position=UDim2.new(0,50,1,-70) setsframe.Size=UDim2.new(0,240,0,65) local setsoption1 = Instance.new("Frame",setsframe) setsoption1.BackgroundTransparency=1 setsoption1.Size=UDim2.new(1,0,0.5,0) local indent1 = Instance.new("Frame",setsoption1) indent1.BackgroundTransparency=1 indent1.Position=UDim2.new(0,5,0,5) indent1.Size=UDim2.new(1,-10,1,-10) local lbl4 = Instance.new("TextLabel",indent1) lbl4.BackgroundTransparency=1 lbl4.Size=UDim2.new(0.8,0,1,0) lbl4.Font=Enum.Font.SourceSans lbl4.Text="Max Secs Inside Vaults" lbl4.TextScaled=true local MaxSecsBox = Instance.new("TextBox",indent1) MaxSecsBox.BackgroundColor3=Color3.new(.95,.95,.95) MaxSecsBox.Position=UDim2.new(0.83,0,0.2,0) MaxSecsBox.Size=UDim2.new(0,30,0,15) MaxSecsBox.Font=Enum.Font.Code MaxSecsBox.Text=tostring(vaultMaxSecs) MaxSecsBox.TextScaled=true local setsoption2 = Instance.new("Frame",setsframe) setsoption2.BackgroundTransparency=0.95 setsoption2.BackgroundColor3=Color3.new() setsoption2.Position=UDim2.new(0,0,0.5,0) setsoption2.Size=UDim2.new(1,0,0.5,0) local indent2 = Instance.new("Frame",setsoption2) indent2.BackgroundTransparency=1 indent2.Position=UDim2.new(0,5,0,5) indent2.Size=UDim2.new(1,-10,1,-10) local lbl5 = Instance.new("TextLabel",indent2) lbl5.BackgroundTransparency=1 lbl5.Size=UDim2.new(0.8,0,1,0) lbl5.Font=Enum.Font.SourceSans lbl5.Text="Let Crims Enter Jewelry" lbl5.TextScaled=true local JewlSetBtn = Instance.new("TextButton",indent2) JewlSetBtn.BackgroundColor3=Color3.new(.95,.95,.95) JewlSetBtn.Position=UDim2.new(0.85,0,0.2,0) JewlSetBtn.Size=UDim2.new(0,20,0,15) JewlSetBtn.Font=Enum.Font.SourceSansSemibold JewlSetBtn.Text=jewlAllowCrims and "X" or "" JewlSetBtn.TextScaled=false JewlSetBtn.TextSize=20 gui.Parent = game.CoreGui for _,v in ipairs(main:GetChildren()) do if v~=setsframe then v.ZIndex = 4 end end for _,v in ipairs(indent:GetChildren()) do v.ZIndex = 5 end local player = game:GetService("Players").LocalPlayer local root local abort=false --gui code CloseBtn.MouseButton1Click:Connect(function() gui:Destroy() abort=true end) CloseBtn.MouseEnter:Connect(function() CloseBtn.TextColor3=red end) CloseBtn.MouseLeave:Connect(function() CloseBtn.TextColor3=Color3.new(1,1,1) end) JewlBtn.MouseButton1Click:Connect(function() doJewl = not doJewl JewlBtn.BackgroundColor3=doJewl and green or red JewlBtn.Text=doJewl and "YES" or "NO" end) BankBtn.MouseButton1Click:Connect(function() doBank = not doBank BankBtn.BackgroundColor3=doBank and green or red BankBtn.Text=doBank and "YES" or "NO" end) TrainBtn.MouseButton1Click:Connect(function() doTrain = not doTrain TrainBtn.BackgroundColor3=doTrain and green or red TrainBtn.Text=doTrain and "YES" or "NO" end) local function toggleCanAbort(bool) AbortBtn.AutoButtonColor=bool AbortBtn.Style=bool and "RobloxRoundDefaultButton" or "RobloxRoundButton" end AbortBtn.MouseButton1Click:Connect(function() if AbortBtn.AutoButtonColor==true then toggleCanAbort(false) local hit,p = workspace:FindPartOnRay(Ray.new(player.Character.Head.Position+Vector3.new(0,10,0),Vector3.new(0,20,0))) if hit then player.Character:MoveTo(p) else root.CFrame=root.CFrame+Vector3.new(-40,2,0) end abort=true AbortBtn.Text = "Aborted." wait(3) abort=false wait(7) AbortBtn.Text = "ABORT" end end) local function stprint(txt) Status.Text = "Status: "..txt end local function strToNum(str) return tonumber((tostring(str):gsub("[^%d]", ""))) end local tweenCogOut = game:GetService("TweenService"):Create(CogBtn,TweenInfo.new(0.3),{Rotation=135}) local tweenCogIn = game:GetService("TweenService"):Create(CogBtn,TweenInfo.new(0.3),{Rotation=0}) local cogOut = false CogBtn.MouseButton1Click:Connect(function() cogOut = not cogOut if cogOut then setsframe:TweenPosition(UDim2.new(0,50,1,0),nil,"Quart",0.3,true) tweenCogOut:Play() else setsframe:TweenPosition(UDim2.new(0,50,1,-70),nil,"Quart",0.3,true) tweenCogIn:Play() end end) MaxSecsBox:GetPropertyChangedSignal("Text"):Connect(function() local num = strToNum(MaxSecsBox.Text),1,999 if num then num = math.clamp(num,1,999) vaultMaxSecs = num MaxSecsBox.Text = tostring(num) else MaxSecsBox.Text = '' end end) MaxSecsBox.FocusLost:Connect(function() MaxSecsBox.Text=tostring(vaultMaxSecs) end) JewlSetBtn.MouseButton1Click:Connect(function() jewlAllowCrims = not jewlAllowCrims JewlSetBtn.Text = jewlAllowCrims and "X" or "" end) --main code local windowFocused = false game:GetService("UserInputService").WindowFocused:Connect(function() windowFocused=true end) game:GetService("UserInputService").WindowFocusReleased:Connect(function() windowFocused=false end) local punchEvent,punchCode,trainEvent,trainCode local function keyclick(num) if windowFocused and keypress and keyrelease then keypress(num) wait() keyrelease(num) end end local function punch() if punchEvent then punchEvent:FireServer(unpack(punchCode)) elseif windowFocused then keyclick(0x46) end end local function exitVehicle() keyclick(0x20) end local function longTP(cf) local original = root.CFrame + Vector3.new(0,math.max(0,140-root.CFrame.y),0) --start high up local oldg = workspace.Gravity workspace.Gravity=0 --consistent velocity along a theoretical array of points between for i=0,1,1/((original.p-cf.p).magnitude / (maxSpeed*0.25)) do if abort then break end root.CFrame = original:lerp(cf,i) root.Velocity=Vector3.new() wait(0.25) end workspace.Gravity=oldg for i=1,5 do if abort then break end root.CFrame = cf wait(0.1) end wait(0.1) end local function bigTP(cf) repeat for i=1,60 do if abort then return end root.CFrame=cf wait() end until wait(0.3) and (root.Position-cf.p).magnitude<9 end local function isBagFull() if player.PlayerGui.MainGui.CollectMoney.Visible==false then return true end return strToNum(player.PlayerGui.MainGui.CollectMoney.Money.Text)+1 >= strToNum(player.PlayerGui.MainGui.CollectMoney.Maximum.Text) end local boxcars = {} for _,v in ipairs(workspace.Trains:GetChildren()) do if v.Name=="BoxCar" and v:FindFirstChild("Gold",true) then boxcars[#boxcars+1]=v end end workspace.Trains.ChildAdded:Connect(function(child) wait(10.5) if child.Name=="BoxCar" and child.Model.Rob:FindFirstChild("Gold") then boxcars[#boxcars+1]=child end end) workspace.Trains.ChildRemoved:Connect(function(child) for i,car in ipairs(boxcars) do if car==child then table.remove(boxcars,i) break end end end) --pcall(function() local MT = getrawmetatable(game) if setreadonly then setreadonly(MT,false) end if make_writeable then make_writeable(MT) end local oldNamecall = MT.__namecall local oldIndex = MT.__index local oldWTSP = workspace.CurrentCamera.WorldToScreenPoint MT.__namecall = function(inst,...) local args = {...} local m = args[#args] if m == "WorldToScreenPoint" and inst.ClassName=="Camera" then local ret = oldWTSP(inst,...) return ret,true end return oldNamecall(inst,...) end MT.__index = function(inst,k) if k=="Velocity" and inst==root then return Vector3.new() end return oldIndex(inst,k) end if setreadonly then setreadonly(MT,true) end --end) local function isVaultOpenAndCopsTooClose() if (workspace.Banks:GetChildren()[1].Door.Closed.Position-Vector3.new(25.6,3.6,815.6)).magnitude > 1 then for _,p in ipairs(game:GetService("Teams").Police:GetPlayers()) do if p.Character and p.Character:FindFirstChild("HumanoidRootPart") then local diff = (p.Character.HumanoidRootPart.Position-root.Position) if diff.magnitude < 40 and (diff*Vector3.new(0,1,0)).magnitude < 10 then return true end end end end return false end local function warnFlash() stprint("About to TP") local col0 = main.BackgroundColor3 for i=1,2 do for a=0,1,1/(30*.25) do main.BackgroundColor3 = col0:lerp(red,a) wait() end for a=0,1,1/(30*.25) do main.BackgroundColor3 = red:lerp(col0,a) wait() end end main.BackgroundColor3 = col0 end local function robJewelry() warnFlash() stprint("TPing to jewelry...") exitVehicle() toggleCanAbort(true) bigTP(CFrame.new(163.7, 106.6, 1341.6)) if abort then return end root.CFrame = CFrame.new(142.169, 17.88, 1351.084) wait(0.5) stprint("Robbery started!") local notRinging = #workspace.Ringers.Jewelry:GetChildren()==0 local broke = 0 for _,box in ipairs(workspace.Jewelrys:GetChildren()[1].Boxes:GetChildren()) do if abort or (broke>2 and isBagFull()) then --duffel bag full break end local dir = ((box.Position.Z > 1338) and -1) or 1 if box.Transparency < 0.9 then if box.Position.X < 115 and box.Position.Z > 1330 then root.CFrame = CFrame.new(box.Position+box.CFrame.lookVector*2.5+Vector3.new(0,0,-2.5),box.Position) elseif box.Position.Z > 1338 then root.CFrame = CFrame.new(box.Position+box.CFrame.lookVector*-2.5,box.Position) else root.CFrame = CFrame.new(box.Position+box.CFrame.lookVector*2.5,box.Position) end wait() for i=1,2 do if abort~=true and broke==0 and notRinging and jewlAllowCrims then wait(2.25) end end local hits = 0 repeat punch() hits=hits+1 if punchEvent==nil or (broke==0 and notRinging) then wait(0.5) end until abort or hits>7 or box.Transparency>0.9 if punchEvent~=nil then wait(0.3) end broke=broke+1 end end wait(0.5) stprint("Escaping...") bigTP(CFrame.new(-365.3, 35.52, 1578.5)) toggleCanAbort(false) stprint("Jewel success! [10s cooldown]") wait(9) end local function robBank() warnFlash() stprint("TPing to bank...") exitVehicle() toggleCanAbort(true) bigTP(CFrame.new(119, 95, 840)) if abort then return end root.CFrame = CFrame.new(23.6, 18.07, 853.5) wait(0.5) if #workspace.Ringers.Bank:GetChildren()==0 then wait(1.5) end --gets in vault stprint("Robbery started!") local elapsed = 0 for i=1,5 do if abort then break end root.CFrame = CFrame.new(15.29, 0.76, 825.36) elapsed=elapsed+wait(0.5) end --wait for bag to fill or player leaves repeat elapsed=elapsed+wait(0.5) until abort or isBagFull() or isVaultOpenAndCopsTooClose() or elapsed>vaultMaxSecs stprint("Escaping...") longTP(CFrame.new(119, 95, 840)) toggleCanAbort(false) stprint("Bank success! [10s cooldown]") wait(9) end local function robTrain() local bcar,gold = boxcars[1],boxcars[1].Model.Rob.Gold local trainFront = workspace.Trains.LocomotiveFront.Model.Front warnFlash() stprint("TPing to train...") exitVehicle() toggleCanAbort(true) bigTP(gold.CFrame+gold.CFrame.rightVector*10) repeat longTP(gold.CFrame+gold.CFrame.rightVector*10) until (root.Position-gold.Position).magnitude < 97 for i=1,5 do if abort then break end root.CFrame = gold.CFrame+(gold.CFrame.lookVector*3.5)+Vector3.new(0,1,0) wait(0.1) end stprint("Opening vault...") local holde=true keyclick(0x45) if keypress and keyrelease then --keypress doesn't seem to "hold" so this is necessary spawn(function() while wait(0.1) and windowFocused and holde do keypress(0x45) end keyrelease(0x45) end) end if trainEvent then trainEvent:FireServer(trainCode,bcar.Skeleton.Vault.Part) end local elapsed=0 if not abort then repeat root.CFrame = gold.CFrame+(gold.CFrame.lookVector*4.5)+Vector3.new(0,1,0) elapsed=elapsed+wait(0.25) until abort or elapsed>9 or bcar.Skeleton.Vault.Part.Open.Value end holde,elapsed=false,0 stprint("Robbery started!") if not abort then repeat root.CFrame = gold.CFrame+gold.CFrame.lookVector+Vector3.new(0,1,0) elapsed=elapsed+wait(0.25) until abort or (elapsed>4 and isBagFull()) or (trainFront.Position-Vector3.new(-1679,25,268)).magnitude<100 or elapsed>vaultMaxSecs end stprint("Escaping...") bigTP(CFrame.new(-365.3, 35.52, 1578.5)) toggleCanAbort(false) stprint("Train success! [10s cooldown]") wait(9) end local spyfunc = hookfunc or replaceclosure if spyfunc then local punchWaiting=false local oldFS oldFS = spyfunc(Instance.new("RemoteEvent").FireServer,function(self,...) if punchWaiting then punchWaiting=false punchEvent = self punchCode = {...} elseif trainEvent==nil then local args = {...} if tostring(args[2])=="Part" and workspace.Trains:IsAncestorOf(args[2]) then trainEvent = self trainCode = args[1] end end return oldFS(self,...) end) spawn(function() repeat if windowFocused then punchWaiting=true punch() end punchWaiting=false wait(0.1) until punchEvent~=nil end) oldWTSP = spyfunc(oldWTSP,function(self,v3) local ret = oldWTSP(self,v3) return ret,true end) end local function newchar(char) if char then root = char:WaitForChild("HumanoidRootPart",4) end end newchar(player.Character) player.CharacterAdded:Connect(newchar) --main loop local bankSign = workspace.Banks:GetChildren()[1].Extra.Sign.Decal local jewlSign = workspace.Jewelrys:GetChildren()[1].Extra.Sign.Decal local isBankOpen = bankSign.Transparency>0.01 local isJewlOpen = jewlSign.Transparency>0.01 bankSign:GetPropertyChangedSignal("Transparency"):Connect(function() wait() isBankOpen = bankSign.Transparency>0.01 end) jewlSign:GetPropertyChangedSignal("Transparency"):Connect(function() wait() isJewlOpen = jewlSign.Transparency>0.01 end) local waiti=0 print("Auto-robbery is running") while wait(0.5) and gui.Parent do if doJewl and isJewlOpen then pcall(robJewelry) isJewlOpen=false elseif doBank and isBankOpen then pcall(robBank) isBankOpen=false elseif doTrain and #boxcars>0 then pcall(robTrain) table.remove(boxcars,1) else stprint("Wait for stores to open".. string.rep('.',waiti%3+1)) waiti=waiti+1 end end return nil