Nicely done!
Trade Feedbacks
For the time-being this script seemingly no longer works on European servers after hotpatch this morning, working on finding a working solution.
Updated script to version 1.4 with new pixel detection. And other tweaks posted by users in this thread.
So i have been showing off in the shoutbawx a few times that i had my own script for this task and i have been receiving quite a bit of doubt if i was just full of crap. Oh well i made a promise that i would eventually share some of the love. And here it is, its now cleaned up and basically ready for anyone to run.
So what is this I'm talking about 1-60 in a day!? Yes this is true, its not 100% 1-60 by itself you will need to get boosted to Act 3 Quest 1 in Normal mode, Nightmare and Hell, how you do that is entirely up to you. anyhow back on topic what this does, it will simply create game click click 2 random locations (cast AOE if in Hell mode) and leave game as quick as possible to gain as many runs as possible per hour. Will print statistics in the script console window as the bot runs
Getting there, start Act 3 Quest 1, talk the the guy on the roof he will light a fire, and you get a quest to light 5 beacons. Now follow the quest till you get through a portal (after you have went through the Stronghold). There should stand a guard talking about lighting the beacons. When your at this location just leave game then when in menu start the bot. (F5 in the Script Editor)
So to get started what do i need?
- Run Diablo 3 in windowed mode /!\important/!\
- Lower all GFX.
- Make the window as small as possible! (drag & drop).
- Download AutoItScript, AutoItScript download page.
- Copy & Paste script into the script editor (SciTE Script Editor).
- Start script (F5).
- Profit!
Hotkeys:
- x = Exit script.
- s = Toggle's bot On or Off, note that it will allways finish working task!
I recommend getting indestructable gear at lvl 30 (when you start on Nightmare) then when you start on Hell you upgrade weapons to do more AOE dmg. Very least do this when you run it on Hell mode since on Hell you must bring some AOE dmg yourself.
Note: On Hell mode you need to bring your own DPS, select a AOE spell as secondary attack!
Hopefully you find this useful and can enjoy it's potential for as long as it lasts!
Video settings.
options.png
Also if you cannot get bot working try this, in you Documents folder there's a folder named "Diablo III" open the file D3Prefs.txt and paste the text found in this link. (its all just video configuration) here. Important that Diablo 3 is not running because it updates this file constantly, so quit Diablo then save the file.
PHP Code:#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.6.1
Author: j0achim @ www.ownedcore.com - http://www.ownedcore.com/forums/members/625808-j0achim.html
Date: 09.06.2012
Script Version: 1.4
Name: j-BastionBot
Script Function:
Repeating a part of Quest 1 in Act 3 "Light the Beacons",
after you start the quest (you can start the very first quest in act 3)
there is a point where you port to a guard that rambles about
Lighting the Beacons, you need to manually go to this fella and leave game.
When your in the menu simply start the script.
Enjoy!
I give you this for free in the hope that you return the favor by showing your appreciation.
Developer comment:
Have ran this script for a little over 2 weeks and leveled a whole bunch of new characters.
If i can recommend quickest way to get lvl 60 do following.
1-25~30 on Normal mode. 2~ hours.
25-50 on Nightmare mode. 5~ hours.
50-60 on Hell mode. 3~ hours.
These times are merely rough estimates, as this is a script it can fail,
disconnected from server for instance. However you check in on bot every now and then
and you will easily be able to level 1 level 60 in a single day!
Friends have requested features such as looting gold and such, but just to answer it right away
it will simply slow down the process considerably and the gain is so little that one hour farming
and you have earned the "lost" amount due to the script not looting.
Questions and Answers:
Q: Bot leaves the game so quickly is it failing?
A: No this is by design we want as many as possible runs per hour. This is the key behind the quick leveling.
Q: Not all monsters die?!
A: There are many factors, this is meant for characters that have no run speed bonus. And if your pc is incredibly
slow it could mess up the script making it delay actions till the time window has expired. I.e running virtual machines
to level multiple toons at same time. (I do that.)
Q: Please make it loot!
A: No. Dont want it, dont need it.
Credits:
To anyone contributed in the tread with tweaks.
#ce ----------------------------------------------------------------------------
HotKeySet("x","endbot")
HotKeySet("s","toggle")
Global $toggle = True
Global $mode = 0
Global $wpos = WinGetPos("Diablo III")
Global $ini = "j-Bationbot.ini"
Global $checksum[3]
;Lets make sure user have made Diablo window as small as possible.
WinMove("Diablo III","",$wpos[0],$wpos[1],816, 638)
ConsoleWrite("Starting j-BastionBot by j0achim @ www.ownedcore.com"&@CRLF)
ConsoleWrite("Version: 1.4 - 09.06.2012"&@CRLF)
ConsoleWrite("Greetings to all of the ownedcore community!"&@CRLF&@CRLF)
Check()
GetChecksum()
$q = MsgBox(48+4,"j-BastionBot","You're difficulty set to Hell?")
If $q = 6 Then
$mode = 1
EndIf
WinActivate("Diablo III")
Sleep(500)
$r = 1
$t = TimerInit()
while 1
While $toggle = True
Check()
$wpos = WinGetPos("Diablo III")
If PixelChecksum($wpos[0]+385,$wpos[1]+382,$wpos[0]+389,$wpos[1]+86) = $checksum[0] Then ;Error message.
Click(385,382)
Move(40,40,20)
Sleep(50)
ElseIf PixelChecksum($wpos[0]+76,$wpos[1]+258,$wpos[0]+80,$wpos[1]+262) = $checksum[1] Then ;Were in character menu.
Click(76,258)
Move(40,40,20)
Sleep(50)
ElseIf PixelChecksum($wpos[0]+116,$wpos[1]+608,$wpos[0]+120,$wpos[1]+612) = $checksum[2] Then ;Were ingame.
ConsoleWrite("=== STARTING NEW GAME ===" & @CRLF)
ConsoleWrite("Run #: " & $r & @crlf)
$rt = TimerInit()
Sleep(Random(120,130))
ControlSend("Diablo III","","","{SPACE}")
Sleep(Random(550,600))
Click(757,605,"Left",2)
Sleep(Random(1900,1950))
Click(493,333)
Sleep(Random(700,850))
;Mode 1 means we should do some AOE dmg over the guard. This is absolutely needed in Hell mode.
If $mode = 1 Then
ControlSend("Diablo III","","","{SHIFTDOWN}")
Sleep(25)
For $x = 0 to 12
Click(705,410,"Right",10)
Sleep(Random(25,75))
Next
ControlSend("Diablo III","","","{SHIFTUP}")
Sleep(25)
EndIf
;Back to Camp.
Sleep(Random(500,600))
Click(73,52)
Sleep(Random(1900,1950))
Click(214,143)
Sleep(Random(1900,1950))
;Back to game menu.
ControlSend("Diablo III","","","{ESC}")
Sleep(Random(15,25))
Click(352,349)
$c = 0
Do
Sleep(100)
$c +=1
;Make sure we never get stuck here for infinity.
If $c > 120 Then
ExitLoop
EndIf
Until PixelChecksum($wpos[0]+76,$wpos[1]+258,$wpos[0]+80,$wpos[1]+262) = $checksum[1]
$srt = TimerDiff($rt)
ConsoleWrite("Runtime: " & Round($srt/1000,2) & " seconds." & @CRLF)
$trt = TimerDiff($t)
$total = Round((($trt/1000)/60)/60,4)
$rph = Round($r/$total)
;Total runtiume calculation.
$hours = Floor((($trt/1000)/60)/60)
$minutes = (($trt/1000)/60)
;trim minutes if runtime is more then 1 hour.
If $minutes > 60 Then
While $minutes > 60
$minutes -=60
WEnd
EndIf
ConsoleWrite("Total runtime: " & $hours & " hours, "& Ceiling($minutes) &" minutes."& @CRLF)
ConsoleWrite("Runs per hour: " & $rph & @CRLF)
ConsoleWrite("=== RUN #: " & $r & " HAS ENDED ===" & @CRLF & @CRLF)
$r +=1
Move(40,40,20)
EndIf
Sleep(300)
WEnd
Sleep(300)
WEnd
Func GetChecksum()
$checksum[0] = IniRead($ini,"Checksum","Error",0)
$checksum[1] = IniRead($ini,"Checksum","Menu",0)
$checksum[2] = IniRead($ini,"Checksum","Ingame",0)
If $checksum[0] = 0 Then
MsgBox(64,"j-BastionBot","Calibration needed, for this calibration bot needs to see a Error message in you're Diablo III client. Easiest way to do this is logging out of the game and typing the wrong password. When you have done this press Ok.")
Check()
$wpos = WinGetPos("Diablo III","")
Sleep(50)
Move(40,40)
Sleep(50)
$checksum[0] = PixelChecksum($wpos[0]+385,$wpos[1]+382,$wpos[0]+389,$wpos[1]+86)
IniWrite($ini,"Checksum","Error",$checksum[0])
EndIf
If $checksum[1] = 0 Then
MsgBox(64,"j-BastionBot","Calibration needed, for this calibration bot needs to be in the game menu, then press Ok.")
Check()
$wpos = WinGetPos("Diablo III","")
Sleep(50)
Move(40,40)
Sleep(50)
$checksum[1] = PixelChecksum($wpos[0]+76,$wpos[1]+258,$wpos[0]+80,$wpos[1]+262)
IniWrite($ini,"Checksum","Menu",$checksum[1])
EndIf
If $checksum[2] = 0 Then
MsgBox(64,"j-BastionBot","Calibration needed, for this calibration bot needs to be in-game, then press Ok.")
Check()
$wpos = WinGetPos("Diablo III","")
Sleep(50)
Move(40,40)
Sleep(50)
$checksum[2] = PixelChecksum($wpos[0]+116,$wpos[1]+608,$wpos[0]+120,$wpos[1]+612)
IniWrite($ini,"Checksum","Ingame",$checksum[2])
EndIf
EndFunc
Func Move($x,$y,$offset = 5)
Check()
$wpos = WinGetPos("Diablo III")
MouseMove(Random(($wpos[0]+$x)-$offset,($wpos[0]+$x)+$offset),Random(($wpos[1]+$y)-$offset,($wpos[1]+$y)+$offset))
EndFunc
Func Click($x, $y, $button = "Left", $offset = 5)
Check()
$wpos = WinGetPos("Diablo III")
MouseClick($button,Random(($wpos[0]+$x)-$offset,($wpos[0]+$x)+$offset), Random(($wpos[1]+$y)-$offset,($wpos[1]+$y)+$offset), 1, 3)
Sleep(50)
EndFunc
Func Check()
If Not WinExists("Diablo III","") Then
MsgBox(64,"j-BastionBot","Unable to detect if Diablo III window exists, if this is incorrect please replay in thread about this issue and include as much details as possible."&@CRLF&@CRLF&"Closing!")
Exit
EndIf
If Not WinActive("Diablo III","") Then
WinActivate("Diablo III")
EndIf
$p = WinGetPos("Diablo III","")
If $p[2] <> 816 Or $p[3] <> 638 Then
WinMove("Diablo III", "", $p[0],$p[1], 816, 638)
$c = WinGetPos("Diablo III","")
If $c[2] <> 816 Or $c[3] <> 638 Then
$r = MsgBox(16+4,"j-BastionBot","Unable to set the correct window size script might not run correctly. Do you want to continue run the script?")
If $r = 7 Then
endbot()
EndIf
EndIf
EndIf
EndFunc
Func toggle()
If $toggle = True Then
ConsoleWrite("Toggle bot OFF."&@CRLF)
$toggle = False
Sleep(100)
Else
ConsoleWrite("Toggle bot ON."&@CRLF)
$toggle = True
Sleep(100)
EndIf
EndFunc
Func endbot()
MsgBox(64,"j-BastionBot", "j-BastionBot stopped.",5)
Exit
EndFunc
Last edited by j0achim; 06-09-2012 at 11:04 AM.
Trade Feedbacks
Nicely done!
Nice job man! Check pm![]()
hey, i found your script really usefull! thanks for that
but i have 1 problem:
when the bot finished the quest and did leave the game to the main menu the bot don't start the game again by itself. So, he don't clicks "Resume Game" in main menu by itself.
is that normal?
Trade Feedbacks
No that is not normal, if my script re-sized your window what you need to do is just tap the corner of your window when the diagonal arrow appears just left click it. (do not drag an drop, only a quick tap) This is because when AutoIt re-size you're window Diablo will not understant and it messes up the pixel's however when you tap the corner everything is "normal" again.
I have uploaded a image of my settings in my original post. as well as D3Prefs.txt with a link to a text repository,
Last edited by j0achim; 06-08-2012 at 08:08 PM.
Trade Feedbacks
Does it have to be as small as possible? ;p
Thank you for this - one of the first few scripts I have gotten to work. without the need to tweak anything myself.
My only suggestion would be to add another 'type' instead of hell, to just logout after the first right click because on normal - using grasp on rightclick the mobs die on meteor hit but it waits a further 4~ seconds before logging out resulting in broken gear from dying to the last 'fallen' mob which never dies to the hit.
I know there is the normal, by clicking no when asked about difficulty but not all of them die because they are spread out.
But still thanks for sharing this.
Trade Feedbacks
Hmm I feel silly. So I ran my level 1 to the spot (entered skycrown, then left game so it enters skycrown barracks on resume), left game and hit f5. It asked me if I was in hell, I said no. It resized my game, I clicked the border to fix the resolution and now i'm able to see whats going on in my game, its the smallest it can be (thx to your script) but its not doing anything but sitting at character select. I hit s and it says "off" then s for "on" and still nothing. I have the exact same video config going too.
this script is for the meteor falling on the mobs part right? or did I go to the wrong spot? It sounds like you started the very beginning of Q1, but I selected "light the beacons" which seems to be the same thing to me, either way the bot isnt even hitting resume game so I'm trying to figure that out.
Weird, it work on my main computer but not my laptop. Wonder why.
Last edited by lostsk8r; 06-08-2012 at 08:23 PM.
Trade Feedbacks
Get indestructable gear but unless your playing on Hell it does not rally matter.
Sent from my GT-I9300 using Tapatalk 2
it didn't really helped. my cursor still moves strictly to the top left corner of my monitor after getting to the main menu :/
maybe it's something in that part of the code?
ElseIf PixelChecksum($wpos[0]+76,$wpos[1]+258,$wpos[0]+80,$wpos[1]+262) = 2572354573 Then ;Were in character menu.
Click(76,25
MouseMove(Random(10,45),Random(30,40),0)
Sleep(50)
Replaced
withElseIf PixelChecksum($wpos[0]+76,$wpos[1]+258,$wpos[0]+80,$wpos[1]+262) = 2572354573 Then ;Were in character menu.
andElseIf PixelChecksum($wpos[0]+76,$wpos[1]+258,$wpos[0]+80,$wpos[1]+262) = 2570191885 Then ;Were in character menu.
withElseIf PixelChecksum($wpos[0]+116,$wpos[1]+608,$wpos[0]+120,$wpos[1]+612) = 3853584318 Then ;Were ingame.
working for me.ElseIf PixelChecksum($wpos[0]+116,$wpos[1]+608,$wpos[0]+120,$wpos[1]+612) = 3852273597 Then ;Were ingame.
Last edited by Aurel1; 06-08-2012 at 08:35 PM.
Trade Feedbacks
Yea thats right i forgot to add offset to that click will update main post shortly.
Sent from my GT-I9300 using Tapatalk 2
Trade Feedbacks
Trade Feedbacks
Thanks for the shareWorking nicely with the changes.
Bookmarks