This is a small, unfinished release from me, it's for those who want to expand on it to make it better.
Basically, I've took the Raptor Farmer bot from the GWCA release and turned it into Tomb of Primevil Kings farmer.
All it does now from what I can see, is run to the Dryders, have a little go at balling them up, then Death's Charge in and Sliver them.
The bot then recasts SF and picks up drops and resigns.
Like I said, it's far from finished, so here it is:
(It's just the source too)
Basically, I've took the Raptor Farmer bot from the GWCA release and turned it into Tomb of Primevil Kings farmer.
All it does now from what I can see, is run to the Dryders, have a little go at balling them up, then Death's Charge in and Sliver them.
The bot then recasts SF and picks up drops and resigns.
Like I said, it's far from finished, so here it is:
(It's just the source too)
Code:
;Raptor Bot
;Work started on Nov 7 2009
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>
#include "GWCAConstants.au3"
Opt("GUIOnEventMode", 1)
Global $bRunning = False
Global $iTotalGold = 0
Global $iTotalGolds = 0
Global $iTotalRuns = 0
Global $tTotal = 0
Global $tRun = 0
Global $MAP_TOPK = 82
Global $MODEL_DRYDER = 2060
Global $SKILL_GOS = 1
Global $SKILL_DP = 2
Global $SKILL_SF = 3
Global $SKILL_GOLE = 4
Global $SKILL_EBSOH = 5
Global $SKILL_SLIVER = 6
Global $SKILL_BUH = 7
Global $SKILL_DC = 8
$cGUI = GUICreate("GWCA ToPK Bot", 250, 295)
GUICtrlCreateGroup("Settings", 2, 1, 246, 105)
$labelCharacter = GUICtrlCreateLabel("Character Name:", 8, 18)
$inputCharacter = GUICtrlCreateInput("", 92, 15, 150, 19, $ES_CENTER)
$checkIdentify = GUICtrlCreateCheckbox("Identify items", 8, 38)
$checkSell = GUICtrlCreateCheckbox("Sell items", 8, 58)
$checkStoreGold = GUICtrlCreateCheckbox("Store gold items", 8, 78)
$checkNoIdentGold = GUICtrlCreateCheckbox("Don't identify gold items", 115, 38)
$checkDisableGfx = GUICtrlCreateCheckbox("Disable graphics", 115, 78)
GUICtrlSetOnEvent(-1, "EventHandler")
GUICtrlCreateGroup("Statistics", 2, 107, 246, 100)
$labelTotalGold = GUICtrlCreateLabel("Total gold: 0", 8, 126, 100)
$labelTotalGolds = GUICtrlCreateLabel("Total gold items: 0", 8, 164, 100)
$labelTotalRuns = GUICtrlCreateLabel("Total runs: 0", 8, 183, 100)
$labelGoldHour = GUICtrlCreateLabel("Gold/hour: 0", 140, 126, 100)
$labelGoldsHour = GUICtrlCreateLabel("Golds/hour: 0", 140, 164, 100)
$labelRunsHour = GUICtrlCreateLabel("Runs/hour: 0", 140, 183, 100)
GUICtrlCreateGroup("Status", 2, 208, 246, 40)
$labelStatus = GUICtrlCreateLabel(" ", 8, 225, 200)
$buttonRun = GUICtrlCreateButton("Start!", (250 - 80)/2, 260, 80, 25)
GUICtrlSetOnEvent(-1, "EventHandler")
GUISetOnEvent($GUI_EVENT_CLOSE, "EventHandler")
GUIRegisterMsg(0x500, "WndCallback")
GUISetState(True, $cGUI)
MoveTo(1681,2333)
While 1
Sleep(100)
If $bRunning Then
$cbType = "int"
CmdCB($CA_GETGOLD)
$oldGold = $cbVar[0]
CmdCB($CA_GETTITLEASURA)
$oldPoints = $cbVar[0]
If $iTotalRuns = 0 Then $tTotal = TimerInit()
$tRun = TimerInit()
BotLoop()
;If Mod($iTotalRuns, 5) = 0 Then BotMerchant()
$cbType = "int"
CmdCB($CA_GETGOLD)
$iTotalGold += ($cbVar[0] - $oldGold)
$iTotalRuns += 1
UpdateStatistics()
EndIf
WEnd
Func BotLoop()
UpdateStatus("Commencing run...")
$cbType = "int"
CmdCB($CA_GETMAPID)
If $cbVar[0] <> $MAP_TOPK Then TravelTo($MAP_TOPK)
Sleep(Random(1500,2500))
Cmd($CA_SWITCHMODE, 1)
MoveTo(1703,2422)
UpdateStatus("Moving to portal")
MoveTo(2252,4346, 10)
UpdateStatus("Waiting for load")
$cbType = "int"
Do
Sleep(400)
CmdCB($CA_GETMAPLOADING)
Until $cbVar[0] = 1
Sleep(Random(2000,2500))
UpdateStatus("Moving to First Group")
MoveTo(2054,-3820)
UpdateStatus("Putting up SF")
Cmd($CA_USESKILLBARSKILL, $SKILL_GOS)
Sleep(Random(1000, 1500))
Cmd($CA_USESKILLBARSKILL, $SKILL_DP)
$cbType = "int"
Do
Sleep(250)
CmdCB($CA_SKILLRECHARGE, $SKILL_GOS)
Until $cbVar[0] <> 0
UseSkill($SKILL_SF)
UpdateStatus("Heading For Ectos")
MoveTo(1533,-4842)
Sleep(Random(800,1000))
MoveTo(285,-3965)
Sleep(Random(700,800))
MoveTo(28,-2264)
Sleep(Random(400,500))
$cbType = "int"
Do
Sleep(250)
CmdCB($CA_SKILLRECHARGE, $SKILL_SF)
Until $cbVar[0] = 0
UseSkill($SKILL_GOS)
UseSkill($SKILL_DP)
UseSkill($SKILL_SF)
MoveTo(210,-2825)
Sleep(Random(400,500))
MoveTo(-396,-2363)
UpdateStatus("Aggroing Dryders")
$cbType = "int"
$aDryder = CmdCB($CA_GETNEARESTAGENTBYPLAYERNUMBER, $MODEL_DRYDER)
If @error Then Return
Cmd($CA_ATTACK, $aDryder[0])
$cbType = "int"
Do
Sleep(250)
CmdCB($CA_SKILLRECHARGE, $SKILL_SF)
Until $cbVar[0] = 0
UseSkill($SKILL_GOS)
UseSkill($SKILL_DP)
UseSkill($SKILL_SF)
UpdateStatus("Putting up Sliver")
UseSkill($SKILL_DC, $aDryder[0])
UseSkill($SKILL_GOLE)
UseSkill($SKILL_EBSOH)
UseSkill($SKILL_SLIVER)
Cmd($CA_USESKILLBARSKILL, $SKILL_BUH)
Sleep(Random(800,1000))
Do
Sleep(250)
CmdCB($CA_SKILLRECHARGE, $SKILL_SF)
Until $cbVar[0] = 0
UpdateStatus("Killing and maintaining SF")
UseSkill($SKILL_GOS)
UseSkill($SKILL_DP)
UseSkill($SKILL_SF)
UseSkill($SKILL_GOLE)
UseSkill($SKILL_EBSOH)
UseSkill($SKILL_SLIVER)
UseSkill($SKILL_BUH)
UseSkill($SKILL_GOS)
UseSkill($SKILL_DP)
UseSkill($SKILL_SF)
UseSkill($SKILL_GOLE)
UseSkill($SKILL_EBSOH)
UseSkill($SKILL_SLIVER)
UseSkill($SKILL_BUH)
UpdateStatus("Picking up items")
PickupItems(-1, 600)
Sleep(Random(4500,5000))
PickupItems(-1, 600)
UpdateStatus("Resigning")
Cmd($CA_RESIGN)
Do
Sleep(250)
CmdCB($CA_GETDEAD)
Until $cbVar[0] = 1
Sleep(Random(600,800))
UpdateStatus("Returning to ToPK")
$tDeadlock = TimerInit()
Cmd($CA_RETURNTOOUTPOST)
Do
Sleep(400)
CmdCB($CA_GETMAPLOADING)
If $cbVar[0] = 1 AND TimerDiff($tDeadlock) > 2500 Then Cmd($CA_RETURNTOOUTPOST)
Until $cbVar[0] = 0
Sleep(Random(2000,2500))
EndFunc
Func BotMerchant()
UpdateStatus("Moving to merchant")
MoveTo(1520,1686)
Sleep(Random(800,1000))
MoveTo(1687,26)
Sleep(Random(800,1000))
MoveTo(704,-376)
Sleep(Random(800,1000))
MoveTo(-370,317)
$iMerch = GetNearestNPCToCoords(-370,317)
UpdateStatus("Talking to merchant")
Cmd($CA_GONPC, $iMerch)
$cbType = "float"
Do
Sleep(250)
CmdCB($CA_GETCOORDS, -2)
Until ComputeDistance($cbVar[0], $cbVar[1], -370,317) < 250
Sleep(Random(800,1000))
$cbType = "int"
If GUICtrlRead($checkIdentify) = 1 Then
UpdateStatus("Identifying items")
For $i = 1 To 20 Step 1
CmdCB($CA_GETIDKIT)
If $cbVar[0] = 0 Then
Cmd($CA_BUYIDKIT)
Sleep(100)
CmdCB($CA_GETIDKIT)
MoveItemById($cbVar[0], $BAG_BAG2, 10)
EndIf
$bIdentItem = True
If GUICtrlRead($checkNoIdentGold) = 1 Then
CmdCB($CA_GETBACKPACKITEMINFO, $i)
If $cbVar[0] = $RARITY_GOLD Then
$bIdentItem = False
EndIf
EndIf
If $bIdentItem Then Cmd($CA_IDENTIFYITEM, $BAG_BACKPACK, $i)
Sleep(5000)
Next
For $i = 1 To 5 Step 1
CmdCB($CA_GETIDKIT)
If $cbVar[0] = 0 Then
Cmd($CA_BUYIDKIT)
Sleep(100)
CmdCB($CA_GETIDKIT)
MoveItemById($cbVar[0], $BAG_BAG2, 10)
EndIf
$bIdentItem = True
If GUICtrlRead($checkNoIdentGold) = 1 Then
CmdCB($CA_GETBELTPOUCHITEMINFO, $i)
If $cbVar[0] = $RARITY_GOLD Then
$bIdentItem = False
EndIf
EndIf
If $bIdentItem Then Cmd($CA_IDENTIFYITEM, $BAG_BELTPOUCH, $i)
Sleep(500)
Next
For $i = 1 To 10 Step 1
CmdCB($CA_GETIDKIT)
If $cbVar[0] = 0 Then
Cmd($CA_BUYIDKIT)
Sleep(100)
CmdCB($CA_GETIDKIT)
MoveItemById($cbVar[0], $BAG_BAG2, 10)
EndIf
$bIdentItem = True
If GUICtrlRead($checkNoIdentGold) = 1 Then
CmdCB($CA_GETBAG1ITEMINFO, $i)
If $cbVar[0] = $RARITY_GOLD Then
$bIdentItem = False
EndIf
EndIf
If $bIdentItem Then Cmd($CA_IDENTIFYITEM, $BAG_BAG1, $i)
Sleep(500)
Next
EndIf
If GUICtrlRead($checkSell) = 1 Then
UpdateStatus("Selling items")
EndIf
EndFunc
Func MoveTo($x, $y, $random = 50)
Local $iBlocked = 0
$cbType = "float"
MoveEx($x, $y, $random)
CmdCB($CA_GETCOORDS, -2)
Do
Sleep(250)
$oldCoords = $cbVar
$cbType = "int"
CmdCB($CA_GETDEAD)
If $cbVar[0] = 1 Then Return
$cbType = "float"
CmdCB($CA_GETCOORDS, -2)
If $oldCoords[0] = $cbVar[0] AND $oldCoords[1] = $cbVar[1] Then
$iBlocked += 1
MoveEx($x, $y, $random)
EndIf
Until ComputeDistance($cbVar[0], $cbVar[1], $x, $y) < 250 OR $iBlocked > 20
EndFunc
Func ComputeDistance($x1, $y1, $x2, $y2)
Return Sqrt(($y2 - $y1)^2 + ($x2 - $x1)^2)
EndFunc
Func UpdateStatus($text)
GUICtrlSetData($labelStatus, $text)
EndFunc
Func UpdateStatistics()
GUICtrlSetData($labelTotalGold, "Total gold: "&$iTotalGold)
GUICtrlSetData($labelTotalGolds, "Total golds: "&$iTotalGolds)
GUICtrlSetData($labelTotalRuns, "Total runs: "&$iTotalRuns)
GUICtrlSetData($labelGoldHour, "Gold/hour: "&Round($iTotalGold / (TimerDiff($tTotal) / 3600000)))
GUICtrlSetData($labelGoldsHour, "Golds/hour: "&Round($iTotalGolds / (TimerDiff($tTotal) / 3600000)))
GUICtrlSetData($labelRunsHour, "Runs/hour: "&Round($iTotalRuns / (TimerDiff($tTotal) / 3600000)))
EndFunc
Func UseSkill($iSkillSlot, $iTarget = 0)
$oldCbType = $cbType
$tDeadlock = TimerInit()
$cbType = "int"
Cmd($CA_USESKILLBARSKILL, $iSkillSlot, $iTarget)
Do
Sleep(250)
CmdCB($CA_GETDEAD)
If $cbVar[0] = 1 Then Return
CmdCB($CA_SKILLRECHARGE, $iSkillSlot)
Until $cbVar[0] <> 0 OR TimerDiff($tDeadlock) > 15000
$cbType = $oldCbType
EndFunc
Func EventHandler()
Switch(@GUI_CtrlId)
Case $GUI_EVENT_CLOSE
Exit
Case $checkDisableGfx
If GUICtrlRead($checkDisableGfx) = 1 Then
Cmd($CA_SETENGINEHOOK, 1)
Else
Cmd($CA_SETENGINEHOOK, 0)
EndIf
Case $buttonRun
$bRunning = Not $bRunning
If $bRunning Then
$sGW = "Guild Wars - "&GUICtrlRead($inputCharacter)
GUICtrlSetData($buttonRun, "Stop!")
GUICtrlSetState($inputCharacter, $GUI_DISABLE)
GUICtrlSetState($checkIdentify, $GUI_DISABLE)
GUICtrlSetState($checkSell, $GUI_DISABLE)
GUICtrlSetState($checkStoreGold, $GUI_DISABLE)
GUICtrlSetState($checkNoIdentGold, $GUI_DISABLE)
;GUICtrlSetState($checkDisableGfx, $GUI_DISABLE)
;If GUICtrlRead($checkDisableGfx) = 1 Then Cmd($CA_SETENGINEHOOK, 1)
Else
GUICtrlSetData($buttonRun, "Start!")
GUICtrlSetState($inputCharacter, $GUI_ENABLE)
GUICtrlSetState($checkIdentify, $GUI_ENABLE)
GUICtrlSetState($checkSell, $GUI_ENABLE)
GUICtrlSetState($checkStoreGold, $GUI_ENABLE)
GUICtrlSetState($checkNoIdentGold, $GUI_ENABLE)
;GUICtrlSetState($checkDisableGfx, $GUI_ENABLE)
;If GUICtrlRead($checkDisableGfx) = 1 Then Cmd($CA_SETENGINEHOOK, 0)
EndIf
EndSwitch
EndFunc