Une client IRC intégré à counter-strike (HL1) et ses Mods


Nekuzor

Messages recommandés

Posté(e)

Bonjour, voila je viens vous présenter un de mes projets,

il consiste à placer un client IRC dans Cs.

Voici un screenshot :

IRC-Cs%20v2.JPG

Ceci est un screenshot de la version 2.0 en cours de création.

pour plus d'information merci de vous rendre sur www.irc-cs.com (site web sponsorisé par www.easyportail.be)

Posté(e)

Les codeurs sont rares dans la communauté d'Half-Life et ses mods. Si tu veux faire parti d'une équipe de création d'un mod, n'hésite pas à contacter Checkrob. Lui et moi faisons parti de l'équipe de développement du mod New World Conflict (dont il est le leader) et nous manquons cruellement de codeur.

Tu sera le bienvenu :)

Posté(e)

je voudrais bien tester mais j'ai 3problemes

je le lance

developer se fout sur 1

et fps_max a 999

et j'ai rien a part un message dans la console, je fais quoi? xD

Question le loader est tiré d'un hook ( cheats ) ?

Posté(e)

Le loader n'est pas tirer d'un cheat, et tu ne risque rien au niveau du VAC ou VAC2, le system d'injection est le même que celui d'un cheat, mais j'ai eu une conversation avec un admin de chez valve via le forum de steam, et lui ai expliqué en quoi consiste mon logiciel, et il m'a confirmé que le VAC ou VAC2 ne détect que les cheats connus car avant VAC/VAC2 avait un algo de détection au niveau du detours des fonction opengl et du engine, mais cela posait problème avec certains logiciels telque HL-Amp ou certains Mods donc valve à changé ca politique de "traitement".

De plus c'est pas le Loader qui fait le HOOk, mais la DLL, valve fourni une SDK dans laquelle ont peut retrouver la structure des fonction du moteur HL1 :

[cpp]

typedef struct cl_enginefuncs_s

{

// sprite handlers

HSPRITE ( *pfnSPR_Load ) ( const char *szPicName );

int ( *pfnSPR_Frames ) ( HSPRITE hPic );

int ( *pfnSPR_Height ) ( HSPRITE hPic, int frame );

int ( *pfnSPR_Width ) ( HSPRITE hPic, int frame );

void ( *pfnSPR_Set ) ( HSPRITE hPic, int r, int g, int b );

void ( *pfnSPR_Draw ) ( int frame, int x, int y, const wrect_t *prc );

void ( *pfnSPR_DrawHoles ) ( int frame, int x, int y, const wrect_t *prc );

void ( *pfnSPR_DrawAdditive ) ( int frame, int x, int y, const wrect_t *prc );

void ( *pfnSPR_EnableScissor ) ( int x, int y, int width, int height );

void ( *pfnSPR_DisableScissor ) ( void );

client_sprite_t *( *pfnSPR_GetList ) ( char *psz, int *piCount );

// screen handlers

void ( *pfnFillRGBA ) ( int x, int y, int width, int height, int r, int g, int b, int a );

int ( *pfnGetScreenInfo ) ( SCREENINFO *pscrinfo );

void ( *pfnSetCrosshair ) ( HSPRITE hspr, wrect_t rc, int r, int g, int b );

// cvar handlers

struct cvar_s *( *pfnRegisterVariable ) ( char *szName, char *szValue, int flags );

float ( *pfnGetCvarFloat ) ( char *szName );

char* ( *pfnGetCvarString ) ( char *szName );

// command handlers

int ( *pfnAddCommand ) ( char *cmd_name, void (*function)(void) );

int ( *pfnHookUserMsg ) ( char *szMsgName, pfnUserMsgHook pfn );

int ( *pfnServerCmd ) ( char *szCmdString );

int ( *pfnClientCmd ) ( char *szCmdString );

void ( *pfnGetPlayerInfo ) ( int ent_num, hud_player_info_t *pinfo );

// sound handlers

void ( *pfnPlaySoundByName ) ( char *szSound, float volume );

void ( *pfnPlaySoundByIndex ) ( int iSound, float volume );

// vector helpers

void ( *pfnAngleVectors ) ( const float * vecAngles, float * forward, float * right, float * up );

// text message system

client_textmessage_t *( *pfnTextMessageGet ) ( const char *pName );

int ( *pfnDrawCharacter ) ( int x, int y, int number, int r, int g, int b );

int ( *pfnDrawConsoleString ) ( int x, int y, char *string );

void ( *pfnDrawSetTextColor ) ( float r, float g, float b );

void ( *pfnDrawConsoleStringLen )( const char *string, int *length, int *height );

void ( *pfnConsolePrint ) ( const char *string );

void ( *pfnCenterPrint ) ( const char *string );

// Added for user input processing

int ( *GetWindowCenterX ) ( void );

int ( *GetWindowCenterY ) ( void );

void ( *GetViewAngles ) ( float * );

void ( *SetViewAngles ) ( float * );

int ( *GetMaxClients ) ( void );

void ( *Cvar_SetValue ) ( char *cvar, float value );

int (*Cmd_Argc) (void);

char *( *Cmd_Argv ) ( int arg );

void ( *Con_Printf ) ( char *fmt, ... );

void ( *Con_DPrintf ) ( char *fmt, ... );

void ( *Con_NPrintf ) ( int pos, char *fmt, ... );

void ( *Con_NXPrintf ) ( struct con_nprint_s *info, char *fmt, ... );

const char *( *PhysInfo_ValueForKey ) ( const char *key );

const char *( *ServerInfo_ValueForKey )( const char *key );

float ( *GetClientMaxspeed ) ( void );

int ( *CheckParm ) ( char *parm, char **ppnext );

void ( *Key_Event ) ( int key, int down );

void ( *GetMousePosition ) ( int *mx, int *my );

int ( *IsNoClipping ) ( void );

struct cl_entity_s *( *GetLocalPlayer ) ( void );

struct cl_entity_s *( *GetViewModel ) ( void );

struct cl_entity_s *( *GetEntityByIndex ) ( int idx );

float ( *GetClientTime ) ( void );

void ( *V_CalcShake ) ( void );

void ( *V_ApplyShake ) ( float *origin, float *angles, float factor );

int ( *PM_PointContents ) ( float *point, int *truecontents );

int ( *PM_WaterEntity ) ( float *p );

struct pmtrace_s *( *PM_TraceLine ) ( float *start, float *end, int flags, int usehull, int ignore_pe );

struct model_s *( *CL_LoadModel ) ( const char *modelname, int *index );

int ( *CL_CreateVisibleEntity ) ( int type, struct cl_entity_s *ent );

const struct model_s * ( *GetSpritePointer ) ( HSPRITE hSprite );

void ( *pfnPlaySoundByNameAtLocation ) ( char *szSound, float volume, float *origin );

unsigned short ( *pfnPrecacheEvent ) ( int type, const char* psz );

void ( *pfnPlaybackEvent ) ( int flags, const struct edict_s *pInvoker, unsigned short eventindex, float delay, float *origin, float *angles, float fparam1, float fparam2, int iparam1, int iparam2, int bparam1, int bparam2 );

void ( *pfnWeaponAnim ) ( int iAnim, int body );

float ( *pfnRandomFloat ) ( float flLow, float flHigh );

long ( *pfnRandomLong ) ( long lLow, long lHigh );

void ( *pfnHookEvent ) ( char *name, void ( *pfnEvent )( struct event_args_s *args ) );

int (*Con_IsVisible) ();

const char *( *pfnGetGameDirectory ) ( void );

struct cvar_s *( *pfnGetCvarPointer ) ( const char *szName );

const char *( *Key_LookupBinding ) ( const char *pBinding );

const char *( *pfnGetLevelName ) ( void );

void ( *pfnGetScreenFade ) ( struct screenfade_s *fade );

void ( *pfnSetScreenFade ) ( struct screenfade_s *fade );

void *( *VGui_GetPanel ) ( );

void ( *VGui_ViewportPaintBackground ) (int extents[4]);

byte* (*COM_LoadFile) ( char *path, int usehunk, int *pLength );

char* (*COM_ParseFile) ( char *data, char *token );

void (*COM_FreeFile) ( void *buffer );

struct triangleapi_s *pTriAPI;

struct efx_api_s *pEfxAPI;

struct event_api_s *pEventAPI;

struct demo_api_s *pDemoAPI;

struct net_api_s *pNetAPI;

struct IVoiceTweak_s *pVoiceTweak;

// returns 1 if the client is a spectator only (connected to a proxy), 0 otherwise or 2 if in dev_overview mode

int ( *IsSpectateOnly ) ( void );

struct model_s *( *LoadMapSprite ) ( const char *filename );

// file search functions

void ( *COM_AddAppDirectoryToSearchPath ) ( const char *pszBaseDir, const char *appName );

int ( *COM_ExpandFilename) ( const char *fileName, char *nameOutBuffer, int nameOutBufferSize );

// User info

// playerNum is in the range (1, MaxClients)

// returns NULL if player doesn't exit

// returns "" if no value is set

const char *( *PlayerInfo_ValueForKey )( int playerNum, const char *key );

void ( *PlayerInfo_SetValueForKey )( const char *key, const char *value );

// Gets a unique ID for the specified player. This is the same even if you see the player on a different server.

// iPlayer is an entity index, so client 0 would use iPlayer=1.

// Returns false if there is no player on the server in the specified slot.

qboolean (*GetPlayerUniqueID)(int iPlayer, char playerID[16]);

// TrackerID access

int (*GetTrackerIDForPlayer)(int playerSlot);

int (*GetPlayerForTrackerID)(int trackerID);

// Same as pfnServerCmd, but the message goes in the unreliable stream so it can't clog the net stream

// (but it might not get there).

int ( *pfnServerCmdUnreliable )( char *szCmdString );

} cl_enginefunc_t;[/cpp]

On aura vite remarqué que ce sont tout des pointeurs de fonctions, donc il suffit de creer une variable du type de la structure et de lui fournir l'adresse de la structure réel (Offset), et voila un hook du moteur HL1 est fait ^^

Maintenant il faut juste un Loader qui va injecter notre DLL dans le processus hl.exe :P

si vous le désirez, je suis d'accord de vous fournir le Loader que j'utilise (fait en ASM par koaD et modifié par moi)

J'ai posté sur mon site le Manuel d'utilisation (par défaut la touche pour ouvrir la console est DEL),

dans la bêta certains options telque changer la touche d'ouverture de la console n'est pas accessible.

Et pour pouvoir ouvrir la console, il faut etre en partie.

Alors oui il passe Developer a 1

et fps_max a 999

si tu regarde tu as plus de 100 fps ;)

mais cela était pour mes débugs et donc ne sera plus actif dans la version final.

N.B : pour ceux qui voudrais plus de 100 fps (environ 250/300 en jeu comme moi) fps_max au dela de 100 sans Developer 1, ne fonctionnera pas ;)

N.B : Ne me demandé pas comment faire un cheat, je ne vous l'expliquerai pas, j'en ai fait, et aucun ne sont détectable par VAC/VAC2, mais en aucun cas je ne fournirai des information pouvant vous aider à en développer, ni vous fournir les codes source entiers ou partiel des cheats que j'ai pu développer.

Il faut savoir que cheater c'est mal, moi je les ai développer pour m'amuser et non les utiliser, de plus cela fait un petit temps que je ne joue plus à counter-strike ou juste for fun de temps à autre ;)

Posté(e)
Merci, cela peut être constructif comme expérience ;)

Je te tiens au courant, car pour le moment j'ai énormément de travail.[/quotemsg]

Pas de problème. Bonne chance pour ton projet !

haha comment tu lui mets le grappin dessus :D[/quotemsg]

chut :o

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.