I looked into something like that but I was noticing a lot of the merchant have different ids and didn't want to invest a lot of time into in lol it works good enough for what im doing with it
I looked into something like that but I was noticing a lot of the merchant have different ids and didn't want to invest a lot of time into in lol it works good enough for what im doing with it
Otherwise you could go by guild hall - I have all waypoints updated except the Rune Traders, only updated two guild halls there (annotated with comments).
Code:
#Region Checking Guild Hall
;~ Checks to see which Guild Hall you are in and the spawn point
Func CheckGuildHall()
If GetMapID() == $GH_ID_Warriors_Isle Then
$WarriorsIsle = True
Out("Warrior's Isle")
EndIf
If GetMapID() == $GH_ID_Hunters_Isle Then
$HuntersIsle = True
Out("Hunter's Isle")
EndIf
If GetMapID() == $GH_ID_Wizards_Isle Then
$WizardsIsle = True
Out("Wizard's Isle")
EndIf
If GetMapID() == $GH_ID_Burning_Isle Then
$BurningIsle = True
Out("Burning Isle")
EndIf
If GetMapID() == $GH_ID_Frozen_Isle Then
$FrozenIsle = True
Out("Frozen Isle")
EndIf
If GetMapID() == $GH_ID_Nomads_Isle Then
$NomadsIsle = True
Out("Nomad's Isle")
EndIf
If GetMapID() == $GH_ID_Druids_Isle Then
$DruidsIsle = True
Out("Druid's Isle")
EndIf
If GetMapID() == $GH_ID_Isle_Of_The_Dead Then
$IsleOfTheDead = True
Out("Isle of the Dead")
EndIf
If GetMapID() == $GH_ID_Isle_Of_Weeping_Stone Then
$IsleOfWeepingStone = True
Out("Isle of Weeping Stone")
EndIf
If GetMapID() == $GH_ID_Isle_Of_Jade Then
$IsleOfJade = True
Out("Isle of Jade")
EndIf
If GetMapID() == $GH_ID_Imperial_Isle Then
$ImperialIsle = True
Out("Imperial Isle")
EndIf
If GetMapID() == $GH_ID_Isle_Of_Meditation Then
$IsleOfMeditation = True
Out("Isle of Meditation")
EndIf
If GetMapID() == $GH_ID_Uncharted_Isle Then
$UnchartedIsle = True
Out("Uncharted Isle")
EndIf
If GetMapID() == $GH_ID_Isle_Of_Wurms Then
$IsleOfWurms = True
Out("Isle of Wurms")
If $IsleOfWurms = True Then
CheckIsleOfWurms()
EndIf
EndIf
If GetMapID() == $GH_ID_Corrupted_Isle Then
$CorruptedIsle = True
Out("Corrupted Isle")
If $CorruptedIsle = True Then
CheckCorruptedIsle()
EndIf
EndIf
If GetMapID() == $GH_ID_Isle_Of_Solitude Then
$IsleOfSolitude = True
Out("Isle of Solitude")
EndIf
EndFunc ;~ Check Guild halls
;~ If there is a missing Guild Hall from the below listing, it is because there is only 1 spawn point in that Guild Hall
Func CheckIsleOfWurms()
If CheckArea(8682, 2265) Then
OUT("Start Point 1")
If Waypoint1() Then
Return True
Else
Return False
EndIf
ElseIf CheckArea(6697, 3631) Then
OUT("Start Point 2")
If Waypoint2() Then
Return True
Else
Return False
EndIf
ElseIf CheckArea(6716, 2929) Then
OUT("Start Point 3")
If Waypoint3() Then
Return True
Else
Return False
EndIf
Else
OUT("Where the fuck am I?")
Return False
EndIf
EndFunc
Func CheckCorruptedIsle()
If CheckArea(-4830, 5985) Then
OUT("Start Point 1")
If Waypoint4() Then
Return True
Else
Return False
EndIf
ElseIf CheckArea(-3778, 6214) Then
OUT("Start Point 2")
If Waypoint5() Then
Return True
Else
Return False
EndIf
ElseIf CheckArea(-5209, 4468) Then
OUT("Start Point 3")
If Waypoint6() Then
Return True
Else
Return False
EndIf
Else
OUT("Where the fuck am I?")
Return False
EndIf
EndFunc
Func Waypoint1()
MoveTo(8263, 2971)
EndFunc
Func Waypoint2()
MoveTo(7086, 2983)
MoveTo(8263, 2971)
EndFunc
Func Waypoint3()
MoveTo(8263, 2971)
EndFunc
Func Waypoint4()
MoveTo(-4830, 5985)
EndFunc
Func Waypoint5()
MoveTo(-3778, 6214)
EndFunc
Func Waypoint6()
MoveTo(-4352, 5232)
EndFunc
Func Chest()
Dim $Waypoints_by_XunlaiChest[16][3] = [ _
[$BurningIsle, -5285, -2545], _
[$DruidsIsle, -1792, 5444], _
[$FrozenIsle, -115, 3775], _
[$HuntersIsle, 4855, 7527], _
[$IsleOfTheDead, -4562, -1525], _
[$NomadsIsle, 4630, 4580], _
[$WarriorsIsle, 4224, 7006], _
[$WizardsIsle, 4858, 9446], _
[$ImperialIsle, 2184, 13125], _
[$IsleOfJade, 8614, 2660], _
[$IsleOfMeditation, -726, 7630], _
[$IsleOfWeepingStone, -1573, 7303], _
[$CorruptedIsle, -4868, 5998], _
[$IsleOfSolitude, 4478, 3055], _
[$IsleOfWurms, 8586, 3603], _
[$UnchartedIsle, 4522, -4451]]
For $i = 0 To (UBound($Waypoints_by_XunlaiChest) - 1)
If ($Waypoints_by_XunlaiChest[$i][0] == True) Then
Do
GenericRandomPath($Waypoints_by_XunlaiChest[$i][1], $Waypoints_by_XunlaiChest[$i][2], Random(60, 80, 2))
Until CheckArea($Waypoints_by_XunlaiChest[$i][1], $Waypoints_by_XunlaiChest[$i][2])
EndIf
Next
Local $aChestName = "Xunlai Chest"
Local $lChest = GetAgentByName($aChestName)
If IsDllStruct($lChest) Then
Out("Going to " & $aChestName)
GoToNPC($lChest)
RndSleep(Random(3000, 4200))
EndIf
EndFunc ;~ Xunlai Chest
Func Merchant()
Dim $Waypoints_by_Merchant[29][3] = [ _
[$BurningIsle, -4439, -2088], _
[$BurningIsle, -4772, -362], _
[$BurningIsle, -3637, 1088], _
[$BurningIsle, -2506, 988], _
[$DruidsIsle, -2037, 2964], _
[$FrozenIsle, 99, 2660], _
[$FrozenIsle, 71, 834], _
[$FrozenIsle, -299, 79], _
[$HuntersIsle, 5156, 7789], _
[$HuntersIsle, 4416, 5656], _
[$IsleOfTheDead, -4066, -1203], _
[$NomadsIsle, 5129, 4748], _
[$WarriorsIsle, 4159, 8540], _
[$WarriorsIsle, 5575, 9054], _
[$WizardsIsle, 4288, 8263], _
[$WizardsIsle, 3583, 9040], _
[$ImperialIsle, 1415, 12448], _
[$ImperialIsle, 1746, 11516], _
[$IsleOfJade, 8825, 3384], _
[$IsleOfJade, 10142, 3116], _
[$IsleOfMeditation, -331, 8084], _
[$IsleOfMeditation, -1745, 8681], _
[$IsleOfMeditation, -2197, 8076], _
[$IsleOfWeepingStone, -3095, 8535], _
[$IsleOfWeepingStone, -3988, 7588], _
[$CorruptedIsle, -4670, 5630], _
[$IsleOfSolitude, 2970, 1532], _
[$IsleOfWurms, 8284, 3578], _
[$UnchartedIsle, 1503, -2830]]
For $i = 0 To (UBound($Waypoints_by_Merchant) - 1)
If ($Waypoints_by_Merchant[$i][0] == True) Then
Do
GenericRandomPath($Waypoints_by_Merchant[$i][1], $Waypoints_by_Merchant[$i][2], Random(60, 80, 2))
Until CheckArea($Waypoints_by_Merchant[$i][1], $Waypoints_by_Merchant[$i][2])
EndIf
Next
Out("Going to Merchant")
Do
RndSleep(Random(250,500))
Local $Me = GetAgentByID(-2)
Local $guy = GetNearestNPCToCoords(DllStructGetData($Me, 'X'), DllStructGetData($Me, 'Y'))
Until DllStructGetData($guy, 'Id') <> 0
ChangeTarget($guy)
RndSleep(Random(250,500))
GoNPC($guy)
RndSleep(Random(250,500))
Do
MoveTo(DllStructGetData($guy, 'X'), DllStructGetData($guy, 'Y'), 40)
RndSleep(Random(500,750))
GoNPC($guy)
RndSleep(Random(250,500))
Local $Me = GetAgentByID(-2)
Until ComputeDistance(DllStructGetData($Me, 'X'), DllStructGetData($Me, 'Y'), DllStructGetData($guy, 'X'), DllStructGetData($guy, 'Y')) < 250
RndSleep(Random(1000,1500))
EndFunc ;~ Merchant
Func RuneTrader()
Dim $Waypoints_by_RuneTrader[35][3] = [ _
[$BurningIsle, -3793, 1069], _
[$BurningIsle, -2798, -74], _
[$DruidsIsle, -989, 4493], _
[$FrozenIsle, 71, 834], _
[$FrozenIsle, 99, 2660], _
[$FrozenIsle, -385, 3254], _
[$FrozenIsle, -983, 3195], _
[$HuntersIsle, 3267, 6557], _
[$IsleOfTheDead, -3697, -2337], _ ; updated
[$NomadsIsle, 1930, 4129], _
[$NomadsIsle, 462, 4094], _
[$WarriorsIsle, 4108, 8404], _
[$WarriorsIsle, 3403, 6583], _
[$WarriorsIsle, 3415, 5617], _
[$WizardsIsle, 3610, 9619], _
[$ImperialIsle, 759, 11465], _
[$IsleOfJade, 8919, 3459], _
[$IsleOfJade, 6789, 2781], _
[$IsleOfJade, 6566, 2248], _
[$IsleOfMeditation, -2197, 8076], _
[$IsleOfMeditation, -1745, 8681], _
[$IsleOfMeditation, -331, 8084], _
[$IsleOfMeditation, 422, 8769], _
[$IsleOfMeditation, 549, 9531], _
[$IsleOfWeepingStone, -3988, 7588], _
[$IsleOfWeepingStone, -3095, 8535], _
[$IsleOfWeepingStone, -2431, 7946], _
[$IsleOfWeepingStone, -1618, 8797], _
[$CorruptedIsle, -4424, 5645], _
[$CorruptedIsle, -4443, 4679], _
[$IsleOfSolitude, 3172, 3728], _
[$IsleOfSolitude, 3240, 5433], _
[$IsleOfWurms, 8353, 2995], _ ; updated
[$IsleOfWurms, 6708, 3093], _
[$UnchartedIsle, 2530, -2403]]
For $i = 0 To (UBound($Waypoints_by_RuneTrader) - 1)
If ($Waypoints_by_RuneTrader[$i][0] == True) Then
Do
GenericRandomPath($Waypoints_by_RuneTrader[$i][1], $Waypoints_by_RuneTrader[$i][2], Random(60, 80, 2))
Until CheckArea($Waypoints_by_RuneTrader[$i][1], $Waypoints_by_RuneTrader[$i][2])
EndIf
Next
Local $lRuneTrader = "Rune Trader"
Local $lRune = GetAgentByName($lRuneTrader)
If IsDllStruct($lRune) Then
Out("Going to " & $lRuneTrader)
GoToNPC($lRune)
RndSleep(Random(3000, 4200))
EndIf
EndFunc ;~ Runetrader
Func RareMaterialTrader()
Dim $Waypoints_by_RareMatTrader[36][3] = [ _
[$BurningIsle, -3793, 1069], _
[$BurningIsle, -2798, -74], _
[$DruidsIsle, -989, 4493], _
[$FrozenIsle, 71, 834], _
[$FrozenIsle, 99, 2660], _
[$FrozenIsle, -385, 3254], _
[$FrozenIsle, -983, 3195], _
[$HuntersIsle, 3267, 6557], _
[$IsleOfTheDead, -3415, -1658], _
[$NomadsIsle, 1930, 4129], _
[$NomadsIsle, 462, 4094], _
[$WarriorsIsle, 4108, 8404], _
[$WarriorsIsle, 3403, 6583], _
[$WarriorsIsle, 3415, 5617], _
[$WizardsIsle, 3610, 9619], _
[$ImperialIsle, 759, 11465], _
[$IsleOfJade, 8919, 3459], _
[$IsleOfJade, 6789, 2781], _
[$IsleOfJade, 6566, 2248], _
[$IsleOfMeditation, -2197, 8076], _
[$IsleOfMeditation, -1745, 8681], _
[$IsleOfMeditation, -331, 8084], _
[$IsleOfMeditation, 422, 8769], _
[$IsleOfMeditation, 549, 9531], _
[$IsleOfWeepingStone, -3988, 7588], _
[$IsleOfWeepingStone, -3095, 8535], _
[$IsleOfWeepingStone, -2431, 7946], _
[$IsleOfWeepingStone, -1618, 8797], _
[$CorruptedIsle, -4424, 5645], _
[$CorruptedIsle, -4443, 4679], _
[$IsleOfSolitude, 3172, 3728], _
[$IsleOfSolitude, 3221, 4789], _
[$IsleOfSolitude, 3745, 4542], _
[$IsleOfWurms, 8353, 2995], _
[$IsleOfWurms, 6708, 3093], _
[$UnchartedIsle, 2530, -2403]]
For $i = 0 To (UBound($Waypoints_by_RareMatTrader) - 1)
If ($Waypoints_by_RareMatTrader[$i][0] == True) Then
Do
GenericRandomPath($Waypoints_by_RareMatTrader[$i][1], $Waypoints_by_RareMatTrader[$i][2], Random(60, 80, 2))
Until CheckArea($Waypoints_by_RareMatTrader[$i][1], $Waypoints_by_RareMatTrader[$i][2])
EndIf
Next
Local $lRareTrader = "Rare Material Trader"
Local $lRare = GetAgentByName($lRareTrader)
If IsDllStruct($lRare) Then
Out("Going to " & $lRareTrader)
GoToNPC($lRare)
RndSleep(Random(3000, 4200))
EndIf
;~This section does the buying
TraderRequest($MATID)
Sleep(500 + 3 * GetPing())
While GetGoldCharacter() > 20*1000
TraderRequest($MATID)
Sleep(500 + 3 * GetPing())
TraderBuy()
WEnd
EndFunc ;~ Rare Material trader
Func GenericRandomPath($aPosX, $aPosY, $aRandom = 50, $STOPSMIN = 1, $STOPSMAX = 5, $NUMBEROFSTOPS = -1)
If $NUMBEROFSTOPS = -1 Then $NUMBEROFSTOPS = Random($STOPSMIN, $STOPSMAX, 1)
Local $lAgent = GetAgentByID(-2)
Local $MYPOSX = DllStructGetData($lAgent, "X")
Local $MYPOSY = DllStructGetData($lAgent, "Y")
Local $DISTANCE = ComputeDistance($MYPOSX, $MYPOSY, $aPosX, $aPosY)
If $NUMBEROFSTOPS = 0 Or $DISTANCE < 200 Then
MoveTo($aPosX, $aPosY, $aRandom)
Else
Local $M = Random(0, 1)
Local $N = $NUMBEROFSTOPS - $M
Local $STEPX = (($M * $aPosX) + ($N * $MYPOSX)) / ($M + $N)
Local $STEPY = (($M * $aPosY) + ($N * $MYPOSY)) / ($M + $N)
MoveTo($STEPX, $STEPY, $aRandom)
GenericRandomPath($aPosX, $aPosY, $aRandom, $STOPSMIN, $STOPSMAX, $NUMBEROFSTOPS - 1)
EndIf
EndFunc ;==>GENERICRANDOMPATH
Could you please post which parts you changed in your GWA to get it to work? I changed the scanpattern, setvalue and headers but it's not working properly...
Could you please post which parts you changed in your GWA to get it to work? I changed the scanpattern, setvalue and headers but it's not working properly...
really nice that you shared all that cudos to you,
i will suggest finally someone needs to make a small tutorial on how to find patterns with olly or ida (i don't know which program you use anyway) and how you wrote the asm or at least link some tutorials that you read up or you know that will be helpful for all other ppl so even if GWA2 brakes with a new update ppl will have a guidance on how to update stuff, you will help your self the community and you will be a true maven,
i'm not so much in reverse engineering to make them by my own i'm trying to learn on how the packet encryption works in the game (mostly for educational purposes) and ppl don't want to share any information it's ridiculous.
Im very new to this also. The only knowledge i had was what mov,jmp,push,pop is and what ebp,esp and the other registers were.
The only reason i succeeded is because there was already existing code in GWA2 that i could base myself on. Without it, it would be pretty difficult for me also.
Lets take UseHeroSkill for example, because it's simple. I saw that it takes 3 arguments in GWA2, heroID, skillSlot and targetID.
Step 1. Like almost any function in GW, it will send a packet to the server about what u want to do. So because GWA2 already knows where the SendPacket function is, it was pretty easy. Just ConsoleWrite the "PacketSendFunction" value and you know where to find it in memory.
Step 2. Go to the SendPacket function (i use x64dbg.com). Set a breakpoint.
Step 3. Make the hero cast a spell on you. The breakpoint will trigger. And then you look at the stack and look for a function that pushed 3 arguments on the stack and where the values of those arguments somewhat resemble heroID, skillSlot and targetID. When you see them, you should be able to see which function pushed those 3 arguments on the stack.
Step 4. Go to that function in memory. Now this function is what u want. It's that function you are trying to replicate with your bot. And what this function did seemed to pretty easy to me. It pushes 3 things on the stack and then calls a certain address. That address it's calling, is obviously your UseHeroSkill function.
Step 5. At this point you can already create your asm code. It's basicly push arg1 push arg2 push arg3 call function and then increase esp by C(= 3) to push back the stack for your 3 arguments. note that your arguments are stored in eax by GWA2.
Step 6. In step 4 you found the address of the UseHeroSkill function. For testing purposes you can SetValue('UseHeroSkillFunction', "0x...THEADRESS...") without needing a pattern or anything. And then you could already test to code basically and see if GWA2 uses the function correctly. Or.. you could directly create a pattern for it. It's up to you. The patterns in GWA2 are basically a set of unique bytes. So in x32dbg you go to the UseHeroSkill function and find some unique bytes that cant be found anywhere else in the memory. Be sure those bytes dont contain any addresses. And that's your pattern. Then your offset is the amount of bytes between the start address of that function and the address of your unique bytes.
Step 7. So now you have your ASM code and your patterns. Now it's time to test it. First i set a breakpoint at the start of the HeroSkillFunction. And use a hero skill in game and then i look at the stack and see what order the arguments are in. Write it down.
Step 8. Now u want call the function using GWA2. But first put your breakpoint again. And now u look at the stack and make sure the arguments are in the same order and have the same values as when the game called the function. If they are the same, you did everything correct and the game should have used the hero skill.
I was talking about Corey's salvage tool, I changed the 3 parts in my GWA2 code regarding salvage (Setvalue, scan and command as in your post about useheroskill), but the salvage tool does not work properly. I wanted to update my version of GWA2 instead of corey's, as it's been slightly modified.
I was talking about Corey's salvage tool, I changed the 3 parts in my GWA2 code regarding salvage (Setvalue, scan and command as in your post about useheroskill), but the salvage tool does not work properly. I wanted to update my version of GWA2 instead of corey's, as it's been slightly modified.
Code:
Replace the old "_('CommandSalvage:')" part with:
Code:
_('CommandSalvage:')
_('mov ebx,SalvageGlobal')
_('mov ecx,dword[eax+4]')
_('mov dword[ebx],ecx')
_('add ebx,4')
_('mov ecx,dword[eax+8]')
_('mov dword[ebx],ecx')
_('mov ebx,dword[eax+4]')
_('push ebx')
_('mov ebx,dword[eax+8]')
_('push ebx')
_('mov ebx,dword[eax+c]')
_('push ebx')
_('call SalvageFunction')
_('add esp,C')
_('ljmp CommandReturn')
Replace old SetValue(... with:
Code:
SetValue('SalvageFunction', '0x' & Hex(GetScannedAddress('ScanSalvageFunction', -10), 8))
SetValue('SalvageGlobal', '0x' & Hex(MemoryRead(GetScannedAddress('ScanSalvageGlobal', 1) - 0x4), 8))
Replace old _('Scan... with:
Code:
_('ScanSalvageFunction:')
AddPattern('33C58945FC8B45088945F08B450C8945F48B45108945F88D45EC506A10C745EC7E')
_('ScanSalvageGlobal:')
AddPattern('8B5104538945F48B4108568945E88B410C578945EC8B4110528955E48945F0')
You also need to change the following headers for SalvageMaterials & mods
Code:
Global Const $HEADER_SALVAGE_MATS = 0x81
Global Const $HEADER_SALVAGE_MODS = 0x82
I was talking about Corey's salvage tool, I changed the 3 parts in my GWA2 code regarding salvage (Setvalue, scan and command as in your post about useheroskill), but the salvage tool does not work properly. I wanted to update my version of GWA2 instead of corey's, as it's been slightly modified.
You always PM me your discord ID/username and we can have a look at it.
just use this input the chest location and it will walk over to it then talk to the chest or npc but u can access the storage functions with out going to the chest and and opening it but u have to be where a storage chest is available
Replace the old "_('CommandSalvage:')" part with:
Code:
_('CommandSalvage:')
_('mov ebx,SalvageGlobal')
_('mov ecx,dword[eax+4]')
_('mov dword[ebx],ecx')
_('add ebx,4')
_('mov ecx,dword[eax+8]')
_('mov dword[ebx],ecx')
_('mov ebx,dword[eax+4]')
_('push ebx')
_('mov ebx,dword[eax+8]')
_('push ebx')
_('mov ebx,dword[eax+c]')
_('push ebx')
_('call SalvageFunction')
_('add esp,C')
_('ljmp CommandReturn')
Replace old SetValue(... with:
Code:
SetValue('SalvageFunction', '0x' & Hex(GetScannedAddress('ScanSalvageFunction', -10), 8))
SetValue('SalvageGlobal', '0x' & Hex(MemoryRead(GetScannedAddress('ScanSalvageGlobal', 1) - 0x4), 8))
Replace old _('Scan... with:
Code:
_('ScanSalvageFunction:')
AddPattern('33C58945FC8B45088945F08B450C8945F48B45108945F88D45EC506A10C745EC7E')
_('ScanSalvageGlobal:')
AddPattern('8B5104538945F48B4108568945E88B410C578945EC8B4110528955E48945F0')
You also need to change the following headers for SalvageMaterials & mods
Code:
Global Const $HEADER_SALVAGE_MATS = 0x81
Global Const $HEADER_SALVAGE_MODS = 0x82
Thanks, that's exactly what I changed, and oddly it stopped working after having salvaged a few trophies. I tried rebooting the game and everything and it wouldn't work at all. Very strange...
I mean it works so maybe something wrong with your script also this wont work with the 10 use salvage kits works for the 25 use kits I would just use the gwa2 I posted and add the functions from your custom gwa2 to that one
I'm just amazed at how many different Versions of gwa2 is out kind of crazy to have 50bots using 50 different copies of gwa2 we need to get two working versions one with the headers and one with out and standardize and update it
If Custom Functions are needed the just need to be in the bot script instead of gwa2 just my opinions
you want to make sure you have enough Sleep() between startsalvage() and materialsalvage(), and after materialsalvage(), or the client will overload (usually error = 007 and you are kicked out to character select pane)
if you get other than error = 007 (i.e. game crashing and prompts you with send report to anet) then in my experience it's something more serious which is wrong with the code
Something to point out is that tracing back the calling address of the sendpacket function will let you find and fix a lot of functions. There is a caveat though since gwa2 uses a pseudo assembler to turn asm instructions into raw byte code it must be supported in the assembler. So if there is an instruction needed that currently isn't there you will have to add it to that code portion of the assembler. Other non packet related functions can easily be found by finding a value used for it and then setting an on access check like cheat engine will let you do for example.This lets you find functions that don't directly lead to a packet such as getting an agent by name.
[GWA2] How to chase after updated header values? 11/14/2024 - GW Bots - 11 Replies Hi all,
First post, but have been following the tips all over this forum for about 6 months since I started writing my own bots.
Recently the server headers changed, and although it looks like the community have pulled through and released a new version of GWA2 to reflect it, there are other headers that I'm using, that aren't in the vanilla GWA2 code.
SendPacket(0x14, 0x6F, $lItemID, $lQuantity, $lBagID, $aSlot - 1)
The above command would have previously told GW to move $lQuantity...
Leader/followbot - Updated with new GWA2/headers (functional) 07/21/2019 - GW Exploits, Hacks, Bots, Tools & Macros - 29 Replies EDIT: Updated 6/16/18
Hey all,
I updated the follow/leader bot with the new headers (I think there were a few that I didn't bother updating, since the script doesn't seem to use them anywhere). I haven't done extensive testing, but it's working for me so far. Please let me know if you get any errors/crashes, and I'll attempt to fix them.
Enjoy!
GWA2 A/mo Vaettir Bot; Need Help!! 02/19/2012 - GW Bots - 1 Replies http://www.elitepvpers.com/forum/gw-exploits-hacks -bots-tools-macros/1568881-gwa-vaettir-mo-farm-bot .html
ENGLISH:
I can't seem to get this to work. I've spent 3-4 hours, read the entire thread here, tried to search for a detailed guide on how to get this to work but it's not.
What I've done was: Downloaded the 2 files shown in the Original Post... "GWA2 A_Mo Vaettirs Farm by bl4ck3lit3.zip"
Extracted it to desktop
Ran GW.EXE as admin.
Set-up assassin with appropriate gear and...