<?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=Sigonasr2</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=Sigonasr2"/>
	<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/Special:Contributions/Sigonasr2"/>
	<updated>2026-05-19T14:57:19Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=BZFlag_Source&amp;diff=8135</id>
		<title>BZFlag Source</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=BZFlag_Source&amp;diff=8135"/>
		<updated>2011-12-03T11:10:43Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: /* Releases and Distribution */ Change link to point to the source files in general instead of version 1.7c.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The BZFlag source code is predominantly written in C/C++and is used by developers to implement the game client, server, and services.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The source code to [http://www.bzflag.org BZFlag] is released as a collective work under the [http://en.wikipedia.org/wiki/LGPL GNU Lesser General Public License] and is freely available to anyone.&lt;br /&gt;
&lt;br /&gt;
BZFlag is primarily written in the [http://en.wikipedia.org/wiki/C%2B%2B C++] language, but does contain some modules written in [http://en.wikipedia.org/wiki/Perl Perl], [http://en.wikipedia.org/wiki/Php PHP], and [http://en.wikipedia.org/wiki/Python_%28programming_language%29 Python].&lt;br /&gt;
&lt;br /&gt;
Developers use the source code to modify and extend the features of the game. It is also used by a number of players to [[:Category:Compiling|compile]] the software into its playable form.&lt;br /&gt;
&lt;br /&gt;
==Organization==&lt;br /&gt;
The BZFlag source code is organized into a number of projects or sub sections, to try and keep the software somewhat modular.&lt;br /&gt;
&lt;br /&gt;
There are three primary projects that make up the sofware.&lt;br /&gt;
*[[:Category:client|BZFlag]]: The main game client.&lt;br /&gt;
*[[BZFS]] : The game server.&lt;br /&gt;
*[[BZAdmin]] : A command line administration tool for server owners.&lt;br /&gt;
These three projects build the three applications that make up the software.&lt;br /&gt;
&lt;br /&gt;
A number of other smaller projects are used for common code that is shared between the three main projects.&lt;br /&gt;
These are:&lt;br /&gt;
*3D : Utilities for drawing the Three Dimensional view in the client&lt;br /&gt;
*common : Shared general code&lt;br /&gt;
*date : version and build date stamps&lt;br /&gt;
*game : shared game logic&lt;br /&gt;
*geometry : 3D geometry and [http://en.wikipedia.org/wiki/OpenGL OpenGL] code for the Three Dimensional view in the client&lt;br /&gt;
*mediafile : external file loaders for images and sounds&lt;br /&gt;
*net : networking code&lt;br /&gt;
*obstacle : collision detection&lt;br /&gt;
*ogl : common [http://en.wikipedia.org/wiki/OpenGL OpenGL] utilities&lt;br /&gt;
*platform : OS specific implementations of low level features ( input, window management, etc.. )&lt;br /&gt;
*scene :  render culling and scene management&lt;br /&gt;
&lt;br /&gt;
BZFlag also includes it&#039;s own copies of a few third party libs. These include:&lt;br /&gt;
*c-ares : an asynchronous DNS resolver&lt;br /&gt;
*regex : a text parsing library&lt;br /&gt;
*zlib : a compression library.&lt;br /&gt;
&lt;br /&gt;
==Releases and Distribution==&lt;br /&gt;
The source code is available in a number of ways.&lt;br /&gt;
&lt;br /&gt;
The simplest way is to download one of the source code archives that is released with each major release of the software. These are available at the [http://sourceforge.net/projects/bzflag/files/bzflag%20source/ BZFlag SourceForge Downloads Page]. There is an archive of the source code used to build every version of the game. The source archives are provided in Unix line ending format ( .tar.gz and .tar.bz ) as well as Windows line ending format ( .zip ). The archives contain instructions on how to compile the software directly. Additional software such as a C++ compiler will be needed.&lt;br /&gt;
&lt;br /&gt;
The source code for BZFlag is always changing and being developed. The developers keep the current code for the project in a SVN repository located at SourceForge. Please see the [[BZFlag SVN]] page for information on how to access the SVN system.&lt;br /&gt;
&lt;br /&gt;
==License==&lt;br /&gt;
The BZFlag source code is licensed under the [http://en.wikipedia.org/wiki/LGPL GNU Lesser General Public License] or LGPL license. This means that anyone is free to use and redistribute the software and it&#039;s source code, as long as they follow the license. In order to release a version of the software, or a modified version of the software, a user must also release the source code to the software, as well as any changes they have made to the LGPL source code. This is so that others may benefit from the modifications as well.&lt;br /&gt;
&lt;br /&gt;
==Patches==&lt;br /&gt;
A number of users have submitted changes to the source code as [http://en.wikipedia.org/wiki/Patch_%28computing%29 patches]. These patches are source code modifications that can ether fix a bug or add a feature. The development team will periodically review all patches submitted to the [http://sourceforge.net/tracker/?group_id=3248&amp;amp;atid=303248 SourceForge Patch Tracker] and apply desired patches to the mainline source code.&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
The BZFlag source code has been open source and hosted by SourceForge since March 2000. Before this the source code was the proprietary property of [[Chris Schoeneman]] who began developing the game in 1992 at the Cornell Program of Computer Graphics for the SGI line of graphic workstations.&lt;br /&gt;
&lt;br /&gt;
BZFlag is in no way related to the commercial game [http://en.wikipedia.org/wiki/Battlezone &amp;quot;BATTLEZONE&amp;quot;] by [http://en.wikipedia.org/wiki/Atari Atari, Inc], it was simply inspired by it. They do not share any code or intellectual property.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[[BZFlag SVN]]&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
[http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License]&lt;br /&gt;
&lt;br /&gt;
[http://bzflag.svn.sourceforge.net/viewvc/bzflag/ BZFlag Source Code Subversion Repository]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Compiling]]&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Zone&amp;diff=8132</id>
		<title>Zone</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Zone&amp;diff=8132"/>
		<updated>2011-11-29T19:04:47Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Fix what seems to be a legacy parameters tag.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A Zone is a rectangular [[BZW]] map structure for spawn or flag zones. The zone lets you create a specific area for a certain flag or a certain team to spawn.&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
The code for a zone is as follows:&lt;br /&gt;
 zone &lt;br /&gt;
 name example_zone&lt;br /&gt;
    position 0.0 0.0 0.0&lt;br /&gt;
    size 1.0 1.0 1.0&lt;br /&gt;
    rotation 0.0&lt;br /&gt;
    # Add two GM, one OO&lt;br /&gt;
    zoneflag GM 2&lt;br /&gt;
    zoneflag OO&lt;br /&gt;
    # cause laser, shockwave&lt;br /&gt;
    # good and bad flags to spawn in the zone&lt;br /&gt;
    flag L&lt;br /&gt;
    flag SW&lt;br /&gt;
    flag good&lt;br /&gt;
    flag bad&lt;br /&gt;
    team 0 1 2 3 4&lt;br /&gt;
    safety 1 2 3 4&lt;br /&gt;
 end&lt;br /&gt;
Valid parameters for the zone are:&lt;br /&gt;
* &#039;&#039;&#039;position&#039;&#039;&#039; Defines the position of the zone in the word (x/y/z)&lt;br /&gt;
* &#039;&#039;&#039;size&#039;&#039;&#039; Defines the size of the zone (rectangular prism)&lt;br /&gt;
* &#039;&#039;&#039;rotation&#039;&#039;&#039; Defines a rotation around the Z axis for the box, in degrees.&lt;br /&gt;
* &#039;&#039;&#039;zoneflag&#039;&#039;&#039; Generates the flag listed inside this zone (adding &amp;quot;flag n&amp;quot; for the quantity). The flag will be generated specifically for the zone, regardless of BZFS options. One flag per call. Remember to use the -fb option in the option object.&lt;br /&gt;
* &#039;&#039;&#039;flag&#039;&#039;&#039; Listed flag will spawn in the zone. The flags must be be specified for the server via BZFS options. One flag per call.&lt;br /&gt;
* &#039;&#039;&#039;team&#039;&#039;&#039; Team players will spawn (0 - Rogue, 1 - Red, 2 - Green, 3 - Blue, 4  - Purple).&lt;br /&gt;
* &#039;&#039;&#039;safety&#039;&#039;&#039; Team flags listed here will fly to the closest safety zone when dropped (1 - Red, 2 - Green, 3 - Blue, 4 - Purple).&lt;br /&gt;
&lt;br /&gt;
==Function==&lt;br /&gt;
Zones are used to define spawn positions in within the XY volume of the Zone. The Z value for the spawn position will be the lower bounds of the volume in Z. Normal spawn rules still apply for spawns generated by zones and may disqualify a spawn from happening in a zone (Z clearance, shots, players, etc..). When multiple zones of the same type are defined, a random one is used for each spawn, if possible.&lt;br /&gt;
&lt;br /&gt;
==Appearance==&lt;br /&gt;
Zones have no appearance in a map other than what they define (ex: flags or tank spawns).&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
Zones were added to BZFlag in version 2.0.0.&lt;br /&gt;
&lt;br /&gt;
==Editor Support==&lt;br /&gt;
The zone object is not supported by any known editors.&lt;br /&gt;
==Notes==&lt;br /&gt;
Working with flag zones make sure you have enough clearance for flags, default flag height is 10 world units. A dropped flag will stay in a short tunnel if _flagHeight is less than 1.&lt;br /&gt;
&lt;br /&gt;
If the zone is not on the ground, be sure to set -fb or -sb, or your spawns will always be on the ground.&lt;br /&gt;
[[Category:Map Making]]&lt;br /&gt;
[[Category:Map_Objects]]&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_moveFlag&amp;diff=8126</id>
		<title>Bz moveFlag</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_moveFlag&amp;diff=8126"/>
		<updated>2011-11-18T20:37:18Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Removed reset argument from bz_moveFlag()&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{BZFS_API_Doc}}&lt;br /&gt;
{{BZFS_API_Funcs}}&lt;br /&gt;
==Prototype==&lt;br /&gt;
BZF_API bool bz_moveFlag( int flag, float pos[3] );&lt;br /&gt;
==Parameters==&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;
  |flag&lt;br /&gt;
  |int &lt;br /&gt;
  |the flag to move&lt;br /&gt;
  |-&lt;br /&gt;
  |pos&lt;br /&gt;
  |float [3]&lt;br /&gt;
  |the position to move the flag to.&lt;br /&gt;
  |}&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
This API function moves the specified flag. If the flag is carried, it will be drooped. If reset is true, the flag is also &amp;quot;zapped&amp;quot; to the new location ( ring graphical effect). &lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
Prior to BZFlag Version 3.0 this function did not have the &#039;&#039;&#039;reset&#039;&#039;&#039; paramater, and always behaved as if it was true.&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8125</id>
		<title>Functions (API)</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8125"/>
		<updated>2011-11-18T20:36:26Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: /* Flag Management */ Removed reset argument from bz_moveFlag()&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DoDoc|&lt;br /&gt;
Fill in articles for all API Functions&amp;lt;br&amp;gt;&lt;br /&gt;
Finish updating to 2.3.x&amp;lt;br&amp;gt;&lt;br /&gt;
Verify future API functions.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{BZFS_API_Doc}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&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;
== Function Groups ==&lt;br /&gt;
Functions are broken into a series of groups based on the type of action or information they deal with.&lt;br /&gt;
&lt;br /&gt;
=== Event Registration ===&lt;br /&gt;
2.0.x&lt;br /&gt;
 BZF_API bool [[bz_registerEvent]] ( [[Event(API)|bz_eEventType]] eventType, [[Event(API)|bz_EventHandler]]* eventHandler );&lt;br /&gt;
 BZF_API bool [[bz_removeEvent]] ( [[Event(API)|bz_eEventType]] eventType, [[Event(API)|bz_EventHandler]]* eventHandler );&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[Register]] ( [[Event(API)|bz_eEventType]] eventType );&lt;br /&gt;
 virtual void Cleanup() {Flush();}&lt;br /&gt;
&lt;br /&gt;
=== Non-Player Connections ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_registerNonPlayerConnectionHandler]] ( int connectionID, [[bz_NonPlayerConnectionHandler]]* handler );&lt;br /&gt;
 BZF_API bool [[bz_removeNonPlayerConnectionHandler]] ( int connectionID, [[bz_NonPlayerConnectionHandler]]* handler );&lt;br /&gt;
 BZF_API bool [[bz_sendNonPlayerData]] ( int connectionID, const void *data, unsigned int size );&lt;br /&gt;
 BZF_API bool [[bz_disconectNonPlayerConnection]] ( int connectionID );&lt;br /&gt;
 BZF_API unsigned int [[bz_getNonPlayerConnectionOutboundPacketCount]] ( int connectionID );&lt;br /&gt;
 BZF_API const char* [[bz_getNonPlayerConnectionIP]] ( int connectionID );&lt;br /&gt;
 BZF_API const char* [[bz_getNonPlayerConnectionHost]] ( int connectionID );&lt;br /&gt;
&lt;br /&gt;
=== Player Information ===&lt;br /&gt;
==== Player Information ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_hasPerm]] ( int playerID, const char* perm );&lt;br /&gt;
 BZF_API bool [[bz_getAdmin]] ( int playerID );&lt;br /&gt;
 BZF_API bz_eTeamType [[bz_getPlayerTeam]] ( int playerID );&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerCallsign]] ( int playerID );&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerIPAddress]] ( int playerID );&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerFlag]] ( int playerID );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerReferrer]] ( int playerID );&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerCustomData]] (int playerID, const char* key );&lt;br /&gt;
&lt;br /&gt;
==== Player State Information ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_isPlayerPaused]] ( int playerID );&lt;br /&gt;
 BZF_API bool [[bz_canPlayerSpawn]]( int playerID );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerCurrentState]] ( int playerID, bz_PlayerUpdateState &amp;amp;state );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_getPlayerPosition]] ( int playerID, float pos[3], bool extrapolate );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerRotation]] ( int playerID, float *rot, bool extrapolate );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerVelocity]] ( int playerID, float vel[3] );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerAngVel]] ( int playerID, float *angvel );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerPhysicsDriver]] ( int playerID, int* phydrv );&lt;br /&gt;
&lt;br /&gt;
==== Player Lists and Records ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByIndex]] ( int index );&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByCallsign]] ( const char* name );&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByBZID]] ( int BZID );&lt;br /&gt;
 BZF_API bool [[bz_updatePlayerData]] ( [[bz_BasePlayerRecord]] *playerRecord );&lt;br /&gt;
 BZF_API bool [[bz_freePlayerRecord]] ( [[bz_BasePlayerRecord]] *playerRecord );&lt;br /&gt;
&lt;br /&gt;
 BZF_API [[bz_APIIntList]] *[[bz_newIntList]] ( void );&lt;br /&gt;
 BZF_API [[bz_APIIntList]] *[[bz_getPlayerIndexList]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerIndexList]] ( [[bz_APIIntList]] *playerList );&lt;br /&gt;
 BZF_API void [[bz_deleteIntList]] ( [[bz_APIIntList]] *l);&lt;br /&gt;
&lt;br /&gt;
==== Player Management ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_grantPerm]] ( int playerID, const char* perm );&lt;br /&gt;
 BZF_API bool [[bz_revokePerm]] ( int playerID, const char* perm );&lt;br /&gt;
 BZF_API bool [[bz_validAdminPassword]] ( const char* passwd );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerOperator]] ( int playerId );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_setPlayerSpawnable]]( int playerID, bool spawn );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerLimboMessage]]( int playerID, const char* text );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerCustomData]] (int playerID, const char* key, const char* data );&lt;br /&gt;
&lt;br /&gt;
=== Team Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API unsigned int [[bz_getTeamPlayerLimit]] ( bz_eTeamType team );&lt;br /&gt;
 BZF_API int [[bz_getTeamCount]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API int [[bz_getTeamScore]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API int [[bz_getTeamWins]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API int [[bz_getTeamLosses]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API void [[bz_setTeamWins]] ([[bz_eTeamType]] team, int wins );&lt;br /&gt;
 BZF_API void [[bz_setTeamLosses]] ([[bz_eTeamType]] team, int losses );&lt;br /&gt;
 BZF_API void [[bz_resetTeamScore]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API void [[bz_resetTeamScores]] ( void );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API void [[bz_changeTeam]]( int player, [[bz_eTeamType]] team );&lt;br /&gt;
&lt;br /&gt;
=== Score Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_setPlayerWins]] ( int playerId, int wins );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerLosses]] ( int playerId, int losses );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerTKs]] ( int playerId, int tks );&lt;br /&gt;
 BZF_API bool [[bz_resetPlayerScore]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPlayerWins]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPlayerLosses]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPlayerTKs]] ( int playerId );&lt;br /&gt;
 BZF_API float [[bz_getPlayerRank]] ( int playerId );&lt;br /&gt;
&lt;br /&gt;
=== Latency Information ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API int [[bz_getPlayerLag]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPlayerJitter]] ( int playerId );&lt;br /&gt;
 BZF_API float [[bz_getPlayerPacketloss]] ( int playerId );&lt;br /&gt;
&lt;br /&gt;
=== Permission Group Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API [[bz_APIStringList]]* [[bz_getGroupList]] ( void );&lt;br /&gt;
 BZF_API [[bz_APIStringList]]* [[bz_getGroupPerms]] ( const char* group );&lt;br /&gt;
 BZF_API bool [[bz_groupAllowPerm]] ( const char* group, const char* perm );&lt;br /&gt;
&lt;br /&gt;
=== Chat Messages ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_sendTextMessage]] (int from, int to, const char* message);&lt;br /&gt;
 BZF_API bool [[bz_sendTextMessage]] (int from, [[bz_eTeamType]] to, const char* message);&lt;br /&gt;
 BZF_API bool [[bz_sendTextMessagef]] (int from, int to, const char* fmt, ...);&lt;br /&gt;
 BZF_API bool [[bz_sendTextMessagef]] (int from, [[bz_eTeamType]] to, const char* fmt, ...);&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_sendFetchResMessage]] ( int playerID,  const char* URL );&lt;br /&gt;
 BZF_API bool [[bz_sendJoinServer]] ( int playerID, const char* address, int port, int team, const char* referrer, const char* message );&lt;br /&gt;
 BZF_API bool [[bz_sendLuaData]] ( int dstPlayerID, int dstScriptID, int statusBits, const char* data, int len,&lt;br /&gt;
                               int srcPlayerID = 0, int srcScriptID = 0 );&lt;br /&gt;
&lt;br /&gt;
=== Server Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_restart]] ( void );&lt;br /&gt;
 BZF_API void [[bz_shutdown]] ();&lt;br /&gt;
 BZF_API void [[bz_superkill]] ();&lt;br /&gt;
 BZF_API void [[bz_gameOver]] ( int playerID, bz_eTeamType = eNoTeam );&lt;br /&gt;
 BZF_API void [[bz_reloadLocalBans]] ();&lt;br /&gt;
 BZF_API void [[bz_reloadMasterBans]] ();&lt;br /&gt;
 BZF_API void [[bz_reloadGroups]] ();&lt;br /&gt;
 BZF_API void [[bz_reloadUsers]] ();&lt;br /&gt;
 BZF_API void [[bz_reloadHelp]] ();&lt;br /&gt;
?&lt;br /&gt;
 BZF_API int [[bz_getPlayerCount]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_anyPlayers]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Rabbit Hunt ===&lt;br /&gt;
?&lt;br /&gt;
 BZF_API void [[bz_newRabbit]] ( int player, bool swap );&lt;br /&gt;
 BZF_API void [[bz_removeRabbit]] ( int player );&lt;br /&gt;
&lt;br /&gt;
=== Map Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API void [[bz_setClientWorldDownloadURL]] ( const char* URL );&lt;br /&gt;
 BZF_API const [[bzApiString]] [[bz_getClientWorldDownloadURL]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_saveWorldCacheFile]] ( const char* file );&lt;br /&gt;
&lt;br /&gt;
=== Flag Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_givePlayerFlag]] ( int playerID, const char* flagType, bool force );&lt;br /&gt;
 BZF_API bool [[bz_removePlayerFlag]] ( int playerID );&lt;br /&gt;
 BZF_API void [[bz_resetFlags]] ( bool onlyUnused );&lt;br /&gt;
 BZF_API unsigned int [[bz_getNumFlags]] ( void );&lt;br /&gt;
 BZF_API const [[bz_ApiString]] [[bz_getFlagName|bz_getName]] ( int flag );&lt;br /&gt;
 BZF_API bool [[bz_resetFlag]] ( int flag );&lt;br /&gt;
 BZF_API int [[bz_flagPlayer]] ( int flag );&lt;br /&gt;
 BZF_API bool [[bz_getFlagPosition]] ( int flag, float* pos );&lt;br /&gt;
 BZF_API bool [[bz_moveFlag]] ( int flag, float pos[3] );&lt;br /&gt;
 BZF_API bool [[bz_RegisterCustomFlag]] ( const char* abbr, const char* name, const char* helpString, bz_eShotType shotType, bz_eFlagQuality quality );&lt;br /&gt;
&lt;br /&gt;
=== Shot Type Control ===&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_setPlayerShotType]] ( int playerId, [[bz_eShotType]] shotType );&lt;br /&gt;
&lt;br /&gt;
=== World Weapon Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_fireWorldWep]] ( const char* flagType, float lifetime, int fromPlayer, float *pos, float tilt, float direction, int shotID , float dt );&lt;br /&gt;
 BZF_API int [[bz_fireWorldGM]] ( int targetPlayerID, float lifetime, float *pos, float tilt, float direction, float dt );&lt;br /&gt;
&lt;br /&gt;
=== Server Time ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API double [[bz_getCurrentTime]] ( void );&lt;br /&gt;
 BZF_API void [[bz_getLocaltime]] ( [[bz_Time]] *ts );&lt;br /&gt;
 BZF_API void [[bz_getUTCtime]] ( [[bz_Time]] *ts );&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
 BZF_API float [[bz_getMaxWaitTime]] ( void );&lt;br /&gt;
 BZF_API void [[bz_setMaxWaitTime]] ( float maxTime );&lt;br /&gt;
&lt;br /&gt;
=== Global Database Management (BZDB) ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API double [[bz_getBZDBDouble]] ( const char* variable );&lt;br /&gt;
 BZF_API [[bz_ApiString]] [[bz_getBZDBString]] ( const char* variable );&lt;br /&gt;
 BZF_API bool [[bz_getBZDBBool]] ( const char* variable );&lt;br /&gt;
 BZF_API int [[bz_getBZDBInt]] ( const char* variable );&lt;br /&gt;
 BZF_API int [[bz_getBZDBItemPerms]] ( const char* variable );&lt;br /&gt;
 BZF_API bool [[bz_getBZDBItemPesistent]] ( const char* variable );&lt;br /&gt;
 BZF_API bool [[bz_BZDBItemExists]] ( const char* variable );&lt;br /&gt;
 BZF_API bool [[bz_setBZDBDouble]] ( const char* variable, double val, int perms = 0, bool persistent = false );&lt;br /&gt;
 BZF_API bool [[bz_setBZDBString]] ( const char* variable, const char *val, int perms = 0, bool persistent = false  );&lt;br /&gt;
 BZF_API bool [[bz_setBZDBBool]] ( const char* variable, bool val, int perms = 0, bool persistent = false  );&lt;br /&gt;
 BZF_API bool [[bz_setBZDBInt]] ( const char* variable, int val, int perms = 0, bool persistent = false  );&lt;br /&gt;
 BZF_API int [[bz_getBZDBVarList]] ( bz_APIStringList	*varList );&lt;br /&gt;
 BZF_API void [[bz_resetBZDBVar]] ( const char* variable );&lt;br /&gt;
 BZF_API void [[bz_resetALLBZDBVars]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API void [[bz_debugMessage]] ( int level, const char* message );&lt;br /&gt;
 BZF_API void [[bz_debugMessagef]] ( int level, const char* fmt, ... )&lt;br /&gt;
 BZF_API int [[bz_getDebugLevel]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Server Administration ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_kickUser]] ( int playerIndex, const char* reason, bool notify );&lt;br /&gt;
 BZF_API bool [[bz_IPBanUser]] ( int bannedByIndex, const char* ip, int duration, const char* reason );&lt;br /&gt;
 BZF_API bool [[bz_HostBanUser]] ( int bannedByIndex, const char* hostmask, int duration, const char* reason );&lt;br /&gt;
 BZF_API bool [[bz_IPUnbanUser]] ( const char* ip );&lt;br /&gt;
 BZF_API bool [[bz_IDUnbanUser]] ( const char* bzID );&lt;br /&gt;
 BZF_API bool [[bz_HostUnbanUser]] ( const char* hostmask );&lt;br /&gt;
 &lt;br /&gt;
 BZF_API int [[bz_getLagWarn]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_setLagWarn]] ( int lagwarn );&lt;br /&gt;
 BZF_API bool [[bz_pollActive]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_pollVeto]] ( void );&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_IDBanUser]] ( int bannedByIndex, const char* bzID , int duration, const char *reason );&lt;br /&gt;
&lt;br /&gt;
=== Reporting ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API [[bz_APIStringList]]* [[bz_getReports]] ( void );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API unsigned int [[bz_getReportCount]] ( void );&lt;br /&gt;
 BZF_API const char* [[bz_getReportSource]] ( unsigned int id );&lt;br /&gt;
 BZF_API const char* [[bz_getReportBody]] ( unsigned int id );&lt;br /&gt;
 BZF_API const char* [[bz_getReportTime]] ( unsigned int id );&lt;br /&gt;
 BZF_API bool [[bz_clearReport]] ( unsigned int id );&lt;br /&gt;
 BZF_API bool [[bz_clearAllReports]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_fileReport]] ( const char* message, const char* from );&lt;br /&gt;
&lt;br /&gt;
=== Timed Game Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_setTimeLimit]] ( float timeLimit );&lt;br /&gt;
 BZF_API float [[bz_getTimeLimit]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_isTimeManualStart]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_isCountDownActive]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_isCountDownInProgress]] ( void );&lt;br /&gt;
 BZF_API void [[bz_pauseCountdown]] ( const char *pausedBy );&lt;br /&gt;
 BZF_API void [[bz_resumeCountdown]] ( const char *resumedBy );&lt;br /&gt;
 BZF_API void [[bz_startCountdown]] ( int delay, float limit, const char *byWho );&lt;br /&gt;
&lt;br /&gt;
=== Custom Text Commands ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_registerCustomSlashCommand]] ( const char* command, [[bz_CustomSlashCommandHandler]] *handler );&lt;br /&gt;
 BZF_API bool [[bz_removeCustomSlashCommand]] ( const char* command );&lt;br /&gt;
&lt;br /&gt;
=== Plug-in Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API int [[bz_getLoadedPlugins]] ( [[bz_APIStringList]] * list );&lt;br /&gt;
 BZF_API bool [[bz_loadPlugin]] ( const char* path, const char* params );&lt;br /&gt;
 BZF_API bool [[bz_unloadPlugin]] ( const char* path );&lt;br /&gt;
 BZF_API const char* [[bz_pluginBinPath]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_registerCustomPluginHandler]] ( const char* extension, [[bz_APIPluginHandler]] * handler );&lt;br /&gt;
 BZF_API bool [[bz_removeCustomPluginHandler]] ( const char* extension, [[bz_APIPluginHandler]] * handler );&lt;br /&gt;
&lt;br /&gt;
=== Public Server Information ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_getPublic]] ( void );&lt;br /&gt;
 BZF_API [[bz_ApiString]] [[bz_getPublicAddr]] ( void );&lt;br /&gt;
 BZF_API [[bz_ApiString]] [[bz_getPublicDescription]] ( void );&lt;br /&gt;
 BZF_API int [[bz_getPublicPort]] ( void );&lt;br /&gt;
 BZF_API void [[bz_updateListServer]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== HTTP Transfer ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_addURLJob]] ( const char* URL, [[bz_BaseURLHandler]]* handler = NULL, const char* postData = NULL );&lt;br /&gt;
 BZF_API bool [[bz_removeURLJob]] ( const char* URL );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_stopAllURLJobs]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Callback Functions ===&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_registerCallBack]] ( const char* name, [[bz_GenericCallback]] *callback );&lt;br /&gt;
 BZF_API bool [[bz_registerCallBack]] ( const char* name, [[bz_GenericCallbackFunc]] callback );&lt;br /&gt;
 BZF_API bool [[bz_removeCallBack]] ( const char* name, [[bz_GenericCallback]] *callback );&lt;br /&gt;
 BZF_API bool [[bz_removeCallBack]] ( const char* name, [[bz_GenericCallbackFunc]] callback );&lt;br /&gt;
 BZF_API bool [[bz_callCallback]] ( const char* name, void *param );&lt;br /&gt;
 BZF_API bool [[bz_callbackExists]] ( const char* name );&lt;br /&gt;
&lt;br /&gt;
=== Inter-Plug-in Communications ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_clipFieldExists]] ( const char *name );&lt;br /&gt;
 BZF_API const char* [[bz_getclipFieldString]] ( const char *name );&lt;br /&gt;
 BZF_API float [[bz_getclipFieldFloat]] ( const char *name );&lt;br /&gt;
 BZF_API int [[bz_getclipFieldInt]] ( const char *name );&lt;br /&gt;
 BZF_API bool [[bz_setclipFieldString]] ( const char *name, const char* data );&lt;br /&gt;
 BZF_API bool [[bz_setclipFieldFloat]] ( const char *name, float data );&lt;br /&gt;
 BZF_API bool [[bz_setclipFieldInt]] ( const char *name, int data );&lt;br /&gt;
 BZF_API bool [[bz_addClipFieldNotifier]] ( const char *name, [[bz_ClipFiledNotifier *cb );&lt;br /&gt;
 BZF_API bool [[bz_removeClipFieldNotifier]] ( const char *name, [[bz_ClipFiledNotifier *cb );&lt;br /&gt;
&lt;br /&gt;
=== Game Recording ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_saveRecBuf]] ( const char * _filename, int seconds);&lt;br /&gt;
 BZF_API bool [[bz_startRecBuf]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_stopRecBuf]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Map Management ===&lt;br /&gt;
==== Map Information ====&lt;br /&gt;
?&lt;br /&gt;
 BZF_API void [[bz_getWorldSize]] ( float *size, float *wallHeight );&lt;br /&gt;
 BZF_API unsigned int [[bz_getWorldObjectCount]] ( void );&lt;br /&gt;
 BZF_API [[bz_APIWorldObjectList]]* [[bz_getWorldObjectList]] ( void );&lt;br /&gt;
 BZF_API void [[bz_releaseWorldObjectList]] ( [[bz_APIWorldObjectList]] *list );&lt;br /&gt;
 BZF_API unsigned int [[bz_findWorldObject]] ( const char *name );&lt;br /&gt;
 BZF_API [[bz_APIBaseWorldObject]]* [[bz_getWorldObjectByID]] ( unsigned int id );&lt;br /&gt;
 BZF_API bool [[bz_getTeleLinkIDs]] ( const char* teleName, int* frontLink, int* backLink );&lt;br /&gt;
 BZF_API const char* [[bz_getLinkTeleName]] ( int linkIndex );&lt;br /&gt;
 BZF_API int [[bz_getPhyDrvID]] ( const char* phyDrvName );&lt;br /&gt;
 BZF_API const char* [[bz_getPhyDrvName]] ( unsigned int phyDrvID );&lt;br /&gt;
 BZF_API bool [[bz_SetWorldObjectTangibility]] ( int id, const [[bz_SolidObjectPassableAtributes]] &amp;amp;atribs );&lt;br /&gt;
 BZF_API bool [[bz_GetWorldObjectTangibility]] ( int id, [[bz_SolidObjectPassableAtributes]] &amp;amp;atribs );&lt;br /&gt;
 BZF_API void [[bz_ResetWorldObjectTangibilities]] ( void );&lt;br /&gt;
&lt;br /&gt;
==== Map Collisions ====&lt;br /&gt;
?&lt;br /&gt;
 [[bz_eAPIColType]] [[bz_cylinderInMapObject]] ( float pos[3], float height, float radius, [[bz_APIBaseWorldObject]] **object );&lt;br /&gt;
 [[bz_eAPIColType]] [[bz_boxInMapObject]] ( float pos[3], float size[3], float angle, [[bz_APIBaseWorldObject]] **object );&lt;br /&gt;
&lt;br /&gt;
==== Custom Map Objects ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_registerCustomMapObject]] ( const char* object, [[bz_CustomMapObjectHandler]] *handler );&lt;br /&gt;
 BZF_API bool [[bz_removeCustomMapObject]] ( const char* object );&lt;br /&gt;
&lt;br /&gt;
=== Utility ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API const char *[[bz_MD5]] ( const char* str );&lt;br /&gt;
 BZF_API const char *[[bz_MD5]] ( const void* data, size_t size );&lt;br /&gt;
 BZF_API const char *[[bz_getServerVersion]] ( void );&lt;br /&gt;
 BZF_API const char *[[bz_getProtocolVersion]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Misc ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_getStandardSpawn]] ( int playerID, float pos[3], float *rot );&lt;br /&gt;
 BZF_API bool [[bz_killPlayer]] ( int playerID, bool spawnOnBase, int killerID = -1, const char* flagID = NULL );&lt;br /&gt;
 BZF_API bool [[bz_sendPlayCustomLocalSound]] ( int playerID, const char* soundName );&lt;br /&gt;
 BZF_API [[bz_ApiString]] [[bz_filterPath]] ( const char* path );&lt;br /&gt;
 BZF_API const char *[[bz_format]](const char* fmt, ...)_ATTRIBUTE12;&lt;br /&gt;
 BZF_API const char *[[bz_toupper]](const char* val );&lt;br /&gt;
 BZF_API const char *[[bz_tolower]](const char* val );&lt;br /&gt;
 BZF_API const char *[[bz_urlEncode]](const char* val );&lt;br /&gt;
 BZF_API [[bz_eGameType]] [[bz_getGameType]]( void );&lt;br /&gt;
 BZF_API [[bz_eTeamType]] [[bz_checkBaseAtPoint]] ( float pos[3] );&lt;br /&gt;
 BZF_API int [[bz_APIVersion]] ( void );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_allowJumping]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Server Side Players (Development) ===&lt;br /&gt;
? (In API for 2.3+, but will crash a server)&lt;br /&gt;
 BZF_API int [[bz_addServerSidePlayer]] ( [[bz_ServerSidePlayerHandler]] *handler );&lt;br /&gt;
 BZF_API bool [[bz_removeServerSidePlayer]] ( int playerID, [[bz_ServerSidePlayerHandler]] *handler );&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_Functions]]&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8124</id>
		<title>Functions (API)</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8124"/>
		<updated>2011-11-18T13:55:24Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: /* Flag Management */ As of 2.4.0, it seems the name &amp;quot;reverted&amp;quot; to bz_getName() at some point. We&amp;#039;ll stick with that for now.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DoDoc|&lt;br /&gt;
Fill in articles for all API Functions&amp;lt;br&amp;gt;&lt;br /&gt;
Finish updating to 2.3.x&amp;lt;br&amp;gt;&lt;br /&gt;
Verify future API functions.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{BZFS_API_Doc}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&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;
== Function Groups ==&lt;br /&gt;
Functions are broken into a series of groups based on the type of action or information they deal with.&lt;br /&gt;
&lt;br /&gt;
=== Event Registration ===&lt;br /&gt;
2.0.x&lt;br /&gt;
 BZF_API bool [[bz_registerEvent]] ( [[Event(API)|bz_eEventType]] eventType, [[Event(API)|bz_EventHandler]]* eventHandler );&lt;br /&gt;
 BZF_API bool [[bz_removeEvent]] ( [[Event(API)|bz_eEventType]] eventType, [[Event(API)|bz_EventHandler]]* eventHandler );&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[Register]] ( [[Event(API)|bz_eEventType]] eventType );&lt;br /&gt;
 virtual void Cleanup() {Flush();}&lt;br /&gt;
&lt;br /&gt;
=== Non-Player Connections ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_registerNonPlayerConnectionHandler]] ( int connectionID, [[bz_NonPlayerConnectionHandler]]* handler );&lt;br /&gt;
 BZF_API bool [[bz_removeNonPlayerConnectionHandler]] ( int connectionID, [[bz_NonPlayerConnectionHandler]]* handler );&lt;br /&gt;
 BZF_API bool [[bz_sendNonPlayerData]] ( int connectionID, const void *data, unsigned int size );&lt;br /&gt;
 BZF_API bool [[bz_disconectNonPlayerConnection]] ( int connectionID );&lt;br /&gt;
 BZF_API unsigned int [[bz_getNonPlayerConnectionOutboundPacketCount]] ( int connectionID );&lt;br /&gt;
 BZF_API const char* [[bz_getNonPlayerConnectionIP]] ( int connectionID );&lt;br /&gt;
 BZF_API const char* [[bz_getNonPlayerConnectionHost]] ( int connectionID );&lt;br /&gt;
&lt;br /&gt;
=== Player Information ===&lt;br /&gt;
==== Player Information ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_hasPerm]] ( int playerID, const char* perm );&lt;br /&gt;
 BZF_API bool [[bz_getAdmin]] ( int playerID );&lt;br /&gt;
 BZF_API bz_eTeamType [[bz_getPlayerTeam]] ( int playerID );&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerCallsign]] ( int playerID );&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerIPAddress]] ( int playerID );&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerFlag]] ( int playerID );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerReferrer]] ( int playerID );&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerCustomData]] (int playerID, const char* key );&lt;br /&gt;
&lt;br /&gt;
==== Player State Information ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_isPlayerPaused]] ( int playerID );&lt;br /&gt;
 BZF_API bool [[bz_canPlayerSpawn]]( int playerID );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerCurrentState]] ( int playerID, bz_PlayerUpdateState &amp;amp;state );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_getPlayerPosition]] ( int playerID, float pos[3], bool extrapolate );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerRotation]] ( int playerID, float *rot, bool extrapolate );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerVelocity]] ( int playerID, float vel[3] );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerAngVel]] ( int playerID, float *angvel );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerPhysicsDriver]] ( int playerID, int* phydrv );&lt;br /&gt;
&lt;br /&gt;
==== Player Lists and Records ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByIndex]] ( int index );&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByCallsign]] ( const char* name );&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByBZID]] ( int BZID );&lt;br /&gt;
 BZF_API bool [[bz_updatePlayerData]] ( [[bz_BasePlayerRecord]] *playerRecord );&lt;br /&gt;
 BZF_API bool [[bz_freePlayerRecord]] ( [[bz_BasePlayerRecord]] *playerRecord );&lt;br /&gt;
&lt;br /&gt;
 BZF_API [[bz_APIIntList]] *[[bz_newIntList]] ( void );&lt;br /&gt;
 BZF_API [[bz_APIIntList]] *[[bz_getPlayerIndexList]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerIndexList]] ( [[bz_APIIntList]] *playerList );&lt;br /&gt;
 BZF_API void [[bz_deleteIntList]] ( [[bz_APIIntList]] *l);&lt;br /&gt;
&lt;br /&gt;
==== Player Management ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_grantPerm]] ( int playerID, const char* perm );&lt;br /&gt;
 BZF_API bool [[bz_revokePerm]] ( int playerID, const char* perm );&lt;br /&gt;
 BZF_API bool [[bz_validAdminPassword]] ( const char* passwd );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerOperator]] ( int playerId );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_setPlayerSpawnable]]( int playerID, bool spawn );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerLimboMessage]]( int playerID, const char* text );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerCustomData]] (int playerID, const char* key, const char* data );&lt;br /&gt;
&lt;br /&gt;
=== Team Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API unsigned int [[bz_getTeamPlayerLimit]] ( bz_eTeamType team );&lt;br /&gt;
 BZF_API int [[bz_getTeamCount]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API int [[bz_getTeamScore]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API int [[bz_getTeamWins]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API int [[bz_getTeamLosses]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API void [[bz_setTeamWins]] ([[bz_eTeamType]] team, int wins );&lt;br /&gt;
 BZF_API void [[bz_setTeamLosses]] ([[bz_eTeamType]] team, int losses );&lt;br /&gt;
 BZF_API void [[bz_resetTeamScore]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API void [[bz_resetTeamScores]] ( void );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API void [[bz_changeTeam]]( int player, [[bz_eTeamType]] team );&lt;br /&gt;
&lt;br /&gt;
=== Score Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_setPlayerWins]] ( int playerId, int wins );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerLosses]] ( int playerId, int losses );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerTKs]] ( int playerId, int tks );&lt;br /&gt;
 BZF_API bool [[bz_resetPlayerScore]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPlayerWins]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPlayerLosses]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPlayerTKs]] ( int playerId );&lt;br /&gt;
 BZF_API float [[bz_getPlayerRank]] ( int playerId );&lt;br /&gt;
&lt;br /&gt;
=== Latency Information ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API int [[bz_getPlayerLag]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPlayerJitter]] ( int playerId );&lt;br /&gt;
 BZF_API float [[bz_getPlayerPacketloss]] ( int playerId );&lt;br /&gt;
&lt;br /&gt;
=== Permission Group Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API [[bz_APIStringList]]* [[bz_getGroupList]] ( void );&lt;br /&gt;
 BZF_API [[bz_APIStringList]]* [[bz_getGroupPerms]] ( const char* group );&lt;br /&gt;
 BZF_API bool [[bz_groupAllowPerm]] ( const char* group, const char* perm );&lt;br /&gt;
&lt;br /&gt;
=== Chat Messages ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_sendTextMessage]] (int from, int to, const char* message);&lt;br /&gt;
 BZF_API bool [[bz_sendTextMessage]] (int from, [[bz_eTeamType]] to, const char* message);&lt;br /&gt;
 BZF_API bool [[bz_sendTextMessagef]] (int from, int to, const char* fmt, ...);&lt;br /&gt;
 BZF_API bool [[bz_sendTextMessagef]] (int from, [[bz_eTeamType]] to, const char* fmt, ...);&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_sendFetchResMessage]] ( int playerID,  const char* URL );&lt;br /&gt;
 BZF_API bool [[bz_sendJoinServer]] ( int playerID, const char* address, int port, int team, const char* referrer, const char* message );&lt;br /&gt;
 BZF_API bool [[bz_sendLuaData]] ( int dstPlayerID, int dstScriptID, int statusBits, const char* data, int len,&lt;br /&gt;
                               int srcPlayerID = 0, int srcScriptID = 0 );&lt;br /&gt;
&lt;br /&gt;
=== Server Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_restart]] ( void );&lt;br /&gt;
 BZF_API void [[bz_shutdown]] ();&lt;br /&gt;
 BZF_API void [[bz_superkill]] ();&lt;br /&gt;
 BZF_API void [[bz_gameOver]] ( int playerID, bz_eTeamType = eNoTeam );&lt;br /&gt;
 BZF_API void [[bz_reloadLocalBans]] ();&lt;br /&gt;
 BZF_API void [[bz_reloadMasterBans]] ();&lt;br /&gt;
 BZF_API void [[bz_reloadGroups]] ();&lt;br /&gt;
 BZF_API void [[bz_reloadUsers]] ();&lt;br /&gt;
 BZF_API void [[bz_reloadHelp]] ();&lt;br /&gt;
?&lt;br /&gt;
 BZF_API int [[bz_getPlayerCount]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_anyPlayers]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Rabbit Hunt ===&lt;br /&gt;
?&lt;br /&gt;
 BZF_API void [[bz_newRabbit]] ( int player, bool swap );&lt;br /&gt;
 BZF_API void [[bz_removeRabbit]] ( int player );&lt;br /&gt;
&lt;br /&gt;
=== Map Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API void [[bz_setClientWorldDownloadURL]] ( const char* URL );&lt;br /&gt;
 BZF_API const [[bzApiString]] [[bz_getClientWorldDownloadURL]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_saveWorldCacheFile]] ( const char* file );&lt;br /&gt;
&lt;br /&gt;
=== Flag Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_givePlayerFlag]] ( int playerID, const char* flagType, bool force );&lt;br /&gt;
 BZF_API bool [[bz_removePlayerFlag]] ( int playerID );&lt;br /&gt;
 BZF_API void [[bz_resetFlags]] ( bool onlyUnused );&lt;br /&gt;
 BZF_API unsigned int [[bz_getNumFlags]] ( void );&lt;br /&gt;
 BZF_API const [[bz_ApiString]] [[bz_getFlagName|bz_getName]] ( int flag );&lt;br /&gt;
 BZF_API bool [[bz_resetFlag]] ( int flag );&lt;br /&gt;
 BZF_API int [[bz_flagPlayer]] ( int flag );&lt;br /&gt;
 BZF_API bool [[bz_getFlagPosition]] ( int flag, float* pos );&lt;br /&gt;
 BZF_API bool [[bz_moveFlag]] ( int flag, float pos[3], bool reset = true );&lt;br /&gt;
 BZF_API bool [[bz_RegisterCustomFlag]] ( const char* abbr, const char* name, const char* helpString, bz_eShotType shotType, bz_eFlagQuality quality );&lt;br /&gt;
&lt;br /&gt;
=== Shot Type Control ===&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_setPlayerShotType]] ( int playerId, [[bz_eShotType]] shotType );&lt;br /&gt;
&lt;br /&gt;
=== World Weapon Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_fireWorldWep]] ( const char* flagType, float lifetime, int fromPlayer, float *pos, float tilt, float direction, int shotID , float dt );&lt;br /&gt;
 BZF_API int [[bz_fireWorldGM]] ( int targetPlayerID, float lifetime, float *pos, float tilt, float direction, float dt );&lt;br /&gt;
&lt;br /&gt;
=== Server Time ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API double [[bz_getCurrentTime]] ( void );&lt;br /&gt;
 BZF_API void [[bz_getLocaltime]] ( [[bz_Time]] *ts );&lt;br /&gt;
 BZF_API void [[bz_getUTCtime]] ( [[bz_Time]] *ts );&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
 BZF_API float [[bz_getMaxWaitTime]] ( void );&lt;br /&gt;
 BZF_API void [[bz_setMaxWaitTime]] ( float maxTime );&lt;br /&gt;
&lt;br /&gt;
=== Global Database Management (BZDB) ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API double [[bz_getBZDBDouble]] ( const char* variable );&lt;br /&gt;
 BZF_API [[bz_ApiString]] [[bz_getBZDBString]] ( const char* variable );&lt;br /&gt;
 BZF_API bool [[bz_getBZDBBool]] ( const char* variable );&lt;br /&gt;
 BZF_API int [[bz_getBZDBInt]] ( const char* variable );&lt;br /&gt;
 BZF_API int [[bz_getBZDBItemPerms]] ( const char* variable );&lt;br /&gt;
 BZF_API bool [[bz_getBZDBItemPesistent]] ( const char* variable );&lt;br /&gt;
 BZF_API bool [[bz_BZDBItemExists]] ( const char* variable );&lt;br /&gt;
 BZF_API bool [[bz_setBZDBDouble]] ( const char* variable, double val, int perms = 0, bool persistent = false );&lt;br /&gt;
 BZF_API bool [[bz_setBZDBString]] ( const char* variable, const char *val, int perms = 0, bool persistent = false  );&lt;br /&gt;
 BZF_API bool [[bz_setBZDBBool]] ( const char* variable, bool val, int perms = 0, bool persistent = false  );&lt;br /&gt;
 BZF_API bool [[bz_setBZDBInt]] ( const char* variable, int val, int perms = 0, bool persistent = false  );&lt;br /&gt;
 BZF_API int [[bz_getBZDBVarList]] ( bz_APIStringList	*varList );&lt;br /&gt;
 BZF_API void [[bz_resetBZDBVar]] ( const char* variable );&lt;br /&gt;
 BZF_API void [[bz_resetALLBZDBVars]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API void [[bz_debugMessage]] ( int level, const char* message );&lt;br /&gt;
 BZF_API void [[bz_debugMessagef]] ( int level, const char* fmt, ... )&lt;br /&gt;
 BZF_API int [[bz_getDebugLevel]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Server Administration ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_kickUser]] ( int playerIndex, const char* reason, bool notify );&lt;br /&gt;
 BZF_API bool [[bz_IPBanUser]] ( int bannedByIndex, const char* ip, int duration, const char* reason );&lt;br /&gt;
 BZF_API bool [[bz_HostBanUser]] ( int bannedByIndex, const char* hostmask, int duration, const char* reason );&lt;br /&gt;
 BZF_API bool [[bz_IPUnbanUser]] ( const char* ip );&lt;br /&gt;
 BZF_API bool [[bz_IDUnbanUser]] ( const char* bzID );&lt;br /&gt;
 BZF_API bool [[bz_HostUnbanUser]] ( const char* hostmask );&lt;br /&gt;
 &lt;br /&gt;
 BZF_API int [[bz_getLagWarn]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_setLagWarn]] ( int lagwarn );&lt;br /&gt;
 BZF_API bool [[bz_pollActive]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_pollVeto]] ( void );&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_IDBanUser]] ( int bannedByIndex, const char* bzID , int duration, const char *reason );&lt;br /&gt;
&lt;br /&gt;
=== Reporting ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API [[bz_APIStringList]]* [[bz_getReports]] ( void );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API unsigned int [[bz_getReportCount]] ( void );&lt;br /&gt;
 BZF_API const char* [[bz_getReportSource]] ( unsigned int id );&lt;br /&gt;
 BZF_API const char* [[bz_getReportBody]] ( unsigned int id );&lt;br /&gt;
 BZF_API const char* [[bz_getReportTime]] ( unsigned int id );&lt;br /&gt;
 BZF_API bool [[bz_clearReport]] ( unsigned int id );&lt;br /&gt;
 BZF_API bool [[bz_clearAllReports]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_fileReport]] ( const char* message, const char* from );&lt;br /&gt;
&lt;br /&gt;
=== Timed Game Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_setTimeLimit]] ( float timeLimit );&lt;br /&gt;
 BZF_API float [[bz_getTimeLimit]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_isTimeManualStart]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_isCountDownActive]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_isCountDownInProgress]] ( void );&lt;br /&gt;
 BZF_API void [[bz_pauseCountdown]] ( const char *pausedBy );&lt;br /&gt;
 BZF_API void [[bz_resumeCountdown]] ( const char *resumedBy );&lt;br /&gt;
 BZF_API void [[bz_startCountdown]] ( int delay, float limit, const char *byWho );&lt;br /&gt;
&lt;br /&gt;
=== Custom Text Commands ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_registerCustomSlashCommand]] ( const char* command, [[bz_CustomSlashCommandHandler]] *handler );&lt;br /&gt;
 BZF_API bool [[bz_removeCustomSlashCommand]] ( const char* command );&lt;br /&gt;
&lt;br /&gt;
=== Plug-in Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API int [[bz_getLoadedPlugins]] ( [[bz_APIStringList]] * list );&lt;br /&gt;
 BZF_API bool [[bz_loadPlugin]] ( const char* path, const char* params );&lt;br /&gt;
 BZF_API bool [[bz_unloadPlugin]] ( const char* path );&lt;br /&gt;
 BZF_API const char* [[bz_pluginBinPath]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_registerCustomPluginHandler]] ( const char* extension, [[bz_APIPluginHandler]] * handler );&lt;br /&gt;
 BZF_API bool [[bz_removeCustomPluginHandler]] ( const char* extension, [[bz_APIPluginHandler]] * handler );&lt;br /&gt;
&lt;br /&gt;
=== Public Server Information ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_getPublic]] ( void );&lt;br /&gt;
 BZF_API [[bz_ApiString]] [[bz_getPublicAddr]] ( void );&lt;br /&gt;
 BZF_API [[bz_ApiString]] [[bz_getPublicDescription]] ( void );&lt;br /&gt;
 BZF_API int [[bz_getPublicPort]] ( void );&lt;br /&gt;
 BZF_API void [[bz_updateListServer]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== HTTP Transfer ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_addURLJob]] ( const char* URL, [[bz_BaseURLHandler]]* handler = NULL, const char* postData = NULL );&lt;br /&gt;
 BZF_API bool [[bz_removeURLJob]] ( const char* URL );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_stopAllURLJobs]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Callback Functions ===&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_registerCallBack]] ( const char* name, [[bz_GenericCallback]] *callback );&lt;br /&gt;
 BZF_API bool [[bz_registerCallBack]] ( const char* name, [[bz_GenericCallbackFunc]] callback );&lt;br /&gt;
 BZF_API bool [[bz_removeCallBack]] ( const char* name, [[bz_GenericCallback]] *callback );&lt;br /&gt;
 BZF_API bool [[bz_removeCallBack]] ( const char* name, [[bz_GenericCallbackFunc]] callback );&lt;br /&gt;
 BZF_API bool [[bz_callCallback]] ( const char* name, void *param );&lt;br /&gt;
 BZF_API bool [[bz_callbackExists]] ( const char* name );&lt;br /&gt;
&lt;br /&gt;
=== Inter-Plug-in Communications ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_clipFieldExists]] ( const char *name );&lt;br /&gt;
 BZF_API const char* [[bz_getclipFieldString]] ( const char *name );&lt;br /&gt;
 BZF_API float [[bz_getclipFieldFloat]] ( const char *name );&lt;br /&gt;
 BZF_API int [[bz_getclipFieldInt]] ( const char *name );&lt;br /&gt;
 BZF_API bool [[bz_setclipFieldString]] ( const char *name, const char* data );&lt;br /&gt;
 BZF_API bool [[bz_setclipFieldFloat]] ( const char *name, float data );&lt;br /&gt;
 BZF_API bool [[bz_setclipFieldInt]] ( const char *name, int data );&lt;br /&gt;
 BZF_API bool [[bz_addClipFieldNotifier]] ( const char *name, [[bz_ClipFiledNotifier *cb );&lt;br /&gt;
 BZF_API bool [[bz_removeClipFieldNotifier]] ( const char *name, [[bz_ClipFiledNotifier *cb );&lt;br /&gt;
&lt;br /&gt;
=== Game Recording ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_saveRecBuf]] ( const char * _filename, int seconds);&lt;br /&gt;
 BZF_API bool [[bz_startRecBuf]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_stopRecBuf]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Map Management ===&lt;br /&gt;
==== Map Information ====&lt;br /&gt;
?&lt;br /&gt;
 BZF_API void [[bz_getWorldSize]] ( float *size, float *wallHeight );&lt;br /&gt;
 BZF_API unsigned int [[bz_getWorldObjectCount]] ( void );&lt;br /&gt;
 BZF_API [[bz_APIWorldObjectList]]* [[bz_getWorldObjectList]] ( void );&lt;br /&gt;
 BZF_API void [[bz_releaseWorldObjectList]] ( [[bz_APIWorldObjectList]] *list );&lt;br /&gt;
 BZF_API unsigned int [[bz_findWorldObject]] ( const char *name );&lt;br /&gt;
 BZF_API [[bz_APIBaseWorldObject]]* [[bz_getWorldObjectByID]] ( unsigned int id );&lt;br /&gt;
 BZF_API bool [[bz_getTeleLinkIDs]] ( const char* teleName, int* frontLink, int* backLink );&lt;br /&gt;
 BZF_API const char* [[bz_getLinkTeleName]] ( int linkIndex );&lt;br /&gt;
 BZF_API int [[bz_getPhyDrvID]] ( const char* phyDrvName );&lt;br /&gt;
 BZF_API const char* [[bz_getPhyDrvName]] ( unsigned int phyDrvID );&lt;br /&gt;
 BZF_API bool [[bz_SetWorldObjectTangibility]] ( int id, const [[bz_SolidObjectPassableAtributes]] &amp;amp;atribs );&lt;br /&gt;
 BZF_API bool [[bz_GetWorldObjectTangibility]] ( int id, [[bz_SolidObjectPassableAtributes]] &amp;amp;atribs );&lt;br /&gt;
 BZF_API void [[bz_ResetWorldObjectTangibilities]] ( void );&lt;br /&gt;
&lt;br /&gt;
==== Map Collisions ====&lt;br /&gt;
?&lt;br /&gt;
 [[bz_eAPIColType]] [[bz_cylinderInMapObject]] ( float pos[3], float height, float radius, [[bz_APIBaseWorldObject]] **object );&lt;br /&gt;
 [[bz_eAPIColType]] [[bz_boxInMapObject]] ( float pos[3], float size[3], float angle, [[bz_APIBaseWorldObject]] **object );&lt;br /&gt;
&lt;br /&gt;
==== Custom Map Objects ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_registerCustomMapObject]] ( const char* object, [[bz_CustomMapObjectHandler]] *handler );&lt;br /&gt;
 BZF_API bool [[bz_removeCustomMapObject]] ( const char* object );&lt;br /&gt;
&lt;br /&gt;
=== Utility ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API const char *[[bz_MD5]] ( const char* str );&lt;br /&gt;
 BZF_API const char *[[bz_MD5]] ( const void* data, size_t size );&lt;br /&gt;
 BZF_API const char *[[bz_getServerVersion]] ( void );&lt;br /&gt;
 BZF_API const char *[[bz_getProtocolVersion]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Misc ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_getStandardSpawn]] ( int playerID, float pos[3], float *rot );&lt;br /&gt;
 BZF_API bool [[bz_killPlayer]] ( int playerID, bool spawnOnBase, int killerID = -1, const char* flagID = NULL );&lt;br /&gt;
 BZF_API bool [[bz_sendPlayCustomLocalSound]] ( int playerID, const char* soundName );&lt;br /&gt;
 BZF_API [[bz_ApiString]] [[bz_filterPath]] ( const char* path );&lt;br /&gt;
 BZF_API const char *[[bz_format]](const char* fmt, ...)_ATTRIBUTE12;&lt;br /&gt;
 BZF_API const char *[[bz_toupper]](const char* val );&lt;br /&gt;
 BZF_API const char *[[bz_tolower]](const char* val );&lt;br /&gt;
 BZF_API const char *[[bz_urlEncode]](const char* val );&lt;br /&gt;
 BZF_API [[bz_eGameType]] [[bz_getGameType]]( void );&lt;br /&gt;
 BZF_API [[bz_eTeamType]] [[bz_checkBaseAtPoint]] ( float pos[3] );&lt;br /&gt;
 BZF_API int [[bz_APIVersion]] ( void );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_allowJumping]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Server Side Players (Development) ===&lt;br /&gt;
? (In API for 2.3+, but will crash a server)&lt;br /&gt;
 BZF_API int [[bz_addServerSidePlayer]] ( [[bz_ServerSidePlayerHandler]] *handler );&lt;br /&gt;
 BZF_API bool [[bz_removeServerSidePlayer]] ( int playerID, [[bz_ServerSidePlayerHandler]] *handler );&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_Functions]]&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_getFlagName&amp;diff=8123</id>
		<title>Bz getFlagName</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_getFlagName&amp;diff=8123"/>
		<updated>2011-11-18T13:55:05Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Rename function to bz_getName() for now.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{BZFS_API_Doc}}&lt;br /&gt;
{{BZFS_API_Funcs}}&lt;br /&gt;
==Prototype==&lt;br /&gt;
BZF_API const [[bz_ApiString]] bz_getName( int flag );&lt;br /&gt;
==Parameters==&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;
  |flag &lt;br /&gt;
  |int &lt;br /&gt;
  |the flag to return&lt;br /&gt;
  |}&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
This API function returns the flag code for the specified flag.&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8122</id>
		<title>Functions (API)</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8122"/>
		<updated>2011-11-18T13:38:50Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: /* Server Time */ bz_getMaxWaitTime() and bz_setMaxWaitTime() are not in the API. Seemed to have slipped by when I was looking through them.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DoDoc|&lt;br /&gt;
Fill in articles for all API Functions&amp;lt;br&amp;gt;&lt;br /&gt;
Finish updating to 2.3.x&amp;lt;br&amp;gt;&lt;br /&gt;
Verify future API functions.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{BZFS_API_Doc}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&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;
== Function Groups ==&lt;br /&gt;
Functions are broken into a series of groups based on the type of action or information they deal with.&lt;br /&gt;
&lt;br /&gt;
=== Event Registration ===&lt;br /&gt;
2.0.x&lt;br /&gt;
 BZF_API bool [[bz_registerEvent]] ( [[Event(API)|bz_eEventType]] eventType, [[Event(API)|bz_EventHandler]]* eventHandler );&lt;br /&gt;
 BZF_API bool [[bz_removeEvent]] ( [[Event(API)|bz_eEventType]] eventType, [[Event(API)|bz_EventHandler]]* eventHandler );&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[Register]] ( [[Event(API)|bz_eEventType]] eventType );&lt;br /&gt;
 virtual void Cleanup() {Flush();}&lt;br /&gt;
&lt;br /&gt;
=== Non-Player Connections ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_registerNonPlayerConnectionHandler]] ( int connectionID, [[bz_NonPlayerConnectionHandler]]* handler );&lt;br /&gt;
 BZF_API bool [[bz_removeNonPlayerConnectionHandler]] ( int connectionID, [[bz_NonPlayerConnectionHandler]]* handler );&lt;br /&gt;
 BZF_API bool [[bz_sendNonPlayerData]] ( int connectionID, const void *data, unsigned int size );&lt;br /&gt;
 BZF_API bool [[bz_disconectNonPlayerConnection]] ( int connectionID );&lt;br /&gt;
 BZF_API unsigned int [[bz_getNonPlayerConnectionOutboundPacketCount]] ( int connectionID );&lt;br /&gt;
 BZF_API const char* [[bz_getNonPlayerConnectionIP]] ( int connectionID );&lt;br /&gt;
 BZF_API const char* [[bz_getNonPlayerConnectionHost]] ( int connectionID );&lt;br /&gt;
&lt;br /&gt;
=== Player Information ===&lt;br /&gt;
==== Player Information ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_hasPerm]] ( int playerID, const char* perm );&lt;br /&gt;
 BZF_API bool [[bz_getAdmin]] ( int playerID );&lt;br /&gt;
 BZF_API bz_eTeamType [[bz_getPlayerTeam]] ( int playerID );&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerCallsign]] ( int playerID );&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerIPAddress]] ( int playerID );&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerFlag]] ( int playerID );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerReferrer]] ( int playerID );&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerCustomData]] (int playerID, const char* key );&lt;br /&gt;
&lt;br /&gt;
==== Player State Information ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_isPlayerPaused]] ( int playerID );&lt;br /&gt;
 BZF_API bool [[bz_canPlayerSpawn]]( int playerID );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerCurrentState]] ( int playerID, bz_PlayerUpdateState &amp;amp;state );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_getPlayerPosition]] ( int playerID, float pos[3], bool extrapolate );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerRotation]] ( int playerID, float *rot, bool extrapolate );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerVelocity]] ( int playerID, float vel[3] );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerAngVel]] ( int playerID, float *angvel );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerPhysicsDriver]] ( int playerID, int* phydrv );&lt;br /&gt;
&lt;br /&gt;
==== Player Lists and Records ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByIndex]] ( int index );&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByCallsign]] ( const char* name );&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByBZID]] ( int BZID );&lt;br /&gt;
 BZF_API bool [[bz_updatePlayerData]] ( [[bz_BasePlayerRecord]] *playerRecord );&lt;br /&gt;
 BZF_API bool [[bz_freePlayerRecord]] ( [[bz_BasePlayerRecord]] *playerRecord );&lt;br /&gt;
&lt;br /&gt;
 BZF_API [[bz_APIIntList]] *[[bz_newIntList]] ( void );&lt;br /&gt;
 BZF_API [[bz_APIIntList]] *[[bz_getPlayerIndexList]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerIndexList]] ( [[bz_APIIntList]] *playerList );&lt;br /&gt;
 BZF_API void [[bz_deleteIntList]] ( [[bz_APIIntList]] *l);&lt;br /&gt;
&lt;br /&gt;
==== Player Management ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_grantPerm]] ( int playerID, const char* perm );&lt;br /&gt;
 BZF_API bool [[bz_revokePerm]] ( int playerID, const char* perm );&lt;br /&gt;
 BZF_API bool [[bz_validAdminPassword]] ( const char* passwd );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerOperator]] ( int playerId );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_setPlayerSpawnable]]( int playerID, bool spawn );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerLimboMessage]]( int playerID, const char* text );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerCustomData]] (int playerID, const char* key, const char* data );&lt;br /&gt;
&lt;br /&gt;
=== Team Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API unsigned int [[bz_getTeamPlayerLimit]] ( bz_eTeamType team );&lt;br /&gt;
 BZF_API int [[bz_getTeamCount]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API int [[bz_getTeamScore]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API int [[bz_getTeamWins]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API int [[bz_getTeamLosses]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API void [[bz_setTeamWins]] ([[bz_eTeamType]] team, int wins );&lt;br /&gt;
 BZF_API void [[bz_setTeamLosses]] ([[bz_eTeamType]] team, int losses );&lt;br /&gt;
 BZF_API void [[bz_resetTeamScore]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API void [[bz_resetTeamScores]] ( void );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API void [[bz_changeTeam]]( int player, [[bz_eTeamType]] team );&lt;br /&gt;
&lt;br /&gt;
=== Score Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_setPlayerWins]] ( int playerId, int wins );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerLosses]] ( int playerId, int losses );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerTKs]] ( int playerId, int tks );&lt;br /&gt;
 BZF_API bool [[bz_resetPlayerScore]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPlayerWins]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPlayerLosses]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPlayerTKs]] ( int playerId );&lt;br /&gt;
 BZF_API float [[bz_getPlayerRank]] ( int playerId );&lt;br /&gt;
&lt;br /&gt;
=== Latency Information ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API int [[bz_getPlayerLag]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPlayerJitter]] ( int playerId );&lt;br /&gt;
 BZF_API float [[bz_getPlayerPacketloss]] ( int playerId );&lt;br /&gt;
&lt;br /&gt;
=== Permission Group Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API [[bz_APIStringList]]* [[bz_getGroupList]] ( void );&lt;br /&gt;
 BZF_API [[bz_APIStringList]]* [[bz_getGroupPerms]] ( const char* group );&lt;br /&gt;
 BZF_API bool [[bz_groupAllowPerm]] ( const char* group, const char* perm );&lt;br /&gt;
&lt;br /&gt;
=== Chat Messages ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_sendTextMessage]] (int from, int to, const char* message);&lt;br /&gt;
 BZF_API bool [[bz_sendTextMessage]] (int from, [[bz_eTeamType]] to, const char* message);&lt;br /&gt;
 BZF_API bool [[bz_sendTextMessagef]] (int from, int to, const char* fmt, ...);&lt;br /&gt;
 BZF_API bool [[bz_sendTextMessagef]] (int from, [[bz_eTeamType]] to, const char* fmt, ...);&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_sendFetchResMessage]] ( int playerID,  const char* URL );&lt;br /&gt;
 BZF_API bool [[bz_sendJoinServer]] ( int playerID, const char* address, int port, int team, const char* referrer, const char* message );&lt;br /&gt;
 BZF_API bool [[bz_sendLuaData]] ( int dstPlayerID, int dstScriptID, int statusBits, const char* data, int len,&lt;br /&gt;
                               int srcPlayerID = 0, int srcScriptID = 0 );&lt;br /&gt;
&lt;br /&gt;
=== Server Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_restart]] ( void );&lt;br /&gt;
 BZF_API void [[bz_shutdown]] ();&lt;br /&gt;
 BZF_API void [[bz_superkill]] ();&lt;br /&gt;
 BZF_API void [[bz_gameOver]] ( int playerID, bz_eTeamType = eNoTeam );&lt;br /&gt;
 BZF_API void [[bz_reloadLocalBans]] ();&lt;br /&gt;
 BZF_API void [[bz_reloadMasterBans]] ();&lt;br /&gt;
 BZF_API void [[bz_reloadGroups]] ();&lt;br /&gt;
 BZF_API void [[bz_reloadUsers]] ();&lt;br /&gt;
 BZF_API void [[bz_reloadHelp]] ();&lt;br /&gt;
?&lt;br /&gt;
 BZF_API int [[bz_getPlayerCount]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_anyPlayers]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Rabbit Hunt ===&lt;br /&gt;
?&lt;br /&gt;
 BZF_API void [[bz_newRabbit]] ( int player, bool swap );&lt;br /&gt;
 BZF_API void [[bz_removeRabbit]] ( int player );&lt;br /&gt;
&lt;br /&gt;
=== Map Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API void [[bz_setClientWorldDownloadURL]] ( const char* URL );&lt;br /&gt;
 BZF_API const [[bzApiString]] [[bz_getClientWorldDownloadURL]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_saveWorldCacheFile]] ( const char* file );&lt;br /&gt;
&lt;br /&gt;
=== Flag Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_givePlayerFlag]] ( int playerID, const char* flagType, bool force );&lt;br /&gt;
 BZF_API bool [[bz_removePlayerFlag]] ( int playerID );&lt;br /&gt;
 BZF_API void [[bz_resetFlags]] ( bool onlyUnused );&lt;br /&gt;
 BZF_API unsigned int [[bz_getNumFlags]] ( void );&lt;br /&gt;
 BZF_API const [[bz_ApiString]] [[bz_getFlagName]] ( int flag );&lt;br /&gt;
 BZF_API bool [[bz_resetFlag]] ( int flag );&lt;br /&gt;
 BZF_API int [[bz_flagPlayer]] ( int flag );&lt;br /&gt;
 BZF_API bool [[bz_getFlagPosition]] ( int flag, float* pos );&lt;br /&gt;
 BZF_API bool [[bz_moveFlag]] ( int flag, float pos[3], bool reset = true );&lt;br /&gt;
 BZF_API bool [[bz_RegisterCustomFlag]] ( const char* abbr, const char* name, const char* helpString, bz_eShotType shotType, bz_eFlagQuality quality );&lt;br /&gt;
&lt;br /&gt;
=== Shot Type Control ===&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_setPlayerShotType]] ( int playerId, [[bz_eShotType]] shotType );&lt;br /&gt;
&lt;br /&gt;
=== World Weapon Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_fireWorldWep]] ( const char* flagType, float lifetime, int fromPlayer, float *pos, float tilt, float direction, int shotID , float dt );&lt;br /&gt;
 BZF_API int [[bz_fireWorldGM]] ( int targetPlayerID, float lifetime, float *pos, float tilt, float direction, float dt );&lt;br /&gt;
&lt;br /&gt;
=== Server Time ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API double [[bz_getCurrentTime]] ( void );&lt;br /&gt;
 BZF_API void [[bz_getLocaltime]] ( [[bz_Time]] *ts );&lt;br /&gt;
 BZF_API void [[bz_getUTCtime]] ( [[bz_Time]] *ts );&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
 BZF_API float [[bz_getMaxWaitTime]] ( void );&lt;br /&gt;
 BZF_API void [[bz_setMaxWaitTime]] ( float maxTime );&lt;br /&gt;
&lt;br /&gt;
=== Global Database Management (BZDB) ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API double [[bz_getBZDBDouble]] ( const char* variable );&lt;br /&gt;
 BZF_API [[bz_ApiString]] [[bz_getBZDBString]] ( const char* variable );&lt;br /&gt;
 BZF_API bool [[bz_getBZDBBool]] ( const char* variable );&lt;br /&gt;
 BZF_API int [[bz_getBZDBInt]] ( const char* variable );&lt;br /&gt;
 BZF_API int [[bz_getBZDBItemPerms]] ( const char* variable );&lt;br /&gt;
 BZF_API bool [[bz_getBZDBItemPesistent]] ( const char* variable );&lt;br /&gt;
 BZF_API bool [[bz_BZDBItemExists]] ( const char* variable );&lt;br /&gt;
 BZF_API bool [[bz_setBZDBDouble]] ( const char* variable, double val, int perms = 0, bool persistent = false );&lt;br /&gt;
 BZF_API bool [[bz_setBZDBString]] ( const char* variable, const char *val, int perms = 0, bool persistent = false  );&lt;br /&gt;
 BZF_API bool [[bz_setBZDBBool]] ( const char* variable, bool val, int perms = 0, bool persistent = false  );&lt;br /&gt;
 BZF_API bool [[bz_setBZDBInt]] ( const char* variable, int val, int perms = 0, bool persistent = false  );&lt;br /&gt;
 BZF_API int [[bz_getBZDBVarList]] ( bz_APIStringList	*varList );&lt;br /&gt;
 BZF_API void [[bz_resetBZDBVar]] ( const char* variable );&lt;br /&gt;
 BZF_API void [[bz_resetALLBZDBVars]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API void [[bz_debugMessage]] ( int level, const char* message );&lt;br /&gt;
 BZF_API void [[bz_debugMessagef]] ( int level, const char* fmt, ... )&lt;br /&gt;
 BZF_API int [[bz_getDebugLevel]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Server Administration ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_kickUser]] ( int playerIndex, const char* reason, bool notify );&lt;br /&gt;
 BZF_API bool [[bz_IPBanUser]] ( int bannedByIndex, const char* ip, int duration, const char* reason );&lt;br /&gt;
 BZF_API bool [[bz_HostBanUser]] ( int bannedByIndex, const char* hostmask, int duration, const char* reason );&lt;br /&gt;
 BZF_API bool [[bz_IPUnbanUser]] ( const char* ip );&lt;br /&gt;
 BZF_API bool [[bz_IDUnbanUser]] ( const char* bzID );&lt;br /&gt;
 BZF_API bool [[bz_HostUnbanUser]] ( const char* hostmask );&lt;br /&gt;
 &lt;br /&gt;
 BZF_API int [[bz_getLagWarn]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_setLagWarn]] ( int lagwarn );&lt;br /&gt;
 BZF_API bool [[bz_pollActive]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_pollVeto]] ( void );&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_IDBanUser]] ( int bannedByIndex, const char* bzID , int duration, const char *reason );&lt;br /&gt;
&lt;br /&gt;
=== Reporting ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API [[bz_APIStringList]]* [[bz_getReports]] ( void );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API unsigned int [[bz_getReportCount]] ( void );&lt;br /&gt;
 BZF_API const char* [[bz_getReportSource]] ( unsigned int id );&lt;br /&gt;
 BZF_API const char* [[bz_getReportBody]] ( unsigned int id );&lt;br /&gt;
 BZF_API const char* [[bz_getReportTime]] ( unsigned int id );&lt;br /&gt;
 BZF_API bool [[bz_clearReport]] ( unsigned int id );&lt;br /&gt;
 BZF_API bool [[bz_clearAllReports]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_fileReport]] ( const char* message, const char* from );&lt;br /&gt;
&lt;br /&gt;
=== Timed Game Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_setTimeLimit]] ( float timeLimit );&lt;br /&gt;
 BZF_API float [[bz_getTimeLimit]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_isTimeManualStart]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_isCountDownActive]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_isCountDownInProgress]] ( void );&lt;br /&gt;
 BZF_API void [[bz_pauseCountdown]] ( const char *pausedBy );&lt;br /&gt;
 BZF_API void [[bz_resumeCountdown]] ( const char *resumedBy );&lt;br /&gt;
 BZF_API void [[bz_startCountdown]] ( int delay, float limit, const char *byWho );&lt;br /&gt;
&lt;br /&gt;
=== Custom Text Commands ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_registerCustomSlashCommand]] ( const char* command, [[bz_CustomSlashCommandHandler]] *handler );&lt;br /&gt;
 BZF_API bool [[bz_removeCustomSlashCommand]] ( const char* command );&lt;br /&gt;
&lt;br /&gt;
=== Plug-in Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API int [[bz_getLoadedPlugins]] ( [[bz_APIStringList]] * list );&lt;br /&gt;
 BZF_API bool [[bz_loadPlugin]] ( const char* path, const char* params );&lt;br /&gt;
 BZF_API bool [[bz_unloadPlugin]] ( const char* path );&lt;br /&gt;
 BZF_API const char* [[bz_pluginBinPath]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_registerCustomPluginHandler]] ( const char* extension, [[bz_APIPluginHandler]] * handler );&lt;br /&gt;
 BZF_API bool [[bz_removeCustomPluginHandler]] ( const char* extension, [[bz_APIPluginHandler]] * handler );&lt;br /&gt;
&lt;br /&gt;
=== Public Server Information ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_getPublic]] ( void );&lt;br /&gt;
 BZF_API [[bz_ApiString]] [[bz_getPublicAddr]] ( void );&lt;br /&gt;
 BZF_API [[bz_ApiString]] [[bz_getPublicDescription]] ( void );&lt;br /&gt;
 BZF_API int [[bz_getPublicPort]] ( void );&lt;br /&gt;
 BZF_API void [[bz_updateListServer]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== HTTP Transfer ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_addURLJob]] ( const char* URL, [[bz_BaseURLHandler]]* handler = NULL, const char* postData = NULL );&lt;br /&gt;
 BZF_API bool [[bz_removeURLJob]] ( const char* URL );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_stopAllURLJobs]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Callback Functions ===&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_registerCallBack]] ( const char* name, [[bz_GenericCallback]] *callback );&lt;br /&gt;
 BZF_API bool [[bz_registerCallBack]] ( const char* name, [[bz_GenericCallbackFunc]] callback );&lt;br /&gt;
 BZF_API bool [[bz_removeCallBack]] ( const char* name, [[bz_GenericCallback]] *callback );&lt;br /&gt;
 BZF_API bool [[bz_removeCallBack]] ( const char* name, [[bz_GenericCallbackFunc]] callback );&lt;br /&gt;
 BZF_API bool [[bz_callCallback]] ( const char* name, void *param );&lt;br /&gt;
 BZF_API bool [[bz_callbackExists]] ( const char* name );&lt;br /&gt;
&lt;br /&gt;
=== Inter-Plug-in Communications ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_clipFieldExists]] ( const char *name );&lt;br /&gt;
 BZF_API const char* [[bz_getclipFieldString]] ( const char *name );&lt;br /&gt;
 BZF_API float [[bz_getclipFieldFloat]] ( const char *name );&lt;br /&gt;
 BZF_API int [[bz_getclipFieldInt]] ( const char *name );&lt;br /&gt;
 BZF_API bool [[bz_setclipFieldString]] ( const char *name, const char* data );&lt;br /&gt;
 BZF_API bool [[bz_setclipFieldFloat]] ( const char *name, float data );&lt;br /&gt;
 BZF_API bool [[bz_setclipFieldInt]] ( const char *name, int data );&lt;br /&gt;
 BZF_API bool [[bz_addClipFieldNotifier]] ( const char *name, [[bz_ClipFiledNotifier *cb );&lt;br /&gt;
 BZF_API bool [[bz_removeClipFieldNotifier]] ( const char *name, [[bz_ClipFiledNotifier *cb );&lt;br /&gt;
&lt;br /&gt;
=== Game Recording ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_saveRecBuf]] ( const char * _filename, int seconds);&lt;br /&gt;
 BZF_API bool [[bz_startRecBuf]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_stopRecBuf]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Map Management ===&lt;br /&gt;
==== Map Information ====&lt;br /&gt;
?&lt;br /&gt;
 BZF_API void [[bz_getWorldSize]] ( float *size, float *wallHeight );&lt;br /&gt;
 BZF_API unsigned int [[bz_getWorldObjectCount]] ( void );&lt;br /&gt;
 BZF_API [[bz_APIWorldObjectList]]* [[bz_getWorldObjectList]] ( void );&lt;br /&gt;
 BZF_API void [[bz_releaseWorldObjectList]] ( [[bz_APIWorldObjectList]] *list );&lt;br /&gt;
 BZF_API unsigned int [[bz_findWorldObject]] ( const char *name );&lt;br /&gt;
 BZF_API [[bz_APIBaseWorldObject]]* [[bz_getWorldObjectByID]] ( unsigned int id );&lt;br /&gt;
 BZF_API bool [[bz_getTeleLinkIDs]] ( const char* teleName, int* frontLink, int* backLink );&lt;br /&gt;
 BZF_API const char* [[bz_getLinkTeleName]] ( int linkIndex );&lt;br /&gt;
 BZF_API int [[bz_getPhyDrvID]] ( const char* phyDrvName );&lt;br /&gt;
 BZF_API const char* [[bz_getPhyDrvName]] ( unsigned int phyDrvID );&lt;br /&gt;
 BZF_API bool [[bz_SetWorldObjectTangibility]] ( int id, const [[bz_SolidObjectPassableAtributes]] &amp;amp;atribs );&lt;br /&gt;
 BZF_API bool [[bz_GetWorldObjectTangibility]] ( int id, [[bz_SolidObjectPassableAtributes]] &amp;amp;atribs );&lt;br /&gt;
 BZF_API void [[bz_ResetWorldObjectTangibilities]] ( void );&lt;br /&gt;
&lt;br /&gt;
==== Map Collisions ====&lt;br /&gt;
?&lt;br /&gt;
 [[bz_eAPIColType]] [[bz_cylinderInMapObject]] ( float pos[3], float height, float radius, [[bz_APIBaseWorldObject]] **object );&lt;br /&gt;
 [[bz_eAPIColType]] [[bz_boxInMapObject]] ( float pos[3], float size[3], float angle, [[bz_APIBaseWorldObject]] **object );&lt;br /&gt;
&lt;br /&gt;
==== Custom Map Objects ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_registerCustomMapObject]] ( const char* object, [[bz_CustomMapObjectHandler]] *handler );&lt;br /&gt;
 BZF_API bool [[bz_removeCustomMapObject]] ( const char* object );&lt;br /&gt;
&lt;br /&gt;
=== Utility ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API const char *[[bz_MD5]] ( const char* str );&lt;br /&gt;
 BZF_API const char *[[bz_MD5]] ( const void* data, size_t size );&lt;br /&gt;
 BZF_API const char *[[bz_getServerVersion]] ( void );&lt;br /&gt;
 BZF_API const char *[[bz_getProtocolVersion]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Misc ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_getStandardSpawn]] ( int playerID, float pos[3], float *rot );&lt;br /&gt;
 BZF_API bool [[bz_killPlayer]] ( int playerID, bool spawnOnBase, int killerID = -1, const char* flagID = NULL );&lt;br /&gt;
 BZF_API bool [[bz_sendPlayCustomLocalSound]] ( int playerID, const char* soundName );&lt;br /&gt;
 BZF_API [[bz_ApiString]] [[bz_filterPath]] ( const char* path );&lt;br /&gt;
 BZF_API const char *[[bz_format]](const char* fmt, ...)_ATTRIBUTE12;&lt;br /&gt;
 BZF_API const char *[[bz_toupper]](const char* val );&lt;br /&gt;
 BZF_API const char *[[bz_tolower]](const char* val );&lt;br /&gt;
 BZF_API const char *[[bz_urlEncode]](const char* val );&lt;br /&gt;
 BZF_API [[bz_eGameType]] [[bz_getGameType]]( void );&lt;br /&gt;
 BZF_API [[bz_eTeamType]] [[bz_checkBaseAtPoint]] ( float pos[3] );&lt;br /&gt;
 BZF_API int [[bz_APIVersion]] ( void );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_allowJumping]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Server Side Players (Development) ===&lt;br /&gt;
? (In API for 2.3+, but will crash a server)&lt;br /&gt;
 BZF_API int [[bz_addServerSidePlayer]] ( [[bz_ServerSidePlayerHandler]] *handler );&lt;br /&gt;
 BZF_API bool [[bz_removeServerSidePlayer]] ( int playerID, [[bz_ServerSidePlayerHandler]] *handler );&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_Functions]]&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Mesh&amp;diff=8096</id>
		<title>Mesh</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Mesh&amp;diff=8096"/>
		<updated>2011-10-20T19:31:06Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Added information about inside points from http://my.bzflag.org/bb/viewtopic.php?p=139382#p139382. Note to Admins: File Uploader does not work due to the upload directory not being writable. Image should be uploaded once this issue is fixed.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A mesh is a [[BZW]] map object that defines an arbitrary three dimensional shape. A mesh is defined as a series of faces containing 3 or more points(vertices) in three dimensional space.&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
The code for a mesh object is as follows, this is only an example&lt;br /&gt;
{|&lt;br /&gt;
|&lt;br /&gt;
 mesh&lt;br /&gt;
  name example_mesh&lt;br /&gt;
    #&lt;br /&gt;
    # Material properties and physics applied to a mesh apply to all faces&lt;br /&gt;
    # that follow the setting. Mesh faces will alter their own&lt;br /&gt;
    # properties without affecting the state of the mesh properties.&lt;br /&gt;
    #&lt;br /&gt;
  inside 5.5 4.5 1.2 # add an inside point (repeatable) &lt;br /&gt;
  outside 0 0 1000 # add an outside point (repeatable) &lt;br /&gt;
  vertex 100 200 300 # add a vertex (repeatable) &lt;br /&gt;
  normal 1.0 0 0 # add a normal (repeatable) &lt;br /&gt;
  texcoord 0.1 0.75 # add a texture coordinate (repeatable) &lt;br /&gt;
  shift 0 0 0 # (repeatable) &lt;br /&gt;
  scale 1 1 1 # (repeatable) &lt;br /&gt;
  shear 0 0 0 # (repeatable) &lt;br /&gt;
  spin angle nx ny nz # (repeatable) &lt;br /&gt;
  phydrv example_phydrv # assign a physics driver &lt;br /&gt;
  smoothbounce # ricochets use normals &lt;br /&gt;
  noclusters # render each mesh face individually &lt;br /&gt;
             # (this can be useful for occluders) &lt;br /&gt;
  face # start a face (repeatable) &lt;br /&gt;
       # faces must be convex polygons &lt;br /&gt;
    vertices 1 4 0 3 5 # list of vertices (requires at least three) &lt;br /&gt;
    normals 2 6 0 4 7 # list of normals (optional) &lt;br /&gt;
    texcoords 0 3 2 4 9 # list of texture coordinates (optional) &lt;br /&gt;
    phydrv example_phydrv # assign a physics driver &lt;br /&gt;
    smoothbounce &lt;br /&gt;
    noclusters &lt;br /&gt;
    drivethrough &lt;br /&gt;
    shootthrough &lt;br /&gt;
    passable &lt;br /&gt;
    matref &lt;br /&gt;
  endface # end the face &lt;br /&gt;
   #&lt;br /&gt;
   #  The drawInfo element can be added to increase the rendering speed&lt;br /&gt;
   #  of the mesh object. If the client is capable of using this data,&lt;br /&gt;
   #  then it is used to draw the mesh instead of the face  information.&lt;br /&gt;
   #&lt;br /&gt;
 end	  # mesh&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Valid parameters for a mesh are&lt;br /&gt;
&amp;lt;properties&amp;gt;&lt;br /&gt;
name=The name of the mesh&lt;br /&gt;
vertex= this is a &#039;corner&#039; of your mesh - a point where faces connect. (at least 3 are required)&lt;br /&gt;
normal= a unit vector describing the direction light will reflect off the object&lt;br /&gt;
texcoord= this is used for mapping textures onto the mesh.  This will link a point of the 2-Dimensional texture to a vertex on the 3-Dimensional object.  (0,0) refers to the lower left corner of the texture, (1,1) refers to the top right.  Textures are defined in the [[material]] object.&lt;br /&gt;
inside= an arbitrary vertex placed on the inside of the mesh object.  This keeps tanks from driving or spawning inside the object.&lt;br /&gt;
phydrv=Assign a physics driver as defined in the [[physics]] object.&lt;br /&gt;
smoothbounce=shot will ricochet from the face in the same direction as the defined normal.&lt;br /&gt;
noclusters=Render each face individually.&lt;br /&gt;
shift=places the mesh using &amp;lt;x y z&amp;gt; coordinates&lt;br /&gt;
scale=resizes the mesh along the x, y, or z axis&lt;br /&gt;
shear=repeatable&lt;br /&gt;
spin=spins the mesh &amp;lt;angle&amp;gt; number of degrees, &amp;lt;n&amp;gt; number of rotations along one or more of the x, y, or z axis&lt;br /&gt;
drivethrough=Tanks can drive through this mesh.&lt;br /&gt;
shootthrough=Tanks can shoot through this mesh.&lt;br /&gt;
passable=Tanks can both shoot and drive through this mesh&lt;br /&gt;
matref=Assign a [[material]] to all below faces.&lt;br /&gt;
face=Start a face (required), see below:&lt;br /&gt;
&amp;lt;/properties&amp;gt;&lt;br /&gt;
Valid parameters within the face sub-object:&lt;br /&gt;
&amp;lt;properties&amp;gt;&lt;br /&gt;
vertices=Numbered list of vertices for this face. (requires at least three)&lt;br /&gt;
normals=Numbered list of normals for this face.&lt;br /&gt;
texcoords=Numbered list of texture coordinates for this face.&lt;br /&gt;
phydrv=Assign a [[Physics|physics driver]] to this face only.&lt;br /&gt;
smoothbounce=use normals to determine shot ricochets for this face.&lt;br /&gt;
noclusters&#039;&#039;&#039;&lt;br /&gt;
drivethrough=Tanks can drive through this face.&lt;br /&gt;
shootthrough=Tanks can shoot through this face.&lt;br /&gt;
passable=Tanks can both shoot and drive through this face&lt;br /&gt;
matref=Assign a [[material]] to this face.&lt;br /&gt;
&amp;lt;/properties&amp;gt;&lt;br /&gt;
Meshes have full support for [[Material]] (wherein custom textures can be defined) and [[Physics Drivers]].&lt;br /&gt;
&lt;br /&gt;
==DrawInfo==&lt;br /&gt;
[[DrawInfo]] can be added to the mesh object to increase rendering efficiency, allowing the designer to specify which details will be seen from certain distances.  It can also be used to rotate a mesh object, though tanks can not interact with the moving object.&lt;br /&gt;
&lt;br /&gt;
==Appearance==&lt;br /&gt;
The shape of a mesh will vary greatly as by its very nature it can be defined to look like anything.  Unless a material is defined and applied, the default &amp;quot;mesh.png&amp;quot; texture will be applied to all faces of the mesh.&lt;br /&gt;
&lt;br /&gt;
==Simplified Examples==&lt;br /&gt;
{|&lt;br /&gt;
|Simple Cube&lt;br /&gt;
 mesh&lt;br /&gt;
    vertex -10 -10  0&lt;br /&gt;
    vertex  10 -10  0&lt;br /&gt;
    vertex  10  10  0&lt;br /&gt;
    vertex -10  10  0&lt;br /&gt;
    vertex -10 -10 10&lt;br /&gt;
    vertex  10 -10 10&lt;br /&gt;
    vertex  10  10 10&lt;br /&gt;
    vertex -10  10 10&lt;br /&gt;
    face #south&lt;br /&gt;
        vertices 0 1 5 4&lt;br /&gt;
    endface&lt;br /&gt;
    face #east&lt;br /&gt;
        vertices 1 2 6 5&lt;br /&gt;
    endface&lt;br /&gt;
    face #north&lt;br /&gt;
        vertices 2 3 7 6&lt;br /&gt;
    endface&lt;br /&gt;
    face #west&lt;br /&gt;
        vertices 3 0 4 7 &lt;br /&gt;
    endface&lt;br /&gt;
    face #bottom&lt;br /&gt;
        vertices 0 1 2 3&lt;br /&gt;
    endface&lt;br /&gt;
    face #top&lt;br /&gt;
        vertices 4 5 6 7&lt;br /&gt;
    endface&lt;br /&gt;
 end #mesh&lt;br /&gt;
|Simple billboard with texcoords&lt;br /&gt;
 mesh &lt;br /&gt;
    vertex -10 0  0&lt;br /&gt;
    vertex  10 0  0&lt;br /&gt;
    vertex  10 0 10&lt;br /&gt;
    vertex -10 0 10&lt;br /&gt;
    texcoord 0 0&lt;br /&gt;
    texcoord 1 0&lt;br /&gt;
    texcoord 1 1&lt;br /&gt;
    texcoord 0 1&lt;br /&gt;
    matref myBillboard&lt;br /&gt;
    face&lt;br /&gt;
        vertices 0 1 2 3&lt;br /&gt;
        texcoords 0 1 2 3&lt;br /&gt;
    endface&lt;br /&gt;
    face #backside&lt;br /&gt;
        vertices 1 0 3 2&lt;br /&gt;
        texcoords 1 0 3 2&lt;br /&gt;
    endface&lt;br /&gt;
 end #mesh&lt;br /&gt;
|Simple Jump-through floor&lt;br /&gt;
 mesh&lt;br /&gt;
    vertex  0  0  9&lt;br /&gt;
    vertex 10  0  9&lt;br /&gt;
    vertex 10 10  9&lt;br /&gt;
    vertex  0 10  9&lt;br /&gt;
    vertex  0  0 10&lt;br /&gt;
    vertex 10  0 10&lt;br /&gt;
    vertex 10 10 10&lt;br /&gt;
    vertex  0 10 10&lt;br /&gt;
    face #south&lt;br /&gt;
        vertices 0 1 5 4&lt;br /&gt;
        drivethrough&lt;br /&gt;
    endface&lt;br /&gt;
    face #east&lt;br /&gt;
        vertices 1 2 6 5&lt;br /&gt;
        drivethrough&lt;br /&gt;
    endface&lt;br /&gt;
    face #north&lt;br /&gt;
        vertices 2 3 7 6&lt;br /&gt;
        drivethrough&lt;br /&gt;
    endface&lt;br /&gt;
    face #west&lt;br /&gt;
        vertices 3 0 4 7 &lt;br /&gt;
        drivethrough&lt;br /&gt;
    endface&lt;br /&gt;
    face #bottom&lt;br /&gt;
        vertices 0 1 2 3&lt;br /&gt;
        drivethrough&lt;br /&gt;
    endface&lt;br /&gt;
    face #top&lt;br /&gt;
        vertices 4 5 6 7&lt;br /&gt;
    endface&lt;br /&gt;
 end #mesh&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Inside Points==&lt;br /&gt;
An inside point allows the mapper to make a mesh solid. This means that regardless of what the player tries to do, they will not be able to go through the object, or end up spawning inside a mesh unintentionally. When you drive through a box, especially with the Oscillation Overthruster flag, you will be inside of a building and sealed to it. Without inside points, especially to larger meshes, you will just end up on the inside of it and be able to shoot and drive normally. This is sometimes intentional, but usually not wanted. Inside points remedy this.&lt;br /&gt;
&lt;br /&gt;
In order to have successful inside point coverage, you need to make sure all faces of your mesh are in &amp;quot;line of sight&amp;quot; to the point you specify. This means that all faces have direct vision to that point, just as if that point was a point of light and all the faces were eyes. Only what can be seen through a straight line will be considered the inside for that face.&lt;br /&gt;
&lt;br /&gt;
Illustration is better than words, here is an image drawn up by &#039;&#039;&#039;Spazzy McGee&#039;&#039;&#039; from the forums.&lt;br /&gt;
&lt;br /&gt;
http://img205.imageshack.us/img205/2140/insides.jpg&lt;br /&gt;
&lt;br /&gt;
(Original forum post http://my.bzflag.org/bb/viewtopic.php?p=139382#p139382)&lt;br /&gt;
&lt;br /&gt;
==Editor Support==&lt;br /&gt;
The mesh object is supported by the [[BZWTools]] blender plugin, the Wings3D Exporter and hand coding.&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
The Mesh object was added with the [[BZFlag 2.0.0|v2.0.0]] release of BZFlag.&lt;br /&gt;
&lt;br /&gt;
[[Category:Map Making]]&lt;br /&gt;
[[Category:Map_Objects]]&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8095</id>
		<title>Functions (API)</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8095"/>
		<updated>2011-10-19T10:48:46Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: ToDo: &amp;quot;Verify Future API Functions&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DoDoc|&lt;br /&gt;
Fill in articles for all API Functions&amp;lt;br&amp;gt;&lt;br /&gt;
Finish updating to 2.3.x&amp;lt;br&amp;gt;&lt;br /&gt;
Verify future API functions.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{BZFS_API_Doc}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&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;
== Function Groups ==&lt;br /&gt;
Functions are broken into a series of groups based on the type of action or information they deal with.&lt;br /&gt;
&lt;br /&gt;
=== Event Registration ===&lt;br /&gt;
2.0.x&lt;br /&gt;
 BZF_API bool [[bz_registerEvent]] ( [[Event(API)|bz_eEventType]] eventType, [[Event(API)|bz_EventHandler]]* eventHandler );&lt;br /&gt;
 BZF_API bool [[bz_removeEvent]] ( [[Event(API)|bz_eEventType]] eventType, [[Event(API)|bz_EventHandler]]* eventHandler );&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[Register]] ( [[Event(API)|bz_eEventType]] eventType );&lt;br /&gt;
 virtual void Cleanup() {Flush();}&lt;br /&gt;
&lt;br /&gt;
=== Non-Player Connections ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_registerNonPlayerConnectionHandler]] ( int connectionID, [[bz_NonPlayerConnectionHandler]]* handler );&lt;br /&gt;
 BZF_API bool [[bz_removeNonPlayerConnectionHandler]] ( int connectionID, [[bz_NonPlayerConnectionHandler]]* handler );&lt;br /&gt;
 BZF_API bool [[bz_sendNonPlayerData]] ( int connectionID, const void *data, unsigned int size );&lt;br /&gt;
 BZF_API bool [[bz_disconectNonPlayerConnection]] ( int connectionID );&lt;br /&gt;
 BZF_API unsigned int [[bz_getNonPlayerConnectionOutboundPacketCount]] ( int connectionID );&lt;br /&gt;
 BZF_API const char* [[bz_getNonPlayerConnectionIP]] ( int connectionID );&lt;br /&gt;
 BZF_API const char* [[bz_getNonPlayerConnectionHost]] ( int connectionID );&lt;br /&gt;
&lt;br /&gt;
=== Player Information ===&lt;br /&gt;
==== Player Information ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_hasPerm]] ( int playerID, const char* perm );&lt;br /&gt;
 BZF_API bool [[bz_getAdmin]] ( int playerID );&lt;br /&gt;
 BZF_API bz_eTeamType [[bz_getPlayerTeam]] ( int playerID );&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerCallsign]] ( int playerID );&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerIPAddress]] ( int playerID );&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerFlag]] ( int playerID );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerReferrer]] ( int playerID );&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerCustomData]] (int playerID, const char* key );&lt;br /&gt;
&lt;br /&gt;
==== Player State Information ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_isPlayerPaused]] ( int playerID );&lt;br /&gt;
 BZF_API bool [[bz_canPlayerSpawn]]( int playerID );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerCurrentState]] ( int playerID, bz_PlayerUpdateState &amp;amp;state );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_getPlayerPosition]] ( int playerID, float pos[3], bool extrapolate );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerRotation]] ( int playerID, float *rot, bool extrapolate );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerVelocity]] ( int playerID, float vel[3] );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerAngVel]] ( int playerID, float *angvel );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerPhysicsDriver]] ( int playerID, int* phydrv );&lt;br /&gt;
&lt;br /&gt;
==== Player Lists and Records ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByIndex]] ( int index );&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByCallsign]] ( const char* name );&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByBZID]] ( int BZID );&lt;br /&gt;
 BZF_API bool [[bz_updatePlayerData]] ( [[bz_BasePlayerRecord]] *playerRecord );&lt;br /&gt;
 BZF_API bool [[bz_freePlayerRecord]] ( [[bz_BasePlayerRecord]] *playerRecord );&lt;br /&gt;
&lt;br /&gt;
 BZF_API [[bz_APIIntList]] *[[bz_newIntList]] ( void );&lt;br /&gt;
 BZF_API [[bz_APIIntList]] *[[bz_getPlayerIndexList]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerIndexList]] ( [[bz_APIIntList]] *playerList );&lt;br /&gt;
 BZF_API void [[bz_deleteIntList]] ( [[bz_APIIntList]] *l);&lt;br /&gt;
&lt;br /&gt;
==== Player Management ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_grantPerm]] ( int playerID, const char* perm );&lt;br /&gt;
 BZF_API bool [[bz_revokePerm]] ( int playerID, const char* perm );&lt;br /&gt;
 BZF_API bool [[bz_validAdminPassword]] ( const char* passwd );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerOperator]] ( int playerId );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_setPlayerSpawnable]]( int playerID, bool spawn );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerLimboMessage]]( int playerID, const char* text );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerCustomData]] (int playerID, const char* key, const char* data );&lt;br /&gt;
&lt;br /&gt;
=== Team Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API unsigned int [[bz_getTeamPlayerLimit]] ( bz_eTeamType team )&lt;br /&gt;
 BZF_API int [[bz_getTeamCount]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API int [[bz_getTeamScore]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API int [[bz_getTeamWins]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API int [[bz_getTeamLosses]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API void [[bz_setTeamWins]] ([[bz_eTeamType]] team, int wins );&lt;br /&gt;
 BZF_API void [[bz_setTeamLosses]] ([[bz_eTeamType]] team, int losses );&lt;br /&gt;
 BZF_API void [[bz_resetTeamScore]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API void [[bz_resetTeamScores]] ( void );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API void [[bz_changeTeam]]( int player, [[bz_eTeamType]] team );&lt;br /&gt;
&lt;br /&gt;
=== Score Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_setPlayerWins]] ( int playerId, int wins );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerLosses]] ( int playerId, int losses );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerTKs]] ( int playerId, int tks );&lt;br /&gt;
 BZF_API bool [[bz_resetPlayerScore]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPlayerWins]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPlayerLosses]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPlayerTKs]] ( int playerId );&lt;br /&gt;
 BZF_API float [[bz_getPlayerRank]] ( int playerId );&lt;br /&gt;
&lt;br /&gt;
=== Latency Information ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API int [[bz_getPlayerLag]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPlayerJitter]] ( int playerId );&lt;br /&gt;
 BZF_API float [[bz_getPlayerPacketloss]] ( int playerId );&lt;br /&gt;
&lt;br /&gt;
=== Permission Group Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API [[bz_APIStringList]]* [[bz_getGroupList]] ( void );&lt;br /&gt;
 BZF_API [[bz_APIStringList]]* [[bz_getGroupPerms]] ( const char* group );&lt;br /&gt;
 BZF_API bool [[bz_groupAllowPerm]] ( const char* group, const char* perm );&lt;br /&gt;
&lt;br /&gt;
=== Chat Messages ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_sendTextMessage]] (int from, int to, const char* message);&lt;br /&gt;
 BZF_API bool [[bz_sendTextMessage]] (int from, [[bz_eTeamType]] to, const char* message);&lt;br /&gt;
 BZF_API bool [[bz_sendTextMessagef]] (int from, int to, const char* fmt, ...);&lt;br /&gt;
 BZF_API bool [[bz_sendTextMessagef]] (int from, [[bz_eTeamType]] to, const char* fmt, ...);&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_sendFetchResMessage]] ( int playerID,  const char* URL );&lt;br /&gt;
 BZF_API bool [[bz_sendJoinServer]] ( int playerID, const char* address, int port, int team, const char* referrer, const char* message );&lt;br /&gt;
 BZF_API bool [[bz_sendLuaData]] ( int dstPlayerID, int dstScriptID, int statusBits, const char* data, int len,&lt;br /&gt;
                               int srcPlayerID = 0, int srcScriptID = 0 );&lt;br /&gt;
&lt;br /&gt;
=== Server Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_restart]] ( void );&lt;br /&gt;
 BZF_API void [[bz_shutdown]] ();&lt;br /&gt;
 BZF_API void [[bz_superkill]] ();&lt;br /&gt;
 BZF_API void [[bz_gameOver]] ( int playerID, bz_eTeamType = eNoTeam );&lt;br /&gt;
 BZF_API void [[bz_reloadLocalBans]] ();&lt;br /&gt;
 BZF_API void [[bz_reloadMasterBans]] ();&lt;br /&gt;
 BZF_API void [[bz_reloadGroups]] ();&lt;br /&gt;
 BZF_API void [[bz_reloadUsers]] ();&lt;br /&gt;
 BZF_API void [[bz_reloadHelp]] ();&lt;br /&gt;
?&lt;br /&gt;
 BZF_API int [[bz_getPlayerCount]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_anyPlayers]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Rabbit Hunt ===&lt;br /&gt;
?&lt;br /&gt;
 BZF_API void [[bz_newRabbit]] ( int player, bool swap );&lt;br /&gt;
 BZF_API void [[bz_removeRabbit]] ( int player );&lt;br /&gt;
&lt;br /&gt;
=== Map Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API void [[bz_setClientWorldDownloadURL]] ( const char* URL );&lt;br /&gt;
 BZF_API const [[bzApiString]] [[bz_getClientWorldDownloadURL]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_saveWorldCacheFile]] ( const char* file );&lt;br /&gt;
&lt;br /&gt;
=== Flag Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_givePlayerFlag]] ( int playerID, const char* flagType, bool force );&lt;br /&gt;
 BZF_API bool [[bz_removePlayerFlag]] ( int playerID );&lt;br /&gt;
 BZF_API void [[bz_resetFlags]] ( bool onlyUnused );&lt;br /&gt;
 BZF_API unsigned int [[bz_getNumFlags]] ( void );&lt;br /&gt;
 BZF_API const [[bz_ApiString]] [[bz_getFlagName]] ( int flag );&lt;br /&gt;
 BZF_API bool [[bz_resetFlag]] ( int flag );&lt;br /&gt;
 BZF_API int [[bz_flagPlayer]] ( int flag );&lt;br /&gt;
 BZF_API bool [[bz_getFlagPosition]] ( int flag, float* pos );&lt;br /&gt;
 BZF_API bool [[bz_moveFlag]] ( int flag, float pos[3], bool reset = true );&lt;br /&gt;
 BZF_API bool [[bz_RegisterCustomFlag]] ( const char* abbr, const char* name, const char* helpString, bz_eShotType shotType, bz_eFlagQuality quality );&lt;br /&gt;
&lt;br /&gt;
=== Shot Type Control ===&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_setPlayerShotType]] ( int playerId, [[bz_eShotType]] shotType );&lt;br /&gt;
&lt;br /&gt;
=== World Weapon Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_fireWorldWep]] ( const char* flagType, float lifetime, int fromPlayer, float *pos, float tilt, float direction, int shotID , float dt );&lt;br /&gt;
 BZF_API int [[bz_fireWorldGM]] ( int targetPlayerID, float lifetime, float *pos, float tilt, float direction, float dt );&lt;br /&gt;
&lt;br /&gt;
=== Server Time ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API double [[bz_getCurrentTime]] ( void );&lt;br /&gt;
 BZF_API float [[bz_getMaxWaitTime]] ( void );&lt;br /&gt;
 BZF_API void [[bz_setMaxWaitTime]] ( float maxTime );&lt;br /&gt;
 BZF_API void [[bz_getLocaltime]] ( [[bz_Time]] *ts );&lt;br /&gt;
 BZF_API void [[bz_getUTCtime]] ( [[bz_Time]] *ts );&lt;br /&gt;
&lt;br /&gt;
=== Global Database Management (BZDB) ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API double [[bz_getBZDBDouble]] ( const char* variable );&lt;br /&gt;
 BZF_API [[bz_ApiString]] [[bz_getBZDBString]] ( const char* variable );&lt;br /&gt;
 BZF_API bool [[bz_getBZDBBool]] ( const char* variable );&lt;br /&gt;
 BZF_API int [[bz_getBZDBInt]] ( const char* variable );&lt;br /&gt;
 BZF_API int [[bz_getBZDBItemPerms]] ( const char* variable );&lt;br /&gt;
 BZF_API bool [[bz_getBZDBItemPesistent]] ( const char* variable );&lt;br /&gt;
 BZF_API bool [[bz_BZDBItemExists]] ( const char* variable );&lt;br /&gt;
 BZF_API bool [[bz_setBZDBDouble]] ( const char* variable, double val, int perms = 0, bool persistent = false );&lt;br /&gt;
 BZF_API bool [[bz_setBZDBString]] ( const char* variable, const char *val, int perms = 0, bool persistent = false  );&lt;br /&gt;
 BZF_API bool [[bz_setBZDBBool]] ( const char* variable, bool val, int perms = 0, bool persistent = false  );&lt;br /&gt;
 BZF_API bool [[bz_setBZDBInt]] ( const char* variable, int val, int perms = 0, bool persistent = false  );&lt;br /&gt;
 BZF_API int [[bz_getBZDBVarList]] ( bz_APIStringList	*varList );&lt;br /&gt;
 BZF_API void [[bz_resetBZDBVar]] ( const char* variable );&lt;br /&gt;
 BZF_API void [[bz_resetALLBZDBVars]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API void [[bz_debugMessage]] ( int level, const char* message );&lt;br /&gt;
 BZF_API void [[bz_debugMessagef]] ( int level, const char* fmt, ... )&lt;br /&gt;
 BZF_API int [[bz_getDebugLevel]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Server Administration ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_kickUser]] ( int playerIndex, const char* reason, bool notify );&lt;br /&gt;
 BZF_API bool [[bz_IPBanUser]] ( int bannedByIndex, const char* ip, int duration, const char* reason );&lt;br /&gt;
 BZF_API bool [[bz_HostBanUser]] ( int bannedByIndex, const char* hostmask, int duration, const char* reason );&lt;br /&gt;
 BZF_API bool [[bz_IPUnbanUser]] ( const char* ip );&lt;br /&gt;
 BZF_API bool [[bz_IDUnbanUser]] ( const char* bzID );&lt;br /&gt;
 BZF_API bool [[bz_HostUnbanUser]] ( const char* hostmask );&lt;br /&gt;
 &lt;br /&gt;
 BZF_API int [[bz_getLagWarn]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_setLagWarn]] ( int lagwarn );&lt;br /&gt;
 BZF_API bool [[bz_pollActive]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_pollVeto]] ( void );&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_IDBanUser]] ( int bannedByIndex, const char* bzID , int duration, const char *reason );&lt;br /&gt;
&lt;br /&gt;
=== Reporting ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API [[bz_APIStringList]]* [[bz_getReports]] ( void );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API unsigned int [[bz_getReportCount]] ( void );&lt;br /&gt;
 BZF_API const char* [[bz_getReportSource]] ( unsigned int id );&lt;br /&gt;
 BZF_API const char* [[bz_getReportBody]] ( unsigned int id );&lt;br /&gt;
 BZF_API const char* [[bz_getReportTime]] ( unsigned int id );&lt;br /&gt;
 BZF_API bool [[bz_clearReport]] ( unsigned int id );&lt;br /&gt;
 BZF_API bool [[bz_clearAllReports]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_fileReport]] ( const char* message, const char* from );&lt;br /&gt;
&lt;br /&gt;
=== Timed Game Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_setTimeLimit]] ( float timeLimit );&lt;br /&gt;
 BZF_API float [[bz_getTimeLimit]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_isTimeManualStart]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_isCountDownActive]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_isCountDownInProgress]] ( void );&lt;br /&gt;
 BZF_API void [[bz_pauseCountdown]] ( const char *pausedBy );&lt;br /&gt;
 BZF_API void [[bz_resumeCountdown]] ( const char *resumedBy );&lt;br /&gt;
 BZF_API void [[bz_startCountdown]] ( int delay, float limit, const char *byWho );&lt;br /&gt;
&lt;br /&gt;
=== Custom Text Commands ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_registerCustomSlashCommand]] ( const char* command, [[bz_CustomSlashCommandHandler]] *handler );&lt;br /&gt;
 BZF_API bool [[bz_removeCustomSlashCommand]] ( const char* command );&lt;br /&gt;
&lt;br /&gt;
=== Plug-in Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API int [[bz_getLoadedPlugins]] ( [[bz_APIStringList]] * list );&lt;br /&gt;
 BZF_API bool [[bz_loadPlugin]] ( const char* path, const char* params );&lt;br /&gt;
 BZF_API bool [[bz_unloadPlugin]] ( const char* path );&lt;br /&gt;
 BZF_API const char* [[bz_pluginBinPath]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_registerCustomPluginHandler]] ( const char* extension, [[bz_APIPluginHandler]] * handler );&lt;br /&gt;
 BZF_API bool [[bz_removeCustomPluginHandler]] ( const char* extension, [[bz_APIPluginHandler]] * handler );&lt;br /&gt;
&lt;br /&gt;
=== Public Server Information ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_getPublic]] ( void );&lt;br /&gt;
 BZF_API [[bz_ApiString]] [[bz_getPublicAddr]] ( void );&lt;br /&gt;
 BZF_API [[bz_ApiString]] [[bz_getPublicDescription]] ( void );&lt;br /&gt;
 BZF_API int [[bz_getPublicPort]] ( void );&lt;br /&gt;
 BZF_API void [[bz_updateListServer]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== HTTP Transfer ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_addURLJob]] ( const char* URL, [[bz_BaseURLHandler]]* handler = NULL, const char* postData = NULL );&lt;br /&gt;
 BZF_API bool [[bz_removeURLJob]] ( const char* URL );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_stopAllURLJobs]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Callback Functions ===&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_registerCallBack]] ( const char* name, [[bz_GenericCallback]] *callback );&lt;br /&gt;
 BZF_API bool [[bz_registerCallBack]] ( const char* name, [[bz_GenericCallbackFunc]] callback );&lt;br /&gt;
 BZF_API bool [[bz_removeCallBack]] ( const char* name, [[bz_GenericCallback]] *callback );&lt;br /&gt;
 BZF_API bool [[bz_removeCallBack]] ( const char* name, [[bz_GenericCallbackFunc]] callback );&lt;br /&gt;
 BZF_API bool [[bz_callCallback]] ( const char* name, void *param );&lt;br /&gt;
 BZF_API bool [[bz_callbackExists]] ( const char* name );&lt;br /&gt;
&lt;br /&gt;
=== Inter-Plug-in Communications ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_clipFieldExists]] ( const char *name );&lt;br /&gt;
 BZF_API const char* [[bz_getclipFieldString]] ( const char *name );&lt;br /&gt;
 BZF_API float [[bz_getclipFieldFloat]] ( const char *name );&lt;br /&gt;
 BZF_API int [[bz_getclipFieldInt]] ( const char *name );&lt;br /&gt;
 BZF_API bool [[bz_setclipFieldString]] ( const char *name, const char* data );&lt;br /&gt;
 BZF_API bool [[bz_setclipFieldFloat]] ( const char *name, float data );&lt;br /&gt;
 BZF_API bool [[bz_setclipFieldInt]] ( const char *name, int data );&lt;br /&gt;
 BZF_API bool [[bz_addClipFieldNotifier]] ( const char *name, [[bz_ClipFiledNotifier *cb );&lt;br /&gt;
 BZF_API bool [[bz_removeClipFieldNotifier]] ( const char *name, [[bz_ClipFiledNotifier *cb );&lt;br /&gt;
&lt;br /&gt;
=== Game Recording ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_saveRecBuf]] ( const char * _filename, int seconds);&lt;br /&gt;
 BZF_API bool [[bz_startRecBuf]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_stopRecBuf]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Map Management ===&lt;br /&gt;
==== Map Information ====&lt;br /&gt;
?&lt;br /&gt;
 BZF_API void [[bz_getWorldSize]] ( float *size, float *wallHeight );&lt;br /&gt;
 BZF_API unsigned int [[bz_getWorldObjectCount]] ( void );&lt;br /&gt;
 BZF_API [[bz_APIWorldObjectList]]* [[bz_getWorldObjectList]] ( void );&lt;br /&gt;
 BZF_API void [[bz_releaseWorldObjectList]] ( [[bz_APIWorldObjectList]] *list );&lt;br /&gt;
 BZF_API unsigned int [[bz_findWorldObject]] ( const char *name );&lt;br /&gt;
 BZF_API [[bz_APIBaseWorldObject]]* [[bz_getWorldObjectByID]] ( unsigned int id );&lt;br /&gt;
 BZF_API bool [[bz_getTeleLinkIDs]] ( const char* teleName, int* frontLink, int* backLink );&lt;br /&gt;
 BZF_API const char* [[bz_getLinkTeleName]] ( int linkIndex );&lt;br /&gt;
 BZF_API int [[bz_getPhyDrvID]] ( const char* phyDrvName );&lt;br /&gt;
 BZF_API const char* [[bz_getPhyDrvName]] ( unsigned int phyDrvID );&lt;br /&gt;
 BZF_API bool [[bz_SetWorldObjectTangibility]] ( int id, const [[bz_SolidObjectPassableAtributes]] &amp;amp;atribs );&lt;br /&gt;
 BZF_API bool [[bz_GetWorldObjectTangibility]] ( int id, [[bz_SolidObjectPassableAtributes]] &amp;amp;atribs );&lt;br /&gt;
 BZF_API void [[bz_ResetWorldObjectTangibilities]] ( void );&lt;br /&gt;
&lt;br /&gt;
==== Map Collisions ====&lt;br /&gt;
?&lt;br /&gt;
 [[bz_eAPIColType]] [[bz_cylinderInMapObject]] ( float pos[3], float height, float radius, [[bz_APIBaseWorldObject]] **object );&lt;br /&gt;
 [[bz_eAPIColType]] [[bz_boxInMapObject]] ( float pos[3], float size[3], float angle, [[bz_APIBaseWorldObject]] **object );&lt;br /&gt;
&lt;br /&gt;
==== Custom Map Objects ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_registerCustomMapObject]] ( const char* object, [[bz_CustomMapObjectHandler]] *handler );&lt;br /&gt;
 BZF_API bool [[bz_removeCustomMapObject]] ( const char* object );&lt;br /&gt;
&lt;br /&gt;
=== Utility ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API const char *[[bz_MD5]] ( const char* str );&lt;br /&gt;
 BZF_API const char *[[bz_MD5]] ( const void* data, size_t size );&lt;br /&gt;
 BZF_API const char *[[bz_getServerVersion]] ( void );&lt;br /&gt;
 BZF_API const char *[[bz_getProtocolVersion]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Misc ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_getStandardSpawn]] ( int playerID, float pos[3], float *rot );&lt;br /&gt;
 BZF_API bool [[bz_killPlayer]] ( int playerID, bool spawnOnBase, int killerID = -1, const char* flagID = NULL );&lt;br /&gt;
 BZF_API bool [[bz_sendPlayCustomLocalSound]] ( int playerID, const char* soundName );&lt;br /&gt;
 BZF_API [[bz_ApiString]] [[bz_filterPath]] ( const char* path );&lt;br /&gt;
 BZF_API const char *[[bz_format]](const char* fmt, ...)_ATTRIBUTE12;&lt;br /&gt;
 BZF_API const char *[[bz_toupper]](const char* val );&lt;br /&gt;
 BZF_API const char *[[bz_tolower]](const char* val );&lt;br /&gt;
 BZF_API const char *[[bz_urlEncode]](const char* val );&lt;br /&gt;
 BZF_API [[bz_eGameType]] [[bz_getGameType]]( void );&lt;br /&gt;
 BZF_API [[bz_eTeamType]] [[bz_checkBaseAtPoint]] ( float pos[3] );&lt;br /&gt;
 BZF_API int [[bz_APIVersion]] ( void );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_allowJumping]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Server Side Players (Development) ===&lt;br /&gt;
? (In API for 2.3+, but will crash a server)&lt;br /&gt;
 BZF_API int [[bz_addServerSidePlayer]] ( [[bz_ServerSidePlayerHandler]] *handler );&lt;br /&gt;
 BZF_API bool [[bz_removeServerSidePlayer]] ( int playerID, [[bz_ServerSidePlayerHandler]] *handler );&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_Functions]]&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_getPublicPort&amp;diff=8094</id>
		<title>Bz getPublicPort</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_getPublicPort&amp;diff=8094"/>
		<updated>2011-10-19T10:45:30Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Create API Function Page. Include Example.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_getPublicPort&lt;br /&gt;
| returns       = A number containing the port the server is communicating through.&lt;br /&gt;
| returntype    = int&lt;br /&gt;
| description   = Retrieves the port the server communicates with. Normally this is specified with the &#039;&#039;&#039;-p&#039;&#039;&#039; BZFS option, but defaults to 5154.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
A simple greeting that tells the player what server and port they are on. This may be useful to remove the hassle of modifying greetings for a server that hosts many ports.&lt;br /&gt;
 case bz_ePlayerJoinEvent: {&lt;br /&gt;
 	if (bz_getPublic()) {&lt;br /&gt;
 		bz_sendTextMessagef(BZ_SERVER,((bz_PlayerJoinPartEventData_V1*)eventData)-&amp;gt;playerID,&amp;quot;Welcome!&amp;quot;);&lt;br /&gt;
 		bz_sendTextMessagef(BZ_SERVER,((bz_PlayerJoinPartEventData_V1*)eventData)-&amp;gt;playerID,&lt;br /&gt;
 			&amp;quot;You are playing on %s&amp;quot;,bz_getPublicDescription().c_str());&lt;br /&gt;
 		bz_sendTextMessagef(BZ_SERVER,((bz_PlayerJoinPartEventData_V1*)eventData)-&amp;gt;playerID,&lt;br /&gt;
 			&amp;quot;           @ %s:%d&amp;quot;,bz_getPublicAddr().c_str(),bz_getPublicPort());&lt;br /&gt;
 	}&lt;br /&gt;
 }break;&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_getPublicDescription&amp;diff=8093</id>
		<title>Bz getPublicDescription</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_getPublicDescription&amp;diff=8093"/>
		<updated>2011-10-19T10:44:23Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Create API Function Page. Include Example.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_getPublicDescription&lt;br /&gt;
| returns       = A string containing the public title / description of the server.&lt;br /&gt;
| returntype    = [[bz_ApiString]]&lt;br /&gt;
| description   = Retrieves the string with the title of the server, generally displayed on the list server when players are finding a game to join. This is what you would specify with the &#039;&#039;&#039;-publictitle&#039;&#039;&#039; BZFS option.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
A simple greeting that tells the player what server and port they are on. This may be useful to remove the hassle of modifying greetings for a server that hosts many ports.&lt;br /&gt;
 case bz_ePlayerJoinEvent: {&lt;br /&gt;
 	if (bz_getPublic()) {&lt;br /&gt;
 		bz_sendTextMessagef(BZ_SERVER,((bz_PlayerJoinPartEventData_V1*)eventData)-&amp;gt;playerID,&amp;quot;Welcome!&amp;quot;);&lt;br /&gt;
 		bz_sendTextMessagef(BZ_SERVER,((bz_PlayerJoinPartEventData_V1*)eventData)-&amp;gt;playerID,&lt;br /&gt;
 			&amp;quot;You are playing on %s&amp;quot;,bz_getPublicDescription().c_str());&lt;br /&gt;
 		bz_sendTextMessagef(BZ_SERVER,((bz_PlayerJoinPartEventData_V1*)eventData)-&amp;gt;playerID,&lt;br /&gt;
 			&amp;quot;           @ %s:%d&amp;quot;,bz_getPublicAddr().c_str(),bz_getPublicPort());&lt;br /&gt;
 	}&lt;br /&gt;
 }break;&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_getPublicAddr&amp;diff=8092</id>
		<title>Bz getPublicAddr</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_getPublicAddr&amp;diff=8092"/>
		<updated>2011-10-19T10:43:30Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Meh, forgot to update the description.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_getPublicAddr&lt;br /&gt;
| returns       = A string containing the public address of the server.&lt;br /&gt;
| returntype    = [[bz_ApiString]]&lt;br /&gt;
| description   = Returns the string that was specified with the BZFS option &#039;&#039;&#039;-publicaddr&#039;&#039;&#039; or the default address that is used when starting up a public server.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
A simple greeting that tells the player what server and port they are on. This may be useful to remove the hassle of modifying greetings for a server that hosts many ports.&lt;br /&gt;
 case bz_ePlayerJoinEvent: {&lt;br /&gt;
 	if (bz_getPublic()) {&lt;br /&gt;
 		bz_sendTextMessagef(BZ_SERVER,((bz_PlayerJoinPartEventData_V1*)eventData)-&amp;gt;playerID,&amp;quot;Welcome!&amp;quot;);&lt;br /&gt;
 		bz_sendTextMessagef(BZ_SERVER,((bz_PlayerJoinPartEventData_V1*)eventData)-&amp;gt;playerID,&lt;br /&gt;
 			&amp;quot;You are playing on %s&amp;quot;,bz_getPublicDescription().c_str());&lt;br /&gt;
 		bz_sendTextMessagef(BZ_SERVER,((bz_PlayerJoinPartEventData_V1*)eventData)-&amp;gt;playerID,&lt;br /&gt;
 			&amp;quot;           @ %s:%d&amp;quot;,bz_getPublicAddr().c_str(),bz_getPublicPort());&lt;br /&gt;
 	}&lt;br /&gt;
 }break;&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_getPublicAddr&amp;diff=8091</id>
		<title>Bz getPublicAddr</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_getPublicAddr&amp;diff=8091"/>
		<updated>2011-10-19T10:41:59Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Create API Function Page. Include Example.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_getPublicAddr&lt;br /&gt;
| returns       = A string containing the public address of the server.&lt;br /&gt;
| returntype    = [[bz_ApiString]]&lt;br /&gt;
| description   = Pauses the countdown that is currently running.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
A simple greeting that tells the player what server and port they are on. This may be useful to remove the hassle of modifying greetings for a server that hosts many ports.&lt;br /&gt;
 case bz_ePlayerJoinEvent: {&lt;br /&gt;
 	if (bz_getPublic()) {&lt;br /&gt;
 		bz_sendTextMessagef(BZ_SERVER,((bz_PlayerJoinPartEventData_V1*)eventData)-&amp;gt;playerID,&amp;quot;Welcome!&amp;quot;);&lt;br /&gt;
 		bz_sendTextMessagef(BZ_SERVER,((bz_PlayerJoinPartEventData_V1*)eventData)-&amp;gt;playerID,&lt;br /&gt;
 			&amp;quot;You are playing on %s&amp;quot;,bz_getPublicDescription().c_str());&lt;br /&gt;
 		bz_sendTextMessagef(BZ_SERVER,((bz_PlayerJoinPartEventData_V1*)eventData)-&amp;gt;playerID,&lt;br /&gt;
 			&amp;quot;           @ %s:%d&amp;quot;,bz_getPublicAddr().c_str(),bz_getPublicPort());&lt;br /&gt;
 	}&lt;br /&gt;
 }break;&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_getPublic&amp;diff=8090</id>
		<title>Bz getPublic</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_getPublic&amp;diff=8090"/>
		<updated>2011-10-19T10:34:50Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Create API Function Page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_getPublic&lt;br /&gt;
| returns       = Whether or not the server is public.&lt;br /&gt;
| returntype    = bool&lt;br /&gt;
| description   = Retrieves whether the server is successfully connecting and authenticating with the list server.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_unloadPlugin&amp;diff=8089</id>
		<title>Bz unloadPlugin</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_unloadPlugin&amp;diff=8089"/>
		<updated>2011-10-19T10:32:48Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Don&amp;#039;t know for sure.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_unloadPlugin&lt;br /&gt;
| returns       = Whether or not the plugin unloaded successfully.&lt;br /&gt;
| returntype    = bool&lt;br /&gt;
| description   = Unloads a plugin that is currently loaded.&lt;br /&gt;
| param1      = path&lt;br /&gt;
| param1type  = const char*&lt;br /&gt;
| param1desc  = The exact path of the plugin file.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
Load the &#039;&#039;&#039;FlagOnSpawn&#039;&#039;&#039; plugin which then gets unloaded the moment a player joins.&lt;br /&gt;
 case bz_eWorldFinalized: {&lt;br /&gt;
 	bz_loadPlugin(&amp;quot;/home/name/path/to/flagOnSpawn.so&amp;quot;,&amp;quot;WG:-1&amp;quot;);&lt;br /&gt;
 }break;&lt;br /&gt;
 case bz_ePlayerJoinEvent: {&lt;br /&gt;
 	bz_unloadPlugin(&amp;quot;/home/name/path/to/flagOnSpawn.so&amp;quot;);&lt;br /&gt;
 }break;&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_loadPlugin&amp;diff=8088</id>
		<title>Bz loadPlugin</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_loadPlugin&amp;diff=8088"/>
		<updated>2011-10-19T10:32:34Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Don&amp;#039;t know for sure.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_loadPlugin&lt;br /&gt;
| returns       = Whether or not the plugin was loaded successfully.&lt;br /&gt;
| returntype    = bool&lt;br /&gt;
| description   = Attempts to load a plugin with the given path and filename along with any passed parameters.&lt;br /&gt;
| param1      = path&lt;br /&gt;
| param1type  = const char*&lt;br /&gt;
| param1desc  = The exact path to the file.&lt;br /&gt;
| param2      = params&lt;br /&gt;
| param2type  = const char*&lt;br /&gt;
| param2desc  = The command separated list of file parameters to pass on to the plugin.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
Attempt to load the &#039;&#039;&#039;FlagOnSpawn&#039;&#039;&#039; plugin with the parameters to give any team a WG flag on spawn when the game starts.&lt;br /&gt;
 case bz_eWorldFinalized: {&lt;br /&gt;
 	bz_loadPlugin(&amp;quot;/home/name/path/to/flagOnSpawn.so&amp;quot;,&amp;quot;WG:-1&amp;quot;);&lt;br /&gt;
 }break;&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_unloadPlugin&amp;diff=8087</id>
		<title>Bz unloadPlugin</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_unloadPlugin&amp;diff=8087"/>
		<updated>2011-10-19T10:25:39Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Create API Function Page. Include Example.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_unloadPlugin&lt;br /&gt;
| returns       = Whether or not the plugin unloaded successfully.&lt;br /&gt;
| returntype    = bool&lt;br /&gt;
| description   = Unloads a plugin that is currently loaded.&lt;br /&gt;
| param1      = path&lt;br /&gt;
| param1type  = const char*&lt;br /&gt;
| param1desc  = The exact path of the plugin file. In addition, it may be locally referenced starting from the path returned by bz_pluginBinPath().&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
Load the &#039;&#039;&#039;FlagOnSpawn&#039;&#039;&#039; plugin which then gets unloaded the moment a player joins.&lt;br /&gt;
 case bz_eWorldFinalized: {&lt;br /&gt;
 	bz_loadPlugin(&amp;quot;/home/name/path/to/flagOnSpawn.so&amp;quot;,&amp;quot;WG:-1&amp;quot;);&lt;br /&gt;
 }break;&lt;br /&gt;
 case bz_ePlayerJoinEvent: {&lt;br /&gt;
 	bz_unloadPlugin(&amp;quot;/home/name/path/to/flagOnSpawn.so&amp;quot;);&lt;br /&gt;
 }break;&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_loadPlugin&amp;diff=8086</id>
		<title>Bz loadPlugin</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_loadPlugin&amp;diff=8086"/>
		<updated>2011-10-19T10:23:38Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Meant to use eWorldFinalized event. The eGameStartEvent isn&amp;#039;t ready for loading plugins just yet.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_loadPlugin&lt;br /&gt;
| returns       = Whether or not the plugin was loaded successfully.&lt;br /&gt;
| returntype    = bool&lt;br /&gt;
| description   = Attempts to load a plugin with the given path and filename along with any passed parameters.&lt;br /&gt;
| param1      = path&lt;br /&gt;
| param1type  = const char*&lt;br /&gt;
| param1desc  = The exact path to the file. In addition, it may be locally referenced starting from the path returned by [[bz_pluginBinPath]]().&lt;br /&gt;
| param2      = params&lt;br /&gt;
| param2type  = const char*&lt;br /&gt;
| param2desc  = The command separated list of file parameters to pass on to the plugin.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
Attempt to load the &#039;&#039;&#039;FlagOnSpawn&#039;&#039;&#039; plugin with the parameters to give any team a WG flag on spawn when the game starts.&lt;br /&gt;
 case bz_eWorldFinalized: {&lt;br /&gt;
 	bz_loadPlugin(&amp;quot;/home/name/path/to/flagOnSpawn.so&amp;quot;,&amp;quot;WG:-1&amp;quot;);&lt;br /&gt;
 }break;&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_loadPlugin&amp;diff=8085</id>
		<title>Bz loadPlugin</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_loadPlugin&amp;diff=8085"/>
		<updated>2011-10-19T10:18:51Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Update to modern template. Include Example.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_loadPlugin&lt;br /&gt;
| returns       = Whether or not the plugin was loaded successfully.&lt;br /&gt;
| returntype    = bool&lt;br /&gt;
| description   = Attempts to load a plugin with the given path and filename along with any passed parameters.&lt;br /&gt;
| param1      = path&lt;br /&gt;
| param1type  = const char*&lt;br /&gt;
| param1desc  = The exact path to the file. In addition, it may be locally referenced starting from the path returned by [[bz_pluginBinPath]]().&lt;br /&gt;
| param2      = params&lt;br /&gt;
| param2type  = const char*&lt;br /&gt;
| param2desc  = The command separated list of file parameters to pass on to the plugin.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
Attempt to load the &#039;&#039;&#039;FlagOnSpawn&#039;&#039;&#039; plugin with the parameters to give any team a WG flag on spawn when the game starts.&lt;br /&gt;
 case bz_eGameStartEvent: {&lt;br /&gt;
 	bz_loadPlugin(&amp;quot;/home/name/path/to/flagOnSpawn.so&amp;quot;,&amp;quot;WG:-1&amp;quot;);&lt;br /&gt;
 }break;&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_getLoadedPlugins&amp;diff=8084</id>
		<title>Bz getLoadedPlugins</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_getLoadedPlugins&amp;diff=8084"/>
		<updated>2011-10-19T10:03:40Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Updated to the modern template. Added example.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_getLoadedPlugins&lt;br /&gt;
| returns       = The number of plugins that are currently loaded.&lt;br /&gt;
| returntype    = int&lt;br /&gt;
| description   = Retrieves the names of all loaded plugins and counts how many of them there are.&lt;br /&gt;
| param1      = list&lt;br /&gt;
| param1type  = [[bz_APIStringList]]*&lt;br /&gt;
| param1desc  = The pointer to a [[bz_APIStringList]] list for storing/appending the plugin names to.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
Displays the list of plugins when a player joins the server, mimicking the output you would expect from the command &#039;&#039;&#039;/listplugins&#039;&#039;&#039;.&lt;br /&gt;
 case bz_ePlayerJoinEvent: {&lt;br /&gt;
 	bz_APIStringList list;&lt;br /&gt;
 	int count=bz_getLoadedPlugins(&amp;amp;list);&lt;br /&gt;
 	for (int i=0;i&amp;lt;count;i++) {&lt;br /&gt;
 		bz_sendTextMessagef(BZ_SERVER,((bz_PlayerJoinPartEventData_V1*)eventData)-&amp;gt;playerID,&amp;quot;%d %s&amp;quot;,i+1,list.get(i).c_str());&lt;br /&gt;
 	}&lt;br /&gt;
 }break;&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8083</id>
		<title>Functions (API)</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8083"/>
		<updated>2011-10-19T09:54:44Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: /* Plug-in Management */ Link to bz_APIStringList for the argument.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DoDoc|&lt;br /&gt;
Fill in articles for all API Functions&amp;lt;br&amp;gt;&lt;br /&gt;
Finish updating to 2.3.x&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{BZFS_API_Doc}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&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;
== Function Groups ==&lt;br /&gt;
Functions are broken into a series of groups based on the type of action or information they deal with.&lt;br /&gt;
&lt;br /&gt;
=== Event Registration ===&lt;br /&gt;
2.0.x&lt;br /&gt;
 BZF_API bool [[bz_registerEvent]] ( [[Event(API)|bz_eEventType]] eventType, [[Event(API)|bz_EventHandler]]* eventHandler );&lt;br /&gt;
 BZF_API bool [[bz_removeEvent]] ( [[Event(API)|bz_eEventType]] eventType, [[Event(API)|bz_EventHandler]]* eventHandler );&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[Register]] ( [[Event(API)|bz_eEventType]] eventType );&lt;br /&gt;
 virtual void Cleanup() {Flush();}&lt;br /&gt;
&lt;br /&gt;
=== Non-Player Connections ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_registerNonPlayerConnectionHandler]] ( int connectionID, [[bz_NonPlayerConnectionHandler]]* handler );&lt;br /&gt;
 BZF_API bool [[bz_removeNonPlayerConnectionHandler]] ( int connectionID, [[bz_NonPlayerConnectionHandler]]* handler );&lt;br /&gt;
 BZF_API bool [[bz_sendNonPlayerData]] ( int connectionID, const void *data, unsigned int size );&lt;br /&gt;
 BZF_API bool [[bz_disconectNonPlayerConnection]] ( int connectionID );&lt;br /&gt;
 BZF_API unsigned int [[bz_getNonPlayerConnectionOutboundPacketCount]] ( int connectionID );&lt;br /&gt;
 BZF_API const char* [[bz_getNonPlayerConnectionIP]] ( int connectionID );&lt;br /&gt;
 BZF_API const char* [[bz_getNonPlayerConnectionHost]] ( int connectionID );&lt;br /&gt;
&lt;br /&gt;
=== Player Information ===&lt;br /&gt;
==== Player Information ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_hasPerm]] ( int playerID, const char* perm );&lt;br /&gt;
 BZF_API bool [[bz_getAdmin]] ( int playerID );&lt;br /&gt;
 BZF_API bz_eTeamType [[bz_getPlayerTeam]] ( int playerID );&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerCallsign]] ( int playerID );&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerIPAddress]] ( int playerID );&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerFlag]] ( int playerID );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerReferrer]] ( int playerID );&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerCustomData]] (int playerID, const char* key );&lt;br /&gt;
&lt;br /&gt;
==== Player State Information ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_isPlayerPaused]] ( int playerID );&lt;br /&gt;
 BZF_API bool [[bz_canPlayerSpawn]]( int playerID );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerCurrentState]] ( int playerID, bz_PlayerUpdateState &amp;amp;state );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_getPlayerPosition]] ( int playerID, float pos[3], bool extrapolate );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerRotation]] ( int playerID, float *rot, bool extrapolate );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerVelocity]] ( int playerID, float vel[3] );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerAngVel]] ( int playerID, float *angvel );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerPhysicsDriver]] ( int playerID, int* phydrv );&lt;br /&gt;
&lt;br /&gt;
==== Player Lists and Records ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByIndex]] ( int index );&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByCallsign]] ( const char* name );&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByBZID]] ( int BZID );&lt;br /&gt;
 BZF_API bool [[bz_updatePlayerData]] ( [[bz_BasePlayerRecord]] *playerRecord );&lt;br /&gt;
 BZF_API bool [[bz_freePlayerRecord]] ( [[bz_BasePlayerRecord]] *playerRecord );&lt;br /&gt;
&lt;br /&gt;
 BZF_API [[bz_APIIntList]] *[[bz_newIntList]] ( void );&lt;br /&gt;
 BZF_API [[bz_APIIntList]] *[[bz_getPlayerIndexList]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerIndexList]] ( [[bz_APIIntList]] *playerList );&lt;br /&gt;
 BZF_API void [[bz_deleteIntList]] ( [[bz_APIIntList]] *l);&lt;br /&gt;
&lt;br /&gt;
==== Player Management ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_grantPerm]] ( int playerID, const char* perm );&lt;br /&gt;
 BZF_API bool [[bz_revokePerm]] ( int playerID, const char* perm );&lt;br /&gt;
 BZF_API bool [[bz_validAdminPassword]] ( const char* passwd );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerOperator]] ( int playerId );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_setPlayerSpawnable]]( int playerID, bool spawn );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerLimboMessage]]( int playerID, const char* text );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerCustomData]] (int playerID, const char* key, const char* data );&lt;br /&gt;
&lt;br /&gt;
=== Team Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API unsigned int [[bz_getTeamPlayerLimit]] ( bz_eTeamType team )&lt;br /&gt;
 BZF_API int [[bz_getTeamCount]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API int [[bz_getTeamScore]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API int [[bz_getTeamWins]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API int [[bz_getTeamLosses]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API void [[bz_setTeamWins]] ([[bz_eTeamType]] team, int wins );&lt;br /&gt;
 BZF_API void [[bz_setTeamLosses]] ([[bz_eTeamType]] team, int losses );&lt;br /&gt;
 BZF_API void [[bz_resetTeamScore]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API void [[bz_resetTeamScores]] ( void );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API void [[bz_changeTeam]]( int player, [[bz_eTeamType]] team );&lt;br /&gt;
&lt;br /&gt;
=== Score Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_setPlayerWins]] ( int playerId, int wins );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerLosses]] ( int playerId, int losses );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerTKs]] ( int playerId, int tks );&lt;br /&gt;
 BZF_API bool [[bz_resetPlayerScore]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPlayerWins]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPlayerLosses]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPlayerTKs]] ( int playerId );&lt;br /&gt;
 BZF_API float [[bz_getPlayerRank]] ( int playerId );&lt;br /&gt;
&lt;br /&gt;
=== Latency Information ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API int [[bz_getPlayerLag]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPlayerJitter]] ( int playerId );&lt;br /&gt;
 BZF_API float [[bz_getPlayerPacketloss]] ( int playerId );&lt;br /&gt;
&lt;br /&gt;
=== Permission Group Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API [[bz_APIStringList]]* [[bz_getGroupList]] ( void );&lt;br /&gt;
 BZF_API [[bz_APIStringList]]* [[bz_getGroupPerms]] ( const char* group );&lt;br /&gt;
 BZF_API bool [[bz_groupAllowPerm]] ( const char* group, const char* perm );&lt;br /&gt;
&lt;br /&gt;
=== Chat Messages ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_sendTextMessage]] (int from, int to, const char* message);&lt;br /&gt;
 BZF_API bool [[bz_sendTextMessage]] (int from, [[bz_eTeamType]] to, const char* message);&lt;br /&gt;
 BZF_API bool [[bz_sendTextMessagef]] (int from, int to, const char* fmt, ...);&lt;br /&gt;
 BZF_API bool [[bz_sendTextMessagef]] (int from, [[bz_eTeamType]] to, const char* fmt, ...);&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_sendFetchResMessage]] ( int playerID,  const char* URL );&lt;br /&gt;
 BZF_API bool [[bz_sendJoinServer]] ( int playerID, const char* address, int port, int team, const char* referrer, const char* message );&lt;br /&gt;
 BZF_API bool [[bz_sendLuaData]] ( int dstPlayerID, int dstScriptID, int statusBits, const char* data, int len,&lt;br /&gt;
                               int srcPlayerID = 0, int srcScriptID = 0 );&lt;br /&gt;
&lt;br /&gt;
=== Server Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_restart]] ( void );&lt;br /&gt;
 BZF_API void [[bz_shutdown]] ();&lt;br /&gt;
 BZF_API void [[bz_superkill]] ();&lt;br /&gt;
 BZF_API void [[bz_gameOver]] ( int playerID, bz_eTeamType = eNoTeam );&lt;br /&gt;
 BZF_API void [[bz_reloadLocalBans]] ();&lt;br /&gt;
 BZF_API void [[bz_reloadMasterBans]] ();&lt;br /&gt;
 BZF_API void [[bz_reloadGroups]] ();&lt;br /&gt;
 BZF_API void [[bz_reloadUsers]] ();&lt;br /&gt;
 BZF_API void [[bz_reloadHelp]] ();&lt;br /&gt;
?&lt;br /&gt;
 BZF_API int [[bz_getPlayerCount]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_anyPlayers]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Rabbit Hunt ===&lt;br /&gt;
?&lt;br /&gt;
 BZF_API void [[bz_newRabbit]] ( int player, bool swap );&lt;br /&gt;
 BZF_API void [[bz_removeRabbit]] ( int player );&lt;br /&gt;
&lt;br /&gt;
=== Map Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API void [[bz_setClientWorldDownloadURL]] ( const char* URL );&lt;br /&gt;
 BZF_API const [[bzApiString]] [[bz_getClientWorldDownloadURL]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_saveWorldCacheFile]] ( const char* file );&lt;br /&gt;
&lt;br /&gt;
=== Flag Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_givePlayerFlag]] ( int playerID, const char* flagType, bool force );&lt;br /&gt;
 BZF_API bool [[bz_removePlayerFlag]] ( int playerID );&lt;br /&gt;
 BZF_API void [[bz_resetFlags]] ( bool onlyUnused );&lt;br /&gt;
 BZF_API unsigned int [[bz_getNumFlags]] ( void );&lt;br /&gt;
 BZF_API const [[bz_ApiString]] [[bz_getFlagName]] ( int flag );&lt;br /&gt;
 BZF_API bool [[bz_resetFlag]] ( int flag );&lt;br /&gt;
 BZF_API int [[bz_flagPlayer]] ( int flag );&lt;br /&gt;
 BZF_API bool [[bz_getFlagPosition]] ( int flag, float* pos );&lt;br /&gt;
 BZF_API bool [[bz_moveFlag]] ( int flag, float pos[3], bool reset = true );&lt;br /&gt;
 BZF_API bool [[bz_RegisterCustomFlag]] ( const char* abbr, const char* name, const char* helpString, bz_eShotType shotType, bz_eFlagQuality quality );&lt;br /&gt;
&lt;br /&gt;
=== Shot Type Control ===&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_setPlayerShotType]] ( int playerId, [[bz_eShotType]] shotType );&lt;br /&gt;
&lt;br /&gt;
=== World Weapon Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_fireWorldWep]] ( const char* flagType, float lifetime, int fromPlayer, float *pos, float tilt, float direction, int shotID , float dt );&lt;br /&gt;
 BZF_API int [[bz_fireWorldGM]] ( int targetPlayerID, float lifetime, float *pos, float tilt, float direction, float dt );&lt;br /&gt;
&lt;br /&gt;
=== Server Time ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API double [[bz_getCurrentTime]] ( void );&lt;br /&gt;
 BZF_API float [[bz_getMaxWaitTime]] ( void );&lt;br /&gt;
 BZF_API void [[bz_setMaxWaitTime]] ( float maxTime );&lt;br /&gt;
 BZF_API void [[bz_getLocaltime]] ( [[bz_Time]] *ts );&lt;br /&gt;
 BZF_API void [[bz_getUTCtime]] ( [[bz_Time]] *ts );&lt;br /&gt;
&lt;br /&gt;
=== Global Database Management (BZDB) ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API double [[bz_getBZDBDouble]] ( const char* variable );&lt;br /&gt;
 BZF_API [[bz_ApiString]] [[bz_getBZDBString]] ( const char* variable );&lt;br /&gt;
 BZF_API bool [[bz_getBZDBBool]] ( const char* variable );&lt;br /&gt;
 BZF_API int [[bz_getBZDBInt]] ( const char* variable );&lt;br /&gt;
 BZF_API int [[bz_getBZDBItemPerms]] ( const char* variable );&lt;br /&gt;
 BZF_API bool [[bz_getBZDBItemPesistent]] ( const char* variable );&lt;br /&gt;
 BZF_API bool [[bz_BZDBItemExists]] ( const char* variable );&lt;br /&gt;
 BZF_API bool [[bz_setBZDBDouble]] ( const char* variable, double val, int perms = 0, bool persistent = false );&lt;br /&gt;
 BZF_API bool [[bz_setBZDBString]] ( const char* variable, const char *val, int perms = 0, bool persistent = false  );&lt;br /&gt;
 BZF_API bool [[bz_setBZDBBool]] ( const char* variable, bool val, int perms = 0, bool persistent = false  );&lt;br /&gt;
 BZF_API bool [[bz_setBZDBInt]] ( const char* variable, int val, int perms = 0, bool persistent = false  );&lt;br /&gt;
 BZF_API int [[bz_getBZDBVarList]] ( bz_APIStringList	*varList );&lt;br /&gt;
 BZF_API void [[bz_resetBZDBVar]] ( const char* variable );&lt;br /&gt;
 BZF_API void [[bz_resetALLBZDBVars]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API void [[bz_debugMessage]] ( int level, const char* message );&lt;br /&gt;
 BZF_API void [[bz_debugMessagef]] ( int level, const char* fmt, ... )&lt;br /&gt;
 BZF_API int [[bz_getDebugLevel]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Server Administration ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_kickUser]] ( int playerIndex, const char* reason, bool notify );&lt;br /&gt;
 BZF_API bool [[bz_IPBanUser]] ( int bannedByIndex, const char* ip, int duration, const char* reason );&lt;br /&gt;
 BZF_API bool [[bz_HostBanUser]] ( int bannedByIndex, const char* hostmask, int duration, const char* reason );&lt;br /&gt;
 BZF_API bool [[bz_IPUnbanUser]] ( const char* ip );&lt;br /&gt;
 BZF_API bool [[bz_IDUnbanUser]] ( const char* bzID );&lt;br /&gt;
 BZF_API bool [[bz_HostUnbanUser]] ( const char* hostmask );&lt;br /&gt;
 &lt;br /&gt;
 BZF_API int [[bz_getLagWarn]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_setLagWarn]] ( int lagwarn );&lt;br /&gt;
 BZF_API bool [[bz_pollActive]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_pollVeto]] ( void );&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_IDBanUser]] ( int bannedByIndex, const char* bzID , int duration, const char *reason );&lt;br /&gt;
&lt;br /&gt;
=== Reporting ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API [[bz_APIStringList]]* [[bz_getReports]] ( void );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API unsigned int [[bz_getReportCount]] ( void );&lt;br /&gt;
 BZF_API const char* [[bz_getReportSource]] ( unsigned int id );&lt;br /&gt;
 BZF_API const char* [[bz_getReportBody]] ( unsigned int id );&lt;br /&gt;
 BZF_API const char* [[bz_getReportTime]] ( unsigned int id );&lt;br /&gt;
 BZF_API bool [[bz_clearReport]] ( unsigned int id );&lt;br /&gt;
 BZF_API bool [[bz_clearAllReports]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_fileReport]] ( const char* message, const char* from );&lt;br /&gt;
&lt;br /&gt;
=== Timed Game Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_setTimeLimit]] ( float timeLimit );&lt;br /&gt;
 BZF_API float [[bz_getTimeLimit]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_isTimeManualStart]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_isCountDownActive]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_isCountDownInProgress]] ( void );&lt;br /&gt;
 BZF_API void [[bz_pauseCountdown]] ( const char *pausedBy );&lt;br /&gt;
 BZF_API void [[bz_resumeCountdown]] ( const char *resumedBy );&lt;br /&gt;
 BZF_API void [[bz_startCountdown]] ( int delay, float limit, const char *byWho );&lt;br /&gt;
&lt;br /&gt;
=== Custom Text Commands ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_registerCustomSlashCommand]] ( const char* command, [[bz_CustomSlashCommandHandler]] *handler );&lt;br /&gt;
 BZF_API bool [[bz_removeCustomSlashCommand]] ( const char* command );&lt;br /&gt;
&lt;br /&gt;
=== Plug-in Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API int [[bz_getLoadedPlugins]] ( [[bz_APIStringList]] * list );&lt;br /&gt;
 BZF_API bool [[bz_loadPlugin]] ( const char* path, const char* params );&lt;br /&gt;
 BZF_API bool [[bz_unloadPlugin]] ( const char* path );&lt;br /&gt;
 BZF_API const char* [[bz_pluginBinPath]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_registerCustomPluginHandler]] ( const char* extension, [[bz_APIPluginHandler]] * handler );&lt;br /&gt;
 BZF_API bool [[bz_removeCustomPluginHandler]] ( const char* extension, [[bz_APIPluginHandler]] * handler );&lt;br /&gt;
&lt;br /&gt;
=== Public Server Information ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_getPublic]] ( void );&lt;br /&gt;
 BZF_API [[bz_ApiString]] [[bz_getPublicAddr]] ( void );&lt;br /&gt;
 BZF_API [[bz_ApiString]] [[bz_getPublicDescription]] ( void );&lt;br /&gt;
 BZF_API int [[bz_getPublicPort]] ( void );&lt;br /&gt;
 BZF_API void [[bz_updateListServer]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== HTTP Transfer ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_addURLJob]] ( const char* URL, [[bz_BaseURLHandler]]* handler = NULL, const char* postData = NULL );&lt;br /&gt;
 BZF_API bool [[bz_removeURLJob]] ( const char* URL );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_stopAllURLJobs]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Callback Functions ===&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_registerCallBack]] ( const char* name, [[bz_GenericCallback]] *callback );&lt;br /&gt;
 BZF_API bool [[bz_registerCallBack]] ( const char* name, [[bz_GenericCallbackFunc]] callback );&lt;br /&gt;
 BZF_API bool [[bz_removeCallBack]] ( const char* name, [[bz_GenericCallback]] *callback );&lt;br /&gt;
 BZF_API bool [[bz_removeCallBack]] ( const char* name, [[bz_GenericCallbackFunc]] callback );&lt;br /&gt;
 BZF_API bool [[bz_callCallback]] ( const char* name, void *param );&lt;br /&gt;
 BZF_API bool [[bz_callbackExists]] ( const char* name );&lt;br /&gt;
&lt;br /&gt;
=== Inter-Plug-in Communications ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_clipFieldExists]] ( const char *name );&lt;br /&gt;
 BZF_API const char* [[bz_getclipFieldString]] ( const char *name );&lt;br /&gt;
 BZF_API float [[bz_getclipFieldFloat]] ( const char *name );&lt;br /&gt;
 BZF_API int [[bz_getclipFieldInt]] ( const char *name );&lt;br /&gt;
 BZF_API bool [[bz_setclipFieldString]] ( const char *name, const char* data );&lt;br /&gt;
 BZF_API bool [[bz_setclipFieldFloat]] ( const char *name, float data );&lt;br /&gt;
 BZF_API bool [[bz_setclipFieldInt]] ( const char *name, int data );&lt;br /&gt;
 BZF_API bool [[bz_addClipFieldNotifier]] ( const char *name, [[bz_ClipFiledNotifier *cb );&lt;br /&gt;
 BZF_API bool [[bz_removeClipFieldNotifier]] ( const char *name, [[bz_ClipFiledNotifier *cb );&lt;br /&gt;
&lt;br /&gt;
=== Game Recording ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_saveRecBuf]] ( const char * _filename, int seconds);&lt;br /&gt;
 BZF_API bool [[bz_startRecBuf]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_stopRecBuf]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Map Management ===&lt;br /&gt;
==== Map Information ====&lt;br /&gt;
?&lt;br /&gt;
 BZF_API void [[bz_getWorldSize]] ( float *size, float *wallHeight );&lt;br /&gt;
 BZF_API unsigned int [[bz_getWorldObjectCount]] ( void );&lt;br /&gt;
 BZF_API [[bz_APIWorldObjectList]]* [[bz_getWorldObjectList]] ( void );&lt;br /&gt;
 BZF_API void [[bz_releaseWorldObjectList]] ( [[bz_APIWorldObjectList]] *list );&lt;br /&gt;
 BZF_API unsigned int [[bz_findWorldObject]] ( const char *name );&lt;br /&gt;
 BZF_API [[bz_APIBaseWorldObject]]* [[bz_getWorldObjectByID]] ( unsigned int id );&lt;br /&gt;
 BZF_API bool [[bz_getTeleLinkIDs]] ( const char* teleName, int* frontLink, int* backLink );&lt;br /&gt;
 BZF_API const char* [[bz_getLinkTeleName]] ( int linkIndex );&lt;br /&gt;
 BZF_API int [[bz_getPhyDrvID]] ( const char* phyDrvName );&lt;br /&gt;
 BZF_API const char* [[bz_getPhyDrvName]] ( unsigned int phyDrvID );&lt;br /&gt;
 BZF_API bool [[bz_SetWorldObjectTangibility]] ( int id, const [[bz_SolidObjectPassableAtributes]] &amp;amp;atribs );&lt;br /&gt;
 BZF_API bool [[bz_GetWorldObjectTangibility]] ( int id, [[bz_SolidObjectPassableAtributes]] &amp;amp;atribs );&lt;br /&gt;
 BZF_API void [[bz_ResetWorldObjectTangibilities]] ( void );&lt;br /&gt;
&lt;br /&gt;
==== Map Collisions ====&lt;br /&gt;
?&lt;br /&gt;
 [[bz_eAPIColType]] [[bz_cylinderInMapObject]] ( float pos[3], float height, float radius, [[bz_APIBaseWorldObject]] **object );&lt;br /&gt;
 [[bz_eAPIColType]] [[bz_boxInMapObject]] ( float pos[3], float size[3], float angle, [[bz_APIBaseWorldObject]] **object );&lt;br /&gt;
&lt;br /&gt;
==== Custom Map Objects ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_registerCustomMapObject]] ( const char* object, [[bz_CustomMapObjectHandler]] *handler );&lt;br /&gt;
 BZF_API bool [[bz_removeCustomMapObject]] ( const char* object );&lt;br /&gt;
&lt;br /&gt;
=== Utility ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API const char *[[bz_MD5]] ( const char* str );&lt;br /&gt;
 BZF_API const char *[[bz_MD5]] ( const void* data, size_t size );&lt;br /&gt;
 BZF_API const char *[[bz_getServerVersion]] ( void );&lt;br /&gt;
 BZF_API const char *[[bz_getProtocolVersion]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Misc ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_getStandardSpawn]] ( int playerID, float pos[3], float *rot );&lt;br /&gt;
 BZF_API bool [[bz_killPlayer]] ( int playerID, bool spawnOnBase, int killerID = -1, const char* flagID = NULL );&lt;br /&gt;
 BZF_API bool [[bz_sendPlayCustomLocalSound]] ( int playerID, const char* soundName );&lt;br /&gt;
 BZF_API [[bz_ApiString]] [[bz_filterPath]] ( const char* path );&lt;br /&gt;
 BZF_API const char *[[bz_format]](const char* fmt, ...)_ATTRIBUTE12;&lt;br /&gt;
 BZF_API const char *[[bz_toupper]](const char* val );&lt;br /&gt;
 BZF_API const char *[[bz_tolower]](const char* val );&lt;br /&gt;
 BZF_API const char *[[bz_urlEncode]](const char* val );&lt;br /&gt;
 BZF_API [[bz_eGameType]] [[bz_getGameType]]( void );&lt;br /&gt;
 BZF_API [[bz_eTeamType]] [[bz_checkBaseAtPoint]] ( float pos[3] );&lt;br /&gt;
 BZF_API int [[bz_APIVersion]] ( void );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_allowJumping]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Server Side Players (Development) ===&lt;br /&gt;
? (In API for 2.3+, but will crash a server)&lt;br /&gt;
 BZF_API int [[bz_addServerSidePlayer]] ( [[bz_ServerSidePlayerHandler]] *handler );&lt;br /&gt;
 BZF_API bool [[bz_removeServerSidePlayer]] ( int playerID, [[bz_ServerSidePlayerHandler]] *handler );&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_Functions]]&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_getPlayerRank&amp;diff=8082</id>
		<title>Bz getPlayerRank</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_getPlayerRank&amp;diff=8082"/>
		<updated>2011-10-19T09:51:00Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Removed version 2.99.x requirement.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name        = bz_getPlayerRank&lt;br /&gt;
| description = Returns the rank of the player given.&lt;br /&gt;
| param1      = playerId&lt;br /&gt;
| param1type  = int&lt;br /&gt;
| param1desc  = Player to lookup.&lt;br /&gt;
| returntype  = float&lt;br /&gt;
| returns     = Rank of the player.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_getPlayerTKs&amp;diff=8081</id>
		<title>Bz getPlayerTKs</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_getPlayerTKs&amp;diff=8081"/>
		<updated>2011-10-19T09:50:41Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Removed version 2.99.x requirement.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name        = bz_getPlayerTKs&lt;br /&gt;
| description = Returns the amount of TKs for the player given.&lt;br /&gt;
| param1      = playerId&lt;br /&gt;
| param1type  = int&lt;br /&gt;
| param1desc  = Player to lookup.&lt;br /&gt;
| returntype  = int&lt;br /&gt;
| returns     = Amount of TKs the player has.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_getPlayerLosses&amp;diff=8080</id>
		<title>Bz getPlayerLosses</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_getPlayerLosses&amp;diff=8080"/>
		<updated>2011-10-19T09:50:23Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Removed version 2.99.x requirement.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name        = bz_getPlayerLosses&lt;br /&gt;
| description = Returns the amount of losses for the player given.&lt;br /&gt;
| param1      = playerId&lt;br /&gt;
| param1type  = int&lt;br /&gt;
| param1desc  = Player to lookup.&lt;br /&gt;
| returntype  = int&lt;br /&gt;
| returns     = Amount of losses of the player.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_getPlayerWins&amp;diff=8079</id>
		<title>Bz getPlayerWins</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_getPlayerWins&amp;diff=8079"/>
		<updated>2011-10-19T09:50:05Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Removed version 2.99.x requirement.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name        = bz_getPlayerWins&lt;br /&gt;
| description = Returns the amount of wins for the player given.&lt;br /&gt;
| param1      = playerId&lt;br /&gt;
| param1type  = int&lt;br /&gt;
| param1desc  = Player to lookup.&lt;br /&gt;
| returntype  = int&lt;br /&gt;
| returns     = Amount of wins of the player.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_resetPlayerScore&amp;diff=8078</id>
		<title>Bz resetPlayerScore</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_resetPlayerScore&amp;diff=8078"/>
		<updated>2011-10-19T09:49:48Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Removed version 2.99.x requirement.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_resetPlayerScore&lt;br /&gt;
| description   = Resets the score of a player.&lt;br /&gt;
| param1        = playerID&lt;br /&gt;
| param1type    = int&lt;br /&gt;
| param1desc    = The player who is affected by the reset.&lt;br /&gt;
| returntype    = bool&lt;br /&gt;
| return        = Whether the player exists.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_setPlayerWins&amp;diff=8077</id>
		<title>Bz setPlayerWins</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_setPlayerWins&amp;diff=8077"/>
		<updated>2011-10-19T09:49:15Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Removed version 2.99.x requirement.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_setPlayerWins&lt;br /&gt;
| description   = Sets the wins of a player.&lt;br /&gt;
| param1        = playerID&lt;br /&gt;
| param1type    = int&lt;br /&gt;
| param1desc    = The player who is affected by the win change.&lt;br /&gt;
| param2        = wins&lt;br /&gt;
| param2type    = int&lt;br /&gt;
| param2desc    = The wins to set for the player.&lt;br /&gt;
| returntype    = bool&lt;br /&gt;
| return        = Whether the player exists.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_setPlayerTKs&amp;diff=8076</id>
		<title>Bz setPlayerTKs</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_setPlayerTKs&amp;diff=8076"/>
		<updated>2011-10-19T09:48:54Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Removed version 2.99.x requirement.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_setPlayerTKs&lt;br /&gt;
| description   = Sets the tks of a player.&lt;br /&gt;
| param1        = playerID&lt;br /&gt;
| param1type    = int&lt;br /&gt;
| param1desc    = The player who is affected by the tk change.&lt;br /&gt;
| param2        = tks&lt;br /&gt;
| param2type    = int&lt;br /&gt;
| param2desc    = The tks to set for the player.&lt;br /&gt;
| returntype    = bool&lt;br /&gt;
| return        = Whether the player exists.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_startCountdown&amp;diff=8075</id>
		<title>Bz startCountdown</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_startCountdown&amp;diff=8075"/>
		<updated>2011-10-19T09:43:37Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Create API Function Page. Include Example.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_startCountdown&lt;br /&gt;
| returns       = &lt;br /&gt;
| returntype    = void&lt;br /&gt;
| description   = Begins the starting countdown process as if a player were to type &#039;&#039;&#039;/countdown&#039;&#039;&#039;.&lt;br /&gt;
| param1      = delay&lt;br /&gt;
| param1type  = int&lt;br /&gt;
| param1desc  = How many seconds to countdown before the real countdown timer for the match starts.&lt;br /&gt;
| param2      = limit&lt;br /&gt;
| param2type  = float&lt;br /&gt;
| param2desc  = How many seconds to set the countdown timer to? (Basically, setting the match length.)&lt;br /&gt;
| param3      = byWho&lt;br /&gt;
| param3type  = const char*&lt;br /&gt;
| param3desc  = The name of the player starting the countdown. Note that the name displayed does not have to be a player in the server, it can be any string.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
Once 4 players have joined, the countdown will automatically begin by SERVER using the default time limit set by the server with a 10 second starting delay.&lt;br /&gt;
 case bz_ePlayerJoinEvent: {&lt;br /&gt;
 	if (bz_getTeamCount(eBlueTeam)+&lt;br /&gt;
 		bz_getTeamCount(eRedTeam)+&lt;br /&gt;
 		bz_getTeamCount(eRogueTeam)+&lt;br /&gt;
 		bz_getTeamCount(eGreenTeam)+&lt;br /&gt;
 		bz_getTeamCount(ePurpleTeam)&amp;gt;=4 &amp;amp;&amp;amp;&lt;br /&gt;
 		(!bz_isCountDownActive() || !bz_isCountDownInProgress)) {&lt;br /&gt;
 		bz_sendTextMessage(BZ_SERVER,BZ_ALLUSERS,&amp;quot;Enough players have joined, starting countdown.&amp;quot;);&lt;br /&gt;
 		bz_startCountdown(10,bz_getTimeLimit(),&amp;quot;SERVER&amp;quot;);&lt;br /&gt;
 	}&lt;br /&gt;
 }break;&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_resumeCountdown&amp;diff=8074</id>
		<title>Bz resumeCountdown</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_resumeCountdown&amp;diff=8074"/>
		<updated>2011-10-19T09:36:32Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Create API Function Page. Include Example.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_resumeCountdown&lt;br /&gt;
| returns       = &lt;br /&gt;
| returntype    = void&lt;br /&gt;
| description   = Resumes the countdown that is currently paused.&lt;br /&gt;
| param1      = resumedBy&lt;br /&gt;
| param1type  = const char*&lt;br /&gt;
| param1desc  = The name of the player resuming the countdown. Note that this value does not have to be a callsign of a player in the server, it can be any string.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
Resume the countdown if a player unpauses, saying the player that unpaused decided to unpause the countdown also.&lt;br /&gt;
 case bz_ePlayerPausedEvent:{&lt;br /&gt;
 	if (!bz_isCountDownActive() &amp;amp;&amp;amp; !((bz_PlayerPausedEventData_V1*)eventData)-&amp;gt;pause) {&lt;br /&gt;
 		bz_resumeCountdown(bz_getPlayerCallsign(((bz_PlayerPausedEventData_V1*)eventData)-&amp;gt;playerID));&lt;br /&gt;
 	}&lt;br /&gt;
 }break;&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_pauseCountdown&amp;diff=8073</id>
		<title>Bz pauseCountdown</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_pauseCountdown&amp;diff=8073"/>
		<updated>2011-10-19T09:34:52Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Create API Function Page. Include Example.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_pauseCountdown&lt;br /&gt;
| returns       = &lt;br /&gt;
| returntype    = void&lt;br /&gt;
| description   = Pauses the countdown that is currently running.&lt;br /&gt;
| param1      = pausedBy&lt;br /&gt;
| param1type  = const char*&lt;br /&gt;
| param1desc  = The name of the player stopping the countdown. Note that this value does not have to be a callsign of a player in the server, it can be any string.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
Pause the countdown if a player pauses, saying the player that paused decided to pause the countdown also.&lt;br /&gt;
 case bz_ePlayerPausedEvent:{&lt;br /&gt;
 	if (bz_isCountDownActive() &amp;amp;&amp;amp; ((bz_PlayerPausedEventData_V1*)eventData)-&amp;gt;pause) {&lt;br /&gt;
 		bz_pauseCountdown(bz_getPlayerCallsign(((bz_PlayerPausedEventData_V1*)eventData)-&amp;gt;playerID));&lt;br /&gt;
 	}&lt;br /&gt;
 }break;&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_ePlayerPausedEvent&amp;diff=8072</id>
		<title>Bz ePlayerPausedEvent</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_ePlayerPausedEvent&amp;diff=8072"/>
		<updated>2011-10-19T09:31:17Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: /* Data */ Clarify which value is returned for which pause state.&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_ePlayerPausedEvent&#039;&#039;&#039; is an API event that is called each time a playing tank is paused.&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&#039;&#039;&#039;bz_ePlayerPausedEvent&#039;&#039;&#039; returns the &#039;&#039;&#039;bz_PlayerPausedEventData_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_ePlayerPausedEvent&lt;br /&gt;
  |-&lt;br /&gt;
  |playerID&lt;br /&gt;
  |int&lt;br /&gt;
  |ID of the player who paused.&lt;br /&gt;
  |-&lt;br /&gt;
  |pause&lt;br /&gt;
  |bool&lt;br /&gt;
  |Whether the player is pausing(true) or unpausing(false)&lt;br /&gt;
  |-&lt;br /&gt;
  |time&lt;br /&gt;
  |double&lt;br /&gt;
  |Time local server time for the event.&lt;br /&gt;
  |}&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_isCountDownInProgress&amp;diff=8071</id>
		<title>Bz isCountDownInProgress</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_isCountDownInProgress&amp;diff=8071"/>
		<updated>2011-10-19T09:27:59Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Create API Function Page. Include Example.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_isCountDownInProgress&lt;br /&gt;
| returns       = Whether or not the match is going to start.&lt;br /&gt;
| returntype    = bool&lt;br /&gt;
| description   = Retrieves whether or not the countdown to the start of the match is occurring.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
Kick a player if they join when a match is about to start and they are not an observer.&lt;br /&gt;
 case bz_eAllowPlayer: {&lt;br /&gt;
 	if (bz_isCountDownInProgress() &amp;amp;&amp;amp; bz_getPlayerTeam(((bz_AllowPlayerEventData_V1*)eventData)-&amp;gt;playerID)!=eObservers) {&lt;br /&gt;
 		((bz_AllowPlayerEventData_V1*)eventData)-&amp;gt;allow=false;&lt;br /&gt;
 		((bz_AllowPlayerEventData_V1*)eventData)-&amp;gt;reason=&amp;quot;Sorry! A match is about to start.&amp;quot;;&lt;br /&gt;
 	}&lt;br /&gt;
 }break;&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_isCountDownActive&amp;diff=8070</id>
		<title>Bz isCountDownActive</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_isCountDownActive&amp;diff=8070"/>
		<updated>2011-10-19T09:21:58Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Create API Function Page. Include Example.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_isCountDownActive&lt;br /&gt;
| returns       = Whether or not the countdown timer is ticking down.&lt;br /&gt;
| returntype    = bool&lt;br /&gt;
| description   = Retrieves whether or not the countdown is active. The countdown timer is active if the timer is continuing to go down every second.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
Tell players that join that a match is in progress if they join while the countdown is active.&lt;br /&gt;
 case bz_ePlayerJoinEvent: {&lt;br /&gt;
 	if (bz_isCountDownActive()) {&lt;br /&gt;
 	bz_sendTextMessage(BZ_SERVER,((bz_PlayerJoinPartEventData_V1*)eventData)-&amp;gt;playerID,&lt;br /&gt;
 		&amp;quot;Welcome! There is currently a timed match in progress.&amp;quot;);}&lt;br /&gt;
 }break;&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_isTimeManualStart&amp;diff=8069</id>
		<title>Bz isTimeManualStart</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_isTimeManualStart&amp;diff=8069"/>
		<updated>2011-10-19T09:18:58Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Create API Function Page. Include Example.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_isTimeManualStart&lt;br /&gt;
| returns       = True if the time limit requires manual startup or false if it is automatically running from the start.&lt;br /&gt;
| returntype    = bool&lt;br /&gt;
| description   = Retrieves whether or not the time limit has to be started via a player issuing the &#039;&#039;&#039;/countdown&#039;&#039;&#039; command. The &#039;&#039;&#039;-timemanual&#039;&#039;&#039; BZFS option would make this return value true.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
If a player joins and the timer requires manual starting, tell the user that.&lt;br /&gt;
 case bz_ePlayerJoinEvent: {&lt;br /&gt;
 	if (bz_isTimeManualStart()) {&lt;br /&gt;
 	bz_sendTextMessage(BZ_SERVER,((bz_PlayerJoinPartEventData_V1*)eventData)-&amp;gt;playerID,&lt;br /&gt;
 		&amp;quot;Welcome! You can start the timer with /countdown at any time.&amp;quot;);}&lt;br /&gt;
 }break;&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_getTimeLimit&amp;diff=8068</id>
		<title>Bz getTimeLimit</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_getTimeLimit&amp;diff=8068"/>
		<updated>2011-10-19T09:15:15Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Create API Function Page. Include Example.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_getTimeLimit&lt;br /&gt;
| returns       = The value of the last time limit.&lt;br /&gt;
| returntype    = float&lt;br /&gt;
| description   = Retrieves the value of the time limit that was last set.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
Display time limit to user upon joining. Note that the &#039;&#039;&#039;-time&#039;&#039;&#039; BZFS option or [[bz_setTimeLimit]]() must be called for this to return a value other than 0.&lt;br /&gt;
 case bz_ePlayerJoinEvent: {&lt;br /&gt;
 	bz_sendTextMessagef(BZ_SERVER,((bz_PlayerJoinPartEventData_V1*)eventData)-&amp;gt;playerID,&lt;br /&gt;
 		&amp;quot;Welcome! The current countdown timer is set to %lf seconds!&amp;quot;,bz_getTimeLimit());&lt;br /&gt;
 }break;&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_setTimeLimit&amp;diff=8067</id>
		<title>Bz setTimeLimit</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_setTimeLimit&amp;diff=8067"/>
		<updated>2011-10-19T09:09:13Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Create API Function Page. Include Example.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_setTimeLimit&lt;br /&gt;
| returns       = Whether or not the time limit was able to be set.&lt;br /&gt;
| returntype    = bool&lt;br /&gt;
| description   = Sets the countdown timer to a new value. &#039;&#039;&#039;Note:&#039;&#039;&#039; Any players that retrieved the countdown value before this function is called will not see the changes until they rejoin or a new countdown is triggered via [[bz_startCountdown]]().&lt;br /&gt;
| param1      = timeLimit&lt;br /&gt;
| param1type  = float&lt;br /&gt;
| param1desc  = The amount of time in seconds to set the countdown timer to.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
Set the countdown timer to 54 seconds remaining.&lt;br /&gt;
 bz_setTimeLimit(54);&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_getReports&amp;diff=8066</id>
		<title>Bz getReports</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_getReports&amp;diff=8066"/>
		<updated>2011-10-19T09:06:36Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: doe -&amp;gt; does&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_getReports&lt;br /&gt;
| returns       = A [[bz_APIStringList]] data type containing all the reports available on the server.&lt;br /&gt;
| returntype    = bz_APIStringList*&lt;br /&gt;
| description   = Retrieves reports made by other players in the same format as the &#039;&#039;&#039;/viewreports&#039;&#039;&#039; command does&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
Shows all reports to any administrators that join the game as if they typed /viewreports.&lt;br /&gt;
 case bz_ePlayerJoinEvent: {&lt;br /&gt;
 	if (bz_getAdmin(((bz_PlayerJoinPartEventData_V1*)eventData)-&amp;gt;playerID)) {&lt;br /&gt;
 		for (int i=0;i&amp;lt;bz_getReports()-&amp;gt;size();i++) {&lt;br /&gt;
 			bz_sendTextMessagef(BZ_SERVER,&lt;br /&gt;
 				((bz_PlayerJoinPartEventData_V1*)eventData)-&amp;gt;playerID,&amp;quot;%s&amp;quot;,bz_getReports()-&amp;gt;get(i).c_str());&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 }break;&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_getReports&amp;diff=8065</id>
		<title>Bz getReports</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_getReports&amp;diff=8065"/>
		<updated>2011-10-19T08:49:26Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Create API Function Page. Include Example.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_getReports&lt;br /&gt;
| returns       = A [[bz_APIStringList]] data type containing all the reports available on the server.&lt;br /&gt;
| returntype    = bz_APIStringList*&lt;br /&gt;
| description   = Retrieves reports made by other players in the same format as the &#039;&#039;&#039;/viewreports&#039;&#039;&#039; command doe&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
Shows all reports to any administrators that join the game as if they typed /viewreports.&lt;br /&gt;
 case bz_ePlayerJoinEvent: {&lt;br /&gt;
 	if (bz_getAdmin(((bz_PlayerJoinPartEventData_V1*)eventData)-&amp;gt;playerID)) {&lt;br /&gt;
 		for (int i=0;i&amp;lt;bz_getReports()-&amp;gt;size();i++) {&lt;br /&gt;
 			bz_sendTextMessagef(BZ_SERVER,&lt;br /&gt;
 				((bz_PlayerJoinPartEventData_V1*)eventData)-&amp;gt;playerID,&amp;quot;%s&amp;quot;,bz_getReports()-&amp;gt;get(i).c_str());&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 }break;&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_HostUnbanUser&amp;diff=8064</id>
		<title>Bz HostUnbanUser</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_HostUnbanUser&amp;diff=8064"/>
		<updated>2011-10-19T08:37:10Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Create API Function Page. Include Example.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name        = bz_HostUnbanUser&lt;br /&gt;
| returns     = Whether or not the removal of the ban was executed successfully.&lt;br /&gt;
| returntype  = bool&lt;br /&gt;
| description = Unbans a host name that has been previously banned.&lt;br /&gt;
| param1      = hostmask&lt;br /&gt;
| param1type  = const char*&lt;br /&gt;
| param1desc  = The exact host name address to remove. An example would be *.myhost.biz&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
 bz_HostUnbanUser(&amp;quot;*.myhost.biz&amp;quot;);&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_IDUnbanUser&amp;diff=8063</id>
		<title>Bz IDUnbanUser</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_IDUnbanUser&amp;diff=8063"/>
		<updated>2011-10-19T08:36:03Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Created new API Function page with example.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name        = bz_IDUnbanUser&lt;br /&gt;
| returns     = Whether or not the removal of the ban was executed successfully.&lt;br /&gt;
| returntype  = bool&lt;br /&gt;
| description = Unbans a bzID address currently listed in the ban list. &#039;&#039;&#039;Note:&#039;&#039;&#039; The bzID is automatically assigned via the registration process at the [http://my.bzflag.org/bb BZBB]. In the version 2.4.0 API, there is no corresponding [[bz_IDBanUser]]() function which means previous bans had to be made by administrators manually.&lt;br /&gt;
| param1      = bzID&lt;br /&gt;
| param1type  = const char*&lt;br /&gt;
| param1desc  = The exact bzID to remove from the ban list. Note that this is not an integer, but a string.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
 bz_IDUnbanUser(&amp;quot;1372&amp;quot;);&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_IPUnbanUser&amp;diff=8062</id>
		<title>Bz IPUnbanUser</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_IPUnbanUser&amp;diff=8062"/>
		<updated>2011-10-19T08:32:03Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Created Documentation for this API Event.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name        = bz_IPUnbanUser&lt;br /&gt;
| returns     = Whether or not the removal of the ban was executed successfully.&lt;br /&gt;
| returntype  = bool&lt;br /&gt;
| description = Unbans an IP address that is currently listed in the ban list.&lt;br /&gt;
| param1      = ip&lt;br /&gt;
| param1type  = const char*&lt;br /&gt;
| param1desc  = The exact IP address to remove from the banlist.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
 bz_IPUnbanUser(&amp;quot;127.0.0.1&amp;quot;);&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_HostBanUser&amp;diff=8061</id>
		<title>Bz HostBanUser</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_HostBanUser&amp;diff=8061"/>
		<updated>2011-10-19T08:30:05Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Create API Function Page. Include Example.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name        = bz_HostBanUser&lt;br /&gt;
| returns     = Whether or not the ban was executed successfully.&lt;br /&gt;
| returntype  = bool&lt;br /&gt;
| description = Sets up a new Host ban Rule in the ban list.&lt;br /&gt;
| param1      = bannedByIndex&lt;br /&gt;
| param1type  = int&lt;br /&gt;
| param1desc  = The player ID that is banning the IP Address. &#039;&#039;&#039;NOTE:&#039;&#039;&#039; This has to be a player that is currently on the server, so at least one player must be present for a ban to be created.&lt;br /&gt;
| param2      = hostmask&lt;br /&gt;
| param2type  = const char*&lt;br /&gt;
| param2desc  = The Hosting address of the player to be banned. Host bans use wildcard (*) character also, such as *.myhost.biz&lt;br /&gt;
| param3      = duration&lt;br /&gt;
| param3type  = int&lt;br /&gt;
| param3desc  = The amount of time in minutes to ban the host.&lt;br /&gt;
| param4      = reason&lt;br /&gt;
| param4type  = const char*&lt;br /&gt;
| param4desc  = The reason that is displayed to the banned user upon failure to join.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
 bz_HostBanUser(0,&amp;quot;*.myhost.biz&amp;quot;,3600,&amp;quot;This host abused the server.&amp;quot;)&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8060</id>
		<title>Functions (API)</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8060"/>
		<updated>2011-10-19T08:04:17Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: /* Server Administration */ Updated, bz_IDBanUser() is not a 2.3+ function.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DoDoc|&lt;br /&gt;
Fill in articles for all API Functions&amp;lt;br&amp;gt;&lt;br /&gt;
Finish updating to 2.3.x&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{BZFS_API_Doc}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&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;
== Function Groups ==&lt;br /&gt;
Functions are broken into a series of groups based on the type of action or information they deal with.&lt;br /&gt;
&lt;br /&gt;
=== Event Registration ===&lt;br /&gt;
2.0.x&lt;br /&gt;
 BZF_API bool [[bz_registerEvent]] ( [[Event(API)|bz_eEventType]] eventType, [[Event(API)|bz_EventHandler]]* eventHandler );&lt;br /&gt;
 BZF_API bool [[bz_removeEvent]] ( [[Event(API)|bz_eEventType]] eventType, [[Event(API)|bz_EventHandler]]* eventHandler );&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[Register]] ( [[Event(API)|bz_eEventType]] eventType );&lt;br /&gt;
 virtual void Cleanup() {Flush();}&lt;br /&gt;
&lt;br /&gt;
=== Non-Player Connections ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_registerNonPlayerConnectionHandler]] ( int connectionID, [[bz_NonPlayerConnectionHandler]]* handler );&lt;br /&gt;
 BZF_API bool [[bz_removeNonPlayerConnectionHandler]] ( int connectionID, [[bz_NonPlayerConnectionHandler]]* handler );&lt;br /&gt;
 BZF_API bool [[bz_sendNonPlayerData]] ( int connectionID, const void *data, unsigned int size );&lt;br /&gt;
 BZF_API bool [[bz_disconectNonPlayerConnection]] ( int connectionID );&lt;br /&gt;
 BZF_API unsigned int [[bz_getNonPlayerConnectionOutboundPacketCount]] ( int connectionID );&lt;br /&gt;
 BZF_API const char* [[bz_getNonPlayerConnectionIP]] ( int connectionID );&lt;br /&gt;
 BZF_API const char* [[bz_getNonPlayerConnectionHost]] ( int connectionID );&lt;br /&gt;
&lt;br /&gt;
=== Player Information ===&lt;br /&gt;
==== Player Information ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_hasPerm]] ( int playerID, const char* perm );&lt;br /&gt;
 BZF_API bool [[bz_getAdmin]] ( int playerID );&lt;br /&gt;
 BZF_API bz_eTeamType [[bz_getPlayerTeam]] ( int playerID );&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerCallsign]] ( int playerID );&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerIPAddress]] ( int playerID );&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerFlag]] ( int playerID );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerReferrer]] ( int playerID );&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerCustomData]] (int playerID, const char* key );&lt;br /&gt;
&lt;br /&gt;
==== Player State Information ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_isPlayerPaused]] ( int playerID );&lt;br /&gt;
 BZF_API bool [[bz_canPlayerSpawn]]( int playerID );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerCurrentState]] ( int playerID, bz_PlayerUpdateState &amp;amp;state );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_getPlayerPosition]] ( int playerID, float pos[3], bool extrapolate );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerRotation]] ( int playerID, float *rot, bool extrapolate );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerVelocity]] ( int playerID, float vel[3] );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerAngVel]] ( int playerID, float *angvel );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerPhysicsDriver]] ( int playerID, int* phydrv );&lt;br /&gt;
&lt;br /&gt;
==== Player Lists and Records ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByIndex]] ( int index );&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByCallsign]] ( const char* name );&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByBZID]] ( int BZID );&lt;br /&gt;
 BZF_API bool [[bz_updatePlayerData]] ( [[bz_BasePlayerRecord]] *playerRecord );&lt;br /&gt;
 BZF_API bool [[bz_freePlayerRecord]] ( [[bz_BasePlayerRecord]] *playerRecord );&lt;br /&gt;
&lt;br /&gt;
 BZF_API [[bz_APIIntList]] *[[bz_newIntList]] ( void );&lt;br /&gt;
 BZF_API [[bz_APIIntList]] *[[bz_getPlayerIndexList]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerIndexList]] ( [[bz_APIIntList]] *playerList );&lt;br /&gt;
 BZF_API void [[bz_deleteIntList]] ( [[bz_APIIntList]] *l);&lt;br /&gt;
&lt;br /&gt;
==== Player Management ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_grantPerm]] ( int playerID, const char* perm );&lt;br /&gt;
 BZF_API bool [[bz_revokePerm]] ( int playerID, const char* perm );&lt;br /&gt;
 BZF_API bool [[bz_validAdminPassword]] ( const char* passwd );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerOperator]] ( int playerId );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_setPlayerSpawnable]]( int playerID, bool spawn );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerLimboMessage]]( int playerID, const char* text );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerCustomData]] (int playerID, const char* key, const char* data );&lt;br /&gt;
&lt;br /&gt;
=== Team Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API unsigned int [[bz_getTeamPlayerLimit]] ( bz_eTeamType team )&lt;br /&gt;
 BZF_API int [[bz_getTeamCount]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API int [[bz_getTeamScore]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API int [[bz_getTeamWins]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API int [[bz_getTeamLosses]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API void [[bz_setTeamWins]] ([[bz_eTeamType]] team, int wins );&lt;br /&gt;
 BZF_API void [[bz_setTeamLosses]] ([[bz_eTeamType]] team, int losses );&lt;br /&gt;
 BZF_API void [[bz_resetTeamScore]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API void [[bz_resetTeamScores]] ( void );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API void [[bz_changeTeam]]( int player, [[bz_eTeamType]] team );&lt;br /&gt;
&lt;br /&gt;
=== Score Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_setPlayerWins]] ( int playerId, int wins );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerLosses]] ( int playerId, int losses );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerTKs]] ( int playerId, int tks );&lt;br /&gt;
 BZF_API bool [[bz_resetPlayerScore]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPlayerWins]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPlayerLosses]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPlayerTKs]] ( int playerId );&lt;br /&gt;
 BZF_API float [[bz_getPlayerRank]] ( int playerId );&lt;br /&gt;
&lt;br /&gt;
=== Latency Information ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API int [[bz_getPlayerLag]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPlayerJitter]] ( int playerId );&lt;br /&gt;
 BZF_API float [[bz_getPlayerPacketloss]] ( int playerId );&lt;br /&gt;
&lt;br /&gt;
=== Permission Group Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API [[bz_APIStringList]]* [[bz_getGroupList]] ( void );&lt;br /&gt;
 BZF_API [[bz_APIStringList]]* [[bz_getGroupPerms]] ( const char* group );&lt;br /&gt;
 BZF_API bool [[bz_groupAllowPerm]] ( const char* group, const char* perm );&lt;br /&gt;
&lt;br /&gt;
=== Chat Messages ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_sendTextMessage]] (int from, int to, const char* message);&lt;br /&gt;
 BZF_API bool [[bz_sendTextMessage]] (int from, [[bz_eTeamType]] to, const char* message);&lt;br /&gt;
 BZF_API bool [[bz_sendTextMessagef]] (int from, int to, const char* fmt, ...);&lt;br /&gt;
 BZF_API bool [[bz_sendTextMessagef]] (int from, [[bz_eTeamType]] to, const char* fmt, ...);&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_sendFetchResMessage]] ( int playerID,  const char* URL );&lt;br /&gt;
 BZF_API bool [[bz_sendJoinServer]] ( int playerID, const char* address, int port, int team, const char* referrer, const char* message );&lt;br /&gt;
 BZF_API bool [[bz_sendLuaData]] ( int dstPlayerID, int dstScriptID, int statusBits, const char* data, int len,&lt;br /&gt;
                               int srcPlayerID = 0, int srcScriptID = 0 );&lt;br /&gt;
&lt;br /&gt;
=== Server Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_restart]] ( void );&lt;br /&gt;
 BZF_API void [[bz_shutdown]] ();&lt;br /&gt;
 BZF_API void [[bz_superkill]] ();&lt;br /&gt;
 BZF_API void [[bz_gameOver]] ( int playerID, bz_eTeamType = eNoTeam );&lt;br /&gt;
 BZF_API void [[bz_reloadLocalBans]] ();&lt;br /&gt;
 BZF_API void [[bz_reloadMasterBans]] ();&lt;br /&gt;
 BZF_API void [[bz_reloadGroups]] ();&lt;br /&gt;
 BZF_API void [[bz_reloadUsers]] ();&lt;br /&gt;
 BZF_API void [[bz_reloadHelp]] ();&lt;br /&gt;
?&lt;br /&gt;
 BZF_API int [[bz_getPlayerCount]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_anyPlayers]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Rabbit Hunt ===&lt;br /&gt;
?&lt;br /&gt;
 BZF_API void [[bz_newRabbit]] ( int player, bool swap );&lt;br /&gt;
 BZF_API void [[bz_removeRabbit]] ( int player );&lt;br /&gt;
&lt;br /&gt;
=== Map Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API void [[bz_setClientWorldDownloadURL]] ( const char* URL );&lt;br /&gt;
 BZF_API const [[bzApiString]] [[bz_getClientWorldDownloadURL]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_saveWorldCacheFile]] ( const char* file );&lt;br /&gt;
&lt;br /&gt;
=== Flag Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_givePlayerFlag]] ( int playerID, const char* flagType, bool force );&lt;br /&gt;
 BZF_API bool [[bz_removePlayerFlag]] ( int playerID );&lt;br /&gt;
 BZF_API void [[bz_resetFlags]] ( bool onlyUnused );&lt;br /&gt;
 BZF_API unsigned int [[bz_getNumFlags]] ( void );&lt;br /&gt;
 BZF_API const [[bz_ApiString]] [[bz_getFlagName]] ( int flag );&lt;br /&gt;
 BZF_API bool [[bz_resetFlag]] ( int flag );&lt;br /&gt;
 BZF_API int [[bz_flagPlayer]] ( int flag );&lt;br /&gt;
 BZF_API bool [[bz_getFlagPosition]] ( int flag, float* pos );&lt;br /&gt;
 BZF_API bool [[bz_moveFlag]] ( int flag, float pos[3], bool reset = true );&lt;br /&gt;
 BZF_API bool [[bz_RegisterCustomFlag]] ( const char* abbr, const char* name, const char* helpString, bz_eShotType shotType, bz_eFlagQuality quality );&lt;br /&gt;
&lt;br /&gt;
=== Shot Type Control ===&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_setPlayerShotType]] ( int playerId, [[bz_eShotType]] shotType );&lt;br /&gt;
&lt;br /&gt;
=== World Weapon Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_fireWorldWep]] ( const char* flagType, float lifetime, int fromPlayer, float *pos, float tilt, float direction, int shotID , float dt );&lt;br /&gt;
 BZF_API int [[bz_fireWorldGM]] ( int targetPlayerID, float lifetime, float *pos, float tilt, float direction, float dt );&lt;br /&gt;
&lt;br /&gt;
=== Server Time ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API double [[bz_getCurrentTime]] ( void );&lt;br /&gt;
 BZF_API float [[bz_getMaxWaitTime]] ( void );&lt;br /&gt;
 BZF_API void [[bz_setMaxWaitTime]] ( float maxTime );&lt;br /&gt;
 BZF_API void [[bz_getLocaltime]] ( [[bz_Time]] *ts );&lt;br /&gt;
 BZF_API void [[bz_getUTCtime]] ( [[bz_Time]] *ts );&lt;br /&gt;
&lt;br /&gt;
=== Global Database Management (BZDB) ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API double [[bz_getBZDBDouble]] ( const char* variable );&lt;br /&gt;
 BZF_API [[bz_ApiString]] [[bz_getBZDBString]] ( const char* variable );&lt;br /&gt;
 BZF_API bool [[bz_getBZDBBool]] ( const char* variable );&lt;br /&gt;
 BZF_API int [[bz_getBZDBInt]] ( const char* variable );&lt;br /&gt;
 BZF_API int [[bz_getBZDBItemPerms]] ( const char* variable );&lt;br /&gt;
 BZF_API bool [[bz_getBZDBItemPesistent]] ( const char* variable );&lt;br /&gt;
 BZF_API bool [[bz_BZDBItemExists]] ( const char* variable );&lt;br /&gt;
 BZF_API bool [[bz_setBZDBDouble]] ( const char* variable, double val, int perms = 0, bool persistent = false );&lt;br /&gt;
 BZF_API bool [[bz_setBZDBString]] ( const char* variable, const char *val, int perms = 0, bool persistent = false  );&lt;br /&gt;
 BZF_API bool [[bz_setBZDBBool]] ( const char* variable, bool val, int perms = 0, bool persistent = false  );&lt;br /&gt;
 BZF_API bool [[bz_setBZDBInt]] ( const char* variable, int val, int perms = 0, bool persistent = false  );&lt;br /&gt;
 BZF_API int [[bz_getBZDBVarList]] ( bz_APIStringList	*varList );&lt;br /&gt;
 BZF_API void [[bz_resetBZDBVar]] ( const char* variable );&lt;br /&gt;
 BZF_API void [[bz_resetALLBZDBVars]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API void [[bz_debugMessage]] ( int level, const char* message );&lt;br /&gt;
 BZF_API void [[bz_debugMessagef]] ( int level, const char* fmt, ... )&lt;br /&gt;
 BZF_API int [[bz_getDebugLevel]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Server Administration ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_kickUser]] ( int playerIndex, const char* reason, bool notify );&lt;br /&gt;
 BZF_API bool [[bz_IPBanUser]] ( int bannedByIndex, const char* ip, int duration, const char* reason );&lt;br /&gt;
 BZF_API bool [[bz_HostBanUser]] ( int bannedByIndex, const char* hostmask, int duration, const char* reason );&lt;br /&gt;
 BZF_API bool [[bz_IPUnbanUser]] ( const char* ip );&lt;br /&gt;
 BZF_API bool [[bz_IDUnbanUser]] ( const char* bzID );&lt;br /&gt;
 BZF_API bool [[bz_HostUnbanUser]] ( const char* hostmask );&lt;br /&gt;
 &lt;br /&gt;
 BZF_API int [[bz_getLagWarn]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_setLagWarn]] ( int lagwarn );&lt;br /&gt;
 BZF_API bool [[bz_pollActive]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_pollVeto]] ( void );&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_IDBanUser]] ( int bannedByIndex, const char* bzID , int duration, const char *reason );&lt;br /&gt;
&lt;br /&gt;
=== Reporting ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API [[bz_APIStringList]]* [[bz_getReports]] ( void );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API unsigned int [[bz_getReportCount]] ( void );&lt;br /&gt;
 BZF_API const char* [[bz_getReportSource]] ( unsigned int id );&lt;br /&gt;
 BZF_API const char* [[bz_getReportBody]] ( unsigned int id );&lt;br /&gt;
 BZF_API const char* [[bz_getReportTime]] ( unsigned int id );&lt;br /&gt;
 BZF_API bool [[bz_clearReport]] ( unsigned int id );&lt;br /&gt;
 BZF_API bool [[bz_clearAllReports]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_fileReport]] ( const char* message, const char* from );&lt;br /&gt;
&lt;br /&gt;
=== Timed Game Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_setTimeLimit]] ( float timeLimit );&lt;br /&gt;
 BZF_API float [[bz_getTimeLimit]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_isTimeManualStart]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_isCountDownActive]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_isCountDownInProgress]] ( void );&lt;br /&gt;
 BZF_API void [[bz_pauseCountdown]] ( const char *pausedBy );&lt;br /&gt;
 BZF_API void [[bz_resumeCountdown]] ( const char *resumedBy );&lt;br /&gt;
 BZF_API void [[bz_startCountdown]] ( int delay, float limit, const char *byWho );&lt;br /&gt;
&lt;br /&gt;
=== Custom Text Commands ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_registerCustomSlashCommand]] ( const char* command, [[bz_CustomSlashCommandHandler]] *handler );&lt;br /&gt;
 BZF_API bool [[bz_removeCustomSlashCommand]] ( const char* command );&lt;br /&gt;
&lt;br /&gt;
=== Plug-in Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API int [[bz_getLoadedPlugins]] ( bz_APIStringList * list );&lt;br /&gt;
 BZF_API bool [[bz_loadPlugin]] ( const char* path, const char* params );&lt;br /&gt;
 BZF_API bool [[bz_unloadPlugin]] ( const char* path );&lt;br /&gt;
 BZF_API const char* [[bz_pluginBinPath]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_registerCustomPluginHandler]] ( const char* extension, [[bz_APIPluginHandler]] * handler );&lt;br /&gt;
 BZF_API bool [[bz_removeCustomPluginHandler]] ( const char* extension, [[bz_APIPluginHandler]] * handler );&lt;br /&gt;
&lt;br /&gt;
=== Public Server Information ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_getPublic]] ( void );&lt;br /&gt;
 BZF_API [[bz_ApiString]] [[bz_getPublicAddr]] ( void );&lt;br /&gt;
 BZF_API [[bz_ApiString]] [[bz_getPublicDescription]] ( void );&lt;br /&gt;
 BZF_API int [[bz_getPublicPort]] ( void );&lt;br /&gt;
 BZF_API void [[bz_updateListServer]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== HTTP Transfer ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_addURLJob]] ( const char* URL, [[bz_BaseURLHandler]]* handler = NULL, const char* postData = NULL );&lt;br /&gt;
 BZF_API bool [[bz_removeURLJob]] ( const char* URL );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_stopAllURLJobs]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Callback Functions ===&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_registerCallBack]] ( const char* name, [[bz_GenericCallback]] *callback );&lt;br /&gt;
 BZF_API bool [[bz_registerCallBack]] ( const char* name, [[bz_GenericCallbackFunc]] callback );&lt;br /&gt;
 BZF_API bool [[bz_removeCallBack]] ( const char* name, [[bz_GenericCallback]] *callback );&lt;br /&gt;
 BZF_API bool [[bz_removeCallBack]] ( const char* name, [[bz_GenericCallbackFunc]] callback );&lt;br /&gt;
 BZF_API bool [[bz_callCallback]] ( const char* name, void *param );&lt;br /&gt;
 BZF_API bool [[bz_callbackExists]] ( const char* name );&lt;br /&gt;
&lt;br /&gt;
=== Inter-Plug-in Communications ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_clipFieldExists]] ( const char *name );&lt;br /&gt;
 BZF_API const char* [[bz_getclipFieldString]] ( const char *name );&lt;br /&gt;
 BZF_API float [[bz_getclipFieldFloat]] ( const char *name );&lt;br /&gt;
 BZF_API int [[bz_getclipFieldInt]] ( const char *name );&lt;br /&gt;
 BZF_API bool [[bz_setclipFieldString]] ( const char *name, const char* data );&lt;br /&gt;
 BZF_API bool [[bz_setclipFieldFloat]] ( const char *name, float data );&lt;br /&gt;
 BZF_API bool [[bz_setclipFieldInt]] ( const char *name, int data );&lt;br /&gt;
 BZF_API bool [[bz_addClipFieldNotifier]] ( const char *name, [[bz_ClipFiledNotifier *cb );&lt;br /&gt;
 BZF_API bool [[bz_removeClipFieldNotifier]] ( const char *name, [[bz_ClipFiledNotifier *cb );&lt;br /&gt;
&lt;br /&gt;
=== Game Recording ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_saveRecBuf]] ( const char * _filename, int seconds);&lt;br /&gt;
 BZF_API bool [[bz_startRecBuf]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_stopRecBuf]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Map Management ===&lt;br /&gt;
==== Map Information ====&lt;br /&gt;
?&lt;br /&gt;
 BZF_API void [[bz_getWorldSize]] ( float *size, float *wallHeight );&lt;br /&gt;
 BZF_API unsigned int [[bz_getWorldObjectCount]] ( void );&lt;br /&gt;
 BZF_API [[bz_APIWorldObjectList]]* [[bz_getWorldObjectList]] ( void );&lt;br /&gt;
 BZF_API void [[bz_releaseWorldObjectList]] ( [[bz_APIWorldObjectList]] *list );&lt;br /&gt;
 BZF_API unsigned int [[bz_findWorldObject]] ( const char *name );&lt;br /&gt;
 BZF_API [[bz_APIBaseWorldObject]]* [[bz_getWorldObjectByID]] ( unsigned int id );&lt;br /&gt;
 BZF_API bool [[bz_getTeleLinkIDs]] ( const char* teleName, int* frontLink, int* backLink );&lt;br /&gt;
 BZF_API const char* [[bz_getLinkTeleName]] ( int linkIndex );&lt;br /&gt;
 BZF_API int [[bz_getPhyDrvID]] ( const char* phyDrvName );&lt;br /&gt;
 BZF_API const char* [[bz_getPhyDrvName]] ( unsigned int phyDrvID );&lt;br /&gt;
 BZF_API bool [[bz_SetWorldObjectTangibility]] ( int id, const [[bz_SolidObjectPassableAtributes]] &amp;amp;atribs );&lt;br /&gt;
 BZF_API bool [[bz_GetWorldObjectTangibility]] ( int id, [[bz_SolidObjectPassableAtributes]] &amp;amp;atribs );&lt;br /&gt;
 BZF_API void [[bz_ResetWorldObjectTangibilities]] ( void );&lt;br /&gt;
&lt;br /&gt;
==== Map Collisions ====&lt;br /&gt;
?&lt;br /&gt;
 [[bz_eAPIColType]] [[bz_cylinderInMapObject]] ( float pos[3], float height, float radius, [[bz_APIBaseWorldObject]] **object );&lt;br /&gt;
 [[bz_eAPIColType]] [[bz_boxInMapObject]] ( float pos[3], float size[3], float angle, [[bz_APIBaseWorldObject]] **object );&lt;br /&gt;
&lt;br /&gt;
==== Custom Map Objects ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_registerCustomMapObject]] ( const char* object, [[bz_CustomMapObjectHandler]] *handler );&lt;br /&gt;
 BZF_API bool [[bz_removeCustomMapObject]] ( const char* object );&lt;br /&gt;
&lt;br /&gt;
=== Utility ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API const char *[[bz_MD5]] ( const char* str );&lt;br /&gt;
 BZF_API const char *[[bz_MD5]] ( const void* data, size_t size );&lt;br /&gt;
 BZF_API const char *[[bz_getServerVersion]] ( void );&lt;br /&gt;
 BZF_API const char *[[bz_getProtocolVersion]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Misc ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_getStandardSpawn]] ( int playerID, float pos[3], float *rot );&lt;br /&gt;
 BZF_API bool [[bz_killPlayer]] ( int playerID, bool spawnOnBase, int killerID = -1, const char* flagID = NULL );&lt;br /&gt;
 BZF_API bool [[bz_sendPlayCustomLocalSound]] ( int playerID, const char* soundName );&lt;br /&gt;
 BZF_API [[bz_ApiString]] [[bz_filterPath]] ( const char* path );&lt;br /&gt;
 BZF_API const char *[[bz_format]](const char* fmt, ...)_ATTRIBUTE12;&lt;br /&gt;
 BZF_API const char *[[bz_toupper]](const char* val );&lt;br /&gt;
 BZF_API const char *[[bz_tolower]](const char* val );&lt;br /&gt;
 BZF_API const char *[[bz_urlEncode]](const char* val );&lt;br /&gt;
 BZF_API [[bz_eGameType]] [[bz_getGameType]]( void );&lt;br /&gt;
 BZF_API [[bz_eTeamType]] [[bz_checkBaseAtPoint]] ( float pos[3] );&lt;br /&gt;
 BZF_API int [[bz_APIVersion]] ( void );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_allowJumping]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Server Side Players (Development) ===&lt;br /&gt;
? (In API for 2.3+, but will crash a server)&lt;br /&gt;
 BZF_API int [[bz_addServerSidePlayer]] ( [[bz_ServerSidePlayerHandler]] *handler );&lt;br /&gt;
 BZF_API bool [[bz_removeServerSidePlayer]] ( int playerID, [[bz_ServerSidePlayerHandler]] *handler );&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_Functions]]&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_IPBanUser&amp;diff=8059</id>
		<title>Bz IPBanUser</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_IPBanUser&amp;diff=8059"/>
		<updated>2011-10-19T07:50:45Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Create API Function Page. Include Example.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name        = bz_IPBanUser&lt;br /&gt;
| returns     = Whether or not the ban was executed successfully.&lt;br /&gt;
| returntype  = bool&lt;br /&gt;
| description = Sets up a new IP Rule in the ban list. &#039;&#039;&#039;Note&#039;&#039;&#039; that if the player is currently playing when their IP address is banned it will not take effect immediately until they rejoin. This can be counteracted by kicking the player upon the ban, or using [[bz_IDBanUser]]() instead.&lt;br /&gt;
| param1      = bannedByIndex&lt;br /&gt;
| param1type  = int&lt;br /&gt;
| param1desc  = The player ID that is banning the IP Address. &#039;&#039;&#039;NOTE:&#039;&#039;&#039; This has to be a player that is currently on the server, so at least one player must be present for a ban to be created.&lt;br /&gt;
| param2      = ip&lt;br /&gt;
| param2type  = const char*&lt;br /&gt;
| param2desc  = The IP Address string to ban. Note that this can contain wildcard (*) characters for higher level bans.&lt;br /&gt;
| param3      = duration&lt;br /&gt;
| param3type  = int&lt;br /&gt;
| param3desc  = The amount of time in minutes to ban the player.&lt;br /&gt;
| param4      = reason&lt;br /&gt;
| param4type  = const char*&lt;br /&gt;
| param4desc  = The reason that is displayed to the banned user upon failure to join.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
This code will check if the TK ratio is greater than 0.3 (30%) after at least 5 rounds of play. If so, the player will be IP Banned and kicked. This is basically an auto TK ban method.&lt;br /&gt;
 case bz_ePlayerDieEvent: {&lt;br /&gt;
 	if ((double)bz_getPlayerTKs(((bz_PlayerDieEventData_V1*)eventData)-&amp;gt;killerID)&lt;br /&gt;
 	/(double)(bz_getPlayerWins(((bz_PlayerDieEventData_V1*)eventData)-&amp;gt;killerID)&lt;br /&gt;
 		+bz_getPlayerLosses(((bz_PlayerDieEventData_V1*)eventData)-&amp;gt;killerID))&lt;br /&gt;
 	&amp;gt;0.3&lt;br /&gt;
 	&amp;amp;&amp;amp;&lt;br /&gt;
 	bz_getPlayerWins(((bz_PlayerDieEventData_V1*)eventData)-&amp;gt;killerID)&lt;br /&gt;
 		+bz_getPlayerLosses(((bz_PlayerDieEventData_V1*)eventData)-&amp;gt;killerID)&lt;br /&gt;
 		+bz_getPlayerTKs(((bz_PlayerDieEventData_V1*)eventData)-&amp;gt;killerID)&amp;gt;=5) {&lt;br /&gt;
 			//Ban the teamkiller and kick them&lt;br /&gt;
 			bz_IPBanUser(((bz_PlayerDieEventData_V1*)eventData)-&amp;gt;killerID,&lt;br /&gt;
 				bz_getPlayerIPAddress(((bz_PlayerDieEventData_V1*)eventData)-&amp;gt;killerID),&lt;br /&gt;
 				60,&amp;quot;Auto Ban for Intentional Teamkilling.&amp;quot;);&lt;br /&gt;
 			bz_kickUser(((bz_PlayerDieEventData_V1*)eventData)-&amp;gt;killerID,&lt;br /&gt;
 				&amp;quot;Auto Ban for Intentional Teamkilling.&amp;quot;,true);&lt;br /&gt;
 		};&lt;br /&gt;
 }break;&lt;br /&gt;
&lt;br /&gt;
More information on this function can be found on the [[BZFS_API_2.4_Upgrade]] page.&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Register&amp;diff=8058</id>
		<title>Register</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Register&amp;diff=8058"/>
		<updated>2011-10-19T07:30:54Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Removed () from function name.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name        = Register&lt;br /&gt;
| returns     = Whether or not the register was successful.&lt;br /&gt;
| returntype  = bool&lt;br /&gt;
| description = Registers a new event handler. This event handler will receive events of the event type specified.&lt;br /&gt;
| param1      = eventType&lt;br /&gt;
| param1type  = bz_eEventType&lt;br /&gt;
| param1desc  = The type of event to listen for&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
 void SAMPLE_PLUGIN::Init ( const char* /*commandLine*/ )&lt;br /&gt;
 {&lt;br /&gt;
 	Register(bz_ePlayerUpdateEvent);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
More information on this function can be found on the [[BZFS_API_2.4_Upgrade]] page.&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8057</id>
		<title>Functions (API)</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8057"/>
		<updated>2011-10-19T07:29:05Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: /* Server Administration */ Spelling correction, durration -&amp;gt; duration&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DoDoc|&lt;br /&gt;
Fill in articles for all API Functions&amp;lt;br&amp;gt;&lt;br /&gt;
Finish updating to 2.3.x&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{BZFS_API_Doc}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&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;
== Function Groups ==&lt;br /&gt;
Functions are broken into a series of groups based on the type of action or information they deal with.&lt;br /&gt;
&lt;br /&gt;
=== Event Registration ===&lt;br /&gt;
2.0.x&lt;br /&gt;
 BZF_API bool [[bz_registerEvent]] ( [[Event(API)|bz_eEventType]] eventType, [[Event(API)|bz_EventHandler]]* eventHandler );&lt;br /&gt;
 BZF_API bool [[bz_removeEvent]] ( [[Event(API)|bz_eEventType]] eventType, [[Event(API)|bz_EventHandler]]* eventHandler );&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[Register]] ( [[Event(API)|bz_eEventType]] eventType );&lt;br /&gt;
 virtual void Cleanup() {Flush();}&lt;br /&gt;
&lt;br /&gt;
=== Non-Player Connections ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_registerNonPlayerConnectionHandler]] ( int connectionID, [[bz_NonPlayerConnectionHandler]]* handler );&lt;br /&gt;
 BZF_API bool [[bz_removeNonPlayerConnectionHandler]] ( int connectionID, [[bz_NonPlayerConnectionHandler]]* handler );&lt;br /&gt;
 BZF_API bool [[bz_sendNonPlayerData]] ( int connectionID, const void *data, unsigned int size );&lt;br /&gt;
 BZF_API bool [[bz_disconectNonPlayerConnection]] ( int connectionID );&lt;br /&gt;
 BZF_API unsigned int [[bz_getNonPlayerConnectionOutboundPacketCount]] ( int connectionID );&lt;br /&gt;
 BZF_API const char* [[bz_getNonPlayerConnectionIP]] ( int connectionID );&lt;br /&gt;
 BZF_API const char* [[bz_getNonPlayerConnectionHost]] ( int connectionID );&lt;br /&gt;
&lt;br /&gt;
=== Player Information ===&lt;br /&gt;
==== Player Information ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_hasPerm]] ( int playerID, const char* perm );&lt;br /&gt;
 BZF_API bool [[bz_getAdmin]] ( int playerID );&lt;br /&gt;
 BZF_API bz_eTeamType [[bz_getPlayerTeam]] ( int playerID );&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerCallsign]] ( int playerID );&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerIPAddress]] ( int playerID );&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerFlag]] ( int playerID );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerReferrer]] ( int playerID );&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerCustomData]] (int playerID, const char* key );&lt;br /&gt;
&lt;br /&gt;
==== Player State Information ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_isPlayerPaused]] ( int playerID );&lt;br /&gt;
 BZF_API bool [[bz_canPlayerSpawn]]( int playerID );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerCurrentState]] ( int playerID, bz_PlayerUpdateState &amp;amp;state );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_getPlayerPosition]] ( int playerID, float pos[3], bool extrapolate );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerRotation]] ( int playerID, float *rot, bool extrapolate );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerVelocity]] ( int playerID, float vel[3] );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerAngVel]] ( int playerID, float *angvel );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerPhysicsDriver]] ( int playerID, int* phydrv );&lt;br /&gt;
&lt;br /&gt;
==== Player Lists and Records ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByIndex]] ( int index );&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByCallsign]] ( const char* name );&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByBZID]] ( int BZID );&lt;br /&gt;
 BZF_API bool [[bz_updatePlayerData]] ( [[bz_BasePlayerRecord]] *playerRecord );&lt;br /&gt;
 BZF_API bool [[bz_freePlayerRecord]] ( [[bz_BasePlayerRecord]] *playerRecord );&lt;br /&gt;
&lt;br /&gt;
 BZF_API [[bz_APIIntList]] *[[bz_newIntList]] ( void );&lt;br /&gt;
 BZF_API [[bz_APIIntList]] *[[bz_getPlayerIndexList]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerIndexList]] ( [[bz_APIIntList]] *playerList );&lt;br /&gt;
 BZF_API void [[bz_deleteIntList]] ( [[bz_APIIntList]] *l);&lt;br /&gt;
&lt;br /&gt;
==== Player Management ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_grantPerm]] ( int playerID, const char* perm );&lt;br /&gt;
 BZF_API bool [[bz_revokePerm]] ( int playerID, const char* perm );&lt;br /&gt;
 BZF_API bool [[bz_validAdminPassword]] ( const char* passwd );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerOperator]] ( int playerId );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_setPlayerSpawnable]]( int playerID, bool spawn );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerLimboMessage]]( int playerID, const char* text );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerCustomData]] (int playerID, const char* key, const char* data );&lt;br /&gt;
&lt;br /&gt;
=== Team Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API unsigned int [[bz_getTeamPlayerLimit]] ( bz_eTeamType team )&lt;br /&gt;
 BZF_API int [[bz_getTeamCount]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API int [[bz_getTeamScore]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API int [[bz_getTeamWins]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API int [[bz_getTeamLosses]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API void [[bz_setTeamWins]] ([[bz_eTeamType]] team, int wins );&lt;br /&gt;
 BZF_API void [[bz_setTeamLosses]] ([[bz_eTeamType]] team, int losses );&lt;br /&gt;
 BZF_API void [[bz_resetTeamScore]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API void [[bz_resetTeamScores]] ( void );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API void [[bz_changeTeam]]( int player, [[bz_eTeamType]] team );&lt;br /&gt;
&lt;br /&gt;
=== Score Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_setPlayerWins]] ( int playerId, int wins );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerLosses]] ( int playerId, int losses );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerTKs]] ( int playerId, int tks );&lt;br /&gt;
 BZF_API bool [[bz_resetPlayerScore]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPlayerWins]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPlayerLosses]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPlayerTKs]] ( int playerId );&lt;br /&gt;
 BZF_API float [[bz_getPlayerRank]] ( int playerId );&lt;br /&gt;
&lt;br /&gt;
=== Latency Information ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API int [[bz_getPlayerLag]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPlayerJitter]] ( int playerId );&lt;br /&gt;
 BZF_API float [[bz_getPlayerPacketloss]] ( int playerId );&lt;br /&gt;
&lt;br /&gt;
=== Permission Group Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API [[bz_APIStringList]]* [[bz_getGroupList]] ( void );&lt;br /&gt;
 BZF_API [[bz_APIStringList]]* [[bz_getGroupPerms]] ( const char* group );&lt;br /&gt;
 BZF_API bool [[bz_groupAllowPerm]] ( const char* group, const char* perm );&lt;br /&gt;
&lt;br /&gt;
=== Chat Messages ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_sendTextMessage]] (int from, int to, const char* message);&lt;br /&gt;
 BZF_API bool [[bz_sendTextMessage]] (int from, [[bz_eTeamType]] to, const char* message);&lt;br /&gt;
 BZF_API bool [[bz_sendTextMessagef]] (int from, int to, const char* fmt, ...);&lt;br /&gt;
 BZF_API bool [[bz_sendTextMessagef]] (int from, [[bz_eTeamType]] to, const char* fmt, ...);&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_sendFetchResMessage]] ( int playerID,  const char* URL );&lt;br /&gt;
 BZF_API bool [[bz_sendJoinServer]] ( int playerID, const char* address, int port, int team, const char* referrer, const char* message );&lt;br /&gt;
 BZF_API bool [[bz_sendLuaData]] ( int dstPlayerID, int dstScriptID, int statusBits, const char* data, int len,&lt;br /&gt;
                               int srcPlayerID = 0, int srcScriptID = 0 );&lt;br /&gt;
&lt;br /&gt;
=== Server Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_restart]] ( void );&lt;br /&gt;
 BZF_API void [[bz_shutdown]] ();&lt;br /&gt;
 BZF_API void [[bz_superkill]] ();&lt;br /&gt;
 BZF_API void [[bz_gameOver]] ( int playerID, bz_eTeamType = eNoTeam );&lt;br /&gt;
 BZF_API void [[bz_reloadLocalBans]] ();&lt;br /&gt;
 BZF_API void [[bz_reloadMasterBans]] ();&lt;br /&gt;
 BZF_API void [[bz_reloadGroups]] ();&lt;br /&gt;
 BZF_API void [[bz_reloadUsers]] ();&lt;br /&gt;
 BZF_API void [[bz_reloadHelp]] ();&lt;br /&gt;
?&lt;br /&gt;
 BZF_API int [[bz_getPlayerCount]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_anyPlayers]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Rabbit Hunt ===&lt;br /&gt;
?&lt;br /&gt;
 BZF_API void [[bz_newRabbit]] ( int player, bool swap );&lt;br /&gt;
 BZF_API void [[bz_removeRabbit]] ( int player );&lt;br /&gt;
&lt;br /&gt;
=== Map Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API void [[bz_setClientWorldDownloadURL]] ( const char* URL );&lt;br /&gt;
 BZF_API const [[bzApiString]] [[bz_getClientWorldDownloadURL]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_saveWorldCacheFile]] ( const char* file );&lt;br /&gt;
&lt;br /&gt;
=== Flag Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_givePlayerFlag]] ( int playerID, const char* flagType, bool force );&lt;br /&gt;
 BZF_API bool [[bz_removePlayerFlag]] ( int playerID );&lt;br /&gt;
 BZF_API void [[bz_resetFlags]] ( bool onlyUnused );&lt;br /&gt;
 BZF_API unsigned int [[bz_getNumFlags]] ( void );&lt;br /&gt;
 BZF_API const [[bz_ApiString]] [[bz_getFlagName]] ( int flag );&lt;br /&gt;
 BZF_API bool [[bz_resetFlag]] ( int flag );&lt;br /&gt;
 BZF_API int [[bz_flagPlayer]] ( int flag );&lt;br /&gt;
 BZF_API bool [[bz_getFlagPosition]] ( int flag, float* pos );&lt;br /&gt;
 BZF_API bool [[bz_moveFlag]] ( int flag, float pos[3], bool reset = true );&lt;br /&gt;
 BZF_API bool [[bz_RegisterCustomFlag]] ( const char* abbr, const char* name, const char* helpString, bz_eShotType shotType, bz_eFlagQuality quality );&lt;br /&gt;
&lt;br /&gt;
=== Shot Type Control ===&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_setPlayerShotType]] ( int playerId, [[bz_eShotType]] shotType );&lt;br /&gt;
&lt;br /&gt;
=== World Weapon Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_fireWorldWep]] ( const char* flagType, float lifetime, int fromPlayer, float *pos, float tilt, float direction, int shotID , float dt );&lt;br /&gt;
 BZF_API int [[bz_fireWorldGM]] ( int targetPlayerID, float lifetime, float *pos, float tilt, float direction, float dt );&lt;br /&gt;
&lt;br /&gt;
=== Server Time ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API double [[bz_getCurrentTime]] ( void );&lt;br /&gt;
 BZF_API float [[bz_getMaxWaitTime]] ( void );&lt;br /&gt;
 BZF_API void [[bz_setMaxWaitTime]] ( float maxTime );&lt;br /&gt;
 BZF_API void [[bz_getLocaltime]] ( [[bz_Time]] *ts );&lt;br /&gt;
 BZF_API void [[bz_getUTCtime]] ( [[bz_Time]] *ts );&lt;br /&gt;
&lt;br /&gt;
=== Global Database Management (BZDB) ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API double [[bz_getBZDBDouble]] ( const char* variable );&lt;br /&gt;
 BZF_API [[bz_ApiString]] [[bz_getBZDBString]] ( const char* variable );&lt;br /&gt;
 BZF_API bool [[bz_getBZDBBool]] ( const char* variable );&lt;br /&gt;
 BZF_API int [[bz_getBZDBInt]] ( const char* variable );&lt;br /&gt;
 BZF_API int [[bz_getBZDBItemPerms]] ( const char* variable );&lt;br /&gt;
 BZF_API bool [[bz_getBZDBItemPesistent]] ( const char* variable );&lt;br /&gt;
 BZF_API bool [[bz_BZDBItemExists]] ( const char* variable );&lt;br /&gt;
 BZF_API bool [[bz_setBZDBDouble]] ( const char* variable, double val, int perms = 0, bool persistent = false );&lt;br /&gt;
 BZF_API bool [[bz_setBZDBString]] ( const char* variable, const char *val, int perms = 0, bool persistent = false  );&lt;br /&gt;
 BZF_API bool [[bz_setBZDBBool]] ( const char* variable, bool val, int perms = 0, bool persistent = false  );&lt;br /&gt;
 BZF_API bool [[bz_setBZDBInt]] ( const char* variable, int val, int perms = 0, bool persistent = false  );&lt;br /&gt;
 BZF_API int [[bz_getBZDBVarList]] ( bz_APIStringList	*varList );&lt;br /&gt;
 BZF_API void [[bz_resetBZDBVar]] ( const char* variable );&lt;br /&gt;
 BZF_API void [[bz_resetALLBZDBVars]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API void [[bz_debugMessage]] ( int level, const char* message );&lt;br /&gt;
 BZF_API void [[bz_debugMessagef]] ( int level, const char* fmt, ... )&lt;br /&gt;
 BZF_API int [[bz_getDebugLevel]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Server Administration ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_kickUser]] ( int playerIndex, const char* reason, bool notify );&lt;br /&gt;
 BZF_API bool [[bz_IPBanUser]] ( int bannedByIndex, const char* ip, int duration, const char* reason );&lt;br /&gt;
 BZF_API bool [[bz_IDBanUser]] ( int bannedByIndex, const char* bzID , int duration, const char *reason );&lt;br /&gt;
 BZF_API bool [[bz_HostBanUser]] ( int bannedByIndex, const char* hostmask, int duration, const char* reason );&lt;br /&gt;
 BZF_API bool [[bz_IPUnbanUser]] ( const char* ip );&lt;br /&gt;
 BZF_API bool [[bz_IDUnbanUser]] ( const char* bzID );&lt;br /&gt;
 BZF_API bool [[bz_HostUnbanUser]] ( const char* hostmask );&lt;br /&gt;
 &lt;br /&gt;
 BZF_API int [[bz_getLagWarn]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_setLagWarn]] ( int lagwarn );&lt;br /&gt;
 BZF_API bool [[bz_pollActive]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_pollVeto]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Reporting ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API [[bz_APIStringList]]* [[bz_getReports]] ( void );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API unsigned int [[bz_getReportCount]] ( void );&lt;br /&gt;
 BZF_API const char* [[bz_getReportSource]] ( unsigned int id );&lt;br /&gt;
 BZF_API const char* [[bz_getReportBody]] ( unsigned int id );&lt;br /&gt;
 BZF_API const char* [[bz_getReportTime]] ( unsigned int id );&lt;br /&gt;
 BZF_API bool [[bz_clearReport]] ( unsigned int id );&lt;br /&gt;
 BZF_API bool [[bz_clearAllReports]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_fileReport]] ( const char* message, const char* from );&lt;br /&gt;
&lt;br /&gt;
=== Timed Game Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_setTimeLimit]] ( float timeLimit );&lt;br /&gt;
 BZF_API float [[bz_getTimeLimit]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_isTimeManualStart]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_isCountDownActive]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_isCountDownInProgress]] ( void );&lt;br /&gt;
 BZF_API void [[bz_pauseCountdown]] ( const char *pausedBy );&lt;br /&gt;
 BZF_API void [[bz_resumeCountdown]] ( const char *resumedBy );&lt;br /&gt;
 BZF_API void [[bz_startCountdown]] ( int delay, float limit, const char *byWho );&lt;br /&gt;
&lt;br /&gt;
=== Custom Text Commands ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_registerCustomSlashCommand]] ( const char* command, [[bz_CustomSlashCommandHandler]] *handler );&lt;br /&gt;
 BZF_API bool [[bz_removeCustomSlashCommand]] ( const char* command );&lt;br /&gt;
&lt;br /&gt;
=== Plug-in Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API int [[bz_getLoadedPlugins]] ( bz_APIStringList * list );&lt;br /&gt;
 BZF_API bool [[bz_loadPlugin]] ( const char* path, const char* params );&lt;br /&gt;
 BZF_API bool [[bz_unloadPlugin]] ( const char* path );&lt;br /&gt;
 BZF_API const char* [[bz_pluginBinPath]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_registerCustomPluginHandler]] ( const char* extension, [[bz_APIPluginHandler]] * handler );&lt;br /&gt;
 BZF_API bool [[bz_removeCustomPluginHandler]] ( const char* extension, [[bz_APIPluginHandler]] * handler );&lt;br /&gt;
&lt;br /&gt;
=== Public Server Information ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_getPublic]] ( void );&lt;br /&gt;
 BZF_API [[bz_ApiString]] [[bz_getPublicAddr]] ( void );&lt;br /&gt;
 BZF_API [[bz_ApiString]] [[bz_getPublicDescription]] ( void );&lt;br /&gt;
 BZF_API int [[bz_getPublicPort]] ( void );&lt;br /&gt;
 BZF_API void [[bz_updateListServer]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== HTTP Transfer ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_addURLJob]] ( const char* URL, [[bz_BaseURLHandler]]* handler = NULL, const char* postData = NULL );&lt;br /&gt;
 BZF_API bool [[bz_removeURLJob]] ( const char* URL );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_stopAllURLJobs]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Callback Functions ===&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_registerCallBack]] ( const char* name, [[bz_GenericCallback]] *callback );&lt;br /&gt;
 BZF_API bool [[bz_registerCallBack]] ( const char* name, [[bz_GenericCallbackFunc]] callback );&lt;br /&gt;
 BZF_API bool [[bz_removeCallBack]] ( const char* name, [[bz_GenericCallback]] *callback );&lt;br /&gt;
 BZF_API bool [[bz_removeCallBack]] ( const char* name, [[bz_GenericCallbackFunc]] callback );&lt;br /&gt;
 BZF_API bool [[bz_callCallback]] ( const char* name, void *param );&lt;br /&gt;
 BZF_API bool [[bz_callbackExists]] ( const char* name );&lt;br /&gt;
&lt;br /&gt;
=== Inter-Plug-in Communications ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_clipFieldExists]] ( const char *name );&lt;br /&gt;
 BZF_API const char* [[bz_getclipFieldString]] ( const char *name );&lt;br /&gt;
 BZF_API float [[bz_getclipFieldFloat]] ( const char *name );&lt;br /&gt;
 BZF_API int [[bz_getclipFieldInt]] ( const char *name );&lt;br /&gt;
 BZF_API bool [[bz_setclipFieldString]] ( const char *name, const char* data );&lt;br /&gt;
 BZF_API bool [[bz_setclipFieldFloat]] ( const char *name, float data );&lt;br /&gt;
 BZF_API bool [[bz_setclipFieldInt]] ( const char *name, int data );&lt;br /&gt;
 BZF_API bool [[bz_addClipFieldNotifier]] ( const char *name, [[bz_ClipFiledNotifier *cb );&lt;br /&gt;
 BZF_API bool [[bz_removeClipFieldNotifier]] ( const char *name, [[bz_ClipFiledNotifier *cb );&lt;br /&gt;
&lt;br /&gt;
=== Game Recording ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_saveRecBuf]] ( const char * _filename, int seconds);&lt;br /&gt;
 BZF_API bool [[bz_startRecBuf]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_stopRecBuf]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Map Management ===&lt;br /&gt;
==== Map Information ====&lt;br /&gt;
?&lt;br /&gt;
 BZF_API void [[bz_getWorldSize]] ( float *size, float *wallHeight );&lt;br /&gt;
 BZF_API unsigned int [[bz_getWorldObjectCount]] ( void );&lt;br /&gt;
 BZF_API [[bz_APIWorldObjectList]]* [[bz_getWorldObjectList]] ( void );&lt;br /&gt;
 BZF_API void [[bz_releaseWorldObjectList]] ( [[bz_APIWorldObjectList]] *list );&lt;br /&gt;
 BZF_API unsigned int [[bz_findWorldObject]] ( const char *name );&lt;br /&gt;
 BZF_API [[bz_APIBaseWorldObject]]* [[bz_getWorldObjectByID]] ( unsigned int id );&lt;br /&gt;
 BZF_API bool [[bz_getTeleLinkIDs]] ( const char* teleName, int* frontLink, int* backLink );&lt;br /&gt;
 BZF_API const char* [[bz_getLinkTeleName]] ( int linkIndex );&lt;br /&gt;
 BZF_API int [[bz_getPhyDrvID]] ( const char* phyDrvName );&lt;br /&gt;
 BZF_API const char* [[bz_getPhyDrvName]] ( unsigned int phyDrvID );&lt;br /&gt;
 BZF_API bool [[bz_SetWorldObjectTangibility]] ( int id, const [[bz_SolidObjectPassableAtributes]] &amp;amp;atribs );&lt;br /&gt;
 BZF_API bool [[bz_GetWorldObjectTangibility]] ( int id, [[bz_SolidObjectPassableAtributes]] &amp;amp;atribs );&lt;br /&gt;
 BZF_API void [[bz_ResetWorldObjectTangibilities]] ( void );&lt;br /&gt;
&lt;br /&gt;
==== Map Collisions ====&lt;br /&gt;
?&lt;br /&gt;
 [[bz_eAPIColType]] [[bz_cylinderInMapObject]] ( float pos[3], float height, float radius, [[bz_APIBaseWorldObject]] **object );&lt;br /&gt;
 [[bz_eAPIColType]] [[bz_boxInMapObject]] ( float pos[3], float size[3], float angle, [[bz_APIBaseWorldObject]] **object );&lt;br /&gt;
&lt;br /&gt;
==== Custom Map Objects ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_registerCustomMapObject]] ( const char* object, [[bz_CustomMapObjectHandler]] *handler );&lt;br /&gt;
 BZF_API bool [[bz_removeCustomMapObject]] ( const char* object );&lt;br /&gt;
&lt;br /&gt;
=== Utility ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API const char *[[bz_MD5]] ( const char* str );&lt;br /&gt;
 BZF_API const char *[[bz_MD5]] ( const void* data, size_t size );&lt;br /&gt;
 BZF_API const char *[[bz_getServerVersion]] ( void );&lt;br /&gt;
 BZF_API const char *[[bz_getProtocolVersion]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Misc ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_getStandardSpawn]] ( int playerID, float pos[3], float *rot );&lt;br /&gt;
 BZF_API bool [[bz_killPlayer]] ( int playerID, bool spawnOnBase, int killerID = -1, const char* flagID = NULL );&lt;br /&gt;
 BZF_API bool [[bz_sendPlayCustomLocalSound]] ( int playerID, const char* soundName );&lt;br /&gt;
 BZF_API [[bz_ApiString]] [[bz_filterPath]] ( const char* path );&lt;br /&gt;
 BZF_API const char *[[bz_format]](const char* fmt, ...)_ATTRIBUTE12;&lt;br /&gt;
 BZF_API const char *[[bz_toupper]](const char* val );&lt;br /&gt;
 BZF_API const char *[[bz_tolower]](const char* val );&lt;br /&gt;
 BZF_API const char *[[bz_urlEncode]](const char* val );&lt;br /&gt;
 BZF_API [[bz_eGameType]] [[bz_getGameType]]( void );&lt;br /&gt;
 BZF_API [[bz_eTeamType]] [[bz_checkBaseAtPoint]] ( float pos[3] );&lt;br /&gt;
 BZF_API int [[bz_APIVersion]] ( void );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_allowJumping]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Server Side Players (Development) ===&lt;br /&gt;
? (In API for 2.3+, but will crash a server)&lt;br /&gt;
 BZF_API int [[bz_addServerSidePlayer]] ( [[bz_ServerSidePlayerHandler]] *handler );&lt;br /&gt;
 BZF_API bool [[bz_removeServerSidePlayer]] ( int playerID, [[bz_ServerSidePlayerHandler]] *handler );&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_Functions]]&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_getDebugLevel&amp;diff=8056</id>
		<title>Bz getDebugLevel</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_getDebugLevel&amp;diff=8056"/>
		<updated>2011-10-19T07:25:03Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Create API Function Page. Include Example.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_getDebugLevel&lt;br /&gt;
| returns       = An integer containing the BZFS debugging level.&lt;br /&gt;
| returntype    = int&lt;br /&gt;
| description   = Gets the debugging level of the server.&lt;br /&gt;
}}&lt;br /&gt;
===Example===&lt;br /&gt;
Creates a basic BZFS output from debug mode for administrators to watch. Uses bz_getDebugLevel() to determine which messages actually show up.&lt;br /&gt;
 case bz_eLoggingEvent: {&lt;br /&gt;
 	if (((bz_LoggingEventData_V1*)eventData)-&amp;gt;level==bz_getDebugLevel()) {&lt;br /&gt;
 		bz_sendTextMessagef(BZ_SERVER,BZ_ALLUSERS,&lt;br /&gt;
 		&amp;quot;[BZFS] %s&amp;quot;,((bz_LoggingEventData_V1*)eventData)-&amp;gt;message.c_str());&lt;br /&gt;
 	}&lt;br /&gt;
 }break;&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_setBZDBInt&amp;diff=8055</id>
		<title>Bz setBZDBInt</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_setBZDBInt&amp;diff=8055"/>
		<updated>2011-10-19T06:36:53Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Create API Function Page. Include Example.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_setBZDBInt&lt;br /&gt;
| returns       = Whether or not the set was successful.&lt;br /&gt;
| returntype    = bool&lt;br /&gt;
| description   = Sets a BZDB variable to a given &#039;&#039;&#039;int&#039;&#039;&#039; value.&lt;br /&gt;
| param1        = variable&lt;br /&gt;
| param1type    = const char*&lt;br /&gt;
| param1desc    = Variable name (E.g. &amp;quot;_shockOutRadius&amp;quot;)&lt;br /&gt;
| param2        = val&lt;br /&gt;
| param2type    = int&lt;br /&gt;
| param2desc    = The value to set the variable to.&lt;br /&gt;
| param3        = perms = 0&lt;br /&gt;
| param3type    = int&lt;br /&gt;
| param3desc    = What to set the permission value to. (Range: 1-3. Using 0 sets it to the default [2], and using a higher number sets it to 3.)&lt;br /&gt;
| param4        = persistent = false&lt;br /&gt;
| param4type    = bool&lt;br /&gt;
| param4desc    = Whether or not the variable will be persistent.&lt;br /&gt;
}}&lt;br /&gt;
===Example===&lt;br /&gt;
Sets the shockwave radius to a random value between 50 and 100.&lt;br /&gt;
 bz_setBZDBDouble(&amp;quot;_shockOutRadius&amp;quot;,rand()%50+50);&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_setBZDBBool&amp;diff=8054</id>
		<title>Bz setBZDBBool</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_setBZDBBool&amp;diff=8054"/>
		<updated>2011-10-19T06:34:22Z</updated>

		<summary type="html">&lt;p&gt;Sigonasr2: Create API Function Page. Include Example.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_setBZDBBool&lt;br /&gt;
| returns       = Whether or not the set was successful.&lt;br /&gt;
| returntype    = bool&lt;br /&gt;
| description   = Sets a BZDB variable to a given &#039;&#039;&#039;bool&#039;&#039;&#039; value.&lt;br /&gt;
| param1        = variable&lt;br /&gt;
| param1type    = const char*&lt;br /&gt;
| param1desc    = Variable name (E.g. &amp;quot;_shockOutRadius&amp;quot;)&lt;br /&gt;
| param2        = val&lt;br /&gt;
| param2type    = bool&lt;br /&gt;
| param2desc    = The value to set the variable to.&lt;br /&gt;
| param3        = perms = 0&lt;br /&gt;
| param3type    = int&lt;br /&gt;
| param3desc    = What to set the permission value to. (Range: 1-3. Using 0 sets it to the default [2], and using a higher number sets it to 3.)&lt;br /&gt;
| param4        = persistent = false&lt;br /&gt;
| param4type    = bool&lt;br /&gt;
| param4desc    = Whether or not the variable will be persistent.&lt;br /&gt;
}}&lt;br /&gt;
===Example===&lt;br /&gt;
Turns no climbing on sloped objects off to allow climbing and jumping off from them.&lt;br /&gt;
 bz_setBZDBBool(&amp;quot;_noClimb&amp;quot;,false);&lt;/div&gt;</summary>
		<author><name>Sigonasr2</name></author>
	</entry>
</feed>