;******************************************************* ;My Custom version of Account Refresher.AU3 for diablo 2 ;******************************************************* ; Added ToolBox line to reference current account ; Added ToolBox line to reference current char slot ; Expanded error Messages, so they are more specific ;``````` ; Not supported any more by Blizzard :/ ;``````` ; Allow MPQ files, make each account choose a different ; CD key every time it switches accounts. ;******************************************************* Opt("PixelCoordMode", 2) Opt("MouseCoordMode", 2) Opt("SendKeyDelay", 175) Opt("WinTitleMatchMode", 3) Global $Xclix = 0, $Yclix = 0, $A, $P, $K, $UseMPQFiles, $UsingKey HotKeySet("{ESC}", "_Exit") Global $TitleScreen[5] ;Declare the value $TitleScreen[0] = 3319931069 ;The resulting checksum $TitleScreen[1] = 80 ;Upper left X $TitleScreen[2] = 400 ;Upper left Y $TitleScreen[3] = 85 ;Lower right X $TitleScreen[4] = 405 ;Lower right Y Global $LoginScreen[5] $LoginScreen[0] = 1831881397 $LoginScreen[1] = 360 $LoginScreen[2] = 250 $LoginScreen[3] = 370 $LoginScreen[4] = 255 Global $CharacterSelect[5] $CharacterSelect[0] = 2362581377 $CharacterSelect[1] = 107 $CharacterSelect[2] = 177 $CharacterSelect[3] = 117 $CharacterSelect[4] = 178 Global $Lobby[5] $Lobby[0] = 1292465505 $Lobby[1] = 400 $Lobby[2] = 450 $Lobby[3] = 410 $Lobby[4] = 460 $UseMPQFiles = IniRead(@ScriptDir & "\Config.ini", "Settings", "UseMPQFiles", "") $D2PathName = IniRead(@ScriptDir & "\Config.ini", "Settings", "D2PathName", "") $D2WinName = IniRead(@ScriptDir & "\Config.ini", "Settings", "D2WinName", "") $NumberofAccounts = IniRead(@ScriptDir & "\Config.ini", "Settings", "NumberofAccounts", 1) $NumberofCDKeys = IniRead(@ScriptDir & "\Config.ini", "Settings", "NumberofKeys", 1) ;Delays $MenuMouseSpeed = 20 $WaitDelayinSeconds = IniRead(@ScriptDir & "\Config.ini", "Delays", "WaitDelayinSeconds", "30") * 1000 ToolTip("Nate's Account Refresher" & @CRLF & "Press ESC to Exit", 5, 5) For $i = 1 To $NumberofAccounts $A = IniRead(@ScriptDir & "\Config.ini", "Accounts", "Account" & $i, "") $P = IniRead(@ScriptDir & "\Config.ini", "Accounts", "Password" & $i, "") If $A = "" or $P = "" Then MsgBox(0, "Error", "Account or Password is empty") Exit EndIf If Load($A, $P) = 0 Then MsgBox(0, "Error", "An unknown error occurred well executing Load($A, $P).") Exit EndIf Next MsgBox(0, "Complete", "Accounts have been Refreshed!") Func Load($A, $P) If $UseMPQFiles = 1 Then $RandomKeySet = GetRandomKey() $UsingKey = IniRead(@ScriptDir & "\Config.ini", "Keys", "Set" & $RandomKeySet, "") $Flags = " -w -skiptobnet -ns -mpq=" & $UsingKey Else $UsingKey = "default" $Flags = " -w -skiptobnet -ns" EndIf $Flags = " -w -skiptobnet -ns " Run($D2PathName & $Flags) WinActivate($D2WinName) WinWaitActive($D2WinName) Sleep(1000) WinMove($D2WinName, "", 0, -70) MouseClick("Left", 100, 100, 1, $MenuMouseSpeed) If ScreenWait("TitleScreen", 15000) = 0 Then Return 0 MouseClick("Left", 394, 353, 1, $MenuMouseSpeed) If ScreenWait("LoginScreen", 20000) = 0 Then Return 0 MouseClickDrag("Left", 477, 336, 300, 336, $MenuMouseSpeed) Sleep(700) Send($A) Sleep(700) Send("{TAB}") Sleep(700) Send($P) Sleep(700) MouseClick("Left", 395, 470, 1, $MenuMouseSpeed) If ScreenWait("CharacterSelect", 20000) = 0 Then Return 0 If AccountLoop() = 0 Then Return 0 Opt("MouseCoordMode", 1) MouseClick("Left", 98, 513, 1, $MenuMouseSpeed) ;Exit to Main Menu Sleep(700) MouseClick("Left", 400, 510, 1, $MenuMouseSpeed) ;Exit D2 Opt("MouseCoordMode", 2) Sleep(2000) Return 1 EndFunc Func ScreenWait($ScreenName, $Timeout) Local $Checksum[5] Local $Sum $Checksum = Eval($ScreenName) $Time = TimerInit() Do Sleep(200) $Sum = PixelChecksum($Checksum[1], $Checksum[2], $Checksum[3], $Checksum[4]) If $Sum = $Checksum[0] Then Return 1 Until TimerDiff($Time) > $Timeout Return 0 EndFunc Func GetRandomKey() $KeyNumber = Random(1, $NumberofCDKeys, 1) return $KeyNumber EndFunc Func AccountLoop() For $o = 1 To 8 CharactorSelect($o) MouseClick("Left", $Xclix, $Yclix, 1, $MenuMouseSpeed) ;Charactor Select Sleep(700) MouseClick("Left", 692, 557, 1, $MenuMouseSpeed) ;OK button on Charactor Select Menu If ScreenWait("Lobby", 20000) = 0 Then Return 0 Sleep(1000) WinSetState($D2WinName, "", @SW_MINIMIZE) ToolTip("") For $time = ($WaitDelayinSeconds/1000) To 1 Step -1 ToolTip("Nate's Account Refresher" & @CRLF & "CDKey Set: " & $UsingKey & @CRLF & "Account: " & $A & @CRLF & "Character #" & $o & @CRLF & "Waiting " & $time & " seconds" & @CRLF & "Press ESC to Exit", 5, 5) Sleep(1000) Next ToolTip("") ToolTip("Nate's Account Refresher" & @CRLF & "Press ESC to Exit", 5, 5) WinSetState($D2WinName, "", @SW_RESTORE) Sleep(1000) Opt("MouseCoordMode", 1) MouseClick("Left", 737, 438, 1, $MenuMouseSpeed) ;Ouit back to Charactor Select Opt("MouseCoordMode", 2) If ScreenWait("CharacterSelect", 20000) = 0 Then Return 0 Next Return 1 EndFunc Func CharactorSelect($CharSlot) $Xclix = 0 $Yclix = 0 If $CharSlot = 1 Then $Xclix = 180 $Yclix = 130 ElseIf $CharSlot = 2 Then $Xclix = 450 $Yclix = 130 ElseIf $CharSlot = 3 Then $Xclix = 180 $Yclix = 225 ElseIf $CharSlot = 4 Then $Xclix = 450 $Yclix = 225 ElseIf $CharSlot = 5 Then $Xclix = 171 $Yclix = 318 ElseIf $CharSlot = 6 Then $Xclix = 447 $Yclix = 315 ElseIf $CharSlot = 7 Then $Xclix = 180 $Yclix = 410 ElseIf $CharSlot = 8 Then $Xclix = 458 $Yclix = 406 Else Exit(0) EndIf EndFunc Func _Exit() Exit EndFunc