<?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=Allejo</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=Allejo"/>
	<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/Special:Contributions/Allejo"/>
	<updated>2026-05-19T13:08:07Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Events_(API)&amp;diff=9343</id>
		<title>Events (API)</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Events_(API)&amp;diff=9343"/>
		<updated>2017-01-27T09:18:04Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Add new poll events&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{BZFS_API_Doc|keeptitle=1}}&lt;br /&gt;
==Overview==&lt;br /&gt;
API events are callbacks that a [[Plug-ins|plug-in]] can install into [[BZFS]] to be called in response to specific actions or state changes in the server side game world. Events are the primary method of communication from BZFS to installed plug-ins. Specific events exist for nearly all logical actions that can happen during a game of BZFlag.&lt;br /&gt;
&lt;br /&gt;
==Installation and Removal==&lt;br /&gt;
The callbacks for events are typically installed during the [[bz_Load]] (2.0.x) or [[Init]] (2.4+) entry point in a plug-in, so they can be active when a plug-in is first loaded.&lt;br /&gt;
&lt;br /&gt;
The plug-in must call the function;&lt;br /&gt;
&lt;br /&gt;
2.0.x&lt;br /&gt;
 BZF_API bool [[bz_registerEvent]] ( bz_eEventType eventType, [[bz_EventHandler]]* eventHandler );&lt;br /&gt;
&lt;br /&gt;
2.4+&lt;br /&gt;
 Register ( bz_eEventType );&lt;br /&gt;
&lt;br /&gt;
The plug-in registers and event callback derived from [[bz_EventHandler]] (2.0.x) or [[bz_Plugin]] (2.4+) for each specific event types it wishes to monitor.&lt;br /&gt;
&lt;br /&gt;
When a plug-in no longer needs to monitor an event, or when it is unloaded in the [[bz_Unload]] (2.0.x) or [[Cleanup]] (2.4+) entry point, the plug-in must remove the installed callback by calling the function;&lt;br /&gt;
&lt;br /&gt;
2.0.x&lt;br /&gt;
 BZF_API bool [[bz_removeEvent]] ( bz_eEventType eventType, [[bz_EventHandler]]* eventHandler );&lt;br /&gt;
&lt;br /&gt;
2.4+&lt;br /&gt;
 Flush();&lt;br /&gt;
&lt;br /&gt;
In BZFlag 2.4, events are no longer removed individually but instead they are all removed automatically by calling on the &#039;Flush()&#039; method.&lt;br /&gt;
&lt;br /&gt;
==Event Handler==&lt;br /&gt;
The plug-in must define a class that is derived from [[bz_EventHandler]] (2.0.x) or [[bz_Plugin]] (2.4+) and pass a pointer to an object of that class when ever it registers an event callback.&lt;br /&gt;
&lt;br /&gt;
When ever a specific event is triggered, BZFS will call the &#039;process&#039; (2.0.x) or &#039;Event&#039; (2.4+) method of the installed callback class.&lt;br /&gt;
&lt;br /&gt;
2.0.x&lt;br /&gt;
   virtual void process ( bz_EventData *eventData ) = 0;&lt;br /&gt;
&lt;br /&gt;
2.4+&lt;br /&gt;
   virtual void Event ( bz_EventData *eventData ) = 0;&lt;br /&gt;
&lt;br /&gt;
==Event Data==&lt;br /&gt;
With each call to the &#039;process&#039; method of the installed event handler, BZFS will pass the plug-in a pointer to a class that contains all the data provided by the event. Each event derives a specific data class from [[bz_EventData]] that contains the specific member variables that contain the data. The base class [[bz_EventData]] contains the data member;&lt;br /&gt;
   bz_eEventType	eventType;&lt;br /&gt;
This data member allows a plug-in to identify the specific event and cast the &#039;bz_EventData&#039; pointer to the appropriate specific data class. This is usefull for plug-ins that use the same &#039;bz_EventHandler&#039; to process more then one specific message.&lt;br /&gt;
&lt;br /&gt;
Please see the descriptions of each specific event for information and descriptions of the data classes for each event. Some specific events allow plug-ins to change the values of data members in the data class and will use the modified values instead.&lt;br /&gt;
&lt;br /&gt;
Plug-ins should never delete or free the memory for a data class. BZFS will manage all pointers passed to plug-ins.&lt;br /&gt;
&lt;br /&gt;
==Events==&lt;br /&gt;
The following list contains all the event types currently supported by BZFS version 2.99&lt;br /&gt;
&lt;br /&gt;
  [[bz_eAllowAutoPilotChangeEvent]]&lt;br /&gt;
  [[bz_eAllowCTFCaptureEvent]]&lt;br /&gt;
  [[bz_eAllowFlagGrabEvent]]&lt;br /&gt;
  [[bz_eAllowKillCommandEvent]]&lt;br /&gt;
  [[bz_eAllowPlayer]]&lt;br /&gt;
  [[bz_eAllowSpawn]]&lt;br /&gt;
  [[bz_eAnointRabbitEvent]]&lt;br /&gt;
  [[bz_eAutoPilotChangeEvent]]&lt;br /&gt;
  [[bz_eBZDBChange]]&lt;br /&gt;
  [[bz_eBanEvent]]&lt;br /&gt;
  [[bz_eCaptureEvent]]&lt;br /&gt;
  [[bz_eFilteredChatMessageEvent]]&lt;br /&gt;
  [[bz_eFlagDroppedEvent]]&lt;br /&gt;
  [[bz_eFlagGrabbedEvent]]&lt;br /&gt;
  [[bz_eFlagResetEvent]]&lt;br /&gt;
  [[bz_eFlagTransferredEvent]]&lt;br /&gt;
  [[bz_eGameStartEvent]]&lt;br /&gt;
  [[bz_eGameStartEvent|bz_eGameEndEvent]]&lt;br /&gt;
  [[bz_eGetAutoTeamEvent]]&lt;br /&gt;
  [[bz_eGetPlayerInfoEvent]]&lt;br /&gt;
  [[bz_eGetPlayerSpawnPosEvent]]&lt;br /&gt;
  [[bz_eGetWorldEvent]]&lt;br /&gt;
  [[bz_eHostBanModifyEvent]]&lt;br /&gt;
  [[bz_eHostBanNotifyEvent]]&lt;br /&gt;
  [[bz_eIdBanEvent]]&lt;br /&gt;
  [[bz_eIdleNewNonPlayerConnection]]&lt;br /&gt;
  [[bz_eKickEvent]]&lt;br /&gt;
  [[bz_eKillEvent]]&lt;br /&gt;
  [[bz_eListServerUpdateEvent]]&lt;br /&gt;
  [[bz_eLogingEvent]]&lt;br /&gt;
  [[bz_eLuaDataEvent]]&lt;br /&gt;
  [[bz_eMessageFilteredEvent]]&lt;br /&gt;
  [[bz_eNetDataReceiveEvent]]&lt;br /&gt;
  [[bz_eNetDataSendEvent]]&lt;br /&gt;
  [[bz_eNewNonPlayerConnection]]&lt;br /&gt;
  [[bz_eNewRabbitEvent]]&lt;br /&gt;
  [[bz_eNullEvent]]&lt;br /&gt;
  [[bz_ePlayerAuthEvent]]&lt;br /&gt;
  [[bz_ePlayerCollision]]&lt;br /&gt;
  [[bz_ePlayerCustomDataChanged]]&lt;br /&gt;
  [[bz_ePlayerDieEvent]]&lt;br /&gt;
  [[bz_ePlayerJoinEvent]]&lt;br /&gt;
  [[bz_ePlayerPartEvent]]&lt;br /&gt;
  [[bz_ePlayerPauseRequestEvent]]&lt;br /&gt;
  [[bz_ePlayerPausedEvent]]&lt;br /&gt;
  [[bz_ePlayerSentCustomData]]&lt;br /&gt;
  [[bz_ePlayerSpawnEvent]]&lt;br /&gt;
  [[bz_ePlayerTeamChangeEvent]]&lt;br /&gt;
  [[bz_ePlayerUpdateDoneEvent]]&lt;br /&gt;
  [[bz_ePlayerUpdateEvent]]&lt;br /&gt;
  [[bz_eRawChatMessageEvent]]&lt;br /&gt;
  [[bz_eReloadEvent]]&lt;br /&gt;
  [[bz_eReportFiledEvent]]&lt;br /&gt;
  [[bz_eServerMsgEvent]]&lt;br /&gt;
  [[bz_eShotEndedEvent]]&lt;br /&gt;
  [[bz_eShotExpiredEvent]]&lt;br /&gt;
  [[bz_eShotFiredEvent]]&lt;br /&gt;
  [[bz_eShotRicochetEvent]]&lt;br /&gt;
  [[bz_eShotStoppedEvent]]&lt;br /&gt;
  [[bz_eShotTeleportEvent]]&lt;br /&gt;
  [[bz_eSlashCommandEvent]]&lt;br /&gt;
  [[bz_eTeleportEvent]]&lt;br /&gt;
  [[bz_eTickEvent]]&lt;br /&gt;
  [[bz_eUnknownSlashCommand]]&lt;br /&gt;
  [[bz_eWorldFinalized]]&lt;br /&gt;
  [[bz_eZoneEntryEvent]]&lt;br /&gt;
  [[bz_eZoneExitEvent]]&lt;br /&gt;
&lt;br /&gt;
The following list contains all the event types currently supported by BZFS version 2.4&lt;br /&gt;
  [[bz_eAllowCTFCaptureEvent]]&lt;br /&gt;
  [[bz_eAllowFlagGrab]]&lt;br /&gt;
  [[bz_eAllowPlayer]]&lt;br /&gt;
  [[bz_eAllowPollEvent]]&lt;br /&gt;
  [[bz_eAllowSpawn]]&lt;br /&gt;
  [[bz_eBanEvent]]&lt;br /&gt;
  [[bz_eBZDBChange]]&lt;br /&gt;
  [[bz_eCaptureEvent]]&lt;br /&gt;
  [[bz_eFilteredChatMessageEvent]]&lt;br /&gt;
  [[bz_eFlagDroppedEvent]]&lt;br /&gt;
  [[bz_eFlagGrabbedEvent]]&lt;br /&gt;
  [[bz_eFlagTransferredEvent]]&lt;br /&gt;
  [[bz_eGameEndEvent]]&lt;br /&gt;
  [[bz_eGamePauseEvent]]&lt;br /&gt;
  [[bz_eGameResumeEvent]]&lt;br /&gt;
  [[bz_eGameStartEvent]]&lt;br /&gt;
  [[bz_eGetAutoTeamEvent]]&lt;br /&gt;
  [[bz_eGetPlayerInfoEvent]]&lt;br /&gt;
  [[bz_eGetPlayerMotto]]&lt;br /&gt;
  [[bz_eGetPlayerSpawnPosEvent]]&lt;br /&gt;
  [[bz_eGetWorldEvent]]&lt;br /&gt;
  [[bz_eHostBanModifyEvent]]&lt;br /&gt;
  [[bz_eKickEvent]]&lt;br /&gt;
  [[bz_eKillEvent]]&lt;br /&gt;
  [[bz_eListServerUpdateEvent]]&lt;br /&gt;
  [[bz_eLoggingEvent]]&lt;br /&gt;
  [[bz_eMsgDebugEvent]]&lt;br /&gt;
  [[bz_eMessageFilteredEvent]]&lt;br /&gt;
  [[bz_eNetDataReceiveEvent]]&lt;br /&gt;
  [[bz_eNetDataSendEvent]]&lt;br /&gt;
  [[bz_eNewNonPlayerConnection]]&lt;br /&gt;
  [[bz_ePlayerAuthEvent]]&lt;br /&gt;
  [[bz_ePlayerDieEvent]]&lt;br /&gt;
  [[bz_ePlayerJoinEvent]]&lt;br /&gt;
  [[bz_ePlayerPartEvent]]&lt;br /&gt;
  [[bz_ePlayerPausedEvent]]&lt;br /&gt;
  [[bz_ePlayerScoreChanged]]&lt;br /&gt;
  [[bz_ePlayerSpawnEvent]]&lt;br /&gt;
  [[bz_ePlayerUpdateEvent]]&lt;br /&gt;
  [[bz_ePluginLoaded]]&lt;br /&gt;
  [[bz_ePluginUnloaded]]&lt;br /&gt;
  [[bz_ePollStartEvent]]&lt;br /&gt;
  [[bz_ePollVoteEvent]]&lt;br /&gt;
  [[bz_ePollVetoEvent]]&lt;br /&gt;
  [[bz_ePollEndEvent]]&lt;br /&gt;
  [[bz_eRawChatMessageEvent]]&lt;br /&gt;
  [[bz_eReportFiledEvent]]&lt;br /&gt;
  [[bz_eServerMsgEvent]]&lt;br /&gt;
  [[bz_eShotEndedEvent]]&lt;br /&gt;
  [[bz_eShotFiredEvent]]&lt;br /&gt;
  [[bz_eSlashCommandEvent]]&lt;br /&gt;
  [[bz_eTeamScoreChanged]]&lt;br /&gt;
  [[bz_eTickEvent]]&lt;br /&gt;
  [[bz_eUnknownSlashCommand]]&lt;br /&gt;
  [[bz_eWorldFinalized]]&lt;br /&gt;
  [[bz_eZoneEntryEvent]]&lt;br /&gt;
  [[bz_eZoneExitEvent]]&lt;br /&gt;
&lt;br /&gt;
There exists one additional event in the &#039;bz_eEventType&#039; enumeration in &#039;bzfsAPI.h&#039;, &#039;&#039;bz_eLastEvent&#039;&#039;. This event is simply used by BZFS to assist in the counting of the total number of events, it will never be called and can not be installed.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[BZFS API]]&lt;br /&gt;
* [[Functions(API)|BZFS API Functions]]&lt;br /&gt;
* [[Plug-ins]]&lt;br /&gt;
&lt;br /&gt;
[[Category:BZFS_API_Functions]]&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_eGetPlayerInfoEvent&amp;diff=9341</id>
		<title>Bz eGetPlayerInfoEvent</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_eGetPlayerInfoEvent&amp;diff=9341"/>
		<updated>2017-01-05T04:04:09Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Fix typos&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_eGetPlayerInfoEvent&#039;&#039;&#039; is an API event that is called each time the server sends out a player info update message to a remote player.&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&#039;&#039;&#039;bz_eGetPlayerInfoEvent&#039;&#039;&#039; returns the &#039;&#039;&#039;bz_GetPlayerInfoEventData_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_eGetPlayerInfoEvent&lt;br /&gt;
  |-&lt;br /&gt;
  |playerID&lt;br /&gt;
  |int&lt;br /&gt;
  |The playerID the record refers too.&lt;br /&gt;
  |-&lt;br /&gt;
  |callsign&lt;br /&gt;
  |[[bz_ApiString]]&lt;br /&gt;
  |The callsign for the player.&lt;br /&gt;
  |-&lt;br /&gt;
  |ipAddress&lt;br /&gt;
  |[[bz_ApiString]]&lt;br /&gt;
  |The IPv4 address for the player. (not set in 2.4.0, fixed in 2.4.1.)&lt;br /&gt;
  |-&lt;br /&gt;
  |team&lt;br /&gt;
  |[[bz_eTeamType]]&lt;br /&gt;
  |The team the player is current only.&lt;br /&gt;
  |-&lt;br /&gt;
  |admin&lt;br /&gt;
  |bool&lt;br /&gt;
  |The admin permission state of the player, indicating if they will be displayed with an &#039;@&#039; symbol in the scoreboard.&lt;br /&gt;
  |-&lt;br /&gt;
  |verified&lt;br /&gt;
  |bool&lt;br /&gt;
  |The authentication state of the player, indicating if they will be displayed with an &#039;+&#039; symbol in the scoreboard.&lt;br /&gt;
  |-&lt;br /&gt;
  |registered&lt;br /&gt;
  |bool&lt;br /&gt;
  |The state of the player&#039;s username. This value is true if the username is registered. If the user is not verified, but registered then they will be displayed with an &#039;-&#039; symbol in the scoreboard.&lt;br /&gt;
  |-&lt;br /&gt;
  |eventTime&lt;br /&gt;
  |double&lt;br /&gt;
  |The local server time of the event.&lt;br /&gt;
  |}&lt;br /&gt;
&lt;br /&gt;
==Uses==&lt;br /&gt;
This is a modification event. The state members can be changed ( admin, verified, and registered ). Changes to these values only change the data sent to the remote user, they do not change any internal permission states or access permissions. This event is only to allow plug-ins to overide the logic used for the display of the various scoreboard symbols.&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Leagues_United&amp;diff=9078</id>
		<title>Leagues United</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Leagues_United&amp;diff=9078"/>
		<updated>2016-10-29T03:51:57Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Rectify incorrect information&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Leagues United&#039;&#039;&#039; is the successor to both [[Ducati League]] and [[GU League]]&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
The Leagues United is currently the most successful and active league is BZFlag. It launched on February 21, 2016. There are currently [http://leaguesunited.org/teams 32 teams], 5 of which are active. There is a massive number of [http://leaguesunited.org/players players] in Leagues United.&lt;br /&gt;
&lt;br /&gt;
Leagues United offers challenging competition and includes some of the top BZFlag players.&lt;br /&gt;
&lt;br /&gt;
Be sure to visit the [https://forums.bzflag.org/viewforum.php?f=114 official Leagues United forum] and read the &amp;quot;sticky&amp;quot; threads at the top of the page. They contain a lot of important information.&lt;br /&gt;
&lt;br /&gt;
=Playing in Leagues United=&lt;br /&gt;
&lt;br /&gt;
For players that are new to BZFlag, it is recommended to check out the [[Getting_Started|Getting Started]] page. A [[Getting_Started#Registering_a_callsign.28Optional.29|globally registered name]] is required for league play.&lt;br /&gt;
&lt;br /&gt;
A player can then visit [http://leaguesunited.org/ to register in the league] using the same name. One of the [http://leaguesunited.org/admins League Council] members needs to contacted to be added to the spawn list.&lt;br /&gt;
==Rules and Guidelines==&lt;br /&gt;
&lt;br /&gt;
The league has a high standard of behavior and sportsmanship. So check these rules before doing anything else:&lt;br /&gt;
&lt;br /&gt;
*Match disturbance, player harassment, language, cheat accusations in public (1 day -7 days ban)&lt;br /&gt;
*Using cheats on public servers or in other leagues (6-9 months)&lt;br /&gt;
*Using cheats in the league (1 year to life)&lt;br /&gt;
&lt;br /&gt;
These are subject to change, so please always check the [http://leaguesunited.org/2 Official Rules page] directly.&lt;br /&gt;
&lt;br /&gt;
===Matching in Leagues United===&lt;br /&gt;
&lt;br /&gt;
A good way to get started in the league is to play fun matches (typically abbreviated as &#039;fm&#039;). These types of matches are very popular. Only official matches are entered into the website, so there is less pressure during a fun match. Players do not have to be in a team to fm, and players from specific league teams don&#039;t have to play on the same color.&lt;br /&gt;
&lt;br /&gt;
Fun matches can also have additional players join during play.  Make sure that the current players don&#039;t mind before joining a match. Players should &#039;&#039;&#039;self-kill&#039;&#039;&#039; by shooting while facing a wall or self-destructing with the delete key. This ensures there is not an unfair advantage due to initially spawning on the team base. The phrase &amp;quot;sk please&amp;quot; is used quite often to request that someone self-kills.&lt;br /&gt;
&lt;br /&gt;
Fun matches are not reported.&lt;br /&gt;
&lt;br /&gt;
===Teams, Matching &amp;amp; Reporting===&lt;br /&gt;
&lt;br /&gt;
Once you&#039;re registered and want to get some action. Firstly you&#039;re going to need a team. You can join a team by visiting the [http://leaguesunited.org/teams teams] page and hitting the &amp;quot;Join&amp;quot; button next to the team, that is, if the team is open to anyone. Most teams however, are closed and can only be joined by invitation sent from the team leader. &lt;br /&gt;
Usually you will always find some teams that are interested in new and active players. If you want to contact the leader of a team or the team itself, use the &amp;quot;BZMail&amp;quot; option that can be found at the top or bottom of any Team/Player profile page.  &lt;br /&gt;
Don&#039;t be discouraged if the first couple of requests get turned down, most teams like to get to know the players before they accept them into their team. But it&#039;s easy to establish yourself within the Leagues community. You can get to know players best by playing fun matches, spending time on the various public servers and talking to others in Observer during matches. It&#039;s a learning by doing system. &lt;br /&gt;
&lt;br /&gt;
Once you&#039;ve found and joined a team you like you can immediately start matching! There are some rules you should take into account before doing so though. &lt;br /&gt;
&lt;br /&gt;
===Official Matches===&lt;br /&gt;
&lt;br /&gt;
Basic commands needed during official matches:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;/official&#039;&#039;&#039; or &#039;&#039;&#039;/fm&#039;&#039;&#039; - Start either an official match or a fun match, respectively&lt;br /&gt;
* &#039;&#039;&#039;/timelimit&#039;&#039;&#039; - Change the duration of the match; durations may only be 15, 20, or 30 minutes. This must be set &#039;&#039;before&#039;&#039; the match starts.&lt;br /&gt;
* &#039;&#039;&#039;/pause&#039;&#039;&#039; - Pause the match timer. Should not be abused and should only be used when necessary. (E.g. a player has to stop for a moment, etc.)&lt;br /&gt;
* &#039;&#039;&#039;/resume&#039;&#039;&#039; - Resume the match timer and allow the match to continue.&lt;br /&gt;
* &#039;&#039;&#039;/finish or /cancel&#039;&#039;&#039; - This will abruptly end the match at any given time. (Do not abuse! Ending a match with out any notice will most certainly lead to a ban.)&lt;br /&gt;
* &#039;&#039;&#039;/mapchange&#039;&#039;&#039; - This changes the map that is currently on a server.(Currently supported maps are Babel, Ducati, DucatiMini, DuPi, HiX, Pillbox.) Typing &#039;/mapchange Babel&#039;  Upon rejoining the server, you will find the Babel map loaded. &lt;br /&gt;
&lt;br /&gt;
Guidelines:&lt;br /&gt;
&lt;br /&gt;
* Do not start the match timer before all participating players are ready and make sure everyone has agreed on playing an official match. &lt;br /&gt;
* Make sure all players agree with opponents lag before starting the match. It is frowned upon to start a match and realize half way in that the lag is unplayable.&lt;br /&gt;
* Everyone participating should either able to finish the match or have a substitute available in case. &lt;br /&gt;
* Make sure the server is an official Leagues United match server.&lt;br /&gt;
* If a player goes [NR] (which means they are &#039;Not Responding&#039;, thus have lost their connection to the server somehow), pause the match and wait for a substitute or for the player to rejoin&lt;br /&gt;
* Make sure everyone is ready for a substitute before it happens to prevent major chaos in the match.&lt;br /&gt;
* If two more players want to join from the respective teams, make sure everyone is prepared and has said yes to the addition of players.&lt;br /&gt;
* Pick a server closest to the majority of players. If it is a half/half case, just agree on one. &lt;br /&gt;
&lt;br /&gt;
If for some reason a match has to be canceled, use the &#039;&#039;&#039;/finish&#039;&#039;&#039; command to report the partial official match to the league website or use &#039;&#039;&#039;/cancel&#039;&#039;&#039; to not report an official match or cancel a fun match.&lt;br /&gt;
&lt;br /&gt;
==Official league servers==&lt;br /&gt;
&lt;br /&gt;
It is very important that you only play official matches on the official league servers.&lt;br /&gt;
&lt;br /&gt;
Here is a list of the servers and their respective locations. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Europe:&#039;&#039;&#039;&lt;br /&gt;
* brad.leaguesunited.org:5196 (London, England)&lt;br /&gt;
* brad.leaguesunited.org:5197 (London, England)&lt;br /&gt;
* brad.leaguesunited.org:5198 (London, England)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;America:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* allejo.leaguesunited.org:5196 (New Jersey, USA)&lt;br /&gt;
* allejo.leaguesunited.org:5197 (New Jersey, USA)&lt;br /&gt;
* allejo.leaguesunited.org:5198 (New Jersey, USA)&lt;br /&gt;
* BRL.ARPA.NET:5196 (California, USA)&lt;br /&gt;
* BRL.ARPA.NET:5197 (California, USA)&lt;br /&gt;
* BRL.ARPA.NET:5198 (California, USA)&lt;br /&gt;
&lt;br /&gt;
The replay servers can be found on port 5195&lt;br /&gt;
&lt;br /&gt;
If a match is not played on one of these servers, than it cannot be counted as official.&lt;br /&gt;
&lt;br /&gt;
===Replays===&lt;br /&gt;
&lt;br /&gt;
Every match, official or fun, is automatically recorded and saved to the respective replay server. Some servers have websites where the replay file, time, date and players are posted.&lt;br /&gt;
&lt;br /&gt;
You can find help on how to get a replay start and running on the servers but here&#039;s a quick summary:&lt;br /&gt;
&lt;br /&gt;
#Find the replay file you want by either using the above mentioned web-sites or by using&lt;br /&gt;
##/replay list -n (if possible, will display a list of recent replays in chronological order)&lt;br /&gt;
##/replay list *10042009* (will show you all replays played on April 10th, 2009)&lt;br /&gt;
&lt;br /&gt;
#Once you&#039;ve found your replay file&lt;br /&gt;
##/replay load #index number&lt;br /&gt;
&lt;br /&gt;
Use /replay skip + or - &amp;lt;amount of seconds&amp;gt; to navigate within a replay&lt;br /&gt;
Use /replay pause and /replay resume to pause and resume a replay&lt;br /&gt;
&lt;br /&gt;
===Public Servers===&lt;br /&gt;
&lt;br /&gt;
Along with the various official servers, there are quite a few public servers set up using either identical or similar settings to the league. Players usually meet up there to get warm and just shoot around before or after a match. Anyone can play there, regardless of being registered in the league or not. Some of these public servers are running the /mapchange feature, some are CTF and some are just FFA.&lt;br /&gt;
&lt;br /&gt;
Here is a list of LU public servers and the maps currently run on them. &lt;br /&gt;
&lt;br /&gt;
* allejo.public.leaguesunited.org:5190 (&#039;&#039;&#039;[[DuPi]]&#039;&#039;&#039; by zaphod)&lt;br /&gt;
* allejo.public.leaguesunited.org:5191 (&#039;&#039;&#039;[[Octocage]]&#039;&#039;&#039; by Bachiii and Saturos)&lt;br /&gt;
* allejo.public.leaguesunited.org:5192 (&#039;&#039;&#039;[[AHOD|All Hands On Deck]]&#039;&#039;&#039; by Trepan)&lt;br /&gt;
* allejo.public.leaguesunited.org:5193 (&#039;&#039;&#039;[[Brigade]]&#039;&#039;&#039; by ahs3)&lt;br /&gt;
* allejo.public.leaguesunited.org:5194 (LU Last Tank Standing)&lt;br /&gt;
&lt;br /&gt;
==Settings and Options==&lt;br /&gt;
&lt;br /&gt;
A big part of Leagues United, is being able to compete. But the premise for that, is having good settings that will make things like dodging, shooting and jumping a lot easier. A very large amount of the league players use mouse and only a dozen keyboard. If you are just starting out, a recommendation for new players is to try playing with mouse first, as many things will be easier to do later on.&lt;br /&gt;
In this game, it&#039;s impossible to become the best dodger, jumper and shooter at the same time. These are two if not three completely different types of playing that require many different settings. &lt;br /&gt;
&lt;br /&gt;
Most of the setting adjustment is done by the [[Config_File]], as you can not exercise all your possibilities in the GUI options. You can find a lot of detailed information by using the [http://my.bzflag.org/bb/search.php Search option on BZBB]. Many players have posted their personal configs and other tips there. &lt;br /&gt;
&lt;br /&gt;
For mouse players, these individual playing styles, also mean individual mouse settings. Mousebox size, mouse DPI, mouse sensitivity are all crucial. Usually slower mouse settings and a big mouseboxsize, will enable you to be a better jumper and or shooter, while fast, sensitive, precise mouse settings and a small to even negative mouseboxsize will be enable you to dodge better. &lt;br /&gt;
Next to all the native options, some players use mouse enhancement applications, see [http://my.bzflag.org/bb/viewtopic.php?f=103&amp;amp;t=13245 Whitelist] for further info.&lt;br /&gt;
&lt;br /&gt;
Very experienced players however, are known to be able to jump, shoot and dodge with extreme precision. So, no setting in the world is going to help, if you don&#039;t practice and play enough.&lt;br /&gt;
==Stats==&lt;br /&gt;
&lt;br /&gt;
You might have asked yourself how you&#039;re supposed to find other players online if you want to arrange a match. &lt;br /&gt;
There are some very useful BZStats and Player checkers that are have been useful to the whole community for years.&lt;br /&gt;
&lt;br /&gt;
#The general BZStats checker that Strayer coded shows a massive amount of information on everything BZFlag related.&lt;br /&gt;
##http://bzstats.strayer.de&lt;br /&gt;
##http://bzstats.strayer.de/leagues/lu/online/?lang=en (that shows all current LU players that are online)&lt;br /&gt;
&lt;br /&gt;
=Abbreviations you should know=&lt;br /&gt;
&lt;br /&gt;
As mentioned already above, there are some abbreviations used very often in the league. If you haven&#039;t already, check out [[Jargon]] for more non-league specific abbreviations and Jargon. Below are some league specific abbreviations. Note that this is not a complete list, just the most common terms you should know in order to prevent confusion between players or in a match.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;properties&amp;gt;&lt;br /&gt;
offi=Referring to an official match. (&amp;quot;offi?&amp;quot; means somebody wants to play an official match)&lt;br /&gt;
fm=Referring to fun match. (&amp;quot;fm?&amp;quot; means somebody wants to play a fun match)&lt;br /&gt;
sk=Selfkill. (Expression often used when new players join an already running fun match. New players should kill themselves once immediately after spawning.)&lt;br /&gt;
tk=Teamkill. (More frequently used outside of league play too)&lt;br /&gt;
def=Defense. Your flag is under immediate attack or about to be taken. Watch out for yours!&lt;br /&gt;
att=Attack. Focus on getting your opponents flag.&lt;br /&gt;
gs, ns, n1, g1=Good shot, nice shot, nice one, good one. Frequently used when a player does something that the other regards as nice or skillfull.&lt;br /&gt;
ty, thx=Thank you. Thanks.&lt;br /&gt;
hf, gl=Have fun, good luck.Usually always said to the opposing team before a match starts&lt;br /&gt;
gg=Good game. Usually said by all participating players after a match has ended.&lt;br /&gt;
&amp;lt;/properties&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Leagues]]&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=2.4_Releases&amp;diff=9073</id>
		<title>2.4 Releases</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=2.4_Releases&amp;diff=9073"/>
		<updated>2016-10-24T05:48:19Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Correct the order of 2.0.x releases&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Pages related to various releases of BZFlag.&lt;br /&gt;
&lt;br /&gt;
== Articles in category &amp;quot;Releases&amp;quot; ==&lt;br /&gt;
These are the many releases of BZFlag, starting with the current release.&lt;br /&gt;
&lt;br /&gt;
* [[BZFlag 2.4.8]]&lt;br /&gt;
* [[BZFlag 2.4.6]]&lt;br /&gt;
* [[BZFlag 2.4.4]]&lt;br /&gt;
* [[BZFlag 2.4.2]]&lt;br /&gt;
* [[BZFlag 2.4.0]]&lt;br /&gt;
* [[BZFlag 2.0.16]]&lt;br /&gt;
* [[BZFlag 2.0.14]]&lt;br /&gt;
* [[BZFlag 2.0.12]]&lt;br /&gt;
* [[BZFlag 2.0.10]]&lt;br /&gt;
* [[BZFlag 2.0.8]]&lt;br /&gt;
* [[BZFlag 2.0.6]]&lt;br /&gt;
* [[BZFlag 2.0.4]]&lt;br /&gt;
* [[BZFlag 2.0.2]]&lt;br /&gt;
* [[BZFlag 2.0.0]]&lt;br /&gt;
* [[BZFlag 1.10.8]]&lt;br /&gt;
* [[BZFlag 1.10.6]]&lt;br /&gt;
* [[BZFlag 1.10.4]]&lt;br /&gt;
* [[BZFlag 1.10.2]]&lt;br /&gt;
* [[BZFlag 1.10.0]]&lt;br /&gt;
* [[BZFlag 1.7g2]]&lt;br /&gt;
* [[BZFlag 1.7g0]]&lt;br /&gt;
* [[BZFlag 1.7e6]]&lt;br /&gt;
* [[BZFlag 1.7e4]]&lt;br /&gt;
* [[BZFlag 1.7e2]]&lt;br /&gt;
* [[BZFlag 1.7e1]]&lt;br /&gt;
* [[BZFlag 1.7e]]&lt;br /&gt;
* [[BZFlag 1.7d-9]]&lt;br /&gt;
* [[BZFlag 1.7d-8]]&lt;br /&gt;
* [[BZFlag 1.7d-7]]&lt;br /&gt;
* [[BZFlag 1.7d-6]]&lt;br /&gt;
* [[BZFlag 1.7d-5]]&lt;br /&gt;
* [[BZFlag 1.7d-4]]&lt;br /&gt;
* [[BZFlag 1.7d-3]]&lt;br /&gt;
* [[BZFlag 1.7d-2]]&lt;br /&gt;
* [[BZFlag 1.7d-1]]&lt;br /&gt;
* [[BZFlag 1.7c-2-3]]&lt;br /&gt;
* [[BZFlag 1.7c-2-2]]&lt;br /&gt;
* [[BZFlag 1.7c-2-1]]&lt;br /&gt;
* [[BZFlag 1.7c-2]]&lt;br /&gt;
* [[BZFlag 1.7c-1]]&lt;br /&gt;
&lt;br /&gt;
[[Category:History]]&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_reloadBadwords&amp;diff=9072</id>
		<title>Bz reloadBadwords</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_reloadBadwords&amp;diff=9072"/>
		<updated>2016-10-20T01:18:04Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Created page with &amp;quot;{{apicall | name        = bz_reloadBadwords | description = Reloads the bad words for the server. | returntype  = void | version     = 2.4.9 or later }}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name        = bz_reloadBadwords&lt;br /&gt;
| description = Reloads the bad words for the server.&lt;br /&gt;
| returntype  = void&lt;br /&gt;
| version     = 2.4.9 or later&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=9071</id>
		<title>Functions (API)</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=9071"/>
		<updated>2016-10-20T01:17:02Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Add bz_reloadBadwords() to the list&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|keeptitle=1}}&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_isPlayerSpawnable]] ( int playerID );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerCurrentState]] ( int playerID, bz_PlayerUpdateState &amp;amp;state );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerSpawnAtBase]] ( int playerId );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerSpawnable]] ( int playerID, bool spawn );&lt;br /&gt;
 BZF_API void [[bz_setPlayerSpawnAtBase]] ( int playerId, bool base );&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_getPlayerBySlotOrCallsign]] ( const char* name );&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;
Unknown&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByBZID]] ( int BZID );&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByCallsign]] ( const char* name );&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_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_incrementTeamWins]] (bz_eTeamType team, int increment);&lt;br /&gt;
 BZF_API void [[bz_incrementTeamLosses]] (bz_eTeamType team, int increment);&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 bool [[bz_incrementPlayerWins]] (int playerId, int increment)&lt;br /&gt;
 BZF_API bool [[bz_incrementPlayerLosses]] (int playerId, int increment);&lt;br /&gt;
 BZF_API bool [[bz_incrementPlayerTKs]] (int playerId, int increment);&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;
 BZF_API int [[bz_getIdleTime]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPausedTime]] ( 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;
 BZF_API void [[bz_reloadBadwords]] ();&lt;br /&gt;
 BZF_API int [[bz_getPlayerCount]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_getShotMismatch]] ( void );&lt;br /&gt;
 BZF_API void [[bz_setShotMismatch]] ( bool value );&lt;br /&gt;
 BZF_API bool [[bz_isAutoTeamEnabled]] ( void );&lt;br /&gt;
?&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 [[bz_ApiString]] [[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, bool keepTeamFlags = false );&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 const char* [[bz_getPlayerFlag]] ( int playerID );&lt;br /&gt;
 BZF_API int [[bz_getPlayerFlagID]] ( int playerID );&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;
=== Shot Management ===&lt;br /&gt;
2.4.5+&lt;br /&gt;
 BZF_API uint32_t [[bz_getShotMetaData]] (int fromPlayer, int shotID, const char* name);&lt;br /&gt;
 BZF_API void [[bz_setShotMetaData]] (int fromPlayer, int shotID , const char* name, uint32_t value);&lt;br /&gt;
 BZF_API bool [[bz_shotHasMetaData]] (int fromPlayer, int shotID , const char* name);&lt;br /&gt;
 BZF_API uint32_t [[bz_getShotGUID]] (int fromPlayer, int shotID);&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, bz_eTeamType shotTeam = eRogueTeam );&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, bz_eTeamType shotTeam = eRogueTeam );&lt;br /&gt;
 BZF_API int [[bz_fireWorldGM]] ( int targetPlayerID, float lifetime, float *pos, float tilt, float direction, float dt, bz_eTeamType shotTeam = eRogueTeam );&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 float [[bz_getCountdownRemaining]] ( 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 bool [[bz_isCountDownPaused]] ( void );&lt;br /&gt;
 BZF_API void [[bz_pauseCountdown]] ( int playerID );&lt;br /&gt;
 BZF_API void [[bz_pauseCountdown]] ( const char *pausedBy );&lt;br /&gt;
 BZF_API void [[bz_resumeCountdown]] ( int playerID );&lt;br /&gt;
 BZF_API void [[bz_resumeCountdown]] ( const char *resumedBy );&lt;br /&gt;
 BZF_API void [[bz_startCountdown]] ( int delay, float limit, int playerID );&lt;br /&gt;
 BZF_API void [[bz_startCountdown]] ( int delay, float limit, const char *byWho );&lt;br /&gt;
 BZF_API void [[bz_cancelCountdown]] ( int playerID );&lt;br /&gt;
 BZF_API void [[bz_cancelCountdown]] ( const char *canceledBy );&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);&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;
* [[Events (API)|BZFS API Events]]&lt;br /&gt;
* [[Plug-ins]]&lt;br /&gt;
&lt;br /&gt;
[[Category:BZFS_API_Functions]]&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=BZFlag_1.10.2&amp;diff=9067</id>
		<title>BZFlag 1.10.2</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=BZFlag_1.10.2&amp;diff=9067"/>
		<updated>2016-10-09T23:52:52Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Correct the version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;BZFlag version 1.10.2 is a version of the BZFlag game that was released on 2003-12-23. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* improved transparent proxy support for server - Frank Thilo, Alfredo Tupone&lt;br /&gt;
* Stop infinite spawn loop with complex worlds containing big pyramids&lt;br /&gt;
* Misc Swear processing fixes - Sean Morrison&lt;br /&gt;
* Allow banfile to be empty or not exist&lt;br /&gt;
* Don&#039;t let zoned tanks flatten Burrowed tanks&lt;br /&gt;
* Don&#039;t spawn in multiple locations based on multiple r-clicks&lt;br /&gt;
* Don&#039;t get speed kicked ejecting from buildings due to expansion&lt;br /&gt;
* Fix game style menu position&lt;br /&gt;
* Take flipz collisions in account for pyramids&lt;br /&gt;
* Fix Respawning after non-shot kills (Geno, Self Destruct, etc)&lt;br /&gt;
* More caching of BZBD vars - Frank Thilo&lt;br /&gt;
* ServerList uses strict http/1.1 - Frank Thilo&lt;br /&gt;
* Fix playercounts in rabbit mode&lt;br /&gt;
* GM now tracks player in slot 0&lt;br /&gt;
* Relax kick tolerances and soften kick messages - Sean Morrison&lt;br /&gt;
* Better lag stats - Frank Thilo&lt;br /&gt;
* Server-side Autoteam - Sean Morrison, Tupone Alfredo, Frank Thilo&lt;br /&gt;
* Remove bad lite effects with Thief steal&lt;br /&gt;
* Protect against crashes due to bad shot ids&lt;br /&gt;
* Better key binding - Tupone Alfredo, Dave Brosius&lt;br /&gt;
* Relax flag drop time for speed checking - Sean Morrison&lt;br /&gt;
* Better unresponsive player removal messages&lt;br /&gt;
* added kill messages as an option to bzadmin - Lars Luthman&lt;br /&gt;
* let genocided players spawn again - Lars Luthman&lt;br /&gt;
* auto team is now handled solely in the server - Frank Thilo&lt;br /&gt;
* increase averaging for jitter and loss values in lagstats - Frank Thilo&lt;br /&gt;
* mrtg script updated - Tim Riker&lt;br /&gt;
&lt;br /&gt;
[[Category:Versions]]&lt;br /&gt;
[[Category:Releases]]&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Plug-ins&amp;diff=9065</id>
		<title>Plug-ins</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Plug-ins&amp;diff=9065"/>
		<updated>2016-09-29T17:05:54Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Add note about linking to plugin_utils&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;BZFS can be built to support the loading of external libraries as plug-ins. These plug-ins can alter or replace the logic applied by the server, as well as automate many common tasks. &lt;br /&gt;
&lt;br /&gt;
Plug-ins are one of the more popular ways to apply modifications to the game. They do not require modifications of the BZFS application source code so it can be kept up to date with out the need to constantly apply patches. They have also proven to be a very simple method for distributing modifications from developers to players.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
Plug-ins are compiled dynamic link libraries, that are built for the same OS/RuntimeEnvironment as the BZFS server that hosts them. On [http://www.microsoft.com/windows Microsoft Windows] they are built as [http://en.wikipedia.org/wiki/Dynamic-link_library DLL] files. On [http://www.linux.org Linux] and other [http://www.unix.org/ Unix]-like systems they are built as .so files.&lt;br /&gt;
&lt;br /&gt;
==Use==&lt;br /&gt;
Plug-ins are loaded at startup by the &#039;&#039;&#039;-loadplugin&#039;&#039;&#039; option, or at run time with the &#039;&#039;/loadplugin&#039;&#039; command. If the full path to the plug-in is not specified, then [[BZFS]] will search a number of known sub directories for the plug-in as it attempts to load it. Using a valid path to the plug-in on load is highly recommended. While playing, all plug-ins loaded onto the server are visible with the /listplugins command.&lt;br /&gt;
===Parameters===&lt;br /&gt;
Some plug-ins take parameters that are passed to the plug-in on load. This is often a numeric value, or a path to a file. To pass a parameter to a plug-in, simply add a &#039;,&#039; after the plug-in name or path, and then add the parameter. Parameters can not have spaces, due to the way [[BZFS]] parses command line options and / commands.&lt;br /&gt;
&lt;br /&gt;
On load, plug-ins install a number of callbacks and event handlers with the hosting [[BZFS]] that are called when specific events happen. This allows the plug-in to perform additional actions on these events, or if need be, alter the results of the default logic of the server.&lt;br /&gt;
===Search Paths===&lt;br /&gt;
[[BZFS]] searches for plug-ins in two standard locations: the config directory and the global plug-ins directory.  The config directory is where the BZFlag config.cfg file is located, and the global plug-ins directory is $(prefix)/lib/bzflag/.&lt;br /&gt;
&lt;br /&gt;
==BZFS API==&lt;br /&gt;
All plug-ins are linked to the [[BZFS API]]. This programing layer provides the interface to the BZFS application. All events and functions that a plug-in can call are in the [[BZFS API]].&lt;br /&gt;
&lt;br /&gt;
==Standard plug-ins==&lt;br /&gt;
The [[BZFlag Source]] distribution contains a number of plug-ins that are maintained by the project [[:Category:Developer|developers]].&lt;br /&gt;
These plug-ins are located in the &#039;&#039;/plugins&#039;&#039; directory.&lt;br /&gt;
&lt;br /&gt;
As of July 2016, [[BZFlag Git|Git]] tree contains the following plug-ins:&lt;br /&gt;
&lt;br /&gt;
*[[airspawn]]&lt;br /&gt;
*[[autoFlagReset]]&lt;br /&gt;
*[[bzfscron]]&lt;br /&gt;
*[[chathistory]]&lt;br /&gt;
*[[customflagsample]]&lt;br /&gt;
*[[CustomZoneSample]]&lt;br /&gt;
*[[fairCTF]]&lt;br /&gt;
*[[fastmap]]&lt;br /&gt;
*[[flagStay]]&lt;br /&gt;
*[[HoldTheFlag]]&lt;br /&gt;
*[[keepaway]]&lt;br /&gt;
*[[killall]]&lt;br /&gt;
*[[koth]]&lt;br /&gt;
*[[logDetail]]&lt;br /&gt;
*[[nagware]]&lt;br /&gt;
*[[Phoenix]]&lt;br /&gt;
*[[playHistoryTracker]]&lt;br /&gt;
*[[plugin_utils]]&lt;br /&gt;
*[[pushstats]]&lt;br /&gt;
*[[rabbitTimer]]&lt;br /&gt;
*[[rabidRabbit]]&lt;br /&gt;
*[[recordmatch]]&lt;br /&gt;
*[[regFlag]]&lt;br /&gt;
*[[RogueGenocide]]&lt;br /&gt;
*[[SAMPLE_PLUGIN]]&lt;br /&gt;
*[[serverControl]]&lt;br /&gt;
*[[serverSidePlayerSample]]&lt;br /&gt;
*[[shockwaveDeath]]&lt;br /&gt;
*[[superUser]]&lt;br /&gt;
*[[teamflagreset]]&lt;br /&gt;
*[[thiefControl]]&lt;br /&gt;
*[[timedctf]]&lt;br /&gt;
*[[TimeLimit]]&lt;br /&gt;
*[[wwzones]]&lt;br /&gt;
&lt;br /&gt;
==Third Party Plug-ins==&lt;br /&gt;
A number of non-developers have created plug-ins for BZFS, and usually release them on the [https://forums.bzflag.org/ BZFlag Forums].&lt;br /&gt;
&lt;br /&gt;
=== On Linux ===&lt;br /&gt;
&lt;br /&gt;
Here are the steps to compile a hypothetical third party plug-in named &amp;quot;Example&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
==== For versions older than 2.4.3 ====&lt;br /&gt;
&lt;br /&gt;
# In the plugins directory of the BZFlag source tree run the command &#039;&#039;&#039;./newplug.sh Example&#039;&#039;&#039;&lt;br /&gt;
# Remove all of the files from the newly created plugins/Example directory (they were created by newplug.sh)&lt;br /&gt;
# Copy all of the distributed Example files into the plugins/Example directory&lt;br /&gt;
# In the top-level BZFlag source directory run &#039;&#039;&#039;autogen.sh&#039;&#039;&#039;, &#039;&#039;&#039;configure&#039;&#039;&#039;, and &#039;&#039;&#039;make&#039;&#039;&#039; as usual&lt;br /&gt;
&lt;br /&gt;
==== For versions on or after 2.4.3 ====&lt;br /&gt;
&lt;br /&gt;
# Store the distributed plugin files into the plugins/&#039;&#039;Example&#039;&#039; directory&lt;br /&gt;
# In the top-level BZFlag source directory run:&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 45px;&amp;quot;&amp;gt;&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
 ./configure --enable-custom-plugins=&#039;&#039;Example&#039;&#039;&lt;br /&gt;
 ./make&lt;br /&gt;
&lt;br /&gt;
Note that you can use a comma-separated list to specify multiple plugins to be built:&lt;br /&gt;
 ./configure --enable-custom-plugins=&#039;&#039;Example&#039;&#039;,&#039;&#039;AnotherExample&#039;&#039;,&#039;&#039;AnotherPlugin&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
When that finishes successfully the plug-in should be ready to use as described above.&lt;br /&gt;
&lt;br /&gt;
=== On Mac OS X ===&lt;br /&gt;
&lt;br /&gt;
In Xcode on Mac OS X, follow these instructions:&lt;br /&gt;
&lt;br /&gt;
# Create a new target for your plug-in.&lt;br /&gt;
#* &#039;&#039;&#039;Xcode 5 (and below)&#039;&#039;&#039;: Click on the BZFlag project name in the project navigator. Click Add Target, and create a new C/C++ Library. Name the plugin, and select &amp;quot;Dynamic&amp;quot; for type.&lt;br /&gt;
#* &#039;&#039;&#039;Xcode 6&#039;&#039;&#039;: Click on the BZFlag project in the project navigator. Go the File &amp;gt; New &amp;gt; Target. When prompted for the template for the target, under the &amp;quot;OS X&amp;quot; section, select the &amp;quot;Framework &amp;amp; Library&amp;quot; section and finally select &amp;quot;Library.&amp;quot; In the next dialog, select &amp;quot;None (Plain C/C++ Library)&amp;quot; for the Framework and &amp;quot;Dynamic&amp;quot; for the type.&lt;br /&gt;
# In the project navigator, move the new library target from the bottom of the screen into the &amp;quot;Targets&amp;quot; group.&lt;br /&gt;
# Click on the BZFlag project name in the project navigator again. In the list of targets, select the BZFlag application target. In the Build Phases tab, in the Target Dependencies pane, add your new library target as a dependency of the application target. Also add it to the Copy Files phase for the PlugIns directory.&lt;br /&gt;
# Select your new library target. Select the Build Settings tab, and locate the Other Linker Flags option. Add the option &amp;quot;-undefined dynamic_lookup&amp;quot;&lt;br /&gt;
# Find the Architecture build setting for your new library. Make sure it is the same architecture as the main codebase, or click Levels, click the Architecture setting under your library target, click Other, and delete the setting. This will make it assume the overall project build architecture.&lt;br /&gt;
# If your plug-in uses &amp;quot;plugin_utils.h&amp;quot;, then ensure that under Build Phases the &#039;&#039;&#039;libplugin_utils.a&#039;&#039;&#039; library is listed under &amp;quot;Link Binary With Libraries&amp;quot;; add the library if it is not already listed.&lt;br /&gt;
# Find the Executable Prefix build setting for your new library, and delete the &amp;quot;lib&amp;quot; setting.&lt;br /&gt;
# Add your source file(s) to the project, and make them members of your library target; ensure you select the &amp;quot;Copy items if needed&amp;quot; checkbox and to choose &amp;quot;Create groups.&amp;quot;&lt;br /&gt;
# Build as usual.&lt;br /&gt;
&lt;br /&gt;
==Preparing a Linux BZFS==&lt;br /&gt;
&lt;br /&gt;
In order to run plugins in BZFS, you need to recompile it with the --enable-shared option on the configure script.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note that as of 2.4.0 the BZFlag configuration has --enable-shared automatically enabled.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 $ ./configure --enable-shared --disable-client;&lt;br /&gt;
       make;&lt;br /&gt;
       make install;&lt;br /&gt;
&lt;br /&gt;
==Plug-in Development==&lt;br /&gt;
{{DoDoc|Describe the basics of plug-in development.}}&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
The plug-in system was added in BZFlag V. 2.0.4 and was initially met with a lukewarm reception by some of the core developers and the maintainer. The community has since embraced the concept and built a multitude of useful modifications, many that have been incorporated into the project as standard plug-ins.&lt;br /&gt;
&lt;br /&gt;
For Version 3.0 major changes to the [[BZFS API]] have been made to increase its lifespan.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Server]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Plug-Ins]]&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Plug-ins&amp;diff=8940</id>
		<title>Plug-ins</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Plug-ins&amp;diff=8940"/>
		<updated>2015-11-11T03:36:01Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Quick notes about adding plugin source to the Xcode build&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;BZFS can be built to support the loading of external libraries as plug-ins. These plug-ins can alter or replace the logic applied by the server, as well as automate many common tasks. &lt;br /&gt;
&lt;br /&gt;
Plug-ins are one of the more popular ways to apply modifications to the game. They do not require modifications of the BZFS application source code so it can be kept up to date with out the need to constantly apply patches. They have also proven to be a very simple method for distributing modifications from developers to players.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
Plug-ins are compiled dynamic link libraries, that are built for the same OS/RuntimeEnvironment as the BZFS server that hosts them. On [http://www.microsoft.com/windows Microsoft Windows] they are built as [http://en.wikipedia.org/wiki/Dynamic-link_library DLL] files. On [http://www.linux.org Linux] and other [http://www.unix.org/ Unix]-like systems they are built as .so files.&lt;br /&gt;
&lt;br /&gt;
==Use==&lt;br /&gt;
Plug-ins are loaded at startup by the &#039;&#039;&#039;-loadplugin&#039;&#039;&#039; option, or at run time with the &#039;&#039;/loadplugin&#039;&#039; command. If the full path to the plug-in is not specified, then [[BZFS]] will search a number of known sub directories for the plug-in as it attempts to load it. Using a valid path to the plug-in on load is highly recommended. While playing, all plug-ins loaded onto the server are visible with the /listplugins command.&lt;br /&gt;
===Parameters===&lt;br /&gt;
Some plug-ins take parameters that are passed to the plug-in on load. This is often a numeric value, or a path to a file. To pass a parameter to a plug-in, simply add a &#039;,&#039; after the plug-in name or path, and then add the parameter. Parameters can not have spaces, due to the way [[BZFS]] parses command line options and / commands.&lt;br /&gt;
&lt;br /&gt;
On load, plug-ins install a number of callbacks and event handlers with the hosting [[BZFS]] that are called when specific events happen. This allows the plug-in to perform additional actions on these events, or if need be, alter the results of the default logic of the server.&lt;br /&gt;
===Search Paths===&lt;br /&gt;
[[BZFS]] searches for plug-ins in two standard locations: the config directory and the global plug-ins directory.  The config directory is where the BZFlag config.cfg file is located, and the global plug-ins directory is $(prefix)/lib/bzflag/.&lt;br /&gt;
&lt;br /&gt;
==BZFS API==&lt;br /&gt;
All plug-ins are linked to the [[BZFS API]]. This programing layer provides the interface to the BZFS application. All events and functions that a plug-in can call are in the [[BZFS API]].&lt;br /&gt;
&lt;br /&gt;
==Standard plug-ins==&lt;br /&gt;
The [[BZFlag Source]] distribution contains a number of plug-ins that are maintained by the project [[:Category:Developer|developers]].&lt;br /&gt;
These plug-ins are located in the &#039;&#039;/plugins&#039;&#039; directory.&lt;br /&gt;
&lt;br /&gt;
As of March 2013, [[BZFlag SVN|SVN]] TRUNK contains the following plug-ins:&lt;br /&gt;
&lt;br /&gt;
*[[airspawn]]&lt;br /&gt;
*[[autoFlagReset]]&lt;br /&gt;
*[[bzfscron]]&lt;br /&gt;
*[[chathistory]]&lt;br /&gt;
*[[customflagsample]]&lt;br /&gt;
*[[fairCTF]]&lt;br /&gt;
*[[fastmap]]&lt;br /&gt;
*[[flagStay]]&lt;br /&gt;
*[[hiddenAdmin]]&lt;br /&gt;
*[[HoldTheFlag]]&lt;br /&gt;
*[[keepaway]]&lt;br /&gt;
*[[killall]]&lt;br /&gt;
*[[koth]]&lt;br /&gt;
*[[logDetail]]&lt;br /&gt;
*[[nagware]]&lt;br /&gt;
*[[Phoenix]]&lt;br /&gt;
*[[playHistoryTracker]]&lt;br /&gt;
*[[plugin_utils]]&lt;br /&gt;
*[[pushstats]]&lt;br /&gt;
*[[rabbitTimer]]&lt;br /&gt;
*[[rabidRabbit]]&lt;br /&gt;
*[[recordmatch]]&lt;br /&gt;
*[[regFlag]]&lt;br /&gt;
*[[RogueGenocide]]&lt;br /&gt;
*[[SAMPLE_PLUGIN]]&lt;br /&gt;
*[[serverControl]]&lt;br /&gt;
*[[serverSidePlayerSample]]&lt;br /&gt;
*[[shockwaveDeath]]&lt;br /&gt;
*[[superUser]]&lt;br /&gt;
*[[teamflagreset]]&lt;br /&gt;
*[[thiefControl]]&lt;br /&gt;
*[[timedctf]]&lt;br /&gt;
*[[TimeLimit]]&lt;br /&gt;
*[[webReport]]&lt;br /&gt;
*[[webstats]]&lt;br /&gt;
*[[wwzones]]&lt;br /&gt;
&lt;br /&gt;
==Third Party Plug-ins==&lt;br /&gt;
A number of non-developers have created plug-ins for BZFS, and usually release them on the [http://my.bzflag.org/bb/ BZFlag Forums].&lt;br /&gt;
&lt;br /&gt;
=== On Linux ===&lt;br /&gt;
&lt;br /&gt;
Here are the steps to compile a hypothetical third party plug-in named &amp;quot;Example&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
==== For versions older than 2.4.3 ====&lt;br /&gt;
&lt;br /&gt;
# In the plugins directory of the BZFlag source tree run the command &#039;&#039;&#039;./newplug.sh Example&#039;&#039;&#039;&lt;br /&gt;
# Remove all of the files from the newly created plugins/Example directory (they were created by newplug.sh)&lt;br /&gt;
# Copy all of the distributed Example files into the plugins/Example directory&lt;br /&gt;
# In the top-level BZFlag source directory run &#039;&#039;&#039;autogen.sh&#039;&#039;&#039;, &#039;&#039;&#039;configure&#039;&#039;&#039;, and &#039;&#039;&#039;make&#039;&#039;&#039; as usual&lt;br /&gt;
&lt;br /&gt;
==== For versions on or after 2.4.3 ====&lt;br /&gt;
&lt;br /&gt;
# Store the distributed plugin files into the plugins/&#039;&#039;Example&#039;&#039; directory&lt;br /&gt;
# In the top-level BZFlag source directory run:&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 45px;&amp;quot;&amp;gt;&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
 ./configure --enable-custom-plugins=&#039;&#039;Example&#039;&#039;&lt;br /&gt;
 ./make&lt;br /&gt;
&lt;br /&gt;
Note that you can use a comma-separated list to specify multiple plugins to be built:&lt;br /&gt;
 ./configure --enable-custom-plugins=&#039;&#039;Example&#039;&#039;,&#039;&#039;AnotherExample&#039;&#039;,&#039;&#039;AnotherPlugin&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
When that finishes successfully the plug-in should be ready to use as described above.&lt;br /&gt;
&lt;br /&gt;
=== On Mac OS X ===&lt;br /&gt;
&lt;br /&gt;
In Xcode on Mac OS X, follow these instructions:&lt;br /&gt;
&lt;br /&gt;
# Create a new target for your plug-in.&lt;br /&gt;
#* &#039;&#039;&#039;Xcode 5 (and below)&#039;&#039;&#039;: Click on the BZFlag project name in the project navigator. Click Add Target, and create a new C/C++ Library. Name the plugin, and select &amp;quot;Dynamic&amp;quot; for type.&lt;br /&gt;
#* &#039;&#039;&#039;Xcode 6&#039;&#039;&#039;: Click on the BZFlag project in the project navigator. Go the File &amp;gt; New &amp;gt; Target. When prompted for the template for the target, under the &amp;quot;OS X&amp;quot; section, select the &amp;quot;Framework &amp;amp; Library&amp;quot; section and finally select &amp;quot;Library.&amp;quot; In the next dialog, select &amp;quot;None (Plain C/C++ Library)&amp;quot; for the Framework and &amp;quot;Dynamic&amp;quot; for the type.&lt;br /&gt;
# In the project navigator, move the new library target from the bottom of the screen into the &amp;quot;Targets&amp;quot; group.&lt;br /&gt;
# Click on the BZFlag project name in the project navigator again. In the list of targets, select the BZFlag application target. In the Build Phases tab, in the Target Dependencies pane, add your new library target as a dependency of the application target. Also add it to the Copy Files phase for the PlugIns directory.&lt;br /&gt;
# Select your new library target. Select the Build Settings tab, and locate the Other Linker Flags option. Add the option &amp;quot;-undefined dynamic_lookup&amp;quot;&lt;br /&gt;
# Find the Architecture build setting for your new library. Make sure it is the same architecture as the main codebase, or click Levels, click the Architecture setting under your library target, click Other, and delete the setting. This will make it assume the overall project build architecture.&lt;br /&gt;
# Find the Executable Prefix build setting for your new library, and delete the &amp;quot;lib&amp;quot; setting.&lt;br /&gt;
# Add your source file(s) to the project, and make them members of your library target; ensure you select the &amp;quot;Copy items if needed&amp;quot; checkbox and to choose &amp;quot;Create groups.&amp;quot;&lt;br /&gt;
# Build as usual.&lt;br /&gt;
&lt;br /&gt;
==Preparing a Linux BZFS==&lt;br /&gt;
&lt;br /&gt;
In order to run plugins in BZFS, you need to recompile it with the --enable-shared option on the configure script.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note that as of 2.4.0 the BZFlag configuration has --enable-shared automatically enabled.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 $ ./configure --enable-shared --disable-client;&lt;br /&gt;
       make;&lt;br /&gt;
       make install;&lt;br /&gt;
&lt;br /&gt;
==Plug-in Development==&lt;br /&gt;
{{DoDoc|Describe the basics of plug-in development.}}&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
The plug-in system was added in BZFlag V. 2.0.4 and was initially met with a lukewarm reception by some of the core developers and the maintainer. The community has since embraced the concept and built a multitude of useful modifications, many that have been incorporated into the project as standard plug-ins.&lt;br /&gt;
&lt;br /&gt;
For Version 3.0 major changes to the [[BZFS API]] have been made to increase its lifespan.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Server]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Plug-Ins]]&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_getCountdownRemaining&amp;diff=8937</id>
		<title>Bz getCountdownRemaining</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_getCountdownRemaining&amp;diff=8937"/>
		<updated>2015-09-25T21:10:51Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Update return type and function name&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_getCountdownRemaining&lt;br /&gt;
| returns       = The amount of time remaining in a match in seconds, or &amp;lt;code&amp;gt;-1&amp;lt;/code&amp;gt; if a match is not currently in progress.&lt;br /&gt;
| returntype    = float&lt;br /&gt;
| description   = Retrieves the time remaining in a running countdown.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
Display the remaining time to a user upon joining.&lt;br /&gt;
 case bz_ePlayerJoinEvent: {&lt;br /&gt;
 	int player = (bz_PlayerJoinPartEventData_V1*)eventData)-&amp;gt;playerID;&lt;br /&gt;
 	if (bz_isCountDownActive()) {&lt;br /&gt;
 	 	bz_sendTextMessagef(BZ_SERVER, player,&lt;br /&gt;
 	 		&amp;quot;Welcome! The current match will finish in %.0f seconds!&amp;quot;, bz_getCountdownRemaining());&lt;br /&gt;
 	} else {&lt;br /&gt;
 	 	bz_sendTextMessage(BZ_SERVER, player,&lt;br /&gt;
 	 		&amp;quot;Welcome! No match is currently running.&amp;quot;);&lt;br /&gt;
 	}&lt;br /&gt;
 }break;&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_getCountdownProgress&amp;diff=8936</id>
		<title>Bz getCountdownProgress</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_getCountdownProgress&amp;diff=8936"/>
		<updated>2015-09-25T21:09:27Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Allejo moved page Bz getCountdownProgress to Bz getCountdownRemaining: Renamed function&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Bz getCountdownRemaining]]&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_getCountdownRemaining&amp;diff=8935</id>
		<title>Bz getCountdownRemaining</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_getCountdownRemaining&amp;diff=8935"/>
		<updated>2015-09-25T21:09:27Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Allejo moved page Bz getCountdownProgress to Bz getCountdownRemaining: Renamed function&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_getCountdownProgress&lt;br /&gt;
| returns       = The amount of time remaining in a match in seconds, or &amp;lt;code&amp;gt;-1&amp;lt;/code&amp;gt; if a match is not currently in progress.&lt;br /&gt;
| returntype    = int&lt;br /&gt;
| description   = Retrieves the time remaining in a running countdown.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
Display the remaining time to a user upon joining.&lt;br /&gt;
 case bz_ePlayerJoinEvent: {&lt;br /&gt;
 	int player = (bz_PlayerJoinPartEventData_V1*)eventData)-&amp;gt;playerID;&lt;br /&gt;
 	if (bz_isCountDownActive()) {&lt;br /&gt;
 	 	bz_sendTextMessagef(BZ_SERVER, player,&lt;br /&gt;
 	 		&amp;quot;Welcome! The current match will finish in %d seconds!&amp;quot;, bz_getCountdownProgress());&lt;br /&gt;
 	} else {&lt;br /&gt;
 	 	bz_sendTextMessage(BZ_SERVER, player,&lt;br /&gt;
 	 		&amp;quot;Welcome! No match is currently running.&amp;quot;);&lt;br /&gt;
 	}&lt;br /&gt;
 }break;&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8934</id>
		<title>Functions (API)</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8934"/>
		<updated>2015-09-25T21:08:30Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Rename bz_getCountdownProgress() to bz_getCountdownRemaining()&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|keeptitle=1}}&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_isPlayerSpawnable]] ( int playerID );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerCurrentState]] ( int playerID, bz_PlayerUpdateState &amp;amp;state );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerSpawnAtBase]] ( int playerId );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerSpawnable]] ( int playerID, bool spawn );&lt;br /&gt;
 BZF_API void [[bz_setPlayerSpawnAtBase]] ( int playerId, bool base );&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_getPlayerBySlotOrCallsign]] ( const char* name );&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;
Unknown&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByBZID]] ( int BZID );&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByCallsign]] ( const char* name );&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_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_incrementTeamWins]] (bz_eTeamType team, int increment);&lt;br /&gt;
 BZF_API void [[bz_incrementTeamLosses]] (bz_eTeamType team, int increment);&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 bool [[bz_incrementPlayerWins]] (int playerId, int increment)&lt;br /&gt;
 BZF_API bool [[bz_incrementPlayerLosses]] (int playerId, int increment);&lt;br /&gt;
 BZF_API bool [[bz_incrementPlayerTKs]] (int playerId, int increment);&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;
 BZF_API int [[bz_getIdleTime]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPausedTime]] ( 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;
 BZF_API int [[bz_getPlayerCount]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_getShotMismatch]] ( void );&lt;br /&gt;
 BZF_API void [[bz_setShotMismatch]] ( bool value );&lt;br /&gt;
 BZF_API bool [[bz_isAutoTeamEnabled]] ( void );&lt;br /&gt;
?&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 [[bz_ApiString]] [[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, bool keepTeamFlags = false );&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 const char* [[bz_getPlayerFlag]] ( int playerID );&lt;br /&gt;
 BZF_API int [[bz_getPlayerFlagID]] ( int playerID );&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;
=== Shot Management ===&lt;br /&gt;
2.4.5+&lt;br /&gt;
 BZF_API uint32_t [[bz_getShotMetaData]] (int fromPlayer, int shotID, const char* name);&lt;br /&gt;
 BZF_API void [[bz_setShotMetaData]] (int fromPlayer, int shotID , const char* name, uint32_t value);&lt;br /&gt;
 BZF_API bool [[bz_shotHasMetaData]] (int fromPlayer, int shotID , const char* name);&lt;br /&gt;
 BZF_API uint32_t [[bz_getShotGUID]] (int fromPlayer, int shotID);&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, bz_eTeamType shotTeam = eRogueTeam );&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, bz_eTeamType shotTeam = eRogueTeam );&lt;br /&gt;
 BZF_API int [[bz_fireWorldGM]] ( int targetPlayerID, float lifetime, float *pos, float tilt, float direction, float dt, bz_eTeamType shotTeam = eRogueTeam );&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 float [[bz_getCountdownRemaining]] ( 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 bool [[bz_isCountDownPaused]] ( void );&lt;br /&gt;
 BZF_API void [[bz_pauseCountdown]] ( int playerID );&lt;br /&gt;
 BZF_API void [[bz_pauseCountdown]] ( const char *pausedBy );&lt;br /&gt;
 BZF_API void [[bz_resumeCountdown]] ( int playerID );&lt;br /&gt;
 BZF_API void [[bz_resumeCountdown]] ( const char *resumedBy );&lt;br /&gt;
 BZF_API void [[bz_startCountdown]] ( int delay, float limit, int playerID );&lt;br /&gt;
 BZF_API void [[bz_startCountdown]] ( int delay, float limit, const char *byWho );&lt;br /&gt;
 BZF_API void [[bz_cancelCountdown]] ( int playerID );&lt;br /&gt;
 BZF_API void [[bz_cancelCountdown]] ( const char *canceledBy );&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);&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;
* [[Event(API)|BZFS API Events]]&lt;br /&gt;
* [[Plug-ins]]&lt;br /&gt;
&lt;br /&gt;
[[Category:BZFS_API_Functions]]&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Server_Permissions&amp;diff=8931</id>
		<title>Server Permissions</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Server_Permissions&amp;diff=8931"/>
		<updated>2015-09-15T03:03:40Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Remove vandalism&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Permissions can be assigned to groups and individual players on a server. &lt;br /&gt;
These permissions control what a player may do on the server. Many of the permissions control which [[Client_Commands|commands]] can be used by players.&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
| {{Hl3}} |&#039;&#039;&#039;Permission&#039;&#039;&#039; &lt;br /&gt;
| {{Hl3}} |&#039;&#039;&#039;Description&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|  actionMessage  ||  Allowed to use &#039;&#039;&#039;&#039;&#039;/me&#039;&#039;&#039;&#039;&#039;                                                &lt;br /&gt;
|-&lt;br /&gt;
|  adminMessageReceive  ||  Player receives messages sent to the admin channel                  &lt;br /&gt;
|-&lt;br /&gt;
|  adminMessageSend  ||  Player may send messages to the admin channel                       &lt;br /&gt;
|-&lt;br /&gt;
|  antiban  ||  Player is immune to &#039;&#039;&#039;&#039;&#039;/ban&#039;&#039;&#039;&#039;&#039;                                          &lt;br /&gt;
|-&lt;br /&gt;
|  antideregister  ||  Player cannot be deregistered with &#039;&#039;&#039;&#039;&#039;/deregister&#039;&#039;&#039;&#039;&#039;                    &lt;br /&gt;
|-&lt;br /&gt;
|  antikick  ||  Player is immune to &#039;&#039;&#039;&#039;&#039;/kick&#039;&#039;&#039;&#039;&#039;                                         &lt;br /&gt;
|-&lt;br /&gt;
|  antikill  ||  Player is immune to &#039;&#039;&#039;&#039;&#039;/kill&#039;&#039;&#039;&#039;&#039;                                         &lt;br /&gt;
|-&lt;br /&gt;
|  antipoll  ||  Player is immune to &#039;&#039;&#039;&#039;&#039;/poll&#039;&#039;&#039;&#039;&#039;                                         &lt;br /&gt;
|-&lt;br /&gt;
|  antipollban  ||  Player is immune banning with &#039;&#039;&#039;&#039;&#039;/poll&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|  antipollkick  ||  Player is immune kicking with &#039;&#039;&#039;&#039;&#039;/poll&#039;&#039;&#039;&#039;&#039;                               &lt;br /&gt;
|-&lt;br /&gt;
|  antipollkill  ||  Player is immune killing with &#039;&#039;&#039;&#039;&#039;/poll&#039;&#039;&#039;&#039;&#039;                               &lt;br /&gt;
|-&lt;br /&gt;
|  ban  ||  Player may ban other players with &#039;&#039;&#039;&#039;&#039;/ban&#039;&#039;&#039;&#039;&#039;                            &lt;br /&gt;
|-&lt;br /&gt;
|  banlist  ||  Player may list active bans with &#039;&#039;&#039;&#039;&#039;/banlist&#039;&#039;&#039;&#039;&#039;     &lt;br /&gt;
|-&lt;br /&gt;
|  clientquery  ||  Player may issue &#039;&#039;&#039;&#039;&#039;/clientquery&#039;&#039;&#039;&#039;&#039;, available in version 2.4.3+.                       &lt;br /&gt;
|-&lt;br /&gt;
|  countdown  ||  Player may issue &#039;&#039;&#039;&#039;&#039;/countdown&#039;&#039;&#039;&#039;&#039;                                       &lt;br /&gt;
|-&lt;br /&gt;
|  date  ||  Player may query the date and time from the server with &#039;&#039;&#039;&#039;&#039;/date&#039;&#039;&#039;&#039;&#039;     &lt;br /&gt;
|-&lt;br /&gt;
|  endGame  ||  Player may issue &#039;&#039;&#039;&#039;&#039;/gameover&#039;&#039;&#039;&#039;&#039;                                         &lt;br /&gt;
|-&lt;br /&gt;
|  flagHistory  ||  Player allowed to use &#039;&#039;&#039;&#039;&#039;/flag history&#039;&#039;&#039;&#039;&#039;                                &lt;br /&gt;
|-&lt;br /&gt;
|  flagMaster  ||  Player allowed to use all &#039;&#039;&#039;&#039;&#039;/flag&#039;&#039;&#039;&#039;&#039; commands                 &lt;br /&gt;
|-&lt;br /&gt;
|  flagMod  ||  Player allowed to use &#039;&#039;&#039;&#039;&#039;/flag reset&#039;&#039;&#039;&#039;&#039;, &#039;&#039;&#039;&#039;&#039;/flag show&#039;&#039;&#039;&#039;&#039; and &#039;&#039;&#039;&#039;&#039;/flag history&#039;&#039;&#039;&#039;&#039;. Using &#039;&#039;&#039;&#039;&#039;/flag reset&#039;&#039;&#039;&#039;&#039; to reset an individual flag requires &#039;&#039;flagMaster&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|  hideAdmin  ||  Player doesn&#039;t show @                                  &lt;br /&gt;
|-&lt;br /&gt;
|  idlestats  ||  Player allowed to use &#039;&#039;&#039;&#039;&#039;/idlestats&#039;&#039;&#039;&#039;&#039;                                  &lt;br /&gt;
|-&lt;br /&gt;
|  info  ||                                                              &lt;br /&gt;
|-&lt;br /&gt;
|  jitterwarn  ||  Player may use &#039;&#039;&#039;&#039;&#039;/jitterwarn&#039;&#039;&#039;&#039;&#039; and &#039;&#039;&#039;&#039;&#039;/jitterdrop&#039;&#039;&#039;&#039;&#039;&#039; to query or set jitterwarn/jitterdrop variable          &lt;br /&gt;
|-&lt;br /&gt;
|  kick  ||  Player allowed to use &#039;&#039;&#039;&#039;&#039;/kick&#039;&#039;&#039;&#039;&#039;                                       &lt;br /&gt;
|-&lt;br /&gt;
|  kill  ||  Player allowed to use &#039;&#039;&#039;&#039;&#039;/kill&#039;&#039;&#039;&#039;&#039;                                       &lt;br /&gt;
|-&lt;br /&gt;
|  lagstats || Player may use &#039;&#039;&#039;&#039;&#039;/lagstats&#039;&#039;&#039;&#039;&#039; to query the latency of players&lt;br /&gt;
|-&lt;br /&gt;
|  lagwarn  ||  Player may use &#039;&#039;&#039;&#039;&#039;/lagwarn&#039;&#039;&#039;&#039;&#039; and &#039;&#039;&#039;&#039;&#039;/lagdrop&#039;&#039;&#039;&#039;&#039; to query or set lagwarn/lagdrop variable          &lt;br /&gt;
|-&lt;br /&gt;
|  listPerms  ||  Player may use &#039;&#039;&#039;&#039;&#039;/showperms&#039;&#039;&#039;&#039;&#039; to show the current permissions of the user/selected player.                                                                      &lt;br /&gt;
|-&lt;br /&gt;
|  listPlugins  ||  Player may use &#039;&#039;&#039;&#039;&#039;/listplugins&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|  loadPlugin || Player may use &#039;&#039;&#039;&#039;&#039;/loadplugin&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|  masterban  ||  Player may use &#039;&#039;&#039;&#039;&#039;/masterban&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|  modcount ||  Player may use &#039;&#039;&#039;&#039;&#039;/modcount&#039;&#039;&#039;&#039;&#039;                       &lt;br /&gt;
|-&lt;br /&gt;
|  mute  ||  Player may use &#039;&#039;&#039;&#039;&#039;/mute&#039;&#039;&#039;&#039;&#039;                                              &lt;br /&gt;
|-&lt;br /&gt;
|  packetlosswarn  ||  Player may use &#039;&#039;&#039;&#039;&#039;/packetlosswarn&#039;&#039;&#039;&#039;&#039; and &#039;&#039;&#039;&#039;&#039;/packetlossdrop&#039;&#039;&#039;&#039;&#039; to query or set packetlosswarn/packetlossdrop variable          &lt;br /&gt;
|-&lt;br /&gt;
|  playerList  ||  Player may use &#039;&#039;&#039;&#039;&#039;/playerlist&#039;&#039;&#039;&#039;&#039;                                        &lt;br /&gt;
|-&lt;br /&gt;
|  plugins  ||  Player may use &#039;&#039;&#039;&#039;&#039;/listplugins&#039;&#039;&#039;&#039;&#039;, &#039;&#039;&#039;&#039;&#039;/loadplugin&#039;&#039;&#039;&#039;&#039; and &#039;&#039;&#039;&#039;&#039;/unloadplugin&#039;&#039;&#039;&#039;&#039;. Requires bzflag to be built with the optional plug-in support, available in version 2.0.10+.                                       &lt;br /&gt;
|-&lt;br /&gt;
|  poll  ||  Player may use &#039;&#039;&#039;&#039;&#039;/poll&#039;&#039;&#039;&#039;&#039;                                              &lt;br /&gt;
|-&lt;br /&gt;
|  pollBan  ||  Player may use &#039;&#039;&#039;&#039;&#039;/poll ban&#039;&#039;&#039;&#039;&#039;                                          &lt;br /&gt;
|-&lt;br /&gt;
|  pollFlagReset  ||  Player may use &#039;&#039;&#039;&#039;&#039;/poll flagreset&#039;&#039;&#039;&#039;&#039;                                    &lt;br /&gt;
|-&lt;br /&gt;
|  pollKick  ||  Player may use &#039;&#039;&#039;&#039;&#039;/poll kick&#039;&#039;&#039;&#039;&#039;                                         &lt;br /&gt;
|-&lt;br /&gt;
|  pollKill  ||  Player may use &#039;&#039;&#039;&#039;&#039;/poll kill&#039;&#039;&#039;&#039;&#039;                                         &lt;br /&gt;
|-&lt;br /&gt;
|  pollSet   ||  Player may use &#039;&#039;&#039;&#039;&#039;/poll set&#039;&#039;&#039;&#039;&#039;                                          &lt;br /&gt;
|-&lt;br /&gt;
|  privateMessage  ||  Player may send private messages with &#039;.&#039;                           &lt;br /&gt;
|-&lt;br /&gt;
|  record  ||  Player may use &#039;&#039;&#039;&#039;&#039;/record&#039;&#039;&#039;&#039;&#039;                                            &lt;br /&gt;
|-&lt;br /&gt;
|  rejoin  ||  Allows instant rejoin, regardless of &#039;&#039;&#039;&#039;&#039;_rejoinTime&#039;&#039;&#039;&#039;&#039;                    &lt;br /&gt;
|-&lt;br /&gt;
|  removePerms  ||  May remove permissions from players                                 &lt;br /&gt;
|-&lt;br /&gt;
|  replay  ||  Player allowed to use &#039;&#039;&#039;&#039;&#039;/replay&#039;&#039;&#039;&#039;&#039;                      &lt;br /&gt;
|-&lt;br /&gt;
|  report  ||  Player allowed to use &#039;&#039;&#039;&#039;&#039;/report&#039;&#039;&#039;&#039;&#039;                             &lt;br /&gt;
|-&lt;br /&gt;
|  requireIdentify  ||  Registered callsigns must identify before they are allowed to spawn &lt;br /&gt;
|-&lt;br /&gt;
|  say  ||  Player allowed to use &#039;&#039;&#039;&#039;&#039;/say&#039;&#039;&#039;&#039;&#039;                                        &lt;br /&gt;
|-&lt;br /&gt;
|  sendHelp  ||  Player allowed to use &#039;&#039;&#039;&#039;&#039;/sendhelp&#039;&#039;&#039;&#039;&#039;                                   &lt;br /&gt;
|-&lt;br /&gt;
|  setAll  ||  Grants all set* perms, allows use of &#039;&#039;&#039;&#039;&#039;/reload&#039;&#039;&#039;&#039;&#039; and &#039;&#039;&#039;&#039;&#039;/serverdebug&#039;&#039;&#039;&#039;&#039;                                             &lt;br /&gt;
|-&lt;br /&gt;
|  setPerms  ||  May grant permissions to players                                    &lt;br /&gt;
|-&lt;br /&gt;
|  setVar  ||  Player allowed to use &#039;&#039;&#039;&#039;&#039;/set&#039;&#039;&#039;&#039;&#039;                                        &lt;br /&gt;
|-&lt;br /&gt;
|  shortBan  ||  Allowed bans with limited durations only                            &lt;br /&gt;
|-&lt;br /&gt;
|  showAdmin  ||  Gives a player an @ regardless of having the &amp;quot;shortban&amp;quot; or &amp;quot;ban&amp;quot; permission. &#039;&#039;The hideAdmin permission supersedes the showAdmin permission.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|  showOthers  ||  May use &#039;&#039;&#039;&#039;&#039;/showgroup&#039;&#039;&#039;&#039;&#039; and &#039;&#039;&#039;&#039;&#039;/showperms&#039;&#039;&#039;&#039;&#039; on other callsigns                             &lt;br /&gt;
|-&lt;br /&gt;
|  shutdownServer  ||  Player allowed to use &#039;&#039;&#039;&#039;&#039;/shutdownserver&#039;&#039;&#039;&#039;&#039;                               &lt;br /&gt;
|-&lt;br /&gt;
|  spawn  ||  Join game as a player. Observers don&#039;t need this permission.        &lt;br /&gt;
|-&lt;br /&gt;
|  superkill  ||  Player allowed to use &#039;&#039;&#039;&#039;&#039;/superkill&#039;&#039;&#039;&#039;&#039;                                  &lt;br /&gt;
|-&lt;br /&gt;
|  talk  ||  Allows player to send messages.                                     &lt;br /&gt;
|-&lt;br /&gt;
|  unban  ||  Player may use &#039;&#039;&#039;&#039;&#039;/unban&#039;&#039;&#039;&#039;&#039;                                             &lt;br /&gt;
|-&lt;br /&gt;
|  unloadPlugin || Player may use &#039;&#039;&#039;&#039;&#039;/unloadplugin&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|  unmute  ||  Player may use &#039;&#039;&#039;&#039;&#039;/unmute&#039;&#039;&#039;&#039;&#039;                                             &lt;br /&gt;
|-&lt;br /&gt;
|  veto  ||  Player may use &#039;&#039;&#039;&#039;&#039;/veto&#039;&#039;&#039;&#039;&#039;                                              &lt;br /&gt;
|-&lt;br /&gt;
|  viewReports  ||  Player may use &#039;&#039;&#039;&#039;&#039;/viewreports&#039;&#039;&#039;&#039;&#039;                                       &lt;br /&gt;
|-&lt;br /&gt;
|  vote  ||  Player may use &#039;&#039;&#039;&#039;&#039;/vote&#039;&#039;&#039;&#039;&#039;                                              &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Server]]&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_pauseCountdown&amp;diff=8916</id>
		<title>Bz pauseCountdown</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_pauseCountdown&amp;diff=8916"/>
		<updated>2015-08-22T08:44:46Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Fix spacing and make use of &amp;quot;removed&amp;quot; parameter&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_pauseCountdown&lt;br /&gt;
| version       = 2.4.3&lt;br /&gt;
| returns       = &lt;br /&gt;
| returntype    = void&lt;br /&gt;
| description   = Pauses the countdown that is currently running.&lt;br /&gt;
| param1      = playerID&lt;br /&gt;
| param1type  = int&lt;br /&gt;
| param1desc  = The id 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;
{{apicall&lt;br /&gt;
| name          = bz_pauseCountdown&lt;br /&gt;
| deprecated  = 2.4.3&lt;br /&gt;
| removed = 2.5.0&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;
===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;
 {&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;
 }&lt;br /&gt;
 break;&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Template:Apicall&amp;diff=8915</id>
		<title>Template:Apicall</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Template:Apicall&amp;diff=8915"/>
		<updated>2015-08-22T08:43:57Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Add parameter for when a function will be/has been removed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{DISPLAYTITLE:{{#if:{{NAMESPACE}}|{{NAMESPACE}}:|}}{{lcfirst:{{PAGENAME}}}}}}&amp;lt;/includeonly&amp;gt;&amp;lt;tt&amp;gt;{{#if:{{{returns|}}}|{{apicall/typelink|{{{returntype}}}}}|void}} {{{name}}} ({{apicall/ifsigparam|{{{param1type|}}}|{{{param1|}}}}}{{apicall/ifnsigparam|{{{param2type|}}}|{{{param2|}}}}}{{apicall/ifnsigparam|{{{param3type|}}}|{{{param3|}}}}}{{apicall/ifnsigparam|{{{param4type|}}}|{{{param4|}}}}}{{apicall/ifnsigparam|{{{param5type|}}}|{{{param5|}}}}}{{apicall/ifnsigparam|{{{param6type|}}}|{{{param6|}}}}}{{apicall/ifnsigparam|{{{param7type|}}}|{{{param7|}}}}}{{apicall/ifnsigparam|{{{param8type|}}}|{{{param8|}}}}}{{apicall/ifnsigparam|{{{param9type|}}}|{{{param9|}}}}}{{apicall/ifnsigparam|{{{param10type|}}}|{{{param10|}}}}})&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 30px solid white; border-top: 1px solid white&amp;quot;&amp;gt;&lt;br /&gt;
{{#if:{{{deprecated|}}}|&amp;lt;b&amp;gt;Deprecated API Version:&amp;lt;/b&amp;gt; {{{deprecated|}}} &amp;lt;br&amp;gt;}}&lt;br /&gt;
{{#if:{{{removed|}}}|&amp;lt;b&amp;gt;Removed API Version:&amp;lt;/b&amp;gt; {{{removed|}}} &amp;lt;br&amp;gt;}}&lt;br /&gt;
{{#if:{{{version|}}}|&amp;lt;b&amp;gt;Minimum API Version:&amp;lt;/b&amp;gt; {{{version|}}} &amp;lt;br&amp;gt;}}&lt;br /&gt;
{{{description|&amp;lt;i&amp;gt;No description&amp;lt;/i&amp;gt;}}}&lt;br /&gt;
{{#if:{{{param1|}}}{{{param2|}}}{{{param3|}}}{{{param4|}}}{{{param5|}}}{{{param6|}}}{{{param7|}}}{{{param8|}}}{{{param9|}}}{{{param10|}}}{{{param11|}}}{{{param12|}}}{{{param13|}}}{{{param14|}}}{{{param15|}}}{{{param16|}}}{{{param17|}}}{{{param18|}}}{{{param19|}}}{{{param20|}}}|&amp;lt;div style=&amp;quot;border-top: 4px solid white; border-bottom: 3px solid white&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Parameters: &amp;lt;/b&amp;gt;&amp;lt;/div&amp;gt;}}&lt;br /&gt;
{{apicall/ifparam|{{{param1|}}}|{{{param1desc|}}}}}{{apicall/ifparam|{{{param2|}}}|{{{param2desc|}}}}}{{apicall/ifparam|{{{param3|}}}|{{{param3desc|}}}}}{{apicall/ifparam|{{{param4|}}}|{{{param4desc|}}}}}{{apicall/ifparam|{{{param5|}}}|{{{param5desc|}}}}}{{apicall/ifparam|{{{param6|}}}|{{{param6desc|}}}}}{{apicall/ifparam|{{{param7|}}}|{{{param7desc|}}}}}{{apicall/ifparam|{{{param8|}}}|{{{param8desc|}}}}}{{apicall/ifparam|{{{param9|}}}|{{{param9desc|}}}}}{{apicall/ifparam|{{{param10|}}}|{{{param10desc|}}}}}{{apicall/ifparam|{{{param11|}}}|{{{param11desc|}}}}}{{apicall/ifparam|{{{param12|}}}|{{{param12desc|}}}}}{{apicall/ifparam|{{{param13|}}}|{{{param13desc|}}}}}{{apicall/ifparam|{{{param14|}}}|{{{param14desc|}}}}}{{apicall/ifparam|{{{param15|}}}|{{{param15desc|}}}}}{{apicall/ifparam|{{{param16|}}}|{{{param16desc|}}}}}{{apicall/ifparam|{{{param17|}}}|{{{param17desc|}}}}}{{apicall/ifparam|{{{param18|}}}|{{{param18desc|}}}}}{{apicall/ifparam|{{{param19|}}}|{{{param19desc|}}}}}{{apicall/ifparam|{{{param20|}}}|{{{param20desc|}}}}}{{#if:{{{returns|}}}|&amp;lt;div style=&amp;quot;border-top: 4px solid white&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Returns: &amp;lt;/b&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;border-left: 30px solid white; border-top: 4px solid white&amp;quot;&amp;gt;{{{returns}}}&amp;lt;/div&amp;gt;&amp;lt;br/&amp;gt;}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{Documentation}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&lt;br /&gt;
[[Category:BZFS API Functions]]&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Template:Apicall&amp;diff=8914</id>
		<title>Template:Apicall</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Template:Apicall&amp;diff=8914"/>
		<updated>2015-08-22T08:40:21Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Restored category and removed function list link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{DISPLAYTITLE:{{#if:{{NAMESPACE}}|{{NAMESPACE}}:|}}{{lcfirst:{{PAGENAME}}}}}}&amp;lt;/includeonly&amp;gt;&amp;lt;tt&amp;gt;{{#if:{{{returns|}}}|{{apicall/typelink|{{{returntype}}}}}|void}} {{{name}}} ({{apicall/ifsigparam|{{{param1type|}}}|{{{param1|}}}}}{{apicall/ifnsigparam|{{{param2type|}}}|{{{param2|}}}}}{{apicall/ifnsigparam|{{{param3type|}}}|{{{param3|}}}}}{{apicall/ifnsigparam|{{{param4type|}}}|{{{param4|}}}}}{{apicall/ifnsigparam|{{{param5type|}}}|{{{param5|}}}}}{{apicall/ifnsigparam|{{{param6type|}}}|{{{param6|}}}}}{{apicall/ifnsigparam|{{{param7type|}}}|{{{param7|}}}}}{{apicall/ifnsigparam|{{{param8type|}}}|{{{param8|}}}}}{{apicall/ifnsigparam|{{{param9type|}}}|{{{param9|}}}}}{{apicall/ifnsigparam|{{{param10type|}}}|{{{param10|}}}}})&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 30px solid white; border-top: 1px solid white&amp;quot;&amp;gt;&lt;br /&gt;
{{#if:{{{deprecated|}}}|&amp;lt;b&amp;gt;Deprecated as of API Version:&amp;lt;/b&amp;gt; {{{deprecated|}}} &amp;lt;br&amp;gt;}}&lt;br /&gt;
{{#if:{{{version|}}}|&amp;lt;b&amp;gt;Minimum API Version:&amp;lt;/b&amp;gt; {{{version|}}} &amp;lt;br&amp;gt;}}&lt;br /&gt;
{{{description|&amp;lt;i&amp;gt;No description&amp;lt;/i&amp;gt;}}}&lt;br /&gt;
{{#if:{{{param1|}}}{{{param2|}}}{{{param3|}}}{{{param4|}}}{{{param5|}}}{{{param6|}}}{{{param7|}}}{{{param8|}}}{{{param9|}}}{{{param10|}}}{{{param11|}}}{{{param12|}}}{{{param13|}}}{{{param14|}}}{{{param15|}}}{{{param16|}}}{{{param17|}}}{{{param18|}}}{{{param19|}}}{{{param20|}}}|&amp;lt;div style=&amp;quot;border-top: 4px solid white; border-bottom: 3px solid white&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Parameters: &amp;lt;/b&amp;gt;&amp;lt;/div&amp;gt;}}&lt;br /&gt;
{{apicall/ifparam|{{{param1|}}}|{{{param1desc|}}}}}{{apicall/ifparam|{{{param2|}}}|{{{param2desc|}}}}}{{apicall/ifparam|{{{param3|}}}|{{{param3desc|}}}}}{{apicall/ifparam|{{{param4|}}}|{{{param4desc|}}}}}{{apicall/ifparam|{{{param5|}}}|{{{param5desc|}}}}}{{apicall/ifparam|{{{param6|}}}|{{{param6desc|}}}}}{{apicall/ifparam|{{{param7|}}}|{{{param7desc|}}}}}{{apicall/ifparam|{{{param8|}}}|{{{param8desc|}}}}}{{apicall/ifparam|{{{param9|}}}|{{{param9desc|}}}}}{{apicall/ifparam|{{{param10|}}}|{{{param10desc|}}}}}{{apicall/ifparam|{{{param11|}}}|{{{param11desc|}}}}}{{apicall/ifparam|{{{param12|}}}|{{{param12desc|}}}}}{{apicall/ifparam|{{{param13|}}}|{{{param13desc|}}}}}{{apicall/ifparam|{{{param14|}}}|{{{param14desc|}}}}}{{apicall/ifparam|{{{param15|}}}|{{{param15desc|}}}}}{{apicall/ifparam|{{{param16|}}}|{{{param16desc|}}}}}{{apicall/ifparam|{{{param17|}}}|{{{param17desc|}}}}}{{apicall/ifparam|{{{param18|}}}|{{{param18desc|}}}}}{{apicall/ifparam|{{{param19|}}}|{{{param19desc|}}}}}{{apicall/ifparam|{{{param20|}}}|{{{param20desc|}}}}}{{#if:{{{returns|}}}|&amp;lt;div style=&amp;quot;border-top: 4px solid white&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Returns: &amp;lt;/b&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;border-left: 30px solid white; border-top: 4px solid white&amp;quot;&amp;gt;{{{returns}}}&amp;lt;/div&amp;gt;&amp;lt;br/&amp;gt;}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{Documentation}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&lt;br /&gt;
[[Category:BZFS API Functions]]&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_pauseCountdown&amp;diff=8913</id>
		<title>Bz pauseCountdown</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_pauseCountdown&amp;diff=8913"/>
		<updated>2015-08-22T08:37:56Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Added deprecation version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_pauseCountdown&lt;br /&gt;
| version       = 2.4.3&lt;br /&gt;
| returns       = &lt;br /&gt;
| returntype    = void&lt;br /&gt;
| description   = Pauses the countdown that is currently running.&lt;br /&gt;
| param1      = playerID&lt;br /&gt;
| param1type  = int&lt;br /&gt;
| param1desc  = The id 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;
{{apicall&lt;br /&gt;
| name          = bz_pauseCountdown&lt;br /&gt;
| deprecated  = 2.4.3&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;
 {&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;
 }&lt;br /&gt;
 break;&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Template:Apicall&amp;diff=8912</id>
		<title>Template:Apicall</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Template:Apicall&amp;diff=8912"/>
		<updated>2015-08-22T08:37:09Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Removed function list and added deprecation variable&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{DISPLAYTITLE:{{#if:{{NAMESPACE}}|{{NAMESPACE}}:|}}{{lcfirst:{{PAGENAME}}}}}}&amp;lt;/includeonly&amp;gt;&amp;lt;tt&amp;gt;{{#if:{{{returns|}}}|{{apicall/typelink|{{{returntype}}}}}|void}} {{{name}}} ({{apicall/ifsigparam|{{{param1type|}}}|{{{param1|}}}}}{{apicall/ifnsigparam|{{{param2type|}}}|{{{param2|}}}}}{{apicall/ifnsigparam|{{{param3type|}}}|{{{param3|}}}}}{{apicall/ifnsigparam|{{{param4type|}}}|{{{param4|}}}}}{{apicall/ifnsigparam|{{{param5type|}}}|{{{param5|}}}}}{{apicall/ifnsigparam|{{{param6type|}}}|{{{param6|}}}}}{{apicall/ifnsigparam|{{{param7type|}}}|{{{param7|}}}}}{{apicall/ifnsigparam|{{{param8type|}}}|{{{param8|}}}}}{{apicall/ifnsigparam|{{{param9type|}}}|{{{param9|}}}}}{{apicall/ifnsigparam|{{{param10type|}}}|{{{param10|}}}}})&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 30px solid white; border-top: 1px solid white&amp;quot;&amp;gt;&lt;br /&gt;
{{#if:{{{deprecated|}}}|&amp;lt;b&amp;gt;Deprecated as of API Version:&amp;lt;/b&amp;gt; {{{deprecated|}}} &amp;lt;br&amp;gt;}}&lt;br /&gt;
{{#if:{{{version|}}}|&amp;lt;b&amp;gt;Minimum API Version:&amp;lt;/b&amp;gt; {{{version|}}} &amp;lt;br&amp;gt;}}&lt;br /&gt;
{{{description|&amp;lt;i&amp;gt;No description&amp;lt;/i&amp;gt;}}}&lt;br /&gt;
{{#if:{{{param1|}}}{{{param2|}}}{{{param3|}}}{{{param4|}}}{{{param5|}}}{{{param6|}}}{{{param7|}}}{{{param8|}}}{{{param9|}}}{{{param10|}}}{{{param11|}}}{{{param12|}}}{{{param13|}}}{{{param14|}}}{{{param15|}}}{{{param16|}}}{{{param17|}}}{{{param18|}}}{{{param19|}}}{{{param20|}}}|&amp;lt;div style=&amp;quot;border-top: 4px solid white; border-bottom: 3px solid white&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Parameters: &amp;lt;/b&amp;gt;&amp;lt;/div&amp;gt;}}&lt;br /&gt;
{{apicall/ifparam|{{{param1|}}}|{{{param1desc|}}}}}{{apicall/ifparam|{{{param2|}}}|{{{param2desc|}}}}}{{apicall/ifparam|{{{param3|}}}|{{{param3desc|}}}}}{{apicall/ifparam|{{{param4|}}}|{{{param4desc|}}}}}{{apicall/ifparam|{{{param5|}}}|{{{param5desc|}}}}}{{apicall/ifparam|{{{param6|}}}|{{{param6desc|}}}}}{{apicall/ifparam|{{{param7|}}}|{{{param7desc|}}}}}{{apicall/ifparam|{{{param8|}}}|{{{param8desc|}}}}}{{apicall/ifparam|{{{param9|}}}|{{{param9desc|}}}}}{{apicall/ifparam|{{{param10|}}}|{{{param10desc|}}}}}{{apicall/ifparam|{{{param11|}}}|{{{param11desc|}}}}}{{apicall/ifparam|{{{param12|}}}|{{{param12desc|}}}}}{{apicall/ifparam|{{{param13|}}}|{{{param13desc|}}}}}{{apicall/ifparam|{{{param14|}}}|{{{param14desc|}}}}}{{apicall/ifparam|{{{param15|}}}|{{{param15desc|}}}}}{{apicall/ifparam|{{{param16|}}}|{{{param16desc|}}}}}{{apicall/ifparam|{{{param17|}}}|{{{param17desc|}}}}}{{apicall/ifparam|{{{param18|}}}|{{{param18desc|}}}}}{{apicall/ifparam|{{{param19|}}}|{{{param19desc|}}}}}{{apicall/ifparam|{{{param20|}}}|{{{param20desc|}}}}}{{#if:{{{returns|}}}|&amp;lt;div style=&amp;quot;border-top: 4px solid white&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Returns: &amp;lt;/b&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;border-left: 30px solid white; border-top: 4px solid white&amp;quot;&amp;gt;{{{returns}}}&amp;lt;/div&amp;gt;&amp;lt;br/&amp;gt;}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;br/&amp;gt;{{#ifeq:{{{nopagelink|_NOT_HERE_}}}|_NOT_HERE_|[[Functions(API)|Function List]]}}&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{Documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_pauseCountdown&amp;diff=8911</id>
		<title>Bz pauseCountdown</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_pauseCountdown&amp;diff=8911"/>
		<updated>2015-08-22T08:34:24Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Added new function with int param&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_pauseCountdown&lt;br /&gt;
| version       = 2.4.3&lt;br /&gt;
| returns       = &lt;br /&gt;
| returntype    = void&lt;br /&gt;
| description   = Pauses the countdown that is currently running.&lt;br /&gt;
| param1      = playerID&lt;br /&gt;
| param1type  = int&lt;br /&gt;
| param1desc  = The id 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;
{{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;
 {&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;
 }&lt;br /&gt;
 break;&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_eGameEndEvent&amp;diff=8910</id>
		<title>Bz eGameEndEvent</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_eGameEndEvent&amp;diff=8910"/>
		<updated>2015-08-22T08:29:19Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Previous was adding V2 information; This is fixing a typo&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_eGameEndEvent&#039;&#039;&#039; is an API event that is called each time a game ends. This &#039;&#039;&#039;only&#039;&#039;&#039; triggers when the game countdown ends (A Game Over), or when /superkill is initiated. This is not to be confused with BZFS being shutdown, /shutdown being initiated, or a game ending due to the &#039;&#039;&#039;-g&#039;&#039;&#039; option enabled on servers.&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
Both &#039;&#039;&#039;bz_eGameStartEvent&#039;&#039;&#039; and &#039;&#039;&#039;bz_eGameEndEvent&#039;&#039;&#039; return the &#039;&#039;&#039;bz_GameStartEndEventData_V2&#039;&#039;&#039; data class.&lt;br /&gt;
&lt;br /&gt;
  {| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;20&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
  !name&lt;br /&gt;
  !type&lt;br /&gt;
  !value description&lt;br /&gt;
  |-&lt;br /&gt;
  |eventType    &lt;br /&gt;
  |[[Event(API)|bz_eEventType]]&lt;br /&gt;
  |bz_eGameStartEvent or bz_eGameEndEvent&lt;br /&gt;
  |-&lt;br /&gt;
  |playerID&lt;br /&gt;
  |int&lt;br /&gt;
  |The id of the player who ended the countdown. This will be set to 253 if no player information was given.&lt;br /&gt;
  |-&lt;br /&gt;
  |duration&lt;br /&gt;
  |double&lt;br /&gt;
  |The duration (in seconds)  of the game.&lt;br /&gt;
  |-&lt;br /&gt;
  |gameOver&lt;br /&gt;
  |bool&lt;br /&gt;
  |This is set to true if the countdown was ended by a gameover or superkill action.&lt;br /&gt;
  |-&lt;br /&gt;
  |eventTime&lt;br /&gt;
  |double&lt;br /&gt;
  |The server time the event occurred (in seconds.)&lt;br /&gt;
  |}&lt;br /&gt;
&lt;br /&gt;
[[Category:BZFS_API_Docs]]&lt;br /&gt;
[[Category:BZFS_API_Events]]&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_eGameStartEvent&amp;diff=8909</id>
		<title>Bz eGameStartEvent</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_eGameStartEvent&amp;diff=8909"/>
		<updated>2015-08-22T08:28:47Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Added information about V2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{BZFS_API_Doc}}&lt;br /&gt;
{{BZFS_API_Events}}&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&#039;&#039;&#039;bz_eGameStartEvent&#039;&#039;&#039; and &#039;&#039;&#039;bz_eGameEndEvent&#039;&#039;&#039; are API events triggered when a game (i.e., a time- or score-limited match) begins or ends, respectively.&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
Both &#039;&#039;&#039;bz_eGameStartEvent&#039;&#039;&#039; and &#039;&#039;&#039;bz_eGameEndEvent&#039;&#039;&#039; return the &#039;&#039;&#039;bz_GameStartEndEventData_V2&#039;&#039;&#039; data class.&lt;br /&gt;
&lt;br /&gt;
  {| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;20&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
  !name&lt;br /&gt;
  !type&lt;br /&gt;
  !value description&lt;br /&gt;
  |-&lt;br /&gt;
  |eventType    &lt;br /&gt;
  |[[Event(API)|bz_eEventType]]&lt;br /&gt;
  |bz_eGameStartEvent or bz_eGameStartEvent&lt;br /&gt;
  |-&lt;br /&gt;
  |playerID&lt;br /&gt;
  |int&lt;br /&gt;
  |The id of the player who started the countdown. This will be set to 253 if no player information was given.&lt;br /&gt;
  |-&lt;br /&gt;
  |duration&lt;br /&gt;
  |double&lt;br /&gt;
  |The duration (in seconds)  of the game.&lt;br /&gt;
  |-&lt;br /&gt;
  |gameOver&lt;br /&gt;
  |bool&lt;br /&gt;
  |This will always be set to false in [[bz_eGameStartEvent]]&lt;br /&gt;
  |-&lt;br /&gt;
  |eventTime&lt;br /&gt;
  |double&lt;br /&gt;
  |The server time the event occurred (in seconds.)&lt;br /&gt;
  |}&lt;br /&gt;
&lt;br /&gt;
==Uses==&lt;br /&gt;
&lt;br /&gt;
[[Category:BZFS_API_Docs]]&lt;br /&gt;
[[Category:BZFS_API_Events]]&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_eGameResumeEvent&amp;diff=8908</id>
		<title>Bz eGameResumeEvent</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_eGameResumeEvent&amp;diff=8908"/>
		<updated>2015-08-22T08:26:13Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Added information about V2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{BZFS_API_Doc}}&lt;br /&gt;
{{BZFS_API_Events}}&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&#039;&#039;&#039;bz_eGamePauseEvent&#039;&#039;&#039; and &#039;&#039;&#039;bz_eGameResumeEvent&#039;&#039;&#039; are API events triggered when a game (i.e., a time- or score-limited match) pauses or resumes, respectively.&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
Both &#039;&#039;&#039;bz_eGamePauseEvent&#039;&#039;&#039; and &#039;&#039;&#039;bz_eGameResumeEvent&#039;&#039;&#039; return the &#039;&#039;&#039;bz_GamePauseResumeEventData_V2&#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_eGamePauseEvent or bz_eGameResumeEvent&lt;br /&gt;
  |-&lt;br /&gt;
  |playerID&lt;br /&gt;
  |int&lt;br /&gt;
  |The id of the player who resumed countdown. This will be set to 253 if no player information was given.&lt;br /&gt;
  |-&lt;br /&gt;
  |actionBy&lt;br /&gt;
  |[[bz_ApiString]]&lt;br /&gt;
  |The callsign of the player who triggered the event. By default, it&#039;s &amp;quot;SERVER.&amp;quot;&lt;br /&gt;
  |-&lt;br /&gt;
  |eventTime&lt;br /&gt;
  |double&lt;br /&gt;
  |The server time the event occurred (in seconds.)&lt;br /&gt;
  |}&lt;br /&gt;
&lt;br /&gt;
==Uses==&lt;br /&gt;
&lt;br /&gt;
[[Category:BZFS_API_Docs]]&lt;br /&gt;
[[Category:BZFS_API_Events]]&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_eGamePauseEvent&amp;diff=8907</id>
		<title>Bz eGamePauseEvent</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_eGamePauseEvent&amp;diff=8907"/>
		<updated>2015-08-22T08:25:33Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Added information about V2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{BZFS_API_Doc}}&lt;br /&gt;
{{BZFS_API_Events}}&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&#039;&#039;&#039;bz_eGamePauseEvent&#039;&#039;&#039; and &#039;&#039;&#039;bz_eGameResumeEvent&#039;&#039;&#039; are API events triggered when a game (i.e., a time- or score-limited match) pauses or resumes, respectively.&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
Both &#039;&#039;&#039;bz_eGamePauseEvent&#039;&#039;&#039; and &#039;&#039;&#039;bz_eGameResumeEvent&#039;&#039;&#039; return the &#039;&#039;&#039;bz_GamePauseResumeEventData_V2&#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_eGamePauseEvent or bz_eGameResumeEvent&lt;br /&gt;
  |-&lt;br /&gt;
  |playerID&lt;br /&gt;
  |int&lt;br /&gt;
  |The id of the player who paused countdown. This will be set to 253 if no player information was given.&lt;br /&gt;
  |-&lt;br /&gt;
  |actionBy&lt;br /&gt;
  |[[bz_ApiString]]&lt;br /&gt;
  |The callsign of the player who triggered the event. By default, it&#039;s &amp;quot;SERVER.&amp;quot;&lt;br /&gt;
  |-&lt;br /&gt;
  |eventTime&lt;br /&gt;
  |double&lt;br /&gt;
  |The server time the event occurred (in seconds.)&lt;br /&gt;
  |}&lt;br /&gt;
&lt;br /&gt;
==Uses==&lt;br /&gt;
&lt;br /&gt;
[[Category:BZFS_API_Docs]]&lt;br /&gt;
[[Category:BZFS_API_Events]]&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_eGameEndEvent&amp;diff=8906</id>
		<title>Bz eGameEndEvent</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_eGameEndEvent&amp;diff=8906"/>
		<updated>2015-08-22T08:23:48Z</updated>

		<summary type="html">&lt;p&gt;Allejo: &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_eGameEndEvent&#039;&#039;&#039; is an API event that is called each time a game ends. This &#039;&#039;&#039;only&#039;&#039;&#039; triggers when the game countdown ends (A Game Over), or when /superkill is initiated. This is not to be confused with BZFS being shutdown, /shutdown being initiated, or a game ending due to the &#039;&#039;&#039;-g&#039;&#039;&#039; option enabled on servers.&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
Both &#039;&#039;&#039;bz_eGameStartEvent&#039;&#039;&#039; and &#039;&#039;&#039;bz_eGameEndEvent&#039;&#039;&#039; return the &#039;&#039;&#039;bz_GameStartEndEventData_V2&#039;&#039;&#039; data class.&lt;br /&gt;
&lt;br /&gt;
  {| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;20&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
  !name&lt;br /&gt;
  !type&lt;br /&gt;
  !value description&lt;br /&gt;
  |-&lt;br /&gt;
  |eventType    &lt;br /&gt;
  |[[Event(API)|bz_eEventType]]&lt;br /&gt;
  |bz_eGameStartEvent or bz_eGameEndEvent&lt;br /&gt;
  |-&lt;br /&gt;
  |playerID&lt;br /&gt;
  |int&lt;br /&gt;
  |The id of the player who started or ended the countdown. This will be set to 253 if no player information was given.&lt;br /&gt;
  |-&lt;br /&gt;
  |duration&lt;br /&gt;
  |double&lt;br /&gt;
  |The duration (in seconds)  of the game.&lt;br /&gt;
  |-&lt;br /&gt;
  |gameOver&lt;br /&gt;
  |bool&lt;br /&gt;
  |This is set to true if the countdown was ended by a gameover or superkill action.&lt;br /&gt;
  |-&lt;br /&gt;
  |eventTime&lt;br /&gt;
  |double&lt;br /&gt;
  |The server time the event occurred (in seconds.)&lt;br /&gt;
  |}&lt;br /&gt;
&lt;br /&gt;
[[Category:BZFS_API_Docs]]&lt;br /&gt;
[[Category:BZFS_API_Events]]&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8905</id>
		<title>Functions (API)</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8905"/>
		<updated>2015-08-22T08:16:35Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Added updated countdown functions with player IDs&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_isPlayerSpawnable]] ( int playerID );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerCurrentState]] ( int playerID, bz_PlayerUpdateState &amp;amp;state );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerSpawnAtBase]] ( int playerId );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerSpawnable]] ( int playerID, bool spawn );&lt;br /&gt;
 BZF_API void [[bz_setPlayerSpawnAtBase]] ( int playerId, bool base );&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_getPlayerBySlotOrCallsign]] ( const char* name );&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;
Unknown&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByBZID]] ( int BZID );&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByCallsign]] ( const char* name );&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_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_incrementTeamWins]] (bz_eTeamType team, int increment);&lt;br /&gt;
 BZF_API void [[bz_incrementTeamLosses]] (bz_eTeamType team, int increment);&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 bool [[bz_incrementPlayerWins]] (int playerId, int increment)&lt;br /&gt;
 BZF_API bool [[bz_incrementPlayerLosses]] (int playerId, int increment);&lt;br /&gt;
 BZF_API bool [[bz_incrementPlayerTKs]] (int playerId, int increment);&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;
 BZF_API int [[bz_getIdleTime]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPausedTime]] ( 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;
 BZF_API int [[bz_getPlayerCount]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_getShotMismatch]] ( void );&lt;br /&gt;
 BZF_API void [[bz_setShotMismatch]] ( bool value );&lt;br /&gt;
 BZF_API bool [[bz_isAutoTeamEnabled]] ( void );&lt;br /&gt;
?&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 [[bz_ApiString]] [[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, bool keepTeamFlags = false );&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 const char* [[bz_getPlayerFlag]] ( int playerID );&lt;br /&gt;
 BZF_API int [[bz_getPlayerFlagID]] ( int playerID );&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;
=== Shot Management ===&lt;br /&gt;
2.4.5+&lt;br /&gt;
 BZF_API uint32_t [[bz_getShotMetaData]] (int fromPlayer, int shotID, const char* name);&lt;br /&gt;
 BZF_API void [[bz_setShotMetaData]] (int fromPlayer, int shotID , const char* name, uint32_t value);&lt;br /&gt;
 BZF_API bool [[bz_shotHasMetaData]] (int fromPlayer, int shotID , const char* name);&lt;br /&gt;
 BZF_API uint32_t [[bz_getShotGUID]] (int fromPlayer, int shotID);&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, bz_eTeamType shotTeam = eRogueTeam );&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, bz_eTeamType shotTeam = eRogueTeam );&lt;br /&gt;
 BZF_API int [[bz_fireWorldGM]] ( int targetPlayerID, float lifetime, float *pos, float tilt, float direction, float dt, bz_eTeamType shotTeam = eRogueTeam );&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 bool [[bz_isCountDownPaused]] ( void );&lt;br /&gt;
 BZF_API void [[bz_pauseCountdown]] ( int playerID );&lt;br /&gt;
 BZF_API void [[bz_pauseCountdown]] ( const char *pausedBy );&lt;br /&gt;
 BZF_API void [[bz_resumeCountdown]] ( int playerID );&lt;br /&gt;
 BZF_API void [[bz_resumeCountdown]] ( const char *resumedBy );&lt;br /&gt;
 BZF_API void [[bz_startCountdown]] ( int delay, float limit, int playerID );&lt;br /&gt;
 BZF_API void [[bz_startCountdown]] ( int delay, float limit, const char *byWho );&lt;br /&gt;
 BZF_API void [[bz_cancelCountdown]] ( int playerID );&lt;br /&gt;
 BZF_API void [[bz_cancelCountdown]] ( const char *canceledBy );&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);&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>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_getPlayerSpawnAtBase&amp;diff=8904</id>
		<title>Bz getPlayerSpawnAtBase</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_getPlayerSpawnAtBase&amp;diff=8904"/>
		<updated>2015-08-02T05:02:22Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Created page with &amp;quot;{{apicall | name          = bz_getPlayerSpawnAtBase | description   = Check if a player is supposed to spawn at their base on their next respawn | version = 2.4.3 | param1...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_getPlayerSpawnAtBase&lt;br /&gt;
| description   = Check if a player is supposed to spawn at their base on their next respawn&lt;br /&gt;
| version = 2.4.3&lt;br /&gt;
| param1        = playerID&lt;br /&gt;
| param1type    = int&lt;br /&gt;
| param1desc    = The id of the target&lt;br /&gt;
| returntype    = bool&lt;br /&gt;
| returns = True if the target player will be spawning at their base next respawn&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_setPlayerSpawnAtBase&amp;diff=8903</id>
		<title>Bz setPlayerSpawnAtBase</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_setPlayerSpawnAtBase&amp;diff=8903"/>
		<updated>2015-08-02T05:01:10Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Created page with &amp;quot;{{apicall | name          = bz_setPlayerSpawnAtBase | description   = Forces a player to spawn at their base on &amp;#039;&amp;#039;&amp;#039;only&amp;#039;&amp;#039;&amp;#039; their next respawn. | version = 2.4.3 | param1...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_setPlayerSpawnAtBase&lt;br /&gt;
| description   = Forces a player to spawn at their base on &#039;&#039;&#039;only&#039;&#039;&#039; their next respawn.&lt;br /&gt;
| version = 2.4.3&lt;br /&gt;
| param1        = playerID&lt;br /&gt;
| param1type    = int&lt;br /&gt;
| param1desc    = The id of the target&lt;br /&gt;
| param2        = base&lt;br /&gt;
| param2type    = bool&lt;br /&gt;
| param2desc    = Use true if they are to spawn at their base on their next respawn&lt;br /&gt;
| returntype    = void&lt;br /&gt;
| returns = &lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8902</id>
		<title>Functions (API)</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8902"/>
		<updated>2015-08-02T03:01:14Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Moved spawnable functions to the player state section&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_isPlayerSpawnable]] ( int playerID );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerCurrentState]] ( int playerID, bz_PlayerUpdateState &amp;amp;state );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerSpawnAtBase]] ( int playerId );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerSpawnable]] ( int playerID, bool spawn );&lt;br /&gt;
 BZF_API void [[bz_setPlayerSpawnAtBase]] ( int playerId, bool base );&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_getPlayerBySlotOrCallsign]] ( const char* name );&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;
Unknown&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByBZID]] ( int BZID );&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByCallsign]] ( const char* name );&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_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_incrementTeamWins]] (bz_eTeamType team, int increment);&lt;br /&gt;
 BZF_API void [[bz_incrementTeamLosses]] (bz_eTeamType team, int increment);&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 bool [[bz_incrementPlayerWins]] (int playerId, int increment)&lt;br /&gt;
 BZF_API bool [[bz_incrementPlayerLosses]] (int playerId, int increment);&lt;br /&gt;
 BZF_API bool [[bz_incrementPlayerTKs]] (int playerId, int increment);&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;
 BZF_API int [[bz_getIdleTime]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPausedTime]] ( 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;
 BZF_API int [[bz_getPlayerCount]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_getShotMismatch]] ( void );&lt;br /&gt;
 BZF_API void [[bz_setShotMismatch]] ( bool value );&lt;br /&gt;
 BZF_API bool [[bz_isAutoTeamEnabled]] ( void );&lt;br /&gt;
?&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 [[bz_ApiString]] [[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, bool keepTeamFlags = false );&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 const char* [[bz_getPlayerFlag]] ( int playerID );&lt;br /&gt;
 BZF_API int [[bz_getPlayerFlagID]] ( int playerID );&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;
=== Shot Management ===&lt;br /&gt;
2.4.5+&lt;br /&gt;
 BZF_API uint32_t [[bz_getShotMetaData]] (int fromPlayer, int shotID, const char* name);&lt;br /&gt;
 BZF_API void [[bz_setShotMetaData]] (int fromPlayer, int shotID , const char* name, uint32_t value);&lt;br /&gt;
 BZF_API bool [[bz_shotHasMetaData]] (int fromPlayer, int shotID , const char* name);&lt;br /&gt;
 BZF_API uint32_t [[bz_getShotGUID]] (int fromPlayer, int shotID);&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, bz_eTeamType shotTeam = eRogueTeam );&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, bz_eTeamType shotTeam = eRogueTeam );&lt;br /&gt;
 BZF_API int [[bz_fireWorldGM]] ( int targetPlayerID, float lifetime, float *pos, float tilt, float direction, float dt, bz_eTeamType shotTeam = eRogueTeam );&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 bool [[bz_isCountDownPaused]] ( 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;
 BZF_API void [[bz_cancelCountdown]] ( const char *canceledBy );&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);&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>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8901</id>
		<title>Functions (API)</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8901"/>
		<updated>2015-08-02T02:58:39Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Added new spawnAtBase functions&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_getPlayerCurrentState]] ( int playerID, bz_PlayerUpdateState &amp;amp;state );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerSpawnAtBase]] ( int playerId );&lt;br /&gt;
 BZF_API void [[bz_setPlayerSpawnAtBase]] ( int playerId, bool base );&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_getPlayerBySlotOrCallsign]] ( const char* name );&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;
Unknown&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByBZID]] ( int BZID );&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByCallsign]] ( const char* name );&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;
 BZF_API bool [[bz_setPlayerSpawnable]] ( int playerID, bool spawn );&lt;br /&gt;
 BZF_API bool [[bz_isPlayerSpawnable]] ( int playerID );&lt;br /&gt;
?&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_incrementTeamWins]] (bz_eTeamType team, int increment);&lt;br /&gt;
 BZF_API void [[bz_incrementTeamLosses]] (bz_eTeamType team, int increment);&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 bool [[bz_incrementPlayerWins]] (int playerId, int increment)&lt;br /&gt;
 BZF_API bool [[bz_incrementPlayerLosses]] (int playerId, int increment);&lt;br /&gt;
 BZF_API bool [[bz_incrementPlayerTKs]] (int playerId, int increment);&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;
 BZF_API int [[bz_getIdleTime]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPausedTime]] ( 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;
 BZF_API int [[bz_getPlayerCount]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_getShotMismatch]] ( void );&lt;br /&gt;
 BZF_API void [[bz_setShotMismatch]] ( bool value );&lt;br /&gt;
 BZF_API bool [[bz_isAutoTeamEnabled]] ( void );&lt;br /&gt;
?&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 [[bz_ApiString]] [[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, bool keepTeamFlags = false );&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 const char* [[bz_getPlayerFlag]] ( int playerID );&lt;br /&gt;
 BZF_API int [[bz_getPlayerFlagID]] ( int playerID );&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;
=== Shot Management ===&lt;br /&gt;
2.4.5+&lt;br /&gt;
 BZF_API uint32_t [[bz_getShotMetaData]] (int fromPlayer, int shotID, const char* name);&lt;br /&gt;
 BZF_API void [[bz_setShotMetaData]] (int fromPlayer, int shotID , const char* name, uint32_t value);&lt;br /&gt;
 BZF_API bool [[bz_shotHasMetaData]] (int fromPlayer, int shotID , const char* name);&lt;br /&gt;
 BZF_API uint32_t [[bz_getShotGUID]] (int fromPlayer, int shotID);&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, bz_eTeamType shotTeam = eRogueTeam );&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, bz_eTeamType shotTeam = eRogueTeam );&lt;br /&gt;
 BZF_API int [[bz_fireWorldGM]] ( int targetPlayerID, float lifetime, float *pos, float tilt, float direction, float dt, bz_eTeamType shotTeam = eRogueTeam );&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 bool [[bz_isCountDownPaused]] ( 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;
 BZF_API void [[bz_cancelCountdown]] ( const char *canceledBy );&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);&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>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8900</id>
		<title>Functions (API)</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8900"/>
		<updated>2015-08-02T01:02:34Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Removed nonexistent bz_canPlayerSpawn()&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_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_getPlayerBySlotOrCallsign]] ( const char* name );&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;
Unknown&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByBZID]] ( int BZID );&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByCallsign]] ( const char* name );&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;
 BZF_API bool [[bz_setPlayerSpawnable]] ( int playerID, bool spawn );&lt;br /&gt;
 BZF_API bool [[bz_isPlayerSpawnable]] ( int playerID );&lt;br /&gt;
?&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_incrementTeamWins]] (bz_eTeamType team, int increment);&lt;br /&gt;
 BZF_API void [[bz_incrementTeamLosses]] (bz_eTeamType team, int increment);&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 bool [[bz_incrementPlayerWins]] (int playerId, int increment)&lt;br /&gt;
 BZF_API bool [[bz_incrementPlayerLosses]] (int playerId, int increment);&lt;br /&gt;
 BZF_API bool [[bz_incrementPlayerTKs]] (int playerId, int increment);&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;
 BZF_API int [[bz_getIdleTime]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPausedTime]] ( 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;
 BZF_API int [[bz_getPlayerCount]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_getShotMismatch]] ( void );&lt;br /&gt;
 BZF_API void [[bz_setShotMismatch]] ( bool value );&lt;br /&gt;
 BZF_API bool [[bz_isAutoTeamEnabled]] ( void );&lt;br /&gt;
?&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 [[bz_ApiString]] [[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, bool keepTeamFlags = false );&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 const char* [[bz_getPlayerFlag]] ( int playerID );&lt;br /&gt;
 BZF_API int [[bz_getPlayerFlagID]] ( int playerID );&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;
=== Shot Management ===&lt;br /&gt;
2.4.5+&lt;br /&gt;
 BZF_API uint32_t [[bz_getShotMetaData]] (int fromPlayer, int shotID, const char* name);&lt;br /&gt;
 BZF_API void [[bz_setShotMetaData]] (int fromPlayer, int shotID , const char* name, uint32_t value);&lt;br /&gt;
 BZF_API bool [[bz_shotHasMetaData]] (int fromPlayer, int shotID , const char* name);&lt;br /&gt;
 BZF_API uint32_t [[bz_getShotGUID]] (int fromPlayer, int shotID);&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, bz_eTeamType shotTeam = eRogueTeam );&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, bz_eTeamType shotTeam = eRogueTeam );&lt;br /&gt;
 BZF_API int [[bz_fireWorldGM]] ( int targetPlayerID, float lifetime, float *pos, float tilt, float direction, float dt, bz_eTeamType shotTeam = eRogueTeam );&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 bool [[bz_isCountDownPaused]] ( 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;
 BZF_API void [[bz_cancelCountdown]] ( const char *canceledBy );&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);&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>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8899</id>
		<title>Functions (API)</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8899"/>
		<updated>2015-08-02T00:57:28Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Moved incorrect 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&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_getPlayerCurrentState]] ( int playerID, bz_PlayerUpdateState &amp;amp;state );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[Bz_isPlayerSpawnable |bz_canPlayerSpawn]]( int playerID );&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_getPlayerBySlotOrCallsign]] ( const char* name );&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;
Unknown&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByBZID]] ( int BZID );&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByCallsign]] ( const char* name );&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;
 BZF_API bool [[bz_setPlayerSpawnable]] ( int playerID, bool spawn );&lt;br /&gt;
 BZF_API bool [[bz_isPlayerSpawnable]] ( int playerID );&lt;br /&gt;
?&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_incrementTeamWins]] (bz_eTeamType team, int increment);&lt;br /&gt;
 BZF_API void [[bz_incrementTeamLosses]] (bz_eTeamType team, int increment);&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 bool [[bz_incrementPlayerWins]] (int playerId, int increment)&lt;br /&gt;
 BZF_API bool [[bz_incrementPlayerLosses]] (int playerId, int increment);&lt;br /&gt;
 BZF_API bool [[bz_incrementPlayerTKs]] (int playerId, int increment);&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;
 BZF_API int [[bz_getIdleTime]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPausedTime]] ( 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;
 BZF_API int [[bz_getPlayerCount]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_getShotMismatch]] ( void );&lt;br /&gt;
 BZF_API void [[bz_setShotMismatch]] ( bool value );&lt;br /&gt;
 BZF_API bool [[bz_isAutoTeamEnabled]] ( void );&lt;br /&gt;
?&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 [[bz_ApiString]] [[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, bool keepTeamFlags = false );&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 const char* [[bz_getPlayerFlag]] ( int playerID );&lt;br /&gt;
 BZF_API int [[bz_getPlayerFlagID]] ( int playerID );&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;
=== Shot Management ===&lt;br /&gt;
2.4.5+&lt;br /&gt;
 BZF_API uint32_t [[bz_getShotMetaData]] (int fromPlayer, int shotID, const char* name);&lt;br /&gt;
 BZF_API void [[bz_setShotMetaData]] (int fromPlayer, int shotID , const char* name, uint32_t value);&lt;br /&gt;
 BZF_API bool [[bz_shotHasMetaData]] (int fromPlayer, int shotID , const char* name);&lt;br /&gt;
 BZF_API uint32_t [[bz_getShotGUID]] (int fromPlayer, int shotID);&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, bz_eTeamType shotTeam = eRogueTeam );&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, bz_eTeamType shotTeam = eRogueTeam );&lt;br /&gt;
 BZF_API int [[bz_fireWorldGM]] ( int targetPlayerID, float lifetime, float *pos, float tilt, float direction, float dt, bz_eTeamType shotTeam = eRogueTeam );&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 bool [[bz_isCountDownPaused]] ( 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;
 BZF_API void [[bz_cancelCountdown]] ( const char *canceledBy );&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);&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>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_isPlayerSpawnable&amp;diff=8898</id>
		<title>Bz isPlayerSpawnable</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_isPlayerSpawnable&amp;diff=8898"/>
		<updated>2015-07-29T05:16:57Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Created page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_isPlayerSpawnable&lt;br /&gt;
| description   = Checks if player has the ability to spawn. This is not to be confused with the SPAWN permission but instead, this should be used together with [[bz_setPlayerSpawnable]].&lt;br /&gt;
| version = 2.4.3&lt;br /&gt;
| param1        = playerID&lt;br /&gt;
| param1type    = int&lt;br /&gt;
| param1desc    = The id of the player to check if they can spawn&lt;br /&gt;
| returntype    = bool&lt;br /&gt;
| returns = True if target player is allowed to spawn&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_setPlayerSpawnable&amp;diff=8897</id>
		<title>Bz setPlayerSpawnable</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_setPlayerSpawnable&amp;diff=8897"/>
		<updated>2015-07-29T05:11:09Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Add return type&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_setPlayerSpawnable&lt;br /&gt;
| description   = Marks this player as allowed to spawn or not allowed to spawn.&lt;br /&gt;
| version = 2.4.3&lt;br /&gt;
| param1        = playerID&lt;br /&gt;
| param1type    = int&lt;br /&gt;
| param1desc    = The id of the player to mark as spawnable.&lt;br /&gt;
| param2        = spawn&lt;br /&gt;
| param2type    = bool&lt;br /&gt;
| param2desc    = Mark them as able to spawn or not spawn&lt;br /&gt;
| returntype    = bool&lt;br /&gt;
| returns = True if target player was valid and setting the spawnablity was successful&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_setPlayerSpawnable&amp;diff=8896</id>
		<title>Bz setPlayerSpawnable</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_setPlayerSpawnable&amp;diff=8896"/>
		<updated>2015-07-29T05:08:20Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Added minimum API verision&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_setPlayerSpawnable&lt;br /&gt;
| description   = Marks this player as allowed to spawn or not allowed to spawn.&lt;br /&gt;
| version = 2.4.3&lt;br /&gt;
| param1        = playerID&lt;br /&gt;
| param1type    = int&lt;br /&gt;
| param1desc    = The id of the player to mark as spawnable.&lt;br /&gt;
| param2        = spawn&lt;br /&gt;
| param2type    = bool&lt;br /&gt;
| param2desc    = Mark them as able to spawn or not spawn&lt;br /&gt;
| returns = True if target player was valid and setting the spawnablity was successful&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8895</id>
		<title>Functions (API)</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8895"/>
		<updated>2015-07-29T05:06:03Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Added bz_isPlayerSpawnable and bz_setPlayerSpawnable as officially part of 2.3+&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_getPlayerBySlotOrCallsign]] ( const char* name );&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;
Unknown&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByBZID]] ( int BZID );&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByCallsign]] ( const char* name );&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;
 BZF_API bool [[bz_setPlayerSpawnable]] ( int playerID, bool spawn );&lt;br /&gt;
 BZF_API bool [[bz_isPlayerSpawnable]] ( int playerID );&lt;br /&gt;
?&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_incrementTeamWins]] (bz_eTeamType team, int increment);&lt;br /&gt;
 BZF_API void [[bz_incrementTeamLosses]] (bz_eTeamType team, int increment);&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 bool [[bz_incrementPlayerWins]] (int playerId, int increment)&lt;br /&gt;
 BZF_API bool [[bz_incrementPlayerLosses]] (int playerId, int increment);&lt;br /&gt;
 BZF_API bool [[bz_incrementPlayerTKs]] (int playerId, int increment);&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;
 BZF_API int [[bz_getIdleTime]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPausedTime]] ( 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;
 BZF_API int [[bz_getPlayerCount]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_getShotMismatch]] ( void );&lt;br /&gt;
 BZF_API void [[bz_setShotMismatch]] ( bool value );&lt;br /&gt;
 BZF_API bool [[bz_isAutoTeamEnabled]] ( void );&lt;br /&gt;
?&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 [[bz_ApiString]] [[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, bool keepTeamFlags = false );&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 const char* [[bz_getPlayerFlag]] ( int playerID );&lt;br /&gt;
 BZF_API int [[bz_getPlayerFlagID]] ( int playerID );&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;
=== Shot Management ===&lt;br /&gt;
2.4.5+&lt;br /&gt;
 BZF_API uint32_t [[bz_getShotMetaData]] (int fromPlayer, int shotID, const char* name);&lt;br /&gt;
 BZF_API void [[bz_setShotMetaData]] (int fromPlayer, int shotID , const char* name, uint32_t value);&lt;br /&gt;
 BZF_API bool [[bz_shotHasMetaData]] (int fromPlayer, int shotID , const char* name);&lt;br /&gt;
 BZF_API uint32_t [[bz_getShotGUID]] (int fromPlayer, int shotID);&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, bz_eTeamType shotTeam = eRogueTeam );&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, bz_eTeamType shotTeam = eRogueTeam );&lt;br /&gt;
 BZF_API int [[bz_fireWorldGM]] ( int targetPlayerID, float lifetime, float *pos, float tilt, float direction, float dt, bz_eTeamType shotTeam = eRogueTeam );&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 bool [[bz_isCountDownPaused]] ( 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;
 BZF_API void [[bz_cancelCountdown]] ( const char *canceledBy );&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);&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>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_getPlayerBySlotOrCallsign&amp;diff=8893</id>
		<title>Bz getPlayerBySlotOrCallsign</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_getPlayerBySlotOrCallsign&amp;diff=8893"/>
		<updated>2015-06-30T04:19:27Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Grammatical errors&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_getPlayerBySlotOrCallsign&lt;br /&gt;
| description   = Gets the information for the player with the specified slot index or callsign. The returned player info won&#039;t update as the game progresses. If you need new updates on the player&#039;s info, you can call [[bz_updatePlayerData]].&lt;br /&gt;
&lt;br /&gt;
After you&#039;re done with the player info returned from this method, you must release it by calling [[bz_freePlayerRecord]].&lt;br /&gt;
| version = 2.4.3&lt;br /&gt;
| param1        = name&lt;br /&gt;
| param1type    = const char*&lt;br /&gt;
| param1desc    = The callsign of a player or the slot number (e.g. #2) of the player &#039;&#039;&#039;with&#039;&#039;&#039; the pound sign (#)&lt;br /&gt;
| returntype    = bz_BasePlayerRecord*&lt;br /&gt;
| returns       = an instance of [[bz_BasePlayerRecord]] for the target player&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_setTeamLosses&amp;diff=8891</id>
		<title>Bz setTeamLosses</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_setTeamLosses&amp;diff=8891"/>
		<updated>2015-06-14T21:17:19Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Added minimum API verision&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_setTeamLosses&lt;br /&gt;
| version = 2.4.0&lt;br /&gt;
| description   = Sets the losses of a team&lt;br /&gt;
| param1        = team&lt;br /&gt;
| param1type    = bz_eTeamType&lt;br /&gt;
| param1desc    = The team to set the losses for.&lt;br /&gt;
| param2        = losses&lt;br /&gt;
| param2type    = int&lt;br /&gt;
| param2desc    = Amount of losses for the team.&lt;br /&gt;
| returntype    = void&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_incrementTeamLosses&amp;diff=8890</id>
		<title>Bz incrementTeamLosses</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_incrementTeamLosses&amp;diff=8890"/>
		<updated>2015-06-14T21:16:38Z</updated>

		<summary type="html">&lt;p&gt;Allejo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_incrementTeamLosses&lt;br /&gt;
| description   = Increment the losses of a team&lt;br /&gt;
| version = 2.4.3&lt;br /&gt;
| param1        = team&lt;br /&gt;
| param1type    = bz_eTeamType&lt;br /&gt;
| param1desc    = The team to set the wins for&lt;br /&gt;
| param2        = wins&lt;br /&gt;
| param2type    = int&lt;br /&gt;
| param2desc    = The amount to increment by&lt;br /&gt;
| returntype    = void&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_incrementTeamLosses&amp;diff=8889</id>
		<title>Bz incrementTeamLosses</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_incrementTeamLosses&amp;diff=8889"/>
		<updated>2015-06-14T21:16:33Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Created page with &amp;quot;{{apicall | name          = bz_ incrementTeamLosses | description   = Increment the losses of a team | version = 2.4.3 | param1        = team | param1type    = bz_eTeamType |...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_ incrementTeamLosses&lt;br /&gt;
| description   = Increment the losses of a team&lt;br /&gt;
| version = 2.4.3&lt;br /&gt;
| param1        = team&lt;br /&gt;
| param1type    = bz_eTeamType&lt;br /&gt;
| param1desc    = The team to set the wins for&lt;br /&gt;
| param2        = wins&lt;br /&gt;
| param2type    = int&lt;br /&gt;
| param2desc    = The amount to increment by&lt;br /&gt;
| returntype    = void&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_incrementTeamWins&amp;diff=8888</id>
		<title>Bz incrementTeamWins</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_incrementTeamWins&amp;diff=8888"/>
		<updated>2015-06-14T21:16:08Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Created page with &amp;quot;{{apicall | name          = bz_incrementTeamWins | description   = Increment the wins of a team | version = 2.4.3 | param1        = team | param1type    = bz_eTeamType | param...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_incrementTeamWins&lt;br /&gt;
| description   = Increment the wins of a team&lt;br /&gt;
| version = 2.4.3&lt;br /&gt;
| param1        = team&lt;br /&gt;
| param1type    = bz_eTeamType&lt;br /&gt;
| param1desc    = The team to set the wins for&lt;br /&gt;
| param2        = wins&lt;br /&gt;
| param2type    = int&lt;br /&gt;
| param2desc    = The amount to increment by&lt;br /&gt;
| returntype    = void&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_setTeamWins&amp;diff=8887</id>
		<title>Bz setTeamWins</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_setTeamWins&amp;diff=8887"/>
		<updated>2015-06-14T21:15:06Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Added minimum API verision&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_setTeamWins&lt;br /&gt;
| description   = Sets the wins of a team&lt;br /&gt;
| version = 2.4.0&lt;br /&gt;
| param1        = team&lt;br /&gt;
| param1type    = bz_eTeamType&lt;br /&gt;
| param1desc    = The team to set the wins for.&lt;br /&gt;
| param2        = wins&lt;br /&gt;
| param2type    = int&lt;br /&gt;
| param2desc    = Amount of wins for the team.&lt;br /&gt;
| returntype    = void&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8886</id>
		<title>Functions (API)</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8886"/>
		<updated>2015-06-14T21:13:08Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Add bz_incrementTeamWins and bz_incrementTeamLosses&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_getPlayerBySlotOrCallsign]] ( const char* name );&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;
Unknown&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByBZID]] ( int BZID );&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByCallsign]] ( const char* name );&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_incrementTeamWins]] (bz_eTeamType team, int increment);&lt;br /&gt;
 BZF_API void [[bz_incrementTeamLosses]] (bz_eTeamType team, int increment);&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 bool [[bz_incrementPlayerWins]] (int playerId, int increment)&lt;br /&gt;
 BZF_API bool [[bz_incrementPlayerLosses]] (int playerId, int increment);&lt;br /&gt;
 BZF_API bool [[bz_incrementPlayerTKs]] (int playerId, int increment);&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;
 BZF_API int [[bz_getIdleTime]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPausedTime]] ( 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;
 BZF_API int [[bz_getPlayerCount]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_getShotMismatch]] ( void );&lt;br /&gt;
 BZF_API void [[bz_setShotMismatch]] ( bool value );&lt;br /&gt;
 BZF_API bool [[bz_isAutoTeamEnabled]] ( void );&lt;br /&gt;
?&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 [[bz_ApiString]] [[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, bool keepTeamFlags = false );&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 const char* [[bz_getPlayerFlag]] ( int playerID );&lt;br /&gt;
 BZF_API int [[bz_getPlayerFlagID]] ( int playerID );&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;
=== Shot Management ===&lt;br /&gt;
2.4.5+&lt;br /&gt;
 BZF_API uint32_t [[bz_getShotMetaData]] (int fromPlayer, int shotID, const char* name);&lt;br /&gt;
 BZF_API void [[bz_setShotMetaData]] (int fromPlayer, int shotID , const char* name, uint32_t value);&lt;br /&gt;
 BZF_API bool [[bz_shotHasMetaData]] (int fromPlayer, int shotID , const char* name);&lt;br /&gt;
 BZF_API uint32_t [[bz_getShotGUID]] (int fromPlayer, int shotID);&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, bz_eTeamType shotTeam = eRogueTeam );&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, bz_eTeamType shotTeam = eRogueTeam );&lt;br /&gt;
 BZF_API int [[bz_fireWorldGM]] ( int targetPlayerID, float lifetime, float *pos, float tilt, float direction, float dt, bz_eTeamType shotTeam = eRogueTeam );&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 bool [[bz_isCountDownPaused]] ( 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;
 BZF_API void [[bz_cancelCountdown]] ( const char *canceledBy );&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);&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>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_incrementPlayerTKs&amp;diff=8885</id>
		<title>Bz incrementPlayerTKs</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_incrementPlayerTKs&amp;diff=8885"/>
		<updated>2015-06-14T21:12:05Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Added minimum API verision&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_incrementPlayerTKs&lt;br /&gt;
| description   = Increments the team-kill count of a player.&lt;br /&gt;
| version = 2.4.3&lt;br /&gt;
| param1        = playerID&lt;br /&gt;
| param1type    = int&lt;br /&gt;
| param1desc    = The player who is affected by the team-kill count change.&lt;br /&gt;
| param2        = increment&lt;br /&gt;
| param2type    = int&lt;br /&gt;
| param2desc    = The team-kills to add to the player. (0 to leave the team-kills unchanged, negative number to decrement the team-kills)&lt;br /&gt;
| returntype    = bool&lt;br /&gt;
| return        = Whether the player exists.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_incrementPlayerLosses&amp;diff=8884</id>
		<title>Bz incrementPlayerLosses</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_incrementPlayerLosses&amp;diff=8884"/>
		<updated>2015-06-14T21:11:48Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Added minimum API verision&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_incrementPlayerLosses&lt;br /&gt;
| description   = Increments the losses of a player.&lt;br /&gt;
| version = 2.4.3&lt;br /&gt;
| param1        = playerID&lt;br /&gt;
| param1type    = int&lt;br /&gt;
| param1desc    = The player who is affected by the loss change.&lt;br /&gt;
| param2        = increment&lt;br /&gt;
| param2type    = int&lt;br /&gt;
| param2desc    = The losses to add to the player. (0 to leave the losses unchanged, negative number to decrement the losses)&lt;br /&gt;
| returntype    = bool&lt;br /&gt;
| return        = Whether the player exists.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_incrementPlayerWins&amp;diff=8883</id>
		<title>Bz incrementPlayerWins</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_incrementPlayerWins&amp;diff=8883"/>
		<updated>2015-06-14T21:11:26Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Add minimum API version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_incrementPlayerWins&lt;br /&gt;
| description   = Increments the wins of a player.&lt;br /&gt;
| version = 2.4.3&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        = increment&lt;br /&gt;
| param2type    = int&lt;br /&gt;
| param2desc    = The wins to add to the player. (0 to leave the wins unchanged, negative number to decrement the wins)&lt;br /&gt;
| returntype    = bool&lt;br /&gt;
| return        = Whether the player exists.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_getPlayerBySlotOrCallsign&amp;diff=8882</id>
		<title>Bz getPlayerBySlotOrCallsign</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_getPlayerBySlotOrCallsign&amp;diff=8882"/>
		<updated>2015-06-14T21:10:25Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Create page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_getPlayerBySlotOrCallsign&lt;br /&gt;
| description   = Gets the information for the player with the specified slot index or callsign. The returned player info won&#039;t update as the game progresses. If you need new updates on the player&#039;s info, you can call [[bz_updatePlayerData]].&lt;br /&gt;
&lt;br /&gt;
After you&#039;re done with the player info returned from this method, you must release it by calling [[bz_freePlayerRecord]].&lt;br /&gt;
| version = 2.4.3&lt;br /&gt;
| param1        = name&lt;br /&gt;
| param1type    = const char*&lt;br /&gt;
| param1desc    = The callsign of a player of the slot number (e.g. #2) of the player &#039;&#039;&#039;with&#039;&#039;&#039; the pound sign (#)&lt;br /&gt;
| returntype    = bz_BasePlayerRecord*&lt;br /&gt;
| returns       = an instance of [[bz_BasePlayerRecord]] that contains the player in question&#039;s information&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8881</id>
		<title>Functions (API)</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8881"/>
		<updated>2015-06-14T20:56:52Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Added bz_getPlayerBySlotOrCallsign()&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_getPlayerBySlotOrCallsign]] ( const char* name );&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;
Unknown&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByBZID]] ( int BZID );&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByCallsign]] ( const char* name );&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 bool [[bz_incrementPlayerWins]] (int playerId, int increment)&lt;br /&gt;
 BZF_API bool [[bz_incrementPlayerLosses]] (int playerId, int increment);&lt;br /&gt;
 BZF_API bool [[bz_incrementPlayerTKs]] (int playerId, int increment);&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;
 BZF_API int [[bz_getIdleTime]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPausedTime]] ( 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;
 BZF_API int [[bz_getPlayerCount]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_getShotMismatch]] ( void );&lt;br /&gt;
 BZF_API void [[bz_setShotMismatch]] ( bool value );&lt;br /&gt;
 BZF_API bool [[bz_isAutoTeamEnabled]] ( void );&lt;br /&gt;
?&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 [[bz_ApiString]] [[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, bool keepTeamFlags = false );&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 const char* [[bz_getPlayerFlag]] ( int playerID );&lt;br /&gt;
 BZF_API int [[bz_getPlayerFlagID]] ( int playerID );&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;
=== Shot Management ===&lt;br /&gt;
2.4.5+&lt;br /&gt;
 BZF_API uint32_t [[bz_getShotMetaData]] (int fromPlayer, int shotID, const char* name);&lt;br /&gt;
 BZF_API void [[bz_setShotMetaData]] (int fromPlayer, int shotID , const char* name, uint32_t value);&lt;br /&gt;
 BZF_API bool [[bz_shotHasMetaData]] (int fromPlayer, int shotID , const char* name);&lt;br /&gt;
 BZF_API uint32_t [[bz_getShotGUID]] (int fromPlayer, int shotID);&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, bz_eTeamType shotTeam = eRogueTeam );&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, bz_eTeamType shotTeam = eRogueTeam );&lt;br /&gt;
 BZF_API int [[bz_fireWorldGM]] ( int targetPlayerID, float lifetime, float *pos, float tilt, float direction, float dt, bz_eTeamType shotTeam = eRogueTeam );&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 bool [[bz_isCountDownPaused]] ( 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;
 BZF_API void [[bz_cancelCountdown]] ( const char *canceledBy );&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);&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>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Koth&amp;diff=8869</id>
		<title>Koth</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Koth&amp;diff=8869"/>
		<updated>2015-05-22T23:08:09Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Update wording in example description&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The plugin will create a King of the Hill game mode in which a team (or player) can occupy a defined volume (&amp;quot;Hill&amp;quot;) for a defined amount of time and kill all other teams (or players) if occupied long enough.&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
* Server messaging for Hill unoccupied (can be taken), Hill occupied (by whom and how long they have to hold it), regular countdown warnings while someone is holding Hill (every minute and 30, 20 &amp;amp; 10 seconds until Hill is &amp;quot;captured&amp;quot;), and successful King of the Hill announcements.  Long callsigns are truncated in server messages.&lt;br /&gt;
&lt;br /&gt;
* In teamplay mode, if any team player manages to lay claim to the Hill and kill all other team players, his/her entire team must exit the Hill volume and at least one would need to re-enter to try and hold the Hill again.  If the player that captures the hill is a rogue in teamplay mode, only that player will need to exit and re-enter to try and take the Hill again.&lt;br /&gt;
&lt;br /&gt;
* In no teamplay mode, if a player manages to lay claim to the Hill and kill all other players, only he/she must exit the Hill volume and re-enter to try and hold the Hill again.&lt;br /&gt;
&lt;br /&gt;
* Players cannot pause on the Hill (everywhere else is ok) - if they try they will be killed with a warning message not to do so.&lt;br /&gt;
&lt;br /&gt;
* King of the Hill will be disabled until there are 2 or more teams present.&lt;br /&gt;
&lt;br /&gt;
* Explicit spawn zones are recommended in map files to prevent player spawns on the Hill.&lt;br /&gt;
&lt;br /&gt;
* There is an autotime function (optional) that will reduce the time to hold the hill, based on the number of players in the game.  With this option enabled, the time is reduced a certain percentage (default is 3%) with every additional player (after 2) to a certain minimum percentage (defaut is 50%) of the original specified time to hold.  This means that (with default settings) the time to hold would not be affected for 2 players, but would be reduced by 3% for 3 players, 6% for 4 players and so on.  The minimum 50% of the original time to hold would be reached at about 19 players and would remain at 50%, no matter how many additional players were to join after that.&lt;br /&gt;
&lt;br /&gt;
* There is a &amp;quot;/kingsay &amp;lt;message&amp;gt;&amp;quot; command available to all players to send a message to person holding the hill.&lt;br /&gt;
&lt;br /&gt;
* When Hill is initially occupied and when hill is taken, standard team audio alerts take place.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Usage=&lt;br /&gt;
&lt;br /&gt;
There are 2 modes of play available:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Teamplay&#039;&#039;&#039;: if a player from a team occupies the Hill long enough, all other teams (except his/hers) are killed.  Score credits are given to the team, but not given to player that was King of the Hill.  If a rogue manages to become King of the Hill in this mode, all players (except him/her) are killed and he/she gets individual score credit for all of the kills.&lt;br /&gt;
# &#039;&#039;&#039;No teamplay&#039;&#039;&#039;: for this mode it is recommended to set up a map with only rogue players allowed.  If a player occupies the Hill long enough, all other players are killed and score credit is given to the player who became King of the Hill for all of the kills. Obviously, if teams are allowed in this mode, it would result in repeated team kills - no fun.  Basically this is a free-for-all mode for King of the Hill.&lt;br /&gt;
&lt;br /&gt;
The parameters of the King of the Hill (koth) map definition are follows:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;position &amp;lt;x&amp;gt; &amp;lt;y&amp;gt; &amp;lt;z&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
Required. This determines the location of the &amp;quot;hill&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;size &amp;lt;x&amp;gt; &amp;lt;y&amp;gt; &amp;lt;z&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
Required for rectangular hills. This determines the size of the rectangular zone&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;rotation &amp;lt;degrees&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
Optional. Only for rectangular zones, you can set the rotation as any other object.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;radius &amp;lt;radius&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
Required for cylindrical hills. The radius of the cylindrical hill&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;height &amp;lt;units&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
Required for cylindrical hills. The height of the hill; the z-axis.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;teamplay&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Optional.  This will enable the teamplay mode of King of the Hill (see above).  If not included, teamplay is disabled and it becomes as basic free for all King of the Hill mode.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;holdtime &amp;lt;seconds&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Optional.  This defines the time (in seconds) required to occupy the King of the Hill volume before a player is declared King of the Hill and other teams/players are zapped.  If not included, the default setting is 60 seconds (1 minute).  The limits of this setting are&lt;br /&gt;
controlled to a minimum of 1 second and a maximum of 7200 seconds.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;autotime &amp;lt;multiplier&amp;gt; &amp;lt;minimum multiplier&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Optional.  This will enable the automatic time reduction feature of the plugin that will reduce the time to hold the hill, based on the number of players in the game (see description above).  The multiplier field will set the hold time reduction percentage per new player.  The&lt;br /&gt;
minimum multiplier field will set the minimum hold time reduction percentage.  If these fields are left blank, the default multiplier = 3% and the default minimum multiplier = 50%.  The multiplier fields should be between 1 and 99 (percent).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;nosound&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Optional.  This will disable sounds associated with Keep Away plugin (some clients seem to have issues with this feature).&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
Examples of map (.bzw) entries:&lt;br /&gt;
&lt;br /&gt;
 koth&lt;br /&gt;
  position 0 0 25&lt;br /&gt;
  size 60 60 30&lt;br /&gt;
  teamplay&lt;br /&gt;
  holdtime 60&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
This would set up a King of the Hill volume 60 x 60 x 30, at position 0 0 25.  Teamplay would be enabled and the required time to occupy the &amp;quot;Hill&amp;quot; would be 60 seconds (1 minute).  Time to hold would not automatically adjust downward with new players.&lt;br /&gt;
&lt;br /&gt;
 koth&lt;br /&gt;
  position 0 0 20&lt;br /&gt;
  height 20&lt;br /&gt;
  radius 15&lt;br /&gt;
  holdtime 100&lt;br /&gt;
  teamplay&lt;br /&gt;
  autotime 5 25&lt;br /&gt;
  nosound&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
This would set up a King of the Hill cylindrical volume 30 x 30 x 20, at position 0 0 20.  Teamplay would be enabled and the required time to occupy the &amp;quot;Hill&amp;quot; would be 100 seconds.  The time to occupy the hill would adjust downward with an increasing number of players (see autotime description above).  Each new player after 2 will reduce the hold time by 5% to a minimum of 25% of the hold time (25 seconds).  The sounds associated with the plugin would be disabled.&lt;br /&gt;
  &lt;br /&gt;
The plugin must be loaded at startup or else the server it will not recognize these map parameters.&lt;br /&gt;
&lt;br /&gt;
=Server Commands=&lt;br /&gt;
&lt;br /&gt;
There is one command available to all players with the plugin:&lt;br /&gt;
&lt;br /&gt;
 /kingsay &amp;lt;message&amp;gt;  - this will send message to the player occupying the hill.&lt;br /&gt;
&lt;br /&gt;
There are several administrator commands available with the plugin:&lt;br /&gt;
&lt;br /&gt;
 /kothon             - this will turn King of the Hill mode on, if turned off previously.&lt;br /&gt;
 /kothoff            - this will turn King of the Hill mode off for normal gameplay.&lt;br /&gt;
 /kothtimemult       - this will set auto time multiplier (per new player).&lt;br /&gt;
 /kothtimemultmin    - this will set minimum auto time multiplier.&lt;br /&gt;
 /kothautotimeon     - this will enable the autotime function.&lt;br /&gt;
 /kothsoundon        - this will enable the plugin&#039;s sounds.&lt;br /&gt;
 /kothsoundoff       - this will disable the plugin&#039;s sounds.&lt;br /&gt;
 /kothautotimeoff    - this will disable the autotime funtion.&lt;br /&gt;
 /kothtime &amp;lt;seconds&amp;gt; - this will change King of the Hill hold time 1 -&amp;gt; 7200 seconds.&lt;br /&gt;
 /kothstatus         - this will return the status of the plugin modes, times, etc.&lt;br /&gt;
&lt;br /&gt;
=Deprecation=&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;bbox &amp;lt;Xmin&amp;gt; &amp;lt;Xmax&amp;gt; &amp;lt;Ymin&amp;gt; &amp;lt;Ymax&amp;gt; &amp;lt;Zmin&amp;gt; &amp;lt;Zmax&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;cylinder &amp;lt;X&amp;gt; &amp;lt;Y&amp;gt; &amp;lt;Zmin&amp;gt; &amp;lt;Zmax&amp;gt; &amp;lt;radius&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Support for the &#039;&#039;&#039;bbox&#039;&#039;&#039; and &#039;&#039;&#039;cylinder&#039;&#039;&#039; parameters in a Koth zone has been deprecated and will be removed in the future.&lt;br /&gt;
&lt;br /&gt;
=External Links=&lt;br /&gt;
* http://d41games.freehostia.com/bzflag.php?map=bbox An easy way to make bboxes.&lt;br /&gt;
* http://my.bzflag.org/bb/viewtopic.php?f=79&amp;amp;t=10005&amp;amp;p=99894#p99894 KotH plugin page.&lt;br /&gt;
&lt;br /&gt;
[[Category:Plug-Ins]] [[Category:Server]]&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Koth&amp;diff=8868</id>
		<title>Koth</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Koth&amp;diff=8868"/>
		<updated>2015-05-22T23:05:23Z</updated>

		<summary type="html">&lt;p&gt;Allejo: Updated example with correct value&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The plugin will create a King of the Hill game mode in which a team (or player) can occupy a defined volume (&amp;quot;Hill&amp;quot;) for a defined amount of time and kill all other teams (or players) if occupied long enough.&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
* Server messaging for Hill unoccupied (can be taken), Hill occupied (by whom and how long they have to hold it), regular countdown warnings while someone is holding Hill (every minute and 30, 20 &amp;amp; 10 seconds until Hill is &amp;quot;captured&amp;quot;), and successful King of the Hill announcements.  Long callsigns are truncated in server messages.&lt;br /&gt;
&lt;br /&gt;
* In teamplay mode, if any team player manages to lay claim to the Hill and kill all other team players, his/her entire team must exit the Hill volume and at least one would need to re-enter to try and hold the Hill again.  If the player that captures the hill is a rogue in teamplay mode, only that player will need to exit and re-enter to try and take the Hill again.&lt;br /&gt;
&lt;br /&gt;
* In no teamplay mode, if a player manages to lay claim to the Hill and kill all other players, only he/she must exit the Hill volume and re-enter to try and hold the Hill again.&lt;br /&gt;
&lt;br /&gt;
* Players cannot pause on the Hill (everywhere else is ok) - if they try they will be killed with a warning message not to do so.&lt;br /&gt;
&lt;br /&gt;
* King of the Hill will be disabled until there are 2 or more teams present.&lt;br /&gt;
&lt;br /&gt;
* Explicit spawn zones are recommended in map files to prevent player spawns on the Hill.&lt;br /&gt;
&lt;br /&gt;
* There is an autotime function (optional) that will reduce the time to hold the hill, based on the number of players in the game.  With this option enabled, the time is reduced a certain percentage (default is 3%) with every additional player (after 2) to a certain minimum percentage (defaut is 50%) of the original specified time to hold.  This means that (with default settings) the time to hold would not be affected for 2 players, but would be reduced by 3% for 3 players, 6% for 4 players and so on.  The minimum 50% of the original time to hold would be reached at about 19 players and would remain at 50%, no matter how many additional players were to join after that.&lt;br /&gt;
&lt;br /&gt;
* There is a &amp;quot;/kingsay &amp;lt;message&amp;gt;&amp;quot; command available to all players to send a message to person holding the hill.&lt;br /&gt;
&lt;br /&gt;
* When Hill is initially occupied and when hill is taken, standard team audio alerts take place.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Usage=&lt;br /&gt;
&lt;br /&gt;
There are 2 modes of play available:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Teamplay&#039;&#039;&#039;: if a player from a team occupies the Hill long enough, all other teams (except his/hers) are killed.  Score credits are given to the team, but not given to player that was King of the Hill.  If a rogue manages to become King of the Hill in this mode, all players (except him/her) are killed and he/she gets individual score credit for all of the kills.&lt;br /&gt;
# &#039;&#039;&#039;No teamplay&#039;&#039;&#039;: for this mode it is recommended to set up a map with only rogue players allowed.  If a player occupies the Hill long enough, all other players are killed and score credit is given to the player who became King of the Hill for all of the kills. Obviously, if teams are allowed in this mode, it would result in repeated team kills - no fun.  Basically this is a free-for-all mode for King of the Hill.&lt;br /&gt;
&lt;br /&gt;
The parameters of the King of the Hill (koth) map definition are follows:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;position &amp;lt;x&amp;gt; &amp;lt;y&amp;gt; &amp;lt;z&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
Required. This determines the location of the &amp;quot;hill&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;size &amp;lt;x&amp;gt; &amp;lt;y&amp;gt; &amp;lt;z&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
Required for rectangular hills. This determines the size of the rectangular zone&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;rotation &amp;lt;degrees&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
Optional. Only for rectangular zones, you can set the rotation as any other object.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;radius &amp;lt;radius&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
Required for cylindrical hills. The radius of the cylindrical hill&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;height &amp;lt;units&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
Required for cylindrical hills. The height of the hill; the z-axis.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;teamplay&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Optional.  This will enable the teamplay mode of King of the Hill (see above).  If not included, teamplay is disabled and it becomes as basic free for all King of the Hill mode.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;holdtime &amp;lt;seconds&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Optional.  This defines the time (in seconds) required to occupy the King of the Hill volume before a player is declared King of the Hill and other teams/players are zapped.  If not included, the default setting is 60 seconds (1 minute).  The limits of this setting are&lt;br /&gt;
controlled to a minimum of 1 second and a maximum of 7200 seconds.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;autotime &amp;lt;multiplier&amp;gt; &amp;lt;minimum multiplier&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Optional.  This will enable the automatic time reduction feature of the plugin that will reduce the time to hold the hill, based on the number of players in the game (see description above).  The multiplier field will set the hold time reduction percentage per new player.  The&lt;br /&gt;
minimum multiplier field will set the minimum hold time reduction percentage.  If these fields are left blank, the default multiplier = 3% and the default minimum multiplier = 50%.  The multiplier fields should be between 1 and 99 (percent).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;nosound&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Optional.  This will disable sounds associated with Keep Away plugin (some clients seem to have issues with this feature).&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
Examples of map (.bzw) entries:&lt;br /&gt;
&lt;br /&gt;
 koth&lt;br /&gt;
  position 0 0 25&lt;br /&gt;
  size 60 60 30&lt;br /&gt;
  teamplay&lt;br /&gt;
  holdtime 60&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
This would set up a King of the Hill volume 60 x 60 x 30, centered at 0 0 25.  Teamplay would be enabled and the required time to occupy the &amp;quot;Hill&amp;quot; would be 60 seconds (1 minute).  Time to hold would not automatically adjust downward with new players.&lt;br /&gt;
&lt;br /&gt;
 koth&lt;br /&gt;
  position 0 0 20&lt;br /&gt;
  height 20&lt;br /&gt;
  radius 15&lt;br /&gt;
  holdtime 100&lt;br /&gt;
  teamplay&lt;br /&gt;
  autotime 5 25&lt;br /&gt;
  nosound&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
This would set up a King of the Hill cylindrical volume 30 x 30 x 20, centered at 0 0 30.  Teamplay would be enabled and the required time to occupy the &amp;quot;Hill&amp;quot; would be 100 seconds.  The time to occupy the hill would adjust downward with an increasing number of players (see autotime description above).  Each new player after 2 will reduce the hold time by 5% to a minimum of 25% of the hold time (25 seconds).  The sounds associated with the plugin would be disabled.&lt;br /&gt;
  &lt;br /&gt;
The plugin must be loaded at startup or else the server it will not recognize these map parameters.&lt;br /&gt;
&lt;br /&gt;
=Server Commands=&lt;br /&gt;
&lt;br /&gt;
There is one command available to all players with the plugin:&lt;br /&gt;
&lt;br /&gt;
 /kingsay &amp;lt;message&amp;gt;  - this will send message to the player occupying the hill.&lt;br /&gt;
&lt;br /&gt;
There are several administrator commands available with the plugin:&lt;br /&gt;
&lt;br /&gt;
 /kothon             - this will turn King of the Hill mode on, if turned off previously.&lt;br /&gt;
 /kothoff            - this will turn King of the Hill mode off for normal gameplay.&lt;br /&gt;
 /kothtimemult       - this will set auto time multiplier (per new player).&lt;br /&gt;
 /kothtimemultmin    - this will set minimum auto time multiplier.&lt;br /&gt;
 /kothautotimeon     - this will enable the autotime function.&lt;br /&gt;
 /kothsoundon        - this will enable the plugin&#039;s sounds.&lt;br /&gt;
 /kothsoundoff       - this will disable the plugin&#039;s sounds.&lt;br /&gt;
 /kothautotimeoff    - this will disable the autotime funtion.&lt;br /&gt;
 /kothtime &amp;lt;seconds&amp;gt; - this will change King of the Hill hold time 1 -&amp;gt; 7200 seconds.&lt;br /&gt;
 /kothstatus         - this will return the status of the plugin modes, times, etc.&lt;br /&gt;
&lt;br /&gt;
=Deprecation=&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;bbox &amp;lt;Xmin&amp;gt; &amp;lt;Xmax&amp;gt; &amp;lt;Ymin&amp;gt; &amp;lt;Ymax&amp;gt; &amp;lt;Zmin&amp;gt; &amp;lt;Zmax&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;cylinder &amp;lt;X&amp;gt; &amp;lt;Y&amp;gt; &amp;lt;Zmin&amp;gt; &amp;lt;Zmax&amp;gt; &amp;lt;radius&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Support for the &#039;&#039;&#039;bbox&#039;&#039;&#039; and &#039;&#039;&#039;cylinder&#039;&#039;&#039; parameters in a Koth zone has been deprecated and will be removed in the future.&lt;br /&gt;
&lt;br /&gt;
=External Links=&lt;br /&gt;
* http://d41games.freehostia.com/bzflag.php?map=bbox An easy way to make bboxes.&lt;br /&gt;
* http://my.bzflag.org/bb/viewtopic.php?f=79&amp;amp;t=10005&amp;amp;p=99894#p99894 KotH plugin page.&lt;br /&gt;
&lt;br /&gt;
[[Category:Plug-Ins]] [[Category:Server]]&lt;/div&gt;</summary>
		<author><name>Allejo</name></author>
	</entry>
</feed>