SHOW:
|
|
- or go back to the newest paste.
1 | #cs | |
2 | Witch Doctor Cellar Farming Bot - Version 0.5 [1920x1080 ONLY] | |
3 | Developed by Avatar88343 @ Ownedcore and andygongyb @ Ownedcore after V. 0.5 | |
4 | Other contributers: | |
5 | ||
6 | What it does: | |
7 | *This bot will travel to the cellar in Act 1, kill the mobs, collect the gold and items, and repair your gear. | |
8 | ||
9 | ||
10 | Newbiew Info: | |
11 | This is a script that runs on AutoIt. You run this bot by Downloading AutoIt from the web (it's free) and installing it. | |
12 | You then paste all this code into any text editor (such as notepad) and save it anywhere on your hard drive. Follow the Select | |
13 | steps below to configure this bot before you run it. | |
14 | ||
15 | Special Instructions for 1920 x 1080: | |
16 | 1.) Set your game resolution to 1920x1080 (required) | |
17 | 2.) Set the display mode to Fullscreen Windowed (Don't forget!) | |
18 | 3.) Follow the Instructions (for all resolutions) section below | |
19 | ||
20 | Special Instructions for 800 x 600: | |
21 | ||
22 | 1.)Exit Diablo 3 | |
23 | 2.)Go to your document folder and locate the Diablo III folder | |
24 | 3.)Open the D3Prefs file in any editor (such as notepad) | |
25 | 4.)Change the following settings to the ones listed below | |
26 | "DisplayModeFlags "0" | |
27 | DisplayModeWindowMode "1" | |
28 | DisplayModeWinLeft "428" | |
29 | DisplayModeWinTop "162" | |
30 | DisplayModeWinWidth "800" | |
31 | DisplayModeWinHeight "600" | |
32 | DisplayModeUIOptWidth "800" | |
33 | DisplayModeUIOptHeight "600" | |
34 | DisplayModeWidth "800" | |
35 | DisplayModeHeight "600" | |
36 | DisplayModeRefreshRate "75" | |
37 | DisplayModeBitDepth "32"" | |
38 | 5.) Follow the Instructions (for all resolutions) section below | |
39 | ||
40 | ||
41 | Instructions (for all resolutions) | |
42 | 1.) Bind your middle mouse button to Move (found in Key Bindings Option) | |
43 | 2.) Set your build to this http://us.battle.net/d3/en/calculator/witch-doctor#jaQPZU!VZW!babbca | |
44 | 3.) Start Act 1, Quest 6 - Talk to Alaric | |
45 | 4.) Hire the Scoundrel | |
46 | 5.) Teleport to The Old Ruins using the waypoint and run left until you reach a checkpoint | |
47 | 6.) Log out of the game | |
48 | 7.) Press F2 to start the bot! Space is used to pause and resume the bot | |
49 | 8.) Press shift + \ to turn off the bot | |
50 | ||
51 | NOTE: | |
52 | *Please make sure you are running the correct resolution settings! | |
53 | *You must be running the game in Fullscreen Windoed mode if you're using 1080P | |
54 | *You WILL need to edit the values below the comments for better results | |
55 | ||
56 | FEATURES: | |
57 | *Supports 1080P Fullscreen Windowed and 800x600 Windowed (V. 0.5 only supports 1080P currently) | |
58 | *Automatic looting of Rare, Legendary, and Set items | |
59 | *Also able to loot blue items, tomes, and gems | |
60 | *Optionally sells blue items when the bag is full | |
61 | *Repairs Items when damaged | |
62 | *Detects death and responds accordingly | |
63 | *Detects connection lost and automatically reconnect (not tested) | |
64 | *Randomization for increased safety | |
65 | *Added ability to find Cellar during bad runs | |
66 | ||
67 | IN DEVELOPMENT: | |
68 | *Multi-resolution support (need people to help) | |
69 | *Stash use | |
70 | *Improved combat | |
71 | *Speed improvements | |
72 | *Multiple routes to improve safety | |
73 | *45 min timeout bug | |
74 | *Edit d3config | |
75 | *Salvage lv60 blue items automatically | |
76 | ||
77 | ||
78 | **Based on the code by notAres and mackus101. Special thanks to them! | |
79 | #ce | |
80 | #include <GUIConstantsEx.au3> | |
81 | #include <WindowsConstants.au3> | |
82 | ;======THESE VALUES ARE NOT EDITED WITH THE GUI =================================== | |
83 | $R = 0 ; Leave this as 0 if you are using 1080P. Change it to 1 if you're using 800 x 600 | |
84 | $ComputerLag = 1000 ; Increase this by 100-5000 if you have a slow PC. | |
85 | $RunSpeed = 10 ; Enter your character's run speed here | |
86 | $LootRares = True ; Whether or not to loot rare and legendary items | |
87 | $LootBlues = True ; Whether or not to loot blue items | |
88 | $LootGems = True ; Whether or not to loot gems | |
89 | $LootPotions = True ; Whether or not to loot potions | |
90 | $LootTomes = True ; Whether or not to loot Tome of Secret | |
91 | $LootGold = True ; Whether or to collect gold that is missed during the first collection attempt | |
92 | $Repair = True ; Orders the bot to repair when items are damaged | |
93 | $SellBlues = True ; Orders the bot to sell blue items when the bag is full | |
94 | ;====================================================================== | |
95 | ||
96 | Global $Resume[2][2] ;Location of the Resume Button | |
97 | Global $Leave[2][2] ;Location of the in-game leave button | |
98 | Global $GameLobbyCode[2][3] ;Contains X, Y, and Hex color of Resume button so we can see if we're there | |
99 | Global $GameScreenCode[2][3] ;Contains X, Y, and Hex color used to check if we are in an unpaused game | |
100 | Global $Loc1[2][2] ;First movement | |
101 | Global $Loc2[2][2] ;Second movement | |
102 | Global $Loc3[2][2] ;Third movement ttt | |
103 | ||
104 | Global $CellarLocation[2][2] ;Cellar door location | |
105 | Global $CellarLocation2[2] ;Location of cellar during bad runs (ugly workaround for now) | |
106 | Global $AltCellar = False | |
107 | ||
108 | - | Global $Loc5[2][2] ; Cellar hallway |
108 | + | Global $Loc5[2][2] ;Cellar hallway |
109 | - | Global $Loc6[2][2] ; Cellar doorway |
109 | + | Global $Loc6[2][2] ;Cellar doorway |
110 | - | Global $MonsterLoc[2][2] ; Initial boss location |
110 | + | Global $MonsterLoc[2][2] ;Initial boss location |
111 | - | Global $MonsterSearch[2][4] ; Bounds of where we will find our monsters |
111 | + | Global $MonsterSearch[2][4] ;Bounds of where we will find our monsters |
112 | - | Global $GoldLoot1[2][2] ; First place to run when looting |
112 | + | Global $GoldLoot1[2][2] ;First place to run when looting |
113 | - | Global $GoldLoot2[2][2] ; Second place to run when looting |
113 | + | Global $GoldLoot2[2][2] ;Second place to run when looting |
114 | - | Global $GoldLoot3[2][2] ; Third place to run when looting |
114 | + | Global $GoldLoot3[2][2] ;Third place to run when looting |
115 | Global $LootingArea[2][4] ; looting bounds (TL X, TL Y, BR X, BR Y) | |
116 | Global $CharHitBox[2][4] ; Hitbox around user's character | |
117 | Global $DeathBounds[2][2] ; Used to detect the "You Have Died" text | |
118 | Global $RepairCoords[2][4][2] ; Four clicks needed to repair | |
119 | Global $RepairCheck[2][2] ; Used to check for repair icon | |
120 | Global $CellarOffset[2] ; Used to improve cellar clicking with 1080P/800x600 | |
121 | Global $CellarIcon ; Used to find the yellow cellar icon on the minimap (future use) | |
122 | Global $pngLoc[2] ; Absolute path of the folder containing pics for image search | |
123 | Global $LostConnectionOkBtn[2][2] ; The coordinate of the OK button of the "lost connection" window | |
124 | Global $LostConnectionText0[2][4] ; Image search area of the "lost connection" text | |
125 | Global $LostConnectionText1[2][4] | |
126 | Global $CharLoc[2][2] ; Location where the character stands | |
127 | Global $CastLoc[2][2] ; Location to cast Grasp of the Dead in the cellar | |
128 | Global $SellCoords[2][2] ; Coordinate of the sell button | |
129 | Global $SlotOffset[2] ; Length of each slot in the item window | |
130 | Global $ItemStartCoord0[2][4] ; Pixel search area of the first slot on the second column in item window | |
131 | Global $ItemStartCoord1[2][4] | |
132 | Global $BagFullCoords[2][4] ; Image search area of the bag full message | |
133 | Global $IdleCursorCoords[2][2] ; Coordinate of where the cursor should go for not covering any item name | |
134 | Global $CellarPixel | |
135 | Global $RunDelayMult[2] ; Scaler for calculating the delay to run to an item | |
136 | Global $GemLootOffset[2] ; Distance between gem and its text | |
137 | Global $BagFull | |
138 | - | Global $HasBlue |
138 | + | |
139 | ||
140 | ;Check for people that can't read instructions | |
141 | If Int($R) < 0 Or Int($R) > 1 Then | |
142 | MsgBox(4096, "A wild illiterate appears appears!", "Aha! I caught you! You did not read the instructions. You need to configure the bot!") | |
143 | terminate() | |
144 | EndIf | |
145 | ||
146 | ||
147 | ;Clculate run speed | |
148 | Global $RunTime = 30 * (100 - $RunSpeed) + 2000 ;Length of time to run in 800x600 | |
149 | ||
150 | ;All locations are N dimensional arrays. [0][x] is for 1080P and [1][x] is for 800x600 | |
151 | ;1080P | |
152 | ||
153 | ||
154 | ;1920x1080 | |
155 | $pngLoc[0] = "F:\Program Files (x86)\Diablo III\pics\1920x1080\" ; Location of the .PNGs (NO SUBFOLDERS - ALL PNGS GO HERE) | |
156 | $Resume[0][0] = 319 | |
157 | $Resume[0][1] = 416 | |
158 | $GameLobbyCode[0][0] = 319 | |
159 | $GameLobbyCode[0][1] = 416 | |
160 | $GameLobbyCode[0][2] = 4065536 | |
161 | $GameScreenCode[0][0] = 1119 | |
162 | $GameScreenCode[0][1] = 1044 | |
163 | $GameScreenCode[0][2] = 0xDEFDFE | |
164 | $LostConnectionOkBtn[0][0] = 957 | |
165 | $LostConnectionOkBtn[0][1] = 630 | |
166 | $LostConnectionText0[0][0] = 764 | |
167 | $LostConnectionText0[0][1] = 493 | |
168 | $LostConnectionText0[0][2] = 843 | |
169 | $LostConnectionText0[0][3] = 521 | |
170 | $LostConnectionText1[0][0] = 779 | |
171 | $LostConnectionText1[0][1] = 507 | |
172 | $LostConnectionText1[0][2] = 853 | |
173 | $LostConnectionText1[0][3] = 525 | |
174 | $CharLoc[0][0] = 944 | |
175 | $CharLoc[0][1] = 507 | |
176 | $CastLoc[0][0] = 600 | |
177 | $CastLoc[0][1] = 300 | |
178 | $SellCoords[0][0] = 517 | |
179 | $SellCoords[0][1] = 238 | |
180 | $SlotOffset[0] = 48 | |
181 | $ItemStartCoord0[0][0] = 1460 | |
182 | $ItemStartCoord0[0][1] = 631 | |
183 | $ItemStartCoord0[0][2] = 1462 | |
184 | $ItemStartCoord0[0][3] = 633 | |
185 | $ItemStartCoord1[0][0] = 1460 | |
186 | $ItemStartCoord1[0][1] = 625 | |
187 | $ItemStartCoord1[0][2] = 1468 | |
188 | $ItemStartCoord1[0][3] = 632 | |
189 | $BagFullCoords[0][0] = 1067 | |
190 | - | $BagFullCoords[0][0] = 1060 |
190 | + | $BagFullCoords[0][1] = 129 |
191 | - | $BagFullCoords[0][1] = 125 |
191 | + | $BagFullCoords[0][2] = 1116 |
192 | - | $BagFullCoords[0][2] = 1120 |
192 | + | $BagFullCoords[0][3] = 155 |
193 | - | $BagFullCoords[0][3] = 160 |
193 | + | |
194 | $IdleCursorCoords[0][1] = 300 | |
195 | $RunDelayMult[0] = 1.5 | |
196 | ||
197 | ;800x600 | |
198 | $pngLoc[1] = "F:\Program Files (x86)\Diablo III\pics\800x600\" ; Need people to make those pics | |
199 | $Resume[1][0] = 174 | |
200 | $Resume[1][1] = 232 | |
201 | $GameLobbyCode[1][0] = 174 | |
202 | $GameLobbyCode[1][1] = 232 | |
203 | $GameLobbyCode[1][2] = 4262400 | |
204 | $GameScreenCode[1][0] = 486 | |
205 | $GameScreenCode[1][1] = 578 | |
206 | $GameScreenCode[1][2] = 0x6C9BFF | |
207 | ; Need people working on the following coordinates | |
208 | $LostConnectionOkBtn[1][0] = 0 | |
209 | $LostConnectionOkBtn[1][1] = 0 | |
210 | $LostConnectionText0[1][0] = 0 | |
211 | $LostConnectionText0[1][1] = 0 | |
212 | $LostConnectionText0[1][2] = 0 | |
213 | $LostConnectionText0[1][3] = 0 | |
214 | $LostConnectionText1[1][0] = 0 | |
215 | $LostConnectionText1[1][1] = 0 | |
216 | $LostConnectionText1[1][2] = 0 | |
217 | $LostConnectionText1[1][3] = 0 | |
218 | $CharLoc[1][0] = 0 | |
219 | $CharLoc[1][0] = 0 | |
220 | $CastLoc[1][0] = 0 | |
221 | $CastLoc[1][1] = 0 | |
222 | $SellCoords[1][0] = 0 | |
223 | $SellCoords[1][1] = 0 | |
224 | $SlotOffset[1] = 0 | |
225 | $ItemStartCoord0[1][0] = 0 | |
226 | $ItemStartCoord0[1][1] = 0 | |
227 | $ItemStartCoord0[1][2] = 0 | |
228 | $ItemStartCoord0[1][3] = 0 | |
229 | $ItemStartCoord1[1][0] = 0 | |
230 | $ItemStartCoord1[1][1] = 0 | |
231 | $ItemStartCoord1[1][2] = 0 | |
232 | $ItemStartCoord1[1][3] = 0 | |
233 | $BagFullCoords[1][0] = 0 | |
234 | $BagFullCoords[1][1] = 0 | |
235 | $BagFullCoords[1][2] = 0 | |
236 | $BagFullCoords[1][3] = 0 | |
237 | $IdleCursorCoords[1][0] = 0 | |
238 | $IdleCursorCoords[1][1] = 0 | |
239 | $RunDelayMult[1] = 0 | |
240 | ||
241 | ||
242 | ;1920x1080 | |
243 | $Leave[0][0] = 969 | |
244 | $Leave[0][1] = 582 | |
245 | ||
246 | ;800x600 | |
247 | $Leave[1][0] = 397 | |
248 | $Leave[1][1] = 322 | |
249 | ||
250 | ;1920x1080 | |
251 | $Loc1[0][0] = 500 ;First movement | |
252 | $Loc1[0][1] = 250 | |
253 | $Loc2[0][0] = 1 ;Second movement | |
254 | $Loc2[0][1] = 370 | |
255 | $Loc3[0][0] = 400 ;Third Movement | |
256 | $Loc3[0][1] = 600 | |
257 | ||
258 | ;800x600 | |
259 | $Loc1[1][0] = 8 ;First movement | |
260 | $Loc1[1][1] = 146 | |
261 | $Loc2[1][0] = 7 ;Second movement | |
262 | $Loc2[1][1] = 300 | |
263 | $Loc3[1][0] = 8 ;Third Movement | |
264 | $Loc3[1][1] = 300 | |
265 | ||
266 | ;1080P | |
267 | $CellarLocation[0][0] = 307 ;Cellar door location | |
268 | $CellarLocation[0][1] = 74 | |
269 | ;800x600 | |
270 | $CellarLocation[1][0] = 499 ;Cellar door location | |
271 | $CellarLocation[1][1] = 148 | |
272 | $CellarLocation2[0] = 439 | |
273 | $CellarLocation2[1] = 145 | |
274 | $AltCellarLocation = False | |
275 | ||
276 | ;Cellar offset | |
277 | $CellarOffset[0] = 33; | |
278 | $CellarOffset[1] = 10; | |
279 | ||
280 | ;1080P | |
281 | $Loc5[0][0] = 116 ;Walk down hallway | |
282 | $Loc5[0][1] = 986 | |
283 | $Loc6[0][0] = 776 ;enter hallway | |
284 | $Loc6[0][1] = 328 | |
285 | ;800x600 | |
286 | $Loc5[1][0] = 3 ;Walk down hallway | |
287 | $Loc5[1][1] = 504 | |
288 | $Loc6[1][0] = 255 ;enter hallway | |
289 | $Loc6[1][1] = 190 | |
290 | ||
291 | ;1080P | |
292 | $MonsterLoc[0][0] = 577 | |
293 | $MonsterLoc[0][1] = 183 | |
294 | ;800x600 | |
295 | $MonsterLoc[1][0] = 188 | |
296 | $MonsterLoc[1][1] = 111 | |
297 | ||
298 | ;1920x1080 | |
299 | $MonsterSearch[0][0] = 162 | |
300 | $MonsterSearch[0][1] = 29 | |
301 | $MonsterSearch[0][2] = 1248 | |
302 | $MonsterSearch[0][3] = 446 | |
303 | ;800x600 | |
304 | $MonsterSearch[1][0] = 40 | |
305 | $MonsterSearch[1][1] = 53 | |
306 | $MonsterSearch[1][2] = 424 | |
307 | $MonsterSearch[1][3] = 191 | |
308 | ||
309 | ;1920x1080 | |
310 | $GoldLoot1[0][0] = 402 | |
311 | $GoldLoot1[0][1] = 306 | |
312 | $GoldLoot2[0][0] = 1260 | |
313 | $GoldLoot2[0][1] = 351 | |
314 | $GoldLoot3[0][0] = 911 | |
315 | $GoldLoot3[0][1] = 694 | |
316 | ;800x600 | |
317 | $GoldLoot1[1][0] = 96 | |
318 | $GoldLoot1[1][1] = 181 | |
319 | $GoldLoot2[1][0] = 560 | |
320 | $GoldLoot2[1][1] = 191 | |
321 | $GoldLoot3[1][0] = 349 | |
322 | $GoldLoot3[1][1] = 418 | |
323 | ||
324 | ;1080P | |
325 | $LootingArea[0][0] = 500 | |
326 | - | $LootingArea[0][0] = 300 |
326 | + | $LootingArea[0][1] = 100 |
327 | - | $LootingArea[0][1] = 200 |
327 | + | |
328 | $LootingArea[0][3] = 700 | |
329 | - | $LootingArea[0][3] = 800 |
329 | + | |
330 | $LootingArea[1][0] = 75 | |
331 | $LootingArea[1][1] = 90 | |
332 | $LootingArea[1][2] = 630 | |
333 | $LootingArea[1][3] = 400 | |
334 | ||
335 | ;1080P | |
336 | $CharHitBox[0][0] = 790 | |
337 | $CharHitBox[0][1] = 315 | |
338 | $CharHitBox[0][2] = 1200 | |
339 | $CharHitBox[0][3] = 730 | |
340 | ;800x600 | |
341 | $CharHitBox[1][0] = 304 | |
342 | $CharHitBox[1][1] = 190 | |
343 | $CharHitBox[1][2] = 468 | |
344 | $CharHitBox[1][3] = 323 | |
345 | ||
346 | ;1080P | |
347 | $DeathBounds[0][0] = 538 | |
348 | $DeathBounds[0][1] = 335 | |
349 | ;800x600 | |
350 | $DeathBounds[1][0] = 210 | |
351 | $DeathBounds[1][1] = 180 | |
352 | ||
353 | ;1080P | |
354 | $RepairCoords[0][0][0] = 1690 | |
355 | $RepairCoords[0][0][1] = 102 | |
356 | $RepairCoords[0][1][0] = 930 | |
357 | $RepairCoords[0][1][1] = 136 | |
358 | $RepairCoords[0][2][0] = 517 | |
359 | $RepairCoords[0][2][1] = 483 | |
360 | $RepairCoords[0][3][0] = 223 | |
361 | $RepairCoords[0][3][1] = 592 | |
362 | ;800x600 | |
363 | $RepairCoords[1][0][0] = 691 | |
364 | $RepairCoords[1][0][1] = 88 | |
365 | $RepairCoords[1][1][0] = 505 | |
366 | $RepairCoords[1][1][1] = 52 | |
367 | $RepairCoords[1][2][0] = 282 | |
368 | $RepairCoords[1][2][1] = 261 | |
369 | $RepairCoords[1][3][0] = 157 | |
370 | $RepairCoords[1][3][1] = 329 | |
371 | ||
372 | ;1080P | |
373 | $RepairCheck[0][0] = 1507 | |
374 | $RepairCheck[0][1] = 36 | |
375 | ;800x600 | |
376 | $RepairCheck[1][0] = 573 | |
377 | $RepairCheck[1][1] = 21 | |
378 | ||
379 | Opt('MouseCoordMode', 2) | |
380 | Opt('PixelCoordMode', 2) | |
381 | HotKeySet("|", "Terminate") | |
382 | HotKeySet('{F2}', 'Pause') | |
383 | Global $Paused | |
384 | ||
385 | ;bot starts paused. press space to start. | |
386 | Pause() | |
387 | ||
388 | ;Finding loot takes time. We don't want to overdo it | |
389 | $LootAttempts = 0 | |
390 | $GemLootAttempts = 0 | |
391 | ||
392 | Sleep(214) ; Please put a random small number here which will confuse Wardon's harsh function | |
393 | - | $HasBlue = 0 |
393 | + | |
394 | WinActivate('Diablo III') | |
395 | - | Sleep(400) ; Please put a random small number here which will confuse Wardon's harsh function |
395 | + | |
396 | If WinActive('Diablo III') Then | |
397 | ||
398 | Local $gX | |
399 | Local $gY | |
400 | ||
401 | $AltCellarLocation = False | |
402 | $LootAttempts = 0 | |
403 | $GemLootAttempts = 0 | |
404 | $BagFull = False | |
405 | ||
406 | ;Make sure that we are in the character selection screen ( we are looking at a spot in the Resume game button) | |
407 | For $i = 15 To 0 Step -1 | |
408 | If InGameLobby() Then | |
409 | ExitLoop | |
410 | EndIf | |
411 | ||
412 | Sleep(600) | |
413 | If _ImageSearchArea($pngLoc[$R] & "game.png", 1, $LostConnectionText0[$R][0], _ | |
414 | $LostConnectionText0[$R][1], $LostConnectionText0[$R][2], _ | |
415 | $LostConnectionText0[$R][3], $gX, $gY, 90) _ | |
416 | Or _ImageSearchArea($pngLoc[$R] & "therewas.png", 1, $LostConnectionText1[$R][0], _ | |
417 | $LostConnectionText1[$R][1], $LostConnectionText1[$R][2], _ | |
418 | $LostConnectionText1[$R][3], $gX, $gY, 90) Then | |
419 | ; check if we lost connection | |
420 | Click($LostConnectionOkBtn[$R][0], $LostConnectionOkBtn[$R][1]) | |
421 | ContinueLoop | |
422 | EndIf | |
423 | If $i == 1 Then | |
424 | MsgBox(4096, "Error Resuming Game", "You don't seem to be in the lobby. Did you properly configure the bot? Bot will now exit", 50) | |
425 | Terminate() | |
426 | EndIf | |
427 | Next | |
428 | ||
429 | ;Resume the game | |
430 | Click($Resume[$R][0], $Resume[$R][1]) | |
431 | ||
432 | ;Make sure that we are in the game | |
433 | For $i = 12 To 0 Step -1 | |
434 | If InGameplayScreen() Then | |
435 | ExitLoop | |
436 | EndIf | |
437 | ||
438 | Sleep(1000) | |
439 | If $i == 1 Then | |
440 | MsgBox(4096, "Error Starting the Game", "The game did not properly load...Are you using English language? Do not use custom themes!", 50) | |
441 | Terminate() | |
442 | EndIf | |
443 | Next | |
444 | ||
445 | ||
446 | Rest(200) | |
447 | Send("{2}") | |
448 | Rest(400) | |
449 | ||
450 | ;Custom running for the 800x600. Sometimes I wonder if it's faster to just buy everyone a 1080P monitor... | |
451 | If Int($R) == 1 Then | |
452 | MouseMove(11, 220) | |
453 | Sleep(400) | |
454 | Send("{4}") | |
455 | MouseDown("middle") | |
456 | Sleep($RunTime) | |
457 | ||
458 | MouseUp("middle") | |
459 | Sleep(2000) | |
460 | ||
461 | #cs $CellarIcon = PixelSearch(630, 70, 741, 149, 0x71341A, 5) | |
462 | if not @error then | |
463 | ConsoleWrite("Foundtheseller" & @LF) | |
464 | ||
465 | EndIf | |
466 | #ce | |
467 | ||
468 | Else | |
469 | Move($Loc1[$R][0], $Loc1[$R][1]) | |
470 | Sleep(200) | |
471 | Send("{4}") | |
472 | Sleep(500) | |
473 | Move($Loc2[$R][0], $Loc2[$R][1]) | |
474 | Sleep(1100) | |
475 | Move($Loc3[$R][0], $Loc3[$R][1]) | |
476 | EndIf | |
477 | ||
478 | ||
479 | ;Check to see if the cellar is there ``````` | |
480 | MouseMove($CellarLocation[$R][0], $CellarLocation[$R][1]) | |
481 | Sleep(400) | |
482 | If Int($R) = 1 Then | |
483 | $CellarPixel = PixelSearch($CellarLocation[$R][0] - 30, $CellarLocation[$R][1] - 30, _ | |
484 | $CellarLocation[$R][0] + 20, $CellarLocation[$R][1] + 20, 0x93D7F9, 8) | |
485 | ||
486 | If @error Then | |
487 | MouseMove($CellarLocation2[0], $CellarLocation2[1]) | |
488 | Sleep(300) | |
489 | $CellarPixel = PixelSearch($CellarLocation2[0] - 30, $CellarLocation2[1] - 30, _ | |
490 | $CellarLocation2[0] + 20, $CellarLocation2[1] + 20, 0x93D7F9, 8) | |
491 | If Not @error Then | |
492 | $AltCellarLocation = True | |
493 | EndIf | |
494 | EndIf | |
495 | Else | |
496 | $CellarPixel = PixelSearch($CellarLocation[$R][0] - $CellarOffset[$R], $CellarLocation[$R][1] _ | |
497 | - $CellarOffset[$R], $CellarLocation[$R][0] + 4, $CellarLocation[$R][1] + 4, 0x334FB7, 6) | |
498 | EndIf | |
499 | ||
500 | ;Leave the game if the Cellar is not there | |
501 | If @error Then | |
502 | ConsoleWrite("Did not find the cellar " & @LF) | |
503 | Send("{SHIFTDOWN}") | |
504 | Sleep(10) | |
505 | Click($CharLoc[$R][0], $CharLoc[$R][1]) | |
506 | Sleep(50) | |
507 | Send("{SHIFTUP}") | |
508 | ;Cast Voodoo and Grasp of the Dead to ensure safety | |
509 | Send("{1}") | |
510 | Rest(300) | |
511 | Send("{3}") | |
512 | Rest(300) | |
513 | leaveGame() | |
514 | Sleep(12000) | |
515 | ContinueLoop | |
516 | EndIf | |
517 | ||
518 | ;Enter the cellar | |
519 | ConsoleWrite("Entering the Cellar..." & @LF) | |
520 | If $R > 0 And $AltCellar Then | |
521 | Click($CellarLocation2[$R][0] - 4, $CellarLocation2[$R][1] - 4) | |
522 | Else | |
523 | If Not $AltCellarLocation Then | |
524 | Click($CellarLocation[$R][0], $CellarLocation[$R][1]) | |
525 | Else | |
526 | Click($CellarLocation2[0], $CellarLocation2[1]) | |
527 | EndIf | |
528 | EndIf | |
529 | ||
530 | If Int($R) == 1 Then | |
531 | Sleep(500 + $ComputerLag) | |
532 | Else | |
533 | Sleep(2500 + $ComputerLag) | |
534 | - | Sleep(1000 + $ComputerLag) |
534 | + | |
535 | ||
536 | - | Sleep(3500 + $ComputerLag) |
536 | + | |
537 | If CheckForDeath() Then | |
538 | ContinueLoop | |
539 | EndIf | |
540 | ||
541 | ;Inside the celler now - Move to the doorway | |
542 | Move($Loc5[$R][0], $Loc5[$R][1]) | |
543 | Sleep(1400) | |
544 | Move($Loc6[$R][0], $Loc6[$R][1]) | |
545 | Sleep(300) | |
546 | - | Sleep(1500) |
546 | + | |
547 | Send("{1}") | |
548 | ||
549 | ;Cast Grasp of the Dead | |
550 | MouseMove($CastLoc[$R][0], $CastLoc[$R][1]) | |
551 | Send("{3}") | |
552 | ||
553 | ;Kill all the enemies inside | |
554 | While 1 | |
555 | ||
556 | $MonsterBar = PixelSearch($MonsterSearch[$R][0], $MonsterSearch[$R][1], _ | |
557 | $MonsterSearch[$R][2], $MonsterSearch[$R][3], 0xEE0000, 10) | |
558 | If @error Then | |
559 | ConsoleWrite("Didn't find any, attacking to discover potential enemies" & @LF) | |
560 | Attack($MonsterLoc[$R][0], $MonsterLoc[$R][1]) | |
561 | Sleep(500) | |
562 | $MonsterBar = PixelSearch($MonsterSearch[$R][0], $MonsterSearch[$R][1], _ | |
563 | $MonsterSearch[$R][2], $MonsterSearch[$R][3], 0xEE0000, 10) | |
564 | If @error Then | |
565 | ConsoleWrite("No monsters found - Moving on") | |
566 | ExitLoop | |
567 | EndIf | |
568 | EndIf | |
569 | ||
570 | ;if CheckForNearbyMonsters() Then | |
571 | ;send("{4}") | |
572 | ;EndIf | |
573 | ||
574 | For $i = 7 To 0 Step -1 | |
575 | Attack($MonsterBar[0], $MonsterBar[1]) | |
576 | Sleep(100) | |
577 | Next | |
578 | WEnd | |
579 | ||
580 | ||
581 | ;Loot the gold and attack anything we missed | |
582 | Move($GoldLoot1[$R][0], $GoldLoot1[$R][1]) | |
583 | Sleep(Random(800, 900)) | |
584 | AttackNearbyMonsters() | |
585 | Move($GoldLoot2[$R][0], $GoldLoot2[$R][1]) | |
586 | Sleep(Random(400, 500)) | |
587 | AttackNearbyMonsters() | |
588 | Move($GoldLoot3[$R][0], $GoldLoot3[$R][1]) | |
589 | Sleep(Random(400, 500)) | |
590 | AttackNearbyMonsters() | |
591 | ||
592 | ;Loot items | |
593 | If $LootRares Then | |
594 | $BagFull = LootRares() | |
595 | $LootAttemps = 0 | |
596 | $BagFull = LootLegendaries() | |
597 | $LootAttempts = 0 | |
598 | EndIf | |
599 | ||
600 | If $LootBlues And $BagFull = False Then | |
601 | $LootAttempts = 0 | |
602 | $BagFull = LootMagic() | |
603 | EndIf | |
604 | ||
605 | If $LootGems Then | |
606 | LootGems() | |
607 | EndIf | |
608 | ||
609 | If $LootGold Then | |
610 | LootGold() | |
611 | EndIf | |
612 | ||
613 | If $LootTomes Then | |
614 | LootTomes() | |
615 | EndIf | |
616 | ||
617 | If $LootPotions Then | |
618 | LootPotions() | |
619 | EndIf | |
620 | ||
621 | ;Check to see if we died | |
622 | If CheckForDeath() Then | |
623 | ContinueLoop | |
624 | EndIf | |
625 | ||
626 | ;Teleport to town | |
627 | Send("{t}") | |
628 | Sleep(8000) | |
629 | ||
630 | RepairOrSellItems() | |
631 | ||
632 | ;Leave the game | |
633 | LeaveGame() | |
634 | Sleep(1000) | |
635 | ||
636 | EndIf | |
637 | WEnd | |
638 | ||
639 | Func CheckForRepair() | |
640 | $RepairNeeded = PixelSearch($RepairCheck[$R][0], $RepairCheck[$R][1], $RepairCheck[$R][0] + 5, _ | |
641 | $RepairCheck[$R][1] + 5, 0xFFE801, 10) | |
642 | ||
643 | If Not @error Then | |
644 | Return True | |
645 | Else | |
646 | Return False | |
647 | EndIf | |
648 | EndFunc ;==>CheckForRepair | |
649 | ||
650 | ||
651 | Func RepairOrSellItems() | |
652 | Local $NeedRepair | |
653 | Local $xx | |
654 | Local $yy | |
655 | Local $sell | |
656 | $NeedRepair = CheckForRepair() | |
657 | ; Repair the gears when needed | |
658 | If ($NeedRepair And $Repair) Or ($BagFull And $SellBlues) Then | |
659 | Move($RepairCoords[$R][0][0], $RepairCoords[$R][0][1]) | |
660 | Sleep(2000 + $ComputerLag) | |
661 | MouseMove($RepairCoords[$R][1][0], $RepairCoords[$R][1][1]) | |
662 | Sleep(400) | |
663 | - | If ($NeedRepair And $Repair) Or ($BagFull And $SellBlues And $HasBlue) Then |
663 | + | |
664 | Sleep(1300 + $ComputerLag) | |
665 | If $NeedRepair And $Repair Then | |
666 | Click($RepairCoords[$R][2][0], $RepairCoords[$R][2][1]) | |
667 | Sleep(Random(700 - 900)) | |
668 | Click($RepairCoords[$R][3][0], $RepairCoords[$R][3][1]) | |
669 | Sleep(500) | |
670 | EndIf | |
671 | ; If the bag is full, sell the blues | |
672 | If ($BagFull And $SellBlues) Then | |
673 | Sleep(300) | |
674 | Click($SellCoords[$R][0], $SellCoords[$R][1]); | |
675 | Sleep(300) | |
676 | For $xx = 0 To 8 Step 1 | |
677 | - | If ($BagFull And $SellBlues And $HasBlue) Then |
677 | + | |
678 | ; An item recently picked up has blue frame arround the slots | |
679 | $sell = PixelSearch($ItemStartCoord0[$R][0] + $xx * $SlotOffset[$R], _ | |
680 | $ItemStartCoord0[$R][1] + $yy * $SlotOffset[$R], _ | |
681 | $ItemStartCoord0[$R][2] + $xx * $SlotOffset[$R], _ | |
682 | $ItemStartCoord0[$R][3] + $yy * $SlotOffset[$R], 0x0000FF, 10) | |
683 | If Not @error Then | |
684 | MouseClick("right", $sell[0], $sell[1]) | |
685 | Else | |
686 | ; Otherwise the color of the frame is lighter | |
687 | $sell = PixelSearch($ItemStartCoord1[$R][0] + $xx * $SlotOffset[$R], _ | |
688 | $ItemStartCoord1[$R][1] + $yy * $SlotOffset[$R], _ | |
689 | $ItemStartCoord1[$R][2] + $xx * $SlotOffset[$R], _ | |
690 | $ItemStartCoord1[$R][3] + $yy * $SlotOffset[$R], 0x182A5B, 30) | |
691 | If Not @error Then | |
692 | MouseClick("right", $sell[0], $sell[1]) | |
693 | EndIf | |
694 | EndIf | |
695 | Next | |
696 | Next | |
697 | EndIf | |
698 | Sleep(300) | |
699 | Send("{esc}") | |
700 | EndIf | |
701 | EndFunc ;==>RepairOrSellItems | |
702 | ||
703 | Func Terminate() | |
704 | Exit 0 | |
705 | EndFunc ;==>Terminate | |
706 | ||
707 | Func LeaveGame() | |
708 | Send("{esc}") | |
709 | Sleep(400) | |
710 | Click($Leave[$R][0], $Leave[$R][1]) | |
711 | EndFunc ;==>LeaveGame | |
712 | ||
713 | Func Pause() | |
714 | $Paused = Not $Paused | |
715 | While $Paused | |
716 | Sleep(100) | |
717 | ToolTip('Paused... (Press F2 to run it)', 0, 0) | |
718 | WEnd | |
719 | ToolTip("") | |
720 | EndFunc ;==>Pause | |
721 | ||
722 | Func Click($x, $y) | |
723 | MouseClick('left', Random($x - 3, $x + 3), Random($y - 3, $y + 3), 1, Random(0, 1)) | |
724 | Sleep(Random(1000, 1500)) | |
725 | EndFunc ;==>Click | |
726 | ||
727 | Func Move($x, $y) | |
728 | MouseClick('middle', Random($x - 3, $x + 3), Random($y - 3, $y + 3), 1, Random(0, 1)) | |
729 | Sleep(Random(1000, 1500)) | |
730 | EndFunc ;==>Move | |
731 | ||
732 | Func Attack($x, $y) | |
733 | MouseClick('right', Random($x - 3, $x + 3), Random($y - 3, $y + 3), 1, Random(0, 1)) | |
734 | EndFunc ;==>Attack | |
735 | ||
736 | Func Rest($z) | |
737 | Sleep(Random($z, $z + 25)) | |
738 | EndFunc ;==>Rest | |
739 | ||
740 | Func CheckForDeath() | |
741 | ConsoleWrite("Checking to see if we died") | |
742 | $Death = PixelSearch($DeathBounds[$R][0], $DeathBounds[$R][0], $DeathBounds[$R][0] + 4, _ | |
743 | $DeathBounds[$R][0] + 4, 0xFFFFFF) | |
744 | If Not @error Then | |
745 | ConsoleWrite("Died" & @LF) | |
746 | LeaveGame() | |
747 | Sleep(10000) | |
748 | Return True | |
749 | Else | |
750 | Return False | |
751 | EndIf | |
752 | EndFunc ;==>CheckForDeath | |
753 | ||
754 | Func CalcDist($x, $y) | |
755 | Local $dx = $x - $CharLoc[$R][0] | |
756 | Local $dy = $y - $CharLoc[$R][1] | |
757 | Return Sqrt($dx ^ 2 + $dy ^ 2) | |
758 | EndFunc ;==>CalcDist | |
759 | ||
760 | Func LootMagic() | |
761 | Local $gX | |
762 | Local $gY | |
763 | $Magic = PixelSearch($LootingArea[$R][0], $LootingArea[$R][1], $LootingArea[$R][2], _ | |
764 | $LootingArea[$R][3], 0x6969FF, 4) ; | |
765 | If Not @error Then | |
766 | - | If _ImageSearchArea($pngLoc[$R] & "item.png", 1, $BagFullCoords[$R][0], $BagFullCoords[$R][1], _ |
766 | + | |
767 | - | $BagFullCoords[$R][2], $BagFullCoords[$R][3], $gX, $gY, 120) Then |
767 | + | |
768 | If _ImageSearchArea($pngLoc[$R] & "item.png", 1, $BagFullCoords[$R][0], $BagFullCoords[$R][1], _ | |
769 | $BagFullCoords[$R][2], $BagFullCoords[$R][3], $gX, $gY, 90) Then | |
770 | Return True | |
771 | - | $LootingArea[$R][3], 0x6969FF, 2) ; |
771 | + | |
772 | EndIf | |
773 | ||
774 | - | Sleep(100 + Round($RunDelayMult[$R] * CalcDist($gX, $gY))) |
774 | + | |
775 | If ($LootAttempts > 5) Then | |
776 | - | $BagFullCoords[$R][2], $BagFullCoords[$R][3], $gX, $gY, 120) Then |
776 | + | |
777 | Else | |
778 | If LootMagic() Then | |
779 | - | $HasBlue = 1 |
779 | + | |
780 | EndIf | |
781 | EndIf | |
782 | Return False | |
783 | EndFunc ;==>LootMagic | |
784 | ||
785 | ||
786 | Func LootRares() | |
787 | Local $gX | |
788 | Local $gY | |
789 | $Rare = PixelSearch($LootingArea[$R][0], $LootingArea[$R][1], $LootingArea[$R][2], _ | |
790 | $LootingArea[$R][3], 0xBBBB00, 4) | |
791 | If Not @error Then | |
792 | Click($Rare[0] + 5, $Rare[1] + 2) | |
793 | Sleep(Round($RunDelayMult[$R] * CalcDist($gX, $gY))) | |
794 | If _ImageSearchArea($pngLoc[$R] & "item.png", 1, $BagFullCoords[$R][0], $BagFullCoords[$R][1], _ | |
795 | $BagFullCoords[$R][2], $BagFullCoords[$R][3], $gX, $gY, 90) Then | |
796 | Return True | |
797 | - | If _ImageSearchArea($pngLoc[$R] & "item.png", 1, $BagFullCoords[$R][0], $BagFullCoords[$R][1], _ |
797 | + | |
798 | - | $BagFullCoords[$R][2], $BagFullCoords[$R][3], $gX, $gY, 120) Then |
798 | + | |
799 | ||
800 | $LootAttempts += 1 | |
801 | If ($LootAttempts > 5) Then | |
802 | - | $LootingArea[$R][3], 0xBBBB00, 2) |
802 | + | |
803 | Else | |
804 | If LootRares() Then | |
805 | - | Sleep(100 + Round($RunDelayMult[$R] * CalcDist($gX, $gY))) |
805 | + | |
806 | EndIf | |
807 | - | $BagFullCoords[$R][2], $BagFullCoords[$R][3], $gX, $gY, 120) Then |
807 | + | |
808 | Return False | |
809 | EndFunc ;==>LootRares | |
810 | ||
811 | ||
812 | ||
813 | Func LootLegendaries() | |
814 | Local $gX | |
815 | Local $gY | |
816 | $Legendary = PixelSearch($LootingArea[$R][0], $LootingArea[$R][1], $LootingArea[$R][2], _ | |
817 | $LootingArea[$R][3], 0xBF642F, 2) ; | |
818 | If Not @error Then | |
819 | Click($Legendary[0] + 5, $Legendary[1] + 2) | |
820 | Sleep(Round($RunDelayMult[$R] * CalcDist($gX, $gY))) | |
821 | If _ImageSearchArea($pngLoc[$R] & "item.png", 1, $BagFullCoords[$R][0], $BagFullCoords[$R][1], _ | |
822 | $BagFullCoords[$R][2], $BagFullCoords[$R][3], $gX, $gY, 90) Then | |
823 | ; Will terminate if a legendary is present and the bag is full | |
824 | MsgBox(0, "Oops!", "Your bag is full and you may not want to miss this item") | |
825 | terminate() | |
826 | EndIf | |
827 | EndIf | |
828 | - | If _ImageSearchArea($pngLoc[$R] & "item.png", 1, $BagFullCoords[$R][0], $BagFullCoords[$R][1], _ |
828 | + | |
829 | - | $BagFullCoords[$R][2], $BagFullCoords[$R][3], $gX, $gY, 120) Then |
829 | + | |
830 | - | MsgBox(0, "Oops!", "Your bag is full and you may not want to miss this item") |
830 | + | |
831 | - | terminate() |
831 | + | |
832 | Click($set[0] + 5, $set[1] + 2) | |
833 | Sleep(Round($RunDelayMult[$R] * CalcDist($gX, $gY))) | |
834 | If _ImageSearchArea($pngLoc[$R] & "item.png", 1, $BagFullCoords[$R][0], $BagFullCoords[$R][1], _ | |
835 | $BagFullCoords[$R][2], $BagFullCoords[$R][3], $gX, $gY, 90) Then | |
836 | MsgBox(0, "Oops!", "Your bag is full and you may not want to miss this item") | |
837 | - | Sleep(100 + Round($RunDelayMult[$R] * CalcDist($gX, $gY))) |
837 | + | |
838 | EndIf | |
839 | - | $BagFullCoords[$R][2], $BagFullCoords[$R][3], $gX, $gY, 120) Then |
839 | + | |
840 | ||
841 | $LootAttempts += 1 | |
842 | If ($LootAttempts > 3) Then | |
843 | Return | |
844 | Else | |
845 | LootLegendaries() | |
846 | EndIf | |
847 | EndFunc ;==>LootLegendaries | |
848 | ||
849 | Func LootGems() | |
850 | - | Sleep(100 + Round($RunDelayMult[$R] * CalcDist($gX, $gY))) |
850 | + | |
851 | Local $gY = 0 | |
852 | - | $BagFullCoords[$R][2], $BagFullCoords[$R][3], $gX, $gY, 120) Then |
852 | + | |
853 | While _ImageSearchArea($pngLoc[$R] & "square.png", 1, 0, 0, @DesktopWidth, @DesktopHeight, $gX, $gY, 90) | |
854 | MouseClick("left", $gX, $gY) | |
855 | Sleep(Round($RunDelayMult[$R] * CalcDist($gX, $gY))) | |
856 | If _ImageSearchArea($pngLoc[$R] & "item.png", 1, $BagFullCoords[$R][0], $BagFullCoords[$R][1], _ | |
857 | $BagFullCoords[$R][2], $BagFullCoords[$R][3], $gX, $gY, 90) Then | |
858 | Return True | |
859 | EndIf | |
860 | MouseMove($IdleCursorCoords[$R][0], $IdleCursorCoords[$R][0]) | |
861 | Sleep(100) | |
862 | WEnd | |
863 | Return False | |
864 | EndFunc ;==>LootGems | |
865 | ||
866 | Func LootGold() | |
867 | Local $gX = 0 | |
868 | Local $gY = 0 | |
869 | MouseMove($IdleCursorCoords[$R][0], $IdleCursorCoords[$R][0]) | |
870 | - | While _ImageSearchArea($pngLoc[$R] & "square.png", 1, $LootingArea[$R][0], $LootingArea[$R][1], _ |
870 | + | While _ImageSearchArea($pngLoc[$R] & "gold.png", 1, 0, 0, @DesktopWidth, @DesktopHeight, $gX, $gY, 90) |
871 | - | $LootingArea[$R][2], $LootingArea[$R][3], $gX, $gY, 120) |
871 | + | |
872 | MouseMove($IdleCursorCoords[$R][0], $IdleCursorCoords[$R][0]) | |
873 | Sleep(Round($RunDelayMult[$R] * CalcDist($gX, $gY))) | |
874 | WEnd | |
875 | - | $BagFullCoords[$R][2], $BagFullCoords[$R][3], $gX, $gY, 120) Then |
875 | + | |
876 | ||
877 | Func LootTomes() | |
878 | Local $gX = 0 | |
879 | Local $gY = 0 | |
880 | MouseMove($IdleCursorCoords[$R][0], $IdleCursorCoords[$R][0]) | |
881 | While _ImageSearchArea($pngLoc[$R] & "tome.png", 1, 0, 0, @DesktopWidth, @DesktopHeight, $gX, $gY, 90) | |
882 | MouseClick("left", $gX, $gY) | |
883 | MouseMove($IdleCursorCoords[$R][0], $IdleCursorCoords[$R][0]) | |
884 | Sleep(Round($RunDelayMult[$R] * CalcDist($gX, $gY))) | |
885 | WEnd | |
886 | EndFunc ;==>LootTomes | |
887 | ||
888 | - | While _ImageSearchArea($pngLoc[$R] & "tome.png", 1, $LootingArea[$R][0], $LootingArea[$R][1], _ |
888 | + | |
889 | - | $LootingArea[$R][2], $LootingArea[$R][3], $gX, $gY, 120) |
889 | + | |
890 | Local $gY = 0 | |
891 | MouseMove($IdleCursorCoords[$R][0], $IdleCursorCoords[$R][0]) | |
892 | While _ImageSearchArea($pngLoc[$R] & "potion.png", 1, 0, 0, @DesktopWidth, @DesktopHeight, $gX, $gY, 90) | |
893 | MouseClick("left", $gX, $gY) | |
894 | MouseMove($IdleCursorCoords[$R][0], $IdleCursorCoords[$R][0]) | |
895 | Sleep(Round($RunDelayMult[$R] * CalcDist($gX, $gY))) | |
896 | WEnd | |
897 | EndFunc ;==>LootPotions | |
898 | ||
899 | Func AttackNearbyMonsters() | |
900 | - | While _ImageSearchArea($pngLoc[$R] & "potion.png", 1, $LootingArea[$R][0], $LootingArea[$R][1], _ |
900 | + | |
901 | - | $LootingArea[$R][2], $LootingArea[$R][3], $gX, $gY, 120) |
901 | + | |
902 | If @error Then | |
903 | ExitLoop | |
904 | EndIf | |
905 | ||
906 | Send("{4}") | |
907 | Sleep(300) | |
908 | For $i = 10 To 0 Step -1 | |
909 | Attack($MonsterData[0], $MonsterData[1]) | |
910 | Sleep(100) | |
911 | - | Local $cnt = 5 |
911 | + | |
912 | WEnd | |
913 | - | While _ImageSearchArea($pngLoc[$R] & "gold.png", 1, $LootingArea[$R][0], $LootingArea[$R][1], _ |
913 | + | |
914 | - | $LootingArea[$R][2], $LootingArea[$R][3], $gX, $gY, 120) And $cnt |
914 | + | |
915 | Func CheckForNearbyMonsters() | |
916 | $MonsterData = PixelSearch($CharHitBox[$R][0], $CharHitBox[$R][1], $CharHitBox[$R][2], $CharHitBox[$R][3], 0xEE0000, 10) | |
917 | If @error Then | |
918 | - | $cnt -= 1 |
918 | + | |
919 | Else | |
920 | Return True | |
921 | EndIf | |
922 | EndFunc ;==>CheckForNearbyMonsters | |
923 | ||
924 | ||
925 | Func SnareNearbyEnemies() | |
926 | $MonsterData = PixelSearch($CharHitBox[$R][0], $CharHitBox[$R][1], $CharHitBox[$R][2], $CharHitBox[$R][3], 0xEE0000, 10) | |
927 | If Not @error Then | |
928 | MouseMove($MonsterData[0], $MonsterData[1]) | |
929 | Sleep(350) | |
930 | Send("{3}") | |
931 | Sleep(250) | |
932 | EndIf | |
933 | EndFunc ;==>SnareNearbyEnemies | |
934 | ||
935 | ||
936 | Func InGameLobby() | |
937 | MouseMove($GameLobbyCode[$R][0], $GameLobbyCode[$R][1]) | |
938 | Sleep(300) | |
939 | PixelSearch($GameLobbyCode[$R][0], $GameLobbyCode[$R][1], $GameLobbyCode[$R][0] + 10, $GameLobbyCode[$R][1] + 10, $GameLobbyCode[$R][2], 10) | |
940 | If Not @error Then | |
941 | Return True | |
942 | Else | |
943 | Return False | |
944 | EndIf | |
945 | EndFunc ;==>InGameLobby | |
946 | ||
947 | Func InGameplayScreen() | |
948 | PixelSearch($GameScreenCode[$R][0], $GameScreenCode[$R][1], $GameScreenCode[$R][0] + 4, $GameScreenCode[$R][1] + 3, $GameScreenCode[$R][2], 10) | |
949 | If Not @error Then | |
950 | Return True | |
951 | Else | |
952 | Return False | |
953 | EndIf | |
954 | EndFunc ;==>InGameplayScreen | |
955 | ||
956 | Func _ImageSearchArea($findImage, $resultPosition, $x1, $y1, $right, $bottom, ByRef $x, ByRef $y, $tolerance) | |
957 | $findImage = "*TRANSBLACK " & $findImage | |
958 | If $tolerance > 0 Then $findImage = "*" & $tolerance & " " & $findImage | |
959 | $result = DllCall("ImageSearchDLL_x64.dll", "str", "ImageSearch", "int", $x1, "int", $y1, "int", $right, "int", $bottom, "str", $findImage) | |
960 | If $result = "0" Then Return 0 | |
961 | ||
962 | ; Otherwise get the x,y location of the match and the size of the image to | |
963 | ; compute the centre of search | |
964 | $array = StringSplit($result[0], "|") | |
965 | If (UBound($array) >= 4) Then | |
966 | $x = Int(Number($array[2])) | |
967 | $y = Int(Number($array[3])) | |
968 | If $resultPosition = 1 Then | |
969 | $x = $x + Int(Number($array[4]) / 2) | |
970 | $y = $y + Int(Number($array[5]) / 2) | |
971 | EndIf | |
972 | Return 1 | |
973 | EndIf | |
974 | EndFunc ;==>_ImageSearchArea | |
975 | ||
976 | Func ActivateGUI() | |
977 | ||
978 | ;setup the UI | |
979 | $Waiting = True | |
980 | ||
981 | $Form1 = GUICreate("D3 Witch Doctor bot by Avatar88343 and Andygongyb", 500, 320, -1, -1) | |
982 | - | If @AutoItX64 Then |
982 | + | |
983 | - | $result = DllCall("ImageSearchDLL_x64.dll", "str", "ImageSearch", "int", $x1, "int", $y1, "int", $right, "int", $bottom, "str", $findImage) |
983 | + | |
984 | 25, 30, 550, -1) | |
985 | - | $result = DllCall("ImageSearchDLL.dll", "str", "ImageSearch", "int", $x1, "int", $y1, "int", $right, "int", $bottom, "str", $findImage) |
985 | + | |
986 | GUICtrlCreateLabel("Hotkeys:" & @CRLF & @TAB & "Terminate:" & @TAB & "SHIFT + \" & @CRLF _ | |
987 | & @TAB & "Pause:" & @TAB & @TAB & "F2", 25, 50, 550, -1) | |
988 | ||
989 | GUICtrlCreateLabel("Game Resolution", 25, 100, 100, -1) | |
990 | $ResCombo = GUICtrlCreateCombo("", 25, 115, 200, -1) | |
991 | GUICtrlSetData($ResCombo, "1920 x 1080|800 x 600", "Select your Res") | |
992 | ||
993 | GUICtrlCreateLabel("Character run speed (for 800x600)", 275, 100, 200, -1) | |
994 | $RunInput = GUICtrlCreateInput("0", 275, 115, 200, -1) | |
995 | ||
996 | $LootRareCheck = GUICtrlCreateCheckbox("Loot rares/legs/sets", 25, 160) | |
997 | GUICtrlSetState($LootRareCheck, $GUI_CHECKED) | |
998 | ||
999 | $LootBluesCheck = GUICtrlCreateCheckbox("Loot blues", 150, 160) | |
1000 | GUICtrlSetState($LootBluesCheck, $GUI_CHECKED) | |
1001 | ||
1002 | $LootGemsCheck = GUICtrlCreateCheckbox("Loot gems", 275, 160) | |
1003 | GUICtrlSetState($LootGemsCheck, $GUI_CHECKED) | |
1004 | ||
1005 | $LootPotionsCheck = GUICtrlCreateCheckbox("Loot potions", 400, 160) | |
1006 | GUICtrlSetState($LootPotionsCheck, $GUI_CHECKED) | |
1007 | ||
1008 | $LootTomesCheck = GUICtrlCreateCheckbox("Loot tomes of secret", 25, 190) | |
1009 | GUICtrlSetState($LootTomesCheck, $GUI_CHECKED) | |
1010 | ||
1011 | $LootGoldCheck = GUICtrlCreateCheckbox("Collect the gold carefully (slower)", 275, 190) | |
1012 | GUICtrlSetState($LootGoldCheck, $GUI_CHECKED) | |
1013 | ||
1014 | $RepairCheckbox = GUICtrlCreateCheckbox("Repair gears when needed", 25, 220) | |
1015 | GUICtrlSetState($RepairCheckbox, $GUI_CHECKED) | |
1016 | ||
1017 | $SellBluesCheckbox = GUICtrlCreateCheckbox("Sell blue item when the bag is full", 275, 220) | |
1018 | GUICtrlSetState($SellBluesCheckbox, $GUI_CHECKED) | |
1019 | ||
1020 | $StartButton = GUICtrlCreateButton("Start", 175, 260, 150, 33) | |
1021 | ||
1022 | GUISetState(@SW_SHOW) | |
1023 | ||
1024 | ;Wait for them to press start | |
1025 | While $Waiting | |
1026 | $Action = GUIGetMsg() | |
1027 | ||
1028 | If $Action = $GUI_EVENT_CLOSE Then Terminate() | |
1029 | If $Action = $StartButton Then ExitLoop | |
1030 | ||
1031 | Sleep(50) | |
1032 | WEnd | |
1033 | ||
1034 | ;Get the values | |
1035 | $SelectedRes = GUICtrlRead($ResCombo) | |
1036 | If $SelectedRes = "1920 x 1080" Then | |
1037 | $R = 0 | |
1038 | ElseIf $SelectedRes = "800 x 600" Then | |
1039 | $R = 1 | |
1040 | Else | |
1041 | MsgBox(0, "Error", "You did not select a resolution! Try again") | |
1042 | Terminate() | |
1043 | EndIf | |
1044 | ||
1045 | $RunSpeed = Int(GUICtrlRead($RunInput)) | |
1046 | $LootRares = GUICtrlRead($LootRareCheck) = $GUI_CHECKED | |
1047 | $LootBlues = GUICtrlRead($LootBluesCheck) = $GUI_CHECKED | |
1048 | $LootGems = GUICtrlRead($LootGemsCheck) = $GUI_CHECKED | |
1049 | $LootPotions = GUICtrlRead($LootPotionsCheck) = $GUI_CHECKED | |
1050 | $LootTomes = GUICtrlRead($LootTomesCheck) = $GUI_CHECKED | |
1051 | $LootGold = GUICtrlRead($LootGoldCheck) = $GUI_CHECKED | |
1052 | $Repair = GUICtrlRead($RepairCheckbox) = $GUI_CHECKED | |
1053 | $SellBlues = (GUICtrlRead($SellBluesCheckbox) = $GUI_CHECKED) And $LootBlues | |
1054 | ||
1055 | GUISetState(@SW_HIDE) | |
1056 | EndFunc ;==>ActivateGUI |