;===============================================================================
;
; Description: : DarkThrone AutoRecruiter
; Parameter(s): : Options: "bank" or "armory"
; Requirement: : IE.au3 library and beta
; Author(s): : Michael Guynn (greenmachine)
; Note(s): : (c) Michael Guynn, February 2006
;
;===============================================================================
; Also deposits gold into the bank, and buys defensive weaponry and miners
; Offense weapons (best deals of all items):
; long sword base price: 300000 (+1500 offense) => 200 gold:off ratio quantity[5]
; great sword base price: 350000 (+1800 off.) => 194.4444 gold:off ratio quantity[6]
; Defense weapons (best deals of all items):
; long bow base price: 300000 (+1500 defense) => 200 gold:def ratio quantity[19]
; great bow base price: 350000 (+1800 defense) => 194.4444 gold:def ratio quantity[20]
; Each Citizen -> base guard = +6 def., costs 1500 gold => 250 gold:def ratio
; Each base guard -> trained guard = +54 def., costs 10000 gold => 185.185 gold:def ratio
; Each Citizen -> base guard -> trained guard = +60 def, costs 11500 => 191.6666 gold:def ratio
; http://www.darkthrone.com/proficiencies.dt?session=
; "levels" for use with above calculations: all %s are added/subtracted from base price/number
; search source for
-> number % is immediately after
; http://www.darkthrone.com/mining.dt?session=
; Find per-turn and daily income.
; your gold per turn is xxx,xxx,xxx.
; Your daily income is xxx,xxx,xxx.
;~ What are the race and subclass bonuses?
;~ Humans: +5% offense bonus, Great Sword (unique offense weapon)
;~ Elves: +5% intelligence bonus (spy offense/spy defense), Elite Archer (unique defense unit)
;~ Goblins: +5% defense bonus, Great Bow (unique defense weapon)
;~ Undead: casualty bonus (more information below), Berserker (unique offense unit)
;~ Fighter: +5% offense bonus
;~ Cleric: +5% defense bonus
;~ Thief: +5% intelligence bonus (spy defense and spy offense)
;~ Assassin: +5% income bonus
; pass decrypt _StringEncrypt (0, $AccountPassword, _StringReverse ($AccountEmail), 2)
HotKeySet ("{ESC}", "pauseme")
HotKeySet ("!s", "WriteSource")
HotKeySet ("!q", "quitme")
#include
#include
Opt ("WinTitleMatchMode", 2)
Global $Cursor, $Pause = 0, $Option = "", $AccountUserNumber = 0
Global $DarkThroneRecruiterINI = "DarkThroneRecruiter.ini"
If Not FileExists ($DarkThroneRecruiterINI) Then
$AccountEmail = InputBox ("Create INI 1 of 3", "Account Email Address")
$AccountPassword = InputBox ("Create INI 2 of 3", "Account Password")
$AccountMainClass = InputBox ("Create INI 3 of 3", "Main Class (race) - Human, Elf, Goblin, Undead")
$AccountPassword = _StringEncrypt (1, $AccountPassword, _StringReverse ($AccountEmail), 2)
FileWriteLine ($DarkThroneRecruiterINI, "[Account Info]")
FileWriteLine ($DarkThroneRecruiterINI, "Email=" & $AccountEmail)
FileWriteLine ($DarkThroneRecruiterINI, "Password=" & $AccountPassword)
FileWriteLine ($DarkThroneRecruiterINI, "MainClass=" & StringUpper ($AccountMainClass))
FileWriteLine ($DarkThroneRecruiterINI, "UserNumber=")
Else
$AccountEmail = IniRead ($DarkThroneRecruiterINI, "Account Info", "Email", "")
$AccountPassword = IniRead ($DarkThroneRecruiterINI, "Account Info", "Password", "")
$AccountMainClass = IniRead ($DarkThroneRecruiterINI, "Account Info", "MainClass", "")
$AccountUserNumber = IniRead ($DarkThroneRecruiterINI, "Account Info", "UserNumber", 0)
EndIf
If $AccountEmail = "" Then
MsgBox (0, "Error", "No Email Specified. Please Fix INI")
Exit
ElseIf $AccountPassword = "" Then
MsgBox (0, "Error", "No Password Specified. Please Fix INI")
Exit
ElseIf $AccountMainClass = "" Then
MsgBox (0, "Error", "No Main Class Specified. Please Fix INI")
Exit
EndIf
$IEObject = _IECreate (1)
;~ WinSetState ("Internet Explorer", "", @SW_MINIMIZE)
;~ TrayTip ("Dark Throne Recruiter Running", "The window flash you just saw is perfectly normal." & @CRLF & _
;~ "The Recruiter has to open and minimize a window." & @CRLF & "There is no need to be alarmed.", 1)
If $CmdLine[0] >= 1 Then
$Option = $CmdLine[1]
EndIf
_IELoadWait ($IEObject, 50)
Sleep (500)
_IENavigate ($IEObject, "www.darkthrone.com/login.dt", 1)
Sleep (500)
$IEFormObj = _IEFormGetObjByIndex ($IEObject, 1)
$IEFormElementEmail = _IEFormElementGetObjByIndex ($IEFormObj, 1)
$IEFormElementPassword = _IEFormElementGetObjByIndex ($IEFormObj, 2)
_IEFormElementSetValue ($IEFormElementEmail, $AccountEmail)
_IEFormElementSetValue ($IEFormElementPassword, _StringEncrypt (0, $AccountPassword, _StringReverse ($AccountEmail), 2))
$SubmitButtonSource = "templates/notloggedin/images/buttons/submit.gif"
$oInputs = _IETagNameGetCollection (_IEDocumentGetObj ($IEObject), "input")
For $oInput In $oInputs
If $oInput.src <> "" And StringInStr ($oInput.src, $SubmitButtonSource, 0) Then
$oInput.click
ExitLoop
EndIf
Next
_IELoadWait ($IEObject, 100)
Sleep (500)
If $AccountUserNumber = 0 Then
$AccountUserNumber = GetUserNumber()
IniWrite ($DarkThroneRecruiterINI, "Account Info", "UserNumber", $AccountUserNumber)
EndIf
If $Option = "" Then
_IENavigate ($IEObject, "http://www.darkthrone.com/recruiter/index.dt?session=", 1)
Sleep (500)
_IEClickImg ($IEObject, "Start Recruiting", "alt")
_IELoadWait ($IEObject, 50)
Sleep (500)
While 1
If _IEFormGetCount ($IEObject) > 0 Then
_IEFormSubmit (_IEFormGetObjByIndex ($IEObject, 0))
_IELoadWait ($IEObject, 100)
Sleep (500)
Else
$BodyHTML = _IEBodyReadHTML ($IEObject)
If StringInStr ($BodyHTML, "You have already clicked the maximum number of members for today", 0) Then
ExitLoop
Else
If _IEClickLinkByText ($IEObject, "here") = 0 Then
_IEAction ($IEObject, "refresh")
EndIf
EndIf
EndIf
WEnd
EndIf
If $Option = "armory" Then
_IENavigate ($IEObject, "http://darkthrone.com/armory.dt?session=", 1)
_IELoadWait ($IEObject, 50)
$GoldAmount = GetGold()
$IEFormObjectArmory = _IEFormGetObjByIndex ($IEObject, 1)
If $AccountMainClass = "GOBLIN" Then
$QuantityXXObj = _IEFormElementGetObjByName ($IEFormObjectArmory, "quantity[20]")
_IEFormElementSetValue ($QuantityXXObj, Int ($GoldAmount/350000)) ; using base price for now
Else
$QuantityXXObj = _IEFormElementGetObjByName ($IEFormObjectArmory, "quantity[19]")
_IEFormElementSetValue ($QuantityXXObj, Int ($GoldAmount/300000)) ; using base price for now
EndIf
_IEFormSubmit ($IEFormObjectArmory)
_IELoadWait ($IEObject, 50)
$GoldAmount = GetGold()
If $GoldAmount >= 100000 Then
_IENavigate ($IEObject, "http://www.darkthrone.com/training.dt?session=", 1)
_IELoadWait ($IEObject, 50)
$IEFormObjectTraining = _IEFormGetObjByIndex ($IEObject, 1)
$QuantityMinersObj = _IEFormElementGetObjByName ($IEFormObjectTraining, "quantity[2]") ; miners at 2000 a pop
If $GoldAmount >= 200000 Then
_IEFormElementSetValue ($QuantityMinersObj, 100)
Else
_IEFormElementSetValue ($QuantityMinersObj, 50)
EndIf
_IEFormSubmit ($IEFormObjectTraining)
_IELoadWait ($IEObject, 50)
EndIf
ElseIf $Option = "bank" Then
_IENavigate ($IEObject, "http://www.darkthrone.com/bank.dt?session=#deposit", 1)
_IELoadWait ($IEObject, 50)
$IEFormObjDeposit = _IEFormGetObjByIndex ($IEObject, 1)
If _IEFormElementGetValue (_IEFormElementGetObjByName ($IEFormObjDeposit, "deposit")) > 0 Then
_IEFormSubmit ($IEFormObjDeposit)
_IELoadWait ($IEObject, 50)
EndIf
EndIf
_IENavigate ($IEObject, "http://www.darkthrone.com/logout.dt?session=&user=" & $AccountUserNumber, 1)
WinClose ("Internet Explorer")
Exit
Func GetGold()
$GoldSplit = StringSplit (_IEBodyReadHTML ($IEObject), "Gold: ", 1)
$GoldSplit = StringSplit ($GoldSplit[2], " ", 1)
Return StringReplace ($GoldSplit[1], ",", "")
EndFunc
Func GetUserNumber()
$UserNumberSplit = StringSplit (_IEBodyReadHTML ($IEObject), '', 1)
Return $UserNumberSplit[1]
EndFunc
Func WriteSource()
FileWrite ("RecruiterSource" & @MIN & @SEC & ".txt", _IEBodyReadHTML ($IEObject))
EndFunc
While 1
Sleep (1000)
WEnd
Func pauseme()
If $Pause = 0 Then
$Pause = 1
While 1
TrayTip ("Paused", "The Recruiter is Paused." & @CRLF & "Press ESC to unpause or Alt+q to quit.", 1)
Sleep (5000)
If $Pause = 0 Then
TrayTip ("", "", 1)
ExitLoop
EndIf
WEnd
ElseIf $Pause = 1 Then
TrayTip ("", "", 1)
$Pause = 0
Return
EndIf
EndFunc
Func quitme()
Exit
EndFunc
|