Ajouter une nouvelle police à votre cheat !
Difficulté : 0 (et oui rien de plus simple que le c/p)
Tout d'abord voici le Font.cpp :
Citation:
#include "font.h"
CFont::CFont()
{
strcpy(name, "ARIAL");
size = 18;
}
CFont::CFont(char *i_name, int i_size)
{
strcpy(name, i_name);
size = i_size;
}
void CFont::InitText()
{
HDC hDC;
HFONT hFont;
HFONT hOldFont;
hDC = wglGetCurrentDC();
g_FontListID = glGenLists(256);
hFont=CreateFont(size, 0, 0, 0, FW_DONTCARE, FALSE, FALSE, FALSE, ANSI_CHARSET,
OUT_TT_ONLY_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY,
DEFAULT_PITCH|FF_DONTCARE, name);
hOldFont = (HFONT)SelectObject(hDC, hFont);
wglUseFontBitmapsA (hDC, 0, 255, g_FontListID);
for(int i=0; i < 255; i++)
{
SIZE s;
char line[2] = { (char)i, 0 }; //credits to LanceVorgin
GetTextExtentPoint(hDC, line, 1, &s);
cwidth = s.cx;
cheight = s.cy;
}
SelectObject(hDC, hOldFont);
DeleteObject(hFont);
}
void CFont::Print(int x, int y, int r, int g, int b, BYTE flags, char *string, ...)
{
glDisable(GL_TEXTURE_2D);
char strText[256];
va_list argumentPtr;
va_start(argumentPtr, string);
vsprintf(strText, string, argumentPtr);
va_end(argumentPtr);
int drawlen = 0;
for(char *p = strText; *p; p++) { drawlen += cwidth[*p]; }
if(flags & FL_CENTER) { x -= (drawlen / 2); }
if(flags & FL_BORDER) {
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glColor4ub(0, 0, 0, 128);
glBegin(GL_QUADS);
glVertex2i(x-2, y-cheight+2);
glVertex2i(x+drawlen+2, y-cheight+2);
glVertex2i(x+drawlen+2, y+4);
glVertex2i(x-2, y+4);
glEnd();
}
if(flags & FL_SHADOW)
{
Render(x+2, y+2, 0, 0, 0, strText);
if(flags & FL_UNDERLINE)
{
glColor3ub(0, 0, 0);
glLineWidth(1.0f);
glBegin(GL_LINES);
glVertex2i(x+2, y+5); glVertex2i(x+drawlen+2, y+5);
glEnd();
}
}
if(flags & FL_OUTLINE)
{
Render(x-1, y-1, 0, 0, 0, strText);
Render(x+1, y-1, 0, 0, 0, strText);
Render(x-1, y+1, 0, 0, 0, strText);
Render(x+1, y+1, 0, 0, 0, strText);
if(flags & FL_UNDERLINE)
{
glColor3ub(0, 0, 0);
glLineWidth(1.0f);
glBegin(GL_LINES);
glVertex2i(x-1, y+3-1); glVertex2i(x+drawlen-1, y+3-1);
glVertex2i(x+1, y+3-1); glVertex2i(x+drawlen+1, y+3-1);
glVertex2i(x-1, y+3+1); glVertex2i(x+drawlen-1, y+3+1);
glVertex2i(x+1, y+3+1); glVertex2i(x+drawlen+1, y+3+1);
glEnd();
}
}
if(flags & FL_UNDERLINE)
{
glColor3ub(r, g, b);
glLineWidth(1.0f);
glBegin(GL_LINES); glVertex2i(x, y+3); glVertex2i(x+drawlen, y+3); glEnd();
}
Render(x, y, r, g, b, strText); //draw normally
glEnable(GL_TEXTURE_2D);
}
void CFont::Render(int x, int y, int r, int g, int b, char *string)
{
int i=0;
while(x < 0) //prevent rendering from failing
{
x += cwidth[string];
i++; if(!string) { return; }
}
glColor3ub(r, g, b);
glRasterPos2i(x, y);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glPushAttrib(GL_LIST_BIT);
glListBase(g_FontListID);
glCallLists(strlen(string) - i, GL_UNSIGNED_BYTE, string + i);
glPopAttrib();
}
CFont ComicSMS("Comic Sans MS", 15);
Dans ce Font.cpp il y a donc :
de quoi ajouter une nouvelle police
meme de qoi l'afficher
mais aussi la posiblilité d'ajouter des effets "spéciaux"
La Font.h maintenant :
Citation:
#pragma comment(lib,"OpenGL32.lib")
class CFont
{
public:
CFont();
CFont(char*, int);
void Print(int x, int y, int r, int g, int b, BYTE flags, char *szbuf, ...);
void InitText();
private:
void Render(int x, int y, int r, int g, int b, char *string);
short cheight;
short cwidth[255];
char name[20];
int size;
UINT g_FontListID;
};
extern CFont ComicSMS;
Voila maintenant il ne reste plus qu'a initialiser la police au lancement du hook ! pour cela il suffit de placer ce code dans le void onlyhook ou dans le int initialize
Citation:
ComicSMS.InitText();
Mais comment l'utiliser ?
Rien de difficile !:
Citation:
ComicSMS.Print(x,y,r,g,b,effet,"votre texte");
je decompose :
ComicSMS.Print : on fai appele à la fonction.
x,y : on defini la position du texte à afficher.
r,g,b : on defini la couleur du texte à afficher.
effet : on choisi de mettre un effet ou pas.
"votre texte" : on defini le texte à afficher.
Liste des effets :
none: rien
shadow: ombre
underligne: souligné
outline: contours
center: centré
border: cadre autour
all : tout
Exemple d'utilisation :
Citation:
AnubsPolice.Print (x+10, y+15, 255,255,255,FL_OUTLINE,"Kills: %d",kills);
Credits:
Azorbix
Tuto redigé par Anubis82 !!