[GW.exe]Pointer/Value_Problem

06/11/2008 21:03 Adroxxx#31
Joa kann sein. Ansich ist es egal, da es eh nur Bezeichnungen sind.
Bin mal gespannt was ihr schönes posted :)
06/12/2008 19:54 Azunai#32
also hier wäre das erste mal xD

auch wenn eindeutig noch dran gefeilt werden muss ;)
06/12/2008 20:14 Adroxxx#33
niedlich! :)

Also für den Anfang ziemlich gut. Kann man gut gebrauchen. Fehlen natürlich noch einige sachen, aber die werden wohl mit der Zeit noch kommen :)
06/12/2008 20:40 wadimwadim#34
Bei uns besteht das Problem immernoch mit dem Update.
Wären für neue Lösungsvorschläge dankbar.
06/12/2008 20:45 Adroxxx#35
Ändern sich die Adressen bei jedem Update? Also jetzt nicht nur so Bugfixes sondern auch so Weekend Events?

Also allgemein kann man da glaub ich wenig machen. Mit den Updates ändert sich auch die gw.dat und die gw.exe

Wenn sich die Adressen echt bei jedem kleinen Update ändern, ist es natürlich suboptimal. Wüsste aber auch nicht was man dagegen machen kann.
06/12/2008 21:17 wadimwadim#36
Die ändern sich nach jedem Update, aber ich und bitchbi Rechnen und Rrobieren noch einige Sachen mit den Adressen aus... Falls die Adressen alle im gleichem Abstand voneinander geschrieben werden, wird es kein großes Problem, sie immer wieder zu finden.
06/12/2008 21:31 Adroxxx#37
Wird das nächste Update dann zeigen =)
Seit ihr jetzt beim Leben schon weiter gekommen?
06/12/2008 22:20 Azunai#38
wir dachten wir hätten 5 pointer gefunden welche das leben berechnen, leider jedoch anscheinend doch nicht, ist aber noch nicht sicher...

zudem bekomm ich meine formel um zu einer bestimmten koordinate zu laufen nicht richtig hin...
vllt hast du ja selbst auch eine idee für einen algo ;)
06/12/2008 22:55 Adroxxx#39
Ja beim Leben beiß ich mir auch gerad die Zähne aus. >_<

Hm, die schwierigkeit beim Algo wäre das auf dem Weg dahin hinternisse sein könnten.
Sonst könnte man die Aktuellen x,y coords auslesen und dann bestimmten in welche richtung er laufen sollte, und immer mit den vorgegebenen coords vom npcs oder allgemein vom weg vergleichen.

Man könnte auch mal schauen, wie die funktion der maussteuerung arbeitet.
Sprich ich klick jetzt rechts neben den char, dann müsste irgendwo eingetragen werden maus pos. gesetzt , funktion run(), bis zu den x, y coords.

Wenn man das Simulieren könnte , wäre es um einiges einfacher.
Dann könnte man zB einen klick direkt im Endziel setzen, ( je nach weg , oder zwischenziele) und der char würde automatisch dahinlaufen. Vorteil wäre das er hinternisse automatisch umgehen würde. Man würde also in den nicht sichtbaren bereich klicken.

Aber ich vermute es klingt einfacher als es in wirklichkeit ist xD
06/13/2008 13:45 wadimwadim#40
Hey, gute Nachrichten.
Es ist so, wie ich es vermutet hatte... ALLE festen Werte in der GW.exe werden im gleichem Abstand voneinander geschrieben, dass heisst, dass man die Werte nach einem Update berechnen kann...
Hier ein Beispiel:
zu erst muss man mindestens ein neuen Wert berechnen, den mit dem Alten subtrahieren. Man erhält eine differenz, die man auf die alten Werte übernehmen kann.

12.06.2008 <- VOR UPDATE
******************************
00A1272F X-Achse
00A12733 Y-Achse

13.06.2008 <- NACH UPDATE
******************************
00A1372F X-Achse
00A13733 Y-Achse



INTEGER WERTE
10561327-10565423=-4096 10561327+10565423=21126750

HEX WERTE
00A1272F-00A1372F=FFFFF000 00A1272F+00A1372F=01425E5E

================================================== ========
INTEGER WERTE
10561331-10565427=-4096 10561331+10565427=21126758

HEX WERTE
00A12733-00A13733=[FFFFF000] 00A12733+00A13733=01425E66

================================================== ========

DIESER WERT IST DIE DIFFERENZ: FFFFF000
BSP:

LEBEN/TOT 12.06.2008 <- VOR UPDATE
00A12AA4 Rückgabewert ist 0/1

ALSO DANN: 00A12AA4-FFFFF000= NEUER WERT (siehe unten)

LEBEN/TOT 11.06.2008 <- NACH UPDATE
00A12AA4-FFFFF000=
00A13AA4 = NEUER WERT
========
EDIT:
SORY, FUNKTIONIERT LEIDER NICHT BEI ALLEN ADRESSEN


MfG


wadimwadim
06/13/2008 15:41 Azunai#41
ja leider ..
aber bei deathssorft der typ hat ja ein tool das alle adressen nach update wieder findet,

udn zwar sucht er einfach nach dem asm code um die adresse herum ;)

also nach einem code fetzen

und weiß dann wo sich die adressen befinden
06/14/2008 15:27 Bot_interesierter#42
Für euren Laufalgoritmus braucht ihr noch den Facing wert, das sollte ein Float Wert sein der zwischen 2Pi und 0 liegt, wenn ihr euch dreht verändert sich der Wert.
Also sucht mal nach einem float Wert zwischen 6,4 und 0 dreht euch und sucht nach einem veränderten Wert usw, ihr solltet dann irgendwann euer facing finden, wenn es in radians gespeichert wird, ansonsten gibt es noch die Möglichkeit das es in degree Gespeichert wird, dann müsst ihr nach einem anderen Zahlen Raum suchen, zwischen 360 und 0.
Eure Facing Adresse sollte einen Statischen Abstand zu den Coordinaten Adressen haben.

Wenn ihr dann das Facing habt könnt ihr ganz einfach mit Dreiecks Sätzen ausrechnen wie weit ihr euch drehen müsst um auf einen bestimmten Punkt zu schauen, dann muss der Algoritmus entscheiden in welche Richtung ihr euch dreht und so lange die Drehen Taste drücken, bis der Gewünschte Facing Wert erreicht ist, dann könnt ihr solange vorwärts Laufen bis ihr euren Zielpunkt erreicht habt.
Am besten benutzt ihr ein sogenanntes Wegpunkte System, bei dem ihr die Punkte die der Bot später ablaufen soll in eine Datei Speichert und unter Umständen speichert ihr die Facing Werte zum nächsten Wegpunkt gleich mit, da dann erneutes Berechnen entfällt.
06/14/2008 17:02 Azunai#43
ist in grad zahlen ;) längst gefunden,
das problem sind einfach die hindernisse
06/16/2008 18:16 Azunai#44
PHP Code:
#include <nomadmemory.au3>
$pid ProcessExists("Gw.exe")
$hpid _MemoryOpen($pid)
$x1=_memoryread(0x00A1372F,$hpid)
$y1=_memoryread(0x00A13733,$hpid)


winactivate("Guild Wars")
winwaitactive("Guild Wars")
send("{w down}")
sleep(1000)
send("{w up}")
$x2=_memoryread(0x00A1372F,$hpid)
$y2=_memoryread(0x00A13733,$hpid)

$s1=(($x2-$x1)*($x2-$x1))+(($y2-$y1)*($y2-$y1))
winactivate("Guild Wars")
send("{a down}")
sleep(1000)
send("{a up}")


send("{w down}")
sleep(1000)
send("{w up}")

$x3=_memoryread(0x00A1372F,$hpid)
$y3=_memoryread(0x00A13733,$hpid)

$s2 =(($x3-$x2)*($x3-$x2))+(($y3-$y2)*($y3-$y2))

$s3= (($x3-$x1)*($x3-$x1))+(($y3-$y1)*($y3-$y1))

$pi 3.14159265358979
$radToDeg 
180 $pi

$winkel 
acos((($s2*$s2)+($s1*$s1)-($s3*$s3))/(2*$s2*$s1))* $radToDeg  



msgbox
(0,"grad",$winkel)
msgbox(0,"acos",(($s2*$s2)+($s1*$s1)-($s3*$s3))/(2*$s2*$s1)) 
kann mir mal jemand verraten was ich an der formel falsch gemacht habe? o0
06/16/2008 21:28 wadimwadim#45
Hier hab ich was geschrieben. Und zwar, der Charakter wird sich solange drehen und ein stück nach vorne laufen, bis sich die X,Y Werte einem beliebigen Punkt nähern.
(hier: z.b. auf der Insel des Kaisers.
$PX = 2209453631
$PY = 2219580484
)
Aber dreht nicht solange, bis die Werte sich gleichen.

Hier könnt es ihr euch als au3 file runterladen, ist wohl übersichtlicher.
Name (_Walk)
([Only registered and activated users can see links. Click Here To Register...])


#include <nomadmemory.au3>
$pid = ProcessExists("Gw.exe")
$hpid = _MemoryOpen($pid)
; 2 beliebige Punkte
$PX = 2209453631
$PY = 2219580484


WinActivate("Guild Wars")
Sleep(1500)
WinWaitActive("Guild Wars")
Global $x1, $y1, $x2, $y2


Func _Check1()
$x1 = _memoryread(0x00A1372F, $hpid)
$y1 = _memoryread(0x00A13733, $hpid)
EndFunc ;==>_Check1

Func _Check2()
$x2 = _memoryread(0x00A1372F, $hpid)
$y2 = _memoryread(0x00A13733, $hpid)
EndFunc ;==>_Check2

Func _Dreh()
Send("{a down}")
Sleep(115)
Send("{a up}")
Send("{w down}")
Sleep(115)
Send("{w up}")
EndFunc ;==>_Dreh

_Check1()
If ($PX >= $x1) And ($PY >= $y1) Then
Do
_Check1()
_Dreh()
_Check2()
Until ($x2 <= $x1) And ($y2 >= $y1)
Else
If ($PX <= $x1) And ($PY <= $y1) Then
Do
_Check1()
_Dreh()
_Check2()
Until ($x2 >= $x1) And ($y2 <= $y1)
Else
If ($PX <= $x1) And ($PY >= $y1) Then
Do
_Check1()
_Dreh()
_Check2()
Until ($x2 >= $x1) And ($y2 <= $y1)
Else
If ($PX >= $x1) And ($PY <= $y1) Then
Do
_Check1()
_Dreh()
_Check2()
Until ($x2 <= $x1) And ($y2 >= $y1)
EndIf
EndIf
EndIf
EndIf


Gruß
wadimwadim