<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.bzflag.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Xalendare</id>
	<title>BZFlagWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.bzflag.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Xalendare"/>
	<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/Special:Contributions/Xalendare"/>
	<updated>2026-05-20T18:55:35Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Plug-ins&amp;diff=6711</id>
		<title>Plug-ins</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Plug-ins&amp;diff=6711"/>
		<updated>2009-09-29T23:07:31Z</updated>

		<summary type="html">&lt;p&gt;Xalendare: /* Preparing a Linux BZFS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;BZFS can be built to support the loading of external libraries as plug-ins. These plug-ins can alter or replace the logic applied by the server, as well as automate many common tasks. &lt;br /&gt;
&lt;br /&gt;
Plug-ins are a simpler way to apply modifications to the game, as they do not require the server owner to modify or recompile his/her BZFS application. By using the [[BZFS API]] plug-ins are also able to be mixed and matched in an easy way.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
Plug-ins are compile dynamic link libraries, that are built for the same OS/RuntimeEnvironment as the BZFS server that hosts them. On [http://www.microsoft.com/windows Microsoft Windows] they are built as [http://en.wikipedia.org/wiki/Dynamic-link_library DLL] files. On [http://www.linux.org Linux] and other [http://www.unix.org/ Unix]-like systems they are built as .so files.&lt;br /&gt;
&lt;br /&gt;
==Use==&lt;br /&gt;
Plug-ins are loaded at startup by the &#039;&#039;&#039;-loadplugin&#039;&#039;&#039; option, or at run time with the &#039;&#039;/loadplugin&#039;&#039; command. If the full path to the plug-in is not specified, then [[BZFS]] will search a number of known sub directories for the plug-in as it attempts to load it. Using a valid path to the plug-in on load is highly recommended. While playing, all plug-ins loaded onto the server are visible with the /listplugins command.&lt;br /&gt;
===Parameters===&lt;br /&gt;
Some plug-ins take parameters that are passed to the plug-in on load. This is often a numeric value, or a path to a file. To pass a parameter to a plug-in, simply add a &#039;,&#039; after the plug-in name or path, and then add the parameter. Parameters can not have spaces, due to the way [[BZFS]] parses command line options and / commands.&lt;br /&gt;
&lt;br /&gt;
On load, plug-ins install a number of callbacks and event handlers with the hosting [[BZFS]] that are called when specific events happen. This allows the plug-in to perform additional actions on these events, or if need be, alter the results of the default logic of the server.&lt;br /&gt;
===Search Paths===&lt;br /&gt;
[[BZFS]] searches for plug-ins in two standard locations: the config directory and the global plug-ins directory.  The config directory is where the BZFlag config.cfg file is located, and the global plug-ins directory is $(prefix)/lib/bzflag/.&lt;br /&gt;
&lt;br /&gt;
==BZFS API==&lt;br /&gt;
All plug-ins are linked to the [[BZFS API]]. This programing layer provides the interface to the BZFS application. All events and functions that a plug-in can call are in the [[BZFS API]].&lt;br /&gt;
&lt;br /&gt;
==Standard plug-ins==&lt;br /&gt;
The [[BZFlag Source]] distribution contains a number of plug-ins that are maintained by the project [http://my.bzflag.org/wiki/index.php/Category:Developer developers].&lt;br /&gt;
These plug-ins are located in the &#039;&#039;/plugins&#039;&#039; directory.&lt;br /&gt;
&lt;br /&gt;
As of August 2009, [[BZFlag SVN|SVN]] TRUNK( version [[BZFlag 3.0|2.99]]) contains the following plug-ins:&lt;br /&gt;
&lt;br /&gt;
*[[airspawn]]&lt;br /&gt;
*[[bzfscron]]&lt;br /&gt;
*[[chathistory]]&lt;br /&gt;
*[[chatlog]]&lt;br /&gt;
*[[customflagsample]]&lt;br /&gt;
*[[fastmap]]&lt;br /&gt;
*[[flagStay]]&lt;br /&gt;
*[[hiddenAdmin]]&lt;br /&gt;
*[[HoldTheFlag]]&lt;br /&gt;
*[[HTTPServer]]&lt;br /&gt;
*[[httpTest]]&lt;br /&gt;
*[[keepaway]]&lt;br /&gt;
*[[killall]]&lt;br /&gt;
*[[koth]]&lt;br /&gt;
*[[logDetail]]&lt;br /&gt;
*[[mapchange]]&lt;br /&gt;
*[[nagware]]&lt;br /&gt;
*[[Phoenix]]&lt;br /&gt;
*[[playHistoryTracker]]&lt;br /&gt;
*[[python(plug-in)|python]]&lt;br /&gt;
*[[rabidRabbit]]&lt;br /&gt;
*[[recordmatch]]&lt;br /&gt;
*[[regFlag]]&lt;br /&gt;
*[[RogueGenocide]]&lt;br /&gt;
*[[SAMPLE_PLUGIN]]&lt;br /&gt;
*[[serverControl]]&lt;br /&gt;
*[[serverSideBotSample]]&lt;br /&gt;
*[[shockwaveDeath]]&lt;br /&gt;
*[[soundTest]]&lt;br /&gt;
*[[teamflagreset]]&lt;br /&gt;
*[[thiefControl]]&lt;br /&gt;
*[[timedctf]]&lt;br /&gt;
*[[torBlock]]&lt;br /&gt;
*[[unrealCTF]]&lt;br /&gt;
*[[weaponArena]]&lt;br /&gt;
*[[webadmin]]&lt;br /&gt;
*[[webReport]]&lt;br /&gt;
*[[webstats]]&lt;br /&gt;
*[[wwzones]]&lt;br /&gt;
&lt;br /&gt;
==Third Party Plug-ins==&lt;br /&gt;
A number of non-developers have created plug-ins for BZFS, and usually release them on the [http://my.bzflag.org/bb/ BZFlag Forums].&lt;br /&gt;
&lt;br /&gt;
Here are the steps to compile a hypothetical third party plug-in named &amp;quot;Example&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
# In the plugins directory of the BZFlag source tree run the command &#039;&#039;&#039;./newplugin.sh Example&#039;&#039;&#039;&lt;br /&gt;
# Remove all of the files from the newly created plugins/Example directory (they were created by newplugin.sh)&lt;br /&gt;
# Copy all of the distributed Example files into the plugins/Example directory&lt;br /&gt;
# In the top-level BZFlag source directory, edit configure.ac, and add plugins/Example/Makefile to the list of AC_CONFIG_FILES&lt;br /&gt;
# In the top-level BZFlag source directory run &#039;&#039;&#039;autogen.sh&#039;&#039;&#039;, &#039;&#039;&#039;configure&#039;&#039;&#039;, and &#039;&#039;&#039;make&#039;&#039;&#039; as usual&lt;br /&gt;
&lt;br /&gt;
When that finishes successfully the plug-in should be ready to use as described above.&lt;br /&gt;
&lt;br /&gt;
==Preparing a Linux BZFS==&lt;br /&gt;
&lt;br /&gt;
In order to run plugins in BZFS, you need to recompile it with the --enable-shared option on the configure script.&lt;br /&gt;
&lt;br /&gt;
 $ ./configure --enable-shared --disable-client;&lt;br /&gt;
       make;&lt;br /&gt;
       make install;&lt;br /&gt;
&lt;br /&gt;
==Plug-in Development==&lt;br /&gt;
{{DoDoc|Describe the basics of plug-in development.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Server]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Plug-Ins]]&lt;/div&gt;</summary>
		<author><name>Xalendare</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Plug-ins&amp;diff=6710</id>
		<title>Plug-ins</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Plug-ins&amp;diff=6710"/>
		<updated>2009-09-29T23:06:48Z</updated>

		<summary type="html">&lt;p&gt;Xalendare: /* Preparing a Linux BZFS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;BZFS can be built to support the loading of external libraries as plug-ins. These plug-ins can alter or replace the logic applied by the server, as well as automate many common tasks. &lt;br /&gt;
&lt;br /&gt;
Plug-ins are a simpler way to apply modifications to the game, as they do not require the server owner to modify or recompile his/her BZFS application. By using the [[BZFS API]] plug-ins are also able to be mixed and matched in an easy way.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
Plug-ins are compile dynamic link libraries, that are built for the same OS/RuntimeEnvironment as the BZFS server that hosts them. On [http://www.microsoft.com/windows Microsoft Windows] they are built as [http://en.wikipedia.org/wiki/Dynamic-link_library DLL] files. On [http://www.linux.org Linux] and other [http://www.unix.org/ Unix]-like systems they are built as .so files.&lt;br /&gt;
&lt;br /&gt;
==Use==&lt;br /&gt;
Plug-ins are loaded at startup by the &#039;&#039;&#039;-loadplugin&#039;&#039;&#039; option, or at run time with the &#039;&#039;/loadplugin&#039;&#039; command. If the full path to the plug-in is not specified, then [[BZFS]] will search a number of known sub directories for the plug-in as it attempts to load it. Using a valid path to the plug-in on load is highly recommended. While playing, all plug-ins loaded onto the server are visible with the /listplugins command.&lt;br /&gt;
===Parameters===&lt;br /&gt;
Some plug-ins take parameters that are passed to the plug-in on load. This is often a numeric value, or a path to a file. To pass a parameter to a plug-in, simply add a &#039;,&#039; after the plug-in name or path, and then add the parameter. Parameters can not have spaces, due to the way [[BZFS]] parses command line options and / commands.&lt;br /&gt;
&lt;br /&gt;
On load, plug-ins install a number of callbacks and event handlers with the hosting [[BZFS]] that are called when specific events happen. This allows the plug-in to perform additional actions on these events, or if need be, alter the results of the default logic of the server.&lt;br /&gt;
===Search Paths===&lt;br /&gt;
[[BZFS]] searches for plug-ins in two standard locations: the config directory and the global plug-ins directory.  The config directory is where the BZFlag config.cfg file is located, and the global plug-ins directory is $(prefix)/lib/bzflag/.&lt;br /&gt;
&lt;br /&gt;
==BZFS API==&lt;br /&gt;
All plug-ins are linked to the [[BZFS API]]. This programing layer provides the interface to the BZFS application. All events and functions that a plug-in can call are in the [[BZFS API]].&lt;br /&gt;
&lt;br /&gt;
==Standard plug-ins==&lt;br /&gt;
The [[BZFlag Source]] distribution contains a number of plug-ins that are maintained by the project [http://my.bzflag.org/wiki/index.php/Category:Developer developers].&lt;br /&gt;
These plug-ins are located in the &#039;&#039;/plugins&#039;&#039; directory.&lt;br /&gt;
&lt;br /&gt;
As of August 2009, [[BZFlag SVN|SVN]] TRUNK( version [[BZFlag 3.0|2.99]]) contains the following plug-ins:&lt;br /&gt;
&lt;br /&gt;
*[[airspawn]]&lt;br /&gt;
*[[bzfscron]]&lt;br /&gt;
*[[chathistory]]&lt;br /&gt;
*[[chatlog]]&lt;br /&gt;
*[[customflagsample]]&lt;br /&gt;
*[[fastmap]]&lt;br /&gt;
*[[flagStay]]&lt;br /&gt;
*[[hiddenAdmin]]&lt;br /&gt;
*[[HoldTheFlag]]&lt;br /&gt;
*[[HTTPServer]]&lt;br /&gt;
*[[httpTest]]&lt;br /&gt;
*[[keepaway]]&lt;br /&gt;
*[[killall]]&lt;br /&gt;
*[[koth]]&lt;br /&gt;
*[[logDetail]]&lt;br /&gt;
*[[mapchange]]&lt;br /&gt;
*[[nagware]]&lt;br /&gt;
*[[Phoenix]]&lt;br /&gt;
*[[playHistoryTracker]]&lt;br /&gt;
*[[python(plug-in)|python]]&lt;br /&gt;
*[[rabidRabbit]]&lt;br /&gt;
*[[recordmatch]]&lt;br /&gt;
*[[regFlag]]&lt;br /&gt;
*[[RogueGenocide]]&lt;br /&gt;
*[[SAMPLE_PLUGIN]]&lt;br /&gt;
*[[serverControl]]&lt;br /&gt;
*[[serverSideBotSample]]&lt;br /&gt;
*[[shockwaveDeath]]&lt;br /&gt;
*[[soundTest]]&lt;br /&gt;
*[[teamflagreset]]&lt;br /&gt;
*[[thiefControl]]&lt;br /&gt;
*[[timedctf]]&lt;br /&gt;
*[[torBlock]]&lt;br /&gt;
*[[unrealCTF]]&lt;br /&gt;
*[[weaponArena]]&lt;br /&gt;
*[[webadmin]]&lt;br /&gt;
*[[webReport]]&lt;br /&gt;
*[[webstats]]&lt;br /&gt;
*[[wwzones]]&lt;br /&gt;
&lt;br /&gt;
==Third Party Plug-ins==&lt;br /&gt;
A number of non-developers have created plug-ins for BZFS, and usually release them on the [http://my.bzflag.org/bb/ BZFlag Forums].&lt;br /&gt;
&lt;br /&gt;
Here are the steps to compile a hypothetical third party plug-in named &amp;quot;Example&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
# In the plugins directory of the BZFlag source tree run the command &#039;&#039;&#039;./newplugin.sh Example&#039;&#039;&#039;&lt;br /&gt;
# Remove all of the files from the newly created plugins/Example directory (they were created by newplugin.sh)&lt;br /&gt;
# Copy all of the distributed Example files into the plugins/Example directory&lt;br /&gt;
# In the top-level BZFlag source directory, edit configure.ac, and add plugins/Example/Makefile to the list of AC_CONFIG_FILES&lt;br /&gt;
# In the top-level BZFlag source directory run &#039;&#039;&#039;autogen.sh&#039;&#039;&#039;, &#039;&#039;&#039;configure&#039;&#039;&#039;, and &#039;&#039;&#039;make&#039;&#039;&#039; as usual&lt;br /&gt;
&lt;br /&gt;
When that finishes successfully the plug-in should be ready to use as described above.&lt;br /&gt;
&lt;br /&gt;
==Preparing a Linux BZFS==&lt;br /&gt;
&lt;br /&gt;
For becoming BZFS able to run plugins you need to recompile it with the --enable-shared option on the configure script.&lt;br /&gt;
&lt;br /&gt;
 $ ./configure --enable-shared --disable-client;&lt;br /&gt;
       make;&lt;br /&gt;
       make install;&lt;br /&gt;
&lt;br /&gt;
==Plug-in Development==&lt;br /&gt;
{{DoDoc|Describe the basics of plug-in development.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Server]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Plug-Ins]]&lt;/div&gt;</summary>
		<author><name>Xalendare</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Talk:Plug-ins&amp;diff=6709</id>
		<title>Talk:Plug-ins</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Talk:Plug-ins&amp;diff=6709"/>
		<updated>2009-09-29T23:05:15Z</updated>

		<summary type="html">&lt;p&gt;Xalendare: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;So is it plug-ins or plugins? [[User:DonnyBaker|DonnyBaker]] 21:33, 23 March 2007 (EDT)&lt;br /&gt;
&lt;br /&gt;
I made a redirect from Plugins to Plug-ins. [[User:F687s|F687/s]]&lt;br /&gt;
&lt;br /&gt;
The instructions at the bottom of the page for building third-party plugins appeared to be incorrect, so I edited them. If this is due to differences between the version I am building (2.0.12) and the current development version, feel free to revert my changes. [[User:Xalendare|Xalendare]] 19:05, 29 September 2009 (EDT)&lt;/div&gt;</summary>
		<author><name>Xalendare</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Plug-ins&amp;diff=6708</id>
		<title>Plug-ins</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Plug-ins&amp;diff=6708"/>
		<updated>2009-09-29T22:59:26Z</updated>

		<summary type="html">&lt;p&gt;Xalendare: /* Third Party Plug-ins */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;BZFS can be built to support the loading of external libraries as plug-ins. These plug-ins can alter or replace the logic applied by the server, as well as automate many common tasks. &lt;br /&gt;
&lt;br /&gt;
Plug-ins are a simpler way to apply modifications to the game, as they do not require the server owner to modify or recompile his/her BZFS application. By using the [[BZFS API]] plug-ins are also able to be mixed and matched in an easy way.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
Plug-ins are compile dynamic link libraries, that are built for the same OS/RuntimeEnvironment as the BZFS server that hosts them. On [http://www.microsoft.com/windows Microsoft Windows] they are built as [http://en.wikipedia.org/wiki/Dynamic-link_library DLL] files. On [http://www.linux.org Linux] and other [http://www.unix.org/ Unix]-like systems they are built as .so files.&lt;br /&gt;
&lt;br /&gt;
==Use==&lt;br /&gt;
Plug-ins are loaded at startup by the &#039;&#039;&#039;-loadplugin&#039;&#039;&#039; option, or at run time with the &#039;&#039;/loadplugin&#039;&#039; command. If the full path to the plug-in is not specified, then [[BZFS]] will search a number of known sub directories for the plug-in as it attempts to load it. Using a valid path to the plug-in on load is highly recommended. While playing, all plug-ins loaded onto the server are visible with the /listplugins command.&lt;br /&gt;
===Parameters===&lt;br /&gt;
Some plug-ins take parameters that are passed to the plug-in on load. This is often a numeric value, or a path to a file. To pass a parameter to a plug-in, simply add a &#039;,&#039; after the plug-in name or path, and then add the parameter. Parameters can not have spaces, due to the way [[BZFS]] parses command line options and / commands.&lt;br /&gt;
&lt;br /&gt;
On load, plug-ins install a number of callbacks and event handlers with the hosting [[BZFS]] that are called when specific events happen. This allows the plug-in to perform additional actions on these events, or if need be, alter the results of the default logic of the server.&lt;br /&gt;
===Search Paths===&lt;br /&gt;
[[BZFS]] searches for plug-ins in two standard locations: the config directory and the global plug-ins directory.  The config directory is where the BZFlag config.cfg file is located, and the global plug-ins directory is $(prefix)/lib/bzflag/.&lt;br /&gt;
&lt;br /&gt;
==BZFS API==&lt;br /&gt;
All plug-ins are linked to the [[BZFS API]]. This programing layer provides the interface to the BZFS application. All events and functions that a plug-in can call are in the [[BZFS API]].&lt;br /&gt;
&lt;br /&gt;
==Standard plug-ins==&lt;br /&gt;
The [[BZFlag Source]] distribution contains a number of plug-ins that are maintained by the project [http://my.bzflag.org/wiki/index.php/Category:Developer developers].&lt;br /&gt;
These plug-ins are located in the &#039;&#039;/plugins&#039;&#039; directory.&lt;br /&gt;
&lt;br /&gt;
As of August 2009, [[BZFlag SVN|SVN]] TRUNK( version [[BZFlag 3.0|2.99]]) contains the following plug-ins:&lt;br /&gt;
&lt;br /&gt;
*[[airspawn]]&lt;br /&gt;
*[[bzfscron]]&lt;br /&gt;
*[[chathistory]]&lt;br /&gt;
*[[chatlog]]&lt;br /&gt;
*[[customflagsample]]&lt;br /&gt;
*[[fastmap]]&lt;br /&gt;
*[[flagStay]]&lt;br /&gt;
*[[hiddenAdmin]]&lt;br /&gt;
*[[HoldTheFlag]]&lt;br /&gt;
*[[HTTPServer]]&lt;br /&gt;
*[[httpTest]]&lt;br /&gt;
*[[keepaway]]&lt;br /&gt;
*[[killall]]&lt;br /&gt;
*[[koth]]&lt;br /&gt;
*[[logDetail]]&lt;br /&gt;
*[[mapchange]]&lt;br /&gt;
*[[nagware]]&lt;br /&gt;
*[[Phoenix]]&lt;br /&gt;
*[[playHistoryTracker]]&lt;br /&gt;
*[[python(plug-in)|python]]&lt;br /&gt;
*[[rabidRabbit]]&lt;br /&gt;
*[[recordmatch]]&lt;br /&gt;
*[[regFlag]]&lt;br /&gt;
*[[RogueGenocide]]&lt;br /&gt;
*[[SAMPLE_PLUGIN]]&lt;br /&gt;
*[[serverControl]]&lt;br /&gt;
*[[serverSideBotSample]]&lt;br /&gt;
*[[shockwaveDeath]]&lt;br /&gt;
*[[soundTest]]&lt;br /&gt;
*[[teamflagreset]]&lt;br /&gt;
*[[thiefControl]]&lt;br /&gt;
*[[timedctf]]&lt;br /&gt;
*[[torBlock]]&lt;br /&gt;
*[[unrealCTF]]&lt;br /&gt;
*[[weaponArena]]&lt;br /&gt;
*[[webadmin]]&lt;br /&gt;
*[[webReport]]&lt;br /&gt;
*[[webstats]]&lt;br /&gt;
*[[wwzones]]&lt;br /&gt;
&lt;br /&gt;
==Third Party Plug-ins==&lt;br /&gt;
A number of non-developers have created plug-ins for BZFS, and usually release them on the [http://my.bzflag.org/bb/ BZFlag Forums].&lt;br /&gt;
&lt;br /&gt;
Here are the steps to compile a hypothetical third party plug-in named &amp;quot;Example&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
# In the plugins directory of the BZFlag source tree run the command &#039;&#039;&#039;./newplugin.sh Example&#039;&#039;&#039;&lt;br /&gt;
# Remove all of the files from the newly created plugins/Example directory (they were created by newplugin.sh)&lt;br /&gt;
# Copy all of the distributed Example files into the plugins/Example directory&lt;br /&gt;
# In the top-level BZFlag source directory, edit configure.ac, and add plugins/Example/Makefile to the list of AC_CONFIG_FILES&lt;br /&gt;
# In the top-level BZFlag source directory run &#039;&#039;&#039;autogen.sh&#039;&#039;&#039;, &#039;&#039;&#039;configure&#039;&#039;&#039;, and &#039;&#039;&#039;make&#039;&#039;&#039; as usual&lt;br /&gt;
&lt;br /&gt;
When that finishes successfully the plug-in should be ready to use as described above.&lt;br /&gt;
&lt;br /&gt;
==Preparing a Linux BZFS==&lt;br /&gt;
&lt;br /&gt;
For becoming BZFS able to run plugins you need to recompile it with the --enable-shared and --enable-plugins options on the configure script.&lt;br /&gt;
&lt;br /&gt;
 $ ./configure --enable-shared --enable-plugins --disable-client;&lt;br /&gt;
       make;&lt;br /&gt;
       make install;&lt;br /&gt;
&lt;br /&gt;
==Plug-in Development==&lt;br /&gt;
{{DoDoc|Describe the basics of plug-in development.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Server]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Plug-Ins]]&lt;/div&gt;</summary>
		<author><name>Xalendare</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_eKickEvent&amp;diff=5815</id>
		<title>Bz eKickEvent</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_eKickEvent&amp;diff=5815"/>
		<updated>2009-05-08T17:47:33Z</updated>

		<summary type="html">&lt;p&gt;Xalendare: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{BZFS_API_Doc}}&lt;br /&gt;
{{BZFS_API_Events}}&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The &#039;&#039;&#039;bz_eKickEvent&#039;&#039;&#039; is an API event triggered when a player is kicked from the server.&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&#039;&#039;&#039;bz_eKickEvent&#039;&#039;&#039; returns the &#039;&#039;&#039;bz_KickEventData_V1&#039;&#039;&#039; data class.&lt;br /&gt;
&lt;br /&gt;
  {| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;20&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
  !name&lt;br /&gt;
  !type&lt;br /&gt;
  !value description&lt;br /&gt;
  |-&lt;br /&gt;
  |eventType    &lt;br /&gt;
  |[[Event(API)|bz_eEventType]]&lt;br /&gt;
  |bz_eKickEvent&lt;br /&gt;
  |-&lt;br /&gt;
  |kickerID&lt;br /&gt;
  |int&lt;br /&gt;
  |The ID of the player who performed the kick.&lt;br /&gt;
  |-&lt;br /&gt;
  |kickedID&lt;br /&gt;
  |int&lt;br /&gt;
  |The ID of the player being kicked from the server.&lt;br /&gt;
  |-&lt;br /&gt;
  |reason&lt;br /&gt;
  |[[bz_ApiString]]&lt;br /&gt;
  |The reason (provided by the kicker using the &#039;&#039;&#039;/kick&#039;&#039;&#039; [[Slash_commands|slash command]]) for the kick.&lt;br /&gt;
  |-&lt;br /&gt;
  |eventTime&lt;br /&gt;
  |double&lt;br /&gt;
  |The server time the event occurred (in seconds.)&lt;br /&gt;
  |}&lt;br /&gt;
&lt;br /&gt;
==Uses==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:BZFS_API_Docs]]&lt;br /&gt;
[[Category:BZFS_API_Events]]&lt;/div&gt;</summary>
		<author><name>Xalendare</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Events_(API)&amp;diff=5814</id>
		<title>Events (API)</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Events_(API)&amp;diff=5814"/>
		<updated>2009-05-08T04:04:09Z</updated>

		<summary type="html">&lt;p&gt;Xalendare: /* Events */ Added pipe from bz_eGameEndEvent to bz_eGameStartEvent page, since they share the same EventData class.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DoDoc|Fill in articles for all API events}}&lt;br /&gt;
&lt;br /&gt;
{{BZFS_API_Doc}}&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
API events are callbacks that a [[Plug-ins|plug-in]] can install into [[BZFS]] to be called in response to specific actions or state changes in the server side game world. Events are the primary method of communication from BZFS to installed plug-ins. Specific events exist for nearly all logical actions that can happen during a game of BZFlag.&lt;br /&gt;
&lt;br /&gt;
==Installation and Removal==&lt;br /&gt;
The callbacks for events are typically installed during the [[bz_Load]] entry point in a plug-in, so they can be active when a plug-in is first loaded.&lt;br /&gt;
&lt;br /&gt;
The plug-in must call the function;&lt;br /&gt;
&lt;br /&gt;
 BZF_API bool [[bz_registerEvent]] ( bz_eEventType eventType, [[bz_EventHandler]]* eventHandler );&lt;br /&gt;
&lt;br /&gt;
The plug-in registers and event callback derived from [[bz_EventHandler]] for each specific event types it wishes to monitor.&lt;br /&gt;
&lt;br /&gt;
When a plug-in no longer needs to monitor an event, or when it is unloaded in the [[bz_Unload]] entry point, the plug-in must remove the installed callback by calling the function;&lt;br /&gt;
&lt;br /&gt;
 BZF_API bool [[bz_removeEvent]] ( bz_eEventType eventType, [[bz_EventHandler]]* eventHandler );&lt;br /&gt;
&lt;br /&gt;
==Event Handler==&lt;br /&gt;
The plug-in must define a class that is derived from [[bz_EventHandler]] and pass a pointer to an object of that class when ever it registers an event callback.&lt;br /&gt;
&lt;br /&gt;
When ever a specific event is triggered, BZFS will call the &#039;process&#039; method of the installed callback class.&lt;br /&gt;
&lt;br /&gt;
   virtual void process ( bz_EventData *eventData ) = 0;&lt;br /&gt;
&lt;br /&gt;
==Event Data==&lt;br /&gt;
With each call to the &#039;process&#039; method of the installed event handler, BZFS will pass the plug-in a pointer to a class that contains all the data provided by the event. Each event derives a specific data class from [[bz_EventData]] that contains the specific member variables that contain the data. The base class [[bz_EventData]] contains the data member;&lt;br /&gt;
   bz_eEventType	eventType;&lt;br /&gt;
This data member allows a plug-in to identify the specific event and cast the &#039;bz_EventData&#039; pointer to the appropriate specific data class. This is usefull for plug-ins that use the same &#039;bz_EventHandler&#039; to process more then one specific message.&lt;br /&gt;
&lt;br /&gt;
Please see the descriptions of each specific event for information and descriptions of the data classes for each event. Some specific events allow plug-ins to change the values of data members in the data class and will use the modified values instead.&lt;br /&gt;
&lt;br /&gt;
Plug-ins should never delete or free the memory for a data class. BZFS will manage all pointers passed to plug-ins.&lt;br /&gt;
&lt;br /&gt;
==Events==&lt;br /&gt;
The following list contains all the event types currently supported by BZFS version 2.99&lt;br /&gt;
&lt;br /&gt;
  [[bz_eNullEvent]]&lt;br /&gt;
  [[bz_eCaptureEvent]]&lt;br /&gt;
  [[bz_ePlayerDieEvent]]&lt;br /&gt;
  [[bz_ePlayerSpawnEvent]]&lt;br /&gt;
  [[bz_eZoneEntryEvent]]&lt;br /&gt;
  [[bz_eZoneExitEvent]]&lt;br /&gt;
  [[bz_ePlayerJoinEvent]]&lt;br /&gt;
  [[bz_ePlayerPartEvent]]&lt;br /&gt;
  [[bz_eRawChatMessageEvent]]&lt;br /&gt;
  [[bz_eFilteredChatMessageEvent]]&lt;br /&gt;
  [[bz_eUnknownSlashCommand]]&lt;br /&gt;
  [[bz_eGetPlayerSpawnPosEvent]]&lt;br /&gt;
  [[bz_eGetAutoTeamEvent]]&lt;br /&gt;
  [[bz_eAllowPlayer]]&lt;br /&gt;
  [[bz_eTickEvent]]&lt;br /&gt;
  [[bz_eGetWorldEvent]]&lt;br /&gt;
  [[bz_eGetPlayerInfoEvent]]&lt;br /&gt;
  [[bz_eAllowSpawn]]&lt;br /&gt;
  [[bz_eListServerUpdateEvent]]&lt;br /&gt;
  [[bz_eBanEvent]]&lt;br /&gt;
  [[bz_eHostBanNotifyEvent]]&lt;br /&gt;
  [[bz_eHostBanModifyEvent]]&lt;br /&gt;
  [[bz_eIdBanEvent]]&lt;br /&gt;
  [[bz_eKickEvent]]&lt;br /&gt;
  [[bz_eKillEvent]]&lt;br /&gt;
  [[bz_ePlayerPausedEvent]]&lt;br /&gt;
  [[bz_eMessageFilteredEvent]]&lt;br /&gt;
  [[bz_eGameStartEvent]]&lt;br /&gt;
  [[bz_eGameStartEvent|bz_eGameEndEvent]]&lt;br /&gt;
  [[bz_eSlashCommandEvent]]&lt;br /&gt;
  [[bz_ePlayerAuthEvent]]&lt;br /&gt;
  [[bz_eServerMsgEvent]]&lt;br /&gt;
  [[bz_eShotFiredEvent]]&lt;br /&gt;
  [[bz_eAnointRabbitEvent]]&lt;br /&gt;
  [[bz_eNewRabbitEvent]]&lt;br /&gt;
  [[bz_eReloadEvent]]&lt;br /&gt;
  [[bz_ePlayerUpdateEvent]]&lt;br /&gt;
  [[bz_eNetDataSendEvent]]&lt;br /&gt;
  [[bz_eNetDataReceveEvent]]&lt;br /&gt;
  [[bz_eLoggingEvent]]&lt;br /&gt;
  [[bz_eFlagTransferredEvent]]&lt;br /&gt;
  [[bz_eFlagGrabbedEvent]]&lt;br /&gt;
  [[bz_eFlagDroppedEvent]]&lt;br /&gt;
  [[bz_eShotEndedEvent]]&lt;br /&gt;
  [[bz_eNewNonPlayerConnection]]&lt;br /&gt;
  [[bz_eIdleNewNonPlayerConnection]]&lt;br /&gt;
  [[bz_ePlayerCollision]]&lt;br /&gt;
  [[bz_eFlagResetEvent]]&lt;br /&gt;
  [[bz_eWorldFinalized]]&lt;br /&gt;
  [[bz_eAllowCTFCaptureEvent]]&lt;br /&gt;
  [[bz_eAllowFlagGrabEvent]]&lt;br /&gt;
  [[bz_eAllowKillCommandEvent]]&lt;br /&gt;
  [[bz_eReportFiledEvent]]&lt;br /&gt;
  [[bz_eTeleportEvent]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There exists one additional event in the &#039;bz_eEventType&#039; enumeration in &#039;bzfsAPI.h&#039;, &#039;&#039;bz_eLastEvent&#039;&#039;. This event is simply used by BZFS to assist in the counting of the total number of events, it will never be called and can not be installed.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[[BZFS API]]&lt;br /&gt;
&lt;br /&gt;
[[plug-ins]]&lt;br /&gt;
&lt;br /&gt;
[[Category:BZFS_API_Events]]&lt;/div&gt;</summary>
		<author><name>Xalendare</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_eGameStartEvent&amp;diff=5813</id>
		<title>Bz eGameStartEvent</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_eGameStartEvent&amp;diff=5813"/>
		<updated>2009-05-08T04:02:33Z</updated>

		<summary type="html">&lt;p&gt;Xalendare: Added event description.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{BZFS_API_Doc}}&lt;br /&gt;
{{BZFS_API_Events}}&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&#039;&#039;&#039;bz_eGameStartEvent&#039;&#039;&#039; and &#039;&#039;&#039;bz_eGameEndEvent&#039;&#039;&#039; are API events triggered when a game (i.e., a time- or score-limited match) begins or ends, respectively.&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
Both &#039;&#039;&#039;bz_eGameStartEvent&#039;&#039;&#039; and &#039;&#039;&#039;bz_eGameEndEvent&#039;&#039;&#039; return the &#039;&#039;&#039;bz_GameStartEndEventData_V1&#039;&#039;&#039; data class.&lt;br /&gt;
&lt;br /&gt;
  {| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;20&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
  !name&lt;br /&gt;
  !type&lt;br /&gt;
  !value description&lt;br /&gt;
  |-&lt;br /&gt;
  |eventType    &lt;br /&gt;
  |[[Event(API)|bz_eEventType]]&lt;br /&gt;
  |bz_eGameStartEvent or bz_eGameEndEvent&lt;br /&gt;
  |-&lt;br /&gt;
  |duration&lt;br /&gt;
  |double&lt;br /&gt;
  |The duration (in seconds)  of the game.&lt;br /&gt;
  |-&lt;br /&gt;
  |eventTime&lt;br /&gt;
  |double&lt;br /&gt;
  |The server time the event occurred (in seconds.)&lt;br /&gt;
  |}&lt;br /&gt;
&lt;br /&gt;
==Uses==&lt;br /&gt;
&lt;br /&gt;
[[Category:BZFS_API_Docs]]&lt;br /&gt;
[[Category:BZFS_API_Events]]&lt;/div&gt;</summary>
		<author><name>Xalendare</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_eListServerUpdateEvent&amp;diff=5812</id>
		<title>Bz eListServerUpdateEvent</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_eListServerUpdateEvent&amp;diff=5812"/>
		<updated>2009-05-08T02:50:27Z</updated>

		<summary type="html">&lt;p&gt;Xalendare: /* Data */ Added eventTime field.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{BZFS_API_Doc}}&lt;br /&gt;
{{BZFS_API_Events}}&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The &#039;&#039;&#039;bz_eListServerUpdateEvent&#039;&#039;&#039; is an API event called before the server adds itself to the list server.&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&#039;&#039;&#039;bz_eListServerUpdateEvent&#039;&#039;&#039; returns the &#039;&#039;&#039;bz_ListServerUpdateEvent_V1&#039;&#039;&#039; data class.&lt;br /&gt;
&lt;br /&gt;
  {| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;20&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
  !name&lt;br /&gt;
  !type&lt;br /&gt;
  !value description&lt;br /&gt;
  |-&lt;br /&gt;
  |eventType    &lt;br /&gt;
  |[[Event(API)|bz_eEventType]]&lt;br /&gt;
  | bz_eListServerUpdateEvent&lt;br /&gt;
  |-&lt;br /&gt;
  |address&lt;br /&gt;
  |[[bz_ApiString]]&lt;br /&gt;
  |The public address of the server, as specified with the &#039;&#039;&#039;-publicaddr&#039;&#039;&#039; [[BZFS_Command_Line_Options |command-line option]].&lt;br /&gt;
  |-&lt;br /&gt;
  |description&lt;br /&gt;
  |[[bz_ApiString]]&lt;br /&gt;
  |The public description of the server, as specified with the &#039;&#039;&#039;-public&#039;&#039;&#039; [[BZFS_Command_Line_Options |command-line option]].&lt;br /&gt;
  |-&lt;br /&gt;
  |groups&lt;br /&gt;
  |[[bz_ApiString]]&lt;br /&gt;
  |The groups the server will be advertised to, as specified with the &#039;&#039;&#039;-advertise&#039;&#039;&#039; [[BZFS_Command_Line_Options |command-line option]].&lt;br /&gt;
  |-&lt;br /&gt;
  |handled&lt;br /&gt;
  |bool&lt;br /&gt;
  |&lt;br /&gt;
  |-&lt;br /&gt;
  |eventTime&lt;br /&gt;
  |double&lt;br /&gt;
  |The server time the event occurred (in seconds.)&lt;br /&gt;
  |}&lt;br /&gt;
&lt;br /&gt;
==Uses==&lt;br /&gt;
Allows the plugin to programmatically change the information sent to the list server; all fields (except the event type) are read/write.&lt;br /&gt;
&lt;br /&gt;
[[Category:BZFS_API_Docs]]&lt;br /&gt;
[[Category:BZFS_API_Events]]&lt;/div&gt;</summary>
		<author><name>Xalendare</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_eAllowSpawn&amp;diff=5811</id>
		<title>Bz eAllowSpawn</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_eAllowSpawn&amp;diff=5811"/>
		<updated>2009-05-08T02:49:15Z</updated>

		<summary type="html">&lt;p&gt;Xalendare: /* Data */ Added eventTime field.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{BZFS_API_Doc}}&lt;br /&gt;
{{BZFS_API_Events}}&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The &#039;&#039;&#039;bz_eAllowSpawn&#039;&#039;&#039; is an API event called before a player respawns.&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&#039;&#039;&#039;bz_eAllowSpawn&#039;&#039;&#039; returns the &#039;&#039;&#039;bz_AllowSpawnData_V1&#039;&#039;&#039; data class.&lt;br /&gt;
&lt;br /&gt;
  {| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;20&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
  !name&lt;br /&gt;
  !type&lt;br /&gt;
  !value description&lt;br /&gt;
  |-&lt;br /&gt;
  |eventType&lt;br /&gt;
  |[[Event(API)|bz_eEventType]]&lt;br /&gt;
  |bz_eAllowSpawn&lt;br /&gt;
  |-&lt;br /&gt;
  |playerID&lt;br /&gt;
  |int&lt;br /&gt;
  |The ID of the player that will spawn.&lt;br /&gt;
  |-&lt;br /&gt;
  |team&lt;br /&gt;
  |[[bz_eTeamType]]&lt;br /&gt;
  |The team the player belongs to.&lt;br /&gt;
  |-&lt;br /&gt;
  |handled&lt;br /&gt;
  |bool&lt;br /&gt;
  |&lt;br /&gt;
  |-&lt;br /&gt;
  |allow&lt;br /&gt;
  |bool&lt;br /&gt;
  |Set to false if the player should not be allowed to spawn.&lt;br /&gt;
  |-&lt;br /&gt;
  |eventTime&lt;br /&gt;
  |double&lt;br /&gt;
  |The server time the event occurred (in seconds.)&lt;br /&gt;
  |}&lt;br /&gt;
&lt;br /&gt;
==Uses==&lt;br /&gt;
&lt;br /&gt;
[[Category:BZFS_API_Docs]]&lt;br /&gt;
[[Category:BZFS_API_Events]]&lt;/div&gt;</summary>
		<author><name>Xalendare</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_eKickEvent&amp;diff=5810</id>
		<title>Bz eKickEvent</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_eKickEvent&amp;diff=5810"/>
		<updated>2009-05-08T02:48:30Z</updated>

		<summary type="html">&lt;p&gt;Xalendare: Added documentation for event.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{BZFS_API_Doc}}&lt;br /&gt;
{{BZFS_API_Events}}&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The &#039;&#039;&#039;bz_eKickEvent&#039;&#039;&#039; is an API event triggered when a player is kicked from the server.&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&#039;&#039;&#039;bz_eKickEvent&#039;&#039;&#039; returns the &#039;&#039;&#039;bz_KickEventData_V1&#039;&#039;&#039; data class.&lt;br /&gt;
&lt;br /&gt;
  {| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;20&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
  !name&lt;br /&gt;
  !type&lt;br /&gt;
  !value description&lt;br /&gt;
  |-&lt;br /&gt;
  |eventType    &lt;br /&gt;
  |[[Event(API)|bz_eEventType]]&lt;br /&gt;
  |bz_eKickEvent&lt;br /&gt;
  |-&lt;br /&gt;
  |kickerID&lt;br /&gt;
  |int&lt;br /&gt;
  |The ID of the player who performed the kick.&lt;br /&gt;
  |-&lt;br /&gt;
  |kickedID&lt;br /&gt;
  |int&lt;br /&gt;
  |The ID of the player being kicked from the server.&lt;br /&gt;
  |-&lt;br /&gt;
  |reason&lt;br /&gt;
  |[[bz_ApiString]]&lt;br /&gt;
  |The reason (provided by the kicker using the &#039;&#039;&#039;/kick&#039;&#039;&#039; command) for the kick.&lt;br /&gt;
  |-&lt;br /&gt;
  |eventTime&lt;br /&gt;
  |double&lt;br /&gt;
  |The server time the event occurred (in seconds.)&lt;br /&gt;
  |}&lt;br /&gt;
&lt;br /&gt;
==Uses==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:BZFS_API_Docs]]&lt;br /&gt;
[[Category:BZFS_API_Events]]&lt;/div&gt;</summary>
		<author><name>Xalendare</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_eListServerUpdateEvent&amp;diff=5809</id>
		<title>Bz eListServerUpdateEvent</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_eListServerUpdateEvent&amp;diff=5809"/>
		<updated>2009-05-08T02:39:54Z</updated>

		<summary type="html">&lt;p&gt;Xalendare: Added documentation for event.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{BZFS_API_Doc}}&lt;br /&gt;
{{BZFS_API_Events}}&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The &#039;&#039;&#039;bz_eListServerUpdateEvent&#039;&#039;&#039; is an API event called before the server adds itself to the list server.&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&#039;&#039;&#039;bz_eListServerUpdateEvent&#039;&#039;&#039; returns the &#039;&#039;&#039;bz_ListServerUpdateEvent_V1&#039;&#039;&#039; data class.&lt;br /&gt;
&lt;br /&gt;
  {| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;20&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
  !name&lt;br /&gt;
  !type&lt;br /&gt;
  !value description&lt;br /&gt;
  |-&lt;br /&gt;
  |eventType    &lt;br /&gt;
  |[[Event(API)|bz_eEventType]]&lt;br /&gt;
  | bz_eListServerUpdateEvent&lt;br /&gt;
  |-&lt;br /&gt;
  |address&lt;br /&gt;
  |[[bz_ApiString]]&lt;br /&gt;
  |The public address of the server, as specified with the &#039;&#039;&#039;-publicaddr&#039;&#039;&#039; [[BZFS_Command_Line_Options |command-line option]].&lt;br /&gt;
  |-&lt;br /&gt;
  |description&lt;br /&gt;
  |[[bz_ApiString]]&lt;br /&gt;
  |The public description of the server, as specified with the &#039;&#039;&#039;-public&#039;&#039;&#039; [[BZFS_Command_Line_Options |command-line option]].&lt;br /&gt;
  |-&lt;br /&gt;
  |groups&lt;br /&gt;
  |[[bz_ApiString]]&lt;br /&gt;
  |The groups the server will be advertised to, as specified with the &#039;&#039;&#039;-advertise&#039;&#039;&#039; [[BZFS_Command_Line_Options |command-line option]].&lt;br /&gt;
  |-&lt;br /&gt;
  |handled&lt;br /&gt;
  |bool&lt;br /&gt;
  |&lt;br /&gt;
  |}&lt;br /&gt;
&lt;br /&gt;
==Uses==&lt;br /&gt;
Allows the plugin to programmatically change the information sent to the list server; all fields (except the event type) are read/write.&lt;br /&gt;
&lt;br /&gt;
[[Category:BZFS_API_Docs]]&lt;br /&gt;
[[Category:BZFS_API_Events]]&lt;/div&gt;</summary>
		<author><name>Xalendare</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_eAllowSpawn&amp;diff=5808</id>
		<title>Bz eAllowSpawn</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_eAllowSpawn&amp;diff=5808"/>
		<updated>2009-05-08T02:14:34Z</updated>

		<summary type="html">&lt;p&gt;Xalendare: Added (incomplete) documentation for event.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{BZFS_API_Doc}}&lt;br /&gt;
{{BZFS_API_Events}}&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The &#039;&#039;&#039;bz_eAllowSpawn&#039;&#039;&#039; is an API event called before a player respawns.&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&#039;&#039;&#039;bz_eAllowSpawn&#039;&#039;&#039; returns the &#039;&#039;&#039;bz_AllowSpawnData_V1&#039;&#039;&#039; data class.&lt;br /&gt;
&lt;br /&gt;
  {| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;20&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
  !name&lt;br /&gt;
  !type&lt;br /&gt;
  !value description&lt;br /&gt;
  |-&lt;br /&gt;
  |eventType&lt;br /&gt;
  |[[Event(API)|bz_eEventType]]&lt;br /&gt;
  |bz_eAllowSpawn&lt;br /&gt;
  |-&lt;br /&gt;
  |playerID&lt;br /&gt;
  |int&lt;br /&gt;
  |The ID of the player that will spawn.&lt;br /&gt;
  |-&lt;br /&gt;
  |team&lt;br /&gt;
  |[[bz_eTeamType]]&lt;br /&gt;
  |The team the player belongs to.&lt;br /&gt;
  |-&lt;br /&gt;
  |handled&lt;br /&gt;
  |bool&lt;br /&gt;
  |&lt;br /&gt;
  |-&lt;br /&gt;
  |allow&lt;br /&gt;
  |bool&lt;br /&gt;
  |Set to false if the player should not be allowed to spawn.&lt;br /&gt;
  |}&lt;br /&gt;
&lt;br /&gt;
==Uses==&lt;br /&gt;
&lt;br /&gt;
[[Category:BZFS_API_Docs]]&lt;br /&gt;
[[Category:BZFS_API_Events]]&lt;/div&gt;</summary>
		<author><name>Xalendare</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_APIString&amp;diff=5807</id>
		<title>Bz APIString</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_APIString&amp;diff=5807"/>
		<updated>2009-05-08T01:57:53Z</updated>

		<summary type="html">&lt;p&gt;Xalendare: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{BZFS_API_Doc}}&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The bz_ApiString is a text string utility class that is used by the [[BZFS API]] for passing text back to a plug-in from various events and functions. The class contains a number of utility methods commonly used by plug-ins.&lt;br /&gt;
&lt;br /&gt;
==Construction==&lt;br /&gt;
plug-ins should never create a bz_ApiString, they are only passed back to the plug-in by BZFS.&lt;br /&gt;
&lt;br /&gt;
==Assignment==&lt;br /&gt;
The standard = operator is provided to assign the value in a string, from other strings, std::strings, and const char pointers.&lt;br /&gt;
&lt;br /&gt;
==Boolean Operators==&lt;br /&gt;
The standard == and != operators are provided to assign allow testing of bz_ApiStrings with other bz_ApiStrings, std::strings and const char* pointers.&lt;/div&gt;</summary>
		<author><name>Xalendare</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=BzApiString&amp;diff=5806</id>
		<title>BzApiString</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=BzApiString&amp;diff=5806"/>
		<updated>2009-05-08T01:57:23Z</updated>

		<summary type="html">&lt;p&gt;Xalendare: BzApiString moved to Bz APIString: Undo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Bz APIString]]&lt;/div&gt;</summary>
		<author><name>Xalendare</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_APIString&amp;diff=5805</id>
		<title>Bz APIString</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_APIString&amp;diff=5805"/>
		<updated>2009-05-08T01:57:23Z</updated>

		<summary type="html">&lt;p&gt;Xalendare: BzApiString moved to Bz APIString: Undo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{BZFS_API_Doc}}&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The bzApiString is a text string utility class that is used by the [[BZFS API]] for passing text back to a plug-in from various events and functions. The class contains a number of utility methods commonly used by plug-ins.&lt;br /&gt;
&lt;br /&gt;
==Construction==&lt;br /&gt;
plug-ins should never create a bzApiString, they are only passed back to the plug-in by BZFS.&lt;br /&gt;
&lt;br /&gt;
==Assignment==&lt;br /&gt;
The standard = operator is provided to assign the value in a string, from other strings, std::strings, and const char pointers.&lt;br /&gt;
&lt;br /&gt;
==Boolean Operators==&lt;br /&gt;
The standard == and != operators are provided to assign allow testing of bzApiStrings with other bzApiStrings, std::strings and const char* pointers.&lt;/div&gt;</summary>
		<author><name>Xalendare</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=BzAPIIntList&amp;diff=5804</id>
		<title>BzAPIIntList</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=BzAPIIntList&amp;diff=5804"/>
		<updated>2009-05-08T01:56:34Z</updated>

		<summary type="html">&lt;p&gt;Xalendare: BzAPIIntList moved to Bz APIIntList over redirect: Undo...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Bz APIIntList]]&lt;/div&gt;</summary>
		<author><name>Xalendare</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_APIIntList&amp;diff=5803</id>
		<title>Bz APIIntList</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_APIIntList&amp;diff=5803"/>
		<updated>2009-05-08T01:56:34Z</updated>

		<summary type="html">&lt;p&gt;Xalendare: BzAPIIntList moved to Bz APIIntList over redirect: Undo...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A list of integers. This is used for passing lists of integers from the bzfs api itself to the plugin that uses the api.&lt;/div&gt;</summary>
		<author><name>Xalendare</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=BZFS_API&amp;diff=5802</id>
		<title>BZFS API</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=BZFS_API&amp;diff=5802"/>
		<updated>2009-05-08T01:56:12Z</updated>

		<summary type="html">&lt;p&gt;Xalendare: Undoing..&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DoDoc|fill in articles for all API functions}}&lt;br /&gt;
&lt;br /&gt;
The BZFS API (Application Programmers Interface) is a set of C++ functions, structures, and classes that is exported by [[BZFS]] to be used by [[Plug-ins]]. The API provides access to the various states and data structures of a running BZFS game and is the primary method of communication between a plug-in and the game server.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The BZFS API is defined entirely in the &#039;&#039;&#039;bzfsAPI.h&#039;&#039;&#039; header file that is part of the [[BZFlag Source]] code. The header is also included with each install of the BZFlag installer for Microsoft Windows.&lt;br /&gt;
&lt;br /&gt;
Plug-ins include this file in their source code so that they may access the functions it contains.&lt;br /&gt;
&lt;br /&gt;
==Naming Conventions==&lt;br /&gt;
All BZFS API code structures will begin with the prefix &#039;&#039;&#039;bz&#039;&#039;&#039; or &#039;&#039;&#039;bz_&#039;&#039;&#039; for clarification and to prevent conflicts with names of code structures inside BZFS or any plug-ins.&lt;br /&gt;
&lt;br /&gt;
==API Versions==&lt;br /&gt;
The API was added in version 2.0.4 of BZFlag. While working well for many users, it was found to be lacking in a number of features that would make make it difficult for plug-ins to run when the API itself was changed.&lt;br /&gt;
&lt;br /&gt;
As of version 2.1 of BZFlag, the entire API was versioned and set up to use derived classes to that plug-ins written to use an older version of the API will work in newer versions of the software. Newer data structures would be put into further derived classes and would not be seen by the older plug-in. Due to this change a large number of API functions changed in name. This change causes all older 2.0.x plug-ins to no longer work with out a source code change. Once older plug-ins are updated to the new 2.1 API they will use the new versioning system and work fine in newer versions with out any needed changes.&lt;br /&gt;
&lt;br /&gt;
==Entry Points==&lt;br /&gt;
There are 3 primary entry points into each plug-in. These entry points are the 3 core functions that every plug-in must implement.&lt;br /&gt;
&lt;br /&gt;
 BZF_PLUGIN_CALL int [[bz_Load]] ( const char* command );&lt;br /&gt;
 BZF_PLUGIN_CALL int [[bz_Unload]] ( void );&lt;br /&gt;
 BZF_PLUGIN_CALL int [[bz_GetVersion]] ( void );&lt;br /&gt;
&lt;br /&gt;
[[bz_Load]] is called when the plug-in is first initialized. This is when the plug-in should register any [[Event(API)|event handlers]] needed and initialize any &amp;quot;one time&amp;quot; startup data.&lt;br /&gt;
&lt;br /&gt;
[[bz_Unload]] is called when a plug-in is no longer needed and will be shut down. This is most commonly called when bzfs is shutting down, or when a plug-in is unloaded manualy.&lt;br /&gt;
&lt;br /&gt;
[[bz_GetVersion]] is called by bzfs before any other functions are called. The function should return the version of the API that it is written for. This is to prevent bzfs from attempting to load plug-ins that use a newer incompatible API.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;bzfsAPI.h&#039;&#039;&#039; defines a C MACRO to help ease the implementation of this function. All a plug-in must do is put the macro;&lt;br /&gt;
&lt;br /&gt;
 BZ_GET_PLUGIN_VERSION&lt;br /&gt;
&lt;br /&gt;
somewhere in its sources, and then export the function. This will automatically return the API version of the current API you are using. See the sample plug-ins for examples. These will be the only 3 functions called by bzfs for non-event actions.&lt;br /&gt;
&lt;br /&gt;
All entry point functions should be preceded with the BZF_PLUGIN_CALL macro. This macro will tell your compiler to export these functions so bzfs can call them after the plug-in is loaded.&lt;br /&gt;
&lt;br /&gt;
==Types==&lt;br /&gt;
&lt;br /&gt;
Due to how Microsoft Windows handles memory access between an application and dynamically loaded Libaries(DLLs), there are a few custom data types that are used in the API. These are used for common STL style containers, for strings and lists.&lt;br /&gt;
&lt;br /&gt;
===bz_ApiString===&lt;br /&gt;
Any text passed back from the API or events will come in the form of a [[bz_ApiString]]. This is a class defined in the API that behaves much like a std::string. The &#039;c_str()&#039; method can be used to get the text out as a normal &#039;const char*&#039;. The class also supports many assignment functions for setting it&#039;s contents.&lt;br /&gt;
&lt;br /&gt;
A plug-in should never need to make variables of its&#039; own using the [[bz_ApiString]] type, but should use a standard stl std::string instead, [[bz_ApiString]] provides an appropriate assignment operator.&lt;br /&gt;
&lt;br /&gt;
[[bz_ApiString]] also includes some utility functions such as replace all and tokenize that are commonly needed by plug-ins.&lt;br /&gt;
&lt;br /&gt;
===bz_APILists===&lt;br /&gt;
&lt;br /&gt;
A few API functions require lists of integers, strings, or floats. For these functions the plug-in will need to use one of the following list classes. These classes are similar to the std::vector in implementation. When a plug-in needs to allocate one of these lists, it must use the appropriate allocator function, so BZFS can make a new list for the plug-in to use. These will return a pointer to a new list for the plug-in to use. When the plug-in is finished with the list, it needs to tell BZFS to delete the list with a call to the appropriate delete function.&lt;br /&gt;
The lists types are;&lt;br /&gt;
  {| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;20&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
  !List&lt;br /&gt;
  !allocator function&lt;br /&gt;
  !delete function&lt;br /&gt;
  !contained type&lt;br /&gt;
  |-&lt;br /&gt;
  |[[bz_APIIntList]]&lt;br /&gt;
  |[[bz_newIntList]]&lt;br /&gt;
  |[[bz_deleteIntList]]&lt;br /&gt;
  |int&lt;br /&gt;
  |-&lt;br /&gt;
  |[[bz_APIFloatList]]&lt;br /&gt;
  |[[bz_newFloatList]]&lt;br /&gt;
  |[[bz_deleteFloatList]]&lt;br /&gt;
  |float&lt;br /&gt;
  |-&lt;br /&gt;
  |[[bz_APIStringList]]&lt;br /&gt;
  |[[bz_newStringList]]&lt;br /&gt;
  |[[bz_deleteStringList]]&lt;br /&gt;
  |[[bz_ApiString]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Enumerations===&lt;br /&gt;
A number of enumerations exist in the API and are used by a number of API functions and events.&lt;br /&gt;
  [[bz_eTeamType]]&lt;br /&gt;
  [[Event(API)|bz_eEventType]]&lt;br /&gt;
  [[bz_eShotType]]&lt;br /&gt;
  [[bz_eGameType]]&lt;br /&gt;
  [[bz_ePlayerStatus]]&lt;br /&gt;
  [[bz_eWorldObjectType]]&lt;br /&gt;
  [[bz_eAPIColType]]&lt;br /&gt;
  [[bz_ePlayerType]]&lt;br /&gt;
  [[bz_eRejectCodes]]&lt;br /&gt;
  [[bz_ePlayerDeathReason]]&lt;br /&gt;
&lt;br /&gt;
==Events==&lt;br /&gt;
Plug-ins can register callbacks so they can be notified of various actions and state changes in the current BZFS game. These events tell a plug-in when important things happen, such as when a player has spawned, or is killed. These events are the primary form of communication from the BZFS server into the plug-in.&lt;br /&gt;
&lt;br /&gt;
See the [[Event(API)|API events]] page for more detailed information on events.&lt;br /&gt;
&lt;br /&gt;
==Functions==&lt;br /&gt;
The BZFS API provides a number of functions to plug-ins for use in querying the current game state. Functions are used both to get information about the game, and to trigger in game actions, such as activating a world weapon.&lt;br /&gt;
&lt;br /&gt;
See the [[Functions(API)|API Functions]] page for more information on functions.&lt;br /&gt;
&lt;br /&gt;
==Wiki Documentation==&lt;br /&gt;
The documentation for the API provided on this wiki is mostly concerned with the current development version of the software. There have been changes over time to the API. Any changes to classes and functions will be noted in the new documentation under a &#039;&#039;History&#039;&#039; section. In general the initial API that was released with the 2.0.x product line was not consistent, and many of these inconsistencies are being worked out with newer versions of the API (3.0 and later)&lt;br /&gt;
&lt;br /&gt;
All API developers should use the bzfsAPI.h file as well for exact spellings of methods and parameters.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
[[Event(API)|API Events]]&lt;br /&gt;
&lt;br /&gt;
[[Functions(API)|API Functions]]&lt;br /&gt;
&lt;br /&gt;
[[Plug-ins]]&lt;br /&gt;
&lt;br /&gt;
[[BZFS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Plug-Ins]]&lt;/div&gt;</summary>
		<author><name>Xalendare</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=BzAPIStringList&amp;diff=5801</id>
		<title>BzAPIStringList</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=BzAPIStringList&amp;diff=5801"/>
		<updated>2009-05-08T01:55:07Z</updated>

		<summary type="html">&lt;p&gt;Xalendare: BzAPIStringList moved to Bz APIStringList over redirect: Undoing previous move...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Bz APIStringList]]&lt;/div&gt;</summary>
		<author><name>Xalendare</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_APIStringList&amp;diff=5800</id>
		<title>Bz APIStringList</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_APIStringList&amp;diff=5800"/>
		<updated>2009-05-08T01:55:07Z</updated>

		<summary type="html">&lt;p&gt;Xalendare: BzAPIStringList moved to Bz APIStringList over redirect: Undoing previous move...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{BZFS_API_Doc}}{{BZFS_API_Class}}&lt;br /&gt;
==Declaration==&lt;br /&gt;
 class BZF_API bz_APIStringList {&lt;br /&gt;
 public:&lt;br /&gt;
   bz_APIStringList();&lt;br /&gt;
   bz_APIStringList(const bz_APIStringList &amp;amp;r);&lt;br /&gt;
   bz_APIStringList(const std::vector&amp;lt;std::string&amp;gt; &amp;amp;r);&lt;br /&gt;
 &lt;br /&gt;
   ~bz_APIStringList();&lt;br /&gt;
 &lt;br /&gt;
   void push_back ( const [[bz_ApiString]] &amp;amp;value );&lt;br /&gt;
   void push_back ( const std::string &amp;amp;value );&lt;br /&gt;
   bz_ApiString get ( unsigned int i );&lt;br /&gt;
 &lt;br /&gt;
   const bz_ApiString&amp;amp; operator[] (unsigned int i) const;&lt;br /&gt;
   bz_APIStringList&amp;amp; operator= ( const bz_APIStringList &amp;amp;r );&lt;br /&gt;
   bz_APIStringList&amp;amp; operator= ( const std::vector&amp;lt;std::string&amp;gt; &amp;amp;r );&lt;br /&gt;
 &lt;br /&gt;
   unsigned int size ( void );&lt;br /&gt;
   void clear ( void );&lt;br /&gt;
 &lt;br /&gt;
   void tokenize ( const char* in, const char* delims, int maxTokens = 0, bool useQuotes = false);&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 BZF_API bz_APIStringList* bz_newStringList ( void );&lt;br /&gt;
 BZF_API void bz_deleteStringList( bz_APIStringList * l );&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Contains a list of strings.&lt;br /&gt;
Comparable to std::vector&amp;lt;std::string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Plugins generally should never create Bz_APIStringList objects, only copy the data out.&lt;br /&gt;
&lt;br /&gt;
==Member Access==&lt;br /&gt;
[[bz_ApiString]] get ( unsigned int i );&lt;br /&gt;
&lt;br /&gt;
const bz_ApiString&amp;amp; operator[] (unsigned int i) const;&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
; unsigned int i : bz_ApiString element to return&lt;br /&gt;
&lt;br /&gt;
==Functions==&lt;br /&gt;
===size===&lt;br /&gt;
unsigned int size ( void );&lt;br /&gt;
&lt;br /&gt;
Returns the number of elements on the list&lt;br /&gt;
&lt;br /&gt;
===clear===&lt;br /&gt;
void clear ( void );&lt;br /&gt;
&lt;br /&gt;
Removes all elements from the list&lt;br /&gt;
&lt;br /&gt;
===tokenize===&lt;br /&gt;
void tokenize ( const char* in, const char* delims, int maxTokens = 0, bool useQuotes = false);&lt;br /&gt;
&lt;br /&gt;
Appends a list generated from a tokenized string. Use of this function is discouraged, the tokenize() function available in plugin_utils is prefered.&lt;/div&gt;</summary>
		<author><name>Xalendare</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_APIStringList&amp;diff=5798</id>
		<title>Bz APIStringList</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_APIStringList&amp;diff=5798"/>
		<updated>2009-05-08T01:52:45Z</updated>

		<summary type="html">&lt;p&gt;Xalendare: Bz APIStringList moved to BzAPIStringList: Name out-of-date&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{BZFS_API_Doc}}{{BZFS_API_Class}}&lt;br /&gt;
==Declaration==&lt;br /&gt;
 class BZF_API bz_APIStringList {&lt;br /&gt;
 public:&lt;br /&gt;
   bz_APIStringList();&lt;br /&gt;
   bz_APIStringList(const bz_APIStringList &amp;amp;r);&lt;br /&gt;
   bz_APIStringList(const std::vector&amp;lt;std::string&amp;gt; &amp;amp;r);&lt;br /&gt;
 &lt;br /&gt;
   ~bz_APIStringList();&lt;br /&gt;
 &lt;br /&gt;
   void push_back ( const [[bz_ApiString]] &amp;amp;value );&lt;br /&gt;
   void push_back ( const std::string &amp;amp;value );&lt;br /&gt;
   bz_ApiString get ( unsigned int i );&lt;br /&gt;
 &lt;br /&gt;
   const bz_ApiString&amp;amp; operator[] (unsigned int i) const;&lt;br /&gt;
   bz_APIStringList&amp;amp; operator= ( const bz_APIStringList &amp;amp;r );&lt;br /&gt;
   bz_APIStringList&amp;amp; operator= ( const std::vector&amp;lt;std::string&amp;gt; &amp;amp;r );&lt;br /&gt;
 &lt;br /&gt;
   unsigned int size ( void );&lt;br /&gt;
   void clear ( void );&lt;br /&gt;
 &lt;br /&gt;
   void tokenize ( const char* in, const char* delims, int maxTokens = 0, bool useQuotes = false);&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 BZF_API bz_APIStringList* bz_newStringList ( void );&lt;br /&gt;
 BZF_API void bz_deleteStringList( bz_APIStringList * l );&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Contains a list of strings.&lt;br /&gt;
Comparable to std::vector&amp;lt;std::string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Plugins generally should never create Bz_APIStringList objects, only copy the data out.&lt;br /&gt;
&lt;br /&gt;
==Member Access==&lt;br /&gt;
[[bz_ApiString]] get ( unsigned int i );&lt;br /&gt;
&lt;br /&gt;
const bz_ApiString&amp;amp; operator[] (unsigned int i) const;&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
; unsigned int i : bz_ApiString element to return&lt;br /&gt;
&lt;br /&gt;
==Functions==&lt;br /&gt;
===size===&lt;br /&gt;
unsigned int size ( void );&lt;br /&gt;
&lt;br /&gt;
Returns the number of elements on the list&lt;br /&gt;
&lt;br /&gt;
===clear===&lt;br /&gt;
void clear ( void );&lt;br /&gt;
&lt;br /&gt;
Removes all elements from the list&lt;br /&gt;
&lt;br /&gt;
===tokenize===&lt;br /&gt;
void tokenize ( const char* in, const char* delims, int maxTokens = 0, bool useQuotes = false);&lt;br /&gt;
&lt;br /&gt;
Appends a list generated from a tokenized string. Use of this function is discouraged, the tokenize() function available in plugin_utils is prefered.&lt;/div&gt;</summary>
		<author><name>Xalendare</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_APIIntList&amp;diff=5796</id>
		<title>Bz APIIntList</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_APIIntList&amp;diff=5796"/>
		<updated>2009-05-08T01:52:10Z</updated>

		<summary type="html">&lt;p&gt;Xalendare: Bz APIIntList moved to BzAPIIntList: Name out-of-date&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A list of integers. This is used for passing lists of integers from the bzfs api itself to the plugin that uses the api.&lt;/div&gt;</summary>
		<author><name>Xalendare</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=BZFS_API&amp;diff=5795</id>
		<title>BZFS API</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=BZFS_API&amp;diff=5795"/>
		<updated>2009-05-08T01:50:53Z</updated>

		<summary type="html">&lt;p&gt;Xalendare: Changing out-of-date class names&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DoDoc|fill in articles for all API functions}}&lt;br /&gt;
&lt;br /&gt;
The BZFS API (Application Programmers Interface) is a set of C++ functions, structures, and classes that is exported by [[BZFS]] to be used by [[Plug-ins]]. The API provides access to the various states and data structures of a running BZFS game and is the primary method of communication between a plug-in and the game server.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The BZFS API is defined entirely in the &#039;&#039;&#039;bzfsAPI.h&#039;&#039;&#039; header file that is part of the [[BZFlag Source]] code. The header is also included with each install of the BZFlag installer for Microsoft Windows.&lt;br /&gt;
&lt;br /&gt;
Plug-ins include this file in their source code so that they may access the functions it contains.&lt;br /&gt;
&lt;br /&gt;
==Naming Conventions==&lt;br /&gt;
All BZFS API code structures will begin with the prefix &#039;&#039;&#039;bz&#039;&#039;&#039; or &#039;&#039;&#039;bz_&#039;&#039;&#039; for clarification and to prevent conflicts with names of code structures inside BZFS or any plug-ins.&lt;br /&gt;
&lt;br /&gt;
==API Versions==&lt;br /&gt;
The API was added in version 2.0.4 of BZFlag. While working well for many users, it was found to be lacking in a number of features that would make make it difficult for plug-ins to run when the API itself was changed.&lt;br /&gt;
&lt;br /&gt;
As of version 2.1 of BZFlag, the entire API was versioned and set up to use derived classes to that plug-ins written to use an older version of the API will work in newer versions of the software. Newer data structures would be put into further derived classes and would not be seen by the older plug-in. Due to this change a large number of API functions changed in name. This change causes all older 2.0.x plug-ins to no longer work with out a source code change. Once older plug-ins are updated to the new 2.1 API they will use the new versioning system and work fine in newer versions with out any needed changes.&lt;br /&gt;
&lt;br /&gt;
==Entry Points==&lt;br /&gt;
There are 3 primary entry points into each plug-in. These entry points are the 3 core functions that every plug-in must implement.&lt;br /&gt;
&lt;br /&gt;
 BZF_PLUGIN_CALL int [[bz_Load]] ( const char* command );&lt;br /&gt;
 BZF_PLUGIN_CALL int [[bz_Unload]] ( void );&lt;br /&gt;
 BZF_PLUGIN_CALL int [[bz_GetVersion]] ( void );&lt;br /&gt;
&lt;br /&gt;
[[bz_Load]] is called when the plug-in is first initialized. This is when the plug-in should register any [[Event(API)|event handlers]] needed and initialize any &amp;quot;one time&amp;quot; startup data.&lt;br /&gt;
&lt;br /&gt;
[[bz_Unload]] is called when a plug-in is no longer needed and will be shut down. This is most commonly called when bzfs is shutting down, or when a plug-in is unloaded manualy.&lt;br /&gt;
&lt;br /&gt;
[[bz_GetVersion]] is called by bzfs before any other functions are called. The function should return the version of the API that it is written for. This is to prevent bzfs from attempting to load plug-ins that use a newer incompatible API.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;bzfsAPI.h&#039;&#039;&#039; defines a C MACRO to help ease the implementation of this function. All a plug-in must do is put the macro;&lt;br /&gt;
&lt;br /&gt;
 BZ_GET_PLUGIN_VERSION&lt;br /&gt;
&lt;br /&gt;
somewhere in its sources, and then export the function. This will automatically return the API version of the current API you are using. See the sample plug-ins for examples. These will be the only 3 functions called by bzfs for non-event actions.&lt;br /&gt;
&lt;br /&gt;
All entry point functions should be preceded with the BZF_PLUGIN_CALL macro. This macro will tell your compiler to export these functions so bzfs can call them after the plug-in is loaded.&lt;br /&gt;
&lt;br /&gt;
==Types==&lt;br /&gt;
&lt;br /&gt;
Due to how Microsoft Windows handles memory access between an application and dynamically loaded Libaries(DLLs), there are a few custom data types that are used in the API. These are used for common STL style containers, for strings and lists.&lt;br /&gt;
&lt;br /&gt;
===bzApiString===&lt;br /&gt;
Any text passed back from the API or events will come in the form of a [[bzApiString]]. This is a class defined in the API that behaves much like a std::string. The &#039;c_str()&#039; method can be used to get the text out as a normal &#039;const char*&#039;. The class also supports many assignment functions for setting it&#039;s contents.&lt;br /&gt;
&lt;br /&gt;
A plug-in should never need to make variables of its&#039; own using the [[bzApiString]] type, but should use a standard stl std::string instead, [[bzApiString]] provides an appropriate assignment operator.&lt;br /&gt;
&lt;br /&gt;
[[bzApiString]] also includes some utility functions such as replace all and tokenize that are commonly needed by plug-ins.&lt;br /&gt;
&lt;br /&gt;
===bzAPILists===&lt;br /&gt;
&lt;br /&gt;
A few API functions require lists of integers, strings, or floats. For these functions the plug-in will need to use one of the following list classes. These classes are similar to the std::vector in implementation. When a plug-in needs to allocate one of these lists, it must use the appropriate allocator function, so BZFS can make a new list for the plug-in to use. These will return a pointer to a new list for the plug-in to use. When the plug-in is finished with the list, it needs to tell BZFS to delete the list with a call to the appropriate delete function.&lt;br /&gt;
The lists types are;&lt;br /&gt;
  {| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;20&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
  !List&lt;br /&gt;
  !allocator function&lt;br /&gt;
  !delete function&lt;br /&gt;
  !contained type&lt;br /&gt;
  |-&lt;br /&gt;
  |[[bzAPIIntList]]&lt;br /&gt;
  |[[bz_newIntList]]&lt;br /&gt;
  |[[bz_deleteIntList]]&lt;br /&gt;
  |int&lt;br /&gt;
  |-&lt;br /&gt;
  |[[bzAPIFloatList]]&lt;br /&gt;
  |[[bz_newFloatList]]&lt;br /&gt;
  |[[bz_deleteFloatList]]&lt;br /&gt;
  |float&lt;br /&gt;
  |-&lt;br /&gt;
  |[[bzAPIStringList]]&lt;br /&gt;
  |[[bz_newStringList]]&lt;br /&gt;
  |[[bz_deleteStringList]]&lt;br /&gt;
  |[[bzApiString]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Enumerations===&lt;br /&gt;
A number of enumerations exist in the API and are used by a number of API functions and events.&lt;br /&gt;
  [[bz_eTeamType]]&lt;br /&gt;
  [[Event(API)|bz_eEventType]]&lt;br /&gt;
  [[bz_eShotType]]&lt;br /&gt;
  [[bz_eGameType]]&lt;br /&gt;
  [[bz_ePlayerStatus]]&lt;br /&gt;
  [[bz_eWorldObjectType]]&lt;br /&gt;
  [[bz_eAPIColType]]&lt;br /&gt;
  [[bz_ePlayerType]]&lt;br /&gt;
  [[bz_eRejectCodes]]&lt;br /&gt;
  [[bz_ePlayerDeathReason]]&lt;br /&gt;
&lt;br /&gt;
==Events==&lt;br /&gt;
Plug-ins can register callbacks so they can be notified of various actions and state changes in the current BZFS game. These events tell a plug-in when important things happen, such as when a player has spawned, or is killed. These events are the primary form of communication from the BZFS server into the plug-in.&lt;br /&gt;
&lt;br /&gt;
See the [[Event(API)|API events]] page for more detailed information on events.&lt;br /&gt;
&lt;br /&gt;
==Functions==&lt;br /&gt;
The BZFS API provides a number of functions to plug-ins for use in querying the current game state. Functions are used both to get information about the game, and to trigger in game actions, such as activating a world weapon.&lt;br /&gt;
&lt;br /&gt;
See the [[Functions(API)|API Functions]] page for more information on functions.&lt;br /&gt;
&lt;br /&gt;
==Wiki Documentation==&lt;br /&gt;
The documentation for the API provided on this wiki is mostly concerned with the current development version of the software. There have been changes over time to the API. Any changes to classes and functions will be noted in the new documentation under a &#039;&#039;History&#039;&#039; section. In general the initial API that was released with the 2.0.x product line was not consistent, and many of these inconsistencies are being worked out with newer versions of the API (3.0 and later)&lt;br /&gt;
&lt;br /&gt;
All API developers should use the bzfsAPI.h file as well for exact spellings of methods and parameters.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
[[Event(API)|API Events]]&lt;br /&gt;
&lt;br /&gt;
[[Functions(API)|API Functions]]&lt;br /&gt;
&lt;br /&gt;
[[Plug-ins]]&lt;br /&gt;
&lt;br /&gt;
[[BZFS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Plug-Ins]]&lt;/div&gt;</summary>
		<author><name>Xalendare</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_APIString&amp;diff=5794</id>
		<title>Bz APIString</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_APIString&amp;diff=5794"/>
		<updated>2009-05-08T01:46:19Z</updated>

		<summary type="html">&lt;p&gt;Xalendare: Changing names...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{BZFS_API_Doc}}&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The bzApiString is a text string utility class that is used by the [[BZFS API]] for passing text back to a plug-in from various events and functions. The class contains a number of utility methods commonly used by plug-ins.&lt;br /&gt;
&lt;br /&gt;
==Construction==&lt;br /&gt;
plug-ins should never create a bzApiString, they are only passed back to the plug-in by BZFS.&lt;br /&gt;
&lt;br /&gt;
==Assignment==&lt;br /&gt;
The standard = operator is provided to assign the value in a string, from other strings, std::strings, and const char pointers.&lt;br /&gt;
&lt;br /&gt;
==Boolean Operators==&lt;br /&gt;
The standard == and != operators are provided to assign allow testing of bzApiStrings with other bzApiStrings, std::strings and const char* pointers.&lt;/div&gt;</summary>
		<author><name>Xalendare</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_ApiString&amp;diff=5793</id>
		<title>Bz ApiString</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_ApiString&amp;diff=5793"/>
		<updated>2009-05-08T01:45:13Z</updated>

		<summary type="html">&lt;p&gt;Xalendare: Bz ApiString moved to BzApiString: Class has been renamed in the API&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[BzApiString]]&lt;/div&gt;</summary>
		<author><name>Xalendare</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_APIString&amp;diff=5792</id>
		<title>Bz APIString</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_APIString&amp;diff=5792"/>
		<updated>2009-05-08T01:45:12Z</updated>

		<summary type="html">&lt;p&gt;Xalendare: Bz ApiString moved to BzApiString: Class has been renamed in the API&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{BZFS_API_Doc}}&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The bz_ApiString is a text string utility class that is used by the [[BZFS API]] for passing text back to a plug-in from various events and functions. The class contains a number of utility methods commonly used by plug-ins.&lt;br /&gt;
&lt;br /&gt;
==Construction==&lt;br /&gt;
plug-ins should never create a bz_ApiString, they are only passed back to the plug-in by BZFS.&lt;br /&gt;
&lt;br /&gt;
==Assignment==&lt;br /&gt;
The standard = operator is provided to assign the value in a string, from other strings, std::strings, and const char pointers.&lt;br /&gt;
&lt;br /&gt;
==Boolean Operators==&lt;br /&gt;
The standard == and != operators are provided to assign allow testing of bz_ApiStrings with other bz_ApiStrings, std::strings and const char* pointers.&lt;/div&gt;</summary>
		<author><name>Xalendare</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_eTickEvent&amp;diff=5789</id>
		<title>Bz eTickEvent</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_eTickEvent&amp;diff=5789"/>
		<updated>2009-05-05T00:54:55Z</updated>

		<summary type="html">&lt;p&gt;Xalendare: /* Data */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{BZFS_API_Doc}}&lt;br /&gt;
{{BZFS_API_Events}}&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The &#039;&#039;&#039;bz_eTickevent&#039;&#039;&#039; is an API event that is called once for each [[BZFS]] main loop. The wait time between tick calls can vary grealy depending on server load network conditions. Plug-ins that wish to enforce a maximum wait time between ticks should call [[bz_setMaxWaitTime]] with the longest wait time that is acceptable.&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&#039;&#039;&#039;bz_eTickEvent&#039;&#039;&#039; returns the &#039;&#039;&#039;bz_TickEventData_V1&#039;&#039;&#039; data class.&lt;br /&gt;
&lt;br /&gt;
  {| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;20&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
  !name&lt;br /&gt;
  !type&lt;br /&gt;
  !value description&lt;br /&gt;
  |-&lt;br /&gt;
  |eventType    &lt;br /&gt;
  |[[Event(API)|bz_eEventType]]&lt;br /&gt;
  |bz_eTickEvent&lt;br /&gt;
  |-&lt;br /&gt;
  |time&lt;br /&gt;
  |double&lt;br /&gt;
  |Local Server time of the event (in seconds)&lt;br /&gt;
  |}&lt;/div&gt;</summary>
		<author><name>Xalendare</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_eTickEvent&amp;diff=5788</id>
		<title>Bz eTickEvent</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_eTickEvent&amp;diff=5788"/>
		<updated>2009-05-05T00:54:30Z</updated>

		<summary type="html">&lt;p&gt;Xalendare: /* Data */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{BZFS_API_Doc}}&lt;br /&gt;
{{BZFS_API_Events}}&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The &#039;&#039;&#039;bz_eTickevent&#039;&#039;&#039; is an API event that is called once for each [[BZFS]] main loop. The wait time between tick calls can vary grealy depending on server load network conditions. Plug-ins that wish to enforce a maximum wait time between ticks should call [[bz_setMaxWaitTime]] with the longest wait time that is acceptable.&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&#039;&#039;&#039;bz_eTickEvent&#039;&#039;&#039; returns the &#039;&#039;&#039;bz_TickEventData_V1&#039;&#039;&#039; data class.&lt;br /&gt;
&lt;br /&gt;
  {| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;20&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
  !name&lt;br /&gt;
  !type&lt;br /&gt;
  !value description&lt;br /&gt;
  |-&lt;br /&gt;
  |eventType    &lt;br /&gt;
  |[[Event(API)|bz_eEventType]]&lt;br /&gt;
  |bz_eTickEvent&lt;br /&gt;
  |-&lt;br /&gt;
  |time&lt;br /&gt;
  |double&lt;br /&gt;
  |Local Server time of the event&lt;br /&gt;
  |}&lt;/div&gt;</summary>
		<author><name>Xalendare</name></author>
	</entry>
</feed>