Server plugins
Server plugins are code libraries that modify the behaviour of dedicated servers. They are used to provide everything from maintenance tools to additional gametypes.

Installing
Source automatically loads plugins defined in files matching <game>\addons\*.vdf*
. These files should be formatted like this:
Plugin { file <path to plugin> }
- On Windows, do not add the file extension. On Linux, do.
- The path value is relative to the engine's binary folder (not the game's), so if you want to load a plugin from TF2's addons folder it will need to read
..\tf\addons\plugin
.
Managing
The following console commands are provided:
plugin_print
(particularly useful for confirming that your plugin is installed correctly)plugin_load
plugin_unload
plugin_pause
(the engine stops sending callbacks to the plugin)plugin_unpause
plugin_pause_all
plugin_unpause_all
Compiling
You can find a sample plugin project at src\utils\serverplugin_sample\
. The Orange Box version is good for both Source 2007 and 2009.
- Windows
- Build with the Visual Studio project provided; see Compiling under VS2008 or Compiling under VS2010 for help with upgrading
- Linux
- Execute
make plugin
fromsrc/linux_sdk/
- Mac
- Not possible yet
To debug your plugin, you must launch the server with -allowdebug
.
Coding
Plugins work by exposing to the engine an object inheriting from IServerPluginCallbacks
and IGameEventManager2
. The engine will send function calls into the plugin at various times, some hard-coded and some determined by the programmer, and the plugin can react to each of those events by running its own code. In some cases (e.g. player connection) changing the outcome of the original function is also possible.
Listening to Events
The IGameEventManager2
(IGameEventManager
was used previously) interface allows a plugin to listen to game events. Game events are fired by a Mod when things of interest happen, like a player dying or the bomb being planted. IGameEventManager2::AddListener
should be called to subscribe to particular game events. It must be called for each event that your listener wishes to be aware of. FireGameEvent is then called in your plugin when an one of the listened for events happen. The data contained in each event is described by event configuration files, in particular:
hl2/resource/serverevents.res
hl2/resource/GameEvents.res
<mod dir>/resource/ModEvents.res
Creating ConVars and Commands
ConVars let you specify variables that users can use to configure the behavior of your plugin. ConCommands allow the creation of commands that your plugin provides. Creating both is easy and self contained, the code snippet below creates a new command empty_version
and a new variable plugin_empty
. These commands can be run from the server or client, you should use the index provided by SetCommandClient
to determine the source of the command.
CON_COMMAND( empty_version, "prints the version of the empty plugin" ) { Msg( "Version:1.0.0.0\n" ); } static ConVar empty_cvar("plugin_empty", "0", 0, "Example plugin cvar");
Release your plugin
When ready for public consumption or beta testing, announce your server plugin at a community website like SourcePlugins.