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.