271 lines
7.7 KiB
C
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
|