Moin,
ich melde mich dann auch mal wieder^^ Diesmal mit was anderem, noch viel cooler! Ich hatte GTA 3 mal wieder ausgegraben weil ich das nie zu 100% durchgespielt habe (jetzt schon). Zusätzlich habe ich dann auch noch ein Tool ausgegraben welches ich 2015 mal angefangen habe und jetzt in dem Zuge weiter optimiert habe. Das Tool kann ein Bild laden (Karte eines Spiels), per Script wird dann dynamisch diverses Zeug drauf gezeichnet welches per ReadProcessMemory aus dem Spielprozess ausgelesen wird. Ursprünglich habe ich das ganze mal hardcoded geschrieben für The Division um mich besser in der Darkzone zurechtzufinden. Dann habe ich Lua als Scriptsprache eingebunden um den ganzen Spielspezifischen Code in Pluginscripts auszulagern. Jetzt kann man einfach für jedes Spiel ein Script anlegen.
Hier mal ein Bild von der 1. GTA 3 Mission auf dem rechten Monitor und das Tool auf dem linken Monitor. Die Stadtteile sind hardcoded im Lua-Script. Alle Icons zu aufsammelbaren Zeug (Geld, Waffen, Versteckte Päckchen, Rampages etc.) werden aus dem Speicher gelesen und werden dynamisch angezeigt. D.h. alles was aufgesammelt wird verschwindet auch bzw. z.B. Geld taucht auf wenn es gedroppt wird. Ihr habt noch nie so schnell die versteckten Päckchen abgelaufen, ihr wisst nach dem halben Spiel genau welche noch fehlen
Die Spielerposition und Blickrichtung wird auch ausgelesen und entsprechend mit einem drehbaren PNG angezeigt.
Des weiteren hier mal ein Bild von meinem Lua-Script zu diesem Spiel:
Das ganze Programm ist sehr historisch gewachsen™ und das Zeichnen ist relativ ineffizient gemacht. Läuft zwar flüssig aber der Code muss echt mal überholt werdenEin auf der Map angezeigtes Objekt kann ein Icon oder farbigen Punkt, einen Text und ein Polygon enthalten, Farben (mit Alpha) etc. können dazu eingestellt werden. Das Hauptprogramm ruft periodisch die "Tick()"-Funktion im Lua-Script auf, dort werden dann mit Wrappern zur ReadProcessMemory Winapi die Werte aus dem Spiel ausgelesen und die anzuzeigenden Sachen in einem Lua-Objekt abgelegt welches nach Aufruf der Funktion wieder vom Hauptprogramm ausgelesen und gezeichnet wird. Des Weiteren kann noch ein Objekt gefüttert werden welches ausgelesene Werte in dem ListView anzeigen kann. Hier X/Y-Koordinaten und die Anzahl der Rampages und versteckten Päckchen die noch zu erledigen sind.