Du bist nicht angemeldet.
Lieber Besucher, herzlich willkommen bei: SFDE. Falls dies dein erster Besuch auf dieser Seite ist, lese dir bitte die Hilfe durch. Dort wird dir die Bedienung dieser Seite näher erläutert. Darüber hinaus solltest du dich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutze das Registrierungsformular, um dich zu registrieren oder informiere dich ausführlich über den Registrierungsvorgang. Falls du dich bereits zu einem früheren Zeitpunkt registriert hast, kannst du dich hier anmelden.
suxx-
unregistriert
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
//Für die Das erstellen und ausgeben der Schrift GLuint base; HDC hDC; bool FirstInit = false; int viewportcount=0; // Für die Keyverwaltung int Last_Key=0; // Informationen über die Bildschirm static GLint vp[4]; // Init Der Strukturen menu_s menu; draw_s draw; |
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
void glPrint(float x, float y, float z, float r, float g, float b, const char *fmt, ...)
{
char text[256];
va_list ap;
if (fmt == NULL)
return;
va_start(ap, fmt);
vsprintf(text, fmt, ap);
va_end(ap);
GLfloat curcolor[4], position[4];
(*orig_glPushAttrib)(GL_ALL_ATTRIB_BITS);
(*orig_glGetFloatv)(GL_CURRENT_COLOR, curcolor);
(*orig_glGetFloatv)(GL_CURRENT_RASTER_POSITION, position);
(*orig_glDisable)(GL_TEXTURE_2D);
(*orig_glColor4f)(r,g,b,1.0f); // Setzen der Schriftfarbe
(*orig_glRasterPos3f)(x,y,z); // glRasterPos3f damit wir uns im 3 dimensionalen Raum bewegen
(*orig_glPushAttrib)(GL_LIST_BIT);
(*orig_glListBase)(base - 32);
(*orig_glCallLists)(strlen(text), GL_UNSIGNED_BYTE, text);
(*orig_glPopAttrib)();
(*orig_glEnable)(GL_TEXTURE_2D);
(*orig_glPopAttrib)();
(*orig_glColor4fv)(curcolor);
(*orig_glRasterPos2f)(position[0],position[1]);
}
|
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
GLvoid BuildFont(GLvoid)
{
hDC=wglGetCurrentDC();
HFONT font;
HFONT oldfont;
base = (*orig_glGenLists)(96);
font = CreateFont(14,0,0,0,FW_BOLD,FALSE,FALSE,FALSE,ANSI_CHARSET,OUT_TT_PRECIS,CLIP_DEFAULT_PRECIS,PROOF_QUALITY,FF_DONTCARE|DEFAULT_PITCH,
"Tahoma");
oldfont = (HFONT)SelectObject(hDC, font);
wglUseFontBitmaps(hDC, 32, 96, base);
SelectObject(hDC, oldfont);
DeleteObject(font);
}
|
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
void DrawMenu(int x, int y)
{
char Entry[10][30]; // Initialisieren des zweidimensionalen Entry Arrays das später die einzelnen Menupunkte speichert.
// Belegen der einzelnen Elemente des Arrays mit Strings
sprintf(Entry[1]," - Asus Hack %s",cvar.asus?"On":"Off");
sprintf(Entry[2]," - XQZ Hack %s",cvar.xqz?"On":"Off");
sprintf(Entry[3]," - White Walls %s",cvar.white?"On":"Off");
sprintf(Entry[4]," - Lambert %s",cvar.lambert?"On":"Off");
sprintf(Entry[5]," - Flash remove %s",cvar.flash?"On":"Off");
sprintf(Entry[6]," - Smoke remove %s",cvar.smoke?"On":"Off");
sprintf(Entry[7]," - Scope remove %s",cvar.scope?"On":"Off");
sprintf(Entry[8]," - Sky remove %s",cvar.sky?"On":"Off");
sprintf(Entry[9]," - Wireframe Hack %s",cvar.wire?"On":"Off");
menu.maxcount = sizeof(Entry);
// Ein Menukopf erzeugen
glPrint(x,y-28,1.0f,0.5f,0.5f,1.0f,"------------------------");
glPrint(x,y-17,1.0f,0.5f,0.5f,1.0f,"- Suxx OGL -");
glPrint(x,y-6 ,1.0f,0.5f,0.5f,1.0f,"------------------------");
// Die Schleife läuft solange bis menu.maxcount erreicht ist und somit keine weiteren Menuelemente mehr ausgegeben werden müssen.
for (int i=1; i < menu.maxcount+1;i++) {
// Hier eine kleine besonderheit da wir ja den selektierten Punkt anders Darstellen möchte haben wir hier die If Abfrage wenn der Menupunkt den
// wir Ausgeben möchten gerade Selektiert ist bekommt er eine andere Farbe. Und noch etwas fällt hier auf und zwar y+(14 * i) +5 liegt einfach
// daran das die Schrift 14 Pixel groß ist (definiert in CreateFont) und da wir ja nicht alle Punkte übereinander haben möchten multiplizieren wir die
// Schriftgröße mit dem Aktuellen menu.count – menu Punkt.
if (menu.count == i)
glPrint(x,y+(14 * i)+5 ,1.0f,1.0f,0.2f,0.2f,Entry[i]);
else
glPrint(x,y+(14 * i)+5 ,1.0f,1.0f,1.0f,1.0f,Entry[i]);
}
}
|
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
// Bei Jedem 5. Aufruf von glViewport wird draw.enable auf true gesetzt eine kleine maßnahme damit das ganze nicht so viele Frames zieht denn jedes 5. mal reicht vollkommen aus.
viewportcount++;
if (viewportcount > 4)
draw.enable=true;
if (draw.enable) {
if ((GetAsyncKeyState(VK_UP) < 0) && (Last_Key != VK_UP) && (menu.active))
{
MenuUp();
Last_Key = VK_UP;
}
else if ((GetAsyncKeyState(VK_DELETE) < 0) && (Last_Key != VK_DELETE))
{
menu.active = !menu.active;
draw.menu = !draw.menu;
Last_Key = VK_DELETE;
}
else if ((GetAsyncKeyState(VK_LEFT) < 0) && (Last_Key != VK_LEFT) && (menu.active))
{
MenuSelect();
Last_Key = VK_LEFT;
}
else if ((GetAsyncKeyState(VK_RIGHT) < 0) && (Last_Key != VK_LEFT) && (menu.active))
{
MenuSelect();
Last_Key = VK_LEFT;
}
else if ((GetAsyncKeyState(VK_DOWN) < 0) && (Last_Key != VK_LEFT) && (menu.active))
{
MenuDown();
Last_Key = VK_LEFT;
}
else if (!(GetAsyncKeyState(VK_DOWN) < 0) &&
!(GetAsyncKeyState(VK_RIGHT) < 0) &&
!(GetAsyncKeyState(VK_DELETE) < 0) &&
!(GetAsyncKeyState(VK_UP) < 0) &&
!(GetAsyncKeyState(VK_LEFT) < 0))
Last_Key = 0;
}
|
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
void MenuUp()
{
if(menu.count<2)
menu.count=1;
else
menu.count--;
}
void MenuDown()
{
if(menu.count>menu.maxcount-1)
menu.count=menu.maxcount;
else
menu.count++;
}
void MenuSelect()
{
switch(menu.count)
{
case 1:
{
cvar.asus=!cvar.asus;
if (cvar.asus)
cvar.sky = true;
else
cvar.sky = false;
break;
}
case 2:
{
cvar.xqz=!cvar.xqz;
break;
}
case 3:
{
cvar.white=!cvar.white;
break;
}
case 4:
{
cvar.lambert=!cvar.lambert;
break;
}
case 5:
{
cvar.flash=!cvar.flash;
break;
}
case 6:
{
cvar.smoke=!cvar.smoke;
break;
}
case 7:
{
cvar.scope=!cvar.scope;
break;
}
case 8:
{
cvar.sky=!cvar.sky;
break;
}
case 9:
{
cvar.wire=!cvar.wire;
if (cvar.asus)
cvar.sky = true;
else
cvar.sky = false;
break;
}
}
}
|
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
if(!FirstInit)
{
BuildFont(); // Lädt die Schrift
(*orig_glGetIntegerv)(GL_VIEWPORT,vp); // Speichert Informationen über den Bildschirm in vp ab.
FirstInit=true;
InitHack();
}
if (draw.enable) {
draw.enable = false;
if (draw.menu)
DrawMenu(50,(vp[3]/2)-60); // vp[3] enthält die Höhe unseres Screens (bei mir 1280) und dann teilen wir es durch zwei damit das Menu in der Mitte ist wobei wir noch 50 Pixel abziehen damit es etwas über der Hälfe des Screens liegt.
}
|
|
|
Quellcode |
1 2 3 4 5 |
void InitHack() {
menu.count = 1;
menu.active = false;
draw.menu = false;
}
|
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
typedef struct {
int count;
int maxcount;
bool active;
}menu_s;
typedef struct {
bool menu;
bool chair;
bool esp;
bool info;
bool enable;
}draw_s;
|
gemini
unregistriert

Zitat
Es tut mir leid aber sicher hat C++ eine function mit der man zählen kann wieviele Array Elemente ein Array hat nur kenn ich sie nicht da ich erst seit ein paar Tagen mit C++ Arbeite also setzen wir hier die anzahl der Menupunkte fest
diZzY
unregistriert
|
|
Quellcode |
1 2 3 4 5 6 7 8 |
Kompilierung läuft... opengl32.cpp C:\lambert+wh+white walls\var.h(20) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'menu' C:\lambert+wh+white walls\var.h(20) : error C2501: 'menu_s' : Fehlende Speicherklasse oder Typbezeichner C:\lambert+wh+white walls\var.h(20) : fatal error C1004: Unerwartetes Dateiende gefunden Fehler beim Ausführen von cl.exe. opengl32.dll - 3 Fehler, 0 Warnung(en) |
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 |
// Für die Keyverwaltung int Last_Key=0; // Informationen über die Bildschirm static GLint vp[4]; // Init Der Strukturen menu_s menu; draw_s draw; |
suxx-
unregistriert
Zitat
Original von suxx-
Nun noch die Strukturen und es ist geschafft.
![]()
Quellcode
1 2 3 4 5 6 7 8 9 10 11 12 13typedef struct { int count; int maxcount; bool active; }menu_s; typedef struct { bool menu; bool chair; bool esp; bool info; bool enable; }draw_s;
Und bevor ich es vergesse in wglSwapBuffers müssen wir den viewportcount wieder auf 0 setzten.
Ich hoffe dieses Tutorial hat hat euch geholfen.
Msg Suxx
Zitat
Original von suxx-
Nun noch ein kleiner Teil in glEnable und dann haben wir es auch schon fast geschafft.
![]()
Quellcode
1 2 3 4 5 6 7 8 9 10 11 12 13if(!FirstInit) { BuildFont(); // Lädt die Schrift (*orig_glGetIntegerv)(GL_VIEWPORT,vp); // Speichert Informationen über den Bildschirm in vp ab. FirstInit=true; InitHack(); } if (draw.enable) { draw.enable = false; if (draw.menu) DrawMenu(50,(vp[3]/2)-60); // vp[3] enthält die Höhe unseres Screens (bei mir 1280) und dann teilen wir es durch zwei damit das Menu in der Mitte ist wobei wir noch 50 Pixel abziehen damit es etwas über der Hälfe des Screens liegt. }
suxx-
unregistriert

diZzY
unregistriert

|
|
Quellcode |
1 2 3 4 |
C:\lambert+wh+white walls\m3nu.h(21) : error C2065: 'base' : nichtdeklarierter Bezeichner C:\lambert+wh+white walls\m3nu.h(31) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'BuildFont' C:\lambert+wh+white walls\m3nu.h(31) : error C2501: 'Glvoid' : Fehlende Speicherklasse oder Typbezeichner C:\lambert+wh+white walls\m3nu.h(31) : fatal error C1004: Unerwartetes Dateiende gefunden |
-TheKilla-
unregistriert
Zitat
// Init Der Strukturen
menu_s menu;
draw_s draw;
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 |
--------------------Konfiguration: opengl32 - Win32 Release-------------------- Kompilierung läuft... opengl32.cpp C:\Dokumente und Einstellungen\ischmael\Desktop\opengl32.cpp(248) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'menu' C:\Dokumente und Einstellungen\ischmael\Desktop\opengl32.cpp(248) : error C2501: 'menu_s' : Fehlende Speicherklasse oder Typbezeichner C:\Dokumente und Einstellungen\ischmael\Desktop\opengl32.cpp(248) : fatal error C1004: Unerwartetes Dateiende gefunden Fehler beim Ausführen von cl.exe. opengl32.dll - 3 Fehler, 0 Warnung(en) |