Files
FC1/PunkBuster/pbsdk.h
romkazvo 34d6c5d489 123
2023-08-07 19:29:24 +08:00

271 lines
7.7 KiB
C

// Copyright (C) 2001-2003 Even Balance, Inc.
//
//
// pbsdk.h
//
// EVEN BALANCE - T.RAY
//
#define _cplusplus
#include "pbcl.h"
#include "pbsv.h"
#if !defined(NOT_USE_PUNKBUSTER_SDK)
#ifdef __WITH_PB__
int PbSvAddClient ( char *addr , char *name , char *guid ) ;
int PbSvRemoveClient ( char *addr ) ;
//
// PB Integration Points - Typedefs
//
typedef char *(*PBtd_getBasePath) ( char *path , int maxlen ) ;
typedef char *(*PBtd_getHomePath) ( char *path , int maxlen ) ;
typedef void (*PBtd_CvarSet) ( const char *varName , const char *value ) ;
typedef void (*PBtd_SetClPunkBuster) ( char *value ) ;
typedef void (*PBtd_ExecCmd) ( const char *cmd ) ;
typedef void *(*PBtd_DllHandle) ( const char *modname ) ;
typedef char *(*PBtd_CvarValidate) ( char *buf ) ;
typedef int (*PBtd_CvarWalk) ( char **name , char **string , int *flags , char **resetString ) ;
typedef char *(*PBtd_GetKeyName) ( int keynum ) ;
typedef char *(*PBtd_GetKeyBinding) ( int keynum ) ;
typedef int (*PBtd_GetMaxKeys) ( void ) ;
typedef char *(*PBtd_GetServerAddr) ( void ) ;
typedef char *(*PBtd_GetKeyValue) ( char *s , char *k ) ;
typedef char *(*PBtd_GetServerInfo) ( void ) ;
typedef char *(*PBtd_GetCvarValue) ( char *var_name ) ;
typedef void (*PBtd_Out) ( char *msg ) ;
typedef void (*PBtd_SendClPacket) ( int datalen , char *data ) ;
typedef void (*PBtd_SendUdpPacket) ( char *addr , unsigned short port , int datalen , char *data , int isFromClient ) ;
typedef char *(*PBtd_GlQuery) ( int queryType ) ;
typedef void (*PBtd_SetSvPunkBuster) ( char *val ) ;
typedef void (*PBtd_DropClient) ( int clientIndex , char *reason ) ;
typedef int (*PBtd_GetMaxClients) ( void ) ;
typedef int (*PBtd_GetClientInfo) ( int index , stPb_Sv_Client *c ) ;
typedef int (*PBtd_GetClientStats) ( int index , char *data ) ;
typedef void (*PBtd_SendSvPacket) ( int datalen , char *data , int index ) ;
#define CONST_PBSDKID 0xFF80FF1E
#define PBNULLFUNC "NULL Function Pointer"
struct stPbSdk {
unsigned int PBSDKID ;
stPbCl pbcl ;
stPbSv pbsv ;
unsigned int flags ;
void *exeInstance ;
char *ConsoleCaptureBuf ;
int ConsoleCaptureBufLen ;
void *pbinterface ;
PBtd_getBasePath m_getBasePath ;
PBtd_getHomePath m_getHomePath ;
PBtd_CvarSet m_CvarSet ;
PBtd_SetClPunkBuster m_SetClPunkBuster ;
PBtd_ExecCmd m_ExecCmd ;
PBtd_DllHandle m_DllHandle ;
PBtd_CvarValidate m_CvarValidate ;
PBtd_CvarWalk m_CvarWalk ;
PBtd_GetKeyName m_GetKeyName ;
PBtd_GetKeyBinding m_GetKeyBinding ;
PBtd_GetMaxKeys m_GetMaxKeys ;
PBtd_GetServerAddr m_GetServerAddr ;
PBtd_GetKeyValue m_GetKeyValue ;
PBtd_GetServerInfo m_GetServerInfo ;
PBtd_GetCvarValue m_GetCvarValue ;
PBtd_Out m_Out ;
PBtd_SendClPacket m_SendClPacket ;
PBtd_SendUdpPacket m_SendUdpPacket ;
PBtd_GlQuery m_GlQuery ;
PBtd_SetSvPunkBuster m_SetSvPunkBuster ;
PBtd_DropClient m_DropClient ;
PBtd_GetMaxClients m_GetMaxClients ;
PBtd_GetClientInfo m_GetClientInfo ;
PBtd_GetClientStats m_GetClientStats ;
PBtd_SendSvPacket m_SendSvPacket ;
char *pb_getBasePath ( char *path , int maxlen ) {
if ( m_getBasePath == NULL ) {
*path = 0 ;
return PBNULLFUNC ;
}
return m_getBasePath ( path , maxlen ) ;
}
char *pb_getHomePath ( char *path , int maxlen ) {
if ( m_getHomePath == NULL ) {
*path = 0 ;
return PBNULLFUNC ;
}
return m_getHomePath ( path , maxlen ) ;
}
void pb_CvarSet ( const char *varName , const char *value ) {
if ( m_CvarSet == NULL ) return ;
m_CvarSet ( varName , value ) ;
}
void pb_SetClPunkBuster ( char *value ) {
if ( m_SetClPunkBuster == NULL ) return ;
m_SetClPunkBuster ( value ) ;
}
void pb_ExecCmd ( const char *cmd ) {
if ( m_ExecCmd == NULL ) return ;
m_ExecCmd ( cmd ) ;
}
void *pb_DllHandle ( const char *modname ) {
if ( m_DllHandle == NULL ) return NULL ;
return m_DllHandle ( modname ) ;
}
char *pb_CvarValidate ( char *buf ) {
if ( m_CvarValidate == NULL ) {
*buf = 0 ;
return buf ;
}
return m_CvarValidate ( buf ) ;
}
int pb_CvarWalk ( char **name , char **string , int *flags , char **resetString ) {
if ( m_CvarWalk == NULL ) return 0 ;
return m_CvarWalk ( name , string , flags , resetString ) ;
}
char *pb_GetKeyName ( int keynum ) {
if ( m_GetKeyName == NULL ) return "" ;
return m_GetKeyName ( keynum ) ;
}
char *pb_GetKeyBinding ( int keynum ) {
if ( m_GetKeyBinding == NULL ) return "" ;
return m_GetKeyBinding ( keynum ) ;
}
int pb_GetMaxKeys ( void ) {
if ( m_GetMaxKeys == NULL ) return 0 ;
return m_GetMaxKeys() ;
}
char *pb_GetServerAddr ( void ) {
if ( m_GetServerAddr == NULL ) return "" ;
return m_GetServerAddr() ;
}
char *pb_GetKeyValue ( char *s , char *k ) {
if ( m_GetKeyValue == NULL ) return "" ;
return m_GetKeyValue ( s , k ) ;
}
char *pb_GetServerInfo ( void ) {
if ( m_GetServerInfo == NULL ) return "" ;
return m_GetServerInfo() ;
}
char *pb_GetCvarValue ( char *var_name ) {
if ( m_GetCvarValue == NULL ) return "" ;
return m_GetCvarValue ( var_name ) ;
}
void pb_Outf ( char *msg , ... ) {
if ( m_Out == NULL ) return ;
char buf[4150] ;
va_list va ;
va_start ( va , msg ) ;
if ( strlen ( msg ) > 2048 ) {
strncpy ( buf , msg , 4096 ) ;
buf[4096] = 0 ;
} else _vsnprintf ( buf , 4096 , msg , va ) ;
m_Out ( buf ) ;
}
void pb_SendClPacket ( int datalen , char *data ) {
if ( m_SendClPacket == NULL ) return ;
m_SendClPacket ( datalen , data ) ;
}
void pb_SendUdpPacket ( char *addr , unsigned short port , int datalen , char *data , int isFromClient ) {
if ( m_SendUdpPacket == NULL ) return ;
m_SendUdpPacket ( addr , port , datalen , data , isFromClient ) ;
}
char *pb_GlQuery ( int queryType ) {
if ( m_GlQuery == NULL ) return NULL ;
return m_GlQuery ( queryType ) ;
}
void pb_SetSvPunkBuster ( char *val ) {
if ( m_SetSvPunkBuster == NULL ) return ;
m_SetSvPunkBuster ( val ) ;
}
void pb_DropClient ( int clientIndex , char *reason ) {
if ( m_DropClient == NULL ) return ;
m_DropClient ( clientIndex , reason ) ;
}
int pb_GetMaxClients ( void ) {
if ( m_GetMaxClients == NULL ) return 0 ;
return m_GetMaxClients() ;
}
int pb_GetClientInfo ( int index , stPb_Sv_Client *c ) {
if ( m_GetClientInfo == NULL ) return 0 ;
return m_GetClientInfo ( index , c ) ;
}
int pb_GetClientStats ( int index , char *data ) {
if ( m_GetClientStats == NULL ) return 0 ;
return m_GetClientStats ( index , data ) ;
}
void pb_SendSvPacket ( int datalen , char *data , int index ) {
if ( m_SendSvPacket == NULL ) return ;
m_SendSvPacket ( datalen , data , index ) ;
}
//constructor
stPbSdk() {
memset ( this , 0 , sizeof ( stPbSdk ) ) ;
PBSDKID = CONST_PBSDKID ;
pbsv.init() ;
pbcl.init() ;
pbcl.m_GlQuery = m_GlQuery ;
}
} ;
extern stPbSdk *pbsdk ;
//One game source module should "#define DEFINE_PbSdk" before including this file so that only one
// instance of the following struct and function are each defined in the game project.
//Usually, the source module containing the main() or WinMain() function will serve in that role.
#ifdef DEFINE_PbSdk
//single instance of stPbSdk
stPbSdk PbSdkInstance ;
stPbSdk *pbsdk = NULL ;//&PbSdkInstance ;
#define PbSdk_DEFINED
#if(0)//todotr
/*SDK-pbexport
This function is provided for games that need PB integration code inside multiple game components (i.e. EXE and/or DLLs)
It should be removed if not needed.
*/
//
// pb_Export
//
extern "C"
#ifdef __PBWIN32__
__declspec(dllexport)
#endif
char *pb_Export ( void )
{
return (char *) pbsdk ;
}
#endif //#ifdef DEFINE_PbSdk
#endif
//source modules other than the 'main' one (see above) will have one instance of a pointer to the stPbSdk struct
//this pointer will be populated by a call to PBsdk_getPbSdkPointer() (see below)
#ifndef PbSdk_DEFINED
#define PbSdk_DEFINED
stPbSdk *pbsdk = NULL ;
#endif
#endif //#ifdef __WITH_PB__
#endif // NOT_USE_PUNKBUSTER_SDK