|
You last visited: Today at 15:16
Advertisement
Updated GWA2
Discussion on Updated GWA2 within the GW Exploits, Hacks, Bots, Tools & Macros forum part of the Guild Wars category.
06/27/2020, 01:08
|
#196
|
elite*gold: 0
Join Date: Sep 2014
Posts: 354
Received Thanks: 120
|
private vs. public...
Quote:
Originally Posted by deroni93
Is anyone aware of a past or present Stygian Vale bot?
I'm about half way into building one from scratch but I'd rather not invest more time if there's already one that works.
I'm open to sharing the source if anyone wants to help finish it but I'd rather not publish something half baked.
Progress so far;
- Functional GUI and initialise (copied from the Vaettir bot, needs tweaking)
- Starts at GoA, exits outpost.
- Safely paths to quest giver, perhaps too safe, I'm not sure if it's possible to run directly to the quest giver, it sleeps for ~16s to let the group on the right move out of the way.
- Accepts quest + takes buff then moves to the safe spot
- Starts pull from the glitch location. *this needs tweaking
- Starts kill sequence once the enemies are balled, needs some refinement for sure.
- Only loots gemstones at the moment
- Attempts 4 waves, or until death
It uses the Me/A build on PvX
|
Bots like this might be better off in private... I know the game is almost 20 years old... however,,, publically posting DOA exploits where gems are won, etc... is something that would make the froggy areanet police jump... IMHO... so if u are this capable to produce something of this nature - perhaps u should reconsider posting it... PVP, direct ecto farming and doa gem farming are major red flags from what I have seen and a counter measure will likely follow a release of anything potent in this realm... including but not limited to header updates... rocks dropped directly in bots paths.. or worse - recoding the area or fixing the exploit you have found and others in the community may have been using (in a bot form) which they made from videos seen on YouTube...
-- just want to preserve the community … but you are a great member... and its your right to do as you wish... just may want to re-think it a bit??
|
|
|
06/30/2020, 20:54
|
#197
|
elite*gold: 0
Join Date: Jan 2010
Posts: 28
Received Thanks: 45
|
Quote:
Originally Posted by phat34
Bots like this might be better off in private... I know the game is almost 20 years old... however,,, publically posting DOA exploits where gems are won, etc... is something that would make the froggy areanet police jump... IMHO... so if u are this capable to produce something of this nature - perhaps u should reconsider posting it... PVP, direct ecto farming and doa gem farming are major red flags from what I have seen and a counter measure will likely follow a release of anything potent in this realm... including but not limited to header updates... rocks dropped directly in bots paths.. or worse - recoding the area or fixing the exploit you have found and others in the community may have been using (in a bot form) which they made from videos seen on YouTube...
-- just want to preserve the community … but you are a great member... and its your right to do as you wish... just may want to re-think it a bit??
|
good point
|
|
|
06/30/2020, 22:58
|
#198
|
elite*gold: 0
Join Date: Jul 2019
Posts: 103
Received Thanks: 83
|
Quote:
Originally Posted by phat34
Bots like this might be better off in private... I know the game is almost 20 years old... however,,, publically posting DOA exploits where gems are won, etc... is something that would make the froggy areanet police jump... IMHO... so if u are this capable to produce something of this nature - perhaps u should reconsider posting it... PVP, direct ecto farming and doa gem farming are major red flags from what I have seen and a counter measure will likely follow a release of anything potent in this realm... including but not limited to header updates... rocks dropped directly in bots paths.. or worse - recoding the area or fixing the exploit you have found and others in the community may have been using (in a bot form) which they made from videos seen on YouTube...
-- just want to preserve the community … but you are a great member... and its your right to do as you wish... just may want to re-think it a bit??
|
Yep, very reason why you never see effective UW farming bots or full run bots like full fow clear,doa, and uw posted. One those bots take a lot of work and also its asking for a ban or fix put in to break them. I fully expect a ban wave coming with the level of bots in gtob right now and pve zones.
|
|
|
07/01/2020, 15:33
|
#199
|
elite*gold: 0
Join Date: Apr 2017
Posts: 19
Received Thanks: 9
|
Quote:
Originally Posted by CoderAndy
@ well if you don't want to use the hook this works for me with the original $mSkillTimer, i posted it to discord for anyone to test it but no luck, i have no problems atm with this code. (Don't forget to use the Ex at the name for testing)
Code:
$mSkillTimer = MemoryRead(GetScannedAddress('ScanSkillTimer', -3))
Code:
Func GetEffectTimeRemainingEx($aEffect)
If IsArray($aEffect) Then Return 0
If $aEffect = 0 Then Return 0
If IsPtr($aEffect) <> 0 Then
$lTimestamp = MemoryRead($aEffect + 20, 'long')
$lDuration = MemoryRead($aEffect + 16, 'float')
ElseIf IsDllStruct($aEffect) <> 0 Then
$lTimestamp = DllStructGetData($aEffect, 'TimeStamp')
$lDuration = DllStructGetData($aEffect, 'Duration')
Else
Local $lPtr = GetSkillEffectPtrEx($aEffect)
If $lPtr = 0 Then Return 0
$lTimestamp = MemoryRead($lPtr + 20, 'long')
$lDuration = MemoryRead($lPtr + 16, 'float')
EndIf
$lReturn = $lDuration * 1000 - (GetSkillTimerEx() - $lTimestamp)
Return $lReturn
EndFunc
Func GetSkillEffectPtrEx($aSkillID, $aHeroNumber = 0, $aHeroID = GetHeroID($aHeroNumber))
Local $lOffset[4] = [0, 24, 44, 1296]
Local $lCount = MemoryReadPtr($mBasePointer, $lOffset)
ReDim $lOffset[5]
$lOffset[3] = 1288
Local $lBuffer
For $i = 0 To $lCount[1] - 1
$lOffset[4] = 36 * $i
$lBuffer = MemoryReadPtr($mBasePointer, $lOffset)
If $lBuffer[1] = $aHeroID Then
$lOffset[4] = 28 + 36 * $i
$lEffectCount = MemoryReadPtr($mBasePointer, $lOffset)
$lOffset[4] = 20 + 36 * $i
$lEffectStructAddress = MemoryReadPtr($mBasePointer, $lOffset, 'ptr')
For $j = 0 To $lEffectCount[1] - 1
$lEffectSkillID = MemoryRead($lEffectStructAddress[1] + 24 * $j, 'long')
If $lEffectSkillID = $aSkillID Then Return Ptr($lEffectStructAddress[1] + 24 * $j)
Next
EndIf
Next
EndFunc
Func GetSkillTimerEx()
Static Local $lExeStart = MemoryRead($mSkillTimer, 'dword')
Local $lTickCount = DllCall($mKernelHandle, 'dword', 'GetTickCount')[0]
Return Int($lTickCount + $lExeStart, 1)
EndFunc
|
Wonderful! Works great! Would you have a solution for GetSkillBarSkillRecharge() ? It's also bugged And this goes beyond my understanding of coding unfortunately
|
|
|
07/01/2020, 20:22
|
#200
|
elite*gold: 0
Join Date: Apr 2017
Posts: 31
Received Thanks: 15
|
Quote:
Originally Posted by list comprehension
Yep, very reason why you never see effective UW farming bots or full run bots like full fow clear,doa, and uw posted. One those bots take a lot of work and also its asking for a ban or fix put in to break them. I fully expect a ban wave coming with the level of bots in gtob right now and pve zones.
|
they will clear out teqs ha and jq bots but wont fix the problem because it would affect gwtoolbox at this point, everything is so closely tied. i would say releasing any of those bots will end up on teqs website for sale and then him spamming it for sale in kamadan which means immediate public attention. sucks but best to keep your tricks a secret or they get fixed. experienced this many times..
|
|
|
07/02/2020, 14:11
|
#201
|
elite*gold: 0
Join Date: Apr 2020
Posts: 26
Received Thanks: 2
|
I would add that GetSkillBarSkillRecharge() only works sometimes; which is funny when you talk about "code" that should work the same everytime.
Most of the time this returns some weird similar value like "492900010" (instead of, for exemple, 30000 if the skill if 30 seconds away from being back up) and sometimes it returns the correct thing.
It never switches from one to another like that, it appears its more related to something bigger (restarting the machine, something like that)
anyway I too am unsure why it doesn't reliably work...any idea?
|
|
|
07/02/2020, 21:05
|
#202
|
elite*gold: 0
Join Date: Sep 2018
Posts: 89
Received Thanks: 75
|
Quote:
Originally Posted by sadosan
I would add that GetSkillBarSkillRecharge() only works sometimes; which is funny when you talk about "code" that should work the same everytime.
Most of the time this returns some weird similar value like "492900010" (instead of, for exemple, 30000 if the skill if 30 seconds away from being back up) and sometimes it returns the correct thing.
It never switches from one to another like that, it appears its more related to something bigger (restarting the machine, something like that)
anyway I too am unsure why it doesn't reliably work...any idea?
|
Wondering if you maybe need to refresh / fetch your agents before calling this function, as I think it may not be refreshed without updating the agent struct. I have experienced something similar with GetisCasting() - it would not update unless the Agentstruct was updated.
|
|
|
07/03/2020, 02:15
|
#203
|
elite*gold: 0
Join Date: Apr 2020
Posts: 26
Received Thanks: 2
|
Quote:
Originally Posted by logicdoor
Wondering if you maybe need to refresh / fetch your agents before calling this function, as I think it may not be refreshed without updating the agent struct. I have experienced something similar with GetisCasting() - it would not update unless the Agentstruct was updated.
|
I feel it kinda does that through GetSkillBar() which is called in GetSkillbarSkillRecharge(), by calling
Code:
Func GetHeroID($aHeroNumber)
If $aHeroNumber == 0 Then Return GetMyID()
but I could be wrong. Do you suggest something specific? Like recreating the agent struct? Like in GetAgentByID() for exemple?
Thanks for the feedback btw!
|
|
|
07/03/2020, 18:29
|
#204
|
elite*gold: 0
Join Date: Apr 2020
Posts: 26
Received Thanks: 2
|
Quote:
Originally Posted by CoderAndy
@
i use this code with the rest that i posted for GetSkillbarSkillRecharge, don't forget the Ex for testing, plz let me know your findings.
Code:
Func GetSkillbarSkillRechargeEx($aSkillSlot, $aHeroNumber = 0, $aPtr = GetSkillbarPtrEx($aHeroNumber))
$aSkillSlot -= 1
$lTimestamp = MemoryRead($aPtr + 12 + $aSkillSlot * 20, 'dword')
If $lTimestamp = 0 Then Return 0
Return $lTimestamp - GetSkillTimerEx()
EndFunc ;==>GetSkillbarSkillRechargeEx
Func GetSkillbarPtrEx($aHeroNumber = 0)
Local $lOffset[5] = [0, 24, 76, 84, 44]
Local $lHeroCount = MemoryReadPtr($mBasePointer, $lOffset)
Local $lOffset[5] = [0, 24, 44, 1776]
For $i = 0 To $lHeroCount[1]
$lOffset[4] = $i * 188
Local $lSkillbarStructAddress = MemoryReadPtr($mBasePointer, $lOffset)
If $lSkillbarStructAddress[1] = GetHeroID($aHeroNumber) Then Return $lSkillbarStructAddress[0]
Next
EndFunc ;==>GetSkillbarPtrEx
|
Now it's back to returning me back values like "4295009907" again... and it will probably work all of the sudden in some runs/hours/reboots. I don't get it
edit some hours later : And now it works of course Old code, your code, both work sometimes and don't other times!
|
|
|
07/04/2020, 04:03
|
#205
|
elite*gold: 0
Join Date: Apr 2020
Posts: 26
Received Thanks: 2
|
Code:
Func KeepUpBoon()
Local $timeRemainingEighthSpell
Local $timeRemainingSeventhSpell
$target = GetNearestEnemyToAgent(-2)
ChangeTarget($target)
If GetSkillbarSkillRechargeEx(8) == 0 and GetEnergy(-2)>=10 Then UseSkillEx(8, -2)
$timeRemainingEighthSpell = GetSkillbarSkillRechargeEx(8)
Update("skill #8 is " & $timeRemainingEighthSpell / 1000 & " seconds away from being back up")
If $timeRemainingEighthSpell < 4500 Then
If GetDistance($target, -2) > 1150 and GetDistance($target, -2) < 1850 Then
Update("should sleep " & $timeRemainingEighthSpell / 1000 & " seconds for boon #8")
Move(DllStructGetData(GetAgentByID(-2),'X'), DllStructGetData(GetAgentByID(-2),'Y'))
Sleep($timeRemainingEighthSpell)
EndIf
EndIf
PingSleep(150)
If GetSkillbarSkillRechargeEx(7) == 0 and GetEnergy(-2)>=5 Then UseSkillEx(7, -2)
$timeRemainingSeventhSpell = GetSkillbarSkillRechargeEx(7)
Update("skill #7 is " & $timeRemainingSeventhSpell / 1000 & " seconds away from being back up")
If $timeRemainingSeventhSpell < 4500 Then
If GetDistance($target, -2) > 1150 and GetDistance($target, -2) < 1850 Then
Update("should sleep " & $timeRemainingSeventhSpell / 1000 & " seconds for boon #7")
Move(DllStructGetData(GetAgentByID(-2),'X'), DllStructGetData(GetAgentByID(-2),'Y'))
Sleep($timeRemainingSeventhSpell)
EndIf
EndIf
EndFunc
This is the function I use it inside. The code very often loops to it. It originally comes from the Refeather bot for ritualist but I enhanced it.
Basically what happens is that when "it doesn't properly work" it never enters the condition "< 4500" and so doesn't do the rest of the important logic.
isntead of returning something like "25000" (for 25s) it returns some very very high value (10digits?)
which of course prevents the code to enter those conditions.
With your way of using it, it's easy because you wait for it to be recharged. I too in my code check if the skill is recharged by using
Code:
GetSkillbarSkillRechargeEx(n) == 0
and it always works.
it's just when I want to get WHEN is the skill back up that it starts messing around
|
|
|
07/04/2020, 05:47
|
#206
|
elite*gold: 0
Join Date: Sep 2018
Posts: 89
Received Thanks: 75
|
Quote:
Originally Posted by sadosan
I feel it kinda does that through GetSkillBar() which is called in GetSkillbarSkillRecharge(), by calling
Code:
Func GetHeroID($aHeroNumber)
If $aHeroNumber == 0 Then Return GetMyID()
but I could be wrong. Do you suggest something specific? Like recreating the agent struct? Like in GetAgentByID() for exemple?
Thanks for the feedback btw!
|
Yes something like this, GetCurrentTarget() did it for me, but it basically calls the agentstruct and updates it. But it is using GetAgentbyID() I think.
|
|
|
07/04/2020, 13:29
|
#207
|
elite*gold: 0
Join Date: Apr 2020
Posts: 26
Received Thanks: 2
|
Lol, you don't understand? I will explain you....
What happens with standard refeather ritualist is that the bot REALLY OFTEN dies because it acts retarded with it's boons.
What it does originally is wait till the effect disapears on you to recast it (very bad) which makes it cast TWO 2 seconds spells right when it aggros a full pack of mobs sometimes, meaning high chance of diying.
My first fix is to cast the boons on reload because it correlates with the spirits cooldown, meaning most of the time (excluding exceptions and fast recasts) he will cast the boons BEFORE or AFTER the fight.
I added another security, which you didn't understand.
If a boon is about to (<4.5s) be back from CD, and IF he is not already in a fight (nearest enemy >1150) but also rather close to an enemy (1150->1850) then Sleep() for the amount of time the boon is cooldown.
With this behavior, I think I have divided the bots death by 3 or 4, its a tremendeous improvement in efficiency to a bot that's already way less efficient than the Dervish version.
Quote:
but before that you already called to cast the skill at 0 recharge and you do the same thing for 2 different skills in the same func ???
|
if it enters
Code:
If GetSkillbarSkillRechargeEx(8) == 0 and GetEnergy(-2)>=10 Then UseSkillEx(8, -2)
it wont enter
Code:
If $timeRemainingEighthSpell < 4500 Then
Quote:
then move to your position ???
|
KeepUpBoons() is called in a loop that has move commands. If I just Sleep(), i will just pause the script but the character will still run to the location he was told to go to.
Quote:
i don't think you can ask from the func to give you < or > times
|
Of course you can! It does actually work.
It's even how the function says it works, it should return time remaining in miliseconds! Lol...
When GetSkillbarSkillRecharge() works like it should, the bot behaviour is close to perfect, it really looks how a human playing that bar should be.
|
|
|
07/04/2020, 14:02
|
#208
|
elite*gold: 0
Join Date: Apr 2020
Posts: 26
Received Thanks: 2
|
Humm im really confused.
First of all
Code:
If $timeRemainingEighthSpell = 4500 And $timeRemainingSeventhSpell = 4500 Then
wtf? I will never go into that condition, both skills need to be exactly 4500 milliseconds away from being back up? Thats 1 in a milion chances to happen
Second of all, even if I change it to
Code:
If $timeRemainingEighthSpell < 4500 And $timeRemainingSeventhSpell < 4500 Then
Then it doesn't take into account fast recharges. If one of the two boons has fast recharge, then it will be desynchronized from the other one cooldown and the condition will not be met.
The script itself works perfectly, my problem is only about what
Code:
GetSkillbarSkillRechargeEx()
returns. if it returns the correct value (in miliseconds) consistantly, then the scrips works perfect and handles every needed cases.
|
|
|
07/04/2020, 14:47
|
#209
|
elite*gold: 0
Join Date: Apr 2020
Posts: 26
Received Thanks: 2
|
I actually planned to have a small security check with effects duration once I managed to fix GetSkillbarSkillRecharge() to make it very robust...but my hope of getting GetSkillbarSkillRecharge() fixed is vanishing slowly
If I can't get it to work like it should, I will indeed work around with effects timers, in hope the effect functions don't act like GetSkillbarSkillRecharge() by returning wrong values :/
|
|
|
07/05/2020, 16:11
|
#210
|
elite*gold: 0
Join Date: Feb 2016
Posts: 48
Received Thanks: 39
|
Fix for the LeaveGroup() and KickHero() functions
Correct headers are;
Code:
Global Const $HEADER_HERO_ADD = 0x21
Global Const $HEADER_HERO_KICK = 0x22
Global Const $HEADER_HEROES_KICK = 0x22
Code:
Func LeaveGroup($aKickHeroes = True)
If $aKickHeroes Then KickAllHeroes()
Return SendPacket(0x4, $HEADER_PARTY_LEAVE)
EndFunc ;==>LeaveGroup
Func KickAllHeroes()
Return SendPacket(0x8, $HEADER_HEROES_KICK, 0x26)
EndFunc ;==>KickAllHeroes
I've reworked the GetHeroID function (renamed _GetHeroID), it now returns the HeroID and not an AgentID, I'm not sure if that was intended but hey ho. Without this you won't be able to use the HeroKick functions, or any other functions that require a HeroID.
Code:
Func _GetHeroID($aHeroNumber)
If $aHeroNumber == 0 Then Return 0
Local $lOffset[6]
$lOffset[0] = 0
$lOffset[1] = 0x18
$lOffset[2] = 0x4C
$lOffset[3] = 0x54
$lOffset[4] = 0x24
$lOffset[5] = 0x18 * ($aHeroNumber - 1) + 8
Local $lAgentID = MemoryReadPtr($mBasePointer, $lOffset)
Return $lAgentID[1]
EndFunc ;==>GetHeroID
You can store your existing party setup into an .ini config for example.
Code:
;================================================= ================================================
; Function: PreLoad()
; Description: A staple copy of the initialise function used in the GUI, used in configuration.
; Author(s): ~
;================================================= ================================================
Func PreLoad()
If GUICtrlRead($charactername) = "" Then
If Initialize(ProcessExists("gw.exe")) = False Then
MsgBox(0, "Error", "Guild Wars is not running. Exiting Program.")
Exit
Else
Out("Initialized")
EndIf
Else
If Initialize(GUICtrlRead($charactername), True, True) = False Then
MsgBox(0, "Error", "Can't find a Guild Wars client with that character name.")
Exit
Else
Out("Initialized")
EndIf
EndIf
EndFunc
;================================================= ================================================
; Function(s): CoTNHeroConfig(), ATCHeroConfig()
; Description: Stores existing party layout in config
; Author(s): Deroni93
;================================================= ================================================
Func CoTNHeroConfig()
PreLoad()
For $i = 1 to 7
IniWrite("SpeedSettings.ini", "CoTN Hero Configuration", "CoTNHero"&$i, _GetHeroID($i))
Next
Out("Stored CoTN Hero Configuration")
Out("Closing..")
Sleep(1500)
_Exit()
EndFunc ;==>NornHeroConfig
Func ATCHeroConfig()
PreLoad()
For $i = 1 to 7
IniWrite("SpeedSettings.ini", "ATC Hero Configuration", "ATCHero"&$i, _GetHeroID($i))
Next
Out("Stored ATC Hero Configuration")
Out("Closing..")
Sleep(1500)
_Exit()
EndFunc ;==>NornHeroConfig
|
|
|
|
|
Similar Threads
|
[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...
|
All times are GMT +1. The time now is 15:16.
|
|