hl2sdk-starter/src/ServerPlugin.h

139 lines
4.8 KiB
C++

#pragma once
#include "eiface.h"
#include "icvar.h"
#include "IEngineTrace.h"
#include "igameevents.h"
#include "iplayerinfo.h"
#include "iserverplugin.h"
#include "vstdlib/random.h"
struct EngineInterfaces
{
EngineInterfaces() :
cvar(nullptr),
engineServer(nullptr),
engineTrace(nullptr),
gameEventManager(nullptr),
serverPluginHelpers(nullptr),
uniformRandomStream(nullptr),
botManager(nullptr),
playerInfoManager(nullptr),
globalVars(nullptr)
{
}
EngineInterfaces(CreateInterfaceFn engineFactory, CreateInterfaceFn serverFactory) :
EngineInterfaces()
{
// Engine interfaces
cvar = (ICvar*)engineFactory(CVAR_QUERY_INTERFACE_VERSION, NULL);
engineServer = (IVEngineServer*)engineFactory(INTERFACEVERSION_VENGINESERVER, NULL);
engineTrace = (IEngineTrace*)engineFactory(INTERFACEVERSION_ENGINETRACE_SERVER, NULL);
gameEventManager =
(IGameEventManager2*)engineFactory(INTERFACEVERSION_GAMEEVENTSMANAGER2, NULL);
serverPluginHelpers =
(IServerPluginHelpers*)engineFactory(INTERFACEVERSION_ISERVERPLUGINHELPERS, NULL);
uniformRandomStream =
(IUniformRandomStream*)engineFactory(VENGINE_SERVER_RANDOM_INTERFACE_VERSION, NULL);
// Server interfaces
botManager = (IBotManager*)serverFactory(INTERFACEVERSION_PLAYERBOTMANAGER, NULL);
playerInfoManager =
(IPlayerInfoManager*)serverFactory(INTERFACEVERSION_PLAYERINFOMANAGER, NULL);
if (playerInfoManager)
{
globalVars = playerInfoManager->GetGlobalVars();
}
}
bool IsValid()
{
return cvar && engineServer && engineTrace && gameEventManager && serverPluginHelpers
&& uniformRandomStream && botManager && playerInfoManager;
}
void Print()
{
Msg("Engine interfaces:\n"
" cvar: %p\n"
" engineServer: %p\n"
" engineTrace: %p\n"
" gameEventManager: %p\n"
" serverPluginHelpers: %p\n"
" uniformRandomStream: %p\n"
"Server interfaces:\n"
" botManager: %p\n"
" playerInfoManager: %p\n",
cvar,
engineServer,
engineTrace,
gameEventManager,
serverPluginHelpers,
uniformRandomStream,
botManager,
playerInfoManager);
}
ICvar* cvar;
IVEngineServer* engineServer;
IEngineTrace* engineTrace;
IGameEventManager2* gameEventManager;
IServerPluginHelpers* serverPluginHelpers;
IUniformRandomStream* uniformRandomStream;
IBotManager* botManager;
IPlayerInfoManager* playerInfoManager;
CGlobalVars* globalVars;
};
class ServerPlugin : public IServerPluginCallbacks, IGameEventListener2
{
public:
// IServerPluginCallbacks interface
bool Load(CreateInterfaceFn interfaceFactory, CreateInterfaceFn gameServerFactory) override;
void Unload() override;
void Pause() override;
void UnPause() override;
const char* GetPluginDescription() override;
void LevelInit(const char* pMapName) override;
;
void ServerActivate(edict_t* pEdictList, int edictCount, int clientMax) override;
void GameFrame(bool simulating) override;
void LevelShutdown() override;
void ClientPutInServer(edict_t* pEntity, const char* playername) override;
void SetCommandClient(int index) override;
void ClientActive(edict_t* pEntity) override;
void ClientDisconnect(edict_t* pEntity) override;
void ClientSettingsChanged(edict_t* pEdict) override;
PLUGIN_RESULT ClientConnect(
bool* bAllowConnect,
edict_t* pEntity,
const char* pszName,
const char* pszAddress,
char* reject,
int maxrejectlen
) override;
PLUGIN_RESULT ClientCommand(edict_t* pEntity, const CCommand& args) override;
PLUGIN_RESULT NetworkIDValidated(const char* pszUserName, const char* pszNetworkID) override;
void OnQueryCvarValueFinished(
QueryCvarCookie_t iCookie,
edict_t* pPlayerEntity,
EQueryCvarValueStatus eStatus,
const char* pCvarName,
const char* pCvarValue
) override;
// IGameEventListener2 interface
void FireGameEvent(IGameEvent* event) override;
void ListenToGameEvent(const char* name);
private:
EngineInterfaces m_engineInterfaces;
int m_iClientCommandIndex;
bool m_gameEventsHooked;
};
extern ServerPlugin g_ServerPlugin;