Cheat-engine Problem

03/23/2012 21:06 .AllForOne.#1
Hallo Com,
ich suche den Pointer bzw. die Adresse für das Inventar.
Dann möchte ich das Inventar durchsuchen.
Ich stelle mir das in etwa so vor:

Adresse Inventar xy
0. Slot: xy +0
1. Slot: xy + Slotgröße
2. Slot: xy + 2*Slotgröße
3. Slot: xy + 3*Slotgröße

Meine Vorgehensweise:
Itemvalue 27003 (Roter G Pot) Slot 0 -> suchen -> Itemvalue 27006 (Blauer G Pot) -> suchen ..... am Ende: 2 Adressen bleiben übrig.
Ich drücke bei beiden Find Pointer mit Max 1 ->1. Adresse kein Pointer wird angezeigt. -> 2. Adresse:
Baseadresse : metin2client.bin + 00221DD8 Offset 0: 74

Was kann ich mit diesen Werten jetzt anfangen bzw. ich meine sie sind immer noch falsch. Heißt es Baseadresse(004000000) + 00221DD8 + 74 ist Inventaradresse von Slot 0 ?

Demnach das gleiche für Slot 1 machen und dann Offset 0 von Slot 1 - 74?
Das wäre dann Slotgröße?
Um in C++ jetzt anzeigen zu lassen was bei Slot 0 ist, muss ich 004000000 + 00221DD8 + 74 + 2A*Slot?

mfg afo
03/23/2012 22:33 jacky919#2
Du kannst die Adressen und Offsets nicht einfach addieren. Du musst zu dem Wert der Adresse, die sich aus 004000000 + 00221DD8 zusammensetzt, 74 addieren und dies als Adresse für den ersten Slot benutzen. Wenn das Inventar als Array gespeichert wird kannst du zu der Adresse des ersten Slots noch Index*Größe eines Slots im Speicher addieren, um auf die anderen Slots zu zugreifen.
03/25/2012 17:01 Tyrar#3
Quote:
Originally Posted by jacky919 View Post
Du kannst die Adressen und Offsets nicht einfach addieren. Du musst zu dem Wert der Adresse, die sich aus 004000000 + 00221DD8 zusammensetzt, 74 addieren und dies als Adresse für den ersten Slot benutzen. Wenn das Inventar als Array gespeichert wird kannst du zu der Adresse des ersten Slots noch Index*Größe eines Slots im Speicher addieren, um auf die anderen Slots zu zugreifen.
im groben müsste das etwa:
Code:
int* inv=(int*)(*(unsigned long*)(0x004000000+0x00221DD8)+0x74);
sein, dann könnte man mit
Code:
inv[index]
die slots checken
03/25/2012 17:11 jacky919#4
Quote:
Originally Posted by HeavyHacker View Post
im groben müsste das etwa:
Code:
int* inv=(int*)(*(unsigned long*)(0x004000000+0x00221DD8)+0x74);
sein, dann könnte man mit
Code:
inv[index]
die slots checken
Wobei die Slotgröße noch angepasst werden müsste. Alternativ könnte man natürlich auch eine Struktur bzw. Klasse rekonstruieren und diese verwenden.