WarRock EU - Code Snippets

05/05/2011 00:05 antornmo#3421
könnte mir bitte jemand den aktuelen source code für einen nomenu opk geben.
wenn es geht bitte mitden aktuellen addy :)
05/05/2011 06:27 theitfan1337#3422
Das bekommst du sicher auch selbst hin. Überleg dir doch einfach mal was bei OPK passiert. Bei den structs kannst du dir ja helfen lassen.
05/05/2011 07:39 Norbert8#3423
@ProSk1ll
Zeiger sind Variablen z.B short, int, float, double, bool, char usw.
Auf jeden Fall hat die Variable eine Speicheradresse. Und wird im Arbeitsspeicher gespeichert. Und so eine Adresse sieht so aus wie eine Warrock Addy 0x0012FF7C ;)

razer hat ja gezeigt wie man einen Zeiger erstellt.
-> Das * Sternchen zeigt an, dass es sich um einen Zeiger handelt. ;)
-> Mit den Adressoperator ( & ), bekommen wir die Adresse von unserea Variable.
Quote:
int iV = 10;
// Zeiger erstellt.
int *Zahl = &iV;

cout << iV << endl; // = 10
cout << Zahl << endl; // Adresse von iV bekommen wie hier ;)
( Ein Zeiger kann uns nur die Adresse sagen, nicht iV. Deswegen geben wir auch aus cout << Zahl << endl; aus...
05/05/2011 10:04 Raz9r#3424
Quote:
Originally Posted by Norbert8 View Post
int iV = 10;
// Zeiger erstellt.
int *Zahl = &iV;

cout << iV << endl; // = 10
cout << Zahl << endl; // Adresse von iV bekommen wie hier
( Ein Zeiger kann uns nur die Adresse sagen, nicht iV. Deswegen geben wir auch aus cout << Zahl << endl; aus....
vollkommen unnötig...
es hat relativ wenig damit zu tun, was ich gesagt habe lol.

wenn in der source von warrock ein pointer deklariert ist (z.B. der automatisch erstellte "this"-pointer bei einer class) ist die speicheradresse (kurz addy) ein doppelpointer, d.h. typename**.

habe ich also
Code:
class xxx {
float a;
float b;
};
so kann die adresse des this-pointers ausgelesen werden. dieser ist vom typ xxx* also ist die adresse dahinter vom typ xxx**; um auf den wert a hierdrin zugugreifen muss also der anfangspunkt der class gefunden werden

Code:
#define THIS_PTR 0x123 //nur ein beispiel

DWORD * ptr = (DWORD*)THIS_PTR; // das ist unser this-pointer.
das folgende enthält dann die startadresse der class
Code:
*ptr
um jetzt auf ein element in der class zugreifen zu können, müssen die abstände zu *ptr berechnet werden. diese abstände nennt man offsets.

das offset zu element a ist 0x4, denn es ist gleich zu beginn der class.
das offset zu element b ist 0x4, denn die größe des vorherigen elements ist sizeof(float) == 0x4

mit
Code:
*(float*)(*ptr + 0x4)
kann ich also den wert hinter b auslesen und verändern.

----

2te methode ist die sogenannte reclass variante.
hierbei wird die class nachgebaut in einem struct und dann auf den pointer initialisiert.

d.h.:
Code:
struct xxx {
float a; // 0x0
float b; // 0x4
} * p_xxx = (xxx*)THIS_PTR;
mit p_xxx->b kann dann auf das element b zugegriffen werden.

---

die zweite variante verursacht weniger lags und ist weitaus professioneller, denn sie erspart einem unnötiges type-casting.
05/05/2011 14:04 •~•Pr0Sk1ll•~•#3425
Das Von razer hat mir um einiges mehr geholfen :D
danke razer #thanked
ich habs mir also bisher schwerer gemacht without reclass ...
& bei structs au hab net die Addy eingegeben BSP: 0x1234
sondern sie aus gerechnet und so bei char eingetragen
fuer alle die umformung von hex in dez ist einfach
hex ist ein 16-Stellen System: 0123456789ABCDEF
also 0=1 A = 10...
und zum umformen macht mans so:
0x1234 ist die Speicheradresse
nun nimmt man den letzten Wert (4) und multipliziert ihn mit 16^n
wobei n deine Stelle(1) minus 1 ist also die formel ist
Wert = x
Zahl = y
x = y*16^n
also x ist endwert y ist die Zahl(4) 16 wegen 16-system und n ist die stelle minus 1
x= 4*16^0 da x^0 = 1 ist ist es 1*4 = 4
nun haben wir 4 Stellen:
4*16^0+3*16^1+2*16^2+1*16^3 = unser Endwert


so formt man hex in dez um :D 1 Stelle mehr = 1 Hochzahl höher
Also 16.Stelle = Hochzahl:15
05/05/2011 14:26 theitfan1337#3426
Quote:
Originally Posted by •~•Pr0Sk1ll•~• View Post
so formt man hex in dez um :D 1 Stelle mehr = 1 Hochzahl höher
Also 16.Stelle = Hochzahl:15
Die "Hochzahl" nennt man Exponent :)
05/05/2011 14:26 Raz9r#3427
-> [Only registered and activated users can see links. Click Here To Register...]
05/05/2011 14:44 •~•Pr0Sk1ll•~•#3428
Ja man kanns au Rechnen lassen
& stimmt Exponent habs vergessen :D
05/05/2011 14:57 antornmo#3429
Quote:
Originally Posted by Nomad' View Post
Das bekommst du sicher auch selbst hin. Überleg dir doch einfach mal was bei OPK passiert. Bei den structs kannst du dir ja helfen lassen.
Ich habe kein Plan wie das geht. Ich kenn mich halt noch nicht so gut aus, habe erst einen hack erstellt. Also bitte, könnte ich die source und die addys für opk haben?
05/05/2011 15:22 xxfabbelxx#3430
Quote:
Originally Posted by antornmo View Post
Ich habe kein Plan wie das geht. Ich kenn mich halt noch nicht so gut aus, habe erst einen hack erstellt. Also bitte, könnte ich die source und die addys für opk haben?
du weißt dass OPK Lediglich das ist:

Deine Position = 0
Position aller Gegner = deine Position
05/05/2011 15:45 antornmo#3431
Quote:
Originally Posted by .Fabbel View Post
du weißt dass OPK Lediglich das ist:

Deine Position = 0
Position aller Gegner = deine Position
ich blick immernoch nicht durch.
05/05/2011 16:11 •~•Pr0Sk1ll•~•#3432
struct CPlayer
{
char jump[0x1021E4];
float x;
float y;
float z;
};

das sind die structs...
addy is richtig oda?
05/05/2011 16:54 antornmo#3433
Quote:
Originally Posted by •~•Pr0Sk1ll•~• View Post
struct CPlayer
{
char jump[0x1021E4];
float x;
float y;
float z;
};

das sind die structs...
addy is richtig oda?
ist das opk?
05/05/2011 16:56 Rel0ad3dx3#3434
Quote:
Originally Posted by antornmo View Post
ist das opk?
Nein oO
05/05/2011 17:04 BlackLegend™#3435
struct CPlayer
{
char ch_unknown1 [50236]; //0x00
float Recoil1; //0xC43C
float Recoil2; //0xC440
float Recoil3; //0xC444
char ch_unknown2 [96]; //0xC448
float Gravity_Y; //0xC4A8
char ch_unknown3 [15904]; //0xC4AC
float FallDamage; //0x102CC
char ch_unknown4 [20]; //0x102D0
float pos1; //0x102E4
char ch_unknown5 [4]; //0x102E8
float pos2; //0x102EC
char ch_unknown6 [4]; //0x102F0
float pos3; //0x102F4
};//Credits: NikM

if (nPlayerOPK == 1)
{
for(int i = 0; i < 32; i++)
{
CPlayer* pPlayer = pBase->player[i];
pPlayer->pos1=0;
pPlayer->pos3=0;
pPlayer->pos2=0;
}
}