Before I even post the code, I want to make sure this is clear, and I can't stress it enough. Either read the green text at the top, or through the first post
For this to work, you need certain passives, and you need 10% movement speed on your boots.
Now, when you start the script, for about 30 seconds or so, it's going to look like it's not working. The mouse will move around your menu screen, it'll open your banner edit page thing, etc... But after about 30 seconds, it will start the proper loop. This is normal.
Code:
;notAres' Sarkoth DH Gold Script 1.3a - 6/9/2012 - Holy shit look how beautiful this code is. Utilized ExitLoop to perfect the efficiency when dead/logging out/in need of repair
;Thread: http://ownedcore.com/forums/diablo-3/diablo-3-bots-programs/354464-goldfarming-notares-sarkarth-dh-gold-script-autoit-script-1920x1080.html
;Please notice I changed some variable names around and added a variable for teleport time. $waittime is now appropriately named $loadtime.
;WONT WORK UNLESS MOVE IS BOUND TO MIDDLE MOUSE (Mouse 3) -- NOT MOVE/INTERACT
;Required build: http://us.battle.net/d3/en/calculator/demon-hunter#aRYXVT!aTW!YcaZbY
;Required movement speed: 25% (10% boots + 15% passive 'Hot Pursuit')
;Required display mode for cellar detection: "FULLSCREEN WINDOWED"
;Official supported resolution: 1920x1080
;;;;;
;Features:
;Loot scanning. Will only pick up rare/legendary/set pieces [IMPROVED]
;Randomized aiming coordinates (but still static path)
;Randomized pickup timers for variation in runs
;Automatic repair on yellow status icon
;Automatic resolution adjustment (16:9 only) [BUGGY - need someone to tweak coords]
;Death check
;Open window check (in rare case it gets stuck in menu)
;;;;;
;Original:
;[Goldfarming] AFK 150k-200k Gold Per Hour by mackus101 @ ownedcore
Opt('MouseCoordMode', 2)
Opt('PixelCoordMode', 2)
Global $Paused
HotKeySet("=","Leave") ;script started by pressing =
HotKeySet("-", "Pause") ;script paused by pressing -
HotKeySet("x", "Stop") ;script stopped by pressing x
$walktime = 3000 ; time in ms the script waits for you to enter and load the cellar. Slow this down for slower move speeds and loading times
$loadtime = 3200 ; time in ms the script waits for the game to load before it starts pathfinding. Slow this down for slower hard drives
$tptime = 6900 ; time in ms the script waits for teleport before exiting the game
$yellow = 0xFFF000 ; yellow color code (repair icon)
$red = 0xD90000 ; red color code (repair icon)
$LootRares = True ; Change this to false if you don't want the bot to pick up rares (good for legendary/set only, recommend setting LootGems to False)
$LootGems = False ; Change this to true if you want to pick up gems (messy, can fill up bag with whites/blues)
$Amethyst = 0xAC7FFF
$Ruby = 0xB01D2D
$Emerald = 0x58EE33
$Topaz = 0xFFFF59
$go = True
$Leave = False
$Dead = False
$Logout = False
$Window = False
$default_resolutionX = 1920
$default_resolutionY = 1080
$x_ratio = 1600 / $default_resolutionX
$y_ratio = 900 / $default_resolutionY
$i = 0
Call("RestartRun")
Func RestartRun()
While $go
if($Leave) Then
$i = 0
Sleep(800) ;had to add this since the icon doesn't show up RIGHT away in game
Call("CheckDead")
Call("CheckRepair")
If $Window Then
MouseClick("left", Round(230*$x_ratio),Round(416*$y_ratio)) ;button to resume game from main menu
Sleep($loadtime)
$Window = False
ExitLoop
ElseIf $Dead or $Logout Then
ExitLoop
EndIf
MouseClick("middle", Round(500*$x_ratio), Round(250*$y_ratio)) ;starts the run [waypoint 1]
Sleep(900)
Send("2")
Sleep(250)
MouseClick("middle", 1, Round(370*$y_ratio)) ;waits ~1 second then [waypoint 2]
Sleep(1500)
MouseClick("middle", Round(400*$x_ratio), Round(600*$y_ratio)) ;middle of courtyard [waypoint 3]
Sleep(40)
Send("2")
Sleep(20)
Send("3")
Sleep(600)
Send("1")
Sleep(300)
MouseMove(Round(300*$x_ratio),Round(100*$y_ratio),1) ;moves cursor over to the cellar so the proper blue pixel becomes highlighted
Sleep(790)
Call("CheckDead")
If $Window Then
MouseClick("left", Round(230*$x_ratio),Round(416*$y_ratio)) ;button to resume game from main menu
Sleep($loadtime)
$Window = False
ExitLoop
ElseIf $Dead or $Logout Then
ExitLoop
EndIf
$Pixel2 = PixelSearch(0,0, Round(600*$x_ratio), Round(600*$y_ratio),0x334FB7,3) ;checks for open cellar (in a 600x400 box from the top left - where it should always be)
If Not @error Then
MouseClick("left",Round(300*$x_ratio),Round(100*$y_ratio)) ;Entrance to cellar
Sleep(300)
Send("2")
Sleep($walktime)
MouseClick("middle",Round(110*$x_ratio),Round(1000*$y_ratio)) ;moves to doorway leading to rare inside cellar
Sleep(2500)
MouseMove(Round(440*$x_ratio),Round(80*$y_ratio),1) ;hovers over the rare Sarkoth
Sleep(10)
Send("{SHIFTDOWN}")
MouseDown("right") ;attack middle
Sleep(1200)
Send("4")
Sleep(3000)
MouseUp("right")
MouseClick("left",Round(440*$x_ratio),Round(80*$y_ratio),2)
MouseMove(Round(240*$x_ratio),Round(75*$y_ratio),1) ;attack left
Sleep(40)
MouseDown("right")
Sleep(2800)
MouseUp("right")
MouseMove(Round(590*$x_ratio),Round(50*$y_ratio),1) ;attack right
MouseDown("right")
Sleep(1800)
MouseUp("right")
MouseDown("left")
MouseMove(Round(Random(240,260)*$x_ratio),Round(75*$y_ratio),1) ;attack left
Sleep(1200)
MouseMove(Round(Random(560,600)*$x_ratio),Round(50*$y_ratio),1) ;attack right
Sleep(1200)
MouseUP("left")
Sleep(10)
MouseClick("right",Round(620*$x_ratio),Round(20*$y_ratio),2) ;break the table & chair
Sleep(10)
Send("{SHIFTUP}")
Sleep(400)
MouseClick("middle",Round(530*$x_ratio),Round(170*$y_ratio)) ;location of sarkoth after death
Sleep(2100)
MouseClick("middle",Round(580*$x_ratio),Round(460*$y_ratio)) ;move to left top corner for gold
Sleep(1100)
MouseClick("middle",Round(1330*$x_ratio),Round(330*$y_ratio)) ;move to right top corner for gold
Sleep(1100)
Send("4")
MouseClick("middle",Round(1010*$x_ratio),Round(940*$y_ratio)) ;move to middle before looting
Call("CheckLoot")
Send("t")
Sleep($tptime)
Call("CheckDead")
If Not $Logout And Not $Dead And Not $Window Then
Sleep(300)
Send("{ESCAPE}") ;menu
Sleep(200)
MouseClick("left", Round(956*$x_ratio),Round(579*$y_ratio)) ;button to leave game
Sleep($loadtime)
Call("CheckDead")
If Not $Logout Then
MouseClick("left", Round(230*$x_ratio),Round(416*$y_ratio)) ;button to resume game from main menu
Sleep($loadtime)
EndIf
Else
MouseClick("left", Round(230*$x_ratio),Round(416*$y_ratio)) ;button to resume game from main menu
Sleep($loadtime)
$Window = False ; reset the flag so it doesn't think a window is always up
EndIf
Else
Sleep(10)
MouseClick("middle",Round(1100*$x_ratio),Round(600*$y_ratio)) ;moves between caltrops for safety before teleporting back to town
Sleep(200)
Send("1")
Sleep(620)
Send("2")
Sleep(40)
Send("t")
Sleep($tptime)
Call("CheckDead")
If Not $Logout And Not $Dead And Not $Window Then
Sleep(300)
Send("{ESCAPE}") ;menu
Sleep(200)
MouseClick("left", Round(956*$x_ratio),Round(579*$y_ratio)) ;button to leave game
Sleep($loadtime)
Call("CheckDead")
If Not $Logout Then
MouseClick("left", Round(230*$x_ratio),Round(416*$y_ratio)) ;button to resume game from main menu
Sleep($loadtime)
EndIf
Else
MouseClick("left", Round(230*$x_ratio),Round(416*$y_ratio)) ;button to resume game from main menu
Sleep($loadtime)
$Window = False ; reset the flag so it doesn't think a window is always up
EndIf
EndIf
EndIf
WEnd
Call("RestartRun")
EndFunc
Func CheckDead()
Call("CheckWindow")
$YouHaveDied = PixelSearch(Round(620*$x_ratio), Round(325*$y_ratio), Round(625*$x_ratio), Round(330*$y_ratio), 0xFFFFFF) ; checks for white text "YOU HAVE DIED"
If Not @error Then
If Not $Window Then
$Dead = True
Sleep(100)
Send("{Escape}")
Sleep(10)
MouseClick("left", Round(956*$x_ratio),Round(579*$y_ratio)) ;button to leave game
Sleep(11000)
Sleep($loadtime)
MouseClick("left", Round(230*$x_ratio),Round(416*$y_ratio)) ;button to resume game from main menu
Sleep($loadtime)
Else
MouseClick("left", Round(230*$x_ratio),Round(416*$y_ratio)) ;button to resume game from main menu
Sleep($loadtime)
$Dead = False
EndIf
Else
$Dead = False
EndIf
$LogoutTimerCancel = PixelSearch(Round(900*$x_ratio), Round(240*$y_ratio), Round(1010*$x_ratio), Round(290*$y_ratio), 0x993827) ; checks for cancel button on logout timer
If Not @error Then
Sleep(11000)
Sleep($loadtime)
If Not $Window Then
$Dead = True
$Logout = True
Sleep($loadtime)
MouseClick("left", Round(230*$x_ratio),Round(416*$y_ratio)) ;button to resume game from main menu
Sleep($loadtime)
Else
MouseClick("left", Round(230*$x_ratio),Round(416*$y_ratio)) ;button to resume game from main menu
Sleep($loadtime)
$Logout = False
EndIf
Else
$Logout = False
EndIf
EndFunc
Func CheckWindow()
$CloseButton = PixelSearch(Round(1570*$x_ratio), Round(110*$y_ratio), Round(1590*$x_ratio), Round(120*$y_ratio), 0x8C2300) ; checks for the red color of the "X" on an open window
If Not @error Then
Sleep(200)
Send("{SPACE}") ;close any open windows
$Window = True
Else
$Window = False
EndIf
EndFunc
Func CheckRepair()
$RepairArea = PixelSearch(Round(1480*$x_ratio), 0, Round(1570*$x_ratio), Round(100*$y_ratio), $yellow)
If Not @error Then
Call("DoRepair")
EndIf
$RepairAreaRed = PixelSearch(Round(1480*$x_ratio), 0, Round(1570*$x_ratio), Round(100*$y_ratio), $red)
If Not @error Then
Call("DoRepair")
EndIf
EndFunc
Func DoRepair()
Sleep(100)
Send("t")
Sleep($tptime)
MouseClick("left", Round(1480*$x_ratio),Round(281*$y_ratio)) ;begin movement towards merchant
Sleep(1500)
MouseClick("left", Round(1316*$x_ratio),Round(206*$y_ratio)) ;moves to get merchant in screen
Sleep(1500)
MouseClick("left", Round(845*$x_ratio),Round(225*$y_ratio)) ;NPC Merchant to the right of cain's home
Sleep(1200)
MouseClick("left", Round(521*$x_ratio),Round(506*$y_ratio)) ;button to open up repair menu
Sleep(400)
MouseClick("left", Round(260*$x_ratio),Round(595*$y_ratio)) ;button to pay for repairs
Sleep(200)
Call("CheckDead")
If Not $Dead and Not $Logout Then
Send("{ESCAPE}") ;closes repair tab
Sleep(100)
Send("{ESCAPE}") ;menu
Sleep(10)
MouseClick("left", Round(956*$x_ratio),Round(579*$y_ratio)) ;button to leave game
Sleep($loadtime)
MouseClick("left", Round(230*$x_ratio),Round(416*$y_ratio)) ;button to resume game from main menu
Sleep($loadtime)
EndIf
EndFunc
Func CheckLoot()
Sleep(Random(500,2000))
$SetLoot = PixelSearch(Round(400*$x_ratio), 0, Round(1690*$x_ratio), Round(900*$y_ratio), 0x02CE01, 2) ; set loot
If Not @error Then
MouseClick ('left', $SetLoot[0], $SetLoot[1])
Sleep(Random(800,1200))
$i+= 1
If $i <= 6 Then
Call("CheckLoot")
EndIf
EndIf
$LegendaryLoot= PixelSearch(Round(400*$x_ratio), 0, Round(1690*$x_ratio), Round(900*$y_ratio), 0xBF642F, 2) ; legendary loot
If Not @error Then
MouseClick ('left', $LegendaryLoot[0], $LegendaryLoot[1])
Sleep(Random(800,1200))
$i+= 1
If $i <= 6 Then
Call("CheckLoot")
EndIf
EndIf
If $LootRares Then
$RareLoot = PixelSearch(Round(400*$x_ratio), 0, Round(1690*$x_ratio), Round(900*$y_ratio), 0xBBBB00, 2) ; rare loot (darker for compatibility)
If Not @error Then
MouseClick ('left', $RareLoot[0], $RareLoot[1])
Sleep(Random(700,900))
$i+= 1
If $i <= 6 Then
Call("CheckLoot")
EndIf
EndIf
EndIf
If $LootGems Then
$AmethystDrop = PixelSearch(Round(400*$x_ratio), 0, Round(1690*$x_ratio), Round(900*$y_ratio), $Amethyst,8)
If Not @error Then
MouseClick("left", $AmethystDrop[0], $AmethystDrop[1])
Sleep(Random(900,1400))
$i+= 1
If $i <= 10 Then
Call("CheckLoot")
EndIf
EndIf
$RubyDrop = PixelSearch(Round(400*$x_ratio), 0, Round(1690*$x_ratio), Round(900*$y_ratio), $Ruby,6)
If Not @error Then
MouseClick("left", $RubyDrop[0], $RubyDrop[1])
Sleep(Random(900,1400))
$i+= 1
If $i <= 10 Then
Call("CheckLoot")
EndIf
EndIf
$EmeraldDrop = PixelSearch(Round(400*$x_ratio), 0, Round(1690*$x_ratio), Round(900*$y_ratio), $Emerald,11)
If Not @error Then
MouseClick("left", $EmeraldDrop[0], $EmeraldDrop[1])
Sleep(Random(900,1400))
$i+= 1
If $i <= 10 Then
Call("CheckLoot")
EndIf
EndIf
$TopazDrop = PixelSearch(Round(400*$x_ratio), 0, Round(1690*$x_ratio), Round(900*$y_ratio), $Topaz,2)
If Not 1 = 1 Then ; change to 'If Not @error Then' if you want to search for topazes
MouseClick("left", $TopazDrop[0], $TopazDrop[1])
Sleep(Random(900,1400))
$i+= 1
If $i <= 10 Then
Call("CheckLoot")
EndIf
EndIf
EndIf
EndFunc
Func Pause()
$Leave = False
EndFunc
Func Stop() ;to allow the script to stop
Exit
EndFunc
Func Leave()
$Leave = True
EndFunc
Now again, you HAVE to edit your D3Prefs.txt file. Locate these lines, and make them these exact values.
When you run D3, it should launch in a 1600x900 window, not fullscreen, or windowed fullscreen. Load the scrip, press the "=" key, watch your cursor bounce around the D3 window for a bit, then it'll be off. I just tested it personally, and it works fine. There is absolutely no reason it shouldn't work for anyone else, unless you are not doing something correct. That's the whole point of having it run in windowed mode.