SHOW:
|
|
- or go back to the newest paste.
1 | ;notAres' Sarkoth DH Gold Script 1.4a - 6/10/2012 - Improved looting with black backgrounds. Experimental support for different resolutions (especially windowed mode). Rehauled ImageSearch looting, contributions from rvbfreak, goofinator, and asuRob | |
2 | ;IF YOU PLAN TO USE IMAGESEARCH FUNCTIONS: | |
3 | ;Download: http://www.mediafire.com/?vtx9l1woj61h8r6 (1.4a new link) | |
4 | ;If your Windows installation is x64, use the 64-bit native AutoIt and the x64 directory in the archive | |
5 | ;Extract and copy AutoIt3 folder to Program Files directory | |
6 | ;Extract and copy all dlls to C:\Windows\ directory (optionally copy the MSVCR dlls to System32 as well) | |
7 | ;Extract pics directory anywhere and update the $directory var - INCLUDE TRAILING BACKSLASH: C:\pics\ | |
8 | ;If you are running anything but fullscreen mode, the size of letters will mismatch and not loot anything. Resize or make your own pngs. | |
9 | ;IF YOU COMPILE THE SCRIPT TO EXE AND YOU USE X64: | |
10 | ;Run "Compile script to .exe (x64)" | |
11 | ;Check "Lowest" under the Compression menu option | |
12 | ;Leave x64 checkbox checked | |
13 | ;;;;; | |
14 | ;WONT WORK UNLESS MOVE IS BOUND TO MIDDLE MOUSE (Mouse 3) -- NOT MOVE/INTERACT | |
15 | ;Required build: http://us.battle.net/d3/en/calculator/barbarian#WTXYQg!ZVg!abcZaY | |
16 | ;Required display mode for cellar detection: "FULLSCREEN WINDOWED" | |
17 | ;Official supported resolution: 1920x1080 | |
18 | ;;;;; | |
19 | ;Original: [Goldfarming] AFK 150k-200k Gold Per Hour by mackus101 @ ownedcore | |
20 | ;ImageSearch contributions by rvbfreak, goofinator, and asuRob | |
21 | ||
22 | #include <ImageSearch.au3> ;comment this if you are not using the new looting system | |
23 | Global $Paused | |
24 | Opt('MouseCoordMode', 2) | |
25 | Opt('PixelCoordMode', 2) | |
26 | HotKeySet("=","Leave") ;script started by pressing = | |
27 | HotKeySet("-", "Pause") ;script paused by pressing - | |
28 | HotKeySet("x", "Stop") ;script stopped by pressing x | |
29 | ||
30 | ;ImageSearch Looting Variables | |
31 | $ImgLoot = True ; set this to true if you want to use ImageSearch looting system. False will revert to old PixelSearch method | |
32 | $directory = "C:\Program Files (x86)\AutoIt3\pics\" ; CHANGE THIS! Point it to the directory with the imagesearch pngs | |
33 | $totalItems = 19; This needs to match the number of pngs you are loading | |
34 | Global $pick[$totalItems], $size = WinGetClientSize("[TITLE:Diablo III; CLASS:D3 Main Window Class]"), $go = True, $Leave = False, $Dead = False, $Logout = False, $Window = False, $i = 0, $currentArrayItem = 0, $gX = 0, $gY = 0 | |
35 | If ($size[0]/$size[1]) <> 16/9 Then $size[1]-=30 ; adjusts ratio for titlebar if not 16:9 | |
36 | $pick[0] = "legendaryA.png|40" | |
37 | $pick[1] = "legendaryE.png|40" | |
38 | $pick[2] = "legendaryI.png|30" | |
39 | $pick[3] = "legendaryO.png|40" | |
40 | $pick[4] = "legendaryU.png|40" | |
41 | $pick[5] = "setA.png|40" | |
42 | $pick[6] = "setE.png|40" | |
43 | $pick[7] = "setU.png|40" | |
44 | $pick[8] = "setO.png|40" | |
45 | $pick[9] = "setI.png|40" | |
46 | $pick[10] = "rareA.png|40" | |
47 | $pick[11] = "rareE.png|40" | |
48 | $pick[12] = "rareI.png|30" | |
49 | $pick[13] = "rareO.png|40" | |
50 | $pick[14] = "rareU.png|40" | |
51 | $pick[15] = "ros.png|30" | |
52 | $pick[16] = "ans.png|30" | |
53 | $pick[17] = "uare.png|40" | |
54 | $pick[18] = "tome.png|40" | |
55 | ||
56 | $LootRares = True ; set this to false if you don't want the bot to pick up rares (old looting method only) | |
57 | $Timer = False ; set this to true and the bot will randomly wait (5% chance) in town for 30-60 seconds before starting over | |
58 | $walktime = 2600 ; time in ms the script waits for you to enter and load the cellar. Slow this down for slower move speeds and loading times | |
59 | $loadtime = 3300 ; time in ms the script waits for the game to load before it starts pathfinding. Slow this down for slower hard drives | |
60 | $tptime = 6900 ; time in ms the script waits for teleport before exiting the game | |
61 | $x_ratio = $size[0] / 1920 | |
62 | $y_ratio = $size[1] / 1080 | |
63 | $yellow = 0xFFF000 ; yellow color code (repair icon) | |
64 | $red = 0xD90000 ; red color code (repair icon) | |
65 | ||
66 | Call("RestartRun") | |
67 | Func RestartRun() | |
68 | While $go | |
69 | if($Leave) Then | |
70 | $i = 0 | |
71 | Call("CheckExit") | |
72 | Sleep(850) ;had to add this since the icon doesn't show up RIGHT away in game | |
73 | Call("CheckDead") | |
74 | Call("CheckRepair") | |
75 | If $Window Then | |
76 | MouseClick("left", Round(140*$x_ratio),Round(420*$y_ratio)) ;button to resume game from main menu | |
77 | Sleep($loadtime) | |
78 | $Window = False | |
79 | ExitLoop | |
80 | ElseIf $Dead or $Logout Then | |
81 | ExitLoop | |
82 | EndIf | |
83 | MouseClick("middle", Round(587 * $x_ratio),Round(333 * $y_ratio)) ;starts the main run | |
84 | Sleep(1090) | |
85 | MouseMove(Round(96*$x_ratio),Round(383*$y_ratio),1) | |
86 | Sleep(10) | |
87 | Send("1") | |
88 | Sleep(800) | |
89 | MouseClick("middle", Round(56 * $x_ratio),Round(290 * $y_ratio)) | |
90 | Sleep(2900) | |
91 | - | MouseMove(Round(320*$x_ratio),Round(205*$y_ratio),1) ;moves cursor over to the cellar so the proper blue pixel becomes highlighted |
91 | + | MouseMove(Round(320*$x_ratio),Round(225*$y_ratio),1) ;moves cursor over to the cellar so the proper blue pixel becomes highlighted |
92 | Sleep(600) | |
93 | Call("CheckDead") | |
94 | If $Window Then | |
95 | MouseClick("left", Round(230*$x_ratio),Round(416*$y_ratio)) ;button to resume game from main menu | |
96 | Sleep($loadtime) | |
97 | $Window = False | |
98 | ExitLoop | |
99 | ElseIf $Dead or $Logout Then | |
100 | ExitLoop | |
101 | EndIf | |
102 | $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) | |
103 | If Not @error Then | |
104 | - | MouseClick("left",Round(320*$x_ratio),Round(205*$y_ratio)) ;Entrance to cellar |
104 | + | MouseClick("left",Round(320*$x_ratio),Round(225*$y_ratio)) ;Entrance to cellar |
105 | Sleep(1400) | |
106 | Sleep($walktime) | |
107 | MouseClick("middle",Round(80*$x_ratio),Round(830*$y_ratio)) ;moves to doorway leading to rare inside cellar | |
108 | Sleep(2500) | |
109 | MouseMove(Round(350*$x_ratio),Round(60*$y_ratio),1) ;hovers over the rare Sarkoth | |
110 | Sleep(5) | |
111 | Send("1") | |
112 | Sleep(10) | |
113 | MouseClick("right",Round(0*$x_ratio),Round(0*$y_ratio)) | |
114 | Sleep(140) | |
115 | MouseClick("right",Round(0*$x_ratio),Round(0*$y_ratio)) | |
116 | Sleep(140) | |
117 | MouseClick("right",Round(0*$x_ratio),Round(0*$y_ratio)) | |
118 | Sleep(1000) | |
119 | Send("2") | |
120 | Sleep(120) | |
121 | Send("2") | |
122 | Sleep(120) | |
123 | Send("2") | |
124 | Sleep(120) | |
125 | Send("2") | |
126 | Sleep(120) | |
127 | Send("3") | |
128 | Sleep(120) | |
129 | Send("3") | |
130 | Sleep(120) | |
131 | Send("3") | |
132 | Sleep(120) | |
133 | Send("3") | |
134 | Sleep(140) | |
135 | Send("4") | |
136 | Sleep(140) | |
137 | Send("4") | |
138 | Sleep(140) | |
139 | Send("4") | |
140 | Sleep(1700) | |
141 | MouseClick("middle",Round(750*$x_ratio),Round(555*$y_ratio)) ;move to left top corner for gold | |
142 | Sleep(1000) | |
143 | MouseClick("middle",Round(1175*$x_ratio),Round(350*$y_ratio)) ;move to right top corner for gold | |
144 | Sleep(1000) | |
145 | MouseClick("middle",Round(1020*$x_ratio),Round(773*$y_ratio)) ;move to middle before looting | |
146 | Sleep(1000) | |
147 | MouseClick("middle",Round(900*$x_ratio),Round(400*$y_ratio)) ;move to right top corner for gold | |
148 | Call("CheckLoot") | |
149 | Send("t") | |
150 | Sleep($tptime) | |
151 | Call("RandomSleep") | |
152 | Call("CheckDead") | |
153 | If Not $Logout And Not $Dead And Not $Window Then | |
154 | Sleep(300) | |
155 | Send("{ESCAPE}") ;menu | |
156 | Sleep(200) | |
157 | MouseClick("left", Round(960*$x_ratio),Round(580*$y_ratio)) ;button to leave game | |
158 | Sleep($loadtime) | |
159 | Call("CheckDead") | |
160 | If Not $Logout Then | |
161 | MouseClick("left", Round(140*$x_ratio),Round(420*$y_ratio)) ;button to resume game from main menu | |
162 | Sleep($loadtime) | |
163 | EndIf | |
164 | Else | |
165 | MouseClick("left", Round(140*$x_ratio),Round(420*$y_ratio)) ;button to resume game from main menu | |
166 | Sleep($loadtime) | |
167 | $Window = False ; reset the flag so it doesn't think a window is always up | |
168 | EndIf | |
169 | Else | |
170 | Sleep(40) | |
171 | Send("t") | |
172 | Sleep($tptime) | |
173 | Call("RandomSleep") | |
174 | Call("CheckDead") | |
175 | If Not $Logout And Not $Dead And Not $Window Then | |
176 | Sleep(300) | |
177 | Send("{ESCAPE}") ;menu | |
178 | Sleep(200) | |
179 | MouseClick("left", Round(960*$x_ratio),Round(580*$y_ratio)) ;button to leave game | |
180 | Sleep($loadtime) | |
181 | Call("CheckDead") | |
182 | If Not $Logout Then | |
183 | MouseClick("left", Round(140*$x_ratio),Round(420*$y_ratio)) ;button to resume game from main menu | |
184 | Sleep($loadtime) | |
185 | EndIf | |
186 | Else | |
187 | MouseClick("left", Round(140*$x_ratio),Round(420*$y_ratio)) ;button to resume game from main menu | |
188 | Sleep($loadtime) | |
189 | $Window = False ; reset the flag so it doesn't think a window is always up | |
190 | EndIf | |
191 | EndIf | |
192 | EndIf | |
193 | WEnd | |
194 | Call("RestartRun") | |
195 | EndFunc | |
196 | ||
197 | Func CheckDead() | |
198 | Call("CheckWindow") | |
199 | $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" | |
200 | If Not @error Then | |
201 | If Not $Window Then | |
202 | $Dead = True | |
203 | Sleep(100) | |
204 | Send("{Escape}") | |
205 | Sleep(10) | |
206 | MouseClick("left", Round(960*$x_ratio),Round(580*$y_ratio)) ;button to leave game | |
207 | Sleep(11000) | |
208 | Sleep($loadtime) | |
209 | MouseClick("left", Round(140*$x_ratio),Round(420*$y_ratio)) ;button to resume game from main menu | |
210 | Sleep($loadtime) | |
211 | Else | |
212 | MouseClick("left", Round(140*$x_ratio),Round(420*$y_ratio)) ;button to resume game from main menu | |
213 | Sleep($loadtime) | |
214 | $Dead = False | |
215 | EndIf | |
216 | Else | |
217 | $Dead = False | |
218 | EndIf | |
219 | $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 | |
220 | If Not @error Then | |
221 | Sleep(11000) | |
222 | Sleep($loadtime) | |
223 | If Not $Window Then | |
224 | $Dead = True | |
225 | $Logout = True | |
226 | Sleep($loadtime) | |
227 | MouseClick("left", Round(140*$x_ratio),Round(420*$y_ratio)) ;button to resume game from main menu | |
228 | Sleep($loadtime) | |
229 | Else | |
230 | MouseClick("left", Round(140*$x_ratio),Round(420*$y_ratio)) ;button to resume game from main menu | |
231 | Sleep($loadtime) | |
232 | $Logout = False | |
233 | EndIf | |
234 | Else | |
235 | $Logout = False | |
236 | EndIf | |
237 | EndFunc | |
238 | ||
239 | Func CheckWindow() | |
240 | $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 | |
241 | If Not @error Then | |
242 | Sleep(200) | |
243 | Send("{SPACE}") ;close any open windows | |
244 | $Window = True | |
245 | Else | |
246 | $Window = False | |
247 | EndIf | |
248 | EndFunc | |
249 | ||
250 | Func CheckExit() | |
251 | $ExitButton = PixelSearch(Round(1190*$x_ratio), Round(400*$y_ratio), Round(1200*$x_ratio), Round(440*$y_ratio), 0x14100E) ; checks for the grey border of the exit prompt | |
252 | If Not @error Then | |
253 | Send("{ESCAPE}") | |
254 | Sleep(100) | |
255 | Send("{SPACE}") ;close any open windows | |
256 | Sleep(200) | |
257 | MouseMove(1,1) ; reset cursor position before checking for button | |
258 | $Resume = Hex(PixelGetColor(Round(140*$x_ratio), Round(420*$y_ratio)), 6) ; checks if resume button can be pressed | |
259 | If $Resume == "400900" Or $Resume == "380900" Then | |
260 | Sleep(200) | |
261 | MouseClick("left", Round(140*$x_ratio),Round(420*$y_ratio)) ;button to resume game from main menu | |
262 | Sleep($loadtime) | |
263 | EndIf | |
264 | EndIf | |
265 | EndFunc | |
266 | ||
267 | Func CheckRepair() | |
268 | $RepairArea = PixelSearch(Round(1480*$x_ratio), 0, Round(1570*$x_ratio), Round(100*$y_ratio), $yellow) | |
269 | If Not @error Then | |
270 | Call("DoRepair") | |
271 | EndIf | |
272 | $RepairAreaRed = PixelSearch(Round(1480*$x_ratio), 0, Round(1570*$x_ratio), Round(100*$y_ratio), $red) | |
273 | If Not @error Then | |
274 | Call("DoRepair") | |
275 | EndIf | |
276 | EndFunc | |
277 | ||
278 | Func DoRepair() | |
279 | Sleep(100) | |
280 | Send("t") | |
281 | Sleep($tptime) | |
282 | MouseClick("left", Round(1480*$x_ratio),Round(281*$y_ratio)) ;begin movement towards merchant | |
283 | Sleep(1500) | |
284 | MouseClick("left", Round(1316*$x_ratio),Round(206*$y_ratio)) ;moves to get merchant in screen | |
285 | Sleep(1500) | |
286 | MouseClick("left", Round(845*$x_ratio),Round(225*$y_ratio)) ;NPC Merchant to the right of cain's home | |
287 | Sleep(1200) | |
288 | MouseClick("left", Round(521*$x_ratio),Round(506*$y_ratio)) ;button to open up repair menu | |
289 | Sleep(400) | |
290 | MouseClick("left", Round(260*$x_ratio),Round(595*$y_ratio)) ;button to pay for repairs | |
291 | Sleep(200) | |
292 | Call("CheckDead") | |
293 | If Not $Dead and Not $Logout Then | |
294 | Send("{ESCAPE}") ;closes repair tab | |
295 | Sleep(100) | |
296 | Send("{ESCAPE}") ;menu | |
297 | Sleep(10) | |
298 | MouseClick("left", Round(960*$x_ratio),Round(580*$y_ratio)) ;button to leave game | |
299 | Sleep($loadtime) | |
300 | MouseClick("left", Round(140*$x_ratio),Round(420*$y_ratio)) ;button to resume game from main menu | |
301 | Sleep($loadtime) | |
302 | EndIf | |
303 | EndFunc | |
304 | ||
305 | Func CheckLoot() | |
306 | MouseMove(14,14,0) | |
307 | Sleep(Random(500,2000)) | |
308 | If Not $ImgLoot Then | |
309 | $SetLoot = PixelSearch(Round(400*$x_ratio), 0, Round(1900*$x_ratio), Round(900*$y_ratio), 0x02CE01, 2) ; set loot | |
310 | If Not @error Then | |
311 | MouseClick ('left', $SetLoot[0], $SetLoot[1], 1, 0) | |
312 | Sleep(Random(1000,1200)) | |
313 | MouseMove(14,14,0) ;Reset cursor position, it doesn't need to hover | |
314 | $i+= 1 | |
315 | If $i <= 6 Then | |
316 | Call("CheckLoot") | |
317 | EndIf | |
318 | EndIf | |
319 | $LegendaryLoot= PixelSearch(Round(400*$x_ratio), 0, Round(1900*$x_ratio), Round(900*$y_ratio), 0xBF642F, 2) ; legendary loot | |
320 | If Not @error Then | |
321 | MouseClick ('left', $LegendaryLoot[0], $LegendaryLoot[1], 1, 0) | |
322 | Sleep(Random(1000,1200)) | |
323 | MouseMove(14,14,0) ;Reset cursor position, it doesn't need to hover | |
324 | $i+= 1 | |
325 | If $i <= 6 Then | |
326 | Call("CheckLoot") | |
327 | EndIf | |
328 | EndIf | |
329 | If $LootRares Then | |
330 | $RareLoot = PixelSearch(Round(400*$x_ratio), 0, Round(1900*$x_ratio), Round(900*$y_ratio), 0xBBBB00, 2) ; rare loot (darker for compatibility) | |
331 | If Not @error Then | |
332 | MouseClick ('left', $RareLoot[0], $RareLoot[1], 1, 0) | |
333 | Sleep(Random(1000,1200)) | |
334 | MouseMove(14,14,0) ;Reset cursor position, it doesn't need to hover | |
335 | $i+= 1 | |
336 | If $i <= 6 Then | |
337 | Call("CheckLoot") | |
338 | EndIf | |
339 | EndIf | |
340 | EndIf | |
341 | Else | |
342 | Call("pickItems") | |
343 | EndIf | |
344 | EndFunc | |
345 | ||
346 | Func pickItems() | |
347 | $currentArrayItem = 0 | |
348 | For $gI = 0 to ($totalItems - 1) | |
349 | $array = StringSplit($pick[$gI],"|") | |
350 | $file = $array[1] | |
351 | $accuracy = $array[2] | |
352 | $urlString = $directory & $file | |
353 | $Target = _ImageSearchArea($urlString,1,0,0,Round(1920*$x_ratio),Round(1080*$y_ratio),$gX,$gY,$accuracy) | |
354 | While $i <= 12 ; max: 13 gems and pieces of gear to loot | |
355 | If $Target And ($gX > 15) And ($gY > 15) Then | |
356 | ;MsgBox(4096,"Debug",$urlString & " " & $gX & "-" & $gY) | |
357 | MouseClick("left", $gX, $gY, 1, 0) | |
358 | Sleep(Random(1200,1400)) | |
359 | MouseMove(14,14,0) ;Reset cursor position, it doesn't need to hover | |
360 | Sleep(5) | |
361 | $Target = _ImageSearchArea($urlString,1,0,0,Round(1920*$x_ratio),Round(1080*$y_ratio),$gX,$gY,$accuracy) | |
362 | $i+= 1 | |
363 | Else | |
364 | ExitLoop | |
365 | EndIf | |
366 | WEnd | |
367 | Next | |
368 | EndFunc | |
369 | ||
370 | Func RandomSleep() | |
371 | If $Timer And Random(1,20) = 20 Then | |
372 | Sleep(Random(30000,60000) | |
373 | EndIf | |
374 | EndFunc | |
375 | ||
376 | Func Pause() | |
377 | $Leave = False | |
378 | EndFunc | |
379 | ||
380 | Func Stop() ;to allow the script to stop | |
381 | Exit | |
382 | EndFunc | |
383 | ||
384 | Func Leave() | |
385 | $Leave = True | |
386 | EndFunc |