You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
163 lines
6.4 KiB
163 lines
6.4 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
// |
|
//=============================================================================// |
|
|
|
#ifndef ISERVERPLUGIN_H |
|
#define ISERVERPLUGIN_H |
|
|
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#include "edict.h" |
|
#include "tier1/interface.h" |
|
#include "tier1/KeyValues.h" |
|
|
|
class CCommand; |
|
|
|
// |
|
// you will also want to listen for game events via IGameEventManager::AddListener() |
|
// |
|
|
|
typedef enum |
|
{ |
|
PLUGIN_CONTINUE = 0, // keep going |
|
PLUGIN_OVERRIDE, // run the game dll function but use our return value instead |
|
PLUGIN_STOP, // don't run the game dll function at all |
|
} PLUGIN_RESULT; |
|
|
|
|
|
typedef enum |
|
{ |
|
eQueryCvarValueStatus_ValueIntact=0, // It got the value fine. |
|
eQueryCvarValueStatus_CvarNotFound=1, |
|
eQueryCvarValueStatus_NotACvar=2, // There's a ConCommand, but it's not a ConVar. |
|
eQueryCvarValueStatus_CvarProtected=3 // The cvar was marked with FCVAR_SERVER_CAN_NOT_QUERY, so the server is not allowed to have its value. |
|
} EQueryCvarValueStatus; |
|
|
|
|
|
typedef int QueryCvarCookie_t; |
|
#define InvalidQueryCvarCookie -1 |
|
|
|
|
|
#define INTERFACEVERSION_ISERVERPLUGINCALLBACKS_VERSION_1 "ISERVERPLUGINCALLBACKS001" |
|
#define INTERFACEVERSION_ISERVERPLUGINCALLBACKS_VERSION_2 "ISERVERPLUGINCALLBACKS002" |
|
#define INTERFACEVERSION_ISERVERPLUGINCALLBACKS "ISERVERPLUGINCALLBACKS003" |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: callbacks the engine exposes to the 3rd party plugins (ala MetaMod) |
|
//----------------------------------------------------------------------------- |
|
abstract_class IServerPluginCallbacks |
|
{ |
|
public: |
|
// Initialize the plugin to run |
|
// Return false if there is an error during startup. |
|
virtual bool Load( CreateInterfaceFn interfaceFactory, CreateInterfaceFn gameServerFactory ) = 0; |
|
|
|
// Called when the plugin should be shutdown |
|
virtual void Unload( void ) = 0; |
|
|
|
// called when a plugins execution is stopped but the plugin is not unloaded |
|
virtual void Pause( void ) = 0; |
|
|
|
// called when a plugin should start executing again (sometime after a Pause() call) |
|
virtual void UnPause( void ) = 0; |
|
|
|
// Returns string describing current plugin. e.g., Admin-Mod. |
|
virtual const char *GetPluginDescription( void ) = 0; |
|
|
|
// Called any time a new level is started (after GameInit() also on level transitions within a game) |
|
virtual void LevelInit( char const *pMapName ) = 0; |
|
|
|
// The server is about to activate |
|
virtual void ServerActivate( edict_t *pEdictList, int edictCount, int clientMax ) = 0; |
|
|
|
// The server should run physics/think on all edicts |
|
virtual void GameFrame( bool simulating ) = 0; |
|
|
|
// Called when a level is shutdown (including changing levels) |
|
virtual void LevelShutdown( void ) = 0; |
|
|
|
// Client is going active |
|
virtual void ClientActive( edict_t *pEntity ) = 0; |
|
|
|
// Client is disconnecting from server |
|
virtual void ClientDisconnect( edict_t *pEntity ) = 0; |
|
|
|
// Client is connected and should be put in the game |
|
virtual void ClientPutInServer( edict_t *pEntity, char const *playername ) = 0; |
|
|
|
// Sets the client index for the client who typed the command into their console |
|
virtual void SetCommandClient( int index ) = 0; |
|
|
|
// A player changed one/several replicated cvars (name etc) |
|
virtual void ClientSettingsChanged( edict_t *pEdict ) = 0; |
|
|
|
// Client is connecting to server ( set retVal to false to reject the connection ) |
|
// You can specify a rejection message by writing it into reject |
|
virtual PLUGIN_RESULT ClientConnect( bool *bAllowConnect, edict_t *pEntity, const char *pszName, const char *pszAddress, char *reject, int maxrejectlen ) = 0; |
|
|
|
// The client has typed a command at the console |
|
virtual PLUGIN_RESULT ClientCommand( edict_t *pEntity, const CCommand &args ) = 0; |
|
|
|
// A user has had their network id setup and validated |
|
virtual PLUGIN_RESULT NetworkIDValidated( const char *pszUserName, const char *pszNetworkID ) = 0; |
|
|
|
// This is called when a query from IServerPluginHelpers::StartQueryCvarValue is finished. |
|
// iCookie is the value returned by IServerPluginHelpers::StartQueryCvarValue. |
|
// Added with version 2 of the interface. |
|
virtual void OnQueryCvarValueFinished( QueryCvarCookie_t iCookie, edict_t *pPlayerEntity, EQueryCvarValueStatus eStatus, const char *pCvarName, const char *pCvarValue ) = 0; |
|
|
|
// added with version 3 of the interface. |
|
virtual void OnEdictAllocated( edict_t *edict ) = 0; |
|
virtual void OnEdictFreed( const edict_t *edict ) = 0; |
|
}; |
|
|
|
#define INTERFACEVERSION_ISERVERPLUGINHELPERS "ISERVERPLUGINHELPERS001" |
|
|
|
|
|
typedef enum |
|
{ |
|
DIALOG_MSG = 0, // just an on screen message |
|
DIALOG_MENU, // an options menu |
|
DIALOG_TEXT, // a richtext dialog |
|
DIALOG_ENTRY, // an entry box |
|
DIALOG_ASKCONNECT // Ask the client to connect to a specified IP address. Only the "time" and "title" keys are used. |
|
} DIALOG_TYPE; |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: functions that only 3rd party plugins need |
|
//----------------------------------------------------------------------------- |
|
abstract_class IServerPluginHelpers |
|
{ |
|
public: |
|
// creates an onscreen menu with various option buttons |
|
// The keyvalues param can contain these fields: |
|
// "title" - (string) the title to show in the hud and in the title bar |
|
// "msg" - (string) a longer message shown in the GameUI |
|
// "color" - (color) the color to display the message in the hud (white by default) |
|
// "level" - (int) the priority of this message (closer to 0 is higher), only 1 message can be outstanding at a time |
|
// "time" - (int) the time in seconds this message should stay active in the GameUI (min 10 sec, max 200 sec) |
|
// |
|
// For DIALOG_MENU add sub keys for each option with these fields: |
|
// "command" - (string) client command to run if selected |
|
// "msg" - (string) button text for this option |
|
// |
|
virtual void CreateMessage( edict_t *pEntity, DIALOG_TYPE type, KeyValues *data, IServerPluginCallbacks *plugin ) = 0; |
|
virtual void ClientCommand( edict_t *pEntity, const char *cmd ) = 0; |
|
|
|
// Call this to find out the value of a cvar on the client. |
|
// |
|
// It is an asynchronous query, and it will call IServerPluginCallbacks::OnQueryCvarValueFinished when |
|
// the value comes in from the client. |
|
// |
|
// Store the return value if you want to match this specific query to the OnQueryCvarValueFinished call. |
|
// Returns InvalidQueryCvarCookie if the entity is invalid. |
|
virtual QueryCvarCookie_t StartQueryCvarValue( edict_t *pEntity, const char *pName ) = 0; |
|
}; |
|
|
|
#endif //ISERVERPLUGIN_H
|
|
|