diff --git a/reapi/include/metamod/dllapi.h b/reapi/include/metamod/dllapi.h index 1563be0..2b23a63 100644 --- a/reapi/include/metamod/dllapi.h +++ b/reapi/include/metamod/dllapi.h @@ -1,189 +1,17 @@ -// dllapi.h - prototypes and typedefs for Half-Life DLL API routines +#pragma once -/* - * Copyright (c) 2001-2003 Will Day - * - * This file is part of Metamod. - * - * Metamod is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at - * your option) any later version. - * - * Metamod is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Metamod; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ - -#ifndef DLLAPI_H -#define DLLAPI_H - -#include "sdk_util.h" // BOOL -#include "osdep.h" // DLLEXPORT, etc +typedef void (*FN_GAMEINIT)(); // Typedefs for these are provided in SDK engine/eiface.h, but I didn't // like the names (APIFUNCTION, APIFUNCTION2, NEW_DLL_FUNCTIONS_FN). -typedef int (*GETENTITYAPI_FN) (DLL_FUNCTIONS *pFunctionTable, int interfaceVersion); -typedef int (*GETENTITYAPI2_FN) (DLL_FUNCTIONS *pFunctionTable, int *interfaceVersion); -typedef int (*GETNEWDLLFUNCTIONS_FN) (NEW_DLL_FUNCTIONS *pFunctionTable, int *interfaceVersion); +typedef int (*GETENTITYAPI_FN)(DLL_FUNCTIONS *pFunctionTable, int interfaceVersion); +typedef int (*GETENTITYAPI2_FN)(DLL_FUNCTIONS *pFunctionTable, int *interfaceVersion); +typedef int (*GETNEWDLLFUNCTIONS_FN)(NEW_DLL_FUNCTIONS *pFunctionTable, int *interfaceVersion); -// From SDK dlls/cbase.h: -C_DLLEXPORT int GetEntityAPI( DLL_FUNCTIONS *pFunctionTable, int interfaceVersion ); -C_DLLEXPORT int GetEntityAPI2( DLL_FUNCTIONS *pFunctionTable, int *interfaceVersion ); +C_DLLEXPORT int GetEntityAPI(DLL_FUNCTIONS *pFunctionTable, int interfaceVersion); +C_DLLEXPORT int GetEntityAPI2(DLL_FUNCTIONS *pFunctionTable, int *interfaceVersion); +C_DLLEXPORT int GetNewDLLFunctions(NEW_DLL_FUNCTIONS *pNewFunctionTable, int *interfaceVersion); -// No example in SDK.. -// From Adminmod dll.cpp: -C_DLLEXPORT int GetNewDLLFunctions( NEW_DLL_FUNCTIONS *pNewFunctionTable, int *interfaceVersion ); - - -// From SDK dlls/game.h: -extern void mm_GameDLLInit( void ); - -// From SDK dlls/cbase.h: -extern int mm_DispatchSpawn( edict_t *pent ); -extern void mm_DispatchThink( edict_t *pent ); -extern void mm_DispatchUse( edict_t *pentUsed, edict_t *pentOther ); -extern void mm_DispatchTouch( edict_t *pentTouched, edict_t *pentOther ); -extern void mm_DispatchBlocked( edict_t *pentBlocked, edict_t *pentOther ); -extern void mm_DispatchKeyValue( edict_t *pentKeyvalue, KeyValueData *pkvd ); -extern void mm_DispatchSave( edict_t *pent, SAVERESTOREDATA *pSaveData ); -extern int mm_DispatchRestore( edict_t *pent, SAVERESTOREDATA *pSaveData, int globalEntity ); -extern void mm_DispatchObjectCollisionBox( edict_t *pent ); -extern void mm_SaveWriteFields( SAVERESTOREDATA *pSaveData, const char *pname, void *pBaseData, TYPEDESCRIPTION *pFields, int fieldCount ); -extern void mm_SaveReadFields( SAVERESTOREDATA *pSaveData, const char *pname, void *pBaseData, TYPEDESCRIPTION *pFields, int fieldCount ); -extern void mm_SaveGlobalState( SAVERESTOREDATA *pSaveData ); -extern void mm_RestoreGlobalState( SAVERESTOREDATA *pSaveData ); -extern void mm_ResetGlobalState( void ); - -// From SDK dlls/client.h: -extern BOOL mm_ClientConnect( edict_t *pEntity, const char *pszName, const char *pszAddress, char szRejectReason[ 128 ] ); -extern void mm_ClientDisconnect( edict_t *pEntity ); -extern void mm_ClientKill( edict_t *pEntity ); -extern void mm_ClientPutInServer( edict_t *pEntity ); -extern void mm_ClientCommand( edict_t *pEntity ); -extern void mm_ClientUserInfoChanged( edict_t *pEntity, char *infobuffer ); -extern void mm_ServerActivate( edict_t *pEdictList, int edictCount, int clientMax ); -extern void mm_ServerDeactivate( void ); -extern void mm_PlayerPreThink( edict_t *pEntity ); -extern void mm_PlayerPostThink( edict_t *pEntity ); -extern void mm_StartFrame( void ); -extern void mm_ParmsNewLevel( void ); -extern void mm_ParmsChangeLevel( void ); -extern const char *mm_GetGameDescription( void ); -extern void mm_PlayerCustomization( edict_t *pEntity, customization_t *pCust ); -extern void mm_SpectatorConnect ( edict_t *pEntity ); -extern void mm_SpectatorDisconnect ( edict_t *pEntity ); -extern void mm_SpectatorThink ( edict_t *pEntity ); -extern void mm_Sys_Error( const char *error_string ); - -// From SDK pm_shared/pm_shared.h: -extern void mm_PM_Move ( struct playermove_s *ppmove, int server ); -extern void mm_PM_Init ( struct playermove_s *ppmove ); -extern char mm_PM_FindTextureType ( char *name ); - -// From SDK dlls/client.h: -extern void mm_SetupVisibility( edict_t *pViewEntity, edict_t *pClient, unsigned char **pvs, unsigned char **pas ); -extern void mm_UpdateClientData ( const struct edict_s *ent, int sendweapons, struct clientdata_s *cd ); -extern int mm_AddToFullPack( struct entity_state_s *state, int e, edict_t *ent, edict_t *host, int hostflags, int player, unsigned char *pSet ); -extern void mm_CreateBaseline( int player, int eindex, struct entity_state_s *baseline, struct edict_s *entity, int playermodelindex, vec3_t player_mins, vec3_t player_maxs ); -extern void mm_RegisterEncoders( void ); -extern int mm_GetWeaponData( struct edict_s *player, struct weapon_data_s *info ); -extern void mm_CmdStart( const edict_t *player, const struct usercmd_s *cmd, unsigned int random_seed ); -extern void mm_CmdEnd ( const edict_t *player ); -extern int mm_ConnectionlessPacket( const struct netadr_s *net_from, const char *args, char *response_buffer, int *response_buffer_size ); -extern int mm_GetHullBounds( int hullnumber, float *mins, float *maxs ); -extern void mm_CreateInstancedBaselines ( void ); -extern int mm_InconsistentFile( const edict_t *player, const char *filename, char *disconnect_message ); -extern int mm_AllowLagCompensation( void ); - -// No example from SDK... -extern void mm_OnFreeEntPrivateData(edict_t pEnt); -extern void mm_GameShutdown(void); -extern int mm_ShouldCollide(edict_t *pentTouched, edict_t *pentOther); -//Added 2005-08-11 (no SDK update) -extern void mm_CvarValue(const edict_t *pEnt, const char *value); //! Obsolete! Use mm_CvarValue2 instead -//Added 2005-11-22 (no SDK update) -extern void mm_CvarValue2(const edict_t *pEnt, int requestID, const char *cvarName, const char *value); - - -// Typedefs for the above functions: - -typedef void (*FN_GAMEINIT) ( void ); -typedef int (*FN_DISPATCHSPAWN) ( edict_t *pent ); -typedef void (*FN_DISPATCHTHINK) ( edict_t *pent ); -typedef void (*FN_DISPATCHUSE) ( edict_t *pentUsed, edict_t *pentOther ); -typedef void (*FN_DISPATCHTOUCH) ( edict_t *pentTouched, edict_t *pentOther ); -typedef void (*FN_DISPATCHBLOCKED) ( edict_t *pentBlocked, edict_t *pentOther ); -typedef void (*FN_DISPATCHKEYVALUE) ( edict_t *pentKeyvalue, KeyValueData *pkvd ); -typedef void (*FN_DISPATCHSAVE) ( edict_t *pent, SAVERESTOREDATA *pSaveData ); -typedef int (*FN_DISPATCHRESTORE) ( edict_t *pent, SAVERESTOREDATA *pSaveData, int globalEntity ); -typedef void (*FN_DISPATCHOBJECTCOLLISIONBOX) ( edict_t *pent ); -typedef void (*FN_SAVEWRITEFIELDS) ( SAVERESTOREDATA *pSaveData, const char *pname, void *pBaseData, TYPEDESCRIPTION *pFields, int fieldCount ); -typedef void (*FN_SAVEREADFIELDS) ( SAVERESTOREDATA *pSaveData, const char *pname, void *pBaseData, TYPEDESCRIPTION *pFields, int fieldCount ); -typedef void (*FN_SAVEGLOBALSTATE) ( SAVERESTOREDATA *pSaveData ); -typedef void (*FN_RESTOREGLOBALSTATE) ( SAVERESTOREDATA *pSaveData ); -typedef void (*FN_RESETGLOBALSTATE) ( void ); - -typedef BOOL (*FN_CLIENTCONNECT) ( edict_t *pEntity, const char *pszName, const char *pszAddress, char szRejectReason[ 128 ] ); -typedef void (*FN_CLIENTDISCONNECT) ( edict_t *pEntity ); -typedef void (*FN_CLIENTKILL) ( edict_t *pEntity ); -typedef void (*FN_CLIENTPUTINSERVER) ( edict_t *pEntity ); -typedef void (*FN_CLIENTCOMMAND) ( edict_t *pEntity ); -typedef void (*FN_CLIENTUSERINFOCHANGED) ( edict_t *pEntity, char *infobuffer ); -typedef void (*FN_SERVERACTIVATE) ( edict_t *pEdictList, int edictCount, int clientMax ); -typedef void (*FN_SERVERDEACTIVATE) ( void ); -typedef void (*FN_PLAYERPRETHINK) ( edict_t *pEntity ); -typedef void (*FN_PLAYERPOSTTHINK) ( edict_t *pEntity ); -typedef void (*FN_STARTFRAME) ( void ); -typedef void (*FN_PARMSNEWLEVEL) ( void ); -typedef void (*FN_PARMSCHANGELEVEL) ( void ); -typedef const char *(*FN_GETGAMEDESCRIPTION) ( void ); -typedef void (*FN_PLAYERCUSTOMIZATION) ( edict_t *pEntity, customization_t *pCust ); -typedef void (*FN_SPECTATORCONNECT) ( edict_t *pEntity ); -typedef void (*FN_SPECTATORDISCONNECT) ( edict_t *pEntity ); -typedef void (*FN_SPECTATORTHINK) ( edict_t *pEntity ); -typedef void (*FN_SYS_ERROR) ( const char *error_string ); - -typedef void (*FN_PM_MOVE) ( struct playermove_s *ppmove, int server ); -typedef void (*FN_PM_INIT) ( struct playermove_s *ppmove ); -typedef char (*FN_PM_FINDTEXTURETYPE) ( char *name ); - -typedef void (*FN_SETUPVISIBILITY) ( edict_t *pViewEntity, edict_t *pClient, unsigned char **pvs, unsigned char **pas ); -typedef void (*FN_UPDATECLIENTDATA) ( const struct edict_s *ent, int sendweapons, struct clientdata_s *cd ); -typedef int (*FN_ADDTOFULLPACK) ( struct entity_state_s *state, int e, edict_t *ent, edict_t *host, int hostflags, int player, unsigned char *pSet ); -typedef void (*FN_CREATEBASELINE) ( int player, int eindex, struct entity_state_s *baseline, struct edict_s *entity, int playermodelindex, vec3_t player_mins, vec3_t player_maxs ); -typedef void (*FN_REGISTERENCODERS) ( void ); -typedef int (*FN_GETWEAPONDATA) ( struct edict_s *player, struct weapon_data_s *info ); -typedef void (*FN_CMDSTART) ( const edict_t *player, const struct usercmd_s *cmd, unsigned int random_seed ); -typedef void (*FN_CMDEND) ( const edict_t *player ); -typedef int (*FN_CONNECTIONLESSPACKET) ( const struct netadr_s *net_from, const char *args, char *response_buffer, int *response_buffer_size ); -typedef int (*FN_GETHULLBOUNDS) ( int hullnumber, float *mins, float *maxs ); -typedef void (*FN_CREATEINSTANCEDBASELINES) ( void ); -typedef int (*FN_INCONSISTENTFILE) ( const edict_t *player, const char *filename, char *disconnect_message ); -typedef int (*FN_ALLOWLAGCOMPENSATION) ( void ); - -typedef void (*FN_ONFREEENTPRIVATEDATA) (edict_t *pEnt); -typedef void (*FN_GAMESHUTDOWN) (void); -typedef int (*FN_SHOULDCOLLIDE) (edict_t *pentTouched, edict_t *pentOther); -//Added 2005-08-11 (no SDK update) -typedef void (*FN_CVARVALUE)(const edict_t *pEnt, const char *value); //! Obsolete! Use FN_CVARVALUE2 instead -//Added 2005-11-22 (no SDK update) -typedef void (*FN_CVARVALUE2)(const edict_t *pEnt, int requestID, const char *cvarName, const char *value); - -#endif /* DLLAPI_H */ +#ifdef METAMOD_CORE +void compile_gamedll_callbacks(); +#endif diff --git a/reapi/include/metamod/engine_api.h b/reapi/include/metamod/engine_api.h index 3e46d28..29d5456 100644 --- a/reapi/include/metamod/engine_api.h +++ b/reapi/include/metamod/engine_api.h @@ -1,461 +1,21 @@ -// engine_api.h - prototypes and typedefs for Half-Life engine functions +#pragma once -/* - * Copyright (c) 2001-2003 Will Day - * - * This file is part of Metamod. - * - * Metamod is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at - * your option) any later version. - * - * Metamod is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Metamod; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ - -#ifndef ENGINE_API_H -#define ENGINE_API_H - -#include +struct enginefuncs_s; // Plugin's GetEngineFunctions, called by metamod. -typedef int (*GET_ENGINE_FUNCTIONS_FN) (enginefuncs_t *pengfuncsFromEngine, int *interfaceVersion); +typedef int (*GET_ENGINE_FUNCTIONS_FN)(enginefuncs_s *pengfuncsFromEngine, int *interfaceVersion); // According to SDK engine/eiface.h: -//! enginefuncs_t -//! ONLY ADD NEW FUNCTIONS TO THE END OF THIS STRUCT. INTERFACE VERSION IS FROZEN AT 138 +// ONLY ADD NEW FUNCTIONS TO THE END OF THIS STRUCT. INTERFACE VERSION IS FROZEN AT 138 #define ENGINE_INTERFACE_VERSION 138 // Protect against other projects which use this include file but use the // normal enginefuncs_t type for their meta_engfuncs. #ifdef METAMOD_CORE -# include "meta_eiface.h" // meta_enginefuncs_t -extern meta_enginefuncs_t meta_engfuncs; + #include "meta_eiface.h" // meta_enginefuncs_t + extern meta_enginefuncs_t g_meta_engfuncs; + + void compile_engine_callbacks(); #else -extern enginefuncs_t meta_engfuncs; + extern enginefuncs_t meta_engfuncs; #endif - -// From SDK engine/eiface.h: -extern int mm_PrecacheModel(char *s); -extern int mm_PrecacheSound(char *s); -extern void mm_SetModel(edict_t *e, const char *m); -extern int mm_ModelIndex(const char *m); -extern int mm_ModelFrames(int modelIndex); - -extern void mm_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax); -extern void mm_ChangeLevel(char *s1, char *s2); -extern void mm_GetSpawnParms(edict_t *ent); -extern void mm_SaveSpawnParms(edict_t *ent); - -extern float mm_VecToYaw(const float *rgflVector); -extern void mm_VecToAngles(const float *rgflVectorIn, float *rgflVectorOut); -extern void mm_MoveToOrigin(edict_t *ent, const float *pflGoal, float dist, int iMoveType); -extern void mm_ChangeYaw(edict_t *ent); -extern void mm_ChangePitch(edict_t *ent); - -extern edict_t *mm_FindEntityByString(edict_t *pEdictStartSearchAfter, const char *pszField, const char *pszValue); -extern int mm_GetEntityIllum(edict_t *pEnt); -extern edict_t *mm_FindEntityInSphere(edict_t *pEdictStartSearchAfter, const float *org, float rad); -extern edict_t *mm_FindClientInPVS(edict_t *pEdict); -extern edict_t *mm_EntitiesInPVS(edict_t *pplayer); - -extern void mm_MakeVectors(const float *rgflVector); -extern void mm_AngleVectors(const float *rgflVector, float *forward, float *right, float *up); - -extern edict_t *mm_CreateEntity(void); -extern void mm_RemoveEntity(edict_t *e); -extern edict_t *mm_CreateNamedEntity(int className); - -extern void mm_MakeStatic(edict_t *ent); -extern int mm_EntIsOnFloor(edict_t *e); -extern int mm_DropToFloor(edict_t *e); - -extern int mm_WalkMove(edict_t *ent, float yaw, float dist, int iMode); -extern void mm_SetOrigin(edict_t *e, const float *rgflOrigin); - -extern void mm_EmitSound(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch); -extern void mm_EmitAmbientSound(edict_t *entity, float *pos, const char *samp, float vol, float attenuation, int fFlags, int pitch); - -extern void mm_TraceLine(const float *v1, const float *v2, int fNoMonsters, edict_t *pentToSkip, TraceResult *ptr); -extern void mm_TraceToss(edict_t *pent, edict_t *pentToIgnore, TraceResult *ptr); -extern int mm_TraceMonsterHull(edict_t *pEdict, const float *v1, const float *v2, int fNoMonsters, edict_t *pentToSkip, TraceResult *ptr); -extern void mm_TraceHull(const float *v1, const float *v2, int fNoMonsters, int hullNumber, edict_t *pentToSkip, TraceResult *ptr); -extern void mm_TraceModel(const float *v1, const float *v2, int hullNumber, edict_t *pent, TraceResult *ptr); -extern const char *mm_TraceTexture(edict_t *pTextureEntity, const float *v1, const float *v2 ); -extern void mm_TraceSphere(const float *v1, const float *v2, int fNoMonsters, float radius, edict_t *pentToSkip, TraceResult *ptr); -extern void mm_GetAimVector(edict_t *ent, float speed, float *rgflReturn); - -extern void mm_ServerCommand(char *str); -extern void mm_ServerExecute(void); -extern void ClientCommand(edict_t *pEdict, char *szFmt, ...); - -extern void mm_ParticleEffect(const float *org, const float *dir, float color, float count); -extern void mm_LightStyle(int style, char *val); -extern int mm_DecalIndex(const char *name); -extern int mm_PointContents(const float *rgflVector); - -extern void mm_MessageBegin(int msg_dest, int msg_type, const float *pOrigin, edict_t *ed); -extern void mm_MessageEnd(void); - -extern void mm_WriteByte(int iValue); -extern void mm_WriteChar(int iValue); -extern void mm_WriteShort(int iValue); -extern void mm_WriteLong(int iValue); -extern void mm_WriteAngle(float flValue); -extern void mm_WriteCoord(float flValue); -extern void mm_WriteString(const char *sz); -extern void mm_WriteEntity(int iValue); - -extern void mm_CVarRegister(cvar_t *pCvar); -extern float mm_CVarGetFloat(const char *szVarName); -extern const char* mm_CVarGetString(const char *szVarName); -extern void mm_CVarSetFloat(const char *szVarName, float flValue); -extern void mm_CVarSetString(const char *szVarName, const char *szValue); - -extern void mm_AlertMessage(ALERT_TYPE atype, char *szFmt, ...); -#ifdef HLSDK_3_2_OLD_EIFACE -extern void mm_EngineFprintf(FILE *pfile, char *szFmt, ...); -#else -extern void mm_EngineFprintf(void *pfile, char *szFmt, ...); -#endif - -#ifdef HLSDK_3_2_OLD_EIFACE -extern void *mm_PvAllocEntPrivateData(edict_t *pEdict, long cb); -#else -extern void *mm_PvAllocEntPrivateData(edict_t *pEdict, int32 cb); -#endif -extern void *mm_PvEntPrivateData(edict_t *pEdict); -extern void mm_FreeEntPrivateData(edict_t *pEdict); - -extern const char *mm_SzFromIndex(int iString); -extern int mm_AllocString(const char *szValue); - -extern struct entvars_s *mm_GetVarsOfEnt(edict_t *pEdict); -extern edict_t *mm_PEntityOfEntOffset(int iEntOffset); -extern int mm_EntOffsetOfPEntity(const edict_t *pEdict); -extern int mm_IndexOfEdict(const edict_t *pEdict); -extern edict_t *mm_PEntityOfEntIndex(int iEntIndex); -extern edict_t *mm_FindEntityByVars(struct entvars_s *pvars); -extern void *mm_GetModelPtr(edict_t *pEdict); - -extern int mm_RegUserMsg(const char *pszName, int iSize); - -extern void mm_AnimationAutomove(const edict_t *pEdict, float flTime); -extern void mm_GetBonePosition(const edict_t *pEdict, int iBone, float *rgflOrigin, float *rgflAngles ); - -#ifdef HLSDK_3_2_OLD_EIFACE -extern unsigned long mm_FunctionFromName( const char *pName ); -extern const char *mm_NameForFunction( unsigned long function ); -#else -extern uint32 mm_FunctionFromName( const char *pName ); -extern const char *mm_NameForFunction( uint32 function ); -#endif - -extern void mm_ClientPrintf( edict_t *pEdict, PRINT_TYPE ptype, const char *szMsg ); //! JOHN: engine callbacks so game DLL can print messages to individual clients -extern void mm_ServerPrint( const char *szMsg ); - -extern const char *mm_Cmd_Args( void ); //! these 3 added -extern const char *mm_Cmd_Argv( int argc ); //! so game DLL can easily -extern int mm_Cmd_Argc( void ); //! access client 'cmd' strings - -extern void mm_GetAttachment(const edict_t *pEdict, int iAttachment, float *rgflOrigin, float *rgflAngles ); - -extern void mm_CRC32_Init(CRC32_t *pulCRC); -extern void mm_CRC32_ProcessBuffer(CRC32_t *pulCRC, void *p, int len); -extern void mm_CRC32_ProcessByte(CRC32_t *pulCRC, unsigned char ch); -extern CRC32_t mm_CRC32_Final(CRC32_t pulCRC); - -#ifdef HLSDK_3_2_OLD_EIFACE -extern long mm_RandomLong(long lLow, long lHigh); -#else -extern int32 mm_RandomLong(int32 lLow, int32 lHigh); -#endif -extern float mm_RandomFloat(float flLow, float flHigh); - -extern void mm_SetView(const edict_t *pClient, const edict_t *pViewent ); -extern float mm_Time( void ); -extern void mm_CrosshairAngle(const edict_t *pClient, float pitch, float yaw); - -extern byte * mm_LoadFileForMe(char *filename, int *pLength); -extern void mm_FreeFile(void *buffer); - -extern void mm_EndSection(const char *pszSectionName); //! trigger_endsection -extern int mm_CompareFileTime(char *filename1, char *filename2, int *iCompare); -extern void mm_GetGameDir(char *szGetGameDir); -extern void mm_Cvar_RegisterVariable(cvar_t *variable); -extern void mm_FadeClientVolume(const edict_t *pEdict, int fadePercent, int fadeOutSeconds, int holdTime, int fadeInSeconds); -extern void mm_SetClientMaxspeed(const edict_t *pEdict, float fNewMaxspeed); -extern edict_t * mm_CreateFakeClient(const char *netname); //! returns NULL if fake client can't be created -extern void mm_RunPlayerMove(edict_t *fakeclient, const float *viewangles, float forwardmove, float sidemove, float upmove, unsigned short buttons, byte impulse, byte msec ); -extern int mm_NumberOfEntities(void); - -extern char *mm_GetInfoKeyBuffer(edict_t *e); //! passing in NULL gets the serverinfo -extern char *mm_InfoKeyValue(char *infobuffer, char *key); -extern void mm_SetKeyValue(char *infobuffer, char *key, char *value); -extern void mm_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value); - -extern int mm_IsMapValid(char *filename); -extern void mm_StaticDecal( const float *origin, int decalIndex, int entityIndex, int modelIndex ); -extern int mm_PrecacheGeneric(char *s); -extern int mm_GetPlayerUserId(edict_t *e ); //! returns the server assigned userid for this player. useful for logging frags, etc. returns -1 if the edict couldn't be found in the list of clients -extern void mm_BuildSoundMsg(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed); -extern int mm_IsDedicatedServer(void);//! is this a dedicated server? -extern cvar_t *mm_CVarGetPointer(const char *szVarName); -extern unsigned int mm_GetPlayerWONId(edict_t *e); //! returns the server assigned WONid for this player. useful for logging frags, etc. returns -1 if the edict couldn't be found in the list of clients - -//! YWB 8/1/99 TFF Physics additions -extern void mm_Info_RemoveKey( char *s, const char *key ); -extern const char *mm_GetPhysicsKeyValue( const edict_t *pClient, const char *key ); -extern void mm_SetPhysicsKeyValue( const edict_t *pClient, const char *key, const char *value ); -extern const char *mm_GetPhysicsInfoString( const edict_t *pClient ); -extern unsigned short mm_PrecacheEvent( int type, const char *psz ); -extern void mm_PlaybackEvent( int flags, const edict_t *pInvoker, unsigned short eventindex, float delay, float *origin, float *angles, float fparam1, float fparam2, int iparam1, int iparam2, int bparam1, int bparam2 ); - -extern unsigned char *mm_SetFatPVS( float *org ); -extern unsigned char *mm_SetFatPAS( float *org ); - -extern int mm_CheckVisibility( const edict_t *entity, unsigned char *pset ); - -extern void mm_DeltaSetField( struct delta_s *pFields, const char *fieldname ); -extern void mm_DeltaUnsetField( struct delta_s *pFields, const char *fieldname ); -extern void mm_DeltaAddEncoder( char *name, void (*conditionalencode)( struct delta_s *pFields, const unsigned char *from, const unsigned char *to ) ); -extern int mm_GetCurrentPlayer( void ); -extern int mm_CanSkipPlayer( const edict_t *player ); -extern int mm_DeltaFindField( struct delta_s *pFields, const char *fieldname ); -extern void mm_DeltaSetFieldByIndex( struct delta_s *pFields, int fieldNumber ); -extern void mm_DeltaUnsetFieldByIndex( struct delta_s *pFields, int fieldNumber ); - -extern void mm_SetGroupMask( int mask, int op ); - -extern int CreateInstancedBaseline( int classname, struct entity_state_s *baseline ); -extern void mm_Cvar_DirectSet( struct cvar_s *var, char *value ); - -//! Forces the client and server to be running with the same version of the specified file -//!( e.g., a player model ). -//! Calling this has no effect in single player -extern void mm_ForceUnmodified( FORCE_TYPE type, float *mins, float *maxs, const char *filename ); - -extern void mm_GetPlayerStats( const edict_t *pClient, int *ping, int *packet_loss ); - -extern void mm_AddServerCommand( char *cmd_name, void (*function) (void) ); -// Added in SDK 2.2: -extern qboolean mm_Voice_GetClientListening(int iReceiver, int iSender); -extern qboolean mm_Voice_SetClientListening(int iReceiver, int iSender, qboolean bListen); -// Added for HL 1109 (no SDK update): -extern const char *mm_pfnGetPlayerAuthId(edict_t *e); -// Added 2003-11-10 (no SDK update): -extern sequenceEntry_s * mm_SequenceGet(const char* fileName, const char* entryName); -extern sentenceEntry_s * mm_SequencePickSentence(const char* groupName, int pickMethod, int *picked); -extern int mm_GetFileSize(char *filename); -extern unsigned int mm_GetApproxWavePlayLen(const char *filepath); -extern int mm_IsCareerMatch(void); -extern int mm_GetLocalizedStringLength(const char *label); -extern void mm_RegisterTutorMessageShown(int mid); -extern int mm_GetTimesTutorMessageShown(int mid); -extern void mm_ProcessTutorMessageDecayBuffer(int *buffer, int bufferLength); -extern void mm_ConstructTutorMessageDecayBuffer(int *buffer, int bufferLength); -extern void mm_ResetTutorMessageDecayData(void); -//Added 2005-08-11 (no SDK update) -extern void mm_QueryClientCvarValue(const edict_t *pEdict, const char *cvarName); //! Obsolete! Use mm_QueryClientCvarValue2 instead -//Added 2005-11-22 (no SDK update) -extern void mm_QueryClientCvarValue2(const edict_t *pEdict, const char *cvarName, int requestID); - - -// Typedefs for the above functions: - -typedef int (*FN_PRECACHEMODEL) (char* s); -typedef int (*FN_PRECACHESOUND) (char* s); -typedef void (*FN_SETMODEL) (edict_t *e, const char *m); -typedef int (*FN_MODELINDEX) (const char *m); -typedef int (*FN_MODELFRAMES) (int modelIndex); -typedef void (*FN_SETSIZE) (edict_t *e, const float *rgflMin, const float *rgflMax); -typedef void (*FN_CHANGELEVEL) (char *s1, char *s2); -typedef void (*FN_GETSPAWNPARMS) (edict_t *ent); -typedef void (*FN_SAVESPAWNPARMS) (edict_t *ent); -typedef float (*FN_VECTOYAW) (const float *rgflVector); -typedef void (*FN_VECTOANGLES) (const float *rgflVectorIn, float *rgflVectorOut); -typedef void (*FN_MOVETOORIGIN) (edict_t *ent, const float *pflGoal, float dist, int iMoveType); -typedef void (*FN_CHANGEYAW) (edict_t *ent); -typedef void (*FN_CHANGEPITCH) (edict_t *ent); -typedef edict_t * (*FN_FINDENTITYBYSTRING) (edict_t *pEdictStartSearchAfter, const char *pszField, const char *pszValue); -typedef int (*FN_GETENTITYILLUM) (edict_t *pEnt); -typedef edict_t * (*FN_FINDENTITYINSPHERE) (edict_t *pEdictStartSearchAfter, const float *org, float rad); -typedef edict_t * (*FN_FINDCLIENTINPVS) (edict_t *pEdict); -typedef edict_t * (*FN_ENTITIESINPVS) (edict_t *pplayer); -typedef void (*FN_MAKEVECTORS) (const float *rgflVector); -typedef void (*FN_ANGLEVECTORS) (const float *rgflVector, float *forward, float *right, float *up); -typedef edict_t * (*FN_CREATEENTITY) (void); -typedef void (*FN_REMOVEENTITY) (edict_t *e); -typedef edict_t * (*FN_CREATENAMEDENTITY) (int className); -typedef void (*FN_MAKESTATIC) (edict_t *ent); -typedef int (*FN_ENTISONFLOOR) (edict_t *e); -typedef int (*FN_DROPTOFLOOR) (edict_t *e); -typedef int (*FN_WALKMOVE) (edict_t *ent, float yaw, float dist, int iMode); -typedef void (*FN_SETORIGIN) (edict_t *e, const float *rgflOrigin); -typedef void (*FN_EMITSOUND) (edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch); -typedef void (*FN_EMITAMBIENTSOUND) (edict_t *entity, float *pos, const char *samp, float vol, float attenuation, int fFlags, int pitch); -typedef void (*FN_TRACELINE) (const float *v1, const float *v2, int fNoMonsters, edict_t *pentToSkip, TraceResult *ptr); -typedef void (*FN_TRACETOSS) (edict_t *pent, edict_t *pentToIgnore, TraceResult *ptr); -typedef int (*FN_TRACEMONSTERHULL) (edict_t *pEdict, const float *v1, const float *v2, int fNoMonsters, edict_t *pentToSkip, TraceResult *ptr); -typedef void (*FN_TRACEHULL) (const float *v1, const float *v2, int fNoMonsters, int hullNumber, edict_t *pentToSkip, TraceResult *ptr); -typedef void (*FN_TRACEMODEL) (const float *v1, const float *v2, int hullNumber, edict_t *pent, TraceResult *ptr); -typedef const char * (*FN_TRACETEXTURE) (edict_t *pTextureEntity, const float *v1, const float *v2 ); -typedef void (*FN_TRACESPHERE) (const float *v1, const float *v2, int fNoMonsters, float radius, edict_t *pentToSkip, TraceResult *ptr); -typedef void (*FN_GETAIMVECTOR) (edict_t *ent, float speed, float *rgflReturn); -typedef void (*FN_SERVERCOMMAND) (char *str); -typedef void (*FN_SERVEREXECUTE) (void); -typedef void (*FN_CLIENTCOMMAND_ENG) (edict_t *pEdict, char *szFmt, ...); -typedef void (*FN_PARTICLEEFFECT) (const float *org, const float *dir, float color, float count); -typedef void (*FN_LIGHTSTYLE) (int style, char *val); -typedef int (*FN_DECALINDEX) (const char *name); -typedef int (*FN_POINTCONTENTS) (const float *rgflVector); -typedef void (*FN_MESSAGEBEGIN) (int msg_dest, int msg_type, const float *pOrigin, edict_t *ed); -typedef void (*FN_MESSAGEEND) (void); -typedef void (*FN_WRITEBYTE) (int iValue); -typedef void (*FN_WRITECHAR) (int iValue); -typedef void (*FN_WRITESHORT) (int iValue); -typedef void (*FN_WRITELONG) (int iValue); -typedef void (*FN_WRITEANGLE) (float flValue); -typedef void (*FN_WRITECOORD) (float flValue); -typedef void (*FN_WRITESTRING) (const char *sz); -typedef void (*FN_WRITEENTITY) (int iValue); -typedef void (*FN_CVARREGISTER) (cvar_t *pCvar); -typedef float (*FN_CVARGETFLOAT) (const char *szVarName); -typedef const char * (*FN_CVARGETSTRING) (const char *szVarName); -typedef void (*FN_CVARSETFLOAT) (const char *szVarName, float flValue); -typedef void (*FN_CVARSETSTRING) (const char *szVarName, const char *szValue); -typedef void (*FN_ALERTMESSAGE) (ALERT_TYPE atype, char *szFmt, ...); -#ifdef HLSDK_3_2_OLD_EIFACE -typedef void (*FN_ENGINEFPRINTF) (FILE *pfile, char *szFmt, ...); -typedef void * (*FN_PVALLOCENTPRIVATEDATA) (edict_t *pEdict, long cb); -#else -typedef void (*FN_ENGINEFPRINTF) (void *pfile, char *szFmt, ...); -typedef void * (*FN_PVALLOCENTPRIVATEDATA) (edict_t *pEdict, int32 cb); -#endif -typedef void * (*FN_PVENTPRIVATEDATA) (edict_t *pEdict); -typedef void (*FN_FREEENTPRIVATEDATA) (edict_t *pEdict); -typedef const char * (*FN_SZFROMINDEX) (int iString); -typedef int (*FN_ALLOCSTRING) (const char *szValue); -typedef struct entvars_s * (*FN_GETVARSOFENT) (edict_t *pEdict); -typedef edict_t * (*FN_PENTITYOFENTOFFSET) (int iEntOffset); -typedef int (*FN_ENTOFFSETOFPENTITY) (const edict_t *pEdict); -typedef int (*FN_INDEXOFEDICT) (const edict_t *pEdict); -typedef edict_t * (*FN_PENTITYOFENTINDEX) (int iEntIndex); -typedef edict_t * (*FN_FINDENTITYBYVARS) (struct entvars_s *pvars); -typedef void * (*FN_GETMODELPTR) (edict_t *pEdict); -typedef int (*FN_REGUSERMSG) (const char *pszName, int iSize); -typedef void (*FN_ANIMATIONAUTOMOVE) (const edict_t *pEdict, float flTime); -typedef void (*FN_GETBONEPOSITION) (const edict_t *pEdict, int iBone, float *rgflOrigin, float *rgflAngles ); -#ifdef HLSDK_3_2_OLD_EIFACE -typedef unsigned long (*FN_FUNCTIONFROMNAME) ( const char *pName ); -typedef const char * (*FN_NAMEFORFUNCTION) ( unsigned long function ); -#else -typedef uint32 (*FN_FUNCTIONFROMNAME) ( const char *pName ); -typedef const char * (*FN_NAMEFORFUNCTION) ( uint32 function ); -#endif -typedef void (*FN_CLIENTPRINTF) ( edict_t *pEdict, PRINT_TYPE ptype, const char *szMsg ); -typedef void (*FN_SERVERPRINT) ( const char *szMsg ); -typedef const char * (*FN_CMD_ARGS) ( void ); -typedef const char * (*FN_CMD_ARGV) ( int argc ); -typedef int (*FN_CMD_ARGC) ( void ); -typedef void (*FN_GETATTACHMENT) (const edict_t *pEdict, int iAttachment, float *rgflOrigin, float *rgflAngles ); -typedef void (*FN_CRC32_INIT) (CRC32_t *pulCRC); -typedef void (*FN_CRC32_PROCESSBUFFER) (CRC32_t *pulCRC, void *p, int len); -typedef void (*FN_CRC32_PROCESSBYTE) (CRC32_t *pulCRC, unsigned char ch); -typedef CRC32_t (*FN_CRC32_FINAL) (CRC32_t pulCRC); -#ifdef HLSDK_3_2_OLD_EIFACE -typedef long (*FN_RANDOMLONG) (long lLow, long lHigh); -#else -typedef int32 (*FN_RANDOMLONG) (int32 lLow, int32 lHigh); -#endif -typedef float (*FN_RANDOMFLOAT) (float flLow, float flHigh); -typedef void (*FN_SETVIEW) (const edict_t *pClient, const edict_t *pViewent ); -typedef float (*FN_TIME) ( void ); -typedef void (*FN_CROSSHAIRANGLE) (const edict_t *pClient, float pitch, float yaw); -typedef byte * (*FN_LOADFILEFORME) (char *filename, int *pLength); -typedef void (*FN_FREEFILE) (void *buffer); -typedef void (*FN_ENDSECTION) (const char *pszSectionName); -typedef int (*FN_COMPAREFILETIME) (char *filename1, char *filename2, int *iCompare); -typedef void (*FN_GETGAMEDIR) (char *szGetGameDir); -typedef void (*FN_CVAR_REGISTERVARIABLE) (cvar_t *variable); -typedef void (*FN_FADECLIENTVOLUME) (const edict_t *pEdict, int fadePercent, int fadeOutSeconds, int holdTime, int fadeInSeconds); -typedef void (*FN_SETCLIENTMAXSPEED) (const edict_t *pEdict, float fNewMaxspeed); -typedef edict_t * (*FN_CREATEFAKECLIENT) (const char *netname); -typedef void (*FN_RUNPLAYERMOVE) (edict_t *fakeclient, const float *viewangles, float forwardmove, float sidemove, float upmove, unsigned short buttons, byte impulse, byte msec ); -typedef int (*FN_NUMBEROFENTITIES) (void); -typedef char * (*FN_GETINFOKEYBUFFER) (edict_t *e); -typedef char * (*FN_INFOKEYVALUE) (char *infobuffer, char *key); -typedef void (*FN_SETKEYVALUE) (char *infobuffer, char *key, char *value); -typedef void (*FN_SETCLIENTKEYVALUE) (int clientIndex, char *infobuffer, char *key, char *value); -typedef int (*FN_ISMAPVALID) (char *filename); -typedef void (*FN_STATICDECAL) ( const float *origin, int decalIndex, int entityIndex, int modelIndex ); -typedef int (*FN_PRECACHEGENERIC) (char *s); -typedef int (*FN_GETPLAYERUSERID) (edict_t *e ); -typedef void (*FN_BUILDSOUNDMSG) (edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed); -typedef int (*FN_ISDEDICATEDSERVER) (void); -typedef cvar_t * (*FN_CVARGETPOINTER) (const char *szVarName); -typedef unsigned int (*FN_GETPLAYERWONID) (edict_t *e); -typedef void (*FN_INFO_REMOVEKEY) ( char *s, const char *key ); -typedef const char * (*FN_GETPHYSICSKEYVALUE) ( const edict_t *pClient, const char *key ); -typedef void (*FN_SETPHYSICSKEYVALUE) ( const edict_t *pClient, const char *key, const char *value ); -typedef const char * (*FN_GETPHYSICSINFOSTRING) ( const edict_t *pClient ); -typedef unsigned short (*FN_PRECACHEEVENT) ( int type, const char *psz ); -typedef void (*FN_PLAYBACKEVENT) ( int flags, const edict_t *pInvoker, unsigned short eventindex, float delay, float *origin, float *angles, float fparam1, float fparam2, int iparam1, int iparam2, int bparam1, int bparam2 ); -typedef unsigned char * (*FN_SETFATPVS) ( float *org ); -typedef unsigned char * (*FN_SETFATPAS) ( float *org ); -typedef int (*FN_CHECKVISIBILITY) ( const edict_t *entity, unsigned char *pset ); -typedef void (*FN_DELTASETFIELD) ( struct delta_s *pFields, const char *fieldname ); -typedef void (*FN_DELTAUNSETFIELD) ( struct delta_s *pFields, const char *fieldname ); -typedef void (*FN_DELTAADDENCODER) ( char *name, void (*conditionalencode)( struct delta_s *pFields, const unsigned char *from, const unsigned char *to ) ); -typedef int (*FN_GETCURRENTPLAYER) ( void ); -typedef int (*FN_CANSKIPPLAYER) ( const edict_t *player ); -typedef int (*FN_DELTAFINDFIELD) ( struct delta_s *pFields, const char *fieldname ); -typedef void (*FN_DELTASETFIELDBYINDEX) ( struct delta_s *pFields, int fieldNumber ); -typedef void (*FN_DELTAUNSETFIELDBYINDEX) ( struct delta_s *pFields, int fieldNumber ); -typedef void (*FN_SETGROUPMASK) ( int mask, int op ); -typedef int (*FN_CREATEINSTANCEDBASELINE) ( int classname, struct entity_state_s *baseline ); -typedef void (*FN_CVAR_DIRECTSET) ( struct cvar_s *var, char *value ); -typedef void (*FN_FORCEUNMODIFIED) ( FORCE_TYPE type, float *mins, float *maxs, const char *filename ); -typedef void (*FN_GETPLAYERSTATS) ( const edict_t *pClient, int *ping, int *packet_loss ); -typedef void (*FN_ADDSERVERCOMMAND) ( char *cmd_name, void (*function) (void) ); -// Added in SDK 2.2: -typedef qboolean (*FN_VOICE_GETCLIENTLISTENING) (int iReceiver, int iSender); -typedef qboolean (*FN_VOICE_SETCLIENTLISTENING) (int iReceiver, int iSender, qboolean bListen); -// Added for HL 1109 (no SDK update): -typedef const char * (*FN_GETPLAYERAUTHID) (edict_t *e); -// Added 2003-11-10 (no SDK update): -typedef sequenceEntry_s * (*FN_SEQUENCEGET) (const char* fileName, const char* entryName); -typedef sentenceEntry_s * (*FN_SEQUENCEPICKSENTENCE) (const char* groupName, int pickMethod, int *picked); -typedef int (*FN_GETFILESIZE) (char *filename); -typedef unsigned int (*FN_GETAPPROXWAVEPLAYLEN) (const char *filepath); -typedef int (*FN_ISCAREERMATCH) (void); -typedef int (*FN_GETLOCALIZEDSTRINGLENGTH) (const char *label); -typedef void (*FN_REGISTERTUTORMESSAGESHOWN) (int mid); -typedef int (*FN_GETTIMESTUTORMESSAGESHOWN) (int mid); -typedef void (*FN_PROCESSTUTORMESSAGEDECAYBUFFER) (int *buffer, int bufferLength); -typedef void (*FN_CONSTRUCTTUTORMESSAGEDECAYBUFFER) (int *buffer, int bufferLength); -typedef void (*FN_RESETTUTORMESSAGEDECAYDATA) (void); -//Added 2005-08-11 (no SDK update) -typedef void (*FN_QUERYCLIENTCVARVALUE)(const edict_t *pEdict, const char *cvarName); //! Obsolete! Use FN_QUERYCLIENTCVARVALUE2 instead -//Added 2005-11-22 (no SDK update) -typedef void (*FN_QUERYCLIENTCVARVALUE2)(const edict_t *pEdict, const char *cvarName, int requestID); - -#endif /* ENGINE_API_H */ \ No newline at end of file diff --git a/reapi/include/metamod/enginecallbacks.h b/reapi/include/metamod/enginecallbacks.h index 7045fbb..e45aa71 100644 --- a/reapi/include/metamod/enginecallbacks.h +++ b/reapi/include/metamod/enginecallbacks.h @@ -1,38 +1,4 @@ -// enginecallbacks.h - wrapper for - -/* - * Copyright (c) 2001-2006 Will Day - * - * This file is part of Metamod. - * - * Metamod is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at - * your option) any later version. - * - * Metamod is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Metamod; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ - -#ifndef MM_ENGINECALLBACKS_H -#define MM_ENGINECALLBACKS_H +#pragma once // This file is a wrapper around the SDK's enginecallback.h file. We need // this because we use a different type for the global object g_engfuncs, @@ -41,34 +7,30 @@ // This is only done for files that belong to Metamod, not other projects // like plugins that use this file, or others that include it, too. // Since we don't have a clean seperation of include files right now we -// "hack" our way around that by using a flag METAMOD_CORE which is set +// "hack" our way around that by using a flag METAMOD_CORE which is set // when compiling Metamod proper. #ifdef METAMOD_CORE -# include "meta_eiface.h" // HL_enginefuncs_t + #include "meta_eiface.h" // HL_enginefuncs_t -// Use a #define to bend the enginefuncs_t type to our HL_enginefuncs_t -// type instead as we now use that for the global object g_engfuncs. -# define enginefuncs_t HL_enginefuncs_t -#endif /* METAMOD_CORE */ + // Use a #define to bend the enginefuncs_t type to our HL_enginefuncs_t + // type instead as we now use that for the global object g_engfuncs. + #define enginefuncs_t HL_enginefuncs_t +#endif #include // ALERT, etc #ifdef METAMOD_CORE -# undef enginefuncs_t -#endif /* METAMOD_CORE */ +#undef enginefuncs_t +#endif // Also, create some additional macros for engine callback functions, which // weren't in SDK dlls/enginecallbacks.h but probably should have been. - -#define GET_INFOKEYBUFFER (*g_engfuncs.pfnGetInfoKeyBuffer) -#define INFOKEY_VALUE (*g_engfuncs.pfnInfoKeyValue) -#define SET_CLIENT_KEYVALUE (*g_engfuncs.pfnSetClientKeyValue) -#define REG_SVR_COMMAND (*g_engfuncs.pfnAddServerCommand) -#define SERVER_PRINT (*g_engfuncs.pfnServerPrint) -#define SET_SERVER_KEYVALUE (*g_engfuncs.pfnSetKeyValue) -#define QUERY_CLIENT_CVAR_VALUE (*g_engfuncs.pfnQueryClientCvarValue) +#define GET_INFOKEYBUFFER (*g_engfuncs.pfnGetInfoKeyBuffer) +#define INFOKEY_VALUE (*g_engfuncs.pfnInfoKeyValue) +#define SET_CLIENT_KEYVALUE (*g_engfuncs.pfnSetClientKeyValue) +#define REG_SVR_COMMAND (*g_engfuncs.pfnAddServerCommand) +#define SERVER_PRINT (*g_engfuncs.pfnServerPrint) +#define SET_SERVER_KEYVALUE (*g_engfuncs.pfnSetKeyValue) +#define QUERY_CLIENT_CVAR_VALUE (*g_engfuncs.pfnQueryClientCvarValue) #define QUERY_CLIENT_CVAR_VALUE2 (*g_engfuncs.pfnQueryClientCvarValue2) - - -#endif /* MM_ENGINECALLBACKS_H */ diff --git a/reapi/include/metamod/h_export.h b/reapi/include/metamod/h_export.h index 878acd1..ab3ffb3 100644 --- a/reapi/include/metamod/h_export.h +++ b/reapi/include/metamod/h_export.h @@ -1,46 +1,5 @@ -// h_export.h - prototypes for h_export.cpp - -/* - * Copyright (c) 2001-2003 Will Day - * - * This file is part of Metamod. - * - * Metamod is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at - * your option) any later version. - * - * Metamod is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Metamod; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ - -#ifndef H_EXPORT_H -#define H_EXPORT_H - -#include "osdep.h" // DLLEXPORT, WINAPI, etc +#pragma once // Our GiveFnptrsToDll, called by engine. -typedef void (WINAPI *GIVE_ENGINE_FUNCTIONS_FN) (enginefuncs_t - *pengfuncsFromEngine, globalvars_t *pGlobals); - -C_DLLEXPORT void WINAPI GiveFnptrsToDll(enginefuncs_t *pengfuncsFromEngine, - globalvars_t *pGlobals); - -#endif /* H_EXPORT_H */ +typedef void (WINAPI *GIVE_ENGINE_FUNCTIONS_FN)(enginefuncs_t *pengfuncsFromEngine, globalvars_t *pGlobals); +C_DLLEXPORT void WINAPI GiveFnptrsToDll(enginefuncs_t *pengfuncsFromEngine, globalvars_t *pGlobals); diff --git a/reapi/include/metamod/log_meta.h b/reapi/include/metamod/log_meta.h deleted file mode 100644 index ec47c6d..0000000 --- a/reapi/include/metamod/log_meta.h +++ /dev/null @@ -1,99 +0,0 @@ -// log_meta.h - functions & macros for logging - -/* - * Copyright (c) 2001-2003 Will Day - * - * This file is part of Metamod. - * - * Metamod is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at - * your option) any later version. - * - * Metamod is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Metamod; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ - -#ifndef LOG_META_H -#define LOG_META_H - -#include "enginecallbacks.h" // ALERT, etc -#include "sdk_util.h" // UTIL_VarArgs, etc - -// Debug logging. -// -// This is done as a macro, rather than a function. This way, you can add -// DEBUG statements all over, without worrying about performance -// implications. If the debugging level is set low, all those statements -// will only generate a simple float/int compare each; if we were to use a -// function instead of a macro, it would end up wasting a lot of cpu cycles -// calling/returning from the function every time. With a fair number of -// DEBUG statements, or if they're placed in frequently excuted code, the -// overhead of the wasted function calls could significantly impact server -// performance. -// -// For this reason, we also compare directly to the float value of the -// cvar, rather than calling CVAR_GET_FLOAT() and thus generating a string -// compare for each DEBUG statement. -// -// Called as: -// META_DEBUG(3, ("return code: %d", ret)); -// -// Note the double parens, and the missing parens around "args" in the -// macro itself. Note also the "do..while(0)" loop wrapping the -// statements, so they become a single statement when expanded, necessary -// for times when it might be called as a single-statement result of an -// else (or other flow control). -// -// As suggested by Jussi Kivilinna: Use "if(meta_debug.value < level); else -// DO(something);" style because "meta_debug.value < level" is in most common -// case "false". Check disasm, contitional jumps are predicted not to be -// taken by CPU. -// -// Yes, it's all a bit of a hack. - -#define META_DEBUG(level, args) \ - do { if(meta_debug.value < level) break; else ALERT(at_logged, "[META] (debug:%d) %s\n", level, UTIL_VarArgs args ); } while(0) - -// max buffer size for printed messages -#define MAX_LOGMSG_LEN 1024 - -// max buffer size for client messages -#define MAX_CLIENTMSG_LEN 128 - -extern cvar_t meta_debug; - -// META_DEV provides debug logging via the cvar "developer" (when set to 1) -// and uses a function call rather than a macro as it's really intended to -// be used only during startup, before meta_debug has been set from reading -// server.cfg. -// NOTE: META_DEV has now been mostly obsoleted in the code. - -void META_CONS(char *fmt, ...); -void META_DEV(char *fmt, ...); -void META_INFO(char *fmt, ...); -void META_WARNING(char *fmt, ...); -void META_ERROR(char *fmt, ...); -void META_LOG(char *fmt, ...); -void META_CLIENT(edict_t *pEntity, char *fmt, ...); - -void flush_ALERT_buffer(void); - -#endif /* LOG_META_H */ diff --git a/reapi/include/metamod/meta_api.h b/reapi/include/metamod/meta_api.h index 3bbccfa..8fb5e7c 100644 --- a/reapi/include/metamod/meta_api.h +++ b/reapi/include/metamod/meta_api.h @@ -1,44 +1,11 @@ -// meta_api.h - description of metamod's DLL interface - -/* - * Copyright (c) 2001-2003 Will Day - * - * This file is part of Metamod. - * - * Metamod is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at - * your option) any later version. - * - * Metamod is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Metamod; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ - -#ifndef META_API_H -#define META_API_H +#pragma once #include "dllapi.h" // GETENTITYAPI_FN, etc -#include "engine_api.h" // GET_ENGINE_FUNCTIONS_FN, etc +#include "engine_api.h" // GET_ENGINE_FUNCTIONS_FN, etc +#include "enginecallbacks.h" +#include "h_export.h" #include "plinfo.h" // plugin_info_t, etc -#include "mutil.h" // mutil_funcs_t, etc -#include "osdep.h" // DLLEXPORT, etc +#include "mutil.h" // Version consists of "major:minor", two separate integer numbers. // Version 1 original @@ -57,49 +24,48 @@ // Version 5:9 added GetGameInfo [v1.14] // Version 5:10 added GINFO_REALDLL_FULLPATH for GetGameInfo [v1.17] // Version 5:11 added plugin loading and unloading API [v1.18] -// Version 5:12 added util code for checking player query status [v1.18] -// Version 5:13 added cvarquery2 support and api for calling hook tables [v1.19] +// Version 5:12 added IS_QUERYING_CLIENT_CVAR to mutils [v1.18] +// Version 5:13 added MAKE_REQUESTID and GET_HOOK_TABLES to mutils [v1.19] #define META_INTERFACE_VERSION "5:13" -#ifdef UNFINISHED -// Version 5:99 added event hook utility functions [v.???] -#define META_INTERFACE_VERSION "5:99" -#endif /* UNFINISHED */ - // Flags returned by a plugin's api function. // NOTE: order is crucial, as greater/less comparisons are made. -typedef enum { +enum META_RES +{ MRES_UNSET = 0, MRES_IGNORED, // plugin didn't take any action MRES_HANDLED, // plugin did something, but real function should still be called MRES_OVERRIDE, // call real function, but use my return value MRES_SUPERCEDE, // skip real function; use my return value -} META_RES; +}; // Variables provided to plugins. -typedef struct meta_globals_s { +struct meta_globals_t +{ META_RES mres; // writable; plugin's return flag META_RES prev_mres; // readable; return flag of the previous plugin called META_RES status; // readable; "highest" return flag so far void *orig_ret; // readable; return value from "real" function void *override_ret; // readable; return value from overriding/superceding plugin -} meta_globals_t; +}; extern meta_globals_t *gpMetaGlobals; -#define SET_META_RESULT(result) gpMetaGlobals->mres=result +#define SET_META_RESULT(result) gpMetaGlobals->mres = result + #define RETURN_META(result) \ - do { gpMetaGlobals->mres=result; return; } while(0) + do { gpMetaGlobals->mres = result; return; } while (0) #define RETURN_META_VALUE(result, value) \ - do { gpMetaGlobals->mres=result; return(value); } while(0) + do { gpMetaGlobals->mres = result; return value; } while (0) -#define META_RESULT_STATUS gpMetaGlobals->status +#define META_RESULT_STATUS gpMetaGlobals->status #define META_RESULT_PREVIOUS gpMetaGlobals->prev_mres #define META_RESULT_ORIG_RET(type) *(type *)gpMetaGlobals->orig_ret -#define META_RESULT_OVERRIDE_RET(type) *(type *)gpMetaGlobals->override_ret +#define META_RESULT_OVERRIDE_RET(type) *(type *)gpMetaGlobals->override_ret // Table of getapi functions, retrieved from each plugin. -typedef struct { +struct META_FUNCTIONS +{ GETENTITYAPI_FN pfnGetEntityAPI; GETENTITYAPI_FN pfnGetEntityAPI_Post; GETENTITYAPI2_FN pfnGetEntityAPI2; @@ -108,13 +74,14 @@ typedef struct { GETNEWDLLFUNCTIONS_FN pfnGetNewDLLFunctions_Post; GET_ENGINE_FUNCTIONS_FN pfnGetEngineFunctions; GET_ENGINE_FUNCTIONS_FN pfnGetEngineFunctions_Post; -} META_FUNCTIONS; +}; // Pair of function tables provided by game DLL. -typedef struct { +struct gamedll_funcs_t +{ DLL_FUNCTIONS *dllapi_table; NEW_DLL_FUNCTIONS *newapi_table; -} gamedll_funcs_t; +}; // Declared in plugin; referenced in macros. extern gamedll_funcs_t *gpGamedllFuncs; @@ -125,38 +92,26 @@ extern mutil_funcs_t *gpMetaUtilFuncs; // procedure. In particular, this will allow for DLL's that can be used as // both standalone DLL's and metamod plugins. (optional; not required in // plugin) -C_DLLEXPORT void Meta_Init(void); -typedef void (*META_INIT_FN) (void); +C_DLLEXPORT void Meta_Init(); +typedef void (*META_INIT_FN)(); // Get info about plugin, compare meta_interface versions, provide meta // utility callback functions. -C_DLLEXPORT int Meta_Query(char *interfaceVersion, - plugin_info_t **plinfo, - mutil_funcs_t *pMetaUtilFuncs); -typedef int (*META_QUERY_FN) (char *interfaceVersion, - plugin_info_t **plinfo, - mutil_funcs_t *pMetaUtilFuncs); +C_DLLEXPORT int Meta_Query(char *interfaceVersion, plugin_info_t **plinfo, mutil_funcs_t *pMetaUtilFuncs); +typedef int (*META_QUERY_FN) (char *interfaceVersion, plugin_info_t **plinfo, mutil_funcs_t *pMetaUtilFuncs); -// Attach the plugin to the API; get the table of getapi functions; give +// Attach the plugin to the API; get the table of getapi functions; give // meta_globals and gamedll_funcs. -C_DLLEXPORT int Meta_Attach(PLUG_LOADTIME now, - META_FUNCTIONS *pFunctionTable, - meta_globals_t *pMGlobals, - gamedll_funcs_t *pGamedllFuncs); -typedef int (*META_ATTACH_FN) (PLUG_LOADTIME now, - META_FUNCTIONS *pFunctionTable, - meta_globals_t *pMGlobals, - gamedll_funcs_t *pGamedllFuncs); +C_DLLEXPORT int Meta_Attach(PLUG_LOADTIME now, META_FUNCTIONS *pFunctionTable, meta_globals_t *pMGlobals, gamedll_funcs_t *pGamedllFuncs); +typedef int (*META_ATTACH_FN) (PLUG_LOADTIME now, META_FUNCTIONS *pFunctionTable, meta_globals_t *pMGlobals, gamedll_funcs_t *pGamedllFuncs); // Detach the plugin; tell why and when. C_DLLEXPORT int Meta_Detach(PLUG_LOADTIME now, PL_UNLOAD_REASON reason); typedef int (*META_DETACH_FN) (PLUG_LOADTIME now, PL_UNLOAD_REASON reason); // Standard HL SDK interface function prototypes. -C_DLLEXPORT int GetEntityAPI_Post(DLL_FUNCTIONS *pFunctionTable, - int interfaceVersion ); -C_DLLEXPORT int GetEntityAPI2_Post(DLL_FUNCTIONS *pFunctionTable, - int *interfaceVersion ); +C_DLLEXPORT int GetEntityAPI_Post(DLL_FUNCTIONS *pFunctionTable, int interfaceVersion ); +C_DLLEXPORT int GetEntityAPI2_Post(DLL_FUNCTIONS *pFunctionTable, int *interfaceVersion ); // Additional SDK-like interface function prototypes. C_DLLEXPORT int GetNewDLLFunctions_Post(NEW_DLL_FUNCTIONS *pNewFunctionTable, int *interfaceVersion ); @@ -166,67 +121,65 @@ C_DLLEXPORT int GetEngineFunctions_Post(enginefuncs_t *pengfuncsFromEngine, int // Convenience macros for accessing GameDLL functions. Note: these talk // _directly_ to the gamedll, and are not multiplexed through Metamod to // the other plugins. -// DLL API functions: -#define MDLL_FUNC gpGamedllFuncs->dllapi_table -#define MDLL_GameDLLInit MDLL_FUNC->pfnGameInit -#define MDLL_Spawn MDLL_FUNC->pfnSpawn -#define MDLL_Think MDLL_FUNC->pfnThink -#define MDLL_Use MDLL_FUNC->pfnUse -#define MDLL_Touch MDLL_FUNC->pfnTouch -#define MDLL_Blocked MDLL_FUNC->pfnBlocked -#define MDLL_KeyValue MDLL_FUNC->pfnKeyValue -#define MDLL_Save MDLL_FUNC->pfnSave -#define MDLL_Restore MDLL_FUNC->pfnRestore +// DLL API functions: +#define MDLL_FUNC gpGamedllFuncs->dllapi_table + +#define MDLL_GameDLLInit MDLL_FUNC->pfnGameInit +#define MDLL_Spawn MDLL_FUNC->pfnSpawn +#define MDLL_Think MDLL_FUNC->pfnThink +#define MDLL_Use MDLL_FUNC->pfnUse +#define MDLL_Touch MDLL_FUNC->pfnTouch +#define MDLL_Blocked MDLL_FUNC->pfnBlocked +#define MDLL_KeyValue MDLL_FUNC->pfnKeyValue +#define MDLL_Save MDLL_FUNC->pfnSave +#define MDLL_Restore MDLL_FUNC->pfnRestore #define MDLL_ObjectCollsionBox MDLL_FUNC->pfnAbsBox #define MDLL_SaveWriteFields MDLL_FUNC->pfnSaveWriteFields -#define MDLL_SaveReadFields MDLL_FUNC->pfnSaveReadFields +#define MDLL_SaveReadFields MDLL_FUNC->pfnSaveReadFields #define MDLL_SaveGlobalState MDLL_FUNC->pfnSaveGlobalState #define MDLL_RestoreGlobalState MDLL_FUNC->pfnRestoreGlobalState #define MDLL_ResetGlobalState MDLL_FUNC->pfnResetGlobalState -#define MDLL_ClientConnect MDLL_FUNC->pfnClientConnect +#define MDLL_ClientConnect MDLL_FUNC->pfnClientConnect #define MDLL_ClientDisconnect MDLL_FUNC->pfnClientDisconnect -#define MDLL_ClientKill MDLL_FUNC->pfnClientKill +#define MDLL_ClientKill MDLL_FUNC->pfnClientKill #define MDLL_ClientPutInServer MDLL_FUNC->pfnClientPutInServer -#define MDLL_ClientCommand MDLL_FUNC->pfnClientCommand +#define MDLL_ClientCommand MDLL_FUNC->pfnClientCommand #define MDLL_ClientUserInfoChanged MDLL_FUNC->pfnClientUserInfoChanged -#define MDLL_ServerActivate MDLL_FUNC->pfnServerActivate +#define MDLL_ServerActivate MDLL_FUNC->pfnServerActivate #define MDLL_ServerDeactivate MDLL_FUNC->pfnServerDeactivate -#define MDLL_PlayerPreThink MDLL_FUNC->pfnPlayerPreThink +#define MDLL_PlayerPreThink MDLL_FUNC->pfnPlayerPreThink #define MDLL_PlayerPostThink MDLL_FUNC->pfnPlayerPostThink -#define MDLL_StartFrame MDLL_FUNC->pfnStartFrame -#define MDLL_ParmsNewLevel MDLL_FUNC->pfnParmsNewLevel +#define MDLL_StartFrame MDLL_FUNC->pfnStartFrame +#define MDLL_ParmsNewLevel MDLL_FUNC->pfnParmsNewLevel #define MDLL_ParmsChangeLevel MDLL_FUNC->pfnParmsChangeLevel #define MDLL_GetGameDescription MDLL_FUNC->pfnGetGameDescription #define MDLL_PlayerCustomization MDLL_FUNC->pfnPlayerCustomization #define MDLL_SpectatorConnect MDLL_FUNC->pfnSpectatorConnect #define MDLL_SpectatorDisconnect MDLL_FUNC->pfnSpectatorDisconnect -#define MDLL_SpectatorThink MDLL_FUNC->pfnSpectatorThink -#define MDLL_Sys_Error MDLL_FUNC->pfnSys_Error -#define MDLL_PM_Move MDLL_FUNC->pfnPM_Move -#define MDLL_PM_Init MDLL_FUNC->pfnPM_Init +#define MDLL_SpectatorThink MDLL_FUNC->pfnSpectatorThink +#define MDLL_Sys_Error MDLL_FUNC->pfnSys_Error +#define MDLL_PM_Move MDLL_FUNC->pfnPM_Move +#define MDLL_PM_Init MDLL_FUNC->pfnPM_Init #define MDLL_PM_FindTextureType MDLL_FUNC->pfnPM_FindTextureType #define MDLL_SetupVisibility MDLL_FUNC->pfnSetupVisibility #define MDLL_UpdateClientData MDLL_FUNC->pfnUpdateClientData -#define MDLL_AddToFullPack MDLL_FUNC->pfnAddToFullPack -#define MDLL_CreateBaseline MDLL_FUNC->pfnCreateBaseline +#define MDLL_AddToFullPack MDLL_FUNC->pfnAddToFullPack +#define MDLL_CreateBaseline MDLL_FUNC->pfnCreateBaseline #define MDLL_RegisterEncoders MDLL_FUNC->pfnRegisterEncoders -#define MDLL_GetWeaponData MDLL_FUNC->pfnGetWeaponData -#define MDLL_CmdStart MDLL_FUNC->pfnCmdStart -#define MDLL_CmdEnd MDLL_FUNC->pfnCmdEnd +#define MDLL_GetWeaponData MDLL_FUNC->pfnGetWeaponData +#define MDLL_CmdStart MDLL_FUNC->pfnCmdStart +#define MDLL_CmdEnd MDLL_FUNC->pfnCmdEnd #define MDLL_ConnectionlessPacket MDLL_FUNC->pfnConnectionlessPacket -#define MDLL_GetHullBounds MDLL_FUNC->pfnGetHullBounds -#define MDLL_CreateInstancedBaselines MDLL_FUNC->pfnCreateInstancedBaselines +#define MDLL_GetHullBounds MDLL_FUNC->pfnGetHullBounds +#define MDLL_CreateInstancedBaselines MDLL_FUNC->pfnCreateInstancedBaselines #define MDLL_InconsistentFile MDLL_FUNC->pfnInconsistentFile #define MDLL_AllowLagCompensation MDLL_FUNC->pfnAllowLagCompensation // NEW API functions: -#define MNEW_FUNC gpGamedllFuncs->newapi_table +#define MNEW_FUNC gpGamedllFuncs->newapi_table #define MNEW_OnFreeEntPrivateData MNEW_FUNC->pfnOnFreeEntPrivateData -#define MNEW_GameShutdown MNEW_FUNC->pfnGameShutdown -#define MNEW_ShouldCollide MNEW_FUNC->pfnShouldCollide -#define MNEW_CvarValue MNEW_FUNC->pfnCvarValue -#define MNEW_CvarValue2 MNEW_FUNC->pfnCvarValue2 - -#endif /* META_API_H */ +#define MNEW_GameShutdown MNEW_FUNC->pfnGameShutdown +#define MNEW_ShouldCollide MNEW_FUNC->pfnShouldCollide +#define MNEW_CvarValue MNEW_FUNC->pfnCvarValue diff --git a/reapi/include/metamod/mhook.h b/reapi/include/metamod/mhook.h deleted file mode 100644 index b56b0a6..0000000 --- a/reapi/include/metamod/mhook.h +++ /dev/null @@ -1,157 +0,0 @@ -#ifdef UNFINISHED - -// mhook.h - class and types to describe hooks and hooklists - -/* - * Copyright (c) 2001-2003 Will Day - * - * This file is part of Metamod. - * - * Metamod is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at - * your option) any later version. - * - * Metamod is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Metamod; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ - -#ifndef MHOOK_H -#define MHOOK_H - -#include "plinfo.h" // plid_t, etc -#include "types_meta.h" // mBOOL -#include "osdep.h" // MUTEX_T, etc - -#define MAX_HOOKS 100 - -// Particular game events that we detect, though whatever means we can best -// find. -typedef enum { - EV_NONE = 0, // no event here... - // non-log detected - EV_PLAYER_CONNECT, // ie ClientConnect - EV_PLAYER_ENTER, // ie ClientPutInServer - EV_PLAYER_LEAVE, // ie ClientDisconnect (opposite PutInServer) - EV_PLAYER_SPAWN, // deadflag change to DEAD_NO - EV_PLAYER_DEATH, // deadflag change to DEAD_DEAD - EV_PLAYER_CHANGE_NAME, // netname change in ClientUserInfoChanged - // log detected - EV_PLAYER_JOIN_TEAM, // ie "Joe<15><785><>" joined team "CT" - EV_PLAYER_SUICIDE, // ie "Joe<15><785>" committed suicide ... - EV_PLAYER_CHANGE_ROLE, // TFC: ie "Joe<15><785>" changed role to "Pyro" - EV_TEAM_KILL, // ie "Joe<15><785>" killed "Bob<16><342>" ... - EV_WEAPON_KILL, // ie "Joe<15><785>" killed "Sam<17><197>" with "sg552" - EV_TEAM_SCORE, // ie Team "CT" scored "7" with "2" players -} game_event_t; - -// Info corresponding to a player, in particular the info found in the logline. -typedef struct { - char *name; - int userid; - int wonid; - char *team; -} event_player_t; - -// Info for an event, mostly corresponding to info from a logline. -typedef struct { - game_event_t evtype; // specific event, if identified. - char *buf; // copy of the logmsg, with embedded NULLs - event_player_t *player; - char *action; // "triggered" string, or a generic action string - event_player_t *target; - char *with; -} event_args_t; - -// Types for callback functions to be called for requested event/logline. -typedef void (*event_func_t) (game_event_t event, event_args_t *args, - const char *logline); -typedef void (*logmatch_func_t) (const char *pattern, event_args_t *args, - const char *logline); - -// The 4 types of hook requests we accept. -typedef enum { - H_NONE = 0, - H_EVENT, // Specific event, from a short list. - H_TRIGGER, // A given "triggered" string. - H_STRING, // Any substring of logline. - H_REGEX, // A regular expression matching of logline. -} hook_t; - - -// Class for individual hook function, as registered by a plugin. -class MHook { - friend class MHookList; - friend class MFuncQueue; - private: - // data: - int index; - hook_t type; // EVENT, TRIGGER, etc - plid_t plid; - int pl_index; // index of matching plugin - void *pfnHandle; - game_event_t event; // if type is H_EVENT - const char *match; // if type is TRIGGER, STRING, or REGEX - // Copy/Assignment constructors, to satisfy -Weffc++. - // Note however, we declare them private and don't define them, since - // we don't ever want to copy or assign instances of the class. - // (thanks to O'Reilly "C++: The Core Language", page 113) - MHook(const MHook &src); - void operator=(const MHook &src); - // constructors: - MHook(void); - MHook(int idx, plid_t pid, game_event_t evt, event_func_t pfn); - MHook(int idx, plid_t pid, hook_t tp, const char *cp, logmatch_func_t pfn); - // functions: - mBOOL call(event_args_t *args, const char *logline); - mBOOL enqueue(MFuncQueue *mfq, event_args_t *args, const char *logline); - public: - // no public interfaces; everything done from friend MHookList. -}; - - -// Class for list of registered hook functions. -class MHookList { - private: - // data: - MHook *hlist[MAX_HOOKS]; - int size; // set to MAX_HOOKS in constructor - int endlist; - MUTEX_T mx_hlist; - int MXlock(void) { return(MUTEX_LOCK(&mx_hlist)); }; - int MXunlock(void) { return(MUTEX_UNLOCK(&mx_hlist)); }; - public: - // constructor: - MHookList(void); - // functions: - int add(plid_t plid, game_event_t event, event_func_t pfnHandle); - int add(plid_t plid, hook_t type, const char *match, - logmatch_func_t pfnHandle); - mBOOL remove(plid_t plid, int hindex); - int remove_all(plid_t plid); - mBOOL call(event_args_t *args, const char *logline); - mBOOL enqueue(MFuncQueue *mfq, hook_t htype, event_args_t *evargs, - const char *logline); - char *str_htype(hook_t htype); -}; - -#endif /* MHOOK_H */ - -#endif /* UNFINISHED */ diff --git a/reapi/include/metamod/mreg.h b/reapi/include/metamod/mreg.h deleted file mode 100644 index 00fe0c9..0000000 --- a/reapi/include/metamod/mreg.h +++ /dev/null @@ -1,183 +0,0 @@ -// mreg.h - description of registered items (classes MRegCmd, MRegCmdList) - -/* - * Copyright (c) 2001-2003 Will Day - * - * This file is part of Metamod. - * - * Metamod is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at - * your option) any later version. - * - * Metamod is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Metamod; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ - -#ifndef MREG_H -#define MREG_H - -#include "types_meta.h" // mBOOL - -// Number of entries to add to reglists when they need to grow. Typically -// more cvars than commands, so we grow them at different increments. -#define REG_CMD_GROWSIZE 32 -#define REG_CVAR_GROWSIZE 64 - -// Width required to printf a Reg*List index number, for show() functions. -// This used to correspond to the number of digits in MAX_REG, which was a -// fixed, compile-time limit. However, now that the reg lists are grown -// dynamically, this has less strong correspondance to list sizes. So for -// the moment, it reflects what one might normally expect to be the max -// width needed to print an index number; 4 allows 9999 (which is a damn -// lot, if you ask me). -#define WIDTH_MAX_REG 4 - -// Max number of registered user msgs we can manage. -#define MAX_REG_MSGS 256 - -// Flags to indicate if given cvar or func is part of a loaded plugin. -typedef enum { - RG_INVALID, - RG_VALID, -} REG_STATUS; - -// Pointer to function registered by AddServerCommand. -typedef void (*REG_CMD_FN) (void); - - -// An individual registered function/command. -class MRegCmd { - friend class MRegCmdList; - private: - // data: - int index; // 1-based - public: - char *name; // space is malloc'd - REG_CMD_FN pfnCmd; // pointer to the function - int plugid; // index id of corresponding plugin - REG_STATUS status; // whether corresponding plugin is loaded - // functions: - void init(int idx); // init values, as not using constructors - mBOOL call(void); // try to call the function -}; - - -// A list of registered commands. -class MRegCmdList { - private: - // data: - MRegCmd *mlist; // malloc'd array of registered commands - int size; // current size of list - int endlist; // index of last used entry - // Private; to satisfy -Weffc++ "has pointer data members but does - // not override" copy/assignment constructor. - void operator=(const MRegCmdList &src); - MRegCmdList(const MRegCmdList &src); - - public: - // constructor: - MRegCmdList(void); - - // functions: - MRegCmd *find(const char *findname); // find by MRegCmd->name - MRegCmd *add(const char *addname); - void disable(int plugin_id); // change status to Invalid - void show(void); // list all funcs to console - void show(int plugin_id); // list given plugin's funcs to console -}; - - - -// An individual registered cvar. -class MRegCvar { - friend class MRegCvarList; - private: - // data: - int index; // 1-based - public: - cvar_t *data; // actual cvar structure, malloc'd - int plugid; // index id of corresponding plugin - REG_STATUS status; // whether corresponding plugin is loaded - // functions: - void init(int idx); // init values, as not using constructors - mBOOL set(cvar_t *src); -}; - - -// A list of registered cvars. -class MRegCvarList { - private: - // data: - MRegCvar *vlist; // malloc'd array of registered cvars - int size; // size of list, ie MAX_REG_CVARS - int endlist; // index of last used entry - // Private; to satisfy -Weffc++ "has pointer data members but does - // not override" copy/assignment constructor. - void operator=(const MRegCvarList &src); - MRegCvarList(const MRegCvarList &src); - - public: - // constructor: - MRegCvarList(void); - - // functions: - MRegCvar *add(const char *addname); - MRegCvar *find(const char *findname); // find by MRegCvar->data.name - void disable(int plugin_id); // change status to Invalid - void show(void); // list all cvars to console - void show(int plugin_id); // list given plugin's cvars to console -}; - - - -// An individual registered user msg, from gamedll. -class MRegMsg { - friend class MRegMsgList; - private: - // data: - int index; // 1-based - public: - const char *name; // name, assumed constant string in gamedll - int msgid; // msgid, assigned by engine - int size; // size, if given by gamedll -}; - - -// A list of registered user msgs. -class MRegMsgList { - private: - // data: - MRegMsg mlist[MAX_REG_MSGS]; // array of registered msgs - int size; // size of list, ie MAX_REG_MSGS - int endlist; // index of last used entry - - public: - // constructor: - MRegMsgList(void); - - // functions: - MRegMsg *add(const char *addname, int addmsgid, int addsize); - MRegMsg *find(const char *findname); - MRegMsg *find(int findmsgid); - void show(void); // list all msgs to console -}; - -#endif /* MREG_H */ diff --git a/reapi/include/metamod/mutil.h b/reapi/include/metamod/mutil.h index eb7edc4..b840519 100644 --- a/reapi/include/metamod/mutil.h +++ b/reapi/include/metamod/mutil.h @@ -1,93 +1,43 @@ -// mutil.h - prototypes for utility functions to provide to plugins - -/* - * Copyright (c) 2001-2003 Will Day - * - * This file is part of Metamod. - * - * Metamod is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at - * your option) any later version. - * - * Metamod is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Metamod; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ - -#ifndef MUTIL_H -#define MUTIL_H - -#include "plinfo.h" // plugin_info_t, etc -#include "mhook.h" // game_event_t, etc -#include "sdk_util.h" // hudtextparms_t, etc +#pragma once // max buffer size for printed messages -#define MAX_LOGMSG_LEN 1024 +#define MAX_LOGMSG_LEN 1024 // For GetGameInfo: -typedef enum { +enum ginfo_t +{ GINFO_NAME = 0, GINFO_DESC, GINFO_GAMEDIR, GINFO_DLL_FULLPATH, GINFO_DLL_FILENAME, GINFO_REALDLL_FULLPATH, -} ginfo_t; +}; // Meta Utility Function table type. -typedef struct meta_util_funcs_s { +struct mutil_funcs_t +{ void (*pfnLogConsole) (plid_t plid, const char *fmt, ...); void (*pfnLogMessage) (plid_t plid, const char *fmt, ...); void (*pfnLogError) (plid_t plid, const char *fmt, ...); void (*pfnLogDeveloper) (plid_t plid, const char *fmt, ...); void (*pfnCenterSay) (plid_t plid, const char *fmt, ...); - void (*pfnCenterSayParms) (plid_t plid, hudtextparms_t tparms, - const char *fmt, ...); - void (*pfnCenterSayVarargs) (plid_t plid, hudtextparms_t tparms, - const char *fmt, va_list ap); - qboolean (*pfnCallGameEntity) (plid_t plid, const char *entStr, - entvars_t *pev); - int (*pfnGetUserMsgID) (plid_t plid, const char *msgname, int *size); - const char *(*pfnGetUserMsgName) (plid_t plid, int msgid, int *size); - const char *(*pfnGetPluginPath) (plid_t plid); - const char *(*pfnGetGameInfo) (plid_t plid, ginfo_t tag); - int (*pfnLoadPlugin) (plid_t plid, const char *cmdline, PLUG_LOADTIME now, void **plugin_handle); - int (*pfnUnloadPlugin) (plid_t plid, const char *cmdline, PLUG_LOADTIME now, PL_UNLOAD_REASON reason); - int (*pfnUnloadPluginByHandle) (plid_t plid, void *plugin_handle, PLUG_LOADTIME now, PL_UNLOAD_REASON reason); - const char *(*pfnIsQueryingClientCvar) (plid_t plid, const edict_t *pEdict); - int (*pfnMakeRequestId) (plid_t plid); + void (*pfnCenterSayParms) (plid_t plid, hudtextparms_t tparms, const char *fmt, ...); + void (*pfnCenterSayVarargs) (plid_t plid, hudtextparms_t tparms, const char *fmt, va_list ap); + qboolean (*pfnCallGameEntity) (plid_t plid, const char *entStr, entvars_t *pev); + int (*pfnGetUserMsgID) (plid_t plid, const char *msgname, int *size); + const char * (*pfnGetUserMsgName) (plid_t plid, int msgid, int *size); + const char * (*pfnGetPluginPath) (plid_t plid); + const char * (*pfnGetGameInfo) (plid_t plid, ginfo_t tag); + int (*pfnLoadPlugin) (plid_t plid, const char *cmdline, PLUG_LOADTIME now, void **plugin_handle); + int (*pfnUnloadPlugin) (plid_t plid, const char *cmdline, PLUG_LOADTIME now, PL_UNLOAD_REASON reason); + int (*pfnUnloadPluginByHandle) (plid_t plid, void *plugin_handle, PLUG_LOADTIME now, PL_UNLOAD_REASON reason); + const char * (*pfnIsQueryingClientCvar) (plid_t plid, const edict_t *pEdict); + int (*pfnMakeRequestId) (plid_t plid); void (*pfnGetHookTables) (plid_t plid, enginefuncs_t **peng, DLL_FUNCTIONS **pdll, NEW_DLL_FUNCTIONS **pnewdll); -#ifdef UNFINISHED - int (*pfnHookGameEvent) (plid_t plid, game_event_t event, - event_func_t pfnHandle); - int (*pfnHookLogTrigger) (plid_t plid, const char *trigger, - logmatch_func_t pfnHandle); - int (*pfnHookLogString) (plid_t plid, const char *string, - logmatch_func_t pfnHandle); - int (*pfnHookLogRegex) (plid_t plid, const char *pattern, - logmatch_func_t pfnHandle); - qboolean (*pfnRemoveHookID) (plid_t plid, int hookid); - int (*pfnRemoveHookAll) (plid_t plid); -#endif /* UNFINISHED */ -} mutil_funcs_t; -extern mutil_funcs_t MetaUtilFunctions; +}; + +extern mutil_funcs_t g_MetaUtilFunctions; // Meta Utility Functions void mutil_LogConsole(plid_t plid, const char *fmt, ...); @@ -96,10 +46,8 @@ void mutil_LogError(plid_t plid, const char *fmt, ...); void mutil_LogDeveloper(plid_t plid, const char *fmt, ...); void mutil_CenterSay(plid_t plid, const char *fmt, ...); -void mutil_CenterSayParms(plid_t plid, hudtextparms_t tparms, - const char *fmt, ...); -void mutil_CenterSayVarargs(plid_t plid, hudtextparms_t tparms, - const char *fmt, va_list ap); +void mutil_CenterSayParms(plid_t plid, hudtextparms_t tparms, const char *fmt, ...); +void mutil_CenterSayVarargs(plid_t plid, hudtextparms_t tparms, const char *fmt, va_list ap); qboolean mutil_CallGameEntity(plid_t plid, const char *entStr, entvars_t *pev); @@ -111,20 +59,6 @@ const char *mutil_IsQueryingClientCvar(plid_t plid, const edict_t *pEdict); int mutil_MakeRequestId(plid_t plid); void mutil_GetHookTables(plid_t plid, enginefuncs_t **peng, DLL_FUNCTIONS **pdll, NEW_DLL_FUNCTIONS **pnewdll); -#ifdef UNFINISHED -int mutil_HookGameEvent(plid_t plid, game_event_t event, - event_func_t pfnHandle); -int mutil_HookLogTrigger(plid_t plid, const char *trigger, - logmatch_func_t pfnHandle); -int mutil_HookLogString(plid_t plid, const char *string, - logmatch_func_t pfnHandle); -int mutil_HookLogRegex(plid_t plid, const char *pattern, - logmatch_func_t pfnHandle); - -qboolean mutil_RemoveHookID(plid_t plid, int hookid); -int mutil_RemoveHookAll(plid_t plid); -#endif /* UNFINISHED */ - // Convenience macros for MetaUtil functions #define LOG_CONSOLE (*gpMetaUtilFuncs->pfnLogConsole) #define LOG_MESSAGE (*gpMetaUtilFuncs->pfnLogMessage) @@ -144,14 +78,3 @@ int mutil_RemoveHookAll(plid_t plid); #define IS_QUERYING_CLIENT_CVAR (*gpMetaUtilFuncs->pfnIsQueryingClientCvar) #define MAKE_REQUESTID (*gpMetaUtilFuncs->pfnMakeRequestId) #define GET_HOOK_TABLES (*gpMetaUtilFuncs->pfnGetHookTables) - -#ifdef UNFINISHED -#define HOOK_GAME_EVENT (*gpMetaUtilFuncs->pfnHookGameEvent) -#define HOOK_LOG_TRIGGER (*gpMetaUtilFuncs->pfnHookLogTrigger) -#define HOOK_LOG_STRING (*gpMetaUtilFuncs->pfnHookLogString) -#define HOOK_LOG_REGEX (*gpMetaUtilFuncs->pfnHookLogRegex) -#define REMOVE_HOOK_ID (*gpMetaUtilFuncs->pfnRemoveHookID) -#define REMOVE_HOOK_ALL (*gpMetaUtilFuncs->pfnRemoveHookAll) -#endif /* UNFINISHED */ - -#endif /* MUTIL_H */ diff --git a/reapi/include/metamod/osdep.h b/reapi/include/metamod/osdep.h deleted file mode 100644 index e11a8b7..0000000 --- a/reapi/include/metamod/osdep.h +++ /dev/null @@ -1,519 +0,0 @@ -// osdep.h - operating system dependencies - -/* - * Copyright (c) 2001-2003 Will Day - * - * This file is part of Metamod. - * - * Metamod is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at - * your option) any later version. - * - * Metamod is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Metamod; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ - -#ifndef OSDEP_H -#define OSDEP_H - -#include // strerror() -#include // isupper, tolower -#include // errno - -// Various differences between WIN32 and Linux. - -#include "types_meta.h" // mBOOL -#include "mreg.h" // REG_CMD_FN, etc -#include "log_meta.h" // LOG_ERROR, etc - -extern mBOOL dlclose_handle_invalid; - -// String describing platform/DLL-type, for matching lines in plugins.ini. -#ifdef __linux__ - #define PLATFORM "linux" -# ifdef __amd64__ - #define PLATFORM_SPC "lin64" -# else - #define PLATFORM_SPC "lin32" -# endif -#elif defined(_WIN32) - #define PLATFORM "mswin" - #define PLATFORM_SPC "win32" -#else /* unknown */ - #error "OS unrecognized" -#endif /* unknown */ - - -// Macro for function-exporting from DLL.. -// from SDK dlls/cbase.h: -//! C functions for external declarations that call the appropriate C++ methods - -// Windows uses "__declspec(dllexport)" to mark functions in the DLL that -// should be visible/callable externally. -// -// It also apparently requires WINAPI for GiveFnptrsToDll(). -// -// See doc/notes_windows_coding for more information.. - -// Attributes to specify an "exported" function, visible from outside the -// DLL. -#undef DLLEXPORT -#ifdef _WIN32 - #define DLLEXPORT __declspec(dllexport) - // WINAPI should be provided in the windows compiler headers. - // It's usually defined to something like "__stdcall". -#elif defined(__linux__) - #define DLLEXPORT /* */ - #define WINAPI /* */ -#endif /* linux */ - -#ifdef __GNUC__ -# define DECLSPEC(kw) -# define ATTRIBUTE(kw) __attribute__((kw)) -# define MM_CDECL -#elif defined(_MSC_VER) -# define DECLSPEC(kw) __declspec(kw) -# define ATTRIBUTE(kw) -# define MM_CDECL __cdecl -#endif /* _MSC_VER */ - - -// Simplified macro for declaring/defining exported DLL functions. They -// need to be 'extern "C"' so that the C++ compiler enforces parameter -// type-matching, rather than considering routines with mis-matched -// arguments/types to be overloaded functions... -// -// AFAIK, this is os-independent, but it's included here in osdep.h where -// DLLEXPORT is defined, for convenience. -#define C_DLLEXPORT extern "C" DLLEXPORT - - -#ifdef _MSC_VER - // Disable MSVC warning: - // 4390 : empty controlled statement found; is this what was intended? - // generated by the RETURN macros. - #pragma warning(disable: 4390) -#endif /* _MSC_VER */ - - -// Functions & types for DLL open/close/etc operations. -#ifdef __linux__ - #include - typedef void* DLHANDLE; - typedef void* DLFUNC; - inline DLHANDLE DLOPEN(const char *filename) { - return(dlopen(filename, RTLD_NOW)); - } - inline DLFUNC DLSYM(DLHANDLE handle, const char *string) { - return(dlsym(handle, string)); - } - inline int DLCLOSE(DLHANDLE handle) { - if (!handle) { - dlclose_handle_invalid = mTRUE; - return(1); - } - dlclose_handle_invalid = mFALSE; - return(dlclose(handle)); - } - inline char* DLERROR(void) { - if (dlclose_handle_invalid) - return("Invalid handle."); - return(dlerror()); - } -#elif defined(_WIN32) - typedef HINSTANCE DLHANDLE; - typedef FARPROC DLFUNC; - inline DLHANDLE DLOPEN(const char *filename) { - return(LoadLibrary(filename)); - } - inline DLFUNC DLSYM(DLHANDLE handle, const char *string) { - return(GetProcAddress(handle, string)); - } - inline int DLCLOSE(DLHANDLE handle) { - if (!handle) { - dlclose_handle_invalid = mTRUE; - return(1); - } - dlclose_handle_invalid = mFALSE; - // NOTE: Windows FreeLibrary returns success=nonzero, fail=zero, - // which is the opposite of the unix convention, thus the '!'. - return(!FreeLibrary(handle)); - } - // Windows doesn't provide a function corresponding to dlerror(), so - // we make our own. - char *str_GetLastError(void); - inline char* DLERROR(void) { - if (dlclose_handle_invalid) - return("Invalid handle."); - return(str_GetLastError()); - } -#endif /* _WIN32 */ -const char *DLFNAME(void *memptr); -mBOOL IS_VALID_PTR(void *memptr); - - -// Attempt to call the given function pointer, without segfaulting. -mBOOL os_safe_call(REG_CMD_FN pfn); - - -// Windows doesn't have an strtok_r() routine, so we write our own. -#ifdef _WIN32 - #define strtok_r(s, delim, ptrptr) my_strtok_r(s, delim, ptrptr) - char *my_strtok_r(char *s, const char *delim, char **ptrptr); -#endif /* _WIN32 */ - - -// Set filename and pathname maximum lengths. Note some windows compilers -// provide a which is incomplete and/or causes problems; see -// doc/windows_notes.txt for more information. -// -// Note that both OS's include room for null-termination: -// linux: "# chars in a path name including nul" -// win32: "note that the sizes include space for 0-terminator" -#ifdef __linux__ - #include -#elif defined(_WIN32) - #include - #define NAME_MAX _MAX_FNAME - #define PATH_MAX _MAX_PATH -#endif /* _WIN32 */ - - -// Various other windows routine differences. -#ifdef __linux__ - #include // sleep - #ifndef O_BINARY - #define O_BINARY 0 - #endif -#elif defined(_WIN32) - #define snprintf _snprintf - #define vsnprintf _vsnprintf - #define sleep(x) Sleep(x*1000) - #define strcasecmp _stricmp - #define strncasecmp _strnicmp - #include - #define open _open - #define read _read - #define write _write - #define close _close -#endif /* _WIN32 */ - -#ifdef __GNUC__ - #include // getcwd -#elif defined(_MSC_VER) - #include // getcwd -#endif /* _MSC_VER */ - -#include -#ifndef S_ISREG - // Linux gcc defines this; earlier mingw didn't, later mingw does; - // MSVC doesn't seem to. - #define S_ISREG(m) ((m) & S_IFREG) -#endif /* not S_ISREG */ -#ifdef _WIN32 - // The following two are defined in mingw but not in MSVC - #ifndef S_IRUSR - #define S_IRUSR _S_IREAD - #endif - #ifndef S_IWUSR - #define S_IWUSR _S_IWRITE - #endif - - // The following two are defined neither in mingw nor in MSVC - #ifndef S_IRGRP - #define S_IRGRP S_IRUSR - #endif - #ifndef S_IWGRP - #define S_IWGRP S_IWUSR - #endif -#endif /* _WIN32 */ - - -// Our handler for new(). -// -// Thanks to notes from: -// http://dragon.klte.hu/~kollarl/C++/node45.html -// -// At one point it appeared MSVC++ was no longer different from gcc, according -// to: -// http://msdn.microsoft.com/library/en-us/vclang98/stdlib/info/NEW.asp -// -// However, this page is apparently no longer available from MSDN. The -// only thing now is: -// http://msdn.microsoft.com/library/en-us/vccore98/HTML/_crt_malloc.asp -// -// According to Fritz Elfert : -// set_new_handler() is just a stub which (according to comments in the -// MSVCRT debugging sources) should never be used. It is just an ugly -// hack to make STL compile. It does _not_ set the new handler but -// always calls _set_new_handler(0) instead. _set_new_handler is the -// "real" function and uses the "old" semantic; handler-type is: -// int newhandler(size_t) -// -#if defined(__GNUC__) || (defined(_MSC_VER) && (_MSC_VER >= 1300)) - void MM_CDECL meta_new_handler(void); -#elif defined(_MSC_VER) - int meta_new_handler(size_t size); -#endif /* _MSC_VER */ - - -// To keep the rest of the sources clean and keep not only OS but also -// compiler dependant differences in this file, we define a local function -// to set the new handler. -void mm_set_new_handler( void ); - - - -// Thread handling... -#ifdef __linux__ - #include - typedef pthread_t THREAD_T; - // returns 0==success, non-zero==failure - inline int THREAD_CREATE(THREAD_T *tid, void (*func)(void)) { - int ret; - ret=pthread_create(tid, NULL, (void *(*)(void*)) func, NULL); - if(ret != 0) { - META_ERROR("Failure starting thread: %s", strerror(ret)); - return(ret); - } - ret=pthread_detach(*tid); - if(ret != 0) - META_ERROR("Failure detaching thread: %s", strerror(ret)); - return(ret); - } -#elif defined(_WIN32) - // See: - // http://msdn.microsoft.com/library/en-us/dllproc/prothred_4084.asp - typedef DWORD THREAD_T; - // returns 0==success, non-zero==failure - inline int THREAD_CREATE(THREAD_T *tid, void (*func)(void)) { - HANDLE ret; - // win32 returns NULL==failure, non-NULL==success - ret=CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) func, NULL, 0, tid); - if(ret==NULL) - META_ERROR("Failure starting thread: %s", str_GetLastError()); - return(ret==NULL); - } -#endif /* _WIN32 */ -#define THREAD_OK 0 - - -// Mutex handling... -#ifdef __linux__ - typedef pthread_mutex_t MUTEX_T; - inline int MUTEX_INIT(MUTEX_T *mutex) { - int ret; - ret=pthread_mutex_init(mutex, NULL); - if(ret!=THREAD_OK) - META_ERROR("mutex_init failed: %s", strerror(ret)); - return(ret); - } - inline int MUTEX_LOCK(MUTEX_T *mutex) { - int ret; - ret=pthread_mutex_lock(mutex); - if(ret!=THREAD_OK) - META_ERROR("mutex_lock failed: %s", strerror(ret)); - return(ret); - } - inline int MUTEX_UNLOCK(MUTEX_T *mutex) { - int ret; - ret=pthread_mutex_unlock(mutex); - if(ret!=THREAD_OK) - META_ERROR("mutex_unlock failed: %s", strerror(ret)); - return(ret); - } -#elif defined(_WIN32) - // Win32 has "mutexes" as well, but CS's are simpler. - // See: - // http://msdn.microsoft.com/library/en-us/dllproc/synchro_2a2b.asp - typedef CRITICAL_SECTION MUTEX_T; - // Note win32 routines don't return any error (return void). - inline int MUTEX_INIT(MUTEX_T *mutex) { - InitializeCriticalSection(mutex); - return(THREAD_OK); - } - inline int MUTEX_LOCK(MUTEX_T *mutex) { - EnterCriticalSection(mutex); - return(THREAD_OK); - } - inline int MUTEX_UNLOCK(MUTEX_T *mutex) { - LeaveCriticalSection(mutex); - return(THREAD_OK); - } -#endif /* _WIN32 (mutex) */ - - -// Condition variables... -#ifdef __linux__ - typedef pthread_cond_t COND_T; - inline int COND_INIT(COND_T *cond) { - int ret; - ret=pthread_cond_init(cond, NULL); - if(ret!=THREAD_OK) - META_ERROR("cond_init failed: %s", strerror(ret)); - return(ret); - } - inline int COND_WAIT(COND_T *cond, MUTEX_T *mutex) { - int ret; - ret=pthread_cond_wait(cond, mutex); - if(ret!=THREAD_OK) - META_ERROR("cond_wait failed: %s", strerror(ret)); - return(ret); - } - inline int COND_SIGNAL(COND_T *cond) { - int ret; - ret=pthread_cond_signal(cond); - if(ret!=THREAD_OK) - META_ERROR("cond_signal failed: %s", strerror(ret)); - return(ret); - } -#elif defined(_WIN32) - // Since win32 doesn't provide condition-variables, we have to model - // them with mutex/critical-sections and win32 events. This uses the - // second (SetEvent) solution from: - // - // http://www.cs.wustl.edu/~schmidt/win32-cv-1.html - // - // but without the waiters_count overhead, since we don't need - // broadcast functionality anyway. Or actually, I guess it's more like - // the first (PulseEvent) solution, but with SetEven rather than - // PulseEvent. :) - // - // See also: - // http://msdn.microsoft.com/library/en-us/dllproc/synchro_8ann.asp - typedef HANDLE COND_T; - inline int COND_INIT(COND_T *cond) { - *cond = CreateEvent(NULL, // security attributes (none) - FALSE, // manual-reset type (false==auto-reset) - FALSE, // initial state (unsignaled) - NULL); // object name (unnamed) - // returns NULL on error - if(*cond==NULL) { - META_ERROR("cond_init failed: %s", str_GetLastError()); - return(-1); - } - else - return(0); - } - inline int COND_WAIT(COND_T *cond, MUTEX_T *mutex) { - DWORD ret; - LeaveCriticalSection(mutex); - ret=WaitForSingleObject(*cond, INFINITE); - EnterCriticalSection(mutex); - // returns WAIT_OBJECT_0 if object was signaled; other return - // values indicate errors. - if(ret == WAIT_OBJECT_0) - return(0); - else { - META_ERROR("cond_wait failed: %s", str_GetLastError()); - return(-1); - } - } - inline int COND_SIGNAL(COND_T *cond) { - BOOL ret; - ret=SetEvent(*cond); - // returns zero on failure - if(ret==0) { - META_ERROR("cond_signal failed: %s", str_GetLastError()); - return(-1); - } - else - return(0); - } -#endif /* _WIN32 (condition variable) */ - -// Normalize/standardize a pathname. -// - For win32, this involves: -// - Turning backslashes (\) into slashes (/), so that config files and -// Metamod internal code can be simpler and just use slashes (/). -// - Turning upper/mixed case into lowercase, since windows is -// non-case-sensitive. -// - For linux, this requires no work, as paths uses slashes (/) natively, -// and pathnames are case-sensitive. -#ifdef __linux__ -#define normalize_pathname(a) -#elif defined(_WIN32) -inline void normalize_pathname(char *path) { - char *cp; - - META_DEBUG(8, ("normalize: %s", path)); - for(cp=path; *cp; cp++) { - if(isupper(*cp)) *cp=tolower(*cp); - if(*cp=='\\') *cp='/'; - } - META_DEBUG(8, ("normalized: %s", path)); -} -#endif /* _WIN32 */ - -// Indicate if pathname appears to be an absolute-path. Under linux this -// is a leading slash (/). Under win32, this can be: -// - a drive-letter path (ie "D:blah" or "C:\blah") -// - a toplevel path (ie "\blah") -// - a UNC network address (ie "\\srv1\blah"). -// Also, handle both native and normalized pathnames. -inline int is_absolute_path(const char *path) { - if(path[0]=='/') return(TRUE); -#ifdef _WIN32 - if(path[1]==':') return(TRUE); - if(path[0]=='\\') return(TRUE); -#endif /* _WIN32 */ - return(FALSE); -} - -#ifdef _WIN32 -// Buffer pointed to by resolved_name is assumed to be able to store a -// string of PATH_MAX length. -inline char *realpath(const char *file_name, char *resolved_name) { - int ret; - ret=GetFullPathName(file_name, PATH_MAX, resolved_name, NULL); - if(ret > PATH_MAX) { - errno=ENAMETOOLONG; - return(NULL); - } - else if(ret > 0) { - HANDLE handle; - WIN32_FIND_DATA find_data; - handle=FindFirstFile(resolved_name, &find_data); - if(INVALID_HANDLE_VALUE == handle) { - errno=ENOENT; - return NULL; - } - FindClose(handle); - normalize_pathname(resolved_name); - return(resolved_name); - } - else - return(NULL); -} -#endif /* _WIN32 */ - -// Generic "error string" from a recent OS call. For linux, this is based -// on errno. For win32, it's based on GetLastError. -inline const char *str_os_error(void) { -#ifdef __linux__ - return(strerror(errno)); -#elif defined(_WIN32) - return(str_GetLastError()); -#endif /* _WIN32 */ -} - - -#endif /* OSDEP_H */ diff --git a/reapi/include/metamod/plinfo.h b/reapi/include/metamod/plinfo.h index 9e5b744..9d40002 100644 --- a/reapi/include/metamod/plinfo.h +++ b/reapi/include/metamod/plinfo.h @@ -1,79 +1,48 @@ -// plinfo.h - typedefs for plugin info structure - -/* - * Copyright (c) 2001-2003 Will Day - * - * This file is part of Metamod. - * - * Metamod is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at - * your option) any later version. - * - * Metamod is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Metamod; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ - -#ifndef PLINFO_H -#define PLINFO_H +#pragma once // Flags for plugin to indicate when it can be be loaded/unloaded. // NOTE: order is crucial, as greater/less comparisons are made. -typedef enum { +enum PLUG_LOADTIME +{ PT_NEVER = 0, - PT_STARTUP, // should only be loaded/unloaded at initial hlds execution + PT_STARTUP, // should only be loaded/unloaded at initial hlds execution PT_CHANGELEVEL, // can be loaded/unloaded between maps - PT_ANYTIME, // can be loaded/unloaded at any time + PT_ANYTIME, // can be loaded/unloaded at any time PT_ANYPAUSE, // can be loaded/unloaded at any time, and can be "paused" during a map -} PLUG_LOADTIME; +}; // Flags to indicate why the plugin is being unloaded. -typedef enum { +enum PL_UNLOAD_REASON +{ PNL_NULL = 0, PNL_INI_DELETED, // was deleted from plugins.ini PNL_FILE_NEWER, // file on disk is newer than last load PNL_COMMAND, // requested by server/console command PNL_CMD_FORCED, // forced by server/console command PNL_DELAYED, // delayed from previous request; can't tell origin -//only used for 'real_reason' on MPlugin::unload() - PNL_PLUGIN, // requested by plugin function call + + // only used for 'real_reason' on MPlugin::unload() + PNL_PLUGIN, // requested by plugin function call PNL_PLG_FORCED, // forced by plugin function call - PNL_RELOAD, // forced unload by reload() -} PL_UNLOAD_REASON; + PNL_RELOAD, // forced unload by reload() +}; // Information plugin provides about itself. -typedef struct { - char *ifvers; // meta_interface version - char *name; // full name of plugin - char *version; // version - char *date; // date - char *author; // author name/email - char *url; // URL - char *logtag; // log message prefix (unused right now) +struct plugin_info_t +{ + const char *ifvers; // meta_interface version + const char *name; // full name of plugin + const char *version; // version + const char *date; // date + const char *author; // author name/email + const char *url; // URL + const char *logtag; // log message prefix (unused right now) PLUG_LOADTIME loadable; // when loadable PLUG_LOADTIME unloadable; // when unloadable -} plugin_info_t; +}; + extern plugin_info_t Plugin_info; // Plugin identifier, passed to all Meta Utility Functions. -typedef plugin_info_t* plid_t; -#define PLID &Plugin_info - -#endif /* PLINFO_H */ +typedef plugin_info_t *plid_t; +#define PLID &Plugin_info diff --git a/reapi/include/metamod/sdk_util.h b/reapi/include/metamod/sdk_util.h deleted file mode 100644 index a87922c..0000000 --- a/reapi/include/metamod/sdk_util.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (c) 2001-2003 Will Day - * - * This file is part of Metamod. - * - * Metamod is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at - * your option) any later version. - * - * Metamod is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Metamod; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ - -// Wrap util.h from SDK with ifndef/endif, to avoid problems from multiple -// inclusions. Dunno why Valve didn't do that in util.h themselves.. - -#ifndef SDK_UTIL_H -#define SDK_UTIL_H - -// We're not including the DBG_EntOfVars and DBG_AssertFunction routines -// mentioned in the SDK util.h, so we're going to unset DEBUG here so that -// we don't get "unresolved symbol" errors. -#ifdef DEBUG -#undef DEBUG -#endif // DEBUG - -// Inlcude local enginecallbacks wrapper *first* so that the g_engfuncs -// type is correct and the header protection is already -// defined. -#include "enginecallbacks.h" -#include - -// Also, create some nice inlines for engine callback combos. - -// Get a setinfo value from a player entity. -inline char *ENTITY_KEYVALUE(edict_t *entity, char *key) { - char *ifbuf=GET_INFOKEYBUFFER(entity); - return(INFOKEY_VALUE(ifbuf, key)); -} - -// Set a setinfo value for a player entity. -inline void ENTITY_SET_KEYVALUE(edict_t *entity, char *key, char *value) { - char *ifbuf=GET_INFOKEYBUFFER(entity); - SET_CLIENT_KEYVALUE(ENTINDEX(entity), ifbuf, key, value); -} - -// Get a "serverinfo" value. -inline char *SERVERINFO(char *key) { - edict_t *server=INDEXENT(0); - return(ENTITY_KEYVALUE(server, key)); -} - -// Set a "serverinfo" value. -inline void SET_SERVERINFO(char *key, char *value) { - edict_t *server=INDEXENT(0); - char *ifbuf=GET_INFOKEYBUFFER(server); - SET_SERVER_KEYVALUE(ifbuf, key, value); -} - -// Get a "localinfo" value. -inline char *LOCALINFO(char *key) { - edict_t *server=NULL; - return(ENTITY_KEYVALUE(server, key)); -} - -// Set a "localinfo" value. -inline void SET_LOCALINFO(char *key, char *value) { - edict_t *server=NULL; - char *ifbuf=GET_INFOKEYBUFFER(server); - SET_SERVER_KEYVALUE(ifbuf, key, value); -} - -short FixedSigned16(float value, float scale); -unsigned short FixedUnsigned16(float value, float scale); - -// Our slightly modified version, using an edict_t pointer instead of a -// CBaseEntity pointer. -void META_UTIL_HudMessage(edict_t *pEntity, const hudtextparms_t &textparms, const char *pMessage); - -#endif // SDK_UTIL_H diff --git a/reapi/include/metamod/types_meta.h b/reapi/include/metamod/types_meta.h deleted file mode 100644 index 6f5bb5d..0000000 --- a/reapi/include/metamod/types_meta.h +++ /dev/null @@ -1,79 +0,0 @@ -// types_meta.h - common internal type, etc definitions - -/* - * Copyright (c) 2001-2003 Will Day - * - * This file is part of Metamod. - * - * Metamod is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at - * your option) any later version. - * - * Metamod is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Metamod; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ - -#ifndef TYPES_META_H -#define TYPES_META_H - -// Our own boolean type, for stricter type matching. -typedef enum mBOOL { - mFALSE = 0, - mTRUE, -} mBOOL; - -// Like C's errno, for our various functions; describes causes of failure -// or mFALSE returns. -typedef enum { - ME_NOERROR = 0, - ME_FORMAT, // invalid format - ME_COMMENT, // ignored comment - ME_BLANK, // ignored blank (empty) line - ME_ALREADY, // request had already been done - ME_DELAYED, // request is delayed - ME_NOTALLOWED, // request not allowed - ME_SKIPPED, // request is being skipped for whatever reason - ME_BADREQ, // invalid request for this - ME_ARGUMENT, // invalid arguments - ME_NULLRESULT, // resulting data was empty or null - ME_MAXREACHED, // reached max/limit - ME_NOTUNIQ, // not unique (ambigious match) - ME_NOTFOUND, // in find operation, match not found - ME_NOFILE, // file empty or missing - ME_NOMEM, // malloc failed - ME_BADMEMPTR, // invalid memory address - ME_OSNOTSUP, // OS doesn't support this operation - ME_DLOPEN, // failed to open shared lib/dll - ME_DLMISSING, // symbol missing in lib/dll - ME_DLERROR, // some other error encountered calling functions from dll - ME_IFVERSION, // incompatible interface version - ME_UNLOAD_UNLOADER, // tried to unload unloader - ME_UNLOAD_SELF, // tried to unload self -} META_ERRNO; -extern META_ERRNO meta_errno; - -#define RETURN_ERRNO(retval, errval) \ - do { meta_errno=errval; return(retval); } while(0) - -#define RETURN_LOGERR_ERRNO(errargs, retval, errval) \ - do { META_ERROR errargs ; meta_errno=errval; return(retval); } while(0) - -#endif /* TYPES_META_H */ diff --git a/reapi/src/platform.h b/reapi/src/platform.h index fd51798..02765bc 100644 --- a/reapi/src/platform.h +++ b/reapi/src/platform.h @@ -4,6 +4,7 @@ #ifdef _WIN32 #define DLLEXPORT __declspec(dllexport) #define NOINLINE __declspec(noinline) +#define snprintf _snprintf #else #define DLLEXPORT __attribute__((visibility("default"))) #define NOINLINE __attribute__((noinline)) diff --git a/reapi/src/precompiled.h b/reapi/src/precompiled.h index eed05cd..15eaeda 100644 --- a/reapi/src/precompiled.h +++ b/reapi/src/precompiled.h @@ -11,7 +11,7 @@ #include // std::vector // platform defs -#include +#include "platform.h" // cssdk #include