Play Legend of the Green Dragon Play BNT Play Promisance Play Alien Assault Traders Play Quantum Star Play Some Chess  
   D3jsp RPGRPG   ArcadeArcade   Multiplayer PokerD3Jsp Poker   FAQ/RulesFAQ/Rules  SearchSearch  MemberlistMemberlist   UsergroupsUsergroups   ChatroomLive Chat   Log inLog in   RegisterRegister 

Wizard AutoIt bot
1, 2  Next
 
Post new topic  Reply to topic  d3jsp Forum Index -> Diablo III Trading and Discussion
View previous topic :: View next topic ::  


Author Message
TheKeep


Group: Members
Joined: 17 Jun 2012
Posts: 110
Gold: 1.50


Status:
Warn:
Reputation: 0    



Post#1 Posted: 02 Aug 2012 12:54 pm    Post subject: Wizard AutoIt bot Reply with quote

Does a1 flawlessly, Ive been getting 300k per hour. @ 100 % gf.

Coded in AutoIt, really complex to ensure the script is always running...

Wizards only!

Does the a1 cellar, kills sakans... , picks up magics, rares, walks around for gold.

Optimized to imagesearch as small as possible, it fails.

But basically, you'll get rich while maintaining your "life" if you have one..

Can run minimized* thanks to me..

it's very personable and can be changed to your preference.


pm for questions, videos, etc.
Back to top
View user's profile Send private message
FrostNova


Group: Banned
Joined: 10 Aug 2011
Posts: 110
Gold: Locked


us.gif

Status:
Warn: Banned
Reputation: 0    


Banned

Post#2 Posted: 02 Aug 2012 01:07 pm    Post subject: Reply with quote

http://www.d3jsp.org/viewtopic.php?t=96660
_________________
This user's signature has been disabled
Back to top
View user's profile Send private message
TheKeep


Group: Members
Joined: 17 Jun 2012
Posts: 110
Gold: 1.50


Status:
Warn:
Reputation: 0    



Post#3 Posted: 02 Aug 2012 01:33 pm    Post subject: Reply with quote

eh i dont really like sam's bot, mine doesn't salvage and all that other bullshit that'll end up getting your items lost or fucked up..

suit urself, and yes, plenty of bots there. this one is custom and you have me, a programmer to walk you through and spend one of one time with you until we have it working on your pc. so fuck you frost nova. smile
Back to top
View user's profile Send private message
CheapTrader


Group: Scammer
Joined: 15 Jul 2011
Donor:
Posts: 816
Gold: Locked


us.gif

Status:
Warn:
Reputation: 19    


<b><font color=red>Scammer</font></b>

Post#4 Posted: 02 Aug 2012 01:49 pm    Post subject: Reply with quote

FrostNova wrote:
http://www.d3jsp.org/viewtopic.php?t=96660


First off.. Most people can simply "Copy and paste" So LOL!
and autoit bots get rocked Every ban wave! Do what you want with that.


For all those of you with $10-$20bucks in paypal buy his premade ( assuming he didn't key log it)

I hope your Resolution/Color ratios Match the Imaging in his premade folders.

If they dont you can S/S and appropriate imaging accordingly.



Edit:
If you want a randomized bot let me know meng.
$100 Donation to my paypal would get you started on the true road to riches.


Last edited by CheapTrader on 02 Aug 2012 01:50 pm; edited 1 time in total

_____________________
Trusted Trader here. Feel Safe.

(̅_̅_̅_̅_̅_̅м̲̅a̲̅я̲̅i̲̅j̲̅u̲̅a̲̅n̲̅a̲̅̅_̅̅_̅_̅()ڪے

Pwning the Battle threads..
Back to top
View user's profile Send private message
TheKeep


Group: Members
Joined: 17 Jun 2012
Posts: 110
Gold: 1.50


Status:
Warn:
Reputation: 0    



Post#5 Posted: 02 Aug 2012 02:46 pm    Post subject: Reply with quote

^ this. but mine is $20 and it'll match ur gpu, display, and video settings perfectly. Read memory, numbers, and objects rather than images and colors. lots of tinkers that i spent TIME on that I truly think improved my bot 10 fold. sooo. lmk anyone
Back to top
View user's profile Send private message
FrostNova


Group: Banned
Joined: 10 Aug 2011
Posts: 110
Gold: Locked


us.gif

Status:
Warn: Banned
Reputation: 0    


Banned

Post#6 Posted: 02 Aug 2012 02:55 pm    Post subject: Reply with quote

CheapTrader wrote:
FrostNova wrote:
http://www.d3jsp.org/viewtopic.php?t=96660


First off.. Most people can simply "Copy and paste" So LOL!
and autoit bots get rocked Every ban wave! Do what you want with that.


For all those of you with $10-$20bucks in paypal buy his premade ( assuming he didn't key log it)

I hope your Resolution/Color ratios Match the Imaging in his premade folders.

If they dont you can S/S and appropriate imaging accordingly.



Edit:
If you want a randomized bot let me know meng.
$100 Donation to my paypal would get you started on the true road to riches.


you make it seem like im trying to make profit from it. i could care less. i posted it so people can look at that one and at other on that site probably just as good as either of yours or better. its a site promotion. its a good forum and theres no reason to be a jerk about it

_________________
This user's signature has been disabled
Back to top
View user's profile Send private message
TheKeep


Group: Members
Joined: 17 Jun 2012
Posts: 110
Gold: 1.50


Status:
Warn:
Reputation: 0    



Post#7 Posted: 02 Aug 2012 02:57 pm    Post subject: Reply with quote

FrostNova wrote:
CheapTrader wrote:
FrostNova wrote:
http://www.d3jsp.org/viewtopic.php?t=96660


First off.. Most people can simply "Copy and paste" So LOL!
and autoit bots get rocked Every ban wave! Do what you want with that.


For all those of you with $10-$20bucks in paypal buy his premade ( assuming he didn't key log it)

I hope your Resolution/Color ratios Match the Imaging in his premade folders.

If they dont you can S/S and appropriate imaging accordingly.



Edit:
If you want a randomized bot let me know meng.
$100 Donation to my paypal would get you started on the true road to riches.


you make it seem like im trying to make profit from it. i could care less. i posted it so people can look at that one and at other on that site probably just as good as either of yours or better. its a site promotion. its a good forum and theres no reason to be a jerk about it



you didn't do it to help or anything, hold that noise. you did it because you got exposed as a fraud on the site , now you're trying to harm anyone elses sales or profits. my bots better than every PUBLIC bot on there, bc I'm from blizzhackers, I've done work with them. I know they have private bots right now that would wipe mine up, but you'd never see the lights of them.
Back to top
View user's profile Send private message
FrostNova


Group: Banned
Joined: 10 Aug 2011
Posts: 110
Gold: Locked


us.gif

Status:
Warn: Banned
Reputation: 0    


Banned

Post#8 Posted: 02 Aug 2012 03:23 pm    Post subject: Reply with quote

TheKeep wrote:
FrostNova wrote:
CheapTrader wrote:
FrostNova wrote:
http://www.d3jsp.org/viewtopic.php?t=96660


First off.. Most people can simply "Copy and paste" So LOL!
and autoit bots get rocked Every ban wave! Do what you want with that.


For all those of you with $10-$20bucks in paypal buy his premade ( assuming he didn't key log it)

I hope your Resolution/Color ratios Match the Imaging in his premade folders.

If they dont you can S/S and appropriate imaging accordingly.



Edit:
If you want a randomized bot let me know meng.
$100 Donation to my paypal would get you started on the true road to riches.


you make it seem like im trying to make profit from it. i could care less. i posted it so people can look at that one and at other on that site probably just as good as either of yours or better. its a site promotion. its a good forum and theres no reason to be a jerk about it



you didn't do it to help or anything, hold that noise. you did it because you got exposed as a fraud on the site , now you're trying to harm anyone elses sales or profits. my bots better than every PUBLIC bot on there, bc I'm from blizzhackers, I've done work with them. I know they have private bots right now that would wipe mine up, but you'd never see the lights of them.



ok? like i said before, it just opens up a new route for people to get better/cheap/w.e other

exposed as a fraud? how so? because one kid starts screamin scammer?

_________________
This user's signature has been disabled
Back to top
View user's profile Send private message
Ishidon


Group: Members
Joined: 17 Jun 2012
Posts: 88
Gold: 9.30


Status:
Warn:
Reputation: 1    



Post#9 Posted: 02 Aug 2012 03:34 pm    Post subject: Reply with quote

Dont buy his bot! We negotiated a deal yesterday, i gave him 5 million gold, he put a script on my computer ran it, and it dropped all my equipped items and stole my gold! Dont trust him! Hes a scammer!
Back to top
View user's profile Send private message


FrostNova


Group: Banned
Joined: 10 Aug 2011
Posts: 110
Gold: Locked


us.gif

Status:
Warn: Banned
Reputation: 0    


Banned

Post#10 Posted: 02 Aug 2012 03:44 pm    Post subject: Reply with quote

Ishidon wrote:
Dont buy his bot! We negotiated a deal yesterday, i gave him 5 million gold, he put a script on my computer ran it, and it dropped all my equipped items and stole my gold! Dont trust him! Hes a scammer!



............. jawdrop ............... hysterical

_________________
This user's signature has been disabled
Back to top
View user's profile Send private message
youshalldie


Group: Members
Joined: 01 Aug 2012
Posts: 43
Gold: 2.30


Status:
Warn:
Reputation: 0    



Post#11 Posted: 02 Aug 2012 03:55 pm    Post subject: Reply with quote

FrostNova wrote:
Ishidon wrote:
Dont buy his bot! We negotiated a deal yesterday, i gave him 5 million gold, he put a script on my computer ran it, and it dropped all my equipped items and stole my gold! Dont trust him! Hes a scammer!



............. jawdrop ............... hysterical


Says the other scammer.
Back to top
View user's profile Send private message
AceOfSpadez


Group: Scammer
Joined: 29 Jul 2011
Posts: 479
Gold: Locked


us.gif

Status:
Warn:
Reputation: 4    


<b><font color=red>Scammer</font></b>

Post#12 Posted: 02 Aug 2012 06:57 pm    Post subject: Reply with quote

shits free you scumbag
ownedcore com


Last edited by AceOfSpadez on 02 Aug 2012 06:57 pm; edited 1 time in total
Back to top
View user's profile Send private message
TheKeep


Group: Members
Joined: 17 Jun 2012
Posts: 110
Gold: 1.50


Status:
Warn:
Reputation: 0    



Post#13 Posted: 03 Aug 2012 06:29 pm    Post subject: Reply with quote

AceOfSpadez wrote:
shits free you scumbag
ownedcore com



yeah go get people keylogged.

if anything use blizzhackers.cc

they're little lenient with the moderating
Back to top
View user's profile Send private message
Ishidon


Group: Members
Joined: 17 Jun 2012
Posts: 88
Gold: 9.30


Status:
Warn:
Reputation: 1    



Post#14 Posted: 03 Aug 2012 06:30 pm    Post subject: Reply with quote

Instead of having a chance of getting keylogged but having a working bot, you can have no bot and have this guy take all your gold and items! Don't trust him!
Back to top
View user's profile Send private message
TheKeep


Group: Members
Joined: 17 Jun 2012
Posts: 110
Gold: 1.50


Status:
Warn:
Reputation: 0    



Post#15 Posted: 03 Aug 2012 06:31 pm    Post subject: Reply with quote

you're annoying.
Back to top
View user's profile Send private message
Ishidon


Group: Members
Joined: 17 Jun 2012
Posts: 88
Gold: 9.30


Status:
Warn:
Reputation: 1    



Post#16 Posted: 03 Aug 2012 06:32 pm    Post subject: Reply with quote

shouldnt have stolen my stuff smile
Back to top
View user's profile Send private message
TheKeep


Group: Members
Joined: 17 Jun 2012
Posts: 110
Gold: 1.50


Status:
Warn:
Reputation: 0    



Post#17 Posted: 03 Aug 2012 06:55 pm    Post subject: Reply with quote

Ishidon wrote:
shouldnt have stolen my stuff smile


you know i couldv'e taken ur measly coins and didn't stop lying you faggot.


Last edited by TheKeep on 03 Aug 2012 06:55 pm; edited 1 time in total
Back to top
View user's profile Send private message
Ishidon


Group: Members
Joined: 17 Jun 2012
Posts: 88
Gold: 9.30


Status:
Warn:
Reputation: 1    



Post#18 Posted: 03 Aug 2012 07:10 pm    Post subject: Reply with quote

TheKeep wrote:
Ishidon wrote:
; Diablo 3 gold bot. Damn Blizzard for not fixing it.
; Keep it private, oh wait I dont have to tell you this derisive
; Must be running at 800x600 full screen or window mode
; Do not run at higher resolution or it wont click at the right spots


#include <Misc>
Opt('MouseCoordMode', 2)
Opt('PixelCoordMode', 2)
Opt('MouseClickDelay', 0)
Opt('SendKeyDelay', 0)
Opt('SendKeyDownDelay', 0)

WinActivate('Diablo III')
If WinActive('Diablo III') then
StackBot1()
StackBot1() ; verification , does it twice incase of failure
itemswitchBot1()
itemswitchBot1()
itemswitchBot1() ; verification , does it twice incase of failure
sleep(500)
itemswitchBot1() ; Bot1s 1 stack
sleep(500)
itemswitchBot1() ; Bot1s 2 stack
sleep(500)
itemswitchBot1() ; ; Bot1s 10 stack
sleep(500)
itemswitchBot1() ; Bot1s 100 stack
sleep(500)
closeBot1()
EndIf






Func StackBot1()
WinActivate('Diablo III')
If WinActive('Diablo III') Then
BlockInput(1)
Send("{ENTER}")
Send("Gold Bot1 starting")
Send("{ENTER}")
MouseClick("Left", 790, 10, 1, 0) ;
MouseClick("Left", 531, 569, 1, 0) ;

w()
cf() ;;;;;;;;;;;;
r1()
cf() ;;;;;;;;;;;;
r2()
cf() ;;;;;;;;;;;;
a()
cf() ;;;;;;;;;;;;
o()
cf() ;;;;;;;;;;;;
h()
cf() ;;;;;;;;;;;;
g()
cf() ;;;;;;;;;;;;
bs()
cf() ;;;;;;;;;;;;
br()
cf() ;;;;;;;;;;;;
p()
cf() ;;;;;;;;;;;;
b()
cf() ;;;;;;;;;;;;
ar()
cf() ;;;;;;;;;;;;
s()
cf() ;;;;;;;;;;;;
Sleep(100)
EndIf
EndFunc

Func itemswitchBot1()
WinActivate('Diablo III')
Sleep(50)
MouseClick("Left", 790, 10, 1, 0)
Send("{ENTER}")
Send("Take this for all ur troubles bro, im quitting")
Send("{ENTER}")

MouseClick("Right", 27, 91, 1, 0)
MouseClick("Left", 45, 172, 1, 0)
Sleep(500)
Send("9999999999")
Sleep(100)
MouseClick("Left", 106, 492, 1, 0)
EndFunc








Func cf()
MouseClick("Left", 375, 29, 1, 0) ;
EndFunc

Func w()
MouseClick("Left", 642, 263, 1, 0) ;
EndFunc

Func r1()
MouseClick("Left", 645, 215, 1, 0)
EndFunc

Func r2()
MouseClick("Left", 752, 214, 1, 0)
EndFunc

Func a()
MouseClick("Left", 738, 128, 1, 0)
EndFunc

Func o()
MouseClick("Left", 752, 265, 1, 0)
EndFunc

Func h()
MouseClick("Left", 699, 111, 1, 0)
EndFunc

Func bs()
MouseClick("Left", 699, 270, 1, 0)
EndFunc

Func b()
MouseClick("Left", 696, 195, 1, 0)
EndFunc

Func p()
MouseClick("Left", 699, 229, 1, 0)
EndFunc

Func ar()
MouseClick("Left", 700, 157, 1, 0)
EndFunc

Func g()
MouseClick("Left", 642, 178, 1, 0)
EndFunc

Func s()
MouseClick("Left", 660, 125, 1, 0)
EndFunc

Func br()
MouseClick("Left", 755, 180, 1, 0)
EndFunc


Func closeBot1()
While 1
Send("{ENTER}")
Send("[To Console] Trade Bot1 verified and completed")
Send("{ENTER}")
WEnd
EndFunc




thats the code he gave me



well you can use this , item drop script, or you can actually pay for the working bot that I have.


20 million per. private messages only, scammers or take backs will get ^.


TheKeep wrote:
just sold to andrew @ 25 million. enjoy

i gave you 25 million but i didnt pay for it? scammer. Dont trust this kid.


Last edited by Ishidon on 03 Aug 2012 07:13 pm; edited 1 time in total
Back to top
View user's profile Send private message
TheKeep


Group: Members
Joined: 17 Jun 2012
Posts: 110
Gold: 1.50


Status:
Warn:
Reputation: 0    



Post#19 Posted: 03 Aug 2012 07:30 pm    Post subject: Reply with quote

TheKeep wrote:
just sold to andrew @ 25 million. enjoy



i gave you 25 million but i didnt pay for it? scammer. Dont trust this kid.[/quote]



lmao wtf... you are a pathological liar.
Back to top
View user's profile Send private message
AceOfSpadez


Group: Scammer
Joined: 29 Jul 2011
Posts: 479
Gold: Locked


us.gif

Status:
Warn:
Reputation: 4    


<b><font color=red>Scammer</font></b>

Post#20 Posted: 04 Aug 2012 02:17 am    Post subject: Reply with quote

TheKeep wrote:
AceOfSpadez wrote:
shits free you scumbag
ownedcore com



yeah go get people keylogged.

if anything use blizzhackers.cc

they're little lenient with the moderating

you cant get keylogged by open source scripts that you read and compile yourself

Scam elsewhere scumbag

google search OWNEDCORE d3 gold profiles... owned core is bigger than blizzhackers, try again


;=========== DO NOT TOUCH ===========;
#RequireAdmin
#include <GUIConstantsEx>
#include <StaticConstants>
#include <WindowsConstants>
#include <SimpleTesseractColor>
#include <ScreenCapture>
Opt('MouseCoordMode', 2)
Opt('PixelCoordMode', 2)


;GUI Predeclare to prevent firing the Case statements
Global $mFile,$mOptions,$lblRun,$lblLocation,$lblStatus,$lblLast,$lblRuntime,$lblGold,$lblCellars,$lblStats,$mAutoUpdate,$SettingsGUI,$Settings,$tsSettings,$grpgameAutoStart,$lblgameDiabloIIILoc,$txtgameDiabloIIILoc,$lblgamePassword,$txtgamePassword,$cbgameAutoStart,$btngameDiabloIIILoc,$tsLooting,$grpLoot,$etlootCustom,$cblootSet,$cblootLegendary,$cblootRare,$cblootMagic,$cblootCustom,$tsStash,$grpStashing,$cbstashSet,$cbStashLegendary,$cbstashRare,$cbstashMagic,$cbStashTomes,$cbStashGems, $tsVendoring,$grpVendoring,$cbvendorRare,$cbvendorMagic,$cbvendorLegendary,$cbvendorSet,$cmbvendorRows,$lblVendorRow,$cbvendorAll, $lblVendorCol,$cmbVendorColumns,$tsSkills,$grpSkills,$txtSkill1,$txtSkill2,$txtSkill3,$txtSkill4,$lblskill1,$lblSkill2,$lblSkill3, $lblSkill4,$cbCellarDetectScreenShots, $btnSave,$grpAdd,$txtAddMove, $txtAddDPS, $lblAddDPS,$cbAddGoldOnly, $lbltimingGameLoad, $lbltimingCellarClick, $lbltimingWormHole, $lbltimingMiddleDoor, $lbltimingAbort, $lbltimingTP, $lbltimingLoot, $lbltimingLootRun, $txttimingGameLoad, $txttimingWormHole, $txttimingTP, $txttimingCellarClick, $txttimingMiddleDoor, $txttimingLootRun, $txttimingLoot, $txttimingAbort,$txtRareStashilvl, $txtRareSalvageilvl, $txtRareVendorilvl, $txtMagicStashilvl, $txtMagicSalvageilvl, $txtMagicVendorilvl
Global $size = WinGetClientSize("[CLASS:D3 Main Window Class]"), $Kill = ProcessList("AutoIt3_x64.exe"), $StoredText = "",$mLootIn = 0, $x_ratio, $y_ratio, $AddDPS = 0,$attackTime = 0, $hFont = 0, $title, $Paused, $Go = 0, $i = 0, $gX = 0, $gY = 0, $GemCount = 0, $LegendaryCount = 0, $SetCount = 0, $RareCount = 0, $deathCount = 0, $MagicCount = 0, $repairCount = 0, $closedcellarCount = 0, $cellarCount = 0, $countMissedCellar = 0, $MissedCellarCountPercent = 0, $t = TimerInit(), $rt = 0, $run = 0, $yellow = 0xFFF000, $red = 0xD90000, $StartingGold = 0,$AccumulatedGold = 0,$GPH = 0, $OpenCellarAvg = 0, $OpenCellarSec = 0,$ClosedCellarAvg, $ClosedCellarSec = 0,$CellCoord = 0, $c = 0, $RunsPerHour = 0,$closedCellarCountPercent = 0, $repairCountPercent = 0, $deathsCountPercent = 0, $cellarCountPercent = 0, $settingsINI = "Settings.ini", $StashSelectedTab = 0,$CurrentItems = 0
Global $gems[8] = ["Ru1.png", "Ru2.png", "Em1.png", "Em2.png", "To1.png", "To2.png", "Am1.png", "Am2.png"]
Global $AnalyzedLoot[10][6]
Global $StashTabs[3][2] = [[512,230], [512,360], [512,460]]
Global $structArray[10][6]
$struct = "int x;int y;bool salvage;bool vendor;char itemtype[20]"

For $i = 1 To $Kill[0][0]
$CurrentPID = @AutoItPID
If $CurrentPID <Kill> $Kill[$i][1] Then
ProcessClose($Kill[$i][1])
EndIf
Next

DirCreate("shots")
DirCreate("shots\Start")
DirCreate("shots\Cellar")

$pngLoc = @ScriptDir & "\pics\" & @DesktopWidth & "x" & @DesktopHeight& "\"

If Not FileExists($pngLoc & "MainMenu.png") Then
MsgBox(16, "Fatal Error", "FATAL ERROR: Cannot find: " & $pngLoc & "MainMenu.png" & @CRLF & "Make sure your desktop resolution is either 1600x900 or 1920x1080")
Exit
EndIf

If @OSArch = "X64" Then DllCall("kernel32.dll", "int", "Wow64DisableWow64FsRedirection", "int", 1)
If @OSArch = "X64" And Not @AutoItX64 Then MsgBox(16, "ERROR", "Why aren't you running the 64-bit AutoIt??? Expect bugs!")

;GUI Title Bar
For $i = 0 To Random(0, 7, 1)
$title &= Chr(Random(97, 122, 1))
Next
For $i = 0 To Random(5, 10, 1)
$title &= Chr(Random(65, 90, 1))
Next
$title &= " "
;=================================

;AutoUpdate Version
$ver = "8==D.7"
$VersionsInfo = "http://bit.ly/LF1Rp6"
$oldVersion = IniRead("updater.ini", "Version", "Version", $ver)
$newVersion = "0.0"
$AutoUpdate = 1
;==================================================

$totalItems = 1 ;Number of items in the pick array
;$currentArrayItem = 0x
Global $pick[$totalItems] ;DONT CHANGE THIS

;Cellar Detection
Global $cellarCoordx[6] = [255, 280, 175, 265, 315, 600]
Global $cellarCoordy[6] = [290, 302, 305, 340, 314, 435]
$cellarCheckSleep = 165
$Screenshot = 1

;AutoStart
$gameDiabloIIILoc = "C:\" ;Location of Diablo 3 executable
$gameAutoStart = 0 ; Set this to 1 to start game from desktop or recover from closed game
$gameStartTime = 9000 ;Change depending on computer/internet speed
$gamePassword = "Your Password" ;Symbols go in brackets "Password1{!}"
$gameExecutable = "Diablo III.exe"

;Change to match your abilities (1-4 by default)z
$Skill1 = "1"
$Skill2 = "2"
$Skill3 = "3"
$Skill4 = "4"
;==================================================

;Looting
$LootSet = 1 ;1 if you want to pick up Set
$LootLegendary = 1;1 if you want to pick up Legendaries
$LootRare = 1 ;1 if you want to pick up Rares
$LootMagic = 1 ;1 if you want to pick up Magic
$LootCustom = 0 ;1 if you want to pick up Custom Items
$LootGoldOnly = 0 ; 1 if you want to not loot anything but gold
;==================================================

;Stashing
$StashLegendary = 1 ;1 if you want to store Legendary items in the stash
$StashSet = 1 ;1 if you want to store Set items in the stash
$StashRare = 1 ;1 if you want to store Rare items in the stash
$StashMagic = 0 ;1 if you want to store Magic items in the stash
$StashTomes = 1 ;1 if you want to store Tomes items in the stash
$StashGems = 1 ;1 if you want to store Gems items in the stash
$StashLoot = $StashMagic + $StashRare + $StashLegendary + $Stashset + $StashGems + $StashTomes
;==================================================

;Vendoring
$VendorSet = 0
$VendorLegendary = 0
$VendorRare = 0 ;1 if you want to vendor Rares
$VendorMagic = 1 ;1 if you want to vendor Magic
$vendorRows = 6 ;# of rows to vendor, starting from the top (default = 5: bottom row is safe)
$vendorColumns = 10 ;# of columns to vendor, starting from left
$VendorAll = 1 ;Vendors everything but identified items
$VendorLoot = $VendorMagic + $VendorRare + $VendorLegendary + $VendorSet + $VendorAll
;==================================================

;Additional
$AddDPS = 0 ;Time (in s) the script will shoot sarkoth with the right button
;==================================================

;Timing
$timingMiddleDoor = 2200 ;time (in ms) to wait to use skill archon
$timingCellarClick = 750 ;time (in ms) it takes to run into the cellar
$timingWormHole = 1900 ;time (in ms) to wait to end the teleporting to the cellar
$timingAbort = 300 ;time (in ms) to wait to cast abort skills, decrease if you have high attack speed
$timingGameLoad = 5000 ;Time (in ms) the script waits for the game to load before it starts pathfinding. Slow this down for slower hard drives
$timingTP = 6000;Time (in ms) the script waits for teleport before exiting the game
$timingLoot = 800;Time (in ms) the script waits before each loot attempt
$timingLootRun = 600;Time (in ms) the script runs towards sarkoth dead body
;==================================================

;Anal Loot!!
$AnalLoot = 1
$RareSalvageiLvl = 61 ;and below to Salvage #
$MagicSalvageiLvl = 62 ;and below to Salvage #
$RareStashiLvl = 62 ;and above to Stash #
$MagicStashiLvl = 63 ;and above to Stash #
$RareVendoriLvl = 60 ;and below to Vendor #
$MagicVendoriLvl = 60 ;and below to Vendor #
$AnalSpeed = 75
;==================================================
;New Loot Coords
$slot1x = 1434 ; first slot x coordinate
$slot1y = 607 ; first slot y coordinate
$offset = 48 ; offset for each slot

$slotLineTopX = 1414 ;First slot line x coordinate
$slotLineTopY = 632 ;First slot line y coordinate
$slotLineBotX = 1458 ;First slot line x coordinate
$slotLineBotY = 634 ;First slot line y coordinate

$CellMiddleTopX = 1429
$CellMiddleTopY = 604
$CellMiddleBotX = 1435
$CellMiddleBotY =609
;==================================================

;====DONT CHANGE=====;
$AnalSalvage = 0 ;determines whether not theres items to salvage
$AnalRareIdentify = 0 ;determines whether not theres a rare to identify, don't change
$AnalVendor = 0
$slotError = 0;Used if line doesn't exisit
;==================================================

HotKeySet("=", "Begin") ;script toggled on/off by pressing =
HotKeySet("{PAUSE}", "TogglePause") ;script toggle pause by pressing Pause/Break key
HotKeySet("x", "Stop") ;script stopped by pressing x

Call("ReadINI")

If $AddDPS = 0 then
MsgBox(16, "First Run", "Edit your settings.")
EndIf

If $AutoUpdate = 1 Then DoUpdate()
If $gameAutoStart = 1 Then
Call("GameAutostart")
Else
$size = WinGetClientSize("[CLASS:D3 Main Window Class]")
If $size = 0 Then
MsgBox(16, "Error", "Diablo III is not running, cannot grab resolution!" & @CRLF & "Exiting...")
Exit
EndIf
$x_ratio = $size[0] / 1920
$y_ratio = $size[1] / 1080
EndIf

MainGUI()
Func MainGUI()

$frmBot = GUICreate($title & $ver & " - Updating", 270, 145, Round(0 * $x_ratio), Round(0 * $y_ratio), -1, BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW), 0)
GUISetBkColor(0xC0C0C0)
$mFile = GUICtrlCreateMenu("File")
$mStart = GUICtrlCreateMenuItem("Start", $mFile)
$mOptions = GUICtrlCreateMenu("Options")
$mSettings = GUICtrlCreateMenuItem("Settings", $mOptions)
$mAutoUpdate = GUICtrlCreateMenuItem("Auto Update", $mOptions)
GUISetCheck($AutoUpdate,$mAutoUpdate)

$lblRun = GUICtrlCreateLabel("Run Number: 0 - Runs Per Hour: 0", 4, 0, 280, 24)
GUICtrlSetFont(-1, 10, 600, 0, "Segoe UI")
GUICtrlSetColor(-1, 0xFF0000)
$lblLocation = GUICtrlCreateLabel("Location: Main Menu", 12, 20, 260, 17)
$lblStatus = GUICtrlCreateLabel("Status: ", 12, 35, 260, 17)
$lblRuntime = GUICtrlCreateLabel("Total Runtime: 0 hours, 0 minutes", 12, 50, 260, 17)
$lblLast = GUICtrlCreateLabel("Open Cellar Avg: 0s - Closed Cellar Avg: 0s", 12, 65, 260, 17)
$lblCellars = GUICtrlCreateLabel("Cellars Open: 0 (0%) - Cellars Closed: 0 (0%)", 12, 80, 260, 17)
$lblStats = GUICtrlCreateLabel("Deaths: 0 (0%) - Missed Cellars: 0 (0%)", 12, 95, 260, 17)
$lblGold = GUICtrlCreateLabel("0 Per Hour - Accumulated Gold: 0", 12, 110, 260, 17)


GUISetState()

While 1

$aMsg = GUIGetMsg(1) ; Use advanced parameter to get array
Switch $aMsg[1] ; check which GUI sent the message
Case $frmBot
Switch $aMsg[0]
Case $mStart
Call("Begin")
Case $mSettings
GUICtrlSetState($mSettings, $GUI_DISABLE)
SettingsGUI()
Case $mAutoUpdate
If IsChecked($mAutoUpdate) Then
GUICtrlSetState($mAutoUpdate,$GUI_UNCHECKED)
Else
GUICtrlSetState($mAutoUpdate,$GUI_CHECKED)
EndIf
IniWrite($settingsINI, "Additional", "Auto Update", ConvertFlag($mAutoUpdate))
EndSwitch
Case $SettingsGUI
Switch $aMsg[0] ; Now check for the messages for $hGUI2
Case $cbStashSet
If IsChecked($cbStashSet) Then GUICtrlSetState($cbvendorSet,$GUI_UNCHECKED)
Case $cbStashLegendary
If IsChecked($cbStashLegendary) Then GUICtrlSetState($cbvendorLegendary,$GUI_UNCHECKED)
Case $cbStashRare
If IsChecked($cbStashRare) Then GUICtrlSetState($cbvendorRare,$GUI_UNCHECKED)
Case $cbStashMagic
If IsChecked($cbStashMagic) Then GUICtrlSetState($cbvendorMagic,$GUI_UNCHECKED)
Case $cbvendorSet
If IsChecked($cbvendorSet) Then GUICtrlSetState($cbStashSet,$GUI_UNCHECKED)
Case $cbvendorLegendary
If IsChecked($cbvendorLegendary) Then GUICtrlSetState($cbStashLegendary,$GUI_UNCHECKED)
Case $cbVendorRare
If IsChecked($cbvendorRare) Then GUICtrlSetState($cbStashRare,$GUI_UNCHECKED)
Case $cbVendorMagic
If IsChecked($cbvendorMagic) Then GUICtrlSetState($cbStashMagic,$GUI_UNCHECKED)
Case $cbgameAutoStart
If IsChecked($cbgameAutoStart) And FileExists(GUICtrlRead($txtgameDiabloIIILoc) & "Diablo III.exe") = 0 Then
GUICtrlSetState($cbgameAutoStart,$GUI_UNCHECKED)
EndIF
Case $txtSkill1
SkillAlphaNum($txtSkill1,$Skill1,0)
Case $txtSkill2
SkillAlphaNum($txtSkill2,$Skill2,0)
Case $txtSkill3
SkillAlphaNum($txtSkill3,$Skill3,0)
Case $txtSkill4
SkillAlphaNum($txtSkill4,$Skill4,0)
Case $btngameDiabloIIILoc
$GUIfileSelect = FileSelectFolder ("Diablo III Executable Location","")
If Not @Error And FileExists($GUIfileSelect & "\Diablo III.exe") = 0 Then
$GUIwrongLocation = MsgBox ( "6", "Wrong Location", "Select the folder with the Diablo III.exe!")
If $GUIwrongLocation = 2 Or 11 Then
GUISetCheck(0,$cbgameAutoStart)
GUIUpdate($txtgameDiabloIIILoc,$GUIfileSelect)
EndIf
ElseIf FileExists($GUIfileSelect & "\Diablo III.exe") = 1 Then
GUIUpdate($txtgameDiabloIIILoc,$GUIfileSelect & "\")
GUISetCheck(1,$cbgameAutoStart)
Endif
Case $btnSave
Call("SaveINI")
GUIDelete($SettingsGUI)
GUICtrlSetState($mSettings, $GUI_ENABLE)
EndSwitch
EndSwitch
Call("RestartRun")
WEnd

EndFunc ;==>MainGUI

Func SettingsGUI()

$SettingsGUI = GUICreate($title & $ver, 443, 195, Round(0 * $x_ratio), Round(0 * $y_ratio), -1,$WS_EX_TOPMOST, 0)
GUISetIcon(@ScriptDir & "\Setting-icon.ico")
$Settings = GUICtrlCreateTab(0, 8, 441, 185)
GUICtrlSetResizing($Settings, $GUI_DOCKWIDTH+$GUI_DOCKHEIGHT)
$tsSettings = GUICtrlCreateTabItem("Auto Start")
$grpgameAutoStart = GUICtrlCreateGroup("", 4, 33, 273, 121)
$lblgameDiabloIIILoc = GUICtrlCreateLabel("Diablo III Location:", 12, 83, 93, 17)
$txtgameDiabloIIILoc = GUICtrlCreateInput($gameDiabloIIILoc, 116, 81, 105, 21)
$lblgamePassword = GUICtrlCreateLabel("Password:", 12, 116, 53, 17)
$txtgamePassword = GUICtrlCreateInput($gamePassword, 116, 113, 105, 21)
$cbgameAutoStart = GUICtrlCreateCheckbox("Auto Start", 12, 49, 73, 17)
$btngameDiabloIIILoc = GUICtrlCreateButton("Browse", 224, 79, 49, 23, 0)
GUICtrlSetState($txtgameDiabloIIILoc, $GUI_DISABLE)

GUICtrlCreateGroup("", -99, -99, 1, 1)
$tsLooting = GUICtrlCreateTabItem("Looting")
$grpLoot = GUICtrlCreateGroup("", 4, 33, 273, 121)
$etlootCustom = GUICtrlCreateEdit("",148, 73, 121, 65)
$cblootSet = GUICtrlCreateCheckbox("Set Items", 12, 49, 81, 17)
$cblootLegendary = GUICtrlCreateCheckbox("Legendary Items", 12, 73, 113, 17)
$cblootRare = GUICtrlCreateCheckbox("Rare Items", 12, 97, 81, 17)
$cblootMagic = GUICtrlCreateCheckbox("Magic Items", 12, 121, 81, 17)
$cblootCustom = GUICtrlCreateCheckbox("Custom Loot", 149, 49, 81, 17)


GUICtrlCreateGroup("", -99, -99, 1, 1)
$tsAnalLoot = GUICtrlCreateTabItem("Stash")
$grpAnalLoot = GUICtrlCreateGroup("", 4, 33, 273, 121)
$lblRareStashiLvl = GUICtrlCreateLabel("Rare Stash:", 12, 52, 60, 17)
$lblRareSalvageiLvl = GUICtrlCreateLabel("Rare Salvage:", 12, 76, 72, 17)
$lblRareVendoriLvl = GUICtrlCreateLabel("Rare Vendor:", 12, 100, 67, 17)
$lblMagicStashiLvl = GUICtrlCreateLabel("Magic Stash:", 136, 52, 66, 17)
$lblMagicSalvageiLvl = GUICtrlCreateLabel("Magic Salvage:", 136, 76, 78, 17)
$lblMagicVendoriLvl = GUICtrlCreateLabel("Magic Vendor:", 136, 100, 73, 17)
$txtRareStashiLvl = GUICtrlCreateInput($RareStashiLvl, 88, 49, 33, 21)
$txtRareVendoriLvl = GUICtrlCreateInput($RareVendoriLvl, 88, 97, 33, 21)
$txtRareSalvageiLvl = GUICtrlCreateInput($RareSalvageiLvl, 88, 73, 33, 21)
$txtMagicStashiLvl = GUICtrlCreateInput($MagicStashiLvl, 216, 49, 33, 21)
$txtMagicSalvageiLvl = GUICtrlCreateInput($MagicSalvageiLvl, 216, 73, 33, 21)
$txtMagicVendoriLvl = GUICtrlCreateInput($MagicVendoriLvl, 216, 97, 33, 21)

GUICtrlCreateGroup("", -99, -99, 1, 1)
$tsSkills = GUICtrlCreateTabItem("Skills")
$grpSkills = GUICtrlCreateGroup("", 4, 33, 273, 121)
$txtSkill1 = GUICtrlCreateInput($Skill1, 184, 49, 41, 21)
$txtSkill2 = GUICtrlCreateInput($Skill2, 184, 73, 41, 21)
$txtSkill3 = GUICtrlCreateInput($Skill3, 184, 97, 41, 21)
$txtSkill4 = GUICtrlCreateInput($Skill4, 184, 121, 41, 21)
$lblskill1 = GUICtrlCreateLabel("Diamond Skin (Crystal Shell):", 12, 52, 139, 17)
$lblSkill2 = GUICtrlCreateLabel("Mirror Image (Duplicates):", 12, 76, 124, 17)
$lblSkill3 = GUICtrlCreateLabel("Teleport (Wormhole):", 12, 100, 103, 17)
$lblSkill4 = GUICtrlCreateLabel("Magic Weapon (Force Weapon):", 12, 124, 160, 17)

GUICtrlCreateGroup("", -99, -99, 1, 1)
$tsTiming = GUICtrlCreateTabItem("Timing")
$grpTiming = GUICtrlCreateGroup("", 4, 33, 273, 121)
$lbltimingGameLoad = GUICtrlCreateLabel("Game Load:", 12, 52, 62, 17)
$lbltimingTP = GUICtrlCreateLabel("Town Portal:", 12, 76, 64, 17)
$lbltimingWormHole = GUICtrlCreateLabel("Wormhole:", 12, 100, 55, 17)
$lbltimingCellarClick = GUICtrlCreateLabel("Cellar Click:", 12, 124, 59, 17)
$lbltimingAbort = GUICtrlCreateLabel("Abort:", 139, 52, 32, 17)
$lbltimingMiddleDoor = GUICtrlCreateLabel("Middle Door:", 139, 76, 64, 17)
$lbltimingLootRun = GUICtrlCreateLabel("Loot Run:", 139, 100, 51, 17)
$lbltimingLoot = GUICtrlCreateLabel("Loot:", 139, 124, 28, 17)
$txttimingGameLoad = GUICtrlCreateInput("2000", 80, 49, 41, 21)
$txttimingTP = GUICtrlCreateInput("5000", 80, 73, 41, 21)
$txttimingWormHole = GUICtrlCreateInput("1375", 80, 97, 41, 21)
$txttimingCellarClick = GUICtrlCreateInput("750", 80, 121, 41, 21)
$txttimingAbort = GUICtrlCreateInput("255", 206, 49, 41, 21)
$txttimingMiddleDoor = GUICtrlCreateInput("2200", 206, 73, 41, 21)
$txttimingLootRun = GUICtrlCreateInput("300", 206, 97, 41, 21)
$txttimingLoot = GUICtrlCreateInput("800", 206, 121, 41, 21)


GUICtrlCreateGroup("", -99, -99, 1, 1)
$tsCellarDetect = GUICtrlCreateTabItem("Cellar Detect")
$grpCellarDetect = GUICtrlCreateGroup("", 4, 33, 273, 121)
$lblCellarDetectX = GUICtrlCreateLabel("X Coordinates:", 12, 52, 73, 17)
$lblCellarDetectY = GUICtrlCreateLabel("Y Coordinates:", 12, 76, 73, 17)
$lblCellarDetectTime = GUICtrlCreateLabel("Check Time:", 12, 100, 64, 17)
$cbCellarDetectScreenShots = GUICtrlCreateCheckbox("Screen Shots", 12, 124, 97, 17)
$txtCellarDetectXCoords = GUICtrlCreateInput("255, 175, 315, 265, 280, 600", 96, 49, 169, 21)
GUICtrlSetState($txtCellarDetectXCoords, $GUI_DISABLE)
$txtCellarDetectYCoords = GUICtrlCreateInput("290, 305, 314, 340, 302, 435", 96, 73, 169, 21)
GUICtrlSetState($txtCellarDetectYCoords, $GUI_DISABLE)
$txtCellarDetectTime = GUICtrlCreateInput("155", 96, 97, 41, 21)
GUICtrlCreateGroup("", -99, -99, 1, 1)


GUICtrlCreateTabItem("")
$btnSave = GUICtrlCreateButton("Save", 352, 160, 75, 25, 0)
$grpAdd = GUICtrlCreateGroup("Additional", 280, 33, 153, 121)
$cbAddGoldOnly = GUICtrlCreateCheckbox("Gold Only", 288, 97, 97, 17)
$txtAddDPS = GUICtrlCreateInput($AddDPS, 376, 49, 49, 21)
$lblAddDPS = GUICtrlCreateLabel("DPS:", 288, 52, 29, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState()

getCustomKeys()
UpdateGUI()
EndFunc ;===SettingsGUI

Func ReadINI()
getCustomkeys()
$gameAutoStart = IniRead($settingsINI, "Auto Start", "Auto Start", $gameAutoStart)
$gameDiabloIIILoc = IniRead($settingsINI, "Auto Start", "Game Location", $gameDiabloIIILoc)
$gamePassword = IniRead($settingsINI, "Auto Start", "Password", $gamePassword)
$Skill1 = IniRead($settingsINI, "Skills", "Skill1", $Skill1)
$Skill2 = IniRead($settingsINI, "Skills", "Skill2", $Skill2)
$Skill3 = IniRead($settingsINI, "Skills", "Skill3", $Skill3)
$Skill4 = IniRead($settingsINI, "Skills", "Skill4", $Skill4)
$AutoUpdate = IniRead($settingsINI, "Additional", "Auto Update", $AutoUpdate)
$AddDPS = IniRead($settingsINI, "Additional", "DPS", $AddDPS )
$LootSet = IniRead($settingsINI, "Looting", "Set", $LootSet)
$LootLegendary = IniRead($settingsINI, "Looting", "Legendary", $LootLegendary)
$LootRare = IniRead($settingsINI, "Looting", "Rare", $LootRare)
$LootMagic = IniRead($settingsINI, "Looting", "Magic", $LootMagic)
$LootCustom = IniRead($settingsINI, "Looting", "Custom", $LootCustom)
$LootGoldOnly = IniRead($settingsINI, "Looting", "Gold Only", $LootGoldOnly)
$StashSet = IniRead($settingsINI, "Stashing", "Set", $StashSet)
$StashLegendary = IniRead($settingsINI, "Stashing", "Legendary", $StashLegendary)
$StashRare = IniRead($settingsINI, "Stashing", "Rare", $StashRare)
$StashMagic = IniRead($settingsINI, "Stashing", "Magic", $StashMagic)
$StashGems = IniRead($settingsINI, "Stashing", "Gems", $StashGems)
$StashTomes = IniRead($settingsINI, "Stashing", "Tomes", $StashTomes)
$VendorSet = IniRead($settingsINI, "Vendoring", "Set", $VendorSet)
$VendorLegendary = IniRead($settingsINI, "Vendoring", "Legendary", $VendorLegendary)
$VendorRare = IniRead($settingsINI, "Vendoring", "Rare", $VendorRare)
$VendorMagic = IniRead($settingsINI, "Vendoring", "Magic", $VendorMagic)
$VendorAll = IniRead($settingsINI, "Vendoring", "All Items", $VendorAll)
$vendorRows = IniRead($settingsINI, "Vendoring", "All-Rows", $vendorRows)
$vendorColumns = IniRead($settingsINI, "Vendoring", "All-Columns", $vendorColumns)
$timingGameLoad = IniRead($SettingsINI, "Timing", "Game Load", $timingGameLoad)
$timingWormHole = IniRead($SettingsINI, "Timing", "Wormhole", $timingWormHole)
$timingTP = Iniread($SettingsINI, "Timing", "Town Portal", $timingTP)
$timingCellarClick = Iniread($SettingsINI, "Timing", "Cellar Click", $timingCellarClick)
$timingMiddleDoor = Iniread($SettingsINI, "Timing", "Middle Door", $timingMiddleDoor)
$timingLootRun = Iniread($SettingsINI, "Timing", "Loot Run", $timingLootRun)
$timingLoot = Iniread($SettingsINI, "Timing", "Loot", $timingLoot)
$timingAbort = Iniread($SettingsINI, "Timing", "Abort", $timingAbort)
$ScreenShot = InIread($SettingsINI, "Cellar Detect", "Screen Shot", $ScreenShot)
$RareStashilvl=IniRead($settingsINI, "Anal Loot", "Stash Rare", $RareStashiLvl)
$RareSalvageilvl=IniRead($settingsINI, "Anal Loot", "Salvage Rare", $RareSalvageilvl)
$RareVendoriLvl=IniRead($settingsINI, "Anal Loot", "Vendor Rare", $RareVendoriLvl)
$MagicStashilvl=IniRead($settingsINI, "Anal Loot", "Stash Magic", $MagicStashilvl)
$MagicSalvageilvl=IniRead($settingsINI, "Anal Loot", "Salvage Magic", $MagicSalvageilvl)
$MagicVendorilvl=IniRead($settingsINI, "Anal Loot", "Vendor Magic", $MagicVendorilvl)
EndFunc ;==>ReadINI

Func UpdateGUI()
;GUI Update

;Loot
GUISetCheck($gameAutoStart,$cbgameAutoStart)
GUISetCheck($LootSet,$cbLootSet)
GUISetCheck($LootLegendary,$cbLootLegendary)
GUISetCheck($LootRare,$cbLootRare)
GUISetCheck($LootMagic,$cbLootMagic)
GUISetCheck($LootCustom,$cbLootCustom)
GUISetCheck($LootGoldOnly,$cbAddGoldOnly)
;=============================================

;Stash
GUISetCheck($StashSet,$cbStashSet)
GUISetCheck($StashLegendary,$cbStashLegendary)
GUISetCheck($StashRare,$cbStashRare)
GUISetCheck($StashMagic,$cbStashMagic)
GUISetCheck($StashGems,$cbStashGems)
GUISetCheck($StashTomes,$cbStashTomes)
;=============================================

;Vendor
If Not IsChecked($cbStashSet) Then GUISetCheck($VendorSet,$cbvendorSet)
If Not IsChecked($cbStashLegendary) Then GUISetCheck($VendorLegendary,$cbvendorLegendary)
If Not IsChecked($cbStashRare) Then GUISetCheck($VendorRare,$cbVendorRare)
If Not IsChecked($cbStashMagic) Then GUISetCheck($VendorMagic,$cbVendorMagic)
GUISetCheck($VendorAll,$cbVendorAll)
;=============================================

;Cellar Detect
GUISetCheck($ScreenShot,$cbCellarDetectScreenShots)
;=============================================


;Misc
;Skills
SkillAlphaNum($txtSkill1,$Skill1,1)
SkillAlphaNum($txtSkill2,$Skill2,1)
SkillAlphaNum($txtSkill3,$Skill3,1)
SkillAlphaNum($txtSkill4,$Skill4,1)

;AutoStart
GUIUpdate($txtgamePassword,$gamePassword)
GUIUpdate($txtgameDiabloIIILoc,$gameDiabloIIILoc)

;Vendoring
GUIUpdate($cmbVendorColumns,$vendorColumns)
GUIUpdate($cmbvendorRows,$vendorRows)

;Timing
GUIUpdate($txttimingGameLoad, $timingGameLoad)
GUIUpdate($txttimingWormHole, $timingWormhole)
GUIUpdate($txttimingTP, $timingTP)
GUIUpdate($txttimingCellarClick, $timingCellarClick)
GUIUpdate($txttimingMiddleDoor, $timingMiddleDoor)
GUIUpdate($txttimingLootRun, $timingLootRun)
GUIUpdate($txttimingLoot, $timingLoot)
GUIUpdate($txttimingAbort, $timingAbort)

;anal loot
GUIUpdate($txtRareStashiLvl,$RareStashiLvl)
GUIUpdate($txtRareSalvageiLvl,$RareSalvageiLvl)
GUIUpdate($txtRareVendoriLvl,$RareVendoriLvl)
GUIUpdate($txtMagicStashiLvl,$MagicStashiLvl)
GUIUpdate($txtMagicSalvageiLvl,$MagicSalvageiLvl)
GUIUpdate($txtMagicVendoriLvl,$MagicVendoriLvl)
;=============================================

;Additional
GUIUpdate($txtAddDPS, $AddDPS)
;=============================================
EndFunc

Func SaveINI()
FileDelete($settingsINI)
IniWrite($settingsINI, "Auto Start", "Auto Start", ConvertFlag($cbgameAutoStart))
IniWrite($settingsINI, "Auto Start", "Game Location", GUICtrlRead($txtgameDiabloIIILoc))
IniWrite($settingsINI, "Auto Start", "Password", GUICtrlRead($txtgamePassword))
IniWrite($settingsINI, "Auto Start", "Task Manager Executable Name", $gameExecutable)
IniWrite($settingsINI, "Skills", "Skill1", GUICtrlRead($txtSkill1))
IniWrite($settingsINI, "Skills", "Skill2", GUICtrlRead($txtSkill2))
IniWrite($settingsINI, "Skills", "Skill3", GUICtrlRead($txtSkill3))
IniWrite($settingsINI, "Skills", "Skill4", GUICtrlRead($txtSkill4))
IniWrite($settingsINI, "Additional", "DPS", GUICtrlRead($txtAddDPS))
IniWrite($settingsINI, "Additional", "Auto Update", ConvertFlag($mAutoUpdate))
IniWrite($settingsINI, "Looting", "Set", ConvertFlag($cbLootSet))
IniWrite($settingsINI, "Looting", "Legendary", ConvertFlag($cbLootLegendary))
IniWrite($settingsINI, "Looting", "Rare", ConvertFlag($cbLootRare))
IniWrite($settingsINI, "Looting", "Magic", ConvertFlag($cbLootMagic))
IniWrite($settingsINI, "Looting", "Custom", ConvertFlag($cbLootCustom))
IniWrite($settingsINI, "Looting", "Gold Only", ConvertFlag($cbAddGoldOnly))
IniWrite($settingsINI, "Stashing", "Set", ConvertFlag($cbStashSet))
IniWrite($settingsINI, "Stashing", "Legendary", ConvertFlag($cbStashLegendary))
IniWrite($settingsINI, "Stashing", "Rare", ConvertFlag($cbStashRare))
IniWrite($settingsINI, "Stashing", "Magic", ConvertFlag($cbStashMagic))
IniWrite($settingsINI, "Stashing", "Gems", ConvertFlag($cbStashGems))
IniWrite($settingsINI, "Stashing", "Tomes", ConvertFlag($cbStashTomes))
IniWrite($settingsINI, "Vendoring", "Set", ConvertFlag($cbVendorSet))
IniWrite($settingsINI, "Vendoring", "Legendary", ConvertFlag($cbVendorLegendary))
IniWrite($settingsINI, "Vendoring", "Rare", ConvertFlag($cbVendorRare))
IniWrite($settingsINI, "Vendoring", "Magic", ConvertFlag($cbVendorMagic))
IniWrite($settingsINI, "Vendoring", "All Items", ConvertFlag($cbVendorAll))
IniWrite($settingsINI, "Vendoring", "All-Rows", GUICtrlRead($cmbvendorRows))
IniWrite($settingsINI, "Vendoring", "All-Columns", GUICtrlRead($cmbVendorColumns))
IniWrite($settingsINI, "Timing", "Game Load", GUICtrlRead($txttimingGameLoad))
IniWrite($settingsINI, "Timing", "Wormhole", GUICtrlRead($txttimingWormHole))
IniWrite($settingsINI, "Timing", "Town Portal", GUICtrlRead($txttimingTP))
IniWrite($settingsINI, "Timing", "Cellar Click", GUICtrlRead($txttimingCellarClick))
IniWrite($settingsINI, "Timing", "Middle Door", GUICtrlRead($txttimingMiddleDoor))
IniWrite($settingsINI, "Timing", "Loot Run", GUICtrlRead($txttimingLootRun))
IniWrite($settingsINI, "Timing", "Loot", GUICtrlRead($txttimingLoot))
IniWrite($settingsINI, "Timing", "Abort", GUICtrlRead($txttimingAbort))
IniWrite($SettingsINI, "Cellar Detect", "Screen Shot", ConvertFlag($cbCellarDetectScreenShots))
IniWrite($settingsINI, "Anal Loot", "Stash Rare", GUICtrlRead($txtRareStashilvl))
IniWrite($settingsINI, "Anal Loot", "Salvage Rare", GUICtrlRead($txtRareSalvageilvl))
IniWrite($settingsINI, "Anal Loot", "Vendor Rare", GUICtrlRead($txtRareVendoriLvl))
IniWrite($settingsINI, "Anal Loot", "Stash Magic", GUICtrlRead($txtMagicStashilvl))
IniWrite($settingsINI, "Anal Loot", "Salvage Magic", GUICtrlRead($txtMagicSalvageilvl))
IniWrite($settingsINI, "Anal Loot", "Vendor Magic", GUICtrlRead($txtMagicVendorilvl))
saveCustomKeys()
Call("ReadINI")
$StashLoot = $StashMagic + $StashRare + $StashLegendary + $Stashset + $StashGems + $StashTomes
$VendorLoot = $VendorMagic + $VendorRare + $VendorLegendary + $VendorSet + $VendorAll
EndFunc ;==>SaveINI

Func GUISetCheck($Flag,$CheckBox)
If $Flag = 0 Then
GUICtrlSetState($CheckBox, $GUI_UNCHECKED)
ElseIf $Flag = 1 Then
GUICtrlSetState($CheckBox, $GUI_CHECKED)
EndIf
EndFunc

Func ConvertFlag($CheckBox)
If GUICtrlRead($Checkbox) = 4 Or GUICtrlRead($Checkbox) = 68 Then
Return 0
Else
Return 1
EndIf
EndFunc

Func GUIUpdate($CheckBox,$Value)
GUICtrlSetData($CheckBox, $Value)
EndFunc

Func saveCustomKeys()
$string = GUICtrlRead($etlootCustom)
If Not $string = "" Then
$temp = StringReplace($string, @CRLF, " ")
$temp = StringStripWS($temp, 7)
$arr = StringSplit($temp, " ")

For $a = 1 To $arr[0]
$tempLoc = StringSplit($arr[$a],"|")
If FileExists($pngLoc & $tempLoc[1] & ".png") Then
IniWrite($settingsINI, "Custom Items", "Key" & $a , $arr[$a])
EndIf
Next
Return 1
Else
If $totalItems <1> 0 Then
ReDim $pick[$totalItems]
EndIf
For $a = 1 To $totalItems
$pick[$a-1] = $var[$a][1]
$string &= $pick[$a-1] & @CRLF
Next
Else
$totalItems = 0
EndIf
If $totalItems <1>DoUpdate

Func RestartRun()
If ($Go) Then
$i = 0
WinSetTitle($title, "", $title & $ver & " - Running")

MouseMove(Round(Random(0, 400) * $x_ratio), Round(Random(700, 1080) * $y_ratio), 1) ;Moves mouse out of the way
;Checks if the player is Dead/Logout/Window, then if in Main Menu, etc.
If CheckDead() Then
Return
ElseIf CheckFor("ExitGame", "", Round(860 * $x_ratio), Round(400 * $y_ratio), Round(1040 * $x_ratio), Round(450 * $y_ratio), 0.5, 140) Then
GUICtrlSetData($lblStatus, "Status: Exit window up")
MouseClick("left", Round(1064 * $x_ratio), Round(632 * $y_ratio))
Sleep(100)
Send("{SPACE}")
Return
ElseIf CheckFor("MainMenu", "", Round(40 * $x_ratio), Round(300 * $y_ratio), Round(400 * $x_ratio), Round(450 * $y_ratio)) Then
GUICtrlSetData($lblRun, "Run Number: " & $run & " - Runs Per Hour: " & Round($RunsPerHour))
GUICtrlSetData($lblLocation, "Location: Main Menu")
GUICtrlSetData($lblStatus, "Status: Starting Game")
WinActivate("Diablo III")
RandClick("left", Round(230 * $x_ratio), Round(416 * $y_ratio), 120, 20, 1, 1) ;Random Click on the resume button
Sleep($timingGameLoad)
ElseIf CheckFor("OldRuins", "Area") Or CheckFor("NewTristram", "Area") Or CheckFor("DankCellar", "Area") Then
Call("TownPortal")
Call("LeaveGame")
Return
ElseIf CheckFor("Disconnect", "", Round(700 * $x_ratio), Round(340 * $y_ratio), Round(1200 * $x_ratio), Round(600 * $y_ratio), 1, 140) Then
GUICtrlSetData($lblStatus, "Status: Network Disconnect window up")
MouseClick("left", Round(960 * $x_ratio), Round(632 * $y_ratio),1)
Sleep(100)
Send("{SPACE}")
Return
ElseIf CheckFor("LimitError", "", Round(700 * $x_ratio), Round(340 * $y_ratio), Round(1200 * $x_ratio), Round(600 * $y_ratio), 1, 140) Then
MouseClick("left", Round(960 * $y_ratio), Round(635 * $x_ratio),1)
$rand = Random(40000, 80000)
GUICtrlSetData($lblStatus, "Status: Input Limit - Waiting " & Round($rand / 1000) & " seconds.")
Sleep($rand)
Send("{SPACE}")
Return
Else
GUICtrlSetData($lblStatus, "ERROR: Cannot find Resume button")
Return
EndIf

;Make sure we are in the right area before beginning run
If CheckFor("OldRuins", "Area") Then
$rt = TimerInit()
$run += 1
;Call("StartScreenShot")
GUICtrlSetData($lblLocation, "Location: Old Ruins")
If $StartingGold = 0 Then Call("GoldPerHour")
;Start Run
MouseClick("middle", Round(0 * $x_ratio),Round(250 * $y_ratio),1) ;starts the main run
Send("{" & $Skill3 & " down}")
Sleep($timingWormHole)
Send("{" & $Skill3 & " up}")
send($Skill1)
sleep(250)
If FindCellar() = 1 Then
If CheckDead() Then
Return
EndIf
GUICtrlSetData($lblStatus, "Status: Cellar - Found")
MouseClick("left",Round($cellarCoordx[$CellCoord] * $x_ratio),Round($cellarCoordy[$CellCoord] * $y_ratio),1)
sleep($timingCellarClick)
Else ;ABORT RUN
;FileMove(@ScriptDir & "\shots\Start\OpenStartShot"& $run & ".bmp", @ScriptDir & "\shots\Start\ClosedStartShot"& $run & ".bmp")
GUICtrlSetData($lblStatus, "Status: Cellar - Not Found" & @CRLF)
Send($Skill2)
Sleep($timingAbort)
send("{SHIFTDOWN}")
Sleep($timingAbort)
Mouseclick("left")
Sleep($timingAbort)
send("{SHIFTUP}")
Sleep($timingAbort)
Call("TownPortal")
If Not CheckDead() Then
Call("ClosedCellar")
Call("LeaveGame")
EndIf
Return
EndIf
Else
Call("TownPortal")
If Not CheckDead() Then
Call("ClosedCellar")
Call("LeaveGame")
EndIf
Return
EndIf

;Checks that the player is in the Dank Cellar
If CheckFor("DankCellar", "Area") Then
GUICtrlSetData($lblLocation, "Location: Dank Cellar")
RandClick("middle", Round(20 * $x_ratio),Round(708 * $y_ratio), 1, 1) ;moves to doorway leading to rare inside cellar
Sleep($timingMiddleDoor)
RandMove(Round(440 * $x_ratio),Round(80 * $y_ratio), 1, 1) ;hovers over the rare Sarkoth
sleep(250)
Send($Skill4)
sleep(200)
Send("{SHIFTDOWN}")
GUICtrlSetData($lblStatus, "Status: Attacking Sarkoth")
MouseDown("right") ;ATTACK
sleep($attackTime)
MouseUp("right")
Sleep(150)
Send("{SHIFTUP}")
RandClick("middle", Round(528* $x_ratio),Round(268* $y_ratio), 1, 1) ;fuck the loot
sleep($timingLootRun)
MouseClick("right",Round(755*$x_ratio),Round(936* $y_ratio),1) ;cancel archon
If $LootGoldOnly = 0 then
GUICtrlSetData($lblStatus, "Status: Looting")
Call("Loot")
EndIf
sleep(100)
Call("TownPortal")
Else
$countMissedCellar += 1
Call("CellarScreenShot")
Send($Skill2)
Sleep($timingAbort)
send("{SHIFTDOWN}")
Sleep($timingAbort)
Mouseclick("left")
Sleep($timingAbort)
send("{SHIFTUP}")
Sleep($timingAbort)
Call("TownPortal")
If Not CheckDead() Then
Call("ClosedCellar")
Call("LeaveGame")
EndIf
Return
EndIf
;After successful run
If Not CheckDead() Then
Sleep(300)
If $mLootIn = 1 And CheckFor("NewTristram", "Area") Then ;If its time to manage loot and we are in town
If $LootGoldOnly = 0 Then
If $StashLoot >= 1 Then
Call("StashLoot")
EndIf
EndIf
ElseIf Not CheckFor("NewTristram", "Area") Then
GUICtrlSetData($lblStatus, "Status: Skipping vendor, not in New Tristram")
Sleep(3000)
ElseIf $mLootIn = 1 Then
$mLootIn = 0
EndIf
If Not CheckDead() Then
Call("OpenCellar")
Call("LeaveGame")
EndIf
Return
Else
Return
EndIf
Else
Return 0
EndIf
EndFunc ;==>RestartRun

Func CheckDead()
$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
GUICtrlSetData($lblStatus, "Status: Logging out")
Sleep(11000)
Sleep($timingGameLoad)
Return 1
EndIf

$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
GUICtrlSetData($lblStatus, "Status: Open Window")
Sleep(200)
Send("{SPACE}") ;close any open windows
Return 1
EndIf

$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
GUICtrlSetData($lblStatus, "Status: Dead")
$deathCount += 1
Call("LeaveGame")
Sleep(11000)
Sleep($timingGameLoad)
Return 1
Else
Return 0
EndIf
EndFunc ;==>CheckDead

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 ;==>CheckRepair

Func DoRepair()
sleep(8500)
$repairCount += 1
If CheckDead() Then
Return
EndIf
If CheckFor("NewTristram", "Area") Then
MouseMove(Round(1530 * $x_ratio), Round(0 * $y_ratio), 1) ;begin movement towards merchant
Send("{" & $Skill3 & " down}")
Sleep(1300)
Send("{" & $Skill3 & " up}")
MouseClick("left", Round(796 * $x_ratio), Round(474 * $y_ratio), 6) ;NPC Merchant to the right of cain's home
Sleep(1000)
RandClick("left", Round(521 * $x_ratio), Round(506 * $y_ratio), 1, 1) ;button to open up repair menu
Sleep(400)
RandClick("left", Round(260 * $x_ratio), Round(595 * $y_ratio), 1, 1) ;button to pay for repairs
Sleep(200)
Send("{Escape}")
EndIf
EndFunc ;==>DoRepair

Func ClosedCellar()
$closedcellarCount += 1
$srt = TimerDiff($rt)
$ClosedCellarSec = $ClosedCellarSec + Round($srt / 1000, 2)
$ClosedCellarAvg = $ClosedCellarSec / $closedcellarCount
EndFunc

Func OpenCellar()
$cellarCount += 1
$srt = TimerDiff($rt)
$OpenCellarSec = $OpenCellarSec + Round($srt / 1000, 2)
$OpenCellarAvg = $OpenCellarSec / $cellarCount
EndFunc

Func CalcTime()
$trt = TimerDiff($t)
$total = Round((($trt / 1000) / 60) / 60, 4)
;Total runtime 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
$RunsPerHour = $Run / ($trt / 1000) * 3600
$repairCountPercent = $repairCount / $run
$deathsCountPercent = $deathCount / $run
$cellarCountPercent = $cellarCount / $run
$closedCellarCountPercent = ($run - $cellarCount) / $run
$MissedCellarCountPercent = $countMissedCellar / $run
GUICtrlSetData($lblRuntime, "Total Runtime: " & $hours & " hours, " & Ceiling($minutes) & " minutes")
GUICtrlSetData($lblLast, "Open Cellar Avg: " & Round($OpenCellarAvg,1) & "s - Closed Cellar Avg: " & Round($ClosedCellarAvg,1) & "s")
GUICtrlSetData($lblCellars, "Cellars Open: " & $cellarCount & " (" & Round($cellarCountPercent * 100) & "%)" & " - Cellars Closed: " & $run - $cellarCount & " (" & Round($closedCellarCountPercent * 100,.00) & "%)")
GUICtrlSetData($lblStats, "Deaths: " & $deathCount & " (" & Round($deathsCountPercent * 100) & "%" & ")" & " - Missed Cellars: " & $countMissedCellar & " (" & Round($MissedCellarCountPercent * 100) & "%)")
EndFunc ;==>CalcTime

Func CheckFor($img, $type = "", $startX = 0, $startY = 0, $endX = @DesktopWidth, $endY = @DesktopHeight, $seconds = 6, $tolerance = 140)
If $type = "Area" Then
$startX = 1500 * $x_ratio
$startY = 0 * $y_ratio
$endX = 1920 * $x_ratio
$endY = 90 * $y_ratio
$seconds = 2.5
EndIf
$c = 0
$string = $pngLoc & $img & ".png"
Do
$c += 1
Sleep(100)
If $c > ($seconds * 10) Then ;Make sure we never get stuck here for infinity.
If $type = "Area" Then
GUICtrlSetData($lblStatus, "Status: Area not found - " & $img)
EndIf
Return 0
EndIf
Until _ImageSearchArea($string, 1, $startX, $startY, $endX, $endY, $gX, $gY, $tolerance)
Return 1
EndFunc ;==>CheckFor

Func Loot()
Sleep($timingLoot)
MouseMove(Round(Random(0, 400) * $x_ratio), Round(Random(700, 1080) * $y_ratio), 3) ;Moves mouse out of the way
If $LootSet == 1 Then
$SetCount += LootGear(0x02CE01)
EndIf
If $LootLegendary == 1 Then
$LegendaryCount += LootGear(0xBF642F, 0)
EndIf
If $LootRare == 1 Then
$RareCount += LootGear(0xBBBB00)
EndIf
If $LootCustom == 1 Then
Call("LootCustom")
EndIf
If $LootMagic == 1 Then
$MagicCount += LootGear(0x6969FF)
EndIf
EndFunc ;==>Loot

Func LootCustom()
$count = 0
$gX = 0
$gY = 0
For $i = 0 To ($totalItems - 1)
$array = StringSplit($pick[$i], "|")
$file = $array[1]
$accuracy = $array[2]
$urlString = $pngLoc & $file & ".png"
While _ImageSearchArea($urlString, 1, 0, 0, @DesktopWidth, @DesktopHeight, $gX, $gY, $accuracy)
$count += 1
MouseClick("left", $gX, $gY, 1, 3)
Sleep(50)
MouseMove(Round(Random(0, 400) * $x_ratio), Round(Random(700, 1080) * $y_ratio), 3) ;Moves mouse out of the way
Sleep($timingLoot)
If $count >= 15 Then
ExitLoop
EndIf
WEnd
Next
EndFunc ;==>LootCustom

Func LootGear($color, $tolerance = 2)
$count = 0
$Loot = PixelSearch(Round(420 * $x_ratio), 0, Round(1690 * $x_ratio), Round(900 * $y_ratio), $color, $tolerance)
If Not @error Then
While Not @error
$count += 1
MouseClick('left', $Loot[0], $Loot[1], 1, 3)
Sleep(50)
MouseMove(Round(Random(0, 400) * $x_ratio), Round(Random(700, 1080) * $y_ratio), 1) ;Moves mouse out of the way
sleep($timingLoot)
If $count >= 15 Then
ExitLoop
EndIf
$Loot = PixelSearch(Round(420 * $x_ratio), 0, Round(1690 * $x_ratio), Round(900 * $y_ratio), $color, $tolerance)
WEnd
EndIf
Return $count
EndFunc ;==>LootGear

Func CheckFullInventory()
If Not _ImageSearchArea($pngLoc & "FullInventory.png", 1, Round(1704 * $x_ratio),Round(778 * $y_ratio), Round(1895 * $y_ratio),Round(870 * $x_ratio), $gX, $gY, 140) Then
$mLootIn = 1
If $StashLoot = 0 And $VendorLoot = 0 Then
$LootGoldOnly = 1
EndIf
Return 0
Else
$mLootIn = 0
Return 1
EndIf
Return
EndFunc

Func StashLoot()
MouseClick("left", 1064 * $x_ratio, 256 * $y_ratio)
sleep(1600)
GUICtrlSetData($lblStatus, "Status: Putting Items in Stash")
If $StashSelectedTab > 0 Then MouseClick("left", Round($StashTabs[$StashSelectedTab][0] * $x_ratio) ,Round($StashTabs[$StashSelectedTab][1] * $x_ratio), 1, 4)

If $AnalLoot = 1 And $StashLoot > 0 Then
MouseMove(Round($StashTabs[$StashSelectedTab][0] * $x_ratio) ,Round($StashTabs[$StashSelectedTab][1] * $x_ratio), 2)
AnalLoot()
Send("{SPACE}")
If $AnalSalvage = 1 Then
If $AnalRareIdentify = 1 Then
DoIdentify()
EndIf
DoSalvage()
EndIf
If $AnalVendor = 1 Then
If $AnalRareIdentify = 1 Then
DoIdentify()
EndIf
VendorLoot()
EndIf
EndIF
$AnalSalvage = 0
$AnalRareIdentify = 0
$AnalVendor = 0
EndFunc ;==>StashLoot

Func CheckFullStash()
If _ImageSearchArea($pngLoc & "FullStash.png", 1, Round(817 * $x_ratio),Round(132 * $y_ratio), Round(912 * $y_ratio),Round(157 * $x_ratio), $gX, $gY, 140) Then
If $StashSelectedTab <2>= 1 Or $j = 0 Then
$slotError = 0
MouseMove(Round(($slot1x + $i * $offset) * $x_ratio), Round(($slot1y + $j * $offset) * $y_ratio),1)
Sleep($AnalSpeed)
$ItemInfo = StringSplit(GetItemInfo(), ",")

If StringRegExp($ItemInfo[1],"Magic") Then
DebugLog("Magic Item Found iLvl=" &$ItemInfo[2]&" @ Cell " & $i & "," & $j)

If $ItemInfo[2] <0>= $MagicStashiLvl Then
MouseClick("Right", Round(($slot1x + $i * $offset) * $x_ratio), Round(($slot1y + $j * $offset) * $y_ratio), 1)
DllStructSetData($myStruct, "vendor", true)
DllStructSetData($myStruct, "salvage", false)
DllStructSetData($myStruct, "itemtype", "Magic")

Elseif $ItemInfo[2] <MagicSalvageiLvl> $MagicVendoriLvl Then
DllStructSetData($myStruct, "vendor", false)
DllStructSetData($myStruct, "salvage", true)
DllStructSetData($myStruct, "itemtype", "Magic")
$AnalSalvage = 1

Elseif $ItemInfo[2] <= $MagicVendoriLvl Then
DllStructSetData($myStruct, "vendor", true)
DllStructSetData($myStruct, "salvage", false)
DllStructSetData($myStruct, "itemtype", "Magic")
$AnalVendor = 1

EndIf
EndIf
ElseIf StringRegExp($ItemInfo[1],"Rare") Then
DebugLog("Rare Item Found iLvl=" &$ItemInfo[2]&" @ Cell " & $i & "," & $j)

If $ItemInfo[2] <0>= $RareStashiLvl Then
MouseClick("Right", Round(($slot1x + $i * $offset) * $x_ratio), Round(($slot1y + $j * $offset) * $y_ratio), 1)

Elseif $ItemInfo[2] <RareSalvageiLvl> $RareVendoriLvl Then
DllStructSetData($myStruct, "vendor", false)
DllStructSetData($myStruct, "salvage", true)
DllStructSetData($myStruct, "itemtype", "Rare")
$AnalSalvage = 1

ElseIf $ItemInfo[2] <RareVendoriLvl>AnalLoot




Func DoIdentify()
$rt = TimerInit()
DebugLog("Identifying Rare Items" & @CRLF & _
"****************************************************")
Send("i")
For $i = 0 To 9
For $j = 0 To 5
$tmp = $structArray[$i][$j]
$type = DllStructGetData($tmp, "itemtype")
$shouldVendor = DllStructGetData($tmp, "vendor")
If $type = "Rare" And $shouldVendor = True Then
$xpos = DllStructGetData($tmp, "x")
$ypos = DllStructGetData($tmp, "y")
DebugLog("Rare to Identify " & $i & "," & $j)
ConsoleWrite($xpos&","&$ypos&" iDENT" & @CRLF)
MouseClick("Right",$xpos,$ypos,1)
Sleep(Random(2800, 3000))
EndIF
$tmp = 0
Next
Next
Send("i")
$AnalRareIdentify = 0
$srt = TimerDiff($rt)
$AnalTime = Round($srt / 1000, 2)
DebugLog(@CRLF & "Identifying Rares Took " & $AnalTime & " Seconds" & @CRLF & _
"****************************************************")
EndFunc

Func DoSalvage()
$rt = TimerInit()
DebugLog("Salvaging Items" & @CRLF & _
"****************************************************")
MouseClick("Left",Round(1860* $x_ratio),Round(301 * $y_ratio),1)
sleep(2200)
MouseClick("Left",Round(523 * $x_ratio),Round(484 * $y_ratio),1)
sleep(300)
MouseClick("Left",Round(265 * $x_ratio),Round(290 * $y_ratio),1)
If Not _ImageSearchArea("CurrentInventory.png", 1, Round(1603 * $x_ratio), Round(164 * $y_ratio), Round(1870 * $x_ratio), Round(542 * $y_ratio), $gX, $gY, 0) Then
GUICtrlSetData($lblStatus, "Status: Frozen to prevent vendor of worn item, sorry....")
TogglePause()
EndIf
For $i = 0 To 9
For $j = 0 To 5
$tmp = $structArray[$i][$j]
$shouldSalvage = DllStructGetData($tmp, "salvage")
If $shouldSalvage = True Then
DebugLog("Item to Salvage " & $i & "," & $j)
$xpos = DllStructGetData($tmp, "x")
$ypos = DllStructGetData($tmp, "y")
$type = DllStructGetData($tmp, "itemtype")
ConsoleWrite($xpos&","&$ypos&" Salvage" & @CRLF)
MouseClick("Left",$xpos,$ypos,1)
If $type = "Rare" Then
Send("{Enter}")
EndIf
sleep(150)
EndIF
$tmp = 0
Next
Next
Send("{Space}")
$srt = TimerDiff($rt)
$AnalTime = Round($srt / 1000, 2)
DebugLog(@CRLF & "Salvaging Items Took " & $AnalTime & " Seconds" & @CRLF & _
"****************************************************")
$StoredText = ""
EndFunc

Func VendorLoot()
$rt = TimerInit()
DebugLog("Vendoring Items" & @CRLF & _
"****************************************************")
If $AnalSalvage = 1 Then
MouseClick("left",Round(1078 * $x_ratio), Round(41 * $y_ratio), 6) ;NPC Merchant to the right of cain's home
sleep(2200)
MouseClick("left",Round(889 * $x_ratio), Round(398 * $y_ratio), 6) ;NPC Merchant to the right of cain's home
sleep(500)
Else
Sleep(Random(300, 500))
MouseMove(1525 * $x_ratio, 70 * $y_ratio)
Send("{" & $Skill3 & " down}")
Sleep($timingWormHole)
Send("{" & $Skill3 & " up}")
MouseClick("left", Round(796 * $x_ratio), Round(474 * $y_ratio), 6) ;NPC Merchant to the right of cain's
EndIf
sleep(300)
$arr = 0
If Not _ImageSearchArea("CurrentInventory.png", 1, Round(1603 * $x_ratio), Round(164 * $y_ratio), Round(1870 * $x_ratio), Round(542 * $y_ratio), $gX, $gY, 0) Then
GUICtrlSetData($lblStatus, "Status: Frozen to prevent salvage of worn item, sorry....")
TogglePause()
EndIf
For $i = 0 To 9
For $j = 0 To 5
$tmp = $structArray[$i][$j]
$shouldVendor = DllStructGetData($tmp, "vendor")
If $shouldVendor = True Then
DebugLog("Item to Vendor " & $i & "," & $j)
$xpos = DllStructGetData($tmp, "x")
$ypos = DllStructGetData($tmp, "y")
ConsoleWrite($xpos&","&$ypos&" Vendor" & @CRLF)
MouseClick("Right",$xpos,$ypos,1)
EndIf
$tmp = 0
Next
Next
Sleep(200)
RandClick("left", Round(521 * $x_ratio), Round(506 * $y_ratio), 1, 1) ;button to open up repair menu
Sleep(300)
RandClick("left", Round(260 * $x_ratio), Round(595 * $y_ratio), 1, 1) ;button to pay for repairs
Sleep(200)
Send("{ESCAPE}")
$srt = TimerDiff($rt)
$AnalTime = Round($srt / 1000, 2)
DebugLog(@CRLF & "Vendoring Items Took " & $AnalTime & " Seconds" & @CRLF & _
"****************************************************")
EndFunc ;==>VendorLoot


Func GetItemInfo()
$gX = 0
$gY = 0
$Type = 0
$CheckRing = 0
$mousePos = MouseGetPos()
Local $Rings[2] = ["RareRing","RareAmmy"]
Local $MiscItems[4] = ["Crafting","Tomes","Gem","BlackSmithPlan"]
Local $ItemQuality[8] = ["Magic","MagicRed","Rare","RareRed","Legendary","LegendaryRed","Set","SetRed"]

For $i = 0 to Ubound($ItemQuality) -1
If _ImageSearchArea($pngLoc & $ItemQuality[$i] & ".png",1, Round($mousePos[0] - 400 * $x_ratio), 625 * $y_ratio , Round($mousePos[0] - 100 * $x_ratio),850 * $y_ratio,$gX,$gY, 30) Then
$Type = $ItemQuality[$i]
If StringRegExp($Type,"Rare") Or StringRegExp($Type,"Legendary") Or StringRegExp($Type,"Set") Then
$CheckRing = 1
EndIf
ExitLoop
Else
$Type = 0
EndIf
Next

If $CheckRing = 1 Then
For $i = 0 to Ubound($Rings) -1
If _ImageSearchArea($pngLoc & $Rings[$i] & ".png",1, Round($mousePos[0] - 400 * $x_ratio), 625 * $y_ratio , Round($mousePos[0] - 100 * $x_ratio), 850 * $y_ratio,$gX,$gY, 90) Then
Return $Rings[$i] & "," & $RareStashiLvl
ExitLoop
EndIf
Next
ElseIf $Type = 0 Then
For $i = 0 to Ubound($MiscItems) -1
If _ImageSearchArea($pngLoc & $MiscItems[$i] & ".png",1, Round($mousePos[0] - 400 * $x_ratio), 625 * $y_ratio , Round($mousePos[0] - 100 * $x_ratio), 850 * $y_ratio,$gX,$gY, 90) Then
Return $MiscItems[$i] & "," & $RareStashiLvl
ExitLoop
EndIf
Next
EndIf

If _ImageSearchArea($pngLoc & "ItemLevel1920x1080.png",1, $mousePos[0]-470*$x_ratio, 750 * $y_ratio, $mousePos[0] - 275 * $x_ratio, 1025 * $y_ratio,$gX,$gY, 90) Then
$capture = _TesseractScreenCapture(0, "", 1, 4, Round($gX-5 * $x_ratio), Round($gY-10 * $y_ratio), Round($gX + 80 * $x_ratio), Round($gY + 10 * $y_ratio), 0)
$Fixed = StringRegExpReplace($capture,"Q","9")
$iLvl = StringRegExpReplace($Fixed,"[a-zA-Z|:;~.,»<?_=+|-]","")
$StringLength = StringLen($iLvl)
If $StringLength > 2 Then
$StringLength -= 3
$iLvl = StringMid($iLvl, $StringLength, 2)
EndIF
Return $Type & "," & $iLvl
Else
Return 0
EndIf
EndFunc

Func _ImageSearchArea($findImage, $resultPosition, $x1, $y1, $right, $bottom, ByRef $x, ByRef $y, $tolerance)
If $tolerance > 0 Then $findImage = "*" & $tolerance & " " & $findImage
$findImage = "*TRANSBLACK " & $findImage
If @AutoItX64 Then
$result = DllCall("ImageSearchDLL_x64.dll", "str", "ImageSearch", "int", $x1, "int", $y1, "int", $right, "int", $bottom, "str", $findImage)
Else
$result = DllCall("ImageSearchDLL.dll", "str", "ImageSearch", "int", $x1, "int", $y1, "int", $right, "int", $bottom, "str", $findImage)
EndIf
If $result = "0" Then
Return 0
EndIf

; Otherwise get the x,y location of the match and the size of the image to
; compute the centre of search
$array = StringSplit($result[0], "|")
If (UBound($array) >= 4) Then
$x = Int(Number($array[2]))
$y = Int(Number($array[3]))
If $resultPosition = 1 Then
$x = $x + Int(Number($array[4]) / 2)
$y = $y + Int(Number($array[5]) / 2)
EndIf
Return 1
EndIf
EndFunc ;==>_ImageSearchArea

Func FindCellar()
$CellCoord = 0
$gY = 0
$gX = 0
;A precheck to the cellar search
_ImageSearchArea($pngLoc & "Cellar.png", 1, Round(1672 * $x_ratio),Round(175 * $y_ratio),Round(1717 * $x_ratio),Round(209 * $y_ratio), $gX, $gY, 160)
sleep($cellarCheckSleep)
If $gX > 0 Or $gY > 0 then
Do
MouseMove(Round($cellarCoordx[$CellCoord] * $x_ratio), Round($cellarCoordy[$CellCoord] * $y_ratio), 1) ;moves cursor over to the cellar
sleep($cellarCheckSleep)
If $CellCoord <6>= Ubound($cellarCoordx)
Else
Return 0
EndIf
$countMissedCellar += 1
Call("CellarScreenShot")
Return 0
EndFunc

Func CellarScreenShot()
If $ScreenShot = 1 Then
_ScreenCapture_SetBMPFormat(0)
_ScreenCapture_Capture(@ScriptDir & "\shots\Cellar\CellarShot"& $run & "c" & $CellCoord & ".bmp")
EndIf
EndFunc

Func GoldPerHour()
Send("i")
Sleep(200)
If $CurrentItems = 0 Then
Call("ScreenShotInventory")
EndIf
CheckFullInventory()
$CurrentGold = _TesseractScreenCapture(0, "", 1, 2, 1450*$x_ratio, 504*$y_ratio, 1570*$x_ratio, 530*$y_ratio, 0)
Sleep(200)
Send("i")

$CurrentGold = StringRegExpReplace($CurrentGold, "[^0-9]", "")
$trt = TimerDiff($t)
If $StartingGold <0> 0 Then $AccumulatedGold = $CurrentGold - $StartingGold
$GPH = $AccumulatedGold / ($trt / 1000) * 3600

If $GPH >= 0 and $AccumulatedGold >=0 then
If $GPH > 1000000 Then
$GPH = Round($GPH/1000000,2) & "M"
ElseIf $GPH > 1000 Then
$GPH = Round($GPH/1000) & "K"
EndIF
If $AccumulatedGold > 1000000 Then
$AccumulatedGold = Round($AccumulatedGold/1000000,2) & "M"
ElseIf $AccumulatedGold > 1000 Then
$AccumulatedGold = Round($AccumulatedGold/1000) & "K"
EndIF
GUICtrlSetData($lblGold,$GPH & " Per Hour - Accumulated Gold: " & $AccumulatedGold)
EndIf
EndFunc ;==>GoldPerHour

Func LeaveGame()
GUICtrlSetData($lblStatus, "Status: Leaving Game")
Send("{SPACE}")
sleep(200)
Send("{Escape}")
RandClick("left", Round(956 * $x_ratio), Round(579 * $y_ratio), 120, 2) ;Random Click on the leave button
Call("CalcTime")
Sleep($timingGameLoad)
EndFunc ;==>LeaveGame

Func TownPortal()
GUICtrlSetData($lblStatus, "Status: Returning to Town")
sleep(200)
Send("t")
Call("GoldPerHour")
Sleep($timingTP)
Call("CheckRepair")
EndFunc ;==>TownPortal

Func RandClick($clickType, $xPos, $yPos, $xOff = 10, $yOff = 10, $clicks = 1, $speed = 1)
If $xOff < 1 Then $xOff = 1
If $yOff <1>RandClick

Func RandMove($xPos, $yPos, $xOff = 10, $yOff = 10, $speed = 1)
$randX = Round(Random($xPos - ($xOff * $x_ratio), $xPos + ($xOff * $x_ratio)))
$randY = Round(Random($yPos - ($yOff * $y_ratio), $yPos + ($yOff * $y_ratio)))
MouseMove($randX, $randY, $speed)
EndFunc ;==>RandMove

Func StopLog()
If $run > 0 Then
$repairCountPercent = $repairCount / $run
$deathsCountPercent = $deathCount / $run
$cellarCountPercent = $cellarCount / $run
$closedCellarCountPercent = ($run - $cellarCount) / $run
$trt = TimerDiff($t)
;Total runtime calculation.
$hours = Floor((($trt / 1000) / 60) / 60)
$minutes = (($trt / 1000) / 60)
If $minutes > 60 Then
While $minutes > 60
$minutes -= 60
WEnd
EndIf

_FileWriteLog("Dank Cellar Log.txt", @CRLF & "************************************************" & @CRLF & _
"Chancity's Dank Celler" & @CRLF & @CRLF & "Stats:" & @CRLF & _
"Total Runtime: " & $hours & " hours, " & Ceiling($minutes) & " minutes" & @CRLF & _
GUICtrlRead($lblLast) & @CRLF & _
"Total Cellars Found: " & $cellarCount & " (" & Round($cellarCountPercent * 100,.00) & "%" & ")" & @CRLF & _
"Total Cellars Not Found: " & $run - $cellarCount & " (" & Round($closedCellarCountPercent * 100,.00) & "%" & ")" & @CRLF & _
"Total Deaths: " & $deathCount & " (" & Round($deathsCountPercent * 100,.00) & "%" & ")" & @CRLF & _
"Total Repairs: " & $repairCount & " (" & Round($repairCountPercent * 100,.00) & "%" & ")" & @CRLF & @CRLF & "Loot:" & @CRLF & _
"Rares: " & $RareCount & " Legendary's: " & $LegendaryCount & " Set Items: " & $setCount & " Gems: " & $GemCount & @CRLF & _
GUICtrlRead($lblGold) & @CRLF & _
"************************************************")
EndIf
EndFunc

Func Begin()
If $AddDPS = 0 then
MsgBox(16, "First Run", "Edit your settings.")
Else
$AddDPS = $AddDPS * 3.25
$attackTime = (170000 / $AddDPS) * 1000
WinActivate("Diablo III")
$Go = Not $Go
GUICtrlSetState($mFile, $GUI_DISABLE)
GUICtrlSetState($mOptions, $GUI_DISABLE)
EndIf
If Not $Go Then WinSetTit


Last edited by AceOfSpadez on 04 Aug 2012 02:18 am; edited 1 time in total
Back to top
View user's profile Send private message
Display posts from previous:   
6 Members: Guest
Post new topic  Reply to topic  d3jsp Forum Index -> Diablo III Trading and Discussion All times are GMT - 4 Hours
1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You cannot download files in this forum



D3jsp is proudly powered by phpBB © 2.0
Theme and Forum by tramway