aboutsummaryrefslogtreecommitdiff
path: root/sp/src/public/engine/iserverplugin.h
diff options
context:
space:
mode:
authorJoe Ludwig <[email protected]>2013-06-26 15:22:04 -0700
committerJoe Ludwig <[email protected]>2013-06-26 15:22:04 -0700
commit39ed87570bdb2f86969d4be821c94b722dc71179 (patch)
treeabc53757f75f40c80278e87650ea92808274aa59 /sp/src/public/engine/iserverplugin.h
downloadsource-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.tar.xz
source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.zip
First version of the SOurce SDK 2013
Diffstat (limited to 'sp/src/public/engine/iserverplugin.h')
-rw-r--r--sp/src/public/engine/iserverplugin.h163
1 files changed, 163 insertions, 0 deletions
diff --git a/sp/src/public/engine/iserverplugin.h b/sp/src/public/engine/iserverplugin.h
new file mode 100644
index 00000000..e1a0267f
--- /dev/null
+++ b/sp/src/public/engine/iserverplugin.h
@@ -0,0 +1,163 @@
+//========= 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