Nostale Map Viewer

09/12/2012 16:56 BladeTiger12#1
Hallo, wie kann man einen Autoit Nostale Map Viewer machen wo man:
NPC´s , Spieler und Items sieht?
Weiß einer wie man sowas in Autoit aufbaut.
Brauche hilfe komme nicht weiter.:handsdown:
09/12/2012 17:33 Tekuzo#2
Falsche Sektion.
Das gehört [Only registered and activated users can see links. Click Here To Register...] rein.
09/12/2012 17:34 Rorc#3
#moved
09/12/2012 17:40 BladeTiger12#4
Entschuldigung wusste ich nicht.
09/12/2012 17:50 Lawliet#5
Hast du ein Beispiel in irgendeiner anderen Sprache?
09/12/2012 17:53 BladeTiger12#6
Nein leider nicht.
Wie den auch ist mein erstes mal
das ich sowas mache.
Mit Pointern und so kenne mich mich aus
aber damit garnicht.
Und ich glaube auch kaum das einer so eine Source gibt.
09/12/2012 21:21 lolkop#7
du musst die map einfach als bild nehmen, und kannst dann ja einfach eine verhältnisgleichung zu deinem aktuellen maßstab der karte (bzw des kartenausschnitts) erstellen.

wenn du das fertig hast, sollte es ein leichtes sein, die koordinaten auf der karte zb durch farbige punkte zu markieren.
09/12/2012 22:18 BladeTiger12#8
Also die GUI mit dem Bild habe ich schon.
Aber wie kriege ich die koordinaten.
Und wie kann ich die koordinaten in der
Autoit-Map anzeigen.
Das sind meine Fragen.
Aber ich kriege das irgendwie nicht hin.
Deswegen suche ich Hilfe.
09/13/2012 11:05 lolkop#9
Quote:
Originally Posted by BladeTiger12 View Post
Also die GUI mit dem Bild habe ich schon.
Aber wie kriege ich die koordinaten.
Und wie kann ich die koordinaten in der
Autoit-Map anzeigen.
Das sind meine Fragen.
Aber ich kriege das irgendwie nicht hin.
Deswegen suche ich Hilfe.
nach deinen posts war ich davon ausgegangen, das du bereits viel über reverse engineering weist, und diesbezüglich keine hilfe mehr benötigst.

wenn es um objekte in spielen geht, welche man versucht zu finden, hält man sich in der regel an gegebene funktionen. die meisten mmo's beinhalten von haus aus autoselect oder autopick funktionen. diese im client zu finden, sollte mit grundlegenden vorkenntnissen kein problem darstellen.

sobald man eine dieser funktionen gefunden hat, sollte es auch kein problem mehr sein, diese in autoit nach zu bauen...
hier mal ein [Only registered and activated users can see links. Click Here To Register...], welches ich vor langer zeit einmal für silkroad online geschrieben habe.

sollte es tatsächlich keine derartigen vom spiel vorgegebenen funktionen geben, so muss gibt es meist noch eine minimap oder ähnliches, auf welcher die objekte (mobs, npcs, items, ...) eingezeichnet sind. die funktion der aktualisierung der minimap im speicher zu finden ist in der regel aber deutlich schwerer, da aktualisierungen nicht über user-aktionen ablaufen.

sollte selbst eine derartige minimap nicht existieren, so muss man sich an die aktualisierung der spieloberfläche halten. da dies aber in wohl jedem spiel mit abstand die umfangreichste klasse ist, ist hier das filtern der benötigten informationen auch mit abstand am schwersten.

alternativ kann man in online spielen auch versuchen das ganze über den packetfluss zu lösen. das ganze hat den vorteil, das man weniger mit client-speziefischen problemen zu kämpfen hat, welche beispielsweise durch updates hinzukommen könnten.
09/13/2012 19:55 BladeTiger12#10
Hmm sicher das man daraus von jedem Mob die Koordinaten bekommt oder nur von einen?
09/14/2012 01:00 Shadow992#11
Quote:
Originally Posted by BladeTiger12 View Post
Hmm sicher das man daraus von jedem Mob die Koordinaten bekommt oder nur von einen?
Durch das konkrete Suchen mit AutoPick kriegst du natürlich nur von einem Mob sämtliche Daten. Es sollte dir aber möglich sein die Daten des Mobs hoch auf eine Struct zu rechnen. Wenn du weißt wie viel Speicherplatz pro Mob in der Struct eingenommen wird, kannst du indem du den Anfang und das Ende der Struct findest ganz einfach über jeden beliebigen Mob Informationen bekommen.

Das ganze ist aber etwas kniffelig, dennoch nicht unmöglich.

Alternative wäre ein Code Cave, das beim erstellen der Map die Daten der Mobs rausfiltert, aber ich denke da wirst du noch größere Probleme haben als mit den bloßem Finden der Struct.
09/14/2012 10:35 lolkop#12
Quote:
Originally Posted by Shadow992 View Post
Durch das konkrete Suchen mit AutoPick kriegst du natürlich nur von einem Mob sämtliche Daten.
in der regel funktionieren die autoselect funktionen der mmos aber so, das sie automatisch den dichtesten mob auswählen.

dafür gibt es nur 2 mögliche wege. der erste wäre, das der server sämtliche in der nähe befindliche mobs durchläuft. hier würden wir dann tatsächlich als antwort nur einen mob bekommen.

viel warscheinlicher ist aber die zweite methode, in der der client sämtliche mobs durchläuft. so funktioniert es zb auch bei den von mir getesteten spielen: silkroad, perferkt world und 4story. eben dieses durchlaufen der mobs braucht man dann ja nur nachzubauen, und hat so bereits die fertige liste aller mobs.
09/14/2012 14:24 BladeTiger12#13
Hört sich wirklich schwer an aber ich werde es Probieren.
Danke für die Lösungen
09/16/2012 21:39 BladeTiger12#14
Habe es jetzt so lange probiert und am ende
habe ich es nur gepackt meine Pos rauszukriegen
und damit ein Programm zubauen.

Hier mein bisjetziger Code:

PHP Code:
#RequireAdmin
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <NomadMemory.au3>
#include <GDIPlus.au3>
_GDIPlus_Startup()

Global 
$ADD 0x007D53F4$OFFY 0x0E$OFFX 0x0C$OFF2 0x30 $hGraphic
$PID 
_MemoryOpen(ProcessExists("NostaleX.dat"))

$hGUI GUICreate("GDI+"265265)
AdlibRegister("_POS" 1000)
GUISetState()

$hGraphic _GDIPlus_GraphicsCreateFromHWND($hGUI)

While 
1

    $ReadX 
_MemoryRead(_MemoryRead(_MemoryRead($ADD $PID) + $OFF2 $PID) + $OFFX $PID "word")
    
$ReadY _MemoryRead(_MemoryRead(_MemoryRead($ADD $PID) + $OFF2 $PID) + $OFFY $PID "word")

    
$nMsg GUIGetMsg()
    Switch 
$nMsg
        
Case $GUI_EVENT_CLOSE
            _GDIPlus_GraphicsDispose
($hGraphic)
            
_GDIPlus_Shutdown()
            Exit

    EndSwitch
WEnd

Func _POS
()
    
_GDIPlus_GraphicsClear($hGraphic 0xFFFFFFFF)
    
_GDIPlus_GraphicsFillEllipse($hGraphic$ReadX$ReadY1010)
EndFunc 
Ich pack das irgendwie nicht.
Bitte um weitere Hilfe.

Skype wäre auch gut:
MrBladeTiger12