260 lines
11 KiB
C++
260 lines
11 KiB
C++
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
//
|
|
// Purpose: Expose things from GameInterface.cpp. Mostly the engine interfaces.
|
|
//
|
|
// $NoKeywords: $
|
|
//=============================================================================//
|
|
|
|
#ifndef GAMEINTERFACE_H
|
|
#define GAMEINTERFACE_H
|
|
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
#include "mapentities.h"
|
|
|
|
class IReplayFactory;
|
|
|
|
extern INetworkStringTable *g_pStringTableInfoPanel;
|
|
extern INetworkStringTable *g_pStringTableServerMapCycle;
|
|
|
|
#ifdef TF_DLL
|
|
extern INetworkStringTable *g_pStringTableServerPopFiles;
|
|
#endif
|
|
|
|
// Player / Client related functions
|
|
// Most of this is implemented in gameinterface.cpp, but some of it is per-mod
|
|
// in files like cs_gameinterface.cpp, etc.
|
|
class CServerGameClients : public IServerGameClients {
|
|
public:
|
|
virtual bool ClientConnect(edict_t *pEntity, char const *pszName,
|
|
char const *pszAddress, char *reject,
|
|
int maxrejectlen) OVERRIDE;
|
|
virtual void ClientActive(edict_t *pEntity, bool bLoadGame) OVERRIDE;
|
|
virtual void ClientDisconnect(edict_t *pEntity) OVERRIDE;
|
|
virtual void ClientPutInServer(edict_t *pEntity,
|
|
const char *playername) OVERRIDE;
|
|
virtual void ClientCommand(edict_t *pEntity, const CCommand &args) OVERRIDE;
|
|
virtual void ClientSettingsChanged(edict_t *pEntity) OVERRIDE;
|
|
virtual void ClientSetupVisibility(edict_t *pViewEntity, edict_t *pClient,
|
|
unsigned char *pvs,
|
|
int pvssize) OVERRIDE;
|
|
virtual float ProcessUsercmds(edict_t *player, bf_read *buf, int numcmds,
|
|
int totalcmds, int dropped_packets,
|
|
bool ignore, bool paused) OVERRIDE;
|
|
// Player is running a command
|
|
virtual void PostClientMessagesSent_DEPRECIATED(void) OVERRIDE;
|
|
virtual void SetCommandClient(int index) OVERRIDE;
|
|
virtual CPlayerState *GetPlayerState(edict_t *player) OVERRIDE;
|
|
virtual void ClientEarPosition(edict_t *pEntity,
|
|
Vector *pEarOrigin) OVERRIDE;
|
|
|
|
virtual void GetPlayerLimits(int &minplayers, int &maxplayers,
|
|
int &defaultMaxPlayers) const OVERRIDE;
|
|
|
|
// returns number of delay ticks if player is in Replay mode (0 = no delay)
|
|
virtual int GetReplayDelay(edict_t *player, int &entity) OVERRIDE;
|
|
// Anything this game .dll wants to add to the bug reporter text (e.g., the
|
|
// entity/model under the picker crosshair)
|
|
// can be added here
|
|
virtual void GetBugReportInfo(char *buf, int buflen) OVERRIDE;
|
|
virtual void NetworkIDValidated(const char *pszUserName,
|
|
const char *pszNetworkID) OVERRIDE;
|
|
|
|
// The client has submitted a keyvalues command
|
|
virtual void ClientCommandKeyValues(edict_t *pEntity,
|
|
KeyValues *pKeyValues) OVERRIDE;
|
|
|
|
// Notify that the player is spawned
|
|
virtual void ClientSpawned(edict_t *pPlayer) OVERRIDE;
|
|
};
|
|
|
|
class CServerGameDLL : public IServerGameDLL {
|
|
public:
|
|
virtual bool DLLInit(CreateInterfaceFn engineFactory,
|
|
CreateInterfaceFn physicsFactory,
|
|
CreateInterfaceFn fileSystemFactory,
|
|
CGlobalVars *pGlobals) OVERRIDE;
|
|
virtual void DLLShutdown(void) OVERRIDE;
|
|
// Get the simulation interval (must be compiled with identical values into
|
|
// both client and game .dll for MOD!!!)
|
|
virtual bool ReplayInit(CreateInterfaceFn fnReplayFactory) OVERRIDE;
|
|
virtual float GetTickInterval(void) const OVERRIDE;
|
|
virtual bool GameInit(void) OVERRIDE;
|
|
virtual void GameShutdown(void) OVERRIDE;
|
|
virtual bool LevelInit(const char *pMapName, char const *pMapEntities,
|
|
char const *pOldLevel, char const *pLandmarkName,
|
|
bool loadGame, bool background) OVERRIDE;
|
|
virtual void ServerActivate(edict_t *pEdictList, int edictCount,
|
|
int clientMax) OVERRIDE;
|
|
virtual void LevelShutdown(void) OVERRIDE;
|
|
virtual void GameFrame(
|
|
bool simulating) OVERRIDE; // could be called multiple times before
|
|
// sending data to clients
|
|
virtual void PreClientUpdate(
|
|
bool simulating) OVERRIDE; // called after all GameFrame() calls,
|
|
// before sending data to clients
|
|
|
|
virtual ServerClass *GetAllServerClasses(void) OVERRIDE;
|
|
virtual const char *GetGameDescription(void) OVERRIDE;
|
|
virtual void CreateNetworkStringTables(void) OVERRIDE;
|
|
|
|
// Save/restore system hooks
|
|
virtual CSaveRestoreData *SaveInit(int size) OVERRIDE;
|
|
virtual void SaveWriteFields(CSaveRestoreData *, char const *, void *,
|
|
datamap_t *, typedescription_t *,
|
|
int) OVERRIDE;
|
|
virtual void SaveReadFields(CSaveRestoreData *, char const *, void *,
|
|
datamap_t *, typedescription_t *, int) OVERRIDE;
|
|
virtual void SaveGlobalState(CSaveRestoreData *) OVERRIDE;
|
|
virtual void RestoreGlobalState(CSaveRestoreData *) OVERRIDE;
|
|
virtual int CreateEntityTransitionList(CSaveRestoreData *, int) OVERRIDE;
|
|
virtual void BuildAdjacentMapList(void) OVERRIDE;
|
|
|
|
virtual void PreSave(CSaveRestoreData *) OVERRIDE;
|
|
virtual void Save(CSaveRestoreData *) OVERRIDE;
|
|
virtual void GetSaveComment(char *comment, int maxlength, float flMinutes,
|
|
float flSeconds, bool bNoTime = false) OVERRIDE;
|
|
#ifdef _XBOX
|
|
virtual void GetTitleName(const char *pMapName, char *pTitleBuff,
|
|
int titleBuffSize) OVERRIDE;
|
|
#endif
|
|
virtual void WriteSaveHeaders(CSaveRestoreData *) OVERRIDE;
|
|
|
|
virtual void ReadRestoreHeaders(CSaveRestoreData *) OVERRIDE;
|
|
virtual void Restore(CSaveRestoreData *, bool) OVERRIDE;
|
|
virtual bool IsRestoring() OVERRIDE;
|
|
|
|
// Retrieve info needed for parsing the specified user message
|
|
virtual bool GetUserMessageInfo(int msg_type, char *name, int maxnamelength,
|
|
int &size) OVERRIDE;
|
|
|
|
virtual CStandardSendProxies *GetStandardSendProxies() OVERRIDE;
|
|
|
|
virtual void PostInit() OVERRIDE;
|
|
virtual void Think(bool finalTick) OVERRIDE;
|
|
|
|
virtual void OnQueryCvarValueFinished(QueryCvarCookie_t iCookie,
|
|
edict_t *pPlayerEntity,
|
|
EQueryCvarValueStatus eStatus,
|
|
const char *pCvarName,
|
|
const char *pCvarValue) OVERRIDE;
|
|
|
|
virtual void PreSaveGameLoaded(char const *pSaveName,
|
|
bool bInGame) OVERRIDE;
|
|
|
|
// Returns true if the game DLL wants the server not to be made public.
|
|
// Used by commentary system to hide multiplayer commentary servers from the
|
|
// master.
|
|
virtual bool ShouldHideServer(void) OVERRIDE;
|
|
|
|
virtual void InvalidateMdlCache() OVERRIDE;
|
|
|
|
virtual void SetServerHibernation(bool bHibernating) OVERRIDE;
|
|
|
|
float m_fAutoSaveDangerousTime;
|
|
float m_fAutoSaveDangerousMinHealthToCommit;
|
|
bool m_bIsHibernating;
|
|
|
|
// Called after the steam API has been activated post-level startup
|
|
virtual void GameServerSteamAPIActivated(void) OVERRIDE;
|
|
|
|
// Called after the steam API has been shutdown post-level startup
|
|
virtual void GameServerSteamAPIShutdown(void) OVERRIDE;
|
|
|
|
// interface to the new GC based lobby system
|
|
virtual IServerGCLobby *GetServerGCLobby() OVERRIDE;
|
|
|
|
virtual const char *GetServerBrowserMapOverride() OVERRIDE;
|
|
virtual const char *GetServerBrowserGameData() OVERRIDE;
|
|
|
|
// Called to add output to the status command
|
|
virtual void Status(void (*print)(const char *fmt, ...)) OVERRIDE;
|
|
|
|
virtual void PrepareLevelResources(/* in/out */ char *pszMapName,
|
|
size_t nMapNameSize,
|
|
/* in/out */ char *pszMapFile,
|
|
size_t nMapFileSize) OVERRIDE;
|
|
|
|
virtual ePrepareLevelResourcesResult AsyncPrepareLevelResources(
|
|
/* in/out */ char *pszMapName, size_t nMapNameSize,
|
|
/* in/out */ char *pszMapFile, size_t nMapFileSize,
|
|
float *flProgress = NULL) OVERRIDE;
|
|
|
|
virtual eCanProvideLevelResult CanProvideLevel(/* in/out */ char *pMapName,
|
|
int nMapNameMax) OVERRIDE;
|
|
|
|
// Called to see if the game server is okay with a manual changelevel or map
|
|
// command
|
|
virtual bool IsManualMapChangeOkay(const char **pszReason) OVERRIDE;
|
|
|
|
private:
|
|
// This can just be a wrapper on MapEntity_ParseAllEntities, but CS does
|
|
// some tricks in here with the entity list.
|
|
void LevelInit_ParseAllEntities(const char *pMapEntities);
|
|
void LoadMessageOfTheDay();
|
|
void LoadSpecificMOTDMsg(const ConVar &convar, const char *pszStringName);
|
|
};
|
|
|
|
// Normally, when the engine calls ClientPutInServer, it calls a global function
|
|
// in the game DLL by the same name. Use this to override the function that it
|
|
// calls. This is used for bots.
|
|
typedef CBasePlayer *(*ClientPutInServerOverrideFn)(edict_t *pEdict,
|
|
const char *playername);
|
|
|
|
void ClientPutInServerOverride(ClientPutInServerOverrideFn fn);
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
// // Entity list management stuff.
|
|
// --------------------------------------------------------------------------------------------
|
|
// // These are created for map entities in order as the map entities are
|
|
// spawned.
|
|
class CMapEntityRef {
|
|
public:
|
|
int m_iEdict; // Which edict slot this entity got. -1 if CreateEntityByName
|
|
// failed.
|
|
int m_iSerialNumber; // The edict serial number. TODO used anywhere ?
|
|
};
|
|
|
|
extern CUtlLinkedList<CMapEntityRef, unsigned short> g_MapEntityRefs;
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
//-----------------------------------------------------------------------------
|
|
class CMapLoadEntityFilter : public IMapEntityFilter {
|
|
public:
|
|
virtual bool ShouldCreateEntity(const char *pClassname) {
|
|
// During map load, create all the entities.
|
|
return true;
|
|
}
|
|
|
|
virtual CBaseEntity *CreateNextEntity(const char *pClassname) {
|
|
CBaseEntity *pRet = CreateEntityByName(pClassname);
|
|
|
|
CMapEntityRef ref;
|
|
ref.m_iEdict = -1;
|
|
ref.m_iSerialNumber = -1;
|
|
|
|
if (pRet) {
|
|
ref.m_iEdict = pRet->entindex();
|
|
if (pRet->edict())
|
|
ref.m_iSerialNumber = pRet->edict()->m_NetworkSerialNumber;
|
|
}
|
|
|
|
g_MapEntityRefs.AddToTail(ref);
|
|
return pRet;
|
|
}
|
|
};
|
|
|
|
bool IsEngineThreaded();
|
|
|
|
class CServerGameTags : public IServerGameTags {
|
|
public:
|
|
virtual void GetTaggedConVarList(KeyValues *pCvarTagList);
|
|
};
|
|
EXPOSE_SINGLE_INTERFACE(CServerGameTags, IServerGameTags,
|
|
INTERFACEVERSION_SERVERGAMETAGS);
|
|
|
|
#endif // GAMEINTERFACE_H
|