Code:
#include <date.au3>
Global $go = True
Global $active = False
$dll = DllOpen("user32.dll")
Global $wait_for_input = 2000
HotKeySet("{F1}", "start")
HotKeySet("{F2}", "delayed_start")
HotKeySet("{F4}", "stop")
HotKeySet("{F5}", "quit")
Global $kd = Random(75, 85)
AutoItSetOption("SendKeyDelay", $kd)
; Coordinates for 1920x1080 resolution
; [ x , y ]
Global $c_username[2] = [ 720, 550]
Global $c_password[2] = [ 720, 660]
Global $c_login[2] = [ 620, 1000]
Global $c_slot1[2] = [ 720, 120]
Global $c_slot2[2] = [ 720, 180]
Global $c_enter[2] = [1750, 965]
Global $c_logout[2] = [1024, 553]
Global $c_logout2[2] = [1114, 574]
Global $c_exitnow[2] = [1089, 598]
Global $c_catalog[2] = [1352, 580]
#cs 1366x768 resolution
Global $c_username[2] = [ 500, 385]
Global $c_password[2] = [ 500, 485]
Global $c_login[2] = [ 400, 685]
Global $c_slot1[2] = [ 450, 100]
Global $c_slot2[2] = [ 450, 170]
Global $c_enter[2] = [1200, 700]
Global $c_logout[2] = [ 746, 400]
Global $c_logout2[2] = [ 837, 420]
Global $c_exitnow[2] = [ 813, 439]
#ce
Global $sz = 64
Global $_user[$sz]
Global $_pass[$sz]
Global $_slot[$sz]
Global $_name[$sz]
$_user[0] = 'ACCOUNTNAME_1' ;account name
$_pass[0] = 'PASSWORD' ;password
$_slot[0] = 1 ;character slot num
$_name[0] = 'Cool Char acc1 char1' ; character name (fill in whatever)
$_user[1] = 'ACCOUNTNAME_1' ;first acc second char
$_pass[1] = 'PASSWORD'
$_slot[1] = 2
$_name[1] = 'Cool Char acc1 char2'
$_user[2] = 'ACCOUNTNAME_2' ;second acc first char
$_pass[2] = 'PASSWORD'
$_slot[2] = 1
$_name[2] = 'random name'
$_user[3] = 'ACCOUNTNAME_2' ;second add second char
$_pass[3] = 'PASSWORD'
$_slot[3] = 2
$_name[3] = 'hehe'
; Bindings
Global $binding_professions = 'n' ; N
Global $binding_menu = '{F10}' ; F10
Global $binding_pray = 'i' ; I
Global $binding_close = '{ESCAPE}' ; Escape
Global $binding_gui_1 = '+1'; ; shift-1
Global $binding_gui_2 = '+2'; ; shift-2
Func _MouseMoveRelative ($iX, $iY, $dll="user32.dll")
DllCall($dll, "int", "mouse_event","int", 0x01, "int", $iX, "int", $iY, "int", 0, "int", 0)
EndFunc
Func printf($format, $var1 = -1, $var2 = -1, $var3 = -1 , $var4 = -1 , $var5 = -1 , $var6 = -1 , $var7 = -1 , $var8 = -1 , $var9 = -1 , $var10 = -1 , $var11 = -1 , $var12 = -1 , $var13 = -1 , $var14 = -1 , $var15 = -1 , $var16 = -1 , $var17 = -1 , $var18 = -1 , $var19 = -1 , $var20 = -1 , $var21 = -1 , $var22 = -1 , $var23 = -1 , $var24 = -1 , $var25 = -1 , $var26 = -1 , $var27 = -1 , $var28 = -1 , $var29 = -1 , $var30 = -1 , $var31 = -1 , $var32 = -1)
ConsoleWrite(StringFormat($format, $var1, $var2, $var3, $var4, $var5, $var6, $var7, $var8, $var9, $var10, $var11, $var12, $var13, $var14, $var15, $var16, $var17, $var18, $var19, $var20, $var21, $var22, $var23, $var24, $var25, $var26, $var27, $var28, $var29, $var30, $var31, $var32))
EndFunc
Func sprintf($format, $var1 = -1, $var2 = -1, $var3 = -1 , $var4 = -1 , $var5 = -1 , $var6 = -1 , $var7 = -1 , $var8 = -1 , $var9 = -1 , $var10 = -1 , $var11 = -1 , $var12 = -1 , $var13 = -1 , $var14 = -1 , $var15 = -1 , $var16 = -1 , $var17 = -1 , $var18 = -1 , $var19 = -1 , $var20 = -1 , $var21 = -1 , $var22 = -1 , $var23 = -1 , $var24 = -1 , $var25 = -1 , $var26 = -1 , $var27 = -1 , $var28 = -1 , $var29 = -1 , $var30 = -1 , $var31 = -1 , $var32 = -1)
return StringFormat($format, $var1, $var2, $var3, $var4, $var5, $var6, $var7, $var8, $var9, $var10, $var11, $var12, $var13, $var14, $var15, $var16, $var17, $var18, $var19, $var20, $var21, $var22, $var23, $var24, $var25, $var26, $var27, $var28, $var29, $var30, $var31, $var32)
EndFunc
Func _RSleep ($ms, $interval=100)
Sleep(Random($ms-$interval, $ms+$interval))
EndFunc
Func ensure_click($x, $y, $delay=25, $n=3)
;printf("ensure_click(%d, %d)\n", $x, $y)
Local $i = 0
For $i = 0 To $n Step 1
MouseClick("LEFT", $x+Mod($i, 3), $y+Mod($i, 3))
_RSleep($delay, 5)
Next
EndFunc
Func ensure_send($key, $delay=25, $n=3)
Local $i = 0
For $i = 0 To $n Step 1
Send($key)
_RSleep($delay, 5)
Next
EndFunc
Func wait($t=$wait_for_input)
_RSleep($t)
EndFunc
Func clear_textinput()
AutoItSetOption("SendKeyDelay", 2)
Send("{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}")
AutoItSetOption("SendKeyDelay", $kd)
EndFunc
Func login($user, $pass, $slot=1)
ensure_click($c_username[0], $c_username[1]) ; click username box
_RSleep(75, 5)
clear_textinput()
_RSleep(75, 5)
Send($user, 1) ; Insert Username
_RSleep(75, 5)
ensure_click($c_password[0], $c_password[1]) ; click password box
_RSleep(75, 5)
clear_textinput()
_RSleep(75, 5)
Send($pass, 1) ; Insert Password
_RSleep(75, 5)
ensure_click($c_login[0], $c_login[1]) ; Click 'Login'
_RSleep(7000) ; wait for login to complete
; XXX: add more slots
if ($slot == 1) Then
ensure_click($c_slot1[0], $c_slot1[1], 25, 10) ; slot 1
ElseIf ($slot == 2) Then
ensure_click($c_slot2[0], $c_slot2[1], 25, 10) ; slot 2
EndIf
ensure_click($c_enter[0], $c_enter[1]) ; Click 'Enter World'
_RSleep(35000) ; Wait for loading screen
PressAnyKey()
_RSleep(3500)
EndFunc
Func logout()
close_windows()
Send($binding_menu)
wait()
ensure_click($c_logout[0], $c_logout[1])
wait()
ensure_click($c_logout2[0], $c_logout2[1])
wait()
ensure_click($c_exitnow[0], $c_exitnow[1])
_RSleep(5*1000, 1*1000)
EndFunc
Func find_target($ix, $iy)
Send("{CTRLDOWN}")
Local $i = 0
For $i = 0 To 80 Step 1
_MouseMoveRelative($ix, $iy)
_RSleep(10, 2)
Next
Send("{CTRLUP}")
EndFunc
Func PressAnyKey()
Send(".")
EndFunc
Func close_windows()
Local $i
For $i = 0 To 10 Step 1
Send($binding_close)
_RSleep(10, 1)
Send($binding_gui_2)
_RSleep(75, 25)
Next
#cs Old catalog_close code
; Is catalog open?
; xxx: shut down with escape only
Local $c_catalog_base[2] = [859, 399]
Local $color = PixelSearch($c_catalog_base[0]-30, $c_catalog_base[1]-30, $c_catalog_base[0]+30, $c_catalog_base[1]+30, 0x4c3199, 2)
if Not @error Then
Send("l")
;MouseClick("LEFT", 1016, 26) ; Close down Home Page if it's up (hopefully this won't ruin the direction the player is looking)
EndIf
#ce
EndFunc
Func timeout()
printf("%s waiting for 1 hour..\n", _Now())
Sleep(60*60*1000)
EndFunc
Func main()
While $go
if ($active) Then
Local $i = 0
For $i = 0 To $sz Step 1
if (Not ProcessExists("GameClient.exe")) Then
MsgBox(0, "Alert", "Client not running ( " & _Now() & ")")
ExitLoop
EndIf
if ($_user[$i] == "") Then
printf("%s exiting loop at %d\n", _Now(), $i)
ExitLoop
EndIf
printf("%s Initiating user '%s'[%d]...\n", _Now(), $_name[$i], $i)
login($_user[$i], $_pass[$i], $_slot[$i])
wait()
close_windows()
pray()
_RSleep(500)
close_windows()
logout()
Next
Timeout()
EndIf
WEnd
EndFunc
Func start()
$active = True
EndFunc
Func stop()
$active = False
EndFunc
Func delayed_start()
ConsoleWrite("Starting delayed..." & @LF)
Timeout()
start()
EndFunc
Func quit()
Exit
EndFunc
Func pray()
ensure_send($binding_pray, 100, 5)
Sleep(3500)
close_windows()
_RSleep(150, 50)
EndFunc
main() ; initiate program