37x Forum

37x Forum (http://www.37x.de/forum.php)
-   Tutorials (http://www.37x.de/tutorials/)
-   -   [Tutorial] OGL Aimbot (http://www.37x.de/tutorials/8068-tutorial-ogl-aimbot.html)

suxx- 01.06.2004 22:48

[Tutorial] OGL Aimbot
 
Guten Abend,

ich habe mich dazu entschlossen ein Aimbot Tutorial zu schreiben. Diese Methode des Zielens benutze ich in dem aktuellen spieletermine.de OGL Hook 1.0 der morgen veröffentlicht wird.


Gut dann fangen wir auch gleich an mit der Structur
Code:

typedef struct {
          int mode;
          int target;
          int fov;
          bool thru;
          bool active;
          float zone;
  } aim_s;


soweit ist sicher alles verständlich



  • mode - ob mouse 1 oder autoshot usw.
  • target - ziel sprich terror oder ct
  • fov - field of view in pixel
  • thru - visible prüfung
  • active an/aus
  • zone - jedoch in px auf der Z-Achse
Nun noch zwei Structuren für die Modelerkennung und das eigentliche Zielen
Code:

typedef struct {
          int team;
          int num;
          bool get;
          float min_vertex;
          float max_vertex;
          float highest_x;
          float highest_y;
          float highest_z;
          float lowest_x;
          float lowest_y;
          float lowest_z;
          float height;
          float distance;
          float vertex;
  }model_s;
 
  typedef struct {
          int team;
          float x;
          float y;
          float z;
          float distance;
          float vector_x;
          float vector_y;
          float vector_z;
  }player_s;

Der bisherige Code kommt in eine extra Datei z.B. "vars.h" oder "aimbot.h".

Und nun geht es zu der Modelerkennung die wir für den Aimbot brauchen damit wir wissen ob es ein Terror oder ein CT ist.

Als erstes deklinieren wir die Structuren

Code:

aim_s aim;
  model_s model;
  player_s player[40];

player[40] deshalb weil ich sonst öffters einen crash hatte ansich undenkbar da Half-Life ja nur max. 32 Player hat jedoch war es so.

glPopMatrix:
Code:

if (model.get) model.get = false;
Wie setzten die Bool auf true damit wir wissen das HL ein Model Drawed.


glShadeModel:
Code:

GLdouble wx,wy,wz;
         
          glGetDoublev(GL_MODELVIEW_MATRIX,mm);
          glGetDoublev(GL_PROJECTION_MATRIX ,pm);
          glDisable(GL_TEXTURE_2D);
 
          if ((mode == GL_SMOOTH) && (!model.get))
          {
                  model.get = true;
                  model.highest_z = -99999;
                  model.lowest_z = -99999;
                  model.vertex = 0;
          }
          else
          {
                  if (model.get)
                  {
                  gluProject(model.highest_x,model.highest_y,model.highest_z,mm,pm,vp,&wx ,&wy ,&wz );
                        model.distance = getDist(model.highest_x,model.highest_y,model.highest_z,origin[0],origin[1],origin[2])/40;
 
                        if ((model.vertex>=model.min_vertex) && (model.vertex<=model.max_vertex))
                          {
                                modelnum = checkVertex(0,-1,model.vertex);
                          if ((modelnum < 8) && (modelnum != -1) && (model.height>40) && (model.height<90) && model.num <=40)
                                  {
                                  player[model.num].x = model.highest_x;
                                  player[model.num].y = model.highest_y;
                                  player[model.num].z = model.highest_z;
                                  player[model.num].distance = model.distance;
                                  if ((modelnum < 4) && (modelnum != -1))
                                  player[model.num].team = 1;
                                  else if ((modelnum > 3) && (modelnum < 8))
                                  player[model.num].team = 0;
                                          else
                                  player[model.num].team = -1;
                                        model.num++;
                                  }
                          }
                  }
          }
          glEnable(GL_TEXTURE_2D);

Wir speichern alle Models die in ein Array damit wir später darauf zurück greifen können.Ansich ist der Code selbst erklärend da die Variablen klar benannet sind.


glTranslatef
Code:

if (((x!=0) && (y!=0) && (z!=0)))
          {
                  origin[0]=x*-1;
                  origin[1]=y*-1;
                  origin[2]=z*-1;
          }

Hier Speichern wir unsere aktuelle Position in dem Raster in einem Array damit wir die Distance zwischen uns und den Playermodels berechnen können.

glVertex3f
Code:

if (model.get)
          {
                  model.vertex++;
                  if ( (z > model.highest_z) || (model.highest_z==-99999))
                  {
                          model.highest_x=x;
                          model.highest_y=y;
                          model.highest_z=z;
                  }
                  if ( (z < model.lowest_z) || (model.lowest_z==-99999)) {
                          model.lowest_x=x;
                          model.lowest_y=y;
                          model.lowest_z=z;
                  }
 
                  model.height=model.highest_z-model.lowest_z;
          }

Hier gucken wir ob ein Model gemalt wird und wenn ja dann speichern wir dessen hösten und niedrigsten Vertex in einer Variable.

glVertex3fv:
Code:

modelviewport=true;
Wenn HL diese Funktion aufruft ist das Model fertig gemalt.

glViewport:
Code:

if (modelviewport)
          {
                  model.highest_z=-99999;
                  model.lowest_z=-99999;
                  model.vector_x=0;
                  model.vector_y=0;
                  modelviewport=false;
          }

Hier setzten wir die Variablen zurück damit das Spiel von neuem Beginnen kann.

wglSwapBuffers:
Code:

if (!draw.menu && aim.active && ( ((aim.mode == 0) && (mouse.button == 1)) || ((aim.mode == 1) && (mouse.button == 2)) || (aim.mode == 2) || (aim.mode == 3) ) )
                          DoAim();
          model.num = 0;

Hier aufgepasst ich wette ihr habt euer KeyHandling anders realisiert z.B. mit GetAsyncKeyStat(); dann müsst ihr das hier anpassen.

So nun das eigentliche Zielen
Code:

void DoAim(void)
  {
          int num=-1;
          float distance=99999.0;
        // Wenn Aim thru aus ist dann müssen wir überprüfen ob wir das Model sehen und gleichzeitig finden wir das Model was am nähesten bei uns ist.
          if (!aim.thru)
          {
                  for (int i=0;i < model.num;i++)
                  {
                          if ((player[i].distance < distance) 
                                && (aim.target == player[i].team))
                          {
                                  if (checkVisible(i))
                                  {
                                        distance = player[i].distance;
                                        num = i;
                                  }
                          }
                  }
          }
  // Wenn Aim thru aus ist müssen wir nur das näheste Model finden
          else
          {
                  for (int i=0;i < model.num;i++)
                  {
                        if ((player[i].distance < distance) && (aim.target == player[i].team))
                          {
                                  distance = player[i].distance;
                                  num = i;
                          }
                  }
          }
         
          // Wenn es ein Model gibt das den Kriterien entspricht dann Ziehlen wir hier darauf
          if (num != -1)
          {
                  GLdouble wx,wy,wz;
              gluProject(player[num].x,player[num].y,player[num].z-aim.zone,mm,pm,vp,&wx ,&wy ,&wz );
                 
                  if (aim.active && (player[num].team == aim.target))
                  {
                        if ((wx>=vp[2]/2-aim.fov/2) && (wx<=vp[2]/2+aim.fov/2) && (wy>=vp[3]/2-aim.fov/2) && (wy<=vp[3]/2+aim.fov/2)) //Gucken ob das Model im AimFOV ist (da seh ich gerade das ich das noch verbessern kann jedoch nciht in diesem tut :))
                          {
                                int aimx=(float)((wx*65535)/vp[2]);
                                int aimy=(float)(((vp[3]-wy)*65535)/vp[3]);
 
                          mouse_event(MOUSEEVENTF_MOVE|MOUSEEVENTF_ABSOLUTE,aimx,aimy,0,0);
                                  if (aim.mode == 3)
                                  { // Mein Cooler Autoshot :)
                                        if (iShoot > 20)
                                        {       
                                                bWait = true;
                                          }
                                  if (bWait && (iShoot > 50))
                                          {
                                                bWait = false;
                                          iShoot = 0;       
                                          }
 
                                        KeyHandle(MK_LBUTTON);
                                  if (!bWait && (iShoot %10 == 0))
                                          {
                                  mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
                                  mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
                                          }
                                        iShoot++;
                                  }
                          }
                  }
          }
  }

Diese Funktion Rufen wir jeweils zum Ende eines jeden Frames auf.

Nun noch Funktionen die ihr für die umsetzung braucht

Code:

int IsPointVisible(GLdouble x, GLdouble y, GLdouble z)
  {       
          GLdouble        winX, winY, winZ;
          GLfloat                pix;
 
          glGetDoublev(GL_MODELVIEW_MATRIX,mm);
          glGetDoublev(GL_PROJECTION_MATRIX ,pm);
 
          if (gluProject (x, y, z, mm, pm, vp, &winX, &winY, &winZ) == GL_TRUE)
          {
                  glReadPixels((int)winX,(int)winY,1,1,GL_DEPTH_COMPONENT ,GL_FLOAT,&pix);
                  if (pix > winZ)
                          return 1;
                  else
                          return 0;
          }
          else
                  return 0;
  }

Code:

int checkVertex (int start, int offset, float vertcount)
  {
          if (offset == -1)
                  offset = vertexcount;
          for(int i=start;i < offset+1;i++)
          {
                  for (int y=0; y < 3;y++) {
                          if (vertcount == vertex[i].vert[y])
                          {
                                sprintf(curmodel,"%s",vertex[i].name);
                                  return i;
                          }
                  }
          }
          return -1;
  }




Diese Funktion muss nur einmal aufgerufen werden.
Code:

void loadModelRec (void)
  {
          // Gign
          sprintf(vertex[0].name,"%c%c%c%c",103,105,103,110);
          vertex[0].vert[0] = 1158;
          vertex[0].vert[1] = 1262;
          vertex[0].vert[2] = 0;
 
          // GSG-9
          sprintf(vertex[1].name,"%c%c%c%c",103,115,103,57);
          vertex[1].vert[0] = 1110;
          vertex[1].vert[1] = 1214;
          vertex[1].vert[2] = 0;
 
          // Sas
          sprintf(vertex[2].name,"%c%c%c",115,97,115);
          vertex[2].vert[0] = 1052;
          vertex[2].vert[1] = 1156;
          vertex[2].vert[2] = 0;
 
          // Seal
          sprintf(vertex[3].name,"%c%c%c%c",115,101,97,108);
          vertex[3].vert[0] = 1130;
          vertex[3].vert[1] = 1234;
          vertex[3].vert[2] = 0;
 
          // Leet
          sprintf(vertex[4].name,"%c%c%c%c",108,101,101,116);
          vertex[4].vert[0] = 1162;
          vertex[4].vert[1] = 1230;
          vertex[4].vert[2] = 0;
 
          // Arctic
          sprintf(vertex[5].name,"%c%c%c%c%c%c",97,114,99,116,105,99);
          vertex[5].vert[0] = 1061;
          vertex[5].vert[1] = 1129;
          vertex[5].vert[2] = 0;
 
          // Terror
          sprintf(vertex[6].name,"%c%c%c%c%c%c",116,101,114,114,111,114);
          vertex[6].vert[0] = 1078;
          vertex[6].vert[1] = 1146;
          vertex[6].vert[2] = 0;
 
          // Guerilla
          sprintf(vertex[7].name,"%c%c%c%c%c%c%c%c",103,117,101,114,105,108,108,97);
          vertex[7].vert[0] = 1136;
          vertex[7].vert[1] = 1078;
          vertex[7].vert[2] = 0;
 
          // M4A1
          sprintf(vertex[8].name,"%c%c%c%c",109,52,97,49);
          vertex[8].vert[0] = 238;
          vertex[8].vert[1] = 0;
          vertex[8].vert[2] = 0;
 
          // AK 47
          sprintf(vertex[9].name,"%c%c%c%c",97,107,52,55);
          vertex[9].vert[0] = 214;
          vertex[9].vert[1] = 0;
          vertex[9].vert[2] = 0;
 
          // USP
          sprintf(vertex[10].name,"%c%c%c",117,115,112);
          vertex[10].vert[0] = 164;
          vertex[10].vert[1] = 0;
          vertex[10].vert[2] = 0;
 
          // Knife
          sprintf(vertex[11].name,"%c%c%c%c%c",107,110,105,102,101);
          vertex[11].vert[0] = 172;
          vertex[11].vert[1] = 0;
          vertex[11].vert[2] = 0;
 
          // Deagle
          sprintf(vertex[12].name,"%c%c%c%c%c%c",100,101,97,103,108,101);
          vertex[12].vert[0] = 170;
          vertex[12].vert[1] = 0;
          vertex[12].vert[2] = 0;
 
          // Gallil
          sprintf(vertex[13].name,"%c%c%c%c%c%c",103,97,108,108,105,108);
          vertex[13].vert[0] = 288;
          vertex[13].vert[1] = 0;
          vertex[13].vert[2] = 0;
 
          // Glock18
          sprintf(vertex[14].name,"%c%c%c%c%c%c%c",103,108,111,99,107,49,56);
          vertex[14].vert[0] = 144;
          vertex[14].vert[1] = 130;
          vertex[14].vert[2] = 0;
 
          // Granade
          sprintf(vertex[15].name,"%c%c%c%c%c%c%c",103,114,97,110,97,100,101);
          vertex[15].vert[0] = 98;
          vertex[15].vert[1] = 0;
          vertex[15].vert[2] = 0;
 
          // xm1014
          sprintf(vertex[16].name,"%c%c%c%c%c%c",120,109,49,48,49,52);
          vertex[16].vert[0] = 232;
          vertex[16].vert[1] = 0;
          vertex[16].vert[2] = 0;
 
          // AUG
          sprintf(vertex[17].name,"%c%c%c",97,117,103);
          vertex[17].vert[0] = 252;
          vertex[17].vert[1] = 0;
          vertex[17].vert[2] = 0;
 
          //MP5
          sprintf(vertex[18].name,"%c%c%c",109,112,53);
          vertex[18].vert[0] = 290;
          vertex[18].vert[1] = 0;
          vertex[18].vert[2] = 0;
 
          // SG 552
          sprintf(vertex[19].name,"%c%c%c%c%c",115,103,53,53,50);
          vertex[19].vert[0] = 264;
          vertex[19].vert[1] = 0;
          vertex[19].vert[2] = 0;
 
          // C4
          sprintf(vertex[20].name,"%c%c",99,52);
          vertex[20].vert[0] = 0;
          vertex[20].vert[1] = 0;
          vertex[20].vert[2] = 0;
 
          // M3
          sprintf(vertex[21].name,"%c%c",109,51);
          vertex[21].vert[0] = 226;
          vertex[21].vert[1] = 0;
          vertex[21].vert[2] = 0;
 
          // Elites
          sprintf(vertex[22].name,"%c%c%c%c%c%c",101,108,105,116,101,115);
          vertex[22].vert[0] = 388;
          vertex[22].vert[1] = 0;
          vertex[22].vert[2] = 0;
 
          // Mac10
          sprintf(vertex[23].name,"%c%c%c%c%c",109,97,99,49,48);
          vertex[23].vert[0] = 216;
          vertex[23].vert[1] = 0;
          vertex[23].vert[2] = 0;
 
          // UMP .45
          sprintf(vertex[24].name,"%c%c%c%c%c",117,109,112,52,53);
          vertex[24].vert[0] = 245;
          vertex[24].vert[1] = 0;
          vertex[24].vert[2] = 0;
 
          // TMP
          sprintf(vertex[25].name,"%c%c%c",116,109,112);
          vertex[25].vert[0] = 182;
          vertex[25].vert[1] = 0;
          vertex[25].vert[2] = 0;
 
          // P 90
          sprintf(vertex[26].name,"%c%c%c",112,57,48);
          vertex[26].vert[0] = 140;
          vertex[26].vert[1] = 0;
          vertex[26].vert[2] = 0;
 
          // Para
          sprintf(vertex[27].name,"%c%c%c%c",112,97,114,97);
          vertex[27].vert[0] = 222;
          vertex[27].vert[1] = 0;
          vertex[27].vert[2] = 0;
 
          // SG550
          sprintf(vertex[28].name,"%c%c%c%c%c",115,103,53,53,48);
          vertex[28].vert[0] = 274;
          vertex[28].vert[1] = 0;
          vertex[28].vert[2] = 0;
         
          // Shield
          sprintf(vertex[29].name,"%c%c%c%c%c%c",115,104,105,101,108,100);
          vertex[29].vert[0] = 306;
          vertex[29].vert[1] = 0;
          vertex[29].vert[2] = 0;
 
          // Scout
          sprintf(vertex[30].name,"%c%c%c%c%c",115,99,111,117,116);
          vertex[30].vert[0] = 146;
          vertex[30].vert[1] = 0;
          vertex[30].vert[2] = 0;
 
          // AWP
          sprintf(vertex[31].name,"%c%c%c",97,119,112);
          vertex[31].vert[0] = 224;
          vertex[31].vert[1] = 0;
          vertex[31].vert[2] = 0;
 
          // G3SG1
          sprintf(vertex[32].name,"%c%c%c%c%c",103,51,115,103,49);
          vertex[32].vert[0] = 250;
          vertex[32].vert[1] = 0;
          vertex[32].vert[2] = 0;
 
          // Famas
          sprintf(vertex[33].name,"%c%c%c%c%c",102,97,109,97,115);
          vertex[33].vert[0] = 266;
          vertex[33].vert[1] = 0;
          vertex[33].vert[2] = 0;
 
          vertexcount = 33;
  }

Diese Funktion brauchen wir auch nur einmal aufrufen
Code:

void SetMinMaxVertex(void)
  {
          for(int i=0;i < vertexcount + 1;i++)
          {
                  for (int y=0; y < 3;y++)
                  {
                          if (vertex[i].vert[y] < model.min_vertex)
                                model.min_vertex = vertex[i].vert[y];
                          if (vertex[i].vert[y] > model.max_vertex)
                                model.max_vertex = vertex[i].vert[y];
                  }
          }
  }

Code:

bool checkVisible(int number)
  {
          if (number == -1)
                  return false;
          bool gldepthtest=false;
          bool visible=false;
          if (glIsEnabled(GL_DEPTH_TEST))
                  gldepthtest=true;
          glEnable(GL_DEPTH_TEST);
 
          if (IsPointVisible(player[number].x,player[number].y,player[number].z+5)) visible = true;
    else if (IsPointVisible(player[number].x-10,player[number].y-10,player[number].z-30)) visible = true;
          else if (IsPointVisible(player[number].x+10,player[number].y-10,player[number].z-30)) visible = true;
          else if (IsPointVisible(player[number].x+10,player[number].y+10,player[number].z-55)) visible = true;
          else if (IsPointVisible(player[number].x-10,player[number].y+10,player[number].z-55)) visible = true;
          if (!gldepthtest)
                  glDisable(GL_DEPTH_TEST);
 
          return visible;
  }


subay 01.06.2004 22:58

nice tut :D

ach ja suxx: das geht doch gar net ;)

gruß subay

Timberland 02.06.2004 14:32

Werde ich mal nächste Woche testen. :)

suxx- 06.06.2004 19:41

und auch dieses Tutorial hat sich auf die lange Reise an die Öffentlichkeit begeben und nun erscheint es in voller Pracht vor euch :D

HF damit

X-Terminator 07.06.2004 00:35

@suxx

kannst du mal wieder son noob tut machen sooooo Screenshots. so wie der WH u. Lambert. des hat ich in 1min gg

ich versteh nämlicht net wo bool hingehörrt und diese anderen sachen. bei dem anfänger tut konnte man alles schön überblicken. Dafür mein respekt. es ist bestimmt nicht einfach sowas sooo zu vereinfachen. aber wenn dus noch schaft den aimbot für die anfänger rüberzubringen u. das menu, dann wär ich und bestimmt stimm ich für mehrere user glücklich.

pls help uzz
:)

darude 07.06.2004 01:30

Zitat:

Zitat von subay
nice tut :D

ach ja suxx: das geht doch gar net ;)

gruß subay


Wie soll man das denn verstehen ?! ;)

suxx- 07.06.2004 06:59

Zitat:

Zitat von darude
Wie soll man das denn verstehen ?! ;)

nen insider kann nur mein subaylein und ich verstehen :P der aimbot funtzt wunderbar hier ein paar bilder

http://213.239.195.228/suxx/pics/Frags/

und
Zitat:

Zitat von X-Terminator
@suxx

kannst du mal wieder son noob tut machen sooooo Screenshots. so wie der WH u. Lambert. des hat ich in 1min gg

ich versteh nämlicht net wo bool hingehörrt und diese anderen sachen. bei dem anfänger tut konnte man alles schön überblicken. Dafür mein respekt. es ist bestimmt nicht einfach sowas sooo zu vereinfachen. aber wenn dus noch schaft den aimbot für die anfänger rüberzubringen u. das menu, dann wär ich und bestimmt stimm ich für mehrere user glücklich.

pls help uzz
:)

Ich wollt emit diesen Tutorials keinen Grundstein für Anfänger legen diese Tutorials sind für Fortgeschrittene gedacht und die werden auch verstehen wo alles hinsoll.

subay 07.06.2004 13:12

Zitat:

Zitat von X-Terminator
@suxx

kannst du mal wieder son noob tut machen sooooo Screenshots. so wie der WH u. Lambert. des hat ich in 1min gg

das tut stammt net von suxx sondern von mir... wer lesen kann ist im vorteil, passt zwar net hier rein, aber dashaeb ich jetzt schon 2mal gelesen...
:hooligan:

insider rocken :D

gruß subay

X-Terminator 07.06.2004 14:23

ok n1 tut@ subay

suxx- 07.06.2004 14:48

Zitat:

Zitat von X-Terminator
ok n1 tut@ subay

lol du verstehst auch nichts ^^ :P

X-Terminator 07.06.2004 18:18

OK ihr seid beide die besten. :digo:

-PrO- 07.06.2004 18:21

Naja wer das versteht-RESPECT :D
also ich denke ich werde es an dem langenwochenede versuchen zu verstehen..aber denke...no way :D aber dennoch c0oL das du dir die muehe machst und versuchst dein wissen mit uns zu teilen bzw dein wissen niederschreibst ^^

HD30 14.06.2004 17:44

Mal ne ganz blöde frage mit was fürnem programm machst du das ??? :confused:

subay 14.06.2004 17:59

Zitat:

Zitat von HD30
Mal ne ganz blöde frage mit was fürnem programm machst du das ??? :confused:

M$ visual studio und die programmiersprache heißt c++

gruß subay

HD30 14.06.2004 18:24

Ich hab MS VisualC++ 6.0 macht das was oder ist das das gleiche ??
wie bekomm ich das ganze jetzt ins spiel??? :digo:

subay 14.06.2004 19:10

Zitat:

Zitat von HD30
Ich hab MS VisualC++ 6.0 macht das was oder ist das das gleiche ??
wie bekomm ich das ganze jetzt ins spiel??? :digo:

nö haeb ich auch!
alerdings soltles du ml mit was leichten anfangen was copy & paste ist und nicht mit so einem fortgeschrittenen tut :D

also mach das klick wenn du das geschafft hast dann mach dies

gruß subay

HD30 14.06.2004 19:23

Ok danke! :D

dAvE 15.06.2004 22:41

öhm :confused: wo muss ich

aim_s aim;
model_s model;
player_s player[40];

einbauen?

dAvE 27.06.2004 23:39

mach mal "double * mm;" und "double * pm;" in die header datei.. mein problem ist.. das getDist net definiert ist.. auch bei google find ich nix..

Str1k3r 28.06.2004 06:31

könnte mal jemand, der das kann, den nur den aimbot in nen wrapper machen, und dann hier anhängen ?
dann kann jerder (auch ich) der es nich schafft das mal genauer angucken, wie das funzt !

greeTz


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:21 Uhr.

Powered by vBulletin