139 lines
4.8 KiB
C++
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;
|