<?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=Alezakos</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=Alezakos"/>
	<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/Special:Contributions/Alezakos"/>
	<updated>2026-05-19T14:56:42Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_eReportFiledEvent&amp;diff=8939</id>
		<title>Bz eReportFiledEvent</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_eReportFiledEvent&amp;diff=8939"/>
		<updated>2015-11-04T22:13:49Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: fix inaccurate property&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_eReportFiledEvent&#039;&#039;&#039; is an API event that is called each time a&lt;br /&gt;
player or plugin files a report.&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&#039;&#039;&#039;bz_eReportFiledEvent&#039;&#039;&#039; returns the&lt;br /&gt;
&#039;&#039;&#039;bz_ReportFiledEventData_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_eReportFiledEvent&lt;br /&gt;
  |-&lt;br /&gt;
  |from&lt;br /&gt;
  |[[bz_ApiString]]&lt;br /&gt;
  |The callsign of the player that is filing the report.&lt;br /&gt;
  |-&lt;br /&gt;
  |message&lt;br /&gt;
  |[[bz_ApiString]]&lt;br /&gt;
  |The report message that is filed.&lt;br /&gt;
  |-&lt;br /&gt;
  |eventTime&lt;br /&gt;
  |double&lt;br /&gt;
  |Time of event.&lt;br /&gt;
  |}&lt;br /&gt;
&lt;br /&gt;
==Uses==&lt;br /&gt;
This event is a notification-only event, none of the data returned can&lt;br /&gt;
be changed.&lt;br /&gt;
&lt;br /&gt;
[[Category:BZFS_API_Docs]]&lt;br /&gt;
[[Category:BZFS_API_Events]]&lt;/div&gt;</summary>
		<author><name>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Server_Variables&amp;diff=8938</id>
		<title>Server Variables</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Server_Variables&amp;diff=8938"/>
		<updated>2015-09-30T09:18:44Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: Add notes about _reloadTime resets&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The BZFlag Server (BZFS) allows administrators to configure a large number of gameplay and configuration settings from within the client.  The /set command in-game allows users with the appropriate permissions to change these values.  These may also be known as BZDB variables and &amp;quot;/set variables&amp;quot; depending on who you speak with.&lt;br /&gt;
&lt;br /&gt;
Unless otherwise noted, time values are measured in seconds, distances in [[world units]], and speeds in [[world units]] per second.&lt;br /&gt;
&lt;br /&gt;
{{InfoBox|Note|Some values, such as _worldSize, only take affect at server start since they affect the world file that is generated.  It is recommended to apply these in the map file so they are loaded with the map.}}&lt;br /&gt;
{|{{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
|{{Hl3}}|&#039;&#039;&#039;Name&#039;&#039;&#039;&lt;br /&gt;
|{{Hl3}}|&#039;&#039;&#039;Default&#039;&#039;&#039;&lt;br /&gt;
|{{Hl3}}|&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| _agilityAdVel || 2.25 || Multiplies _tankSpeed for tanks holding Agility flag for a specified amount of time (_agilityTimeWindow)&lt;br /&gt;
|-&lt;br /&gt;
| _agilityTimeWindow || 1 || The amount of time (in seconds) that the tank will have the speed specified by _agilityAdVel&lt;br /&gt;
|-&lt;br /&gt;
| _agilityVelDelta || 0.3 || How fast the agility accelerates the player to _agilityAdVel.&lt;br /&gt;
|-&lt;br /&gt;
| _ambientLight || none ||&lt;br /&gt;
|-&lt;br /&gt;
| _angleTolerance || 0.05 || If a tank has turned more than it was expected to, plus this tolerance, a new update is sent so the other clients are aware of the change in heading&lt;br /&gt;
|-&lt;br /&gt;
| _angularAd || 1.5 || Multiplies _tankAngVel to determine how fast tanks can turn while holding the Quick Turn flag&lt;br /&gt;
|-&lt;br /&gt;
| _avenueSize || 2*_boxBase || The amount of space to leave between boxes on randomly generated maps.&lt;br /&gt;
|-&lt;br /&gt;
| _baseSize || 60 || Width and Depth (bases have constant height) of the square bases for CTF games&lt;br /&gt;
|-&lt;br /&gt;
| _boxBase || 30 || The smallest amount of Width and Depth a randomly generated box may have.&lt;br /&gt;
|-&lt;br /&gt;
| _boxHeight || 6*_muzzleHeight || Size of radar box around tanks, as they move in Z. {up and down)&lt;br /&gt;
|-&lt;br /&gt;
| _burrowDepth || -1.32 || Determines how far down tanks drop when they have the Burrow Flag. Making this much lower makes it below the floor, and impossible to kill the tank without something like a ShockWave flag!&lt;br /&gt;
|-&lt;br /&gt;
| _burrowSpeedAd || .8 || Multiplied by _tankSpeed to determine how fast tanks holding the Burrow Flag move.&lt;br /&gt;
|-&lt;br /&gt;
| _burrowAngularAd || .55 || Multiplied by _tankAngVel to determine how fast tanks can turn while holding the Burrow flag.&lt;br /&gt;
|-&lt;br /&gt;
| _coldetDepth || 6 ||&lt;br /&gt;
|-&lt;br /&gt;
| _coldetElements || 4 || &lt;br /&gt;
|-&lt;br /&gt;
| _countdownResumeTime || 5 || This enforces a delay when resuming a paused countdown. If the argument is lower or equal to 0 then resuming is instantly, otherwise it is delayed according to the value (in seconds). &#039;&#039;Available in 2.1 and later&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| _countdownResumeDelay || 5 || Legacy name for _countdownResumeTime, was renamed in 2.1 and later.&lt;br /&gt;
|-&lt;br /&gt;
| _cullDepth || 6 ||&lt;br /&gt;
|-&lt;br /&gt;
| _cullDist || fog || Far plane culling distance (&#039;fog&#039; uses the fog parameters).&lt;br /&gt;
|-&lt;br /&gt;
| _cullElements || 16 || &lt;br /&gt;
|-&lt;br /&gt;
| _cullOccluders || 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| _disableBots || none || A value of 1 in this variable does not allow autopilot or bots on the server, equivalent to the old -prohibitbots command line option. &lt;br /&gt;
|-&lt;br /&gt;
| _disableSpeedChecks || 0 || Allows disabling/enabling the speed kicks.&lt;br /&gt;
|-&lt;br /&gt;
| _disableHeightChecks || 0 || Allows disabling/enabling the &amp;quot;too high&amp;quot; check.&lt;br /&gt;
|-&lt;br /&gt;
| _drawCelestial || 1 || Draw the stars, sun, and moon.&lt;br /&gt;
|-&lt;br /&gt;
| _drawClouds || 1 || Draw the clouds.&lt;br /&gt;
|-&lt;br /&gt;
| _drawGround || 1 || Draw the ground plane.&lt;br /&gt;
|-&lt;br /&gt;
| _drawGroundLights || 1 || If set to 0, lights on the ground (such as the light from bullets) will not be drawn.&lt;br /&gt;
|-&lt;br /&gt;
| _drawMountains || 1 || Draw the mountains.&lt;br /&gt;
|-&lt;br /&gt;
| _drawSky || 1 || Draw the sky pyramid.&lt;br /&gt;
|-&lt;br /&gt;
| _enableDistanceCheck || 0 || Distance checking tries to verify if a player moved too far between updates (as in, cheating).&lt;br /&gt;
|-&lt;br /&gt;
| _endShotDetection || 5 || This setting controls how many &amp;quot;end shot&amp;quot; messages can be sent without corresponding deaths (or other reasons, such as a shield drop).&lt;br /&gt;
|-&lt;br /&gt;
| _explodeTime || 5 || After a tank is killed, this is how long it takes to blow up, and then &amp;quot;respawn&amp;quot;. Larger values translates into longer explosions and more client processor time. Note that an explosion is invisible if you are inside it, so large values may make it invisible up close, and extremely large values may make explosions entirely invisible.&lt;br /&gt;
|-&lt;br /&gt;
| _flagAltitude || 11 || The height that the flag flies up when dropped and the height that a flag spawns at.&lt;br /&gt;
|-&lt;br /&gt;
| _flagEffectTime || 0.64 || How much time it takes for the flag to go into effect and how quickly the tank spawns from miniature to full size.&lt;br /&gt;
|-&lt;br /&gt;
| _flagHeight || 10 || The height of the flag (not its pole).&lt;br /&gt;
|-&lt;br /&gt;
| _flagPoleWidth || 0.025 || The diameter of the flag pole.&lt;br /&gt;
|-&lt;br /&gt;
| _flagPoleSize || 0.8 || The height of the flag pole.&lt;br /&gt;
|-&lt;br /&gt;
| _flagRadius || 2.5 || Determines how close a tank must be to a flag to pick it up.&lt;br /&gt;
|-&lt;br /&gt;
| _fogMode || none || Valid values: linear, exp, or exp2.&lt;br /&gt;
|-&lt;br /&gt;
| _fogDensity || 0.001 || Used for exp and exp2 fog modes.&lt;br /&gt;
|-&lt;br /&gt;
| _fogNoSky || 0 || 1 will turn off fog drawing on the sky. The default is fog everywhere.&lt;br /&gt;
|-&lt;br /&gt;
| _fogStart || 0.5*_worldSize || Used for linear fog mode, the distance where fog begins to occlude vision.&lt;br /&gt;
|-&lt;br /&gt;
| _fogEnd || _worldSize || Used for linear fog mode, the distance where the fog occludes everything.&lt;br /&gt;
|-&lt;br /&gt;
| _fogColor || &amp;quot;0.25 0.25 0.25&amp;quot; || &amp;quot;RED,GREEN,BLUE&amp;quot; values between 0.0 and 1.0 and/or basic colors such as blue, teal, black, pink, gray3, red4, etc.&lt;br /&gt;
|-&lt;br /&gt;
| _forbidHunting || 0 || If turned on (1), prevents players from hunting others.&lt;br /&gt;
|-&lt;br /&gt;
| _forbidIdentify || 0 || If turned on (1), prevents players from identifying others on the world map.&lt;br /&gt;
|-&lt;br /&gt;
| _forbidMarkers || 0 || If turned on (1), removes the large flag markers that appear to indicate where your team flag(s) is.&lt;br /&gt;
|-&lt;br /&gt;
| _friction || 0  || Zero is normal friction, the closer to 0 the harder it is to start and stop, and the higher the number the easier it is to start and stop.&lt;br /&gt;
|-&lt;br /&gt;
| _gmActivationTime || 0.5  || The amount of time (in seconds) it takes for a Guided Missile to become active after it is fired. Any contact under this time will not result in detonation (setting it too low could cause its owner to run into its own GM and be blown up!&lt;br /&gt;
|-&lt;br /&gt;
| _gmAdLife || 0.95 || Multiplied by _shotRange to determine the distance guided missiles will go.&lt;br /&gt;
|-&lt;br /&gt;
| _gmSize || 1.5 || The size (in WU) of the GM missile shown for players with good graphics settings.&lt;br /&gt;
|-&lt;br /&gt;
| _gmTurnAngle || 0.628319 || The angle at which a Guided Missile will turn to follow its target. (Measured in radians)&lt;br /&gt;
|-&lt;br /&gt;
| _gravity || -9.8 ||  The rate at which a tank will fall (or be kept from jumping) Measured in [[World units]]/Seconds^2. Setting this to a zero or positive value will result in tanks being unable to stay down and will float away.&lt;br /&gt;
|-&lt;br /&gt;
| _handicapScoreDiff || 50 || How much of a score difference from the average of all player&#039;s scores there must be for a player to get a handicap&lt;br /&gt;
|-&lt;br /&gt;
| _handicapVelAd || 2 || Player with handicap will receive this much more (_tankSpeed * _handicapVelAd) velocity than the normal _tankSpeed value.&lt;br /&gt;
|-&lt;br /&gt;
| _handicapAngAd || 1.5 || Player with handicap will receive this much more (_angularAd * _handicapAngAd) turning ability than the normal _angularAd value.&lt;br /&gt;
|-&lt;br /&gt;
| _handicapShotAd || 1.75 || Player with handicap will receive this much more (_shotSpeed * _handicapShotAd) bullet speed than the normal _shotSpeed value.&lt;br /&gt;
|-&lt;br /&gt;
| _hideFlagsOnRadar || 0 || No flags will appear on the radar.&lt;br /&gt;
|-&lt;br /&gt;
| _hideTeamFlagsOnRadar || 0 || No team flags will appear on the radar.&lt;br /&gt;
|-&lt;br /&gt;
| _identifyRange || 50 || If a flag is this distance or closer to a tank carrying the Identify (ID) flag, it will display the closest flag&#039;s type.&lt;br /&gt;
|-&lt;br /&gt;
| _inertiaAngular || 38 || Sets the maximum angular acceleration. Available in version 3.0. Replaces the &amp;quot;-a&amp;quot; option. &lt;br /&gt;
|-&lt;br /&gt;
| _inertiaLinear || 45 || Sets the maximum linear acceleration. Available in version 3.0. Replaces the &amp;quot;-a&amp;quot; option. &lt;br /&gt;
|-&lt;br /&gt;
| _jumpVelocity || 19 || The speed a tank moves vertically while jumping.&lt;br /&gt;
|-&lt;br /&gt;
| _laserAdVel || 1000 || The length of each laser shot. Lasers aren&#039;t exactly &amp;quot;infinite&amp;quot; as their description states, they go on for as long as this variable states.&lt;br /&gt;
|-&lt;br /&gt;
| _laserAdRate || 0.5 || Multiplied by _rFireAdRate to determine the firing rate for a laser.&lt;br /&gt;
|-&lt;br /&gt;
| _laserAdLife || 0.1 || The amount of time (in seconds) that a laser remains after being fired.&lt;br /&gt;
|-&lt;br /&gt;
| _latitude || 37.5 ||  The latitude at which the world exists. This affects the timezone.&lt;br /&gt;
|-&lt;br /&gt;
| _lgGravity|| 12.7 ||  Modifies the gravity for owners of the Low Gravity flag. Similar to the _gravity variable. &#039;&#039;Available starting in version 2.1&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| _lockOnAngle || 0.15 || Angle (in radians) in relation to tanks heading (positive or negative) that will allow a Guided Missile to lock onto a target.&lt;br /&gt;
|-&lt;br /&gt;
| _longitude || 122 || The longitude at which the world exists. This affects the timezone.&lt;br /&gt;
|-&lt;br /&gt;
| _lRAdRate || 0.5 ||&lt;br /&gt;
|-&lt;br /&gt;
| _maxBumpHeight || 0.33 || Any difference between the surface a tank is on and the top surface of an object the tank runs into that is less than this value will allow the tank to simply move up to the object rather than being stopped by it.&lt;br /&gt;
|-&lt;br /&gt;
| _maxFlagGrabs || 4.0 || How many times a flag can be dropped before it respawns. At the first spawn, flags are assigned a random # between 1 and _maxFlagGrabs. Each grab reduces that number by 1, until zero is reached, then the flag spawns at a new location. Flags will always respawn no matter how many flag grabs they have left if dropped over an &#039;unsafe&#039; zone.&lt;br /&gt;
|-&lt;br /&gt;
| _maxLOD || 32767 || The max level of detail to allow.&lt;br /&gt;
|-&lt;br /&gt;
| _mirror || none || Options: &#039;&#039;&#039;white&#039;&#039;&#039;, &#039;&#039;&#039;black&#039;&#039;&#039;, &#039;&#039;&#039;red&#039;&#039;&#039;, &#039;&#039;&#039;blue&#039;&#039;&#039;, &#039;&#039;&#039;pink&#039;&#039;&#039;, &#039;&#039;&#039;purple&#039;&#039;&#039;, &#039;&#039;&#039;orange&#039;&#039;&#039;, etc... (&amp;quot;black 0.75&amp;quot; is a good setting, some invalid options such as &#039;&#039;&#039;mirror&#039;&#039;&#039; will give a mirror look)&lt;br /&gt;
|-&lt;br /&gt;
| _momentumLinAcc || 1 || Momentum flag&#039;s effect on going forwards and backwards.&lt;br /&gt;
|-&lt;br /&gt;
| _momentumAngAcc || 1 || Momentum flag&#039;s effect on turning.&lt;br /&gt;
|-&lt;br /&gt;
| _momentumFriction || 0 || Friction (same as _friction) when holding the Momentum flag.&lt;br /&gt;
|-&lt;br /&gt;
| _mGunAdVel || 1/_mGunAdRate || The speed of the machine gun&#039;s bullets.&lt;br /&gt;
|-&lt;br /&gt;
| _mGunAdRate || 10 || _reloadTime divided by _mGunAdRate gives how long machine gun bullets take to reload.&lt;br /&gt;
|-&lt;br /&gt;
| _mGunAdLife || 1.5 || Multiplied by _shotRange to determine the distance machine gun bullets go.&lt;br /&gt;
|-&lt;br /&gt;
| _muzzleFront || _tankRadius + 0.1 || Location of muzzle of tank (affects bullets and player camera location).&lt;br /&gt;
|-&lt;br /&gt;
| _muzzleHeight || 1.57 || See _muzzleFront.&lt;br /&gt;
|-&lt;br /&gt;
| _noClimb || 1 || Allow or disallow climbing on sloped surfaces. A value of 0 allows, 1 disallows.&lt;br /&gt;
|-&lt;br /&gt;
| _noShadows || 0 || Enables or disables shadows. A value of 0 allows, 1 disallows.&lt;br /&gt;
|-&lt;br /&gt;
| _noSmallPackets || 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| _notRespondingTime || 5 || The amount of time (in seconds) the server should wait before reporting a tank as not responding.&lt;br /&gt;
|-&lt;br /&gt;
| _obeseFactor || 2.5 || Multiplier of normal size that determines how big a tank gets when carrying the Obese flag.&lt;br /&gt;
|-&lt;br /&gt;
| _pauseDropTime || 15 || The amount of time (in seconds) that a tank needs to be paused before its flag is dropped automatically.&lt;br /&gt;
|-&lt;br /&gt;
| _positionTolerance || 0.09 || If a tank has moved more than this amount in position, send a new update to all tank players.&lt;br /&gt;
|-&lt;br /&gt;
| _pyrBase || 4 * _tankHeight || Base size of pyramids generated by the default random map generator.&lt;br /&gt;
|-&lt;br /&gt;
| _pyrHeight || 5 * _tankHeight || Height of pyramids generated by the default random map generator.&lt;br /&gt;
|-&lt;br /&gt;
| _radarLimit || _worldSize || The maximum area that the radar can see (when not rotated).&lt;br /&gt;
|-&lt;br /&gt;
| _rainBaseColor || none || When _rainType = rain, sets color of the bottom of raindrops.&lt;br /&gt;
|-&lt;br /&gt;
| _rainDensity || none || Determines how many drops of rain are in the space defined by _rainSpread.&lt;br /&gt;
|-&lt;br /&gt;
| _rainEndZ || none || The height above the ground where rain should stop falling.&lt;br /&gt;
|-&lt;br /&gt;
| _rainMaxPuddleTime || none || The amount of time (in seconds) a rain puddle should exist before disappearing.&lt;br /&gt;
|-&lt;br /&gt;
| _rainPuddleSpeed || none || The speed at which puddles should spread out.&lt;br /&gt;
|-&lt;br /&gt;
| _rainPuddleColor || none || Color of rain puddles. none means no puddle.&lt;br /&gt;
|-&lt;br /&gt;
| _rainPuddleTexture ||none || Texture of puddles. Best to leave default.&lt;br /&gt;
|-&lt;br /&gt;
| _rainRoofs || 1 || &#039;&#039;&#039;0&#039;&#039;&#039; rain falls through everything&amp;lt;br&amp;gt;&#039;&#039;&#039;1&#039;&#039;&#039; rain hits buildings, but puddles are only on the ground&amp;lt;br&amp;gt;&#039;&#039;&#039;2&#039;&#039;&#039; rain hits buildings, and creates puddles on them&lt;br /&gt;
|-&lt;br /&gt;
| _rainSpread || none || The radius from center of map where rain will fall.&lt;br /&gt;
|-&lt;br /&gt;
| _rainSpeed || none || The speed at which the rain falls.&lt;br /&gt;
|-&lt;br /&gt;
| _rainSpeedMod || none || Randomizes _rainSpeed by adding/subtracting up to this number from each raindrop&#039;s speed&lt;br /&gt;
|-&lt;br /&gt;
| _rainSpins || none || &#039;&#039;&#039;0&#039;&#039;&#039; Rain does not spin as it falls&amp;lt;br&amp;gt;&#039;&#039;&#039;1&#039;&#039;&#039; Rain spins as it falls.&lt;br /&gt;
|-&lt;br /&gt;
| _rainStartZ || none || The height above ground that rain should fall from.&lt;br /&gt;
|-&lt;br /&gt;
| _rainTexture || none || The name of the texture in data directory.&amp;lt;br&amp;gt;&#039;&#039;Works with _rainTypes of frog, particle, bubble, snow, fatrain&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| _rainTopColor ||none || When _rainType = rain, sets color of the top of raindrops.&lt;br /&gt;
|-&lt;br /&gt;
| _rainType || none || Adjusts all _rain* and _use* variables automatically&amp;lt;br&amp;gt;Valid Options : &#039;&#039;&#039;frog&#039;&#039;&#039;, &#039;&#039;&#039;particle&#039;&#039;&#039;, &#039;&#039;&#039;rain&#039;&#039;&#039;, &#039;&#039;&#039;bubble&#039;&#039;&#039;, &#039;&#039;&#039;snow&#039;&#039;&#039;, &#039;&#039;&#039;fatrain&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| _rejoinTime || _explodeTime || The number of seconds before clients can rejoin a game, after they leave.&lt;br /&gt;
|-&lt;br /&gt;
| _rejumpTime || 0.01 || From version 3.0. Time a tank has to wait before he can jump again after landing. Any value higher than 0 will make it difficult to jump away from sloped faces like pyramids.&lt;br /&gt;
|-&lt;br /&gt;
| _reloadTime || _shotRange/_shotSpeed || Time between shot reloads, note that this can cut shot range short.&lt;br /&gt;
|-&lt;br /&gt;
| _rFireAdVel || 1.5 || Multiplied by _shotSpeed to determine the speed of the rapid fire bullets.&lt;br /&gt;
|-&lt;br /&gt;
| _rFireAdRate || 2 || The reload time (in seconds) for rapid fire bullets.&lt;br /&gt;
|-&lt;br /&gt;
| _rFireAdLife || 1/_rFireAdRate || How long the rapid fire bullets last.&lt;br /&gt;
|-&lt;br /&gt;
| _shieldFlight || 2.7 || The amount of time (in seconds) that a shield flag floats in the air (after you drop it) before coming down again.&lt;br /&gt;
|-&lt;br /&gt;
| _shockAdLife || 0.2 || The amount of time (in seconds) that a shockwave lasts.&lt;br /&gt;
|-&lt;br /&gt;
| _shockInRadius || _tankLength || The starting radius of the shockwave. Negative values will make the shockwave shrink and expand.&lt;br /&gt;
|-&lt;br /&gt;
| _shockOutRadius || 60 || The outer radius of the shockwave. If greater than _shockInRadius, the shockwave expands outward. If less than _shockInRadius, the shockwave starts big and shrinks inward.&lt;br /&gt;
|-&lt;br /&gt;
| _shotRadius || 0.5 || For collision detection.&lt;br /&gt;
|-&lt;br /&gt;
| _shotRange || 350 || Range of shots, note that they can be cut short by _reloadTime &amp;lt;small&amp;gt;(run &amp;lt;code&amp;gt;/reset _reloadTime&amp;lt;/code&amp;gt; after setting _shotRange to avoid this)&amp;lt;/small&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| _shotSpeed || 100 || Speed of shots. If you&#039;re experiencing issues after changing the value of this variable (e.g. players not shooting or shots not killing), you should call &amp;lt;code&amp;gt;/reset _reloadTime&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| _shotTailLength || 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| _shotsKeepVerticalVelocity || 0 || If &#039;&#039;&#039;0&#039;&#039;&#039;, shots always move straight in relation to the ground. If &#039;&#039;&#039;1&#039;&#039;&#039;, shots are affected vertically by the tank&#039;s speed, and can fly up and down. Lasers are also affected. &lt;br /&gt;
|-&lt;br /&gt;
| _skyColor || white || Sets the sky to a specific color.&lt;br /&gt;
|-&lt;br /&gt;
| _spawnMaxCompTime || 0.01 || This controls the maximum amount of time to attempt finding a safe spawn location. If this time is exceeded, the tank will just get dropped in from maximum height. The time should be in seconds, so the default is to only wait for 10ms.&lt;br /&gt;
|-&lt;br /&gt;
| _spawnSafeRadMod || 20 || How far away players are forced to spawn from enemy tanks.&lt;br /&gt;
|-&lt;br /&gt;
|_spawnSafeSRMod || 20 || How far away players are forced to spawn from tanks with Steamroller.&lt;br /&gt;
|-&lt;br /&gt;
|_spawnSafeSWMod || 1.5 || How far away players are forced to spawn from tanks with Shockwave.&lt;br /&gt;
|-&lt;br /&gt;
| _speedChecksLogOnly || 0 || If set to 1, someone moving too fast will not get kicked - it will just log it to the stdout.&lt;br /&gt;
|-&lt;br /&gt;
| _srRadiusMult || 2 || Radius of steamroller effect.&lt;br /&gt;
|-&lt;br /&gt;
| _squishFactor || 1 || How much tanks squish when landing.&lt;br /&gt;
|-&lt;br /&gt;
| _squishTime || 1 || How much squishy time you get after falling to the ground.&lt;br /&gt;
|-&lt;br /&gt;
| _syncTime || 1 || Whether or not to sync the players time with the servers&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| _syncLocation || 0 || Whether or not to sync the location time with the servers&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| _tankAngVel || 0.785398 || How fast the tank can turn.&lt;br /&gt;
|-&lt;br /&gt;
| _tankExplosionSize || 3.5 * _tankLength || How large the tank&#039;s explosion is.&lt;br /&gt;
|-&lt;br /&gt;
| _tankHeight || 2.05 || The height of the tank.&lt;br /&gt;
|-&lt;br /&gt;
| _tankLength || 6 || The length of the tank.&lt;br /&gt;
|-&lt;br /&gt;
| _tankRadius || 0.72 * _tankLength || The radius of the tank.&lt;br /&gt;
|-&lt;br /&gt;
| _tankSpeed || 25 || The speed of the tank&lt;br /&gt;
|-&lt;br /&gt;
| _tankWidth || 2.8 || The width of the tank.&lt;br /&gt;
|-&lt;br /&gt;
| _targetingAngle || 0.3 || How far in radians the player can be offset in facing a target to still target them. (Identify or Guided Missile Lock On)&lt;br /&gt;
|-&lt;br /&gt;
| _teleportBreadth || 4.48 || How much width a randomly generated teleporter has.&lt;br /&gt;
|-&lt;br /&gt;
| _teleportHeight || 10.08 || How much height a randomly generated teleporter has.&lt;br /&gt;
|-&lt;br /&gt;
| _teleportTime || 1 || If a teleporting tank exceeds this time, it no longer teleports.&lt;br /&gt;
|-&lt;br /&gt;
| _teleportWidth || 1.12 || How much width a randomly generated teleporter has. Note that this is not to be confused with the &amp;quot;X&amp;quot; size of teleporters. It is the size of a border.&lt;br /&gt;
|-&lt;br /&gt;
| _thiefAdLife || 0.05 || The amount of time (in seconds) that a thief shot lasts.&lt;br /&gt;
|-&lt;br /&gt;
| _thiefAdRate || 12 || The amount of time (in seconds) that the Thief &amp;quot;shot&amp;quot; reloads.&lt;br /&gt;
|-&lt;br /&gt;
| _thiefAdShotVel || 8 || The speed of thief.&lt;br /&gt;
|-&lt;br /&gt;
| _thiefTinyFactor || 0.5 || Multiplied by the normal tank size to shrink a tank carrying the thief flag.&lt;br /&gt;
|-&lt;br /&gt;
| _thiefVelAd || 1.67 || Multiplied by _tankSpeed to determine how fast tanks holding the thief goes.&lt;br /&gt;
|-&lt;br /&gt;
| _thiefDropTime || reloadTime * 0.5 ||The amount of time you must wait to fire a shot after stealing a flag.&lt;br /&gt;
|-&lt;br /&gt;
| _tinyFactor || 0.4 || Multiplied by the normal tank size to shrink a tank carrying the tiny flag.&lt;br /&gt;
|-&lt;br /&gt;
| _trackFade || 3 || The amount of time (in seconds) before track marks fade.&lt;br /&gt;
|-&lt;br /&gt;
| _updateThrottleRate || 30 || The maximum number of position updates clients will send every second. Higher values mean higher bandwidth consumption and more server processing time.&lt;br /&gt;
|-&lt;br /&gt;
| _useLineRain || none || &#039;&#039;&#039;0&#039;&#039;&#039; Rain is not a vertical line&amp;lt;br&amp;gt;&#039;&#039;&#039;1&#039;&#039;&#039; Rain is vertical lines, smoothly shaded from _rainTopColor to _rainBaseColor&lt;br /&gt;
|-&lt;br /&gt;
| _useRainPuddles || none || &#039;&#039;&#039;0&#039;&#039;&#039; Rain does not create puddles&amp;lt;br&amp;gt;&#039;&#039;&#039;1&#039;&#039;&#039; Rain creates puddles&lt;br /&gt;
|-&lt;br /&gt;
| _useRainBillboards || none || &#039;&#039;&#039;0&#039;&#039;&#039; Rain is lines or polygons&amp;lt;br&amp;gt;&#039;&#039;&#039;1&#039;&#039;&#039; Rain is billboards, textured and look the same from all angles&lt;br /&gt;
|-&lt;br /&gt;
| _velocityAd || 1.5 || Multiplies _tankSpeed to determine the speed of a tank carrying the high speed (V) flag&lt;br /&gt;
|-&lt;br /&gt;
| _wallHeight || 3 * _tankHeight|| The outer wall height.&lt;br /&gt;
|-&lt;br /&gt;
| _weapons || 1 || Used with world weapons, &#039;&#039;&#039;0&#039;&#039;&#039; world weapons will not fire&amp;lt;br&amp;gt;&#039;&#039;&#039;1&#039;&#039;&#039; world weapons will fire&lt;br /&gt;
|-&lt;br /&gt;
| _wideAngleAng || 1.745329 || The viewing angle when a tank has the Wide Angle bad flag.&lt;br /&gt;
|-&lt;br /&gt;
| _wingsGravity || _gravity || How much gravity affects tanks with the WG flag.&lt;br /&gt;
|-&lt;br /&gt;
| _wingsJumpCount || 1 || The number of jumps a tank with the wings flag can do before returning to the ground.&lt;br /&gt;
|-&lt;br /&gt;
| _wingsJumpVelocity || _jumpVelocity || The initial velocity of a jump with wings, in [[world units]]/sec.&lt;br /&gt;
|-&lt;br /&gt;
| _wingsSlideTime || 0 || When in the air, the tanks will slide for this long.&lt;br /&gt;
|-&lt;br /&gt;
| _worldSize || 800 || The size of the world from one end to the other. This would not be the same as the [[World_(object)|World Object]] &#039;&#039;&#039;size&#039;&#039;&#039; option as that one accepts a size parameter from the center to one end.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Server]]&lt;/div&gt;</summary>
		<author><name>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_getCountdownRemaining&amp;diff=8933</id>
		<title>Bz getCountdownRemaining</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_getCountdownRemaining&amp;diff=8933"/>
		<updated>2015-09-25T09:16:11Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: Created page with &amp;quot;{{apicall | name          = bz_getCountdownProgress | 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 pro...&amp;quot;&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>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8932</id>
		<title>Functions (API)</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8932"/>
		<updated>2015-09-25T09:08:13Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: /* Timed Game Management */ Add new bz_getCountdownProgress() 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|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 int [[bz_getCountdownProgress]] ( 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>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=BZFS_API&amp;diff=8930</id>
		<title>BZFS API</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=BZFS_API&amp;diff=8930"/>
		<updated>2015-08-22T10:19:54Z</updated>

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

		<summary type="html">&lt;p&gt;Alezakos: Alezakos moved page Event(API) to Events (API)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Events (API)]]&lt;/div&gt;</summary>
		<author><name>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Events_(API)&amp;diff=8928</id>
		<title>Events (API)</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Events_(API)&amp;diff=8928"/>
		<updated>2015-08-22T10:18:42Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: Alezakos moved page Event(API) to Events (API)&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_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_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>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Functions(API)&amp;diff=8927</id>
		<title>Functions(API)</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Functions(API)&amp;diff=8927"/>
		<updated>2015-08-22T10:18:09Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: Alezakos moved page Functions(API) to Functions (API) over redirect&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Functions (API)]]&lt;/div&gt;</summary>
		<author><name>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8926</id>
		<title>Functions (API)</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8926"/>
		<updated>2015-08-22T10:18:09Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: Alezakos moved page Functions(API) to Functions (API) over redirect&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 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>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Plug-ins&amp;diff=8925</id>
		<title>Plug-ins</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Plug-ins&amp;diff=8925"/>
		<updated>2015-08-22T10:14:56Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: /* Third Party Plug-ins */ Update the guide to build 3rd-party plugins for 2.4.3&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.&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>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Template:Apicall&amp;diff=8924</id>
		<title>Template:Apicall</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Template:Apicall&amp;diff=8924"/>
		<updated>2015-08-22T09:27:45Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: Show the function&amp;#039;s underscore on the title&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{DISPLAYTITLE:{{{name}}}}}&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>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Events_(API)&amp;diff=8923</id>
		<title>Events (API)</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Events_(API)&amp;diff=8923"/>
		<updated>2015-08-22T09:26:30Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: /* See also */ fix red link&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_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_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>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Events_(API)&amp;diff=8922</id>
		<title>Events (API)</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Events_(API)&amp;diff=8922"/>
		<updated>2015-08-22T09:25:09Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: /* See also */ Add link to functions&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_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_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;
* [[Function(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>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8921</id>
		<title>Functions (API)</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8921"/>
		<updated>2015-08-22T09:24:05Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: /* See also */ Add link to events&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 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>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Template:BZFS_API_Doc&amp;diff=8920</id>
		<title>Template:BZFS API Doc</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Template:BZFS_API_Doc&amp;diff=8920"/>
		<updated>2015-08-22T09:22:16Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: Remove rogue bracket&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#if:{{{keeptitle|}}}||{{DISPLAYTITLE:{{#if:{{NAMESPACE}}|{{NAMESPACE}}:|}}{{lcfirst:{{PAGENAME}}}}}}}}&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
{|style=&amp;quot;width:100%;margin-top:+.7em;&amp;quot;&lt;br /&gt;
||&#039;&#039;&#039;BZFS API Documentation&#039;&#039;&#039; This page contains part of the [[BZFS API]] documentation for use by [[Plug-ins]] on the [[BZFS]] server.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;includeonly&amp;gt;[[Category:BZFS_API_Docs]]&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&amp;lt;br&amp;gt;Adding this template to a page will automatically add the page to the [[:Category:BZFS_API_Docs|Category:BZFS_API_Docs]] page. To use this template add &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;{{BZFS_API_Doc}}&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039; at the top of the page you are creating/editing.&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Events_(API)&amp;diff=8919</id>
		<title>Events (API)</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Events_(API)&amp;diff=8919"/>
		<updated>2015-08-22T09:21:14Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: Properly capitalise the title of the page&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_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_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;
&lt;br /&gt;
[[plug-ins]]&lt;br /&gt;
&lt;br /&gt;
[[Category:BZFS_API_Events]]&lt;/div&gt;</summary>
		<author><name>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8918</id>
		<title>Functions (API)</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8918"/>
		<updated>2015-08-22T09:20:39Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: Properly capitalise the title of the page&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 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>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Template:BZFS_API_Doc&amp;diff=8917</id>
		<title>Template:BZFS API Doc</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Template:BZFS_API_Doc&amp;diff=8917"/>
		<updated>2015-08-22T09:19:56Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: Allow pages to keep a title unchanged&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#if:{{{keeptitle|}}}||{{DISPLAYTITLE:{{#if:{{NAMESPACE}}|{{NAMESPACE}}:|}}{{lcfirst:{{PAGENAME}}}}}}}}}&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
{|style=&amp;quot;width:100%;margin-top:+.7em;&amp;quot;&lt;br /&gt;
||&#039;&#039;&#039;BZFS API Documentation&#039;&#039;&#039; This page contains part of the [[BZFS API]] documentation for use by [[Plug-ins]] on the [[BZFS]] server.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;includeonly&amp;gt;[[Category:BZFS_API_Docs]]&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&amp;lt;br&amp;gt;Adding this template to a page will automatically add the page to the [[:Category:BZFS_API_Docs|Category:BZFS_API_Docs]] page. To use this template add &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;{{BZFS_API_Doc}}&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039; at the top of the page you are creating/editing.&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_incrementPlayerLosses&amp;diff=8878</id>
		<title>Bz incrementPlayerLosses</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_incrementPlayerLosses&amp;diff=8878"/>
		<updated>2015-05-29T13:39:28Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: &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;
| 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>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_incrementPlayerWins&amp;diff=8877</id>
		<title>Bz incrementPlayerWins</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_incrementPlayerWins&amp;diff=8877"/>
		<updated>2015-05-29T13:39:20Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: &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;
| 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>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_incrementPlayerTKs&amp;diff=8876</id>
		<title>Bz incrementPlayerTKs</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_incrementPlayerTKs&amp;diff=8876"/>
		<updated>2015-05-29T13:39:10Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: Created page with &amp;quot;{{apicall | name          = bz_incrementPlayerTKs | description   = Increments the team-kill count of a player. | param1        = playerID | param1type    = int | param1desc...&amp;quot;&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;
| 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>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_incrementPlayerLosses&amp;diff=8875</id>
		<title>Bz incrementPlayerLosses</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_incrementPlayerLosses&amp;diff=8875"/>
		<updated>2015-05-29T13:38:21Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: &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;
| param1        = playerID&lt;br /&gt;
| param1type    = int&lt;br /&gt;
| param1desc    = The player who is affected by the loss change.&lt;br /&gt;
| param2        = losses&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>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_incrementPlayerLosses&amp;diff=8874</id>
		<title>Bz incrementPlayerLosses</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_incrementPlayerLosses&amp;diff=8874"/>
		<updated>2015-05-29T13:37:56Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: Created page with &amp;quot;{{apicall | name          = bz_incrementPlayerLosses | description   = Increments the losses of a player. | param1        = playerID | param1type    = int | param1desc    = Th...&amp;quot;&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;
| param1        = playerID&lt;br /&gt;
| param1type    = int&lt;br /&gt;
| param1desc    = The player who is affected by the loss change.&lt;br /&gt;
| param2        = wins&lt;br /&gt;
| param2type    = int&lt;br /&gt;
| param2desc    = The losses to add to the player. (0 to leave the wings 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>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_incrementPlayerWins&amp;diff=8873</id>
		<title>Bz incrementPlayerWins</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_incrementPlayerWins&amp;diff=8873"/>
		<updated>2015-05-29T13:37:34Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: Created page with &amp;quot;{{apicall | name          = bz_incrementPlayerWins | description   = Increments the wins of a player. | param1        = playerID | param1type    = int | param1desc    = The pl...&amp;quot;&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;
| param1        = playerID&lt;br /&gt;
| param1type    = int&lt;br /&gt;
| param1desc    = The player who is affected by the win change.&lt;br /&gt;
| param2        = wins&lt;br /&gt;
| param2type    = int&lt;br /&gt;
| param2desc    = The wins to add to the player. (0 to leave the wings 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>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Zone&amp;diff=8855</id>
		<title>Zone</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Zone&amp;diff=8855"/>
		<updated>2015-03-26T13:10:22Z</updated>

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

		<summary type="html">&lt;p&gt;Alezakos: Add new listPlugins permission&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;                               With the number of followers he/she/it has, it looks like it might be a compromised Twitter account trying to run some bots against people who tweet back.... maybe? I don&#039;t know.&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>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8841</id>
		<title>Functions (API)</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8841"/>
		<updated>2014-12-21T09:32:03Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: /* Timed Game Management */ Add bz_cancelCountdown()&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 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 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 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>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_cancelCountdown&amp;diff=8840</id>
		<title>Bz cancelCountdown</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_cancelCountdown&amp;diff=8840"/>
		<updated>2014-12-21T09:29:13Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: Created page with &amp;quot;{{apicall | name          = bz_cancelCountdown | returns       =  | returntype    = void | description   = Stops the countdown before a match has been started. | param1      =...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name          = bz_cancelCountdown&lt;br /&gt;
| returns       = &lt;br /&gt;
| returntype    = void&lt;br /&gt;
| description   = Stops the countdown before a match has been started.&lt;br /&gt;
| param1      = canceledBy&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 or &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=DevelopmentPlans/2.4.2&amp;diff=8839</id>
		<title>DevelopmentPlans/2.4.2</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=DevelopmentPlans/2.4.2&amp;diff=8839"/>
		<updated>2014-11-19T13:57:01Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
2.4.2 was the first maintenance release of the 2.4.x compatibility line. Its primary function was to be pushed out in order to get a complete debian package and having a new version number helps with that.&lt;br /&gt;
&lt;br /&gt;
The release was completed in July 2012 as the [[BZFlag_2.4.2]] release&lt;br /&gt;
&lt;br /&gt;
==Tasks==&lt;br /&gt;
Many tasks were postponed to a later release in order to get the debian package out and due to general development apathy.&lt;br /&gt;
&lt;br /&gt;
===Bug To Be Fixed===&lt;br /&gt;
&lt;br /&gt;
====Introduced in previous release====&lt;br /&gt;
* &amp;lt;strike&amp;gt;&amp;quot;ST&amp;quot; autopilot &#039;issue&#039; https://sourceforge.net/tracker/?func=detail&amp;amp;aid=3368248&amp;amp;group_id=3248&amp;amp;atid=103248&amp;lt;/strike&amp;gt;&lt;br /&gt;
* The bzadmin client in the 2.4.0 Windows installer (32-bit, and probably 64-bit) was not built with PDCurses&lt;br /&gt;
&lt;br /&gt;
=====Primary=====&lt;br /&gt;
* &amp;lt;strike&amp;gt;Flag Spawning After Death https://sourceforge.net/tracker/?func=detail&amp;amp;aid=3021884&amp;amp;group_id=3248&amp;amp;atid=103248&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Secondary=====&lt;br /&gt;
* &amp;lt;strike&amp;gt;Observer movement controls seems to get locked-up https://sourceforge.net/tracker/?func=detail&amp;amp;aid=3368413&amp;amp;group_id=3248&amp;amp;atid=103248&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;timeout does not work with multiple team flags https://sourceforge.net/tracker/?func=detail&amp;amp;aid=3368409&amp;amp;group_id=3248&amp;amp;atid=103248&amp;lt;/strike&amp;gt; (fixed in 2.4.4)&lt;br /&gt;
* &#039;&#039;&#039;time limiter and agility https://sourceforge.net/tracker/?func=detail&amp;amp;aid=3368408&amp;amp;group_id=3248&amp;amp;atid=103248 (Canceled 1/16/12, pushed to 2.4.4)&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039; z buffer issues https://sourceforge.net/tracker/?func=detail&amp;amp;aid=3368245&amp;amp;group_id=3248&amp;amp;atid=103248 (Canceled 1/16/12, pushed to 2.4.4)&#039;&#039;&#039;&lt;br /&gt;
* &amp;lt;strike&amp;gt;line numbers in drawinfo errors https://sourceforge.net/tracker/?func=detail&amp;amp;aid=2139541&amp;amp;group_id=3248&amp;amp;atid=103248&amp;lt;/strike&amp;gt; (fied in 2.4.4)&lt;br /&gt;
* &amp;lt;strike&amp;gt;stats not tracking https://sourceforge.net/tracker/?func=detail&amp;amp;aid=1433676&amp;amp;group_id=3248&amp;amp;atid=103248&amp;lt;/strike&amp;gt; (fixed in 2.4.4)&lt;br /&gt;
*&#039;&#039;&#039; eval &amp;quot;configure should test and enable the fudged acosf atanf asinf&amp;quot; from old TODO. (Canceled 1/16/12, pushed to 2.4.4)&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
* &#039;&#039;&#039;BZFScron (implement as backport from 2.99) (BTH) (Canceled 1/16/12, pushed to 2.4.4)&#039;&#039;&#039;&lt;br /&gt;
* Fastmap ( Fixed : 7/30/11 JAM )&lt;br /&gt;
* &#039;&#039;&#039;Push Stats ( finish backend ) (Canceled 1/16/12, pushed to 2.4.4)&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Joystick fixes (DTR?) (Canceled 1/16/12, pushed to 2.4.4)&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;CIDR/subnet bans from Filter.cxx (Make a common ban check/resolution function/class?) (Canceled 1/16/12, pushed to 2.4.4)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Known Bugs==&lt;br /&gt;
&lt;br /&gt;
[[Category:Development Plans]]&lt;/div&gt;</summary>
		<author><name>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=DevelopmentPlans/2.4.2&amp;diff=8838</id>
		<title>DevelopmentPlans/2.4.2</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=DevelopmentPlans/2.4.2&amp;diff=8838"/>
		<updated>2014-11-19T13:54:26Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: mark fixed issues&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
2.4.2 was the first maintenance release of the 2.4.x compatibility line. Its primary function was to be pushed out in order to get a complete debian package and having a new version number helps with that.&lt;br /&gt;
&lt;br /&gt;
The release was completed in July 2012 as the [[BZFlag_2.4.2]] release&lt;br /&gt;
&lt;br /&gt;
==Tasks==&lt;br /&gt;
Many tasks were postponed to a later release in order to get the debian package out and due to general development apathy.&lt;br /&gt;
&lt;br /&gt;
===Bug To Be Fixed===&lt;br /&gt;
&lt;br /&gt;
====Introduced in previous release====&lt;br /&gt;
* &amp;lt;strike&amp;gt;&amp;quot;ST&amp;quot; autopilot &#039;issue&#039; https://sourceforge.net/tracker/?func=detail&amp;amp;aid=3368248&amp;amp;group_id=3248&amp;amp;atid=103248&amp;lt;/strike&amp;gt;&lt;br /&gt;
* The bzadmin client in the 2.4.0 Windows installer (32-bit, and probably 64-bit) was not built with PDCurses&lt;br /&gt;
&lt;br /&gt;
=====Primary=====&lt;br /&gt;
* &amp;lt;strike&amp;gt;Flag Spawning After Death https://sourceforge.net/tracker/?func=detail&amp;amp;aid=3021884&amp;amp;group_id=3248&amp;amp;atid=103248&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Secondary=====&lt;br /&gt;
* &amp;lt;strike&amp;gt;Observer movement controls seems to get locked-up https://sourceforge.net/tracker/?func=detail&amp;amp;aid=3368413&amp;amp;group_id=3248&amp;amp;atid=103248&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;timeout does not work with multiple team flags https://sourceforge.net/tracker/?func=detail&amp;amp;aid=3368409&amp;amp;group_id=3248&amp;amp;atid=103248&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;time limiter and agility https://sourceforge.net/tracker/?func=detail&amp;amp;aid=3368408&amp;amp;group_id=3248&amp;amp;atid=103248 (Canceled 1/16/12, pushed to 2.4.4)&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039; z buffer issues https://sourceforge.net/tracker/?func=detail&amp;amp;aid=3368245&amp;amp;group_id=3248&amp;amp;atid=103248 (Canceled 1/16/12, pushed to 2.4.4)&#039;&#039;&#039;&lt;br /&gt;
* &amp;lt;strike&amp;gt;line numbers in drawinfo errors https://sourceforge.net/tracker/?func=detail&amp;amp;aid=2139541&amp;amp;group_id=3248&amp;amp;atid=103248&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;stats not tracking https://sourceforge.net/tracker/?func=detail&amp;amp;aid=1433676&amp;amp;group_id=3248&amp;amp;atid=103248&amp;lt;/strike&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039; eval &amp;quot;configure should test and enable the fudged acosf atanf asinf&amp;quot; from old TODO. (Canceled 1/16/12, pushed to 2.4.4)&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
* &#039;&#039;&#039;BZFScron (implement as backport from 2.99) (BTH) (Canceled 1/16/12, pushed to 2.4.4)&#039;&#039;&#039;&lt;br /&gt;
* Fastmap ( Fixed : 7/30/11 JAM )&lt;br /&gt;
* &#039;&#039;&#039;Push Stats ( finish backend ) (Canceled 1/16/12, pushed to 2.4.4)&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Joystick fixes (DTR?) (Canceled 1/16/12, pushed to 2.4.4)&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;CIDR/subnet bans from Filter.cxx (Make a common ban check/resolution function/class?) (Canceled 1/16/12, pushed to 2.4.4)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Known Bugs==&lt;br /&gt;
&lt;br /&gt;
[[Category:Development Plans]]&lt;/div&gt;</summary>
		<author><name>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_eGetPlayerSpawnPosEvent&amp;diff=8830</id>
		<title>Bz eGetPlayerSpawnPosEvent</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_eGetPlayerSpawnPosEvent&amp;diff=8830"/>
		<updated>2014-09-08T21:38:25Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: fix 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_eGetPlayerSpawnPosEvent&#039;&#039;&#039; is an API event that is called each time the server needs a new spawn position.&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&#039;&#039;&#039;bz_eGetPlayerSpawnPosEvent&#039;&#039;&#039; returns the &#039;&#039;&#039;bz_GetPlayerSpawnPosEventData_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_eGetPlayerSpawnPosEventData&lt;br /&gt;
  |-&lt;br /&gt;
  |playerID&lt;br /&gt;
  |int&lt;br /&gt;
  |ID of the player that is requesting the spawn position.&lt;br /&gt;
  |-&lt;br /&gt;
  |team&lt;br /&gt;
  |bz_eTeamType&lt;br /&gt;
  |The team the player is currently in.&lt;br /&gt;
  |-&lt;br /&gt;
  |handled&lt;br /&gt;
  |bool&lt;br /&gt;
  |The current state representing if other plug-ins have modified the spawn position. Plug-ins that modify the spawn position should set this value to true to inform other plug-ins that have not processed yet.&lt;br /&gt;
  |-&lt;br /&gt;
  |pos&lt;br /&gt;
  |float[3]&lt;br /&gt;
  |Position where the player will be spawned. This value is initialized to the server computed spawn position using the current spawn rules.&lt;br /&gt;
  |-&lt;br /&gt;
  |rot&lt;br /&gt;
  |float&lt;br /&gt;
  |The rotational direction that the player will be spawned at. This value is initialized to the server computed spawn rotation using the current spawn rules.&lt;br /&gt;
  |-&lt;br /&gt;
  |eventTime&lt;br /&gt;
  |double&lt;br /&gt;
  |The server time at which the event occurred (in seconds).&lt;br /&gt;
  |}&lt;br /&gt;
&lt;br /&gt;
==Uses==&lt;br /&gt;
This is a modification event, plug-ins may change the pos and rot fields to effect changes in the spawn position that is used for the player.&lt;/div&gt;</summary>
		<author><name>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Server_Permissions&amp;diff=8823</id>
		<title>Server Permissions</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Server_Permissions&amp;diff=8823"/>
		<updated>2014-08-03T06:16:53Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: Add new REPORT permission&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;                               With the number of followers he/she/it has, it looks like it might be a compromised Twitter account trying to run some bots against people who tweet back.... maybe? I don&#039;t know.&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;
|  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; to query or set lagwarn 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;
|  loadPlugin || Player may use &#039;&#039;&#039;&#039;&#039;/loadplugin&#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;
|  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;/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                                               &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;
|  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>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=BZFS_Command_Line_Options&amp;diff=8815</id>
		<title>BZFS Command Line Options</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=BZFS_Command_Line_Options&amp;diff=8815"/>
		<updated>2014-06-11T21:06:18Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: Add documentation for the -maxidle option&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;BZFS supports a number of command line options that let you set the various modes and parameters for the game. &lt;br /&gt;
&lt;br /&gt;
==Use==&lt;br /&gt;
Any command line option can be passed to BZFS in the command line, or placed in a text file (a [[server configuration files|server configuration file]]) passed in with the -conf parameter.&lt;br /&gt;
&lt;br /&gt;
==Server configuration files==&lt;br /&gt;
A server configuration file is simply a text file with a list of command line options, one per line. This file can be the parameter to the -conf command line option. BZFS will load all options in the config file as if they had been passed in as runtime options. Note that a config file may itself include the -conf option, allowing one config file to &amp;quot;include&amp;quot; another. This could be useful if a group of servers (hosted on the same machine) want to share common settings.&lt;br /&gt;
&lt;br /&gt;
It may be helpful to start with a [[Sample conf|Sample]] config file.&lt;br /&gt;
&lt;br /&gt;
==Standard Options==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-a&#039;&#039;&#039; &#039;&#039;linear angular&#039;&#039;&lt;br /&gt;
Sets the maximum linear and angular accelerations. The units are somewhat arbitrary so you&#039;ll have to experiment to find suitable values. Positive values will set limits to the acceleration and lower they are, greater is the inertia. Zero or negative values disable acceleration limits. &#039;&#039;&#039;-a 50 38&#039;&#039;&#039; is recommended for standard-speed servers.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-admsg&#039;&#039;&#039; &#039;&#039;message&#039;&#039;&lt;br /&gt;
Define a message which will be broadcast to all players every 15 minutes. This option can be used multiple times to define a multi-line message.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-adminlagannounce&#039;&#039;&#039; &#039;&#039;milliseconds&#039;&#039;&lt;br /&gt;
Announce players that lag more than &#039;&#039;milliseconds&#039;&#039; to admins.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-advertise&#039;&#039;&#039; &#039;&#039;groupname,groupname,...&#039;&#039;&lt;br /&gt;
Allows control of who can see this server on the server list. Use -advertise NONE to make a private server (no one will see the server, but global logins can be used). The default, if -advertise is not specified, is to allow everyone to see the server. Otherwise, your server will only be listed to members of the groups which you specify with -advertise.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-autoTeam&#039;&#039;&#039;&lt;br /&gt;
Instructs the server to automatically assign joining players to the team that needs more players, overriding user preference. For specifics on operation, see [[Auto Team]].&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-b&#039;&#039;&#039;&lt;br /&gt;
When  -c  is  supplied, this option randomly rotates the buildings.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-badwords&#039;&#039;&#039; &#039;&#039;badwordfile&#039;&#039;&lt;br /&gt;
Specify a file that contains bad words that will be used when either  -filterCallsigns  or -filterChat is enabled.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-ban&#039;&#039;&#039; &#039;&#039;ip{,ip}*&#039;&#039; &lt;br /&gt;
Prohibits connections from the listed IP addresses. Trailing 255 bytes are treated as mask bytes.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-banfile&#039;&#039;&#039; &#039;&#039;filename&#039;&#039;&lt;br /&gt;
Specifies the name of a file where bzfs will store the banlist. It will load the banlist from this file when it starts (if the file exists), and write the banlist back to the file when someone gets banned or unbanned. If this option isn&#039;t given the banlist will not be saved.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-banTime&#039;&#039;&#039;&lt;br /&gt;
Default number of minutes player should be banned (unspecified, the default is 300).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-c&#039;&#039;&#039;&lt;br /&gt;
Enables the capture-the-flag style game. By default this allocates one team flag per team. This can be modified see &#039;&#039;&#039;+f&#039;&#039;&#039; &#039;&#039;team&#039;&#039;. By default, the free-for-all style is used.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-cache&#039;&#039;&#039; &#039;&#039;worldCacheURL&#039;&#039;&lt;br /&gt;
Specifies the URL for the world cache file. This is a binary file that clients will attempt to download before getting the world from the bzfs server.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-cacheout&#039;&#039;&#039; &#039;&#039;filename&#039;&#039;&lt;br /&gt;
Save the currently specified world into a binary cache file and exit.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-conf&#039;&#039;&#039; &#039;&#039;configfilename&#039;&#039;&lt;br /&gt;
Specifies the name of a configuration file to be used to set all of the bzfs options, rather than setting them on the command line.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-cr&#039;&#039;&#039;&lt;br /&gt;
Enables the capture-the-flag style game with random map. You can optionally specify a building density by providing a number (default is 5). One team flag per team is provided, but more can be added through &#039;&#039;&#039;+f&#039;&#039;&#039; &#039;&#039;team&#039;&#039;. By default, the free-for-all style is used.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-d&#039;&#039;&#039;&lt;br /&gt;
Increase debugging level. If more &#039;&#039;&#039;-d&#039;&#039;&#039; is given, more debugging info is obtained.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-density&#039;&#039;&#039; &#039;&#039;num&#039;&#039;&lt;br /&gt;
Specify density for buildings, i.e. the higher the integer number, the more buildings you will get. This applies to automatically generated maps only.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-disableBots&#039;&#039;&#039;&lt;br /&gt;
Prevent clients from using the ROGER autopilot or from using robots.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;+f&#039;&#039;&#039; &#039;&#039;{good|bad|teamflag-id}[{count}]&#039;&#039;&lt;br /&gt;
Forces the existence of the given flag. If specified multiple times for the same flag-id, then that many flags will appear. The good argument is equivalent to specifying &#039;&#039;&#039;+f&#039;&#039;&#039; once for each kind of good flag. Same goes for the bad argument. The teamflag-id must match one of the predefined [[FlagCode|Flag Codes]].&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-f&#039;&#039;&#039; &#039;&#039;{flag-id}&#039;&#039;&lt;br /&gt;
Restricts a certain flag from existing.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-fb&#039;&#039;&#039;&lt;br /&gt;
Allow flags on box buildings.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-filterCallsigns&#039;&#039;&#039;&lt;br /&gt;
Turn on the filtering of callsigns and email addresses. Callsigns and addresses are compared against bad words provided via &#039;&#039;&#039;-badwords&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-filterChat&#039;&#039;&#039;&lt;br /&gt;
Turn on the filtering of chat messages. Messages that contain words listed via a &#039;&#039;&#039;-badwords&#039;&#039;&#039; file are replaced with !@#$%^&amp;amp;* characters.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-filterSimple&#039;&#039;&#039;&lt;br /&gt;
By default, all filtering is aggressive, matching much more than what is strictly listed in a &#039;&#039;&#039;-badwords&#039;&#039;&#039; file for convenience. Providing this option will make the &#039;&#039;&#039;-filterCallsigns&#039;&#039;&#039; and &#039;&#039;&#039;-filterChat&#039;&#039;&#039; comparisons exact match only.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-g&#039;&#039;&#039;&lt;br /&gt;
Quit after serving one game.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-groupdb&#039;&#039;&#039; &#039;&#039;file&#039;&#039;&lt;br /&gt;
Load groups from file&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-h&#039;&#039;&#039;&lt;br /&gt;
Buildings are given varying heights if the map is random. Has no effect on map files.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-handicap&#039;&#039;&#039;&lt;br /&gt;
Players are given a handicap advantage based on their ability in relation to the other players. Handicapped players will have faster tanks and shots. The handicap is determined by the player&#039;s score in relation to other players.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-help&#039;&#039;&#039;&lt;br /&gt;
Shows a help page and lists all the valid flag id&#039;s.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-helpmsg&#039;&#039;&#039; &#039;&#039;file name&#039;&#039;&lt;br /&gt;
Create a help message accessible by /help name, which prints the contents of file. Restricted to 10 lines per help message.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-i&#039;&#039;&#039; &#039;&#039;interface&#039;&#039;&lt;br /&gt;
Server will listen for and respond to &#039;&#039;pings&#039;&#039; (sent via broadcast) on the given interface. Clients use this to find active servers on the network. This is the TCP/UDP/IP address the server will listen on.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-j&#039;&#039;&#039;&lt;br /&gt;
Allows jumping.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-jitterdrop&#039;&#039;&#039; &#039;&#039;warn-count&#039;&#039;&lt;br /&gt;
Kicks players after &#039;&#039;warn-count&#039;&#039; jitter warnings.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-jitterwarn&#039;&#039;&#039; &#039;&#039;time/ms&#039;&#039;&lt;br /&gt;
Send warnings to players that jitter more than &#039;&#039;time&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-lagannounce&#039;&#039;&#039; &#039;&#039;milliseconds&#039;&#039;&lt;br /&gt;
Announce players that lag more than &#039;&#039;milliseconds&#039;&#039; in public.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-lagdrop&#039;&#039;&#039; &#039;&#039;warn-count&#039;&#039;&lt;br /&gt;
Kicks players after &#039;&#039;warn-count&#039;&#039; lag warnings.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-lagwarn&#039;&#039;&#039; &#039;&#039;time/ms&#039;&#039;&lt;br /&gt;
Send warnings to players that lag more than &#039;&#039;time&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-loadplugin&#039;&#039;&#039; &#039;&#039;/filename&#039;&#039;&lt;br /&gt;
Load plugin. See more at [[Plug-ins|Plugins]]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-masterBanURL&#039;&#039;&#039; &#039;&#039;URL&#039;&#039;&lt;br /&gt;
Specify  alternate  URLs  for the master ban file to be pulled from.  This argument may be provided multiple times.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-maxidle&#039;&#039;&#039; &#039;&#039;seconds&#039;&#039;&lt;br /&gt;
Kick players that did not play longer than &#039;&#039;second&#039;&#039;s. Pausing players are not kicked. If a player uttered a word recently, he will be kicked after thrice the given time.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-mp&#039;&#039;&#039; &#039;&#039;total | rogue,red,green,blue,purple,observer&#039;&#039;&lt;br /&gt;
Sets the maximum number of players, total or per team.A single value sets the total number of players allowed. Five comma separated values set the maximum for each team. If a count is left blank then no limit is set for that team, except for the limit on the total number of players. Both forms may be provided.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-mps&#039;&#039;&#039; &#039;&#039;max-score&#039;&#039;&lt;br /&gt;
Sets a maximum score for individual players. The first player to reach this score is declared the winner and the game is over.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-ms &#039;&#039;shots&#039;&#039;&lt;br /&gt;
Allows up to shots simultaneous shots for each player. This is 1 by default.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-mts&#039;&#039;&#039; &#039;&#039;max-score&#039;&#039;&lt;br /&gt;
Sets a maximum score for teams. The first team to reach this score is declared the winner and the game is over.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-noMasterBanlist&#039;&#039;&#039;&lt;br /&gt;
Server will not attempt to load the [[Master Ban]] list from the internet.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-noTeamKills&#039;&#039;&#039;&lt;br /&gt;
Players on the same team are immune to each other&#039;s shots. Rogue is excepted. &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-offa&#039;&#039;&#039;&lt;br /&gt;
Enables the Open-Free-for-All style game. This is a teamless mode, similar to the classic deathmatch in other games.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-p&#039;&#039;&#039; &#039;&#039;port&#039;&#039;&lt;br /&gt;
Listen for game connections on port instead of the default port.Use &#039;&#039;&#039;-help&#039;&#039;&#039; to print the default port, or use &#039;&#039;&#039;-d&#039;&#039;&#039; debug printing.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-packetlossdrop&#039;&#039;&#039; &#039;&#039;warn-count&#039;&#039;&lt;br /&gt;
Kicks players after &#039;&#039;warn-count&#039;&#039; packetloss warnings.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-packetlosswarn&#039;&#039;&#039; &#039;&#039;percent&#039;&#039;&lt;br /&gt;
Send warnings to players that lag more than &#039;&#039;percent&#039;&#039; packetloss.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-passdb&#039;&#039;&#039; &#039;&#039;file&#039;&#039;&lt;br /&gt;
Load passwords from file&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-passwd&#039;&#039;&#039; &#039;&#039;password&#039;&#039;&lt;br /&gt;
Specify a server administrator password for use in remote administration such as /kick, /ban, /mute, etc messages.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-pidfile&#039;&#039;&#039; &#039;&#039;filename&#039;&#039;&lt;br /&gt;
Specify a file where the server will write its process ID so it may be used for remote administration.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-poll&#039;&#039;&#039; &#039;&#039;variable=value&#039;&#039;&lt;br /&gt;
Configure several aspects of the in-game polling system.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-printscore&#039;&#039;&#039; &#039;&#039;variable=value&#039;&#039;&lt;br /&gt;
Write score to stdout whenever it changes&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-publictitle&#039;&#039;&#039; (-public in 2.0.x and earlier)&lt;br /&gt;
Causes the server to register itself with a list server, which clients can query to get a list of bzfs servers. By default, a server will respond to broadcast queries, allowing clients to find servers running on the standard port on the local subnet.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-publicaddr&#039;&#039;&#039; &#039;&#039;address[:port]&#039;&#039;&lt;br /&gt;
Advertise this server with the given address and port. Only has an effect when used with &#039;&#039;&#039;-public&#039;&#039;&#039;. Normally a server advertises itself at the local address and port. Some servers are not accessible from the internet at this address (for example servers behind a firewall using Network Address Translation). Use this option to specify the address and/or port that internet users should use to access this server.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-publiclist&#039;&#039;&#039; &#039;&#039;url&#039;&#039;&lt;br /&gt;
Advertise this server on the list servers listed at url. Only has an effect when used with &#039;&#039;&#039;-public&#039;&#039;&#039;. A built-in url is used by default. The BZFlag clients use the same built-in url so, by default, clients will see public servers automatically. This argument may be provided multiple times to publicize a server to multiple list servers.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-publickey&#039;&#039;&#039; &#039;&#039;key&#039;&#039;&lt;br /&gt;
Advertise this server on the public list server using the specified identification key. Required in Version 2.4 and later..&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-q&#039;&#039;&#039;&lt;br /&gt;
If specified, the server will not listen for nor respond to ``pings&#039;&#039;. BZFlag sends out these pings to give the user a list of available servers.This effectively makes the server private, especially if the &#039;&#039;&#039;-p&#039;&#039;&#039; option is also used.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;+r&#039;&#039;&#039;&lt;br /&gt;
Makes most shots ricochet. Super bullets, shock waves, and guided missiles do not.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-rabbit&#039;&#039;&#039; &#039;&#039;[score|killer|random]&#039;&#039;&lt;br /&gt;
Enables the rabbit-hunt style game. By default, the free-for-all style is used. You must specify the algorithm used to pick a new rabbit when the old one dies. The score algorithm uses a modified wins/(wins+losses) score and picks the top scoring player to be the new rabbit. The killer algorithm specifies a reverse tag game where whomever kills the rabbit becomes the new rabbit. The random algorithm randomly picks a new rabbit without regard to score. (The score algorithm is the original behavior.)&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-recbuf&#039;&#039;&#039; &#039;&#039;size&#039;&#039;&lt;br /&gt;
Start with the recording buffer active, with the specified size (in megabytes).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-recbufonly&#039;&#039;&#039;&lt;br /&gt;
Disable recording straight to files&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-recdir&#039;&#039;&#039; &#039;&#039;directory&#039;&#039;&lt;br /&gt;
Specify the directory for record and replay files.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-replay&#039;&#039;&#039;&lt;br /&gt;
Start the server in replay mode.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-reportfile&#039;&#039;&#039; &#039;&#039;filename&#039;&#039;&lt;br /&gt;
Enable the /report command and log all reports to &#039;&#039;filename&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-reportpipe&#039;&#039;&#039; &#039;&#039;command&#039;&#039;&lt;br /&gt;
Enable the /report command and execute &#039;&#039;command&#039;&#039; when a report is filed. This can be used together with, or instead of the &#039;&#039;&#039;-reportfile&#039;&#039;&#039; option.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-requireudp&#039;&#039;&#039;&lt;br /&gt;
Require clients to use parallel UDP. If players fire before opening a UDP channel, kick them off the server.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;+s&#039;&#039;&#039; &#039;&#039;num-flags&#039;&#039;&lt;br /&gt;
The server will have an extra num-flags random super flags available at all times. The &#039;&#039;&#039;-f&#039;&#039;&#039; option can be used to restrict which types of flags will be added. Required flags given by the &#039;&#039;&#039;+f&#039;&#039;&#039; option are not included in the num-flags total.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-s&#039;&#039;&#039; &#039;&#039;num-flags&#039;&#039;&lt;br /&gt;
The server will have up to num-flags random super flags available at any time.The &#039;&#039;&#039;-f&#039;&#039;&#039; option can be used to restrict which types of flags will be added. Required flags given by the &#039;&#039;&#039;+f&#039;&#039;&#039; option are not included in the &#039;&#039;num-flags&#039;&#039; total.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-sa&#039;&#039;&#039;&lt;br /&gt;
Antidote flags are provided for players with bad flags.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-sb&#039;&#039;&#039;&lt;br /&gt;
Allow spawns on box buildings.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-set&#039;&#039;&#039; &#039;&#039;name value&#039;&#039;&lt;br /&gt;
Set BZDB variable name to value&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-sl&#039;&#039;&#039; &#039;&#039;id num&#039;&#039;&lt;br /&gt;
Restrict flag id to num shots.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-spamtime&#039;&#039;&#039; &#039;&#039;time&#039;&#039; &lt;br /&gt;
Minimum &#039;&#039;time&#039;&#039; between player chat messages that are alike.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-spamwarn&#039;&#039;&#039; &#039;&#039;warnLimit&#039;&#039;&lt;br /&gt;
Number of warnings a player/spammer gets, who violates &#039;&#039;&#039;-spamtime&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-speedtol&#039;&#039;&#039; &#039;&#039;factor&#039;&#039;&lt;br /&gt;
Override the default speed auto kick factor. The factor should not be less then 1.0. The factor is a multiplier.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-srvmsg&#039;&#039;&#039; &#039;&#039;message&#039;&#039;&lt;br /&gt;
Define a server welcome message. This option can be used multiple times to define a multiline message.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-st&#039;&#039;&#039; &#039;&#039;time&#039;&#039;&lt;br /&gt;
Bad flags are automatically dropped after time seconds.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-sw&#039;&#039;&#039; &#039;&#039;count&#039;&#039;&lt;br /&gt;
Bad flags are automatically dropped after count wins. Capturing a team flag does not count as a win.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-synclocation&#039;&#039;&#039;&lt;br /&gt;
Forces all clients to use the same sun and stars location.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-synctime&#039;&#039;&#039;&lt;br /&gt;
Forces all clients to use the same time of day. The current time is determined by the server&#039;s clock. This disables the + and - keys on the clients.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-t&#039;&#039;&#039;&lt;br /&gt;
Adds teleporters to random maps. Has no effect on map files.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-time&#039;&#039;&#039;&lt;br /&gt;
Starts a countdown immediately when the server starts.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-timemanual&#039;&#039;&#039; &lt;br /&gt;
The countdown has to be started manually using the /countdown command. This is useful for matches.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-tk&#039;&#039;&#039;&lt;br /&gt;
Changes the default behavior where a player dies when he kills a teammate. When using this option, he will just get a -1 score penalty for the kill but not be killed in game.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-tkannounce&#039;&#039;&#039;&lt;br /&gt;
Announces team kills to the admin channel&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-tkkr&#039;&#039;&#039; &#039;&#039;percent&#039;&#039;&lt;br /&gt;
Kicks players whose team killing to normal kill ratio is greater than percent [1-100]. A start up grace period is given to players.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-ts&#039;&#039;&#039; &#039;&#039;[micros]&#039;&#039;&lt;br /&gt;
Include timestamp information in DEBUG output useful for logging. If micros is specified, microseconds will be added to the timestamp.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-userdb&#039;&#039;&#039; &#039;&#039;file&#039;&#039;&lt;br /&gt;
Load group associations from file&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-utc&#039;&#039;&#039;&lt;br /&gt;
Log timestamps in UTC (Coordinated Universal Time)&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-vars&#039;&#039;&#039; &#039;&#039;file&#039;&#039;&lt;br /&gt;
Loads values for game configurable variables from file. Entries are one per line in the form: set variable value. For a list of variables that are configurable, in the BZFlag client, send a message with /set as the text.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-version&#039;&#039;&#039;&lt;br /&gt;
Prints the version number of the executable.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-vetoTime&#039;&#039;&#039;&lt;br /&gt;
Max seconds authorized user has to abort poll(default is 20).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-votePercentage&#039;&#039;&#039;&lt;br /&gt;
Percentage of players required to affirm a poll (unspecified, the default is 50.1%).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-voteRepeatTime&#039;&#039;&#039;&lt;br /&gt;
Minimum seconds required before a player may repeat a vote. &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-world&#039;&#039;&#039; &#039;&#039;world-file&#039;&#039;&lt;br /&gt;
Reads a specific BZFlag .bzw world file in [[BZW]] format as the game map.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-worldsize&#039;&#039;&#039; &#039;&#039;world-size&#039;&#039;&lt;br /&gt;
Changes the size for random maps&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[[BZW|BZW world format]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Server]]&lt;/div&gt;</summary>
		<author><name>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Command_Line_Options&amp;diff=8814</id>
		<title>Command Line Options</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Command_Line_Options&amp;diff=8814"/>
		<updated>2014-06-10T21:44:26Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: Redirected page to BZFS Command Line Options&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT[[BZFS Command Line Options]]&lt;/div&gt;</summary>
		<author><name>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=MapChange_Server&amp;diff=8701</id>
		<title>MapChange Server</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=MapChange_Server&amp;diff=8701"/>
		<updated>2013-07-16T14:21:37Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: This is mapchange, not shockwaveDeath&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mapchange is a standard [[Plug-ins|plug-in]] that is shipped with the [[BZFlag Source]] code. It allows a server to run more than one map per running Process.&lt;br /&gt;
&lt;br /&gt;
Mapchange is not included in any BZFlag package by default. You must download the source from the forums: [http://my.bzflag.org/bb/download/file.php?id=5651 Mapchange.zip]&lt;br /&gt;
More help can be found on the forums here [http://my.bzflag.org/bb/viewtopic.php?t=9903 Mapchange]&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
Creates an extra &amp;quot;.conf&amp;quot; which allows you to call *in game* any other configuration file with the commands:&lt;br /&gt;
/maplist&lt;br /&gt;
/mapchange&lt;br /&gt;
/maprandom&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
Mapchange was created by Gnurdux&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Plug-Ins]]&lt;/div&gt;</summary>
		<author><name>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=User:Alezakos&amp;diff=8697</id>
		<title>User:Alezakos</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=User:Alezakos&amp;diff=8697"/>
		<updated>2013-06-25T21:33:07Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: Do not capitalise the first letter of my name&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:User:alezakos}}&lt;br /&gt;
You might be able to find me under the username alezakos or kongr45gpen on IRC.&lt;/div&gt;</summary>
		<author><name>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_setShotMismatch&amp;diff=8696</id>
		<title>Bz setShotMismatch</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_setShotMismatch&amp;diff=8696"/>
		<updated>2013-06-25T19:23:57Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: Created page with &amp;quot;{{apicall | name        = bz_setShotMismatch | description = Enable or disable the check for a shot mismatch | param1      = value | param1type  = bool | param1desc  = True to...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name        = bz_setShotMismatch&lt;br /&gt;
| description = Enable or disable the check for a shot mismatch&lt;br /&gt;
| param1      = value&lt;br /&gt;
| param1type  = bool&lt;br /&gt;
| param1desc  = True to kick players whose shots mismatch, false to do otherwise&lt;br /&gt;
| returntype  = void&lt;br /&gt;
| version     = 2.4.3 (r22821) or later&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Template:Apicall&amp;diff=8695</id>
		<title>Template:Apicall</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Template:Apicall&amp;diff=8695"/>
		<updated>2013-06-25T19:17:47Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: Do not capitalise the first letter of BZFS API Function pages&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:{{{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;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>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_getShotMismatch&amp;diff=8694</id>
		<title>Bz getShotMismatch</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_getShotMismatch&amp;diff=8694"/>
		<updated>2013-06-25T19:16:21Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: Created page with &amp;quot;{{apicall | name        = bz_getShotMismatch | description = Returns true if the server checks for shot mismatches | param1type  = void | returntype  = bool | returns     = Tr...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{apicall&lt;br /&gt;
| name        = bz_getShotMismatch&lt;br /&gt;
| description = Returns true if the server checks for shot mismatches&lt;br /&gt;
| param1type  = void&lt;br /&gt;
| returntype  = bool&lt;br /&gt;
| returns     = True if server kicks clients who are using wrong shot types, false if otherwise&lt;br /&gt;
| version     = 2.4.3 (r22821) or later&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8693</id>
		<title>Functions (API)</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8693"/>
		<updated>2013-06-25T19:13:57Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: /* Server Management */  Add 2 new API 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_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 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 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;
&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;
?&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 bool [[bz_getFlagPosition]] ( int flag, float* pos );&lt;br /&gt;
 BZF_API bool [[bz_moveFlag]] ( int flag, float pos[3] );&lt;br /&gt;
 BZF_API bool [[bz_RegisterCustomFlag]] ( const char* abbr, const char* name, const char* helpString, bz_eShotType shotType, bz_eFlagQuality quality );&lt;br /&gt;
&lt;br /&gt;
=== Shot Type Control ===&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_setPlayerShotType]] ( int playerId, [[bz_eShotType]] shotType );&lt;br /&gt;
&lt;br /&gt;
=== World Weapon Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_fireWorldWep]] ( const char* flagType, float lifetime, int fromPlayer, float *pos, float tilt, float direction, int shotID , float dt, 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 void [[bz_pauseCountdown]] ( const char *pausedBy );&lt;br /&gt;
 BZF_API void [[bz_resumeCountdown]] ( const char *resumedBy );&lt;br /&gt;
 BZF_API void [[bz_startCountdown]] ( int delay, float limit, const char *byWho );&lt;br /&gt;
&lt;br /&gt;
=== Custom Text Commands ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_registerCustomSlashCommand]] ( const char* command, [[bz_CustomSlashCommandHandler]] *handler );&lt;br /&gt;
 BZF_API bool [[bz_removeCustomSlashCommand]] ( const char* command );&lt;br /&gt;
&lt;br /&gt;
=== Plug-in Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API int [[bz_getLoadedPlugins]] ( [[bz_APIStringList]] * list );&lt;br /&gt;
 BZF_API bool [[bz_loadPlugin]] ( const char* path, const char* params );&lt;br /&gt;
 BZF_API bool [[bz_unloadPlugin]] ( const char* path );&lt;br /&gt;
 BZF_API const char* [[bz_pluginBinPath]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_registerCustomPluginHandler]] ( const char* extension, [[bz_APIPluginHandler]] * handler );&lt;br /&gt;
 BZF_API bool [[bz_removeCustomPluginHandler]] ( const char* extension, [[bz_APIPluginHandler]] * handler );&lt;br /&gt;
&lt;br /&gt;
=== Public Server Information ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_getPublic]] ( void );&lt;br /&gt;
 BZF_API [[bz_ApiString]] [[bz_getPublicAddr]] ( void );&lt;br /&gt;
 BZF_API [[bz_ApiString]] [[bz_getPublicDescription]] ( void );&lt;br /&gt;
 BZF_API int [[bz_getPublicPort]] ( void );&lt;br /&gt;
 BZF_API void [[bz_updateListServer]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== HTTP Transfer ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_addURLJob]] ( const char* URL, [[bz_BaseURLHandler]]* handler = NULL, const char* postData = NULL );&lt;br /&gt;
 BZF_API bool [[bz_removeURLJob]] ( const char* URL );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_stopAllURLJobs]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Callback Functions ===&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_registerCallBack]] ( const char* name, [[bz_GenericCallback]] *callback );&lt;br /&gt;
 BZF_API bool [[bz_registerCallBack]] ( const char* name, [[bz_GenericCallbackFunc]] callback );&lt;br /&gt;
 BZF_API bool [[bz_removeCallBack]] ( const char* name, [[bz_GenericCallback]] *callback );&lt;br /&gt;
 BZF_API bool [[bz_removeCallBack]] ( const char* name, [[bz_GenericCallbackFunc]] callback );&lt;br /&gt;
 BZF_API bool [[bz_callCallback]] ( const char* name, void *param );&lt;br /&gt;
 BZF_API bool [[bz_callbackExists]] ( const char* name );&lt;br /&gt;
&lt;br /&gt;
=== Inter-Plug-in Communications ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_clipFieldExists]] ( const char *name );&lt;br /&gt;
 BZF_API const char* [[bz_getclipFieldString]] ( const char *name );&lt;br /&gt;
 BZF_API float [[bz_getclipFieldFloat]] ( const char *name );&lt;br /&gt;
 BZF_API int [[bz_getclipFieldInt]] ( const char *name );&lt;br /&gt;
 BZF_API bool [[bz_setclipFieldString]] ( const char *name, const char* data );&lt;br /&gt;
 BZF_API bool [[bz_setclipFieldFloat]] ( const char *name, float data );&lt;br /&gt;
 BZF_API bool [[bz_setclipFieldInt]] ( const char *name, int data );&lt;br /&gt;
 BZF_API bool [[bz_addClipFieldNotifier]] ( const char *name, [[bz_ClipFiledNotifier *cb );&lt;br /&gt;
 BZF_API bool [[bz_removeClipFieldNotifier]] ( const char *name, [[bz_ClipFiledNotifier *cb );&lt;br /&gt;
&lt;br /&gt;
=== Game Recording ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_saveRecBuf]] ( const char * _filename, int seconds);&lt;br /&gt;
 BZF_API bool [[bz_startRecBuf]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_stopRecBuf]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Map Management ===&lt;br /&gt;
==== Map Information ====&lt;br /&gt;
?&lt;br /&gt;
 BZF_API void [[bz_getWorldSize]] ( float *size, float *wallHeight );&lt;br /&gt;
 BZF_API unsigned int [[bz_getWorldObjectCount]] ( void );&lt;br /&gt;
 BZF_API [[bz_APIWorldObjectList]]* [[bz_getWorldObjectList]] ( void );&lt;br /&gt;
 BZF_API void [[bz_releaseWorldObjectList]] ( [[bz_APIWorldObjectList]] *list );&lt;br /&gt;
 BZF_API unsigned int [[bz_findWorldObject]] ( const char *name );&lt;br /&gt;
 BZF_API [[bz_APIBaseWorldObject]]* [[bz_getWorldObjectByID]] ( unsigned int id );&lt;br /&gt;
 BZF_API bool [[bz_getTeleLinkIDs]] ( const char* teleName, int* frontLink, int* backLink );&lt;br /&gt;
 BZF_API const char* [[bz_getLinkTeleName]] ( int linkIndex );&lt;br /&gt;
 BZF_API int [[bz_getPhyDrvID]] ( const char* phyDrvName );&lt;br /&gt;
 BZF_API const char* [[bz_getPhyDrvName]] ( unsigned int phyDrvID );&lt;br /&gt;
 BZF_API bool [[bz_SetWorldObjectTangibility]] ( int id, const [[bz_SolidObjectPassableAtributes]] &amp;amp;atribs );&lt;br /&gt;
 BZF_API bool [[bz_GetWorldObjectTangibility]] ( int id, [[bz_SolidObjectPassableAtributes]] &amp;amp;atribs );&lt;br /&gt;
 BZF_API void [[bz_ResetWorldObjectTangibilities]] ( void );&lt;br /&gt;
&lt;br /&gt;
==== Map Collisions ====&lt;br /&gt;
?&lt;br /&gt;
 [[bz_eAPIColType]] [[bz_cylinderInMapObject]] ( float pos[3], float height, float radius, [[bz_APIBaseWorldObject]] **object );&lt;br /&gt;
 [[bz_eAPIColType]] [[bz_boxInMapObject]] ( float pos[3], float size[3], float angle, [[bz_APIBaseWorldObject]] **object );&lt;br /&gt;
&lt;br /&gt;
==== Custom Map Objects ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_registerCustomMapObject]] ( const char* object, [[bz_CustomMapObjectHandler]] *handler );&lt;br /&gt;
 BZF_API bool [[bz_removeCustomMapObject]] ( const char* object );&lt;br /&gt;
&lt;br /&gt;
=== Utility ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API const char *[[bz_MD5]] ( const char* str );&lt;br /&gt;
 BZF_API const char *[[bz_MD5]] ( const void* data, size_t size );&lt;br /&gt;
 BZF_API const char *[[bz_getServerVersion]] ( void );&lt;br /&gt;
 BZF_API const char *[[bz_getProtocolVersion]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Misc ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_getStandardSpawn]] ( int playerID, float pos[3], float *rot );&lt;br /&gt;
 BZF_API bool [[bz_killPlayer]] ( int playerID, bool spawnOnBase);&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>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8692</id>
		<title>Functions (API)</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8692"/>
		<updated>2013-06-25T19:12:59Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: /* Server Management */  Add 2 new API 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_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 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 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;
&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;
?&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 bool [[bz_getFlagPosition]] ( int flag, float* pos );&lt;br /&gt;
 BZF_API bool [[bz_moveFlag]] ( int flag, float pos[3] );&lt;br /&gt;
 BZF_API bool [[bz_RegisterCustomFlag]] ( const char* abbr, const char* name, const char* helpString, bz_eShotType shotType, bz_eFlagQuality quality );&lt;br /&gt;
&lt;br /&gt;
=== Shot Type Control ===&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_setPlayerShotType]] ( int playerId, [[bz_eShotType]] shotType );&lt;br /&gt;
&lt;br /&gt;
=== World Weapon Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_fireWorldWep]] ( const char* flagType, float lifetime, int fromPlayer, float *pos, float tilt, float direction, int shotID , float dt, 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 void [[bz_pauseCountdown]] ( const char *pausedBy );&lt;br /&gt;
 BZF_API void [[bz_resumeCountdown]] ( const char *resumedBy );&lt;br /&gt;
 BZF_API void [[bz_startCountdown]] ( int delay, float limit, const char *byWho );&lt;br /&gt;
&lt;br /&gt;
=== Custom Text Commands ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_registerCustomSlashCommand]] ( const char* command, [[bz_CustomSlashCommandHandler]] *handler );&lt;br /&gt;
 BZF_API bool [[bz_removeCustomSlashCommand]] ( const char* command );&lt;br /&gt;
&lt;br /&gt;
=== Plug-in Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API int [[bz_getLoadedPlugins]] ( [[bz_APIStringList]] * list );&lt;br /&gt;
 BZF_API bool [[bz_loadPlugin]] ( const char* path, const char* params );&lt;br /&gt;
 BZF_API bool [[bz_unloadPlugin]] ( const char* path );&lt;br /&gt;
 BZF_API const char* [[bz_pluginBinPath]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_registerCustomPluginHandler]] ( const char* extension, [[bz_APIPluginHandler]] * handler );&lt;br /&gt;
 BZF_API bool [[bz_removeCustomPluginHandler]] ( const char* extension, [[bz_APIPluginHandler]] * handler );&lt;br /&gt;
&lt;br /&gt;
=== Public Server Information ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_getPublic]] ( void );&lt;br /&gt;
 BZF_API [[bz_ApiString]] [[bz_getPublicAddr]] ( void );&lt;br /&gt;
 BZF_API [[bz_ApiString]] [[bz_getPublicDescription]] ( void );&lt;br /&gt;
 BZF_API int [[bz_getPublicPort]] ( void );&lt;br /&gt;
 BZF_API void [[bz_updateListServer]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== HTTP Transfer ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_addURLJob]] ( const char* URL, [[bz_BaseURLHandler]]* handler = NULL, const char* postData = NULL );&lt;br /&gt;
 BZF_API bool [[bz_removeURLJob]] ( const char* URL );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_stopAllURLJobs]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Callback Functions ===&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_registerCallBack]] ( const char* name, [[bz_GenericCallback]] *callback );&lt;br /&gt;
 BZF_API bool [[bz_registerCallBack]] ( const char* name, [[bz_GenericCallbackFunc]] callback );&lt;br /&gt;
 BZF_API bool [[bz_removeCallBack]] ( const char* name, [[bz_GenericCallback]] *callback );&lt;br /&gt;
 BZF_API bool [[bz_removeCallBack]] ( const char* name, [[bz_GenericCallbackFunc]] callback );&lt;br /&gt;
 BZF_API bool [[bz_callCallback]] ( const char* name, void *param );&lt;br /&gt;
 BZF_API bool [[bz_callbackExists]] ( const char* name );&lt;br /&gt;
&lt;br /&gt;
=== Inter-Plug-in Communications ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_clipFieldExists]] ( const char *name );&lt;br /&gt;
 BZF_API const char* [[bz_getclipFieldString]] ( const char *name );&lt;br /&gt;
 BZF_API float [[bz_getclipFieldFloat]] ( const char *name );&lt;br /&gt;
 BZF_API int [[bz_getclipFieldInt]] ( const char *name );&lt;br /&gt;
 BZF_API bool [[bz_setclipFieldString]] ( const char *name, const char* data );&lt;br /&gt;
 BZF_API bool [[bz_setclipFieldFloat]] ( const char *name, float data );&lt;br /&gt;
 BZF_API bool [[bz_setclipFieldInt]] ( const char *name, int data );&lt;br /&gt;
 BZF_API bool [[bz_addClipFieldNotifier]] ( const char *name, [[bz_ClipFiledNotifier *cb );&lt;br /&gt;
 BZF_API bool [[bz_removeClipFieldNotifier]] ( const char *name, [[bz_ClipFiledNotifier *cb );&lt;br /&gt;
&lt;br /&gt;
=== Game Recording ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_saveRecBuf]] ( const char * _filename, int seconds);&lt;br /&gt;
 BZF_API bool [[bz_startRecBuf]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_stopRecBuf]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Map Management ===&lt;br /&gt;
==== Map Information ====&lt;br /&gt;
?&lt;br /&gt;
 BZF_API void [[bz_getWorldSize]] ( float *size, float *wallHeight );&lt;br /&gt;
 BZF_API unsigned int [[bz_getWorldObjectCount]] ( void );&lt;br /&gt;
 BZF_API [[bz_APIWorldObjectList]]* [[bz_getWorldObjectList]] ( void );&lt;br /&gt;
 BZF_API void [[bz_releaseWorldObjectList]] ( [[bz_APIWorldObjectList]] *list );&lt;br /&gt;
 BZF_API unsigned int [[bz_findWorldObject]] ( const char *name );&lt;br /&gt;
 BZF_API [[bz_APIBaseWorldObject]]* [[bz_getWorldObjectByID]] ( unsigned int id );&lt;br /&gt;
 BZF_API bool [[bz_getTeleLinkIDs]] ( const char* teleName, int* frontLink, int* backLink );&lt;br /&gt;
 BZF_API const char* [[bz_getLinkTeleName]] ( int linkIndex );&lt;br /&gt;
 BZF_API int [[bz_getPhyDrvID]] ( const char* phyDrvName );&lt;br /&gt;
 BZF_API const char* [[bz_getPhyDrvName]] ( unsigned int phyDrvID );&lt;br /&gt;
 BZF_API bool [[bz_SetWorldObjectTangibility]] ( int id, const [[bz_SolidObjectPassableAtributes]] &amp;amp;atribs );&lt;br /&gt;
 BZF_API bool [[bz_GetWorldObjectTangibility]] ( int id, [[bz_SolidObjectPassableAtributes]] &amp;amp;atribs );&lt;br /&gt;
 BZF_API void [[bz_ResetWorldObjectTangibilities]] ( void );&lt;br /&gt;
&lt;br /&gt;
==== Map Collisions ====&lt;br /&gt;
?&lt;br /&gt;
 [[bz_eAPIColType]] [[bz_cylinderInMapObject]] ( float pos[3], float height, float radius, [[bz_APIBaseWorldObject]] **object );&lt;br /&gt;
 [[bz_eAPIColType]] [[bz_boxInMapObject]] ( float pos[3], float size[3], float angle, [[bz_APIBaseWorldObject]] **object );&lt;br /&gt;
&lt;br /&gt;
==== Custom Map Objects ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_registerCustomMapObject]] ( const char* object, [[bz_CustomMapObjectHandler]] *handler );&lt;br /&gt;
 BZF_API bool [[bz_removeCustomMapObject]] ( const char* object );&lt;br /&gt;
&lt;br /&gt;
=== Utility ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API const char *[[bz_MD5]] ( const char* str );&lt;br /&gt;
 BZF_API const char *[[bz_MD5]] ( const void* data, size_t size );&lt;br /&gt;
 BZF_API const char *[[bz_getServerVersion]] ( void );&lt;br /&gt;
 BZF_API const char *[[bz_getProtocolVersion]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Misc ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_getStandardSpawn]] ( int playerID, float pos[3], float *rot );&lt;br /&gt;
 BZF_API bool [[bz_killPlayer]] ( int playerID, bool spawnOnBase);&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>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=DevelopmentPlans/2.4.4&amp;diff=8691</id>
		<title>DevelopmentPlans/2.4.4</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=DevelopmentPlans/2.4.4&amp;diff=8691"/>
		<updated>2013-06-17T20:31:59Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: /* Feature Requests to Eval */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
2.4.4 will be the second maintenance release of the 2.4.x compatibility line. It may never happen but, here is what we didn&#039;t do in 2.4.2&lt;br /&gt;
==Tasks==&lt;br /&gt;
&lt;br /&gt;
===Bugs To Be Fixed===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Primary=====&lt;br /&gt;
* &amp;lt;strike&amp;gt;The bzadmin client in the 2.4.0 and 2.4.2 Windows installer was not built with PDCurses&amp;lt;/strike&amp;gt; (Fixed as of r22627)&lt;br /&gt;
* &amp;lt;strike&amp;gt;timeout does not work with multiple team flags https://sourceforge.net/tracker/?func=detail&amp;amp;aid=3368409&amp;amp;group_id=3248&amp;amp;atid=103248&amp;lt;/strike&amp;gt; (Fixed 26/01/12 DTR)&lt;br /&gt;
* &amp;lt;strike&amp;gt;line numbers in drawinfo errors https://sourceforge.net/tracker/?func=detail&amp;amp;aid=2139541&amp;amp;group_id=3248&amp;amp;atid=103248&amp;lt;/strike&amp;gt; (Fixed as of r22646)&lt;br /&gt;
* &amp;lt;strike&amp;gt;stats not tracking https://sourceforge.net/tracker/?func=detail&amp;amp;aid=1433676&amp;amp;group_id=3248&amp;amp;atid=103248&amp;lt;/strike&amp;gt; (Fixed as of r22668)&lt;br /&gt;
* time limiter and agility https://sourceforge.net/tracker/?func=detail&amp;amp;aid=3368408&amp;amp;group_id=3248&amp;amp;atid=103248&lt;br /&gt;
* z buffer issues https://sourceforge.net/tracker/?func=detail&amp;amp;aid=3368245&amp;amp;group_id=3248&amp;amp;atid=103248&lt;br /&gt;
* eval &amp;quot;configure should test and enable the fudged acosf atanf asinf&amp;quot; from old TODO.&lt;br /&gt;
&lt;br /&gt;
=====Secondary=====&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
* &amp;lt;strike&amp;gt;Graphic tank on radar at high zoom&amp;lt;/strike&amp;gt; (Fixed as of r22664)&lt;br /&gt;
* BZFScron (implement as backport from 2.99) (BTH)&lt;br /&gt;
* Push Stats ( finish backend )&lt;br /&gt;
* Joystick fixes (DTR?)&lt;br /&gt;
* CIDR/subnet bans from Filter.cxx (Make a common ban check/resolution function/class?)&lt;br /&gt;
&lt;br /&gt;
==Known Bugs==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Feature Requests to Eval==&lt;br /&gt;
* &amp;lt;strike&amp;gt;Pause the console https://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=3464640&amp;amp;group_id=3248&amp;amp;atid=353248&amp;lt;/strike&amp;gt; (Fixed as of r22811)&lt;br /&gt;
&lt;br /&gt;
[[Category:Development Plans]]&lt;/div&gt;</summary>
		<author><name>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Template:BZFS_API_Doc&amp;diff=8687</id>
		<title>Template:BZFS API Doc</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Template:BZFS_API_Doc&amp;diff=8687"/>
		<updated>2013-06-12T18:51:00Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: Do not capitalise the first letter of BZFS API Doc pages&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;&lt;br /&gt;
{|style=&amp;quot;width:100%;margin-top:+.7em;&amp;quot;&lt;br /&gt;
||&#039;&#039;&#039;BZFS API Documentation&#039;&#039;&#039; This page contains part of the [[BZFS API]] documentation for use by [[Plug-ins]] on the [[BZFS]] server.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;includeonly&amp;gt;[[Category:BZFS_API_Docs]]&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&amp;lt;br&amp;gt;Adding this template to a page will automatically add the page to the [[:Category:BZFS_API_Docs|Category:BZFS_API_Docs]] page. To use this template add &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;{{BZFS_API_Doc}}&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039; at the top of the page you are creating/editing.&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_getFlagName&amp;diff=8686</id>
		<title>Bz getFlagName</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_getFlagName&amp;diff=8686"/>
		<updated>2013-06-12T16:16:22Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: Use the proper function name&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{BZFS_API_Doc}}&lt;br /&gt;
{{BZFS_API_Funcs}}&lt;br /&gt;
==Prototype==&lt;br /&gt;
BZF_API const [[bz_ApiString]] bz_getFlagName( int flag );&lt;br /&gt;
==Parameters==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;20&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
  !name&lt;br /&gt;
  !type&lt;br /&gt;
  !value description&lt;br /&gt;
  |-&lt;br /&gt;
  |flag &lt;br /&gt;
  |int &lt;br /&gt;
  |the flag to return&lt;br /&gt;
  |}&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
This API function returns the flag code for the specified flag.&lt;/div&gt;</summary>
		<author><name>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=BZFlag_2.4.0&amp;diff=8684</id>
		<title>BZFlag 2.4.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=BZFlag_2.4.0&amp;diff=8684"/>
		<updated>2013-06-06T17:13:00Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: /* Upgrades */ fix typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;BZFlag version 2.4.0 &#039;&#039;&#039;&amp;quot;Wake the Dead&amp;quot;&#039;&#039;&#039;, is the current maintenance version of the BZFlag game for Windows, Apple OSX, and Linux. It was released on 07/03/2011 after a long period of development inactivity.&lt;br /&gt;
&lt;br /&gt;
This new version is incompatible with previous versions of the game. The primary goals of the release were to fix a number of bugs that required changes to the gaming protocol and clients as well as to get development moving again. It should be noted that this is the first version of BZFlag that had a development plan and release schedule.&lt;br /&gt;
&lt;br /&gt;
The version contains a number of new features.&lt;br /&gt;
&lt;br /&gt;
==Change Log==&lt;br /&gt;
Some of the major features include:&lt;br /&gt;
&lt;br /&gt;
*The ability to turn off teamkilling on the server&lt;br /&gt;
*The OpenFFA game mode which is a teamless FFA, meaning you can shoot anyone regardless of color&lt;br /&gt;
*Per-object ricochet, which lets map authors selectively enable ricochet for individual objects&lt;br /&gt;
*Removal of local authentication&lt;br /&gt;
*Ability for the server to force flags to be hidden on the radar&lt;br /&gt;
*Fog can not be turned off&lt;br /&gt;
*The screenshot code does not lag the client badly anymore&lt;br /&gt;
*The ID flag identification was moved to the server&lt;br /&gt;
*Public servers must have a -publickey&lt;br /&gt;
*Polls only count users that are able to vote&lt;br /&gt;
&lt;br /&gt;
The full changelog can be found at https://bzflag.svn.sourceforge.net/svnroot/bzflag/tags/v2_4_0/ChangeLog&lt;br /&gt;
&lt;br /&gt;
==Upgrades==&lt;br /&gt;
2.4 requires server owners to take note of a few upgrade steps in order to move from 2.0.x to 2.4.&lt;br /&gt;
&lt;br /&gt;
A general overview of the upgrade procedure can be found on the [[BZFS 2.4 Upgrade]] page.&lt;br /&gt;
&lt;br /&gt;
===API===&lt;br /&gt;
The [[BZFS API]] received a major overhaul in 2.4 and is incompatible with older plug-ins, upgrade information can be found on the [[BZFS API 2.4 Upgrade]] page.&lt;br /&gt;
&lt;br /&gt;
[[Category:Versions]]&lt;br /&gt;
[[Category:Releases]]&lt;/div&gt;</summary>
		<author><name>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=DevelopmentPlans/2.6.0&amp;diff=8683</id>
		<title>DevelopmentPlans/2.6.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=DevelopmentPlans/2.6.0&amp;diff=8683"/>
		<updated>2013-06-06T10:41:13Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: Add page to the Development Plans category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&lt;br /&gt;
2.6.0 will be a new breaking release that is not compatible with the 2.4.x line. A strong focus of this release should be improving the user experience and improving the flexibility of the user interface.&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
&lt;br /&gt;
This list covers the major goals of this release, and the features related to each goal.&lt;br /&gt;
&lt;br /&gt;
* Tutorial Mode (1.1.1, 1.1.2, 4.1, 4.2, 4.3, 5.1, 5.2, 5.3, 6.1, 6.2, 6.3, 7.1, 7.2)&lt;br /&gt;
* Easier polling system (1.1.2, 2.1, 2.2)&lt;br /&gt;
* Useful MOTD (1.1.1, 3.1, 3.2)&lt;br /&gt;
* Better localized messages (4.1, 4.2, 4.3, 5.1, 7.1)&lt;br /&gt;
* Additional mapping features (5.1, 5.2, 5.3)&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
# Add new UI elements&lt;br /&gt;
## [[DevelopmentPlans/Dialogs|Dialogs]]&lt;br /&gt;
### Modal dialogs are featured front and center, and require being dismissed by the user. They support hotkeys, server-specified buttons, or freeform menu items. Keyboard, mouse (including clicking items), and joystick interaction is supported.&lt;br /&gt;
### Unobtrusive dialogs show up as smaller semi-transparent boxes towards the edge of the screen and support only hotkeys (keyboard, mouse button, joystick button) for interaction. &lt;br /&gt;
# Revamp the poll system&lt;br /&gt;
## Add an actual message type to the protocol for the poll system (MsgPoll and MsgVote, perhaps, or just build it with generic dialog message types)&lt;br /&gt;
## Add an unobtrusive dialog for polls with support for both the old style /vote command and polling/dialog key bindings.&lt;br /&gt;
# Revamp the MOTD&lt;br /&gt;
## Update client MOTD code to send the client version and other system information (operating system and similar) to the server. The MOTD server would then use this information to send appropriate MOTD entries.&lt;br /&gt;
## Have the MOTD code detect when there is a new MOTD and pop up a modal dialog. Include a MOTD menu item for later access.&lt;br /&gt;
# Font system and language support&lt;br /&gt;
## New font system (FTGL or similar)&lt;br /&gt;
## Add the additional fonts and better translations from 2.99.x.&lt;br /&gt;
## Send the client locale to the server so that the server could localize messages sent to the client&lt;br /&gt;
# Map features&lt;br /&gt;
## Text object (from 2.99.x)&lt;br /&gt;
## BZDB controlled attributes&lt;br /&gt;
## Mesh bases/teleporters&lt;br /&gt;
## Better define/group support&lt;br /&gt;
### Links (with relative and absolute names)&lt;br /&gt;
### World weapons and entry zones (with transforms)&lt;br /&gt;
### Physics drivers (with transforms and copying)&lt;br /&gt;
### Texture matrices, dynamic colors, transforms, materials&lt;br /&gt;
# Server Side Players&lt;br /&gt;
## Server-side shot path tracking&lt;br /&gt;
## Shared client logic library used in both the client and server.&lt;br /&gt;
## Ability to spawn and control SSPs from a plugin.&lt;br /&gt;
# Other&lt;br /&gt;
## Add a per-player name/value pair system. This would be used for data like:&lt;br /&gt;
##* Motto&lt;br /&gt;
##* Locale&lt;br /&gt;
## Implement MsgAllow from 2.99.x (or should this be part of the per-player name/value pair system?)&lt;br /&gt;
## [[DevelopmentPlans/ShotIDCleanup|Shot ID cleanup]]&lt;br /&gt;
## Make client aware of shot limit so it can display count and can know when the flag is going to drop&lt;br /&gt;
## Allow switching teams without rejoining&lt;br /&gt;
## Rework the joining process&lt;br /&gt;
### Handle all ban checks (including DNS resolution and hostban checks) before allowing the player to pull the world or enter.&lt;br /&gt;
### Move team selection to after the join (start off in observer, and have a dialog)&lt;br /&gt;
## List server indication of game options that are per object or zone ( rico, jump, etc..)&lt;br /&gt;
## Generic server-controlled marker and hunt system.&lt;br /&gt;
## Use BZID for all saved user identifiers not names.&lt;br /&gt;
&lt;br /&gt;
[[Category:Development Plans]]&lt;/div&gt;</summary>
		<author><name>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Acceptable_Use_Policy&amp;diff=8678</id>
		<title>Acceptable Use Policy</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Acceptable_Use_Policy&amp;diff=8678"/>
		<updated>2013-05-14T14:26:45Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: CVS --&amp;gt; SVN&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The BZFlag project provides several resources, including:&lt;br /&gt;
* The #bzflag IRC channel.&lt;br /&gt;
* The BZFlag web page, including the wiki.&lt;br /&gt;
* The BZFlag online forums at http://my.bzflag.org/bb/&lt;br /&gt;
* The list server&lt;br /&gt;
* Sourceforge resources, including SVN, trackers, forums and mailing lists&lt;br /&gt;
&lt;br /&gt;
Access to these resources is granted purely at the discretion of the&lt;br /&gt;
developers and project administrators.  We&#039;re nice people, but since&lt;br /&gt;
we&#039;re working to foster a community, there are a few rules we have to&lt;br /&gt;
enforce in order to maintain it.  If you behave, the BZFlag community can&lt;br /&gt;
be a tremendously fun and friendly group to associate with.&lt;br /&gt;
&lt;br /&gt;
The BZFlag community is also exceptionally good at protecting themselves from                                                                    harmful users.  If you&#039;re acting up, we &#039;&#039;will&#039;&#039; get complaints.  Any behavior&lt;br /&gt;
seen as severely detrimental to the community will be dealt with.  We&#039;ll make&lt;br /&gt;
a reasonable effort to talk to you before taking any action.&lt;br /&gt;
&lt;br /&gt;
Things we won&#039;t tolerate:&lt;br /&gt;
* Derogatory statements with regard to race, color, creed, gender or other bigotry&lt;br /&gt;
* Extreme profanity&lt;br /&gt;
* Using bzflag resources as a personal political soapbox&lt;br /&gt;
* Threats of any kind against us or any member of the community&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
These resources are for the most part provided at our own expense with&lt;br /&gt;
our own money and time.  This means that we do not owe you &#039;&#039;anything.&#039;&#039;&lt;br /&gt;
The BZFlag community is very good at reporting to us when someone is&lt;br /&gt;
being a problem.  If we ask you to stop doing something, stop doing it.&lt;br /&gt;
If not, eventually you will be banned.  In extreme cases, we may exclude&lt;br /&gt;
you completely from the community.&lt;br /&gt;
&lt;br /&gt;
If you do manage to get yourself banned, you won&#039;t help your case by threatening&lt;br /&gt;
to sue or inflict bodily harm, throwing a tantrum or performing attacks such&lt;br /&gt;
as denial-of-service.  It&#039;s almost unheard of for someone to be banned for&lt;br /&gt;
a lifetime, and after a while, we&#039;ll give you another chance.  Threats will&lt;br /&gt;
only extend the length of your ban.&lt;br /&gt;
&lt;br /&gt;
We&#039;re reasonable people, but it takes only a couple abusive players to ruin&lt;br /&gt;
the game for everyone.  If you think we&#039;re being unreasonable about something,&lt;br /&gt;
you&#039;re free to argue your case, but we&#039;ve dealt with a lot of problems, so&lt;br /&gt;
it&#039;s unlikely you&#039;ll convince us.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This document is an attempt to clarify our position on use of the resources&lt;br /&gt;
provided by the BZFlag project.  It is not a binding legal document, nor is&lt;br /&gt;
it an exhaustive list of the things that can get you banned.  This document&lt;br /&gt;
may change without notice at any time.&lt;br /&gt;
&lt;br /&gt;
Game servers are run at the discretion of their respective operators, who&lt;br /&gt;
may or may not observe these policies.&lt;br /&gt;
&lt;br /&gt;
[[Category:Support]]&lt;/div&gt;</summary>
		<author><name>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Global_Registration&amp;diff=8651</id>
		<title>Global Registration</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Global_Registration&amp;diff=8651"/>
		<updated>2013-05-06T12:20:31Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: /* Third party sites */ Update link to the new SVN repo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&lt;br /&gt;
Global Registration is the link between the [[BZFlag Forums]] and the BZFlag [[List Server]]. This link allows players to use their forum users names as call signs in game, and receive a number of in game services tied to that account, such as;&lt;br /&gt;
&lt;br /&gt;
* exclusive use of the name on most servers&lt;br /&gt;
* the ability to remove or &amp;quot;ghost&amp;quot; unregistered users attempting to use your existing name.&lt;br /&gt;
* access to public groups that many servers use to grant in game permissions.&lt;br /&gt;
&lt;br /&gt;
==Registration and Account Management==&lt;br /&gt;
Currently registration and account management is handled by the [[BZFlag Forums]], but may be split off to a separate system at a later date. Users wishing to create a global account should visit the forums and create a new account. Each user account will require a unique e-mail address.&lt;br /&gt;
&lt;br /&gt;
=== Activation ===&lt;br /&gt;
After registration is complete, the user will receive a verification e-mail to ensure that all contact information is correct. The user must follow the instruction in the e-mail before the account will be made active and can be used.&lt;br /&gt;
&lt;br /&gt;
===Username and Password Changes===&lt;br /&gt;
The user can use the &amp;quot;profile&amp;quot; page on the fourms to modify any of the information about the account, including username and password. It his highly recomended that users keep their passwords secure. &lt;br /&gt;
&lt;br /&gt;
===Password Retrieval===&lt;br /&gt;
In the unfortunate event that a user forgets their password, they can use the &amp;quot;forgot password&amp;quot; link on the fourm login page to have the system e-mail them a new password.&lt;br /&gt;
&lt;br /&gt;
==Security==&lt;br /&gt;
Passwords are encrypted and stored only in the registration system&#039;s database, they are never sent out to game servers, or any other player. The list server uses a temporary token system when communicating with game servers to protect the user&#039;s private information.&lt;br /&gt;
&lt;br /&gt;
Weak passwords based on simple numeric strings (1234) or dictionary words (dog, god, mom ) are easily guessable and are not recommended. Users are responsible for keeping their own passwords secure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
By default, BZFlag saves your game settings when you exit the program. If you entered your password in the &amp;quot;Join Game&amp;quot; menu, it will be saved in plain text in the configuration file along with other settings. If you share this configuration file with anyone (for debugging, etc) they will have your password!&lt;br /&gt;
&lt;br /&gt;
==In Game services==&lt;br /&gt;
&lt;br /&gt;
===Usage===&lt;br /&gt;
To use your global account in game, a user must enter their forum username as the callsign, and enter their forum password into the appropriate fields in the &amp;quot;Join Game&amp;quot; menu in the game client.&lt;br /&gt;
&lt;br /&gt;
===Callsign Markers===&lt;br /&gt;
In-game, when a registered callsign has been authenticated, the callsign is prefixed with a &#039;+&#039; symbol as displayed on the user&#039;s screen. &lt;br /&gt;
&lt;br /&gt;
If a registered callsign is used, but failed authentication for any reason, it is displayed with a &#039;-&#039; symbol prefixed.&lt;br /&gt;
&lt;br /&gt;
The callsign of the game server&#039;s administrator ( with kick, ban and other powers ) is prefixed with a &#039;@&#039; symbol when they are logged into the game. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
  tankdriver1 : a player with an unregistered callsign&lt;br /&gt;
 +tankdriver2 : a player with a registered callsign that has been authenticated&lt;br /&gt;
 -tankdriver3 : a player with a registered callsign that has &#039;&#039;not&#039;&#039; been authenticated&lt;br /&gt;
 @tankdriver4 : a player who has administrative rights on the game server&lt;br /&gt;
&lt;br /&gt;
==Third party sites==&lt;br /&gt;
BZFlag provides a service to allow third party sites to use bzflag login info to authenticate users. This can be very useful and allows many sites the ability to do lots of cool things. When using one of these sites, it must send you first to the bzflag.org site to login. This prevents the website from being able to capture your password. A third party site should never ask a user for a global password directly. When entering in login information, users can check the address bar of the page they are using and check to see that it is my.bzflag.org. No other addresses will keep passwords secure.&lt;br /&gt;
In order to allow users to authenticate on your website using the official BZFlag service, you can utilize the [http://sourceforge.net/p/bzflag/code/HEAD/tree/trunk/bzflag/misc/checkToken.php checkToken.php] script.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[[List Server Usage Policy]]&lt;br /&gt;
&lt;br /&gt;
[[List Server]]&lt;br /&gt;
&lt;br /&gt;
[[BZFS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Public Services]]&lt;/div&gt;</summary>
		<author><name>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Bz_resetFlags&amp;diff=8622</id>
		<title>Bz resetFlags</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Bz_resetFlags&amp;diff=8622"/>
		<updated>2013-03-23T21:03:38Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: add the new keepTeamFlags parameter&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{BZFS_API_Doc}}&lt;br /&gt;
{{BZFS_API_Funcs}}&lt;br /&gt;
==Prototype==&lt;br /&gt;
BZF_API void bz_resetFlags ( bool onlyUnused, bool keepTeamFlags = false );&lt;br /&gt;
==Parameters==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;20&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
  !name&lt;br /&gt;
  !type&lt;br /&gt;
  !value description&lt;br /&gt;
  |-&lt;br /&gt;
  |onlyUnused &lt;br /&gt;
  |bool&lt;br /&gt;
  |only reset non-player flags&lt;br /&gt;
  |-&lt;br /&gt;
  |keepTeamFlags &lt;br /&gt;
  |bool&lt;br /&gt;
  |don&#039;t reset team flags (defaults to &#039;&#039;false&#039;&#039;)&lt;br /&gt;
  |}&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
This API function will force all flags to be reset and respawned. If the onlyUnused parameter is true, then flags carried by players will not be reset, otherwise all flags will be reset. If the keepTeamFlags parameter is true, then team flags will not be reset.&lt;/div&gt;</summary>
		<author><name>Alezakos</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8621</id>
		<title>Functions (API)</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Functions_(API)&amp;diff=8621"/>
		<updated>2013-03-23T21:01:09Z</updated>

		<summary type="html">&lt;p&gt;Alezakos: /* Flag Management */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DoDoc|&lt;br /&gt;
Fill in articles for all API Functions&amp;lt;br&amp;gt;&lt;br /&gt;
Finish updating to 2.3.x&amp;lt;br&amp;gt;&lt;br /&gt;
Verify future API functions.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{BZFS_API_Doc}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The BZFS API provides a number of functions to plug-ins for use in querying the current game state. Functions are used both to get information about the game, and to trigger in game actions, such as activating a world weapon.&lt;br /&gt;
&lt;br /&gt;
== Function Groups ==&lt;br /&gt;
Functions are broken into a series of groups based on the type of action or information they deal with.&lt;br /&gt;
&lt;br /&gt;
=== Event Registration ===&lt;br /&gt;
2.0.x&lt;br /&gt;
 BZF_API bool [[bz_registerEvent]] ( [[Event(API)|bz_eEventType]] eventType, [[Event(API)|bz_EventHandler]]* eventHandler );&lt;br /&gt;
 BZF_API bool [[bz_removeEvent]] ( [[Event(API)|bz_eEventType]] eventType, [[Event(API)|bz_EventHandler]]* eventHandler );&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[Register]] ( [[Event(API)|bz_eEventType]] eventType );&lt;br /&gt;
 virtual void Cleanup() {Flush();}&lt;br /&gt;
&lt;br /&gt;
=== Non-Player Connections ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_registerNonPlayerConnectionHandler]] ( int connectionID, [[bz_NonPlayerConnectionHandler]]* handler );&lt;br /&gt;
 BZF_API bool [[bz_removeNonPlayerConnectionHandler]] ( int connectionID, [[bz_NonPlayerConnectionHandler]]* handler );&lt;br /&gt;
 BZF_API bool [[bz_sendNonPlayerData]] ( int connectionID, const void *data, unsigned int size );&lt;br /&gt;
 BZF_API bool [[bz_disconectNonPlayerConnection]] ( int connectionID );&lt;br /&gt;
 BZF_API unsigned int [[bz_getNonPlayerConnectionOutboundPacketCount]] ( int connectionID );&lt;br /&gt;
 BZF_API const char* [[bz_getNonPlayerConnectionIP]] ( int connectionID );&lt;br /&gt;
 BZF_API const char* [[bz_getNonPlayerConnectionHost]] ( int connectionID );&lt;br /&gt;
&lt;br /&gt;
=== Player Information ===&lt;br /&gt;
==== Player Information ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_hasPerm]] ( int playerID, const char* perm );&lt;br /&gt;
 BZF_API bool [[bz_getAdmin]] ( int playerID );&lt;br /&gt;
 BZF_API bz_eTeamType [[bz_getPlayerTeam]] ( int playerID );&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerCallsign]] ( int playerID );&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerIPAddress]] ( int playerID );&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerFlag]] ( int playerID );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerReferrer]] ( int playerID );&lt;br /&gt;
 BZF_API const char* [[bz_getPlayerCustomData]] (int playerID, const char* key );&lt;br /&gt;
&lt;br /&gt;
==== Player State Information ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_isPlayerPaused]] ( int playerID );&lt;br /&gt;
 BZF_API bool [[bz_canPlayerSpawn]]( int playerID );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerCurrentState]] ( int playerID, bz_PlayerUpdateState &amp;amp;state );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_getPlayerPosition]] ( int playerID, float pos[3], bool extrapolate );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerRotation]] ( int playerID, float *rot, bool extrapolate );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerVelocity]] ( int playerID, float vel[3] );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerAngVel]] ( int playerID, float *angvel );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerPhysicsDriver]] ( int playerID, int* phydrv );&lt;br /&gt;
&lt;br /&gt;
==== Player Lists and Records ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByIndex]] ( int index );&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByCallsign]] ( const char* name );&lt;br /&gt;
 BZF_API [[bz_BasePlayerRecord]] *[[bz_getPlayerByBZID]] ( int BZID );&lt;br /&gt;
 BZF_API bool [[bz_updatePlayerData]] ( [[bz_BasePlayerRecord]] *playerRecord );&lt;br /&gt;
 BZF_API bool [[bz_freePlayerRecord]] ( [[bz_BasePlayerRecord]] *playerRecord );&lt;br /&gt;
&lt;br /&gt;
 BZF_API [[bz_APIIntList]] *[[bz_newIntList]] ( void );&lt;br /&gt;
 BZF_API [[bz_APIIntList]] *[[bz_getPlayerIndexList]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_getPlayerIndexList]] ( [[bz_APIIntList]] *playerList );&lt;br /&gt;
 BZF_API void [[bz_deleteIntList]] ( [[bz_APIIntList]] *l);&lt;br /&gt;
&lt;br /&gt;
==== Player Management ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_grantPerm]] ( int playerID, const char* perm );&lt;br /&gt;
 BZF_API bool [[bz_revokePerm]] ( int playerID, const char* perm );&lt;br /&gt;
 BZF_API bool [[bz_validAdminPassword]] ( const char* passwd );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerOperator]] ( int playerId );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_setPlayerSpawnable]]( int playerID, bool spawn );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerLimboMessage]]( int playerID, const char* text );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerCustomData]] (int playerID, const char* key, const char* data );&lt;br /&gt;
&lt;br /&gt;
=== Team Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API unsigned int [[bz_getTeamPlayerLimit]] ( bz_eTeamType team );&lt;br /&gt;
 BZF_API int [[bz_getTeamCount]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API int [[bz_getTeamScore]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API int [[bz_getTeamWins]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API int [[bz_getTeamLosses]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API void [[bz_setTeamWins]] ([[bz_eTeamType]] team, int wins );&lt;br /&gt;
 BZF_API void [[bz_setTeamLosses]] ([[bz_eTeamType]] team, int losses );&lt;br /&gt;
 BZF_API void [[bz_resetTeamScore]] ([[bz_eTeamType]] team );&lt;br /&gt;
 BZF_API void [[bz_resetTeamScores]] ( void );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API void [[bz_changeTeam]]( int player, [[bz_eTeamType]] team );&lt;br /&gt;
&lt;br /&gt;
=== Score Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_setPlayerWins]] ( int playerId, int wins );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerLosses]] ( int playerId, int losses );&lt;br /&gt;
 BZF_API bool [[bz_setPlayerTKs]] ( int playerId, int tks );&lt;br /&gt;
 BZF_API bool [[bz_resetPlayerScore]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPlayerWins]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPlayerLosses]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPlayerTKs]] ( int playerId );&lt;br /&gt;
 BZF_API float [[bz_getPlayerRank]] ( int playerId );&lt;br /&gt;
&lt;br /&gt;
=== Latency Information ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API int [[bz_getPlayerLag]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getPlayerJitter]] ( int playerId );&lt;br /&gt;
 BZF_API float [[bz_getPlayerPacketloss]] ( int playerId );&lt;br /&gt;
 BZF_API int [[bz_getIdleTime]] ( 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;
?&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 bool [[bz_getFlagPosition]] ( int flag, float* pos );&lt;br /&gt;
 BZF_API bool [[bz_moveFlag]] ( int flag, float pos[3] );&lt;br /&gt;
 BZF_API bool [[bz_RegisterCustomFlag]] ( const char* abbr, const char* name, const char* helpString, bz_eShotType shotType, bz_eFlagQuality quality );&lt;br /&gt;
&lt;br /&gt;
=== Shot Type Control ===&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_setPlayerShotType]] ( int playerId, [[bz_eShotType]] shotType );&lt;br /&gt;
&lt;br /&gt;
=== World Weapon Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_fireWorldWep]] ( const char* flagType, float lifetime, int fromPlayer, float *pos, float tilt, float direction, int shotID , float dt, 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 void [[bz_pauseCountdown]] ( const char *pausedBy );&lt;br /&gt;
 BZF_API void [[bz_resumeCountdown]] ( const char *resumedBy );&lt;br /&gt;
 BZF_API void [[bz_startCountdown]] ( int delay, float limit, const char *byWho );&lt;br /&gt;
&lt;br /&gt;
=== Custom Text Commands ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_registerCustomSlashCommand]] ( const char* command, [[bz_CustomSlashCommandHandler]] *handler );&lt;br /&gt;
 BZF_API bool [[bz_removeCustomSlashCommand]] ( const char* command );&lt;br /&gt;
&lt;br /&gt;
=== Plug-in Management ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API int [[bz_getLoadedPlugins]] ( [[bz_APIStringList]] * list );&lt;br /&gt;
 BZF_API bool [[bz_loadPlugin]] ( const char* path, const char* params );&lt;br /&gt;
 BZF_API bool [[bz_unloadPlugin]] ( const char* path );&lt;br /&gt;
 BZF_API const char* [[bz_pluginBinPath]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_registerCustomPluginHandler]] ( const char* extension, [[bz_APIPluginHandler]] * handler );&lt;br /&gt;
 BZF_API bool [[bz_removeCustomPluginHandler]] ( const char* extension, [[bz_APIPluginHandler]] * handler );&lt;br /&gt;
&lt;br /&gt;
=== Public Server Information ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_getPublic]] ( void );&lt;br /&gt;
 BZF_API [[bz_ApiString]] [[bz_getPublicAddr]] ( void );&lt;br /&gt;
 BZF_API [[bz_ApiString]] [[bz_getPublicDescription]] ( void );&lt;br /&gt;
 BZF_API int [[bz_getPublicPort]] ( void );&lt;br /&gt;
 BZF_API void [[bz_updateListServer]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== HTTP Transfer ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_addURLJob]] ( const char* URL, [[bz_BaseURLHandler]]* handler = NULL, const char* postData = NULL );&lt;br /&gt;
 BZF_API bool [[bz_removeURLJob]] ( const char* URL );&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_stopAllURLJobs]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Callback Functions ===&lt;br /&gt;
?&lt;br /&gt;
 BZF_API bool [[bz_registerCallBack]] ( const char* name, [[bz_GenericCallback]] *callback );&lt;br /&gt;
 BZF_API bool [[bz_registerCallBack]] ( const char* name, [[bz_GenericCallbackFunc]] callback );&lt;br /&gt;
 BZF_API bool [[bz_removeCallBack]] ( const char* name, [[bz_GenericCallback]] *callback );&lt;br /&gt;
 BZF_API bool [[bz_removeCallBack]] ( const char* name, [[bz_GenericCallbackFunc]] callback );&lt;br /&gt;
 BZF_API bool [[bz_callCallback]] ( const char* name, void *param );&lt;br /&gt;
 BZF_API bool [[bz_callbackExists]] ( const char* name );&lt;br /&gt;
&lt;br /&gt;
=== Inter-Plug-in Communications ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_clipFieldExists]] ( const char *name );&lt;br /&gt;
 BZF_API const char* [[bz_getclipFieldString]] ( const char *name );&lt;br /&gt;
 BZF_API float [[bz_getclipFieldFloat]] ( const char *name );&lt;br /&gt;
 BZF_API int [[bz_getclipFieldInt]] ( const char *name );&lt;br /&gt;
 BZF_API bool [[bz_setclipFieldString]] ( const char *name, const char* data );&lt;br /&gt;
 BZF_API bool [[bz_setclipFieldFloat]] ( const char *name, float data );&lt;br /&gt;
 BZF_API bool [[bz_setclipFieldInt]] ( const char *name, int data );&lt;br /&gt;
 BZF_API bool [[bz_addClipFieldNotifier]] ( const char *name, [[bz_ClipFiledNotifier *cb );&lt;br /&gt;
 BZF_API bool [[bz_removeClipFieldNotifier]] ( const char *name, [[bz_ClipFiledNotifier *cb );&lt;br /&gt;
&lt;br /&gt;
=== Game Recording ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_saveRecBuf]] ( const char * _filename, int seconds);&lt;br /&gt;
 BZF_API bool [[bz_startRecBuf]] ( void );&lt;br /&gt;
 BZF_API bool [[bz_stopRecBuf]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Map Management ===&lt;br /&gt;
==== Map Information ====&lt;br /&gt;
?&lt;br /&gt;
 BZF_API void [[bz_getWorldSize]] ( float *size, float *wallHeight );&lt;br /&gt;
 BZF_API unsigned int [[bz_getWorldObjectCount]] ( void );&lt;br /&gt;
 BZF_API [[bz_APIWorldObjectList]]* [[bz_getWorldObjectList]] ( void );&lt;br /&gt;
 BZF_API void [[bz_releaseWorldObjectList]] ( [[bz_APIWorldObjectList]] *list );&lt;br /&gt;
 BZF_API unsigned int [[bz_findWorldObject]] ( const char *name );&lt;br /&gt;
 BZF_API [[bz_APIBaseWorldObject]]* [[bz_getWorldObjectByID]] ( unsigned int id );&lt;br /&gt;
 BZF_API bool [[bz_getTeleLinkIDs]] ( const char* teleName, int* frontLink, int* backLink );&lt;br /&gt;
 BZF_API const char* [[bz_getLinkTeleName]] ( int linkIndex );&lt;br /&gt;
 BZF_API int [[bz_getPhyDrvID]] ( const char* phyDrvName );&lt;br /&gt;
 BZF_API const char* [[bz_getPhyDrvName]] ( unsigned int phyDrvID );&lt;br /&gt;
 BZF_API bool [[bz_SetWorldObjectTangibility]] ( int id, const [[bz_SolidObjectPassableAtributes]] &amp;amp;atribs );&lt;br /&gt;
 BZF_API bool [[bz_GetWorldObjectTangibility]] ( int id, [[bz_SolidObjectPassableAtributes]] &amp;amp;atribs );&lt;br /&gt;
 BZF_API void [[bz_ResetWorldObjectTangibilities]] ( void );&lt;br /&gt;
&lt;br /&gt;
==== Map Collisions ====&lt;br /&gt;
?&lt;br /&gt;
 [[bz_eAPIColType]] [[bz_cylinderInMapObject]] ( float pos[3], float height, float radius, [[bz_APIBaseWorldObject]] **object );&lt;br /&gt;
 [[bz_eAPIColType]] [[bz_boxInMapObject]] ( float pos[3], float size[3], float angle, [[bz_APIBaseWorldObject]] **object );&lt;br /&gt;
&lt;br /&gt;
==== Custom Map Objects ====&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_registerCustomMapObject]] ( const char* object, [[bz_CustomMapObjectHandler]] *handler );&lt;br /&gt;
 BZF_API bool [[bz_removeCustomMapObject]] ( const char* object );&lt;br /&gt;
&lt;br /&gt;
=== Utility ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API const char *[[bz_MD5]] ( const char* str );&lt;br /&gt;
 BZF_API const char *[[bz_MD5]] ( const void* data, size_t size );&lt;br /&gt;
 BZF_API const char *[[bz_getServerVersion]] ( void );&lt;br /&gt;
 BZF_API const char *[[bz_getProtocolVersion]] ( void );&lt;br /&gt;
&lt;br /&gt;
=== Misc ===&lt;br /&gt;
2.3+&lt;br /&gt;
 BZF_API bool [[bz_getStandardSpawn]] ( int playerID, float pos[3], float *rot );&lt;br /&gt;
 BZF_API bool [[bz_killPlayer]] ( int playerID, bool spawnOnBase);&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>Alezakos</name></author>
	</entry>
</feed>