Und um das hier zu verstehen sollte man zwischen Dezimal- und Hexerdezimalzahlen hin und her rechnen können.
Also Dezimal zu Hex und umgekehrt. Oder einfach den Rechner von Windoofs benutzen ...
In einer Struktur kann man Variablen speichern und dann mit z.B. mit einem Punktoperator aufrufen, wenn man eine Instanz darauf erstellt hat.
In jeder Struktur hat die erste Variable den Wert 0x00.
Code:
struct Struktur
{
int iVariable1; //0x00
};
Hier hat die Variable iVariable1 den Wert 0x00.
Wenn wir jetzt eine weitere Variable dazufügen hat diese den Wert 0x04.
Einige von euch fragen sich sicherlich "Warum zum Teufel hat die nächste den Wert 0x04 o.O" !
Ganz einfach :P: Ein Integer hat eine Größe von 4 Byte. Dieser Wert wird zu den 0x00 dazu addiert.
Code:
struct Struktur
{
int iVariable1; //0x00
double dKommazahl1; //0x04
char chBuchstabe1; //0x0C
}
Ein double hat eine Größe von 8 Byte.
Also rechnen wir für den nächsten Wert 8 dazu (4 + 8 = C)
Um damit auch mehr machen zu können schreibe ich euch hier mal die Größe einiger Datentypen auf:
Code:
char : 1 Byte
bool : 1 Byte
short : 2 Bytes
int : 4 Bytes
long : 4 Bytes
float : 4 Bytes
double: 8 Bytes
BYTE : 1 Byte
WORD : 2 Bytes
DWORD : 4 Bytes
Wenn ihr das soweit verstanden habt machen wir mal mit einer Struktur weiter die man zum Hacken von WarRock benutzen kann, indem wir in
ihnen Offsets darstellen:
Als erstes sollten wir uns überlegen welches Offset am kleinsten ist !
Wir addieren schließlich immer !
In unserem Fall haben wir "NoRecoil1".
Das Offset hat den Wert 0x0C43C .
Um zu diesem Wert zu kommen wäre es sehr unsinnig 12559 Integer zu nehmen.
Wir nehmen einfach einen char-Array.
Für die Recoil - Offsets nehmen wir float, weil diese eine Fließkommazahl darstellen.
Code:
struct SPlayer
{
char chMyChar1 [50236]; //0x00
float Recoil1; //0xC43C
};
50236 = C43C :D
Auf die Werte von Recoil 2 & 3 zu kommen muss man jetz nicht mehr allzuviel machen da sie jeweils 0x4 vom vorherigen entfernt sind.
Code:
struct SPlayer
{
char chMyChar1 [50236]; //0x00
float fRecoil1; //0xC43C
float fRecoil2; //0xC440
float fRecoil3; //0xC444
char chMyChar2 [und nun ?]; //0xC448
};
Jetzt haben wir die drei Offsets abgehackt wir müssen uns jetzt das nächstgrößte ist.
Kp ob ihr grade wirklich nachguckt oder nur weiterlest das nächstgroße ist jedenfalls das Offset der Schwerkraft für die X-Achse
Gravity_X 0xC4A4 .
Also wieder mal einfach ausrechnen: C4A4 - C448 = 5C
In Dezimalschreibweise sind das 92.
Also:
Code:
struct SPlayer
{
char chMyChar1 [50236]; //0x00
float fRecoil1; //0xC43C
float fRecoil2; //0xC440
float fRecoil3; //0xC444
char chMyChar2 [92]; //0xC448
float fGravity_X; //0xC4A4
float fGravity_Y; //0xC4A8
float fGravity_Z; //0xC4AC
};
Wenn ich irgendwo Fehler eingebaut habe, weißt mich bitte darauf hin ^^