<?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=Loymdayddaud</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=Loymdayddaud"/>
	<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/Special:Contributions/Loymdayddaud"/>
	<updated>2026-05-19T12:23:02Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=2.0_Releases&amp;diff=10067</id>
		<title>2.0 Releases</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=2.0_Releases&amp;diff=10067"/>
		<updated>2025-12-01T12:06:28Z</updated>

		<summary type="html">&lt;p&gt;Loymdayddaud: fix 2.0.2 using 2.0.4 as the name in one place&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The 2.0.x series had 8 releases total.&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
| {{Hl3}} |&#039;&#039;&#039;Release Version:&#039;&#039;&#039; &lt;br /&gt;
| {{Hl3}} |&#039;&#039;&#039;Release Date:&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|  [[BZFlag 2.0.0]]    || 01/17/2005&lt;br /&gt;
|-&lt;br /&gt;
|  [[BZFlag 2.0.2]]    || 03/18/2005&lt;br /&gt;
|-&lt;br /&gt;
|  [[BZFlag 2.0.4]]    || 09/30/2005&lt;br /&gt;
|-&lt;br /&gt;
|  [[BZFlag 2.0.6]]    || 04/09/2006&lt;br /&gt;
|-&lt;br /&gt;
|  [[BZFlag 2.0.8]]    || 05/13/2006&lt;br /&gt;
|-&lt;br /&gt;
|  [[BZFlag 2.0.10]]   || 11/17/2007&lt;br /&gt;
|-&lt;br /&gt;
|  [[BZFlag 2.0.12]]   || 06/25/2008&lt;br /&gt;
|-&lt;br /&gt;
|  [[BZFlag 2.0.14]]   || 02/15/2010&lt;br /&gt;
|-&lt;br /&gt;
|  [[BZFlag 2.0.16]]   || 04/01/2010&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
One  of the notable features, was the introduction of the server side API for plugins in 2.0.4 and versions above.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==2.0.0==&lt;br /&gt;
BZFlag version 2.0.0 is a version of the BZFlag game that was released on 2005-01-17 under the title &amp;quot;Falcor&#039;s Despair&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
v2.0.0 was a major version upgrade for the project and included a number of new features, including new [[BZFlag Graphics System|graphics engine]] and [[BZW|map]] features.&lt;br /&gt;
&lt;br /&gt;
v2.0.0 had a large list of features and was the first released version to allow for arbitrary world geometry via [[Mesh]] objects.&lt;br /&gt;
&lt;br /&gt;
* Added a .desktop file - David Trowbridge&lt;br /&gt;
* Tool for converting obj to bzw - Jeff Myers&lt;br /&gt;
* Addition of converted ProFont font - Andrew Keyser&lt;br /&gt;
* Added a file syntax section to bzw.5 - Fred Cods&lt;br /&gt;
* Added a bzw.5 manpage to document world file format - Sean Morrison&lt;br /&gt;
* Added /quit command - Angelina Carlton&lt;br /&gt;
* Display player addr on join to admins - Sean Morrison&lt;br /&gt;
* Make -debug a public client option - Frank Thilo&lt;br /&gt;
* Communicate autopilot state, display in scoreboard - Frank Thilo&lt;br /&gt;
* Observer counts and match times added to game queries - David Vuorio&lt;br /&gt;
* Central authentication - Tim Riker&lt;br /&gt;
* Avoid transfer flag cheat - Alfredo Tupone&lt;br /&gt;
* Cheat client flag obfuscation and hiding - Alfredo Tupone&lt;br /&gt;
* Added strong authentication via Kerberos - Alfredo Tupone&lt;br /&gt;
* BZFlag renders frames and accepts commands during joining - Alfredo Tupone&lt;br /&gt;
* Lag is computed only after entering game - Alfredo Tupone&lt;br /&gt;
* CTF world used for FFA make bases into boxes - Alfredo Tupone&lt;br /&gt;
* Allow elevated bases even without -fb - Alfredo Tupone&lt;br /&gt;
* Added optional duration option to /countdown - Sean Morrison&lt;br /&gt;
* Added shot mismatch cheat auto-kicking - Julio Jimenez&lt;br /&gt;
* Improved double-jump response - Anonymous&lt;br /&gt;
* Added physics drivers - Anonymous&lt;br /&gt;
* Unlimited altimeter height - Steve Krenzel&lt;br /&gt;
* Added /uptime command to print elapsed running time - Angelina Carlton&lt;br /&gt;
* Countdown command now shows players 10 sec countdown - Angelina Carlton&lt;br /&gt;
* Added a flapping sound for the wings flag - Sean Morrison&lt;br /&gt;
* Adding ability to load world from url (http, ftp, file) - Alfredo Tupone&lt;br /&gt;
* Reduce network load by buffering UDP packet (no delay) - Alfredo Tupone&lt;br /&gt;
* Allow server to control lat and long (-synclocation) - Daniel Remenak&lt;br /&gt;
* Added tank spawn expansion effect - Anonymous&lt;br /&gt;
* Added tank squishiness - Anonymous, Dave Brosius&lt;br /&gt;
* Added animated effects for T, N, TH, O, and CL flags - Anonymous&lt;br /&gt;
* BZAdmin now tells more specific reasons why it could not connect - Ian Agar&lt;br /&gt;
* MOTD from the master server - Jeff Myers, Daniel Remenak, Frank Thilo&lt;br /&gt;
* Add generic URL retrieval class - Jeff Myers, Alfredo Tupone&lt;br /&gt;
* Windows Multimedia and DirectInput joystick support - Daniel Remenak&lt;br /&gt;
* bzfs can now announce to multiple public list servers - Sean Morrison&lt;br /&gt;
* Global public server bans - Jeff M., Alfredo T., Daniel R., Sean M., Bryan J.&lt;br /&gt;
* Linux event device joystick and force feedback support - Micah Dowty&lt;br /&gt;
* Inform banned users of reason, originator, and source on login - Jeff Myers&lt;br /&gt;
* Added the SHORTBAN bzfs privilege - Anonymous, Daniel Leeds&lt;br /&gt;
* Added /date and /time to request server date and time - Ian Agar&lt;br /&gt;
* Added arc, cone, and sphere map objects - Anonymous&lt;br /&gt;
* Added user specified dynamic colors - Anonymous&lt;br /&gt;
* Added user specified texture matrices - Anonymous&lt;br /&gt;
* Improved BSP splitting algorithm - Anonymous&lt;br /&gt;
* Added /part command for disconnecting from server - Angelina Carlton&lt;br /&gt;
* Show status while trying to connect &amp;amp; download world - Daniel Remenak&lt;br /&gt;
* Update old configs to avoid broken keybindings - Daniel Remenak&lt;br /&gt;
* Config files are stored per-version, using older when needed - Jeff Myers&lt;br /&gt;
* Faster tank and shot collision detection using an octree - Anonymous&lt;br /&gt;
* Better linewrapping for control panel - Daniel Remenak&lt;br /&gt;
* Configurable font size for control panel and scoreboard - Daniel Remenak&lt;br /&gt;
* Textures are now reloaded on a mode change for optimal quality - Jeff Myers&lt;br /&gt;
* Automatic team joins changed to encourage team-play - Alfredo Tupone&lt;br /&gt;
* Fixed dropping flag while jumping from high places - Alfredo Tupone&lt;br /&gt;
* Lag stats are now sorted by lag value - Alfredo Tupone&lt;br /&gt;
* OpenGL context reloading bug fixed on SDL - Alfredo Tupone&lt;br /&gt;
* Roaming switch between player is now consistent - Alfredo Tupone&lt;br /&gt;
* Compensating jitter in Dead reckoning - Alfredo Tupone&lt;br /&gt;
* Ping packet loss are like high lag for warn/kick - Alfredo Tupone&lt;br /&gt;
* ColorBlindness now disable hunt flashing on radar - Alfredo Tupone&lt;br /&gt;
* SDL is made default platform, static and shared linkage - Alfredo Tupone&lt;br /&gt;
* Fixed bug where players get stuck on flipped pyramids - Alfredo Tupone&lt;br /&gt;
* Compressed map data going over the network and into caches - Anonymous&lt;br /&gt;
* Options to disable certain /poll&#039;s entirely on a server - Simon Richard Grint&lt;br /&gt;
* Lighting menu option now has &amp;quot;None / Fast / Best&amp;quot; - Anonymous&lt;br /&gt;
* Dev-C++ project files - Ian Agar, Daniel Remenak, Jeff Myers&lt;br /&gt;
* Shot accuracy statistics dialog - Daniel Remenak&lt;br /&gt;
* Faster zbuffer graphics using octree and dynamic occluders - Anonymous&lt;br /&gt;
* Faster startup times by making the SceneDatabase on the fly - Anonymous&lt;br /&gt;
* Autocompletion for commands &amp;amp; callsigns (ala bzadmin) - Ian Agar, Frank Thilo&lt;br /&gt;
* /clientquery can now be requested on single individuals - Ian Agar&lt;br /&gt;
* Added support for irc-like /me actions and /msg messages - Sean Morrison&lt;br /&gt;
* Seer flag now can see Invisible Bullets - Anonymous&lt;br /&gt;
* Added admin message sounds - Cameron Mandrake, Sean Morrison&lt;br /&gt;
* Better shot reflections for non-square pyramids - Anonymous&lt;br /&gt;
* Fixed collision detection impalement problem - Anonymous&lt;br /&gt;
* anti perm for pollkick, pollban, kick, ban, deregister - Sean Morrison&lt;br /&gt;
* antipoll bzfs anti perm to protect against poll kick/bans - Andrew Heyn&lt;br /&gt;
* Server Start Menu now selects Rabbit Chase styles - Ian Agar&lt;br /&gt;
* Tabbed Message Panel - Scott Wichser, Sean Morrison, Alfredo Tupone&lt;br /&gt;
* Fonts settable via BZDB - Daniel Remenak&lt;br /&gt;
* New font management system and fonts - Daniel Remenak, Jeff Myers&lt;br /&gt;
* Reduce network utilization (tolerance) - Alfredo Tupone, Sean Morrison&lt;br /&gt;
* WorldWeapons and EntryZones are saved client-side - Anonymous&lt;br /&gt;
* Improved client map saves using map &#039;options&#039; - Anonymous&lt;br /&gt;
* Autopilot is now capable of playing CTF - Ian Agar&lt;br /&gt;
* bzadmin can now send and receive team and admin messages - Lars Luthman&lt;br /&gt;
* Added waterLevel (water-like feature for maps) - Anonymous&lt;br /&gt;
* Added _noShadows (to disable shadows on a server) - Anonymous&lt;br /&gt;
* bzadmin&#039;s curses menu will now update automagically - Lars Luthman&lt;br /&gt;
* Added message filter editor for bzadmin using menu or cmds - Lars Luthman&lt;br /&gt;
* Added team flag safety zones - Anonymous&lt;br /&gt;
* Added MsgScoreOver and MsgTimeUpdate to BZAdmin - Ian Agar&lt;br /&gt;
* Have BZAdmin allow whitespace in callsign and host - Ian Agar&lt;br /&gt;
* Prevent message flooding/spamming - Ian Agar&lt;br /&gt;
* Consolidated polling system bzfs options (-poll) - Ian Agar, Sean Morrison&lt;br /&gt;
* Improved server pause cheat detection and reporting - Ian Agar, Sean Morrison&lt;br /&gt;
* Changed the way Roaming keys drives the Observer - Alfredo Tupone&lt;br /&gt;
* Fixing cross-correlation between driving keys - Alfredo Tupone&lt;br /&gt;
* Added configuration of driving keys - Alfredo Tupone&lt;br /&gt;
* Server is now valgrind-happy - Alfredo Tupone, Daniel Remenak, Sean Morrison&lt;br /&gt;
* Limit quick rejoins - Anonymous&lt;br /&gt;
* Added &#039;options&#039; section to world maps - Anonymous&lt;br /&gt;
* Added the &#039;-set &amp;lt;name&amp;gt; &amp;lt;value&amp;gt;&#039; option to bzfs - Anonymous&lt;br /&gt;
* Throw away bad or early links in world files - Tim Riker&lt;br /&gt;
* Added Record/Replay feature - Anonymous&lt;br /&gt;
* Added Random teleporter destinations - Anonymous&lt;br /&gt;
* Poll to reset flags and Poll-cheating prevention - Ian Agar&lt;br /&gt;
* Flag and Tank Entry Zones - Dave Brosius&lt;br /&gt;
* Spawn improvements - Dave Brosius, Daniel Remenak&lt;br /&gt;
* Added MAC&#039;s Agility (aka Dodge) flag - Sean Morrison&lt;br /&gt;
* QuickTurn flag symbol changed from A to QT - Sean Morrison&lt;br /&gt;
* Added MAC&#039;s handicap game style - Sean Morrison&lt;br /&gt;
* Added ReverseControls bad flag - Sean Morrison&lt;br /&gt;
* Added Wings good flag - Dave Brosius&lt;br /&gt;
* Added BZDB variables to allow for more realistic friction - Nils McCarthy&lt;br /&gt;
* Added ForwardOnly and ReverseOnly bad flags - Sean Morrison&lt;br /&gt;
* No Jumping and Trigger Happy flags - Nils McCarthy&lt;br /&gt;
* server option to disallow autopilot - Nils McCarthy&lt;br /&gt;
* SDL interface to audio/video/input - Tupone Alfredo&lt;br /&gt;
* /clientquery (was CLIENTQUERY) moved to server - Daniel Remenak&lt;br /&gt;
* &amp;quot;Leave Game&amp;quot; menu item to leave a game without quitting - Daniel Remenak&lt;br /&gt;
* Allow user to force input device to that of their choosing - Daniel Remenak&lt;br /&gt;
* Tanks can drive over bumps - Dave Brosius&lt;br /&gt;
* Remove Building scene nodes laying on the ground (or lower) - Dave Brosius&lt;br /&gt;
* Rip out ref counted texture system, TM controls this now - Dave Brosius&lt;br /&gt;
* Added Admin Message Queue - Michael Hoffmane - Frank Evers&lt;br /&gt;
&lt;br /&gt;
==2.0.2==&lt;br /&gt;
BZFlag version 2.0.2 is a version of the BZFlag game that was released on 2005-03-18 under the title &amp;quot;Queen of Maybe&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
v2.0.2 was a maintenance release of the 2.0.x code base that provided a large number of features compatible with all 2.0.x clients.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Added TALK, MUTE, UNMUTE permissions - Angelina Carlton&lt;br /&gt;
* Added /mute, /unmute commands - Angelina Carlton&lt;br /&gt;
* Automatic team try to fix bad player behaviour - Alfredo Tupone&lt;br /&gt;
* bzadmin does not require opengl headers - Alfredo Tupone&lt;br /&gt;
* bzfs handle both -mp specification - Alfredo Tupone&lt;br /&gt;
* bzfs correctly handles ban time - Alfredo Tupone, Julio Jimenez&lt;br /&gt;
* bzfs no more put jittered players as Not Responding - Alfredo Tupone&lt;br /&gt;
* bzfs stop shot from dead player - Alfredo Tupone&lt;br /&gt;
* Roaming switching between player goes even on Dead Player - Alfredo Tupone&lt;br /&gt;
* Fixed bzfs crash associated to &amp;quot;Error adding player&amp;quot; - Alfredo Tupone&lt;br /&gt;
* bzflag count a single -1 score for a tk (like server does) - Alfredo Tupone&lt;br /&gt;
* Fixes on hostban handling - Alfredo Tupone&lt;br /&gt;
* Fixed force feedback on Windows - Scott Wichser&lt;br /&gt;
* New Kick/Ban options using slot numbers (rendered in client) - Julio Jimenez&lt;br /&gt;
* Added EndShot cheat detection - Julio Jimenez&lt;br /&gt;
* Avoid spawning on top of tanks with SR or BU -  Daniel Remenak&lt;br /&gt;
* Add fine-grained permissions control of polling - Daniel Remenak&lt;br /&gt;
* Fixed loading of colormapped PNGs - Daniel Remenak&lt;br /&gt;
* Add SPAWN permission, remove -requireidentify - Steve Krenzel, Tim Riker&lt;br /&gt;
* A /say command for server messages - Julio Jimenez, Frank Evers&lt;br /&gt;
* Rejoin permission for avoiding _rejoinTime limit - Frank Evers, Julio Jimenez&lt;br /&gt;
* A player will auto ghost if they use global authentication - Steve Krenzel&lt;br /&gt;
* Server announces who started a countdown - Angelina Carlton&lt;br /&gt;
* Fixed server start menu for windows - Daniel Remenak&lt;br /&gt;
* Message spam checking bug fixed - Alfredo Tupone&lt;br /&gt;
* Fixed no flag on building - Alfredo Tupone&lt;br /&gt;
* Fixed MsgQueryPlayer eventually sending AddPlayer to all - Alfredo Tupone&lt;br /&gt;
* Removing kicking player for missing packet - Alfredo Tupone&lt;br /&gt;
* Player is unpaused when coming alive - Alfredo Tupone&lt;br /&gt;
* Observer of winner not updating the flag fixed - Alfredo Tupone&lt;br /&gt;
* Fixed 2 flag per team selecting ctf on world &amp;amp; CommandLine - Alfredo Tupone&lt;br /&gt;
* Fixed lag warning counted twice - Alfredo Tupone&lt;br /&gt;
* Allow user to select which physical joystick axes to use - Daniel Remenak&lt;br /&gt;
* Fix a number of server crash bugs - Daniel Remenak&lt;br /&gt;
* ctf make restarting on base even when dead - Anonymous&lt;br /&gt;
* Fixed weirdness on Console Panel when disabling chat display - Alfredo Tupone&lt;br /&gt;
* Fixed a segfault with SDL and no audio - Alfredo Tupone&lt;br /&gt;
* bzadmin wipes argv to hide possible password - Tim Riker&lt;br /&gt;
* Lagstats and Playerlist no longer filtered - Steve Krenzel&lt;br /&gt;
* print errors in red - Frank Thilo&lt;br /&gt;
* simple scroll indicator for control panel - Frank Thilo&lt;br /&gt;
* antiban perm actually counters a server ban now - Steve Krenzel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==2.0.4==&lt;br /&gt;
&lt;br /&gt;
BZFlag version 2.0.4 is a version of the BZFlag game that was released on 2005-09-30 under the title &amp;quot;Shiny&amp;quot;. &lt;br /&gt;
v2.0.4 was a maintenance release of the 2.0.x code base that provided a large number of features compatible with all 2.0.x clients.&lt;br /&gt;
&lt;br /&gt;
v2.0.4 had a large list of features and was the first released version to include support for server side [[Plug-ins]].&lt;br /&gt;
&lt;br /&gt;
* Fixed server join bug when cached worlds disappear - Sean Morrison&lt;br /&gt;
* Prevent phantom zoned players from pausing - Sean Morrison&lt;br /&gt;
* Implemented multiple player hunt - Mark Thomas&lt;br /&gt;
* Directional keys pressing works, even in joy/mouse mode - Tupone Alfredo&lt;br /&gt;
* Jitter compensation removed. Too bad behaviour on ME players - Tupone Alfredo&lt;br /&gt;
* Put spawn params in BZDB to let server owners mod them as needed - Jeff Myers&lt;br /&gt;
* Fixed ban admin bug - Julio Jimenez&lt;br /&gt;
* Added /sendhelp command - Mike Weisenborn, Mark Thomas&lt;br /&gt;
* /ban /hostban take time keywords (short ...) too - Jeff Myers, Alfredo Tupone&lt;br /&gt;
* Inertia style indicatio no more used - Alfredo Tupone&lt;br /&gt;
* No more restriction on M (Momentum) flag - Alfredo Tupone&lt;br /&gt;
* Fixing authentication when changing callsign/password - Alfredo Tupone&lt;br /&gt;
* Fixing authentication when joining from command-line - Alfredo Tupone&lt;br /&gt;
* Executing abbreviated server command &#039;*&#039; terminated - Alfredo Tupone&lt;br /&gt;
* Getting one-line-help on server command &#039;?&#039; terminated - Alfredo Tupone&lt;br /&gt;
* Fixing bzflag use of system-wide regex (--without-regex) - Alfredo Tupone&lt;br /&gt;
* Adding destination info to chat message log - Alfredo Tupone&lt;br /&gt;
* Adding syntax check to duration parameter of ban cmds - Alfredo Tupone&lt;br /&gt;
* Hud outlines go transparent with the hud panel - Jeff Myers, Daniel Mulford&lt;br /&gt;
* Better progress info when downloading textures - Garrett Padera, Jeff Myers&lt;br /&gt;
* Add Quake3 BSP import to modeltool - Jeff Myers&lt;br /&gt;
* Exit BZFS if -g is used with -mts or -mps -  Joshua Rogers&lt;br /&gt;
* Experimental server colorizing in server list - Frank Thilo&lt;br /&gt;
* Added sort options to &amp;quot;/replay list&amp;quot; and &amp;quot;/record list&amp;quot; - Mark Thomas&lt;br /&gt;
* Map mismatch fixed - Alfredo Tupone&lt;br /&gt;
* Quick server command key works better - Alfredo Tupone&lt;br /&gt;
* Default server side plugins added to windows build - Jeff Myers&lt;br /&gt;
* Include web token verification script - Garrett Padera&lt;br /&gt;
* Fix texture cache on windows. - Jeff Myers&lt;br /&gt;
* Disallow + or @ as first char of callsign (bzfs) - Mark Thomas&lt;br /&gt;
* Wait for reverse DNS and authentication to enter game - Alfredo Tupone&lt;br /&gt;
* Antiban works even on IP number - Alfredo Tupone&lt;br /&gt;
* Sort lagstat to have non-observer at the bottom - Thomas Stauer&lt;br /&gt;
* Authentication credential are requested asap - Alfredo Tupone&lt;br /&gt;
* Allow the use of game device sliders as axes on Windows - Daniel Remenak&lt;br /&gt;
* Directional force feedback support - Daniel Remenak&lt;br /&gt;
* New icon and menu arrow - Harry Keller, Jeff Myers&lt;br /&gt;
* Special effects for many events - Jeff Myers, Daniel Remenak&lt;br /&gt;
* Server-side plugin API and plugins - Jeff Myers&lt;br /&gt;
* Join menu displays team icon - Daniel Remenak, Harry Keller&lt;br /&gt;
* Implemented &amp;quot;-advertise&amp;quot; option for bzfs - Mark Thomas&lt;br /&gt;
* The url now does not contain the password (sent with POST) - Tupone Alfredo&lt;br /&gt;
* Fixing Tiny tank shooting from the world edge - Tupone Alfredo&lt;br /&gt;
* Fixing client requesting lan server on some systems - Tupone Alfredo&lt;br /&gt;
* Observer are no more hunted - Tupone Alfredo&lt;br /&gt;
* Added &#039;Always Show Team Scores&#039; option (GUI Options Menu) - Mark Thomas&lt;br /&gt;
* Added beautify scores - Julio Jimenez&lt;br /&gt;
* Added scoreboard sort option - Mark Thomas, Karsten Behrmann&lt;br /&gt;
* Shots fired over the boundary wall end at the wall - Daniel Remenak&lt;br /&gt;
* Increase range of radar size setting in GUI Option menu - Mark Thomas&lt;br /&gt;
* Fixed Menu rendering when radar size is great - Sean Morrison, Mark Thomas&lt;br /&gt;
* Fixed Linux name resolution (server list) problem - Sean Morrison&lt;br /&gt;
* Fixed Jitter problem on Windows, clock was wrong - Alfredo Tupone&lt;br /&gt;
* Windows platform can switch from SDL to native - Alfredo Tupone&lt;br /&gt;
* Instruction for X-build from linux to windows - Alfredo Tupone&lt;br /&gt;
* bzflag is much less blocking with libcurl - Alfredo Tupone&lt;br /&gt;
* Using c-ares instead of adns for DNS resolving - Alfredo Tupone&lt;br /&gt;
* Added CTF capture event trigger for world weapons - Jeff Myers, Nathan Goings&lt;br /&gt;
* FlipZ on meshpyrs behaves as expected (like pyramids) - Daniel Remenak&lt;br /&gt;
* Fixed /set and /reset command case bug - Daniel Remenak&lt;br /&gt;
* Fixed crash on /ban without -banfile - Daniel Remenak&lt;br /&gt;
* Shot reload timer on the HUD - Daniel Remenak&lt;br /&gt;
* Added timestamp to bzfs DEBUG output, and new CL option (-ts) - Mark Thomas&lt;br /&gt;
* Players without TALK can send to the Admin group - Sean Morrison&lt;br /&gt;
* Fixed bzfs crash because poll kick/ban - Julio Jimenez&lt;br /&gt;
* Allow additional group modify permission lines - Frank Evers&lt;br /&gt;
* bzfs creates default groups before parsing groupdb file - Frank Evers&lt;br /&gt;
* +ALL and -ALL adds/removes all perms from a group in groupdb - Frank Evers&lt;br /&gt;
* Support for +,- and ! operators in bzfs&#039; groupdb file - Frank Evers&lt;br /&gt;
&lt;br /&gt;
==2.0.6==&lt;br /&gt;
BZFlag version 2.0.6 is a version of the BZFlag game that was released on 2006-04-09 under the title &amp;quot;Good enough for now&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
2.0.6 was replaced in less then a month by [[BZFlag 2.0.8]] due to a critical HTTP bug. It is recommended that all users upgrade to 2.0.8&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
v2.0.6 is an extension of the major features released with [[BZFlag 2.0.4|v2.0.4]]. It included a number of [[BZFlag Graphics System|graphics engine]] changes made by [[trepan]] as well as some major bugs.&lt;br /&gt;
v2.0.6 was released to give the users a minor update while issues with stagnation in development of [[BZFlag 2.99]]. &lt;br /&gt;
&lt;br /&gt;
* game variables no longer accept invalid values. - [[Jeff Myers]]&lt;br /&gt;
* Special Effects use tank (was team) color - Karsten Behrmann, [[Jeff Myers]]&lt;br /&gt;
* /reset uses the values from the config and the map as default - [[Jeff Myers]]&lt;br /&gt;
* Screenshots now remember where they left off - [[Jeff Myers]], Thomas Sowell&lt;br /&gt;
* Have windows dump std::error out to a file - [[Jeff Myers]]&lt;br /&gt;
* Various API enhancements - [[Jeff Myers]] and others ( from patches )&lt;br /&gt;
* Not applauding when capturing his own flag - [[Alfredo Tupone]]&lt;br /&gt;
* Fixing crash on invalid captured flag - [[Alfredo Tupone]]&lt;br /&gt;
* Fixed bots on a public server -[[Alfredo Tupone]]&lt;br /&gt;
* Don&#039;t send admin the server password when wrong - [[Alfredo Tupone]]&lt;br /&gt;
* Client config file can be saved on request - [[Alfredo Tupone]]&lt;br /&gt;
* Allow for longer help files (50 lines) - Angelina Carlton&lt;br /&gt;
* Allow selective /reload of databases - Bernt Hansen&lt;br /&gt;
* Fix wrong kick if pausing having V and moving - Julio Jimenez&lt;br /&gt;
* Prevent long distance tank warping through walls - [[Sean Morrison]]&lt;br /&gt;
* Display paused state when screen capturing while playing - [[Sean Morrison]]&lt;br /&gt;
* Added new logDetail plugin - Bernt Hansen&lt;br /&gt;
* Fixed issue with denial-of-service message attacks - [[Sean Morrison]]&lt;br /&gt;
* Support for -window on Mac command line executions - [[Sean Morrison]]&lt;br /&gt;
* Show slot numbers in lagstats (if admin) - Mark Thomas, Mike Weisenborn&lt;br /&gt;
* FPS limit energy saver option for laptops - Karsten Behrmann, [[Sean Morrison]]&lt;br /&gt;
* Send admin channel warning if /password fails - Garrett Padera, [[Jeff Myers]]&lt;br /&gt;
* Known players not authenticated are detected - [[Alfredo Tupone]]&lt;br /&gt;
* Added /checkip command - Frank Thilo&lt;br /&gt;
* &amp;quot;Enable Local Shot/Spawn Effects&amp;quot; affects &amp;quot;Driving with&amp;quot; - [[Daniel Remenak]]&lt;br /&gt;
* Show shot reload indicators when driving with a tank - [[Daniel Remenak]]&lt;br /&gt;
* Fix misc/bzfquery.pl to handle MsgGameTime - Tegan, Mark Thomas&lt;br /&gt;
* Simple server list searching - [[Daniel Remenak]]&lt;br /&gt;
* Added GUI option for email display length - Mark Thomas&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==2.0.8==&lt;br /&gt;
BZFlag version 2.0.8 is a version of the BZFlag game that was released on 2006-05-13 under the title &amp;quot;Oops, Happy Mother&#039;s Day&amp;quot;. It was a bug fix update from [[BZFlag 2.0.6]] primarily intended to fix a serious bug with HTTP connections on the server and client.&lt;br /&gt;
&lt;br /&gt;
v.2.0.8 was replaced with [[BZFlag_2.0.10|v.2.0.10]] on 11/17/07.&lt;br /&gt;
&lt;br /&gt;
v. 2.0.8 has a very short feature list:&lt;br /&gt;
*Add a plug-in to record matches - [[Jeff Myers]]&lt;br /&gt;
*Add an option to send out a UDP heartbeat message for observers behind flakey routers - [[Jeff Myers]]&lt;br /&gt;
*Replaced admin message sound - [[Sean Morrison]]&lt;br /&gt;
*Client and server now close http connections correctly - [[Daniel Remenak]]&lt;br /&gt;
*Fixed crash when rogue autopilot picks up a team flag - [[Daniel Remenak]]&lt;br /&gt;
*Fixed [[spawning|spawnpoint]] selection regression - [[Sean Morrison]]&lt;br /&gt;
&lt;br /&gt;
==2.0.10==&lt;br /&gt;
BZFlag version 2.0.10 was a version of the BZFlag game for Windows and Mac OSX, released on 11/17/07.&lt;br /&gt;
It was released primarily to fix a number of small issues that have been found in 2.0.8 and provide good binary packages for the various Linux distributions for dual core and 64 bit systems.&lt;br /&gt;
&lt;br /&gt;
* Added a work around for buggy DRI open source ATI drivers and the narrow flag - Jeff Myers&lt;br /&gt;
* Add /modcount command - Joshua Bodine, Anonymous&lt;br /&gt;
* Fix bug where users get locked into autopilot mode - Joshua Bodine&lt;br /&gt;
* Fix bug where poll results would not be announced - Joshua Bodine&lt;br /&gt;
* Fix antikill notice bug - Joshua Bodine&lt;br /&gt;
* Add -adminlagannounce and -lagannounce - Thomas Stauer&lt;br /&gt;
* Check for talk permission for part/quit messages  - uso&lt;br /&gt;
* First map no longer ignored in Start Server menu - Ravu al Hemio&lt;br /&gt;
* Implemented Confine Mouse for Windows platforms - Daniel Remenak&lt;br /&gt;
* Implemented fullscreen-&amp;gt;windowed mode toggle on Windows - Daniel Remenak&lt;br /&gt;
* Add the rabidRabbit plugin - LouMan&lt;br /&gt;
* Add packet loss kick and related admin commands - Thomas Stauer&lt;br /&gt;
* Reclaim lost memory from sound sample - Tupone Alfredo&lt;br /&gt;
* Fixed bashism on debian rules - Ryan Kavanagh&lt;br /&gt;
* Add the rabbitTimer plugin - L4m3r&lt;br /&gt;
* Fix some segfaults when re-joining - Tupone Alfredo&lt;br /&gt;
* Compliance with gcc-4.2 - Tupone Alfredo&lt;br /&gt;
* Fix the build system to be more distro friendly - Tupone Alfredo&lt;br /&gt;
* Plugins get flag resets/spawns/grab/drop/transfer - Jeff Myers, Bernt Hansen&lt;br /&gt;
* Fix compiler problem with gcc-4 - Tupone Alfredo&lt;br /&gt;
* Fixed high fps problem - Frank Thilo&lt;br /&gt;
* Added more info for observers - Jeff Myers, Frank Thilo&lt;br /&gt;
* torBlock plugin added - Jeff Myers, blast007&lt;br /&gt;
* Optionally use mesh position and height for radar - Thomas Stauer&lt;br /&gt;
* Add the regFlag plugin - Bernt Hansen&lt;br /&gt;
* Fix memory leak from cURL - blast007&lt;br /&gt;
* Add the Phoenix plugin - Jeff Myers&lt;br /&gt;
* Add favorite server - Frank Thilo&lt;br /&gt;
* SDL sound rate fix - Alfredo Tupone&lt;br /&gt;
* add bzID and server status to logDetail plugin - Bernt Hansen&lt;br /&gt;
* Add -tkannounce to announce tk on admin channel - Bernt Hansen&lt;br /&gt;
* Add the serverControl plugin - Bernt Hansen&lt;br /&gt;
* Add keepaway plugin - LouMan&lt;br /&gt;
* API calls to reset bzdb - Jeff Myers&lt;br /&gt;
* API call to get the player pause state. - Jeff Myers&lt;br /&gt;
* API calls to reload bans, and other files - Jeff Myers&lt;br /&gt;
* API event for shot ends - Jeff Myers&lt;br /&gt;
* API command to move a flag - Jeff Myers&lt;br /&gt;
* add API exposure for lag, jitter, and packetloss - Jeff Myers&lt;br /&gt;
* Add koth plugin - LouMan&lt;br /&gt;
* Add timedctf plugin - LouMan&lt;br /&gt;
* Add teamflagreset plugin - LouMan&lt;br /&gt;
* Add wwzones plugin - LouMan&lt;br /&gt;
* flagStay plugin added - Jeff Myers&lt;br /&gt;
* Give everyone notice of pause messages - Jeff Myers&lt;br /&gt;
* Fix for /silence command - Skeeve&lt;br /&gt;
* Fix mousebox edge positioning - Mark Thomas&lt;br /&gt;
* Fixed on spanish localization - xukosky@yahoo.es&lt;br /&gt;
* Instructions to fix sound on ALSA added - Tupone Alfredo&lt;br /&gt;
* Change filename format for easier location of matches - uso&lt;br /&gt;
* Adding jitter kick and related admin commands - Thomas Stauer&lt;br /&gt;
* Global banlist reload with local banlist - uso&lt;br /&gt;
* Fix to spawned and lag attributes in bz_updatePlayerData - Matthew Marshall&lt;br /&gt;
* Ability to change the killer in a PlayerDieEvent - Matthew Marshall&lt;br /&gt;
* Added shotID to bz_PlayerDieEventData - Matthew Marshall&lt;br /&gt;
* Expose the countdown and game time stuff to the api - Jeff Myers&lt;br /&gt;
* Backport the record stop function from 2.1 - Jeff Myers&lt;br /&gt;
* Backported WW GMs from 2.1 - Matthew Marshall&lt;br /&gt;
* Converts box &amp;amp; pyramids to mesh if required - Anonymous&lt;br /&gt;
* Allows leading face specification (x+,x-,y+,y-,z+,z-) - Anonymous&lt;br /&gt;
* Authorization is invariant to case - Anonymous&lt;br /&gt;
&lt;br /&gt;
==2.0.12==&lt;br /&gt;
BZFlag version 2.0.12 was aversion of the BZFlag game for Linux and source packages released on 6/25/08.&lt;br /&gt;
It was released primarily to fix a small number of build issues on various linux distributions, most notibly Gentoo and Debian based systems. There are no new features from 2.0.10.&lt;br /&gt;
&lt;br /&gt;
* Fix build with -ffast-math avoiding use of isnan for fog - Alfredo Tupone&lt;br /&gt;
* Fix for memory leaks - &lt;br /&gt;
* libGLEW requirement controlled by --with-glew - Alfredo Tupone&lt;br /&gt;
* Actually build with SDL_Image, if required - Alfredo Tupone&lt;br /&gt;
* Remove extra dir separator from cache entries - Jeff Myers&lt;br /&gt;
* Configurable &amp;quot;defaultFOV&amp;quot; (60 deg) for widescreen users - Jeff Myers&lt;br /&gt;
* Adjust shown coordinate for observers - Jeff Myers&lt;br /&gt;
* Use the foghack only if the config says - Jeff Myers&lt;br /&gt;
* Queue spawns after flag captures - Chris Wibble&lt;br /&gt;
* Fix kill callback when is coming from server - Jeff Myers&lt;br /&gt;
* Fix intermix of chat messages and api callback - Jeff Myers&lt;br /&gt;
* Various permission fixes - Jeff Myers&lt;br /&gt;
* Plugins path fixed - &lt;br /&gt;
* Kerberos and thread removed (never used) - Alfredo Tupone&lt;br /&gt;
* Event log fixed - Jeff Myers&lt;br /&gt;
* Workaroung to a driver bug - Jeff Myers&lt;br /&gt;
* Word filtering is case unsensitive -&lt;br /&gt;
* Correctly interface with c-ares 1.5.1 and lower - Alfredo Tupone&lt;br /&gt;
* Not showing a &amp;quot;new rabbit&amp;quot; message when player ID == NoPlayer - blast007&lt;br /&gt;
* gcc-4.3 fixes - Tim Riker, Alfredo Tupone&lt;br /&gt;
* MacOSX: Consistent search of resource files - Sean Morrison&lt;br /&gt;
* MacOSX: update the project to XCode 2.4.1 - Sean Morrison&lt;br /&gt;
* Added _countdownResumeDelay to control resume delay. - Thomas Stauer&lt;br /&gt;
* Slot numbers on scoreboard now appear regardless of hideAdmin - Joshua Bodine&lt;br /&gt;
&lt;br /&gt;
==2.0.14==&lt;br /&gt;
BZFlag version 2.0.14 &#039;&#039;&#039;&amp;quot;This isn&#039;t the release you are looking for&amp;quot;&#039;&#039;&#039;, was released on 02/15/2010.&lt;br /&gt;
It is being released primarily to fix a number of small issues that have been found in 2.0.12, and to replace the fonts due to licensing issues. The version is also being used to provide a set of binary updates for Windows and OSX, most notably support for Intel based Macintosh computers.&lt;br /&gt;
&lt;br /&gt;
The version contains no new major features, but does have a few bugfixes and back-ports from Version 3.&lt;br /&gt;
&lt;br /&gt;
* Add Options -&amp;gt; Display -&amp;gt; AntiFlicker option - trepan&lt;br /&gt;
* Add Options -&amp;gt; Input -&amp;gt; Confine Mouse (MotionBox) - trepan&lt;br /&gt;
* Adjust advanced ground rendering for texture flicker - trepan&lt;br /&gt;
* Change the default stencil bitplanes to 1 to fix stencil shadows and various other stencil features - trepan&lt;br /&gt;
* Backport fix for /idbanlist and /hostbanlist crashes - trepan&lt;br /&gt;
* Add support for gcc-4.4 and libtool-2.2 - Jeff Makey&lt;br /&gt;
* Update to Microsoft Visual C++ 9 from 8.0 - Jeff Myers&lt;br /&gt;
* Update to directInput 8 from 7 - Jeff Myers&lt;br /&gt;
* Fix player ghosting failure - Steven Mertens&lt;br /&gt;
* Provide API support for using bz_moveFlag on team flags - Scott Wichser&lt;br /&gt;
* Add pushstats plugin for future statistics gathering system - Jeff Myers&lt;br /&gt;
* Increase restrictions on incompletely joined players - Jeff Myers, Scott W.&lt;br /&gt;
* Announce saved file name in recordmatch plugin - Jeff Makey&lt;br /&gt;
* Fix buffer overflow in menu subsystem - Jeff Myers&lt;br /&gt;
* Fully support glob-style wildcards in hostbans and make name comparisons case insensitive - Bryan Jennings&lt;br /&gt;
* Properly limit maximum message size in /showgroup command - Jeff Makey&lt;br /&gt;
* Reset team scores in case of a capture during a countdown - Jeff Makey&lt;br /&gt;
* Block spoofed /me messages - Scott Wichser&lt;br /&gt;
* Keep flags within the world boundary - Jeff Makey&lt;br /&gt;
* Add the &amp;quot;roamView&amp;quot; BZDB variable - trepan&lt;br /&gt;
* Change fonts to DejaVu - Jeff Myers, Tim Riker&lt;br /&gt;
* Source cleanup - Tim Riker&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==2.0.16==&lt;br /&gt;
&lt;br /&gt;
BZFlag version 2.0.16 &#039;&#039;&#039;&amp;quot;No foolin&amp;quot;&#039;&#039;&#039;, an an older version of the BZFlag game for Windows, Apple OSX, and Linux. It was released on 04/01/2010. (No it&#039;s not a joke, regardless of the release date.) It was released primarily to fix some build issues to allow inclusion in redhat based Linux distributions. Additional small security fixes have been added as well. The version is being used to provide a set of binary updates for Windows and OSX, most notably support for Intel based Macintosh computers.&lt;br /&gt;
&lt;br /&gt;
The version contains no new major features.&lt;br /&gt;
&lt;br /&gt;
* Fix command line options in Windows launcher - Scott Wichser&lt;br /&gt;
* Fix regression in protocol handling by server - Jeff Makey, Scott Wichser&lt;br /&gt;
* Add bullet tails as seen out the viewport - trepan&lt;br /&gt;
* Add observer mouse controls for roaming and tracking modes - trepan&lt;br /&gt;
* Add the /forceradar client-side command for observers - trepan&lt;br /&gt;
* Minor cleanup of source and build system - Jeff Makey&lt;br /&gt;
* Explicitly link to the dl library when needed - Jeff Makey&lt;br /&gt;
* Remove unused dependency on Xi library - Jeff Makey&lt;br /&gt;
* Clarify copyright assignment terms for developers - Jeff Myers&lt;br /&gt;
* Allow only one Enter message per player instance - Jeff Makey&lt;br /&gt;
* Add TimeLimit plugin - Steven Mertens&lt;br /&gt;
* Remove broken vocaliser and obsolete torBlock plugins - Jeff Myers&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Versions]]&lt;br /&gt;
[[Category:Releases]]&lt;/div&gt;</summary>
		<author><name>Loymdayddaud</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Server_authentication&amp;diff=9606</id>
		<title>Server authentication</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Server_authentication&amp;diff=9606"/>
		<updated>2025-11-02T07:33:17Z</updated>

		<summary type="html">&lt;p&gt;Loymdayddaud: -publictitle, not -public; typo fix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
Version 2.4 and later of the BZFlag server ([[BZFS]]) require an authentication key in order to list on the global public list server.&lt;br /&gt;
&lt;br /&gt;
==Authentication==&lt;br /&gt;
Authentication is required in order to provide players and project staff members a point of contact for any issues or problems that may arise with the server when it is being run publicly. &lt;br /&gt;
&lt;br /&gt;
Any server that uses the -publictitle option and contacts the project&#039;s public list server (http://my.bzflag.org/db/) will be required to provide an authentication key in order to show up on the list.&lt;br /&gt;
&lt;br /&gt;
===The Key===&lt;br /&gt;
The authentication key is automatically generated by the Key management site, and is tied to a specific domain name, or IP address. Server owners simply have to log into the Key Manager and they can generate as many keys as they need. The key is effectively tied to a single server machine, but can be used with any number of BZFS instances on any number of ports.&lt;br /&gt;
&lt;br /&gt;
Servers that do not have static IPs or domain names, should look at using one of the many free DNS name services that are available such as http://www.no-ip.com. Dynamic IPs will need new keys every time the address changes if a domain name is not used.&lt;br /&gt;
&lt;br /&gt;
The key is numeric and will be completely unique. Keys are not valid for domain names or IP address that they were not created with.&lt;br /&gt;
&lt;br /&gt;
===Key Management===&lt;br /&gt;
Key Management is handled by the website: http://my.bzflag.org/listkeys/. After logging in with a global username and password (forum login) server owners can enter as many domain names or IP addresses as they wish.  Provide the key to bzfs using the &amp;quot;-publickey &amp;lt;key&amp;gt;&amp;quot; option.&lt;br /&gt;
&lt;br /&gt;
==Questions==&lt;br /&gt;
&#039;&#039;&#039;Q)&#039;&#039;&#039; What happens if my key gets out?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A)&#039;&#039;&#039; Not much, the key is only valid for your server machine, so unless the user also has access to the same computer they can not use it.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q)&#039;&#039;&#039; What if I run BZFS instances for other people?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A)&#039;&#039;&#039; Then you have 2 choices. &lt;br /&gt;
   1) You can give out your key to your people and they can use it. This will make all servers show up as belonging to you.&lt;br /&gt;
   2) You can tell your users to generate their own keys using the server address or domain name. Then each BZFS instance will be owned by each person.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q)&#039;&#039;&#039; Does 2.0.x need a key?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A)&#039;&#039;&#039; No, 2.0.x servers do not need a key.&lt;br /&gt;
&lt;br /&gt;
[[Category:Server]]&lt;/div&gt;</summary>
		<author><name>Loymdayddaud</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Creating_a_server&amp;diff=9605</id>
		<title>Creating a server</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Creating_a_server&amp;diff=9605"/>
		<updated>2025-11-02T07:30:48Z</updated>

		<summary type="html">&lt;p&gt;Loymdayddaud: Use -publictitle instead of -public&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Creating a server is the process of using [[BZFS]] software to host a game for users to play on.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
Running a server can be done in both [[public]] or [[private]] modes. It involves running the server software [[BZFS]] on some host computer. For [[public]] servers this host computer must be connected to the internet, and be able to accept incoming connections on a fixed port.&lt;br /&gt;
&lt;br /&gt;
== Planning a Server ==&lt;br /&gt;
&lt;br /&gt;
Before you create a server, you need to decide what you want your server will be like. There are a few requirements in creating a server. First, you need a good connection. If you are on a high end DSL or higher connection you will be able to host a few players. With really fast connections, such as T1 or related, you could host dozens (although you may not want to do so).&lt;br /&gt;
&lt;br /&gt;
You must provide an address to connect to. You will specify this address when you run the server (more on this below). The address may be your IP address (something like 192.12.193.123), or the domain name pointing to your computer (e.g. BZFlag.ducati.org). If your server is going to be on a machine that is connected via DSL or Cable, figure out if your provider is giving you a dynamic or a static IP. If the IP address is static, your life will be a little easier since you can specify that address once and forever. If the IP is dynamic, this means that your internet provider will change the address once in a while (without warning). In this case you probably want to &amp;quot;[[Alias Your IP Address]]&amp;quot; to a static name (click on the link for how to).&lt;br /&gt;
&lt;br /&gt;
Next you need to have an idea of how your server is going to look: you are probably already familiar with the game style (CTF, Rabbit) from playing on existing servers. You may specify a map or ask your server to create a random one. You will also be able to specify many details of the game play (how many good and bad flags, jumping, ricochet, etc...). All of this is accomplished in the next step.&lt;br /&gt;
&lt;br /&gt;
== Configure your Server ==&lt;br /&gt;
&lt;br /&gt;
In this step, you specify all the server options. The cleanest way to accomplish this is to create a configuration file. Fortunately, the BZFlag installation provides you with a sample configuration file that you can modify according to your wishes. You will find this file in the directory where you installed BZFlag under a subdirectory called &amp;lt;code&amp;gt;misc&amp;lt;/code&amp;gt;. The file is named &amp;lt;code&amp;gt;bzfs.conf&amp;lt;/code&amp;gt;. Open &amp;lt;code&amp;gt;bzfs.conf&amp;lt;/code&amp;gt; in a text editor (in windows, notepad will be just fine; in GNU/Linux, Unix, Debian, etc.. : vi would work nice).&lt;br /&gt;
&lt;br /&gt;
Read through &amp;lt;code&amp;gt;bzfs.conf&amp;lt;/code&amp;gt; to understand all the options. Remove the # sign on the lines corresponding to the options you want to set. Add # at the beginning of the line if you don&#039;t want that option. After you have finished your changes, you can save that file with a different name (this will be helpful if you want to run server with different configurations: just save many files with different names).&lt;br /&gt;
&lt;br /&gt;
Note also that recent BZFlag installations come with a &amp;quot;nice&amp;quot; web-based configuration builder that lets you create a configuration using a simple web form. Run it by selecting &amp;quot;BZFS configuration builder&amp;quot; from the BZFlag folder in the start menu. Your web browser will pop up with a web form that will prompt you for several configuration choices. Please note that the form will not save the configuration file for you: you will still have to copy and paste the text generated by the web form into your configuration file.&lt;br /&gt;
&lt;br /&gt;
Here is an incomplete list of things you must or can specify in the configuration file.&lt;br /&gt;
&lt;br /&gt;
* Choose a password for administrative purposes. With this password, you can use the administrative operations, such as changing the lag kick threshold or setting environment variables. This is done by adding the following line to your configuration : &amp;lt;code&amp;gt;-passwd PASS&amp;lt;/code&amp;gt; (replacing PASS with a password of your choice). Once the server is running, run your client and login as an administrator by entering &amp;quot;&amp;lt;code&amp;gt;/password PASS&amp;lt;/code&amp;gt;&amp;quot; (without quotes &amp;quot;&amp;quot;) as a chat message.&lt;br /&gt;
* If the server is to be public, you must specify the server people should connect to. The option is added with the following line &amp;quot;&amp;lt;code&amp;gt;-publicaddr server.name.com:5154&amp;lt;/code&amp;gt;&amp;quot; (without quotes), or &amp;quot;&amp;lt;code&amp;gt;-publicaddr 111.111.111.111:5154&amp;lt;/code&amp;gt;&amp;quot; where you should replace &amp;lt;code&amp;gt;111.111.111.111:5154&amp;lt;/code&amp;gt; with your IP address. &amp;lt;code&amp;gt;5154&amp;lt;/code&amp;gt; is the port the server will listen to. Make sure it is the same number as the one specified in a line starting with &amp;lt;code&amp;gt;-p 5154&amp;lt;/code&amp;gt;. You can change the port but don&#039;t do that if you don&#039;t know what you are doing. We recommend you use port numbers that are proven to work in other servers.&lt;br /&gt;
* Specify other options. For example, if you want to allow jumping, then your conf file should have a line starting with &amp;lt;code&amp;gt;-j&amp;lt;/code&amp;gt;. Other options are: ricochet, which needs a line starting with &amp;lt;code&amp;gt;+r&amp;lt;/code&amp;gt;. Read through &amp;lt;code&amp;gt;bzfs.conf&amp;lt;/code&amp;gt; and you&#039;ll find out how to specify the game style (rabbit, ctf, etc...), the number of flags, etc.... If you want to run different configurations you can create as many conf files as you like (with different names of course). Just specify the correct configuration file you want to invoke in the bat file mentioned in the previous paragraph. One of the options that you can set in the configuration file is a map the server should use.&lt;br /&gt;
* You can choose whether to use a custom map or a random one. If you use a random one, decide whether or not to include teleporters. If you want to include them, add (again, to your configuration) the option &amp;quot;&amp;lt;code&amp;gt;-t&amp;lt;/code&amp;gt;&amp;quot;. If you are playing CTF and you want a random map, use &amp;quot;&amp;lt;code&amp;gt;-cr&amp;lt;/code&amp;gt;&amp;quot; instead of standard &amp;quot;&amp;lt;code&amp;gt;-c&amp;lt;/code&amp;gt;&amp;quot;, in addition to &amp;quot;&amp;lt;code&amp;gt;-t&amp;lt;/code&amp;gt;&amp;quot;. For a custom server, use: &amp;lt;code&amp;gt;-world &amp;quot;MAP_NAME&amp;quot;&amp;lt;/code&amp;gt; ; replacing &amp;lt;code&amp;gt;MAP_NAME&amp;lt;/code&amp;gt; with the file name of the map, which must be in the BZFS directory. You have probably seen that when you visit other server, one of the menus has the &amp;quot;save map&amp;quot; option. That means you can save that map for use on your server. Just save it somewhere in your pc, and specify the location of the map in the configuration file, next to the line that starts with &amp;lt;code&amp;gt;-world&amp;lt;/code&amp;gt;&lt;br /&gt;
* You can choose the max number of players (for example &amp;lt;code&amp;gt;-mp 10&amp;lt;/code&amp;gt; says there can&#039;t be more than 10 players). But just because you can host many, decide if you really want to. The more players on your server, the higher the overall latency will be and the more bandwidth your server will consume. Moreover, more than 4 players per team on a ctf or more than 6 players on a rabbit style is just not fun. Experiment if you plan to host a lot, otherwise don&#039;t worry. Not only latency that matters, but many players will make the field busy. Tanks will get killed often and there would be a lot of action. This is good, and bad. Good in that it is a lot of fun! But bad in that the average alive time may only be a few seconds.&lt;br /&gt;
* A server description would be nice. Note that there is a small limit on how many characters you can put for description, and it gets smaller based on how long the server address is. Add a description by adding option: &amp;lt;code&amp;gt;-publictitle DESCRIPTION&amp;lt;/code&amp;gt;&lt;br /&gt;
* You can choose what flags, if any, to include or restrict. You must be familiar with the flag abbreviations, which are listed using command &amp;quot;&amp;lt;code&amp;gt;bzfs -help&amp;lt;/code&amp;gt;&amp;quot; near the end of the help message. Add flags to the server using &amp;quot;&amp;lt;code&amp;gt;+f ABBR&amp;lt;/code&amp;gt;&amp;quot; and restrict flags using &amp;quot;&amp;lt;code&amp;gt;-f ABBR&amp;lt;/code&amp;gt;&amp;quot; replacing &amp;lt;code&amp;gt;ABBR&amp;lt;/code&amp;gt; with the flag abbreviation.&lt;br /&gt;
&lt;br /&gt;
This should get you started, but there are many more options you can set. Some of them are explained below in the section &amp;quot;Good Administration&amp;quot;. In any event, most of the options can be understood by reading the file bzfs.conf provided with the installation.&lt;br /&gt;
&lt;br /&gt;
== Getting your server on the public list ==&lt;br /&gt;
&lt;br /&gt;
BZFlag has a central list server that keeps track of all the public servers. Using the &amp;lt;code&amp;gt;-publictitle &amp;quot;some text&amp;quot;&amp;lt;/code&amp;gt; command line argument will tell your local server to attempt to register itself on the public server. This is normally all that is required to get your server listed.&lt;br /&gt;
&lt;br /&gt;
The list server will need to be able to access your server just as other players will. This is done by connecting back to the public IP address where your server is running. The list server only checks the tcp connection back to your server at present, though players will also try udp on the same IP address and port number.&lt;br /&gt;
&lt;br /&gt;
You can view the raw [http://my.bzflag.org/db/?action=LIST server list] in your web browser.  If you do not see your server, then your server is firewalled or misconfigured and the list server cannot contact it. You will need to resolve this if you want your server to be publicly accessible.&lt;br /&gt;
&lt;br /&gt;
Note: when you run the bzflag client on the same network as a server it should discover the server by using a broadcast ping. If your server shows up in the list, but without the description next to it, this means that you found it through broadcast discovery, and &#039;&#039;&#039;not from the public list server&#039;&#039;&#039;. If the server description that you included on the &amp;lt;code&amp;gt;-publictitle &amp;quot;this text&amp;quot;&amp;lt;/code&amp;gt; command line option is there, then your server is correctly listed on the public server list.&lt;br /&gt;
&lt;br /&gt;
Using multiple &amp;lt;code&amp;gt;-d&amp;lt;/code&amp;gt; options to the server will result in some useful (and some useless) messages from the server.&lt;br /&gt;
{|&lt;br /&gt;
|&lt;br /&gt;
 bzflag@phoenix:~/bzflag-1.10$ src/bzfs/bzfs -d -d -d -i 24.1.104.25 -p 51540 -publictitle &amp;quot;My Server Name&amp;quot;&lt;br /&gt;
 style: 0&lt;br /&gt;
 There is a voting arbiter with the following settings:&lt;br /&gt;
         vote time is 60 seconds&lt;br /&gt;
         veto time is 10 seconds&lt;br /&gt;
         votes required are 3&lt;br /&gt;
         vote percentage necessary is 50.099998&lt;br /&gt;
         vote repeat time is 300 seconds&lt;br /&gt;
         available voters is initially set to 200&lt;br /&gt;
 Running a public server with the following settings:&lt;br /&gt;
         public address is 24.1.104.25:51540&lt;br /&gt;
         listening on 24.1.104.25:51540&lt;br /&gt;
         with title of &amp;quot;My Server Name&amp;quot;&lt;br /&gt;
 Sent ADD message to list server&lt;br /&gt;
 GET /db/?action=ADD&amp;amp;nameport=24.1.104.25:51540&amp;amp;version=BZFS1910&amp;amp;gameinfo=0000000100000000000000000000c800c800c800c800c800c800c8&amp;amp;&lt;br /&gt;
 build=1.10.7.20040809-RELEASE-linux-gnu&amp;amp;title=My+Server+Name HTTP/1.1&lt;br /&gt;
 Host: my.BZFlag.org&lt;br /&gt;
 Cache-Control: no-cache&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Player [0] accept() from 24.1.104.25:50579 on 6&lt;br /&gt;
 Player  [0] on 6 removed: Disconnected&lt;br /&gt;
|}&lt;br /&gt;
* the -i parameter is used here to force an IP address. This server happens to have more than one IP address. This is not required on most servers.&lt;br /&gt;
* the -p parameter is used to pick a different port number than the default. If you are only running one server, it is recommended that you leave this off and use the default port number.&lt;br /&gt;
* notice the debug line that starts with &amp;quot;&amp;lt;code&amp;gt;GET&amp;lt;/code&amp;gt;&amp;quot;. This is the request that was sent to the bzflag list server to attempt to get listed&lt;br /&gt;
* notice the &amp;quot;&amp;lt;code&amp;gt;Player [0]&amp;lt;/code&amp;gt;&amp;quot; lines. This indicates that the list server connected back and then disconnected. If you don&#039;t see this then it is likely that your server is firewalled and the list server is unable to connect back and so will &#039;&#039;&#039;not&#039;&#039;&#039; list your server.&lt;br /&gt;
&lt;br /&gt;
== Running the server ==&lt;br /&gt;
&lt;br /&gt;
There are different ways to run a server. On both Windows and *nix, the program (BZFS) is in the directory where you installed BZFlag (most likely: &amp;quot;&amp;lt;code&amp;gt;C:/Program Files/BZFlag2.4.8&amp;lt;/code&amp;gt;&amp;quot;, or on your usr account). The program containing the server is BZFS.exe. Double clicking on it will run a server with default options, but clearly you want to specify your own options, for example those you saved in the configuration file generated in the previous step. One way to do it is to specify all the commands for the server in a batch file, so you can just double click on it to start a server. On other systems such as Linux, create an executable with the commands, or a shell script, or see if there are any related ways to store console/text based command interface commands in a &amp;quot;shortcut&amp;quot; style.&lt;br /&gt;
&lt;br /&gt;
On Windows: Here is a SampleBatchFile. Open notepad or any other text editor, copy the content of the file, make the changes that you need to change (notably: the location of BZFS and the config file bzfs.conf). Save the file with a nice name and extension .bat (for example: nicename.bat) on your desktop or a window of your choice. You probably understand what the batch file is doing: the lines beginning with &amp;quot;set&amp;quot; specify the content of some variables, such as the location of BZFS and the configuration files. The server is started on the line next to last (before &amp;quot;pause&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want to have a batch file or for some reason your batch file doesn&#039;t work, here is a procedure that always works: from the start menu in your windows machine, look for the &amp;quot;command prompt&amp;quot; and click on it. A black window will open up. Type: &amp;lt;code&amp;gt;cd &amp;quot;c:\Program Files\BZFlag2.4.8&amp;quot;&amp;lt;/code&amp;gt;  (this should work in most cases, unless you installed BZFlag in a different directory). Once you are there type: &amp;lt;code&amp;gt;bzfs -conf &amp;quot;C:\Program Files\BZFlag2.4.8\Data\bzfs.conf&amp;quot;&amp;lt;/code&amp;gt; (change what is between quotes with the exact location of the configuration file).&lt;br /&gt;
&lt;br /&gt;
On *nix: Use a config file, or a shell script. A config file can be made simply by taking all of your command line options you want to pass to BZFS, and placing them in a config file, one options on each line. An HTML file has been created that is shipped with BZFlag (in /data/ on binary releases, and in /misc/ in source releases or CVS). A shell script can be made the same way. A config file can be used, by changing directory to BZFS, and do &amp;quot;bzfs -conf CONF.conf&amp;quot;, replacing CONF.conf with the config file in the same BZFS directory.&lt;br /&gt;
&lt;br /&gt;
Once the server is running, log into it with your client and type /password PASS, where PASS is the password you chose in the configuration step. You&#039;ll be greeted by the client as an administrator. The KeysAndCommands and ServerCommands pages list a number of things you can do as an admin (although I don&#039;t think either of those pages is complete). If when you type one of those commands you get a &amp;quot;You do not have permission&amp;quot; message on client commands, it means that you forgot to login as admin (or somehow your login failed). Type in your client /password PASS replacing PASS with the password that you specified in the configuration phase. If this doesn&#039;t work shut down your server, go back to the configuration step and make sure you are getting the right password.&lt;br /&gt;
&lt;br /&gt;
== Sharing Administration Status ==&lt;br /&gt;
&lt;br /&gt;
Helpful links about this topic:&lt;br /&gt;
&lt;br /&gt;
http://my.bzflag.org/bb/viewtopic.php?t=5960&lt;br /&gt;
and&lt;br /&gt;
http://my.bzflag.org/bb/viewtopic.php?t=6516&lt;br /&gt;
&lt;br /&gt;
Sometimes people will want to share administrator status. Multiple people can be assigned permissions on a server, and all can do more than the normal DEFAULT group (general public). This allows a server to be better administrated, as when one admin is not watching it, another one can. So how do you do this? This is quite easy to do. First off, configure your server to accept group permissions. This is done through BZFS command &amp;quot;&amp;lt;code&amp;gt;-groupdb FILE&amp;lt;/code&amp;gt;&amp;quot;. This stores group names and permissions for that group. Its syntax for adding groups is: &amp;quot;GROUPNAME: permissions...&amp;quot;, replacing GROUPNAME with the name of the group. Don&#039;t worry about adding ADMIN or DEFAULT groups, as those get thrown in automatically. Make one up, but please do not alter ADMIN group, as this is stuff administrators can do, and why limit yourself? Groupnames may not have spaces or quotes. Replace &amp;quot;permissions&amp;quot; with permissions, and take out the backslash in the command. For example, write &amp;quot;lagstats&amp;quot; instead of &amp;quot;/lagstats&amp;quot;. So a sample line would be, &amp;quot;JRADMIN: playerlist ban kick&amp;quot;. Separate permissions by a space, and DO NOT put permissions on different lines! Make sure the group name and ALL permissions are on the same line!&lt;br /&gt;
&lt;br /&gt;
Now that you have your groups laid out, you must create a pas-swo-rd dat-ab-ase to store nicks and passwords created using &amp;quot;/register&amp;quot;, as only registered users may be added to groups. To add people to a group, have them register, and enter BZFlag admin client command &amp;quot;/setgroup CALLSIGN GROUPNAME&amp;quot;, replacing CALLSIGN with their callsign, case sensitive (add quotes around it if the callsign has spaces), and GROUPNAME with the name of the group to add them to. And that?s it! Easy as pie! This enables you to have multiple admins on one server. But what if you don&#039;t want other admins? Easy, create a smaller admin group, such as JRADMIN, in which they have more privileges than a normal person, but not as many as an admin. One privilege you MUST be very careful in giving a person is /shutdownserver. This is terrible if misused, as it kills the server. Trust wisely. And finally, if your server supports /report, starting in 1.11.*, people with privilege to &amp;quot;/viewreports&amp;quot; can see any reports filed, regardless of whether or not the person with that privilege has the computer that stores the reports.&lt;br /&gt;
&lt;br /&gt;
== Shutting down your server ==&lt;br /&gt;
&lt;br /&gt;
If you have had enough of your server, shut it down by entering /shutdownserver in the client. You can also just terminate BZFS execution, but this is not proper and takes a while for the client server list to realize it was terminated.&lt;br /&gt;
&lt;br /&gt;
Now that the server is running, how does it work? Well, the BZFS window or execution must stay alive to keep the server alive. If you close the BZFS window or halt its execution, the server goes too. It will stay on the server list for a short time if halted suddenly.&lt;br /&gt;
&lt;br /&gt;
Closing the server window, or halting its execution, is somewhat like turning off the power suddenly as a way to shutdown your computer - it is not proper, and is not recommended.&lt;br /&gt;
&lt;br /&gt;
== Good Administration ==&lt;br /&gt;
&lt;br /&gt;
Just because you have a server, that&#039;s not all. You must maintain it and keep your players satisfied. Check it often. One way to get feedback is to support the &amp;quot;/report&amp;quot; command.&lt;br /&gt;
&lt;br /&gt;
Enable this using BZFS by setting the configuration option &amp;quot;-reportfile FILENAME&amp;quot; replacing FILENAME with a file to use to write reports to, or &amp;quot;-reportpipe FILENAME&amp;quot; replacing FILENAME with the file to pipe reports to. Reports are made through the client and are simply human messages.&lt;br /&gt;
&lt;br /&gt;
But besides that, you must watch the people that come on your server. Often times people will pause or become &amp;quot;NR&amp;quot;, not responding. &amp;quot;Not responding&amp;quot; means that they haven&#039;t sent a packet in a while (5 seconds by default). This happens to people with slow connections, or people with messed up connections because their connection simply can&#039;t send packets fast enough to be within the threshold. Usually they will be kicked automatically for idling too long, but if not, a kick is suitable. Take action against teamkillers (people who kill their own team on PURPOSE, not by occasional mistake), cheaters (a ban is usually nice :), people who log in/off constantly (people who constantly log on &amp;amp; off to reset their score, a warning is suitable), and any other nasty behavior.&lt;br /&gt;
&lt;br /&gt;
You may want to implement a filter to filter chat or callsigns or both from abusive words. Make a file with a phrase/word that should be filtered on every line, and add it to the server using configuration option &amp;quot;-badwords FILE&amp;quot;, replacing FILE with the file name IN QUOTES that is found in the BZFS directory. Then set whether to filter chat, callsigns, or both using &amp;quot;-filterCallsigns&amp;quot; and/or &amp;quot;-filterChat&amp;quot;. Sometimes, BZFS will be too strict and filter things that aren&#039;t bad. You can make simple exact matches happen using &amp;quot;-filterSimple&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
So you have a filter, but what if a bad person comes on? Take reasonable action, a warning to start, a permanent ban at worst. Punishment severity is, in order, a warning (use the chat), a kick (/kick REASON), a temporary ban (/ban IP DURATION REASON), and a permanent ban (/ban IP REASON). IP is delinquent&#039;s IP address (found using &amp;quot;/playerlist&amp;quot; admin command), DURATION is the amount of time in minutes (do not put a number alone if to ban forever), and REASON is an optional text string of the reason, which will be sent to the player and recorded in your logs. If you want to just kick a person off the server temporarily, use &amp;quot;/kick REASON&amp;quot;, replacing REASON with an optional text string of the reason why. If you want bans to last after you shut down or restart your server, make sure you specified a [[ban file]], which is a file that BZFS can store banned IPs in, using BZFS command-line option &amp;quot;-banfile FILE&amp;quot;, where FILE is the name of the file in the BZFS directory.&lt;br /&gt;
&lt;br /&gt;
== World Files ==&lt;br /&gt;
&lt;br /&gt;
World files should have the &amp;quot;.bzw&amp;quot; file extension and be in [[BZW]] format. If world files live in the &amp;quot;&amp;lt;code&amp;gt;worlds&amp;lt;/code&amp;gt;&amp;quot; directory under the config directory they will be usable when you start a simple server from inside the client. You should not use this method to run a dedicated server, just for starting a LAN game etc. The &amp;quot;&amp;lt;code&amp;gt;worlds&amp;lt;/code&amp;gt;&amp;quot; directory is located:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;~/.bzf/worlds/&amp;quot; - on Linux and Unix Systems.&lt;br /&gt;
* &amp;quot;My Documents\My BZFlag Files\worlds\&amp;quot; - on Microsoft Windows.&lt;br /&gt;
* &amp;quot;~/Library/Application Support/BZFlag/worlds&amp;quot; - on Apple Mac OS X.&lt;br /&gt;
&lt;br /&gt;
== Other Information ==&lt;br /&gt;
&lt;br /&gt;
BZFlag has not been carefully audited for buffer overflows and other remote attacks, however, large packets or suspicious packets make the server kick the player that sent it. You should never trust the server to be your guard. It&#039;s a good idea to run your BZFlag server as a user with minimal permissions on your machine and to run it in a [[BZFS in a chroot jail|chroot jail]].&lt;br /&gt;
&lt;br /&gt;
== Regarding &amp;quot;cheat&amp;quot; servers ==&lt;br /&gt;
&lt;br /&gt;
While the license for BZFlag allows users to run any server modification that they wish, or to modify the code in any way, the project administration asks that users do not publish or host &amp;quot;cheat&amp;quot; type clients or servers. These cheats ruin the game for the average player, when they are mixed in with the normal game servers and clients. We understand the desire to expand and modify the game and its sources, so it is requested that anyone wishing to run a game that uses modified code or logic to do so using a different network protocol than the current public release. This will let modified games be played, and prevent modified clients from being used on public unmodified games, as they would be incompatible. The BZFlag project administrators reserve the right to remove the public listings of any game servers that do not adhere to this rule. Administrators also reserve the right to remove any global accounts or access to public services at any time.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Slash Commands]]&lt;br /&gt;
* [[Server Variables]]&lt;br /&gt;
* [[BZFS in a chroot jail]]&lt;br /&gt;
* [[Known Cheats]]&lt;br /&gt;
* [[Rotating Maps]]&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
http://my.bzflag.org/bb/viewtopic.php?t=2915 post on the BZFlag Forums&lt;br /&gt;
&lt;br /&gt;
[[Category:Server]]&lt;br /&gt;
[[Category:Support]]&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Loymdayddaud</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=BZFS&amp;diff=9604</id>
		<title>BZFS</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=BZFS&amp;diff=9604"/>
		<updated>2025-11-02T07:20:05Z</updated>

		<summary type="html">&lt;p&gt;Loymdayddaud: typo fixes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;This is an article specifically about the BZFS program. For general information on creating a BZFlag server, see [[Creating a server]].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
BZFS is name of the [[BZFlag]] server application. It is a command line application that can either be run manually or started from within the game. The server supports a large list of [[BZFS Command Line Options|command line options]] that can be used. All BZFlag games are hosted on BZFS servers, there is no &#039;single player&#039; game that is run with only a client.&lt;br /&gt;
&lt;br /&gt;
==Public Vs. Private Servers==&lt;br /&gt;
BZFS can be run in ether a public or private mode. Public servers are listed with the central [[List Server]] system and can take advantage of the [[Global Registration]] system for user management. Private servers will only be visible on the LAN they are started on. The in-game server menu can only start private servers.&lt;br /&gt;
&lt;br /&gt;
==Command line options and Config files==&lt;br /&gt;
BZFS uses [[BZFS Command Line Options|command line options]] to set the various modes and options for a game. These options can be specified from the command line prompt of the host OS or inside a plain text configuration file. The path (relative or absolute) to the config file is specified with the &#039;&#039;&#039;-conf&#039;&#039;&#039; option.&lt;br /&gt;
&lt;br /&gt;
See the [[Sample_conf|sample configuration]] for some examples of command line options. However, it is recommended that you create a configuration file from scratch, and test it every few lines. This will help in the case of configuration errors as you will have only modified a few lines that introduced the error.&lt;br /&gt;
&lt;br /&gt;
==World Files==&lt;br /&gt;
BZFS can read in [[BZW]] formatted map files and use them to define the 3D world the game is played in.&lt;br /&gt;
&lt;br /&gt;
==Plug-ins and the BZFS API==&lt;br /&gt;
BZFS can be extended by the use of server side [[Plug-ins]]. These [[Plug-ins]] are runtime loaded DLLs/SO files that use the [[BZFS API]] to modify and automate various game logic and settings.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[BZFS Command Line Options]] &lt;br /&gt;
* [[BZFS API]] &lt;br /&gt;
* [[Plug-ins]] &lt;br /&gt;
* [[Sample conf|Sample Config File]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Server]]&lt;/div&gt;</summary>
		<author><name>Loymdayddaud</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Single_Player_Mode&amp;diff=9589</id>
		<title>Single Player Mode</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Single_Player_Mode&amp;diff=9589"/>
		<updated>2025-11-02T05:11:41Z</updated>

		<summary type="html">&lt;p&gt;Loymdayddaud: add limit information&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Single Player Mode is a term (misnomer) often used to describe the act of playing BZFlag on a local server using the computer-controlled player (bots) of a client. BZFlag itself is designed to be a multiplayer game.&lt;br /&gt;
&lt;br /&gt;
=Overview=&lt;br /&gt;
Using bots on a local server is a way to play the game without an internet connection, or to gain experience in playing without the need for other human players. Bots are currently only run by the game client and can be run on any server. The term &amp;quot;Single Player Mode&amp;quot; is most commonly used to describe a single client that is logged in to a local server with a number of bots. It is mostly used to test maps, as the simple robots do not offer any real gameplay challenge.&lt;br /&gt;
&lt;br /&gt;
Bots can be used on remote servers, but many of the owners of public servers do not allow bots to join with players. Use of bots on public servers is not recommended and can lead to being banned from the server.&lt;br /&gt;
&lt;br /&gt;
=Starting a Single Player Session=&lt;br /&gt;
The basic idea behind starting a single player session is the following.&lt;br /&gt;
#Start a local server, ether by using the in-game menu, or via the command line.&lt;br /&gt;
#Start the game client using the &#039;&#039;&#039;-solo&#039;&#039;&#039; [[BZFS Command Line Options| command line option]].&lt;br /&gt;
#Join the local server using the client and begin play.&lt;br /&gt;
&lt;br /&gt;
==Starting a local server==&lt;br /&gt;
The simplest way to start a local server is to use the in-game &#039;&#039;&#039;Start Server&#039;&#039;&#039; menu. This menu is found on the [[Join Game Menu]] at the very bottom. This menu gives a number of settings for the server, including shot counts, and world options such as [[jumping]] and [[ricochet]]. Specific flags or more advanced options can not be set via the &#039;&#039;&#039;Start Server&#039;&#039;&#039; menu.&lt;br /&gt;
&lt;br /&gt;
To set additional options one must run [[BZFS]] manually and enter in a number of [[BZFS Command Line Options| command line options]]. See [[Creating A Server|creating a server]] for more options. To keep the server local, do not use the &#039;&#039;&#039;-public&#039;&#039;&#039; option.&lt;br /&gt;
&lt;br /&gt;
==Starting the client with bots==&lt;br /&gt;
The game client must be started with a command-line option to enable bots. Bots can not be enabled from within the game menus.&lt;br /&gt;
&lt;br /&gt;
===Linux and Unix===&lt;br /&gt;
On Linux or other Unix-like systems the game client can be started with command line options directly from the terminal.&lt;br /&gt;
{|&lt;br /&gt;
|&lt;br /&gt;
 bzflag -solo ##&lt;br /&gt;
|}&lt;br /&gt;
Where &amp;lt;nowiki&amp;gt;##&amp;lt;/nowiki&amp;gt; is the number of bots you want to run. Note that there is a limit of 40 bots per command.&lt;br /&gt;
&lt;br /&gt;
===Microsoft Windows===&lt;br /&gt;
Microsoft Windows users can follow the following steps to create a shortcut that starts the game client with bots.&lt;br /&gt;
# Locate the BZFlag shortcut installed in the programs section of the start menu.&lt;br /&gt;
# Drag the BZFlag shortcut with the right mouse button on to the desktop.&lt;br /&gt;
# Pick the &amp;quot;Copy here&amp;quot; item from the context menu that pops up when the drag is complete.&lt;br /&gt;
# Click on the Copied shortcut with the right mouse button and pick the &amp;quot;properties&amp;quot; item.&lt;br /&gt;
# Find the &amp;quot;Target&amp;quot; field in the shortcut properties window that is opened, and click in it.&lt;br /&gt;
# Use the right arrow key to find the end of the text in the target field. It will end in bzflag.exe&amp;quot;.&lt;br /&gt;
# After the last quote(&amp;quot;) add a space and then &#039;&#039;&#039;-solo&#039;&#039;&#039; &amp;lt;nowiki&amp;gt;##&amp;lt;/nowiki&amp;gt;. Where &amp;lt;nowiki&amp;gt;##&amp;lt;/nowiki&amp;gt; is the number of bots you wish to have. Note that there is a limit of 40 bots per command.&lt;br /&gt;
# Save the changes by hitting the OK button at the bottom.&lt;br /&gt;
&lt;br /&gt;
Running this shortcut will now start the server with bot support.&lt;br /&gt;
&lt;br /&gt;
===Mac OS X===&lt;br /&gt;
The Mac OS X method for starting the game with bot support is the same as the Linux method, but the path to the bzflag client is required. If you installed BZFlag in your applications folder, then the command that needs to be typed into terminal will be along the lines of:&lt;br /&gt;
{|&lt;br /&gt;
|&lt;br /&gt;
 /Applications/BZFlag.app/Contents/MacOS/bzflag -solo &amp;lt;nowiki&amp;gt;##&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Where &amp;lt;nowiki&amp;gt;##&amp;lt;/nowiki&amp;gt; is the number of bots you want to run. Note that there is a limit of 40 bots per command.&lt;br /&gt;
&lt;br /&gt;
==Joining the Local Server==&lt;br /&gt;
Once the client is started with bot support you must do the following to join the local server&lt;br /&gt;
# Go to the Join Game menu.&lt;br /&gt;
# Enter &amp;quot;127.0.0.1&amp;quot; in the server name field. This is called &amp;quot;localhost&amp;quot;.&lt;br /&gt;
# Enter &amp;quot;5154&amp;quot; in the port field.&lt;br /&gt;
# Choose the &amp;quot;Connect&amp;quot; item to join the server.&lt;br /&gt;
&lt;br /&gt;
This will connect to the local server with the number of bots specified to with the &#039;&#039;&#039;-solo&#039;&#039;&#039; option.&lt;br /&gt;
&lt;br /&gt;
=Autopilot=&lt;br /&gt;
The aforementioned bot method creates what may be called &#039;simple&#039; bots, which simply shoot and attempt to dodge bullets.&lt;br /&gt;
A feature called autopilot, is activated when you press the &amp;quot;9&amp;quot; key on your keyboard while in-game, although as stated earlier, many servers do not allow this.&lt;br /&gt;
Some players may decide they want to open up 5 or 10 clients and place them on autopilot. When they do, it allows them to be able to jump, grab flags, and are slightly smarter than the &#039;simple&#039; bots.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Creating A Server]]&lt;br /&gt;
* [[BZFS Command Line Options]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Concepts]]&lt;br /&gt;
[[Category:Client]]&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Loymdayddaud</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Meshbox&amp;diff=9587</id>
		<title>Meshbox</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Meshbox&amp;diff=9587"/>
		<updated>2025-11-02T05:08:37Z</updated>

		<summary type="html">&lt;p&gt;Loymdayddaud: we also need periods&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The meshbox is the 2.0 update to the original [[box]] object in BZFlag 1.0. The main difference between the [[box]] and the Meshbox is that the meshbox supports new features in BZFlag 2.0, such as physics drivers and textures.&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
A very basic meshbox will include:&lt;br /&gt;
{|&lt;br /&gt;
|&lt;br /&gt;
 meshbox&lt;br /&gt;
  position 0 0 0  # x-pos, y-pos, height&lt;br /&gt;
  rotation 0  # rotation in degrees&lt;br /&gt;
  size 10 10 10  # x-len, y-len, height&lt;br /&gt;
 end&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As with the [[box]] object, position defines where the meshbox should be located. Rotation defines the angle it should be rotated to (about the Z-axis), and size defines how big or small the object should be. Now, if you&#039;re looking for something a little fancier, you can try code similar to this:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|&lt;br /&gt;
 meshbox&lt;br /&gt;
  name example&lt;br /&gt;
  position 0 0 0&lt;br /&gt;
  rotation 0&lt;br /&gt;
  size 10 10 10&lt;br /&gt;
  shift 0 0 0&lt;br /&gt;
  shear 0 0 0&lt;br /&gt;
  scale 0 0 0&lt;br /&gt;
  spin 0 0 0 0&lt;br /&gt;
  outside matref my_cool_wall&lt;br /&gt;
  top matref my_cool_roof&lt;br /&gt;
  phydrv example_physics&lt;br /&gt;
  drivethrough&lt;br /&gt;
  shootthrough&lt;br /&gt;
  passable&lt;br /&gt;
 end&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Valid parameters for a meshbox are:&lt;br /&gt;
{|{{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
| {{Hl3}} |&#039;&#039;&#039;Parameter&#039;&#039;&#039; &lt;br /&gt;
| {{Hl3}} |&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;name&#039;&#039;&#039; || defines the name of meshbox, often unused.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;position&#039;&#039;&#039; || defines the position of the meshbox in X-pos, Y-pos and the height of the meshbox in Z.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;rotation&#039;&#039;&#039; || defines a rotation around the Z axis for the meshbox, in degrees.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;size&#039;&#039;&#039; || defines the distance from the center to the side of the meshbox in X and Y, and the total height of the meshbox in Z.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;shift&#039;&#039;&#039; || shift the meshbox (repeatable).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;shear&#039;&#039;&#039; || (repeatable).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;scale&#039;&#039;&#039; || defines the scale of the meshbox in x,y, and z, 1 is the default, lower values make it smaller (repeatable).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spin angle&#039;&#039;&#039; || rotate the meshbox around a vector by angle. The vector &amp;lt;nx, ny, nz&amp;gt; must be a unit vector.  Because the BZFlag client doesn&#039;t clip objects against the ground, it is advisable to ensure that the meshbox is rotated up and away from the ground. Otherwise, the meshbox will appear to be super-imposed on the ground, rather than embedded into it. (repeatable).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;phydrv&#039;&#039;&#039; || reference to a predefined [[physics|physics driver]].&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;matref&#039;&#039;&#039; || reference to a predefined [[material]].&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;drivethrough&#039;&#039;&#039; || tanks will pass through this object as if it does not exist.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;shootthrough&#039;&#039;&#039; || shots will pass through this object as if it does not exist.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;passable&#039;&#039;&#039; || both tanks and shots will pass through this object. This is the same as specifying both drivethrough and shootthrough.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So what&#039;s the difference here? Well, this object will be treated as an obstacle. The outside walls (as opposed to inside, top, or bottom) will appear with the &amp;quot;my_cool_wall&amp;quot; [[material]], and the roof (top) will have &amp;quot;my_cool_roof.&amp;quot; Of course, if you want a [[material]] on all sides of the object, you can simply omit the &amp;quot;top&amp;quot; specification at the start of the line, and simply have: &amp;quot;matref my_cool_material.&amp;quot; Also, you can specify a [[Physics | physics driver]] to the object, to influence tank behavior a bit.&lt;br /&gt;
&lt;br /&gt;
==Appearance==&lt;br /&gt;
By default, a meshbox will have red brick walls, and a grey stone roof. However, if a [[material]] is specified by the map creator, the appearance depends on the designer&#039;s choosing. Contrary to a [[Box]], a height 0 meshbox at ground level &#039;&#039;is not&#039;&#039; visible.&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
The meshbox was added in [[BZFlag 2.0.0]].&lt;br /&gt;
&lt;br /&gt;
==Editor Support==&lt;br /&gt;
The meshbox IS supported by [[pyBZEdit]], [[Blender]] with the [[BZWTools]] plugin, and [[Wings3D]]. The meshbox is NOT supported by [[BZEdit]], [[IBZEdit]] or [[BZFed]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Map Making]]&lt;br /&gt;
[[Category:Map_Objects]]&lt;/div&gt;</summary>
		<author><name>Loymdayddaud</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Meshbox&amp;diff=9586</id>
		<title>Meshbox</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Meshbox&amp;diff=9586"/>
		<updated>2025-11-02T05:08:11Z</updated>

		<summary type="html">&lt;p&gt;Loymdayddaud: we don&amp;#039;t need this text bolded&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The meshbox is the 2.0 update to the original [[box]] object in BZFlag 1.0. The main difference between the [[box]] and the Meshbox is that the meshbox supports new features in BZFlag 2.0, such as physics drivers and textures.&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
A very basic meshbox will include:&lt;br /&gt;
{|&lt;br /&gt;
|&lt;br /&gt;
 meshbox&lt;br /&gt;
  position 0 0 0  # x-pos, y-pos, height&lt;br /&gt;
  rotation 0  # rotation in degrees&lt;br /&gt;
  size 10 10 10  # x-len, y-len, height&lt;br /&gt;
 end&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As with the [[box]] object, position defines where the meshbox should be located. Rotation defines the angle it should be rotated to (about the Z-axis), and size defines how big or small the object should be. Now, if you&#039;re looking for something a little fancier, you can try code similar to this:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|&lt;br /&gt;
 meshbox&lt;br /&gt;
  name example&lt;br /&gt;
  position 0 0 0&lt;br /&gt;
  rotation 0&lt;br /&gt;
  size 10 10 10&lt;br /&gt;
  shift 0 0 0&lt;br /&gt;
  shear 0 0 0&lt;br /&gt;
  scale 0 0 0&lt;br /&gt;
  spin 0 0 0 0&lt;br /&gt;
  outside matref my_cool_wall&lt;br /&gt;
  top matref my_cool_roof&lt;br /&gt;
  phydrv example_physics&lt;br /&gt;
  drivethrough&lt;br /&gt;
  shootthrough&lt;br /&gt;
  passable&lt;br /&gt;
 end&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Valid parameters for a meshbox are:&lt;br /&gt;
{|{{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
| {{Hl3}} |&#039;&#039;&#039;Parameter&#039;&#039;&#039; &lt;br /&gt;
| {{Hl3}} |&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;name&#039;&#039;&#039; || defines the name of meshbox, often unused.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;position&#039;&#039;&#039; || defines the position of the meshbox in X-pos, Y-pos and the height of the meshbox in Z.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;rotation&#039;&#039;&#039; || defines a rotation around the Z axis for the meshbox, in degrees.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;size&#039;&#039;&#039; || defines the distance from the center to the side of the meshbox in X and Y, and the total height of the meshbox in Z.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;shift&#039;&#039;&#039; || shift the meshbox (repeatable).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;shear&#039;&#039;&#039; || (repeatable).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;scale&#039;&#039;&#039; || defines the scale of the meshbox in x,y, and z, 1 is the default, lower values make it smaller (repeatable).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spin angle&#039;&#039;&#039; || rotate the meshbox around a vector by angle. The vector &amp;lt;nx, ny, nz&amp;gt; must be a unit vector.  Because the BZFlag client doesn&#039;t clip objects against the ground, it is advisable to ensure that the meshbox is rotated up and away from the ground. Otherwise, the meshbox will appear to be super-imposed on the ground, rather than embedded into it. (repeatable).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;phydrv&#039;&#039;&#039; || reference to a predefined [[physics|physics driver]].&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;matref&#039;&#039;&#039; || reference to a predefined [[material]].&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;drivethrough&#039;&#039;&#039; || tanks will pass through this object as if it does not exist&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;shootthrough&#039;&#039;&#039; || shots will pass through this object as if it does not exist&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;passable&#039;&#039;&#039; || both tanks and shots will pass through this object. This is the same as specifying both drivethrough and shootthrough&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So what&#039;s the difference here? Well, this object will be treated as an obstacle. The outside walls (as opposed to inside, top, or bottom) will appear with the &amp;quot;my_cool_wall&amp;quot; [[material]], and the roof (top) will have &amp;quot;my_cool_roof.&amp;quot; Of course, if you want a [[material]] on all sides of the object, you can simply omit the &amp;quot;top&amp;quot; specification at the start of the line, and simply have: &amp;quot;matref my_cool_material.&amp;quot; Also, you can specify a [[Physics | physics driver]] to the object, to influence tank behavior a bit.&lt;br /&gt;
&lt;br /&gt;
==Appearance==&lt;br /&gt;
By default, a meshbox will have red brick walls, and a grey stone roof. However, if a [[material]] is specified by the map creator, the appearance depends on the designer&#039;s choosing. Contrary to a [[Box]], a height 0 meshbox at ground level &#039;&#039;is not&#039;&#039; visible.&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
The meshbox was added in [[BZFlag 2.0.0]].&lt;br /&gt;
&lt;br /&gt;
==Editor Support==&lt;br /&gt;
The meshbox IS supported by [[pyBZEdit]], [[Blender]] with the [[BZWTools]] plugin, and [[Wings3D]]. The meshbox is NOT supported by [[BZEdit]], [[IBZEdit]] or [[BZFed]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Map Making]]&lt;br /&gt;
[[Category:Map_Objects]]&lt;/div&gt;</summary>
		<author><name>Loymdayddaud</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Meshbox&amp;diff=9585</id>
		<title>Meshbox</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Meshbox&amp;diff=9585"/>
		<updated>2025-11-02T05:07:44Z</updated>

		<summary type="html">&lt;p&gt;Loymdayddaud: Add drivethrough, shootthrough, and passable&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The meshbox is the 2.0 update to the original [[box]] object in BZFlag 1.0. The main difference between the [[box]] and the Meshbox is that the meshbox supports new features in BZFlag 2.0, such as physics drivers and textures.&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
A very basic meshbox will include:&lt;br /&gt;
{|&lt;br /&gt;
|&lt;br /&gt;
 meshbox&lt;br /&gt;
  position 0 0 0  # x-pos, y-pos, height&lt;br /&gt;
  rotation 0  # rotation in degrees&lt;br /&gt;
  size 10 10 10  # x-len, y-len, height&lt;br /&gt;
 end&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As with the [[box]] object, position defines where the meshbox should be located. Rotation defines the angle it should be rotated to (about the Z-axis), and size defines how big or small the object should be. Now, if you&#039;re looking for something a little fancier, you can try code similar to this:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|&lt;br /&gt;
 meshbox&lt;br /&gt;
  name example&lt;br /&gt;
  position 0 0 0&lt;br /&gt;
  rotation 0&lt;br /&gt;
  size 10 10 10&lt;br /&gt;
  shift 0 0 0&lt;br /&gt;
  shear 0 0 0&lt;br /&gt;
  scale 0 0 0&lt;br /&gt;
  spin 0 0 0 0&lt;br /&gt;
  outside matref my_cool_wall&lt;br /&gt;
  top matref my_cool_roof&lt;br /&gt;
  phydrv example_physics&lt;br /&gt;
  drivethrough&lt;br /&gt;
  shootthrough&lt;br /&gt;
  passable&lt;br /&gt;
 end&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Valid parameters for a meshbox are:&lt;br /&gt;
{|{{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
| {{Hl3}} |&#039;&#039;&#039;Parameter&#039;&#039;&#039; &lt;br /&gt;
| {{Hl3}} |&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;name&#039;&#039;&#039; || defines the name of meshbox, often unused.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;position&#039;&#039;&#039; || defines the position of the meshbox in X-pos, Y-pos and the height of the meshbox in Z.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;rotation&#039;&#039;&#039; || defines a rotation around the Z axis for the meshbox, in degrees.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;size&#039;&#039;&#039; || defines the distance from the center to the side of the meshbox in X and Y, and the total height of the meshbox in Z.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;shift&#039;&#039;&#039; || shift the meshbox (repeatable).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;shear&#039;&#039;&#039; || (repeatable).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;scale&#039;&#039;&#039; || defines the scale of the meshbox in x,y, and z, 1 is the default, lower values make it smaller (repeatable).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spin angle&#039;&#039;&#039; || rotate the meshbox around a vector by angle. The vector &amp;lt;nx, ny, nz&amp;gt; must be a unit vector.  Because the BZFlag client doesn&#039;t clip objects against the ground, it is advisable to ensure that the meshbox is rotated up and away from the ground. Otherwise, the meshbox will appear to be super-imposed on the ground, rather than embedded into it. (repeatable).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;phydrv&#039;&#039;&#039; || reference to a predefined [[physics|physics driver]].&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;matref&#039;&#039;&#039; || reference to a predefined [[material]].&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;drivethrough&#039;&#039;&#039; || tanks will pass through this object as if it does not exist&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;shootthrough&#039;&#039;&#039; || shots will pass through this object as if it does not exist&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;passable&#039;&#039;&#039; || both tanks and shots will pass through this object. This is the same as specifying both &#039;&#039;&#039;drivethrough&#039;&#039;&#039; and &#039;&#039;&#039;shootthrough&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So what&#039;s the difference here? Well, this object will be treated as an obstacle. The outside walls (as opposed to inside, top, or bottom) will appear with the &amp;quot;my_cool_wall&amp;quot; [[material]], and the roof (top) will have &amp;quot;my_cool_roof.&amp;quot; Of course, if you want a [[material]] on all sides of the object, you can simply omit the &amp;quot;top&amp;quot; specification at the start of the line, and simply have: &amp;quot;matref my_cool_material.&amp;quot; Also, you can specify a [[Physics | physics driver]] to the object, to influence tank behavior a bit.&lt;br /&gt;
&lt;br /&gt;
==Appearance==&lt;br /&gt;
By default, a meshbox will have red brick walls, and a grey stone roof. However, if a [[material]] is specified by the map creator, the appearance depends on the designer&#039;s choosing. Contrary to a [[Box]], a height 0 meshbox at ground level &#039;&#039;is not&#039;&#039; visible.&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
The meshbox was added in [[BZFlag 2.0.0]].&lt;br /&gt;
&lt;br /&gt;
==Editor Support==&lt;br /&gt;
The meshbox IS supported by [[pyBZEdit]], [[Blender]] with the [[BZWTools]] plugin, and [[Wings3D]]. The meshbox is NOT supported by [[BZEdit]], [[IBZEdit]] or [[BZFed]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Map Making]]&lt;br /&gt;
[[Category:Map_Objects]]&lt;/div&gt;</summary>
		<author><name>Loymdayddaud</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Plug-ins&amp;diff=9584</id>
		<title>Plug-ins</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Plug-ins&amp;diff=9584"/>
		<updated>2025-11-02T05:04:33Z</updated>

		<summary type="html">&lt;p&gt;Loymdayddaud: Add section on Plug-in Development&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 MacOS they are built as .dylib 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;
{{Template:Plug-in list}}&lt;br /&gt;
&lt;br /&gt;
==Third Party Plug-ins==&lt;br /&gt;
A number of non-developers have created plug-ins for BZFS, and usually release them on the [https://forums.bzflag.org/ BZFlag Forums].&lt;br /&gt;
&lt;br /&gt;
=== On Linux ===&lt;br /&gt;
&lt;br /&gt;
Here are the steps to compile a hypothetical third party plug-in named &amp;quot;Example&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
==== For versions older than 2.4.3 ====&lt;br /&gt;
&lt;br /&gt;
# In the plugins directory of the BZFlag source tree run the command &#039;&#039;&#039;./newplug.sh Example&#039;&#039;&#039;&lt;br /&gt;
# Remove all of the files from the newly created plugins/Example directory (they were created by newplug.sh)&lt;br /&gt;
# Copy all of the distributed Example files into the plugins/Example directory&lt;br /&gt;
# In the top-level BZFlag source directory run &#039;&#039;&#039;autogen.sh&#039;&#039;&#039;, &#039;&#039;&#039;configure&#039;&#039;&#039;, and &#039;&#039;&#039;make&#039;&#039;&#039; as usual&lt;br /&gt;
&lt;br /&gt;
==== For versions on or after 2.4.3 ====&lt;br /&gt;
&lt;br /&gt;
# Store the distributed plugin files into the plugins/&#039;&#039;Example&#039;&#039; directory&lt;br /&gt;
# In the top-level BZFlag source directory run:&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 45px;&amp;quot;&amp;gt;&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
 ./configure --enable-custom-plugins=&#039;&#039;Example&#039;&#039;&lt;br /&gt;
 ./make&lt;br /&gt;
&lt;br /&gt;
Note that you can use a comma-separated list to specify multiple plugins to be built:&lt;br /&gt;
 ./configure --enable-custom-plugins=&#039;&#039;Example&#039;&#039;,&#039;&#039;AnotherExample&#039;&#039;,&#039;&#039;AnotherPlugin&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
When that finishes successfully the plug-in should be ready to use as described above.&lt;br /&gt;
&lt;br /&gt;
=== On Mac OS X ===&lt;br /&gt;
&lt;br /&gt;
In Xcode on Mac OS X, follow these instructions:&lt;br /&gt;
&lt;br /&gt;
# Create a new target for your plug-in.&lt;br /&gt;
#* &#039;&#039;&#039;Xcode 5 (and below)&#039;&#039;&#039;: Click on the BZFlag project name in the project navigator. Click Add Target, and create a new C/C++ Library. Name the plugin, and select &amp;quot;Dynamic&amp;quot; for type.&lt;br /&gt;
#* &#039;&#039;&#039;Xcode 6&#039;&#039;&#039;: Click on the BZFlag project in the project navigator. Go the File &amp;gt; New &amp;gt; Target. When prompted for the template for the target, under the &amp;quot;OS X&amp;quot; section, select the &amp;quot;Framework &amp;amp; Library&amp;quot; section and finally select &amp;quot;Library.&amp;quot; In the next dialog, select &amp;quot;None (Plain C/C++ Library)&amp;quot; for the Framework and &amp;quot;Dynamic&amp;quot; for the type.&lt;br /&gt;
# In the project navigator, move the new library target from the bottom of the screen into the &amp;quot;Targets&amp;quot; group.&lt;br /&gt;
# Click on the BZFlag project name in the project navigator again. In the list of targets, select the BZFlag application target. In the Build Phases tab, in the Target Dependencies pane, add your new library target as a dependency of the application target. Also add it to the Copy Files phase for the PlugIns directory.&lt;br /&gt;
# Select your new library target. Select the Build Settings tab, and locate the Other Linker Flags option. Add the option &amp;quot;-undefined dynamic_lookup&amp;quot;&lt;br /&gt;
# Find the Architecture build setting for your new library. Make sure it is the same architecture as the main codebase, or click Levels, click the Architecture setting under your library target, click Other, and delete the setting. This will make it assume the overall project build architecture.&lt;br /&gt;
# If your plug-in uses &amp;quot;plugin_utils.h&amp;quot;, then ensure that under Build Phases the &#039;&#039;&#039;libplugin_utils.a&#039;&#039;&#039; library is listed under &amp;quot;Link Binary With Libraries&amp;quot;; add the library if it is not already listed.&lt;br /&gt;
# Find the Executable Prefix build setting for your new library, and delete the &amp;quot;lib&amp;quot; setting.&lt;br /&gt;
# Add your source file(s) to the project, and make them members of your library target; ensure you select the &amp;quot;Copy items if needed&amp;quot; checkbox and to choose &amp;quot;Create groups.&amp;quot;&lt;br /&gt;
# Build as usual.&lt;br /&gt;
&lt;br /&gt;
==Preparing a Linux BZFS==&lt;br /&gt;
&lt;br /&gt;
In order to run plugins in BZFS, you need to recompile it with the --enable-shared option on the configure script.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note that as of 2.4.0 the BZFlag configuration has --enable-shared automatically enabled.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 $ ./configure --enable-shared --disable-client;&lt;br /&gt;
       make;&lt;br /&gt;
       make install;&lt;br /&gt;
&lt;br /&gt;
==Plug-in Development==&lt;br /&gt;
To begin a plugin, use [https://bzflag-plugin-starter.allejo.org/ allejo&#039;s plugin skeleton generator] to create the initial logic.&lt;br /&gt;
Next, look at the [https://bzflag.org/documentation/developer/bzfs_api documentation] and update the event portion of your plugin to perform the desired behavior. A tutorial on creating plugins can be found [https://allejo.io/anthologies/ here].&lt;br /&gt;
Note that the plugin generator adds &#039;&#039;&#039;const char *config&#039;&#039;&#039; to your plugin Init function. Unless you want command-line options for your plugin, this can be commented out.&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>Loymdayddaud</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Plug-ins&amp;diff=9583</id>
		<title>Plug-ins</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Plug-ins&amp;diff=9583"/>
		<updated>2025-11-02T04:52:04Z</updated>

		<summary type="html">&lt;p&gt;Loymdayddaud: Small update&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 MacOS they are built as .dylib 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;
{{Template:Plug-in list}}&lt;br /&gt;
&lt;br /&gt;
==Third Party Plug-ins==&lt;br /&gt;
A number of non-developers have created plug-ins for BZFS, and usually release them on the [https://forums.bzflag.org/ BZFlag Forums].&lt;br /&gt;
&lt;br /&gt;
=== On Linux ===&lt;br /&gt;
&lt;br /&gt;
Here are the steps to compile a hypothetical third party plug-in named &amp;quot;Example&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
==== For versions older than 2.4.3 ====&lt;br /&gt;
&lt;br /&gt;
# In the plugins directory of the BZFlag source tree run the command &#039;&#039;&#039;./newplug.sh Example&#039;&#039;&#039;&lt;br /&gt;
# Remove all of the files from the newly created plugins/Example directory (they were created by newplug.sh)&lt;br /&gt;
# Copy all of the distributed Example files into the plugins/Example directory&lt;br /&gt;
# In the top-level BZFlag source directory run &#039;&#039;&#039;autogen.sh&#039;&#039;&#039;, &#039;&#039;&#039;configure&#039;&#039;&#039;, and &#039;&#039;&#039;make&#039;&#039;&#039; as usual&lt;br /&gt;
&lt;br /&gt;
==== For versions on or after 2.4.3 ====&lt;br /&gt;
&lt;br /&gt;
# Store the distributed plugin files into the plugins/&#039;&#039;Example&#039;&#039; directory&lt;br /&gt;
# In the top-level BZFlag source directory run:&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 45px;&amp;quot;&amp;gt;&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
 ./configure --enable-custom-plugins=&#039;&#039;Example&#039;&#039;&lt;br /&gt;
 ./make&lt;br /&gt;
&lt;br /&gt;
Note that you can use a comma-separated list to specify multiple plugins to be built:&lt;br /&gt;
 ./configure --enable-custom-plugins=&#039;&#039;Example&#039;&#039;,&#039;&#039;AnotherExample&#039;&#039;,&#039;&#039;AnotherPlugin&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
When that finishes successfully the plug-in should be ready to use as described above.&lt;br /&gt;
&lt;br /&gt;
=== On Mac OS X ===&lt;br /&gt;
&lt;br /&gt;
In Xcode on Mac OS X, follow these instructions:&lt;br /&gt;
&lt;br /&gt;
# Create a new target for your plug-in.&lt;br /&gt;
#* &#039;&#039;&#039;Xcode 5 (and below)&#039;&#039;&#039;: Click on the BZFlag project name in the project navigator. Click Add Target, and create a new C/C++ Library. Name the plugin, and select &amp;quot;Dynamic&amp;quot; for type.&lt;br /&gt;
#* &#039;&#039;&#039;Xcode 6&#039;&#039;&#039;: Click on the BZFlag project in the project navigator. Go the File &amp;gt; New &amp;gt; Target. When prompted for the template for the target, under the &amp;quot;OS X&amp;quot; section, select the &amp;quot;Framework &amp;amp; Library&amp;quot; section and finally select &amp;quot;Library.&amp;quot; In the next dialog, select &amp;quot;None (Plain C/C++ Library)&amp;quot; for the Framework and &amp;quot;Dynamic&amp;quot; for the type.&lt;br /&gt;
# In the project navigator, move the new library target from the bottom of the screen into the &amp;quot;Targets&amp;quot; group.&lt;br /&gt;
# Click on the BZFlag project name in the project navigator again. In the list of targets, select the BZFlag application target. In the Build Phases tab, in the Target Dependencies pane, add your new library target as a dependency of the application target. Also add it to the Copy Files phase for the PlugIns directory.&lt;br /&gt;
# Select your new library target. Select the Build Settings tab, and locate the Other Linker Flags option. Add the option &amp;quot;-undefined dynamic_lookup&amp;quot;&lt;br /&gt;
# Find the Architecture build setting for your new library. Make sure it is the same architecture as the main codebase, or click Levels, click the Architecture setting under your library target, click Other, and delete the setting. This will make it assume the overall project build architecture.&lt;br /&gt;
# If your plug-in uses &amp;quot;plugin_utils.h&amp;quot;, then ensure that under Build Phases the &#039;&#039;&#039;libplugin_utils.a&#039;&#039;&#039; library is listed under &amp;quot;Link Binary With Libraries&amp;quot;; add the library if it is not already listed.&lt;br /&gt;
# Find the Executable Prefix build setting for your new library, and delete the &amp;quot;lib&amp;quot; setting.&lt;br /&gt;
# Add your source file(s) to the project, and make them members of your library target; ensure you select the &amp;quot;Copy items if needed&amp;quot; checkbox and to choose &amp;quot;Create groups.&amp;quot;&lt;br /&gt;
# Build as usual.&lt;br /&gt;
&lt;br /&gt;
==Preparing a Linux BZFS==&lt;br /&gt;
&lt;br /&gt;
In order to run plugins in BZFS, you need to recompile it with the --enable-shared option on the configure script.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note that as of 2.4.0 the BZFlag configuration has --enable-shared automatically enabled.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 $ ./configure --enable-shared --disable-client;&lt;br /&gt;
       make;&lt;br /&gt;
       make install;&lt;br /&gt;
&lt;br /&gt;
==Plug-in Development==&lt;br /&gt;
{{DoDoc|Describe the basics of plug-in development.}}&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
The plug-in system was added in BZFlag v. 2.0.4 and was initially met with a lukewarm reception by some of the core developers and the maintainer. The community has since embraced the concept and built a multitude of useful modifications, many that have been incorporated into the project as standard plug-ins.&lt;br /&gt;
&lt;br /&gt;
For Version 3.0 major changes to the [[BZFS API]] have been made to increase its lifespan.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Server]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Plug-Ins]]&lt;/div&gt;</summary>
		<author><name>Loymdayddaud</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=User:Loymdayddaud&amp;diff=9582</id>
		<title>User:Loymdayddaud</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=User:Loymdayddaud&amp;diff=9582"/>
		<updated>2025-11-02T04:48:40Z</updated>

		<summary type="html">&lt;p&gt;Loymdayddaud: Create userpage&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A relatively new BZFlag player who joined in 2023. Has created several plugins and maps.&lt;/div&gt;</summary>
		<author><name>Loymdayddaud</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=BZFS_API_Functions&amp;diff=9581</id>
		<title>BZFS API Functions</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=BZFS_API_Functions&amp;diff=9581"/>
		<updated>2025-11-02T04:45:39Z</updated>

		<summary type="html">&lt;p&gt;Loymdayddaud: Add link to main website documentation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; The most up-to-date information on this subject can be found here: https://www.bzflag.org/documentation/developer/bzfs_api/functions/&lt;br /&gt;
&lt;br /&gt;
A comparison and overview of BZFS API Functions.&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
| {{Hl3}} |&#039;&#039;&#039;BZFS API Function&#039;&#039;&#039; &lt;br /&gt;
| {{Hl3}} |&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|  [[bool bz fileReport]]    || API function will file a report message to the report channel. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz addURLJob]]    || This function is used to send out HTTP requests from bzfs to external websites. It can be used to send data to a site, or request data from a site. It will transfer the data in the background and call the handler parameter as the data is updated. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_BZDBItemExists]]    || This function checks to see if a BZDB variable exists.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_cancelCountdown]]    || This function stops the countdown before a match has been started.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_canPlayerSpawn]]    || This function returns true if the specified player is allowed to spawn, false if they are not.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz debugMessage]]    || This function prints a standard debug message.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz debugMessagef]]    || This function outputs a debug message to.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_deleteIntList]]    || This function deletes the bz_APIIntList given freeing up memory. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz fireWorldGM]]    || This function fires a Guided Missile at a player. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz fireWorldWep]]    || This API function will fire w worldweapon at the specified location with the specified parameters. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz flagPlayer]]    || This API function returns the ID of the player that is carrying the specified flag. If the flag is on the ground, it will return -1.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_freePlayerRecord]]    || This API function frees the player record specified. This should be called on each player record after it&#039;s no longer needed, to release the memory used by that player record.&lt;br /&gt;
|-&lt;br /&gt;
|  [[Bz gameOver]]    || This API function creates a Game Over, announcing the players and/or team(s) specified as the winner.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getAdmin]]    || This API function checks to see if the specified player is an administrator (has the ability to ban). &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getBZDBBool]]    || This API function gets the value of a variable. (ex. _shotsKeepVerticalVelocity, _speedChecksLogsOnly, ect) &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getBZDBDouble]]    || This API function returns the value of a variable. (ex. _shotSpeed, _tankSpeed, ect) &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getBZDBInt]]    || This API function gets the value of a variable. (ex. _tankSpeed, _shotSpeed, ect) &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getBZDBString]]    || This API function gets the value of a variable. (ex. _rainType, _rainTexture, ect) &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz getClientWorldDownloadURL]]    || This API function returns the current string used for the URL of the cached world. This is the URL that will be sent to all clients as an optional download location for the map file. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getCountdownRemaining]]    || This API function retrieves the time remaining in a running countdown.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getCurrentTime]]    || This API function gets the current server time. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getDebugLevel]]    || This API function gets the debugging level of the server.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz getFlagName]]    || This API function returns the flag code for the specified flag.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz getFlagPosition]]    || This API function fill out the &#039;&#039;&#039;pos&#039;&#039;&#039; parameter with the position of the specified flag and return true. If the specified flag ID is invalid, the function will return false.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz getGameType]]    || This API function returns a value of type bz_eGameType representing the game type the server is playing &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getGroupList]]    || This API function returns the groups on the server.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getGroupPerms]]    || This API function returns the list of permissions for the group provided. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getIdleTime]]    || This API function returns the amount of time a player has been idle in seconds. If the player ID does not exist or the player is an observer, it will return -1; otherwise it will return 0 if the player has not been idle. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getLagWarn]]    || This API function gets the amount that players will the a lag warning. (ex. 300ms, 500ms) &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getLoadedPlugins]]    || This API function retrieves the names of all loaded plugins and counts how many of them there are. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getLocaltime]]    || This API function fills a bz_localTime object with values for the current time on the server. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getMaxWaitTime]]    || This API function returns the maximum wait (or idle) time for the server. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz getNumFlags]]    || This API function returns the total number of flags in the game. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getPausedTime]]    || This API function returns the amount of time a player has been paused in seconds. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getPlayerByIndex]]    || This API function gets the information for the player at the index specified. The index should be one of the elements of the list returned by bz_getPlayerIndexList. The returned player info won&#039;t update as the game progresses.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getPlayerBySlotOrCallsign]]    || This API function gets the information for the player with the specified slot index or callsign. The returned player info won&#039;t update as the game progresses. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getPlayerCallsign]]    || This API function retrieves the callsign of a player. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getPlayerCount]]    || This API function returns the number of users on the server. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getPlayerCurrentState]]    || This API function gets the specified player&#039;s current state. This includes information about how fast they&#039;re traveling, if they&#039;re in the air, if they&#039;re rotating, and more.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getPlayerFlag]]    || This API function gets the flag ID of the flag that the specified player is currently holding. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz getPlayerFlagID]]    || This API function returns the flag ID for the flag a player is carrying. If the player does not exist or does not have a flag, it will return -1. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getPlayerHumanity]]    || This API function returns true if the player has reported that they are human and not a robot. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getPlayerIndexList]]    || This API function returns a list of players indexes. Same as bz_getPlayerIndexList(bz_APIIntList), but a new bz_APIIntList is created and returned. This newly-created api int list must be deleted when it is no longer needed. &lt;br /&gt;
|-&lt;br /&gt;
|  [[Bz getPlayerIndexList(bz APIIntList)]]    || This API function gets the current list of players, and places them in the int list specified. The values are the player indexes, which can be passed to bz_getPlayerByIndex to get information about the player. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getPlayerIPAddress]]    || This API function returns the player&#039;s IP Address. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getPlayerJitter]]    || This API function returns the amount of jitter the player has. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getPlayerLag]]    || This API function returns the amount of lag the player has. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getPlayerLosses]]    || This API function returns the amount of losses for the player given. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getPlayerPacketloss]]    || This API function returns the amount of packetloss the player has. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getPlayerRank]]    || This API function returns the rank of the player given. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getPlayerSpawnAtBase]]    || This API function checks if a player is supposed to spawn at their base on their next respawn.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getPlayerTeam]]    || This API function returns the player&#039;s team. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getPlayerTKs]]    || This API function returns the amount of TKs for the player given. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getPlayerWins]]    || This API function returns the amount of wins for the player given.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getPublic]]    || This API function retrieves whether the server is successfully connecting and authenticating with the list server. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getPublicAddr]]    || This API function returns the string that was specified with the BZFS option -publicaddr or the default address that is used when starting up a public server. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getPublicDescription]]    || This API function retrieves the string with the title of the server, generally displayed on the list server when players are finding a game to join. This is what one would specify with the -publictitle BZFS option. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getPublicPort]]    || This API function retrieves the port the server communicates with. Normally this is specified with the -p BZFS option, but defaults to 5154. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getReports]]    || This API function retrieves reports made by other players in the same format as the /viewreports command does.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz getShotGUID]]    || This API function will return the Globally Unique Identifier(GUID) for the specified shot if it exists, or 0 if it does not. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz getShotMetaData]]    || This API function will return the data associated with the specified name for the specified shot. If the shot does not exist, or does not have any data for the name the function will return 0.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getShotMismatch]]    || This API function returns true if the server checks for shot mismatches.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getTeamCount]]    || This API function gets the amount of players on a team.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getTeamLosses]]    || This API function gets the losses of a team.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz getTeamPlayerLimit]]    || This API function will return the maximum number of players that the server is configured to allow for the specified team.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getTeamScore]]    || This API function gets the score for a team.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getTeamWins]]    || This API function gets the wins of a team. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getTimeLimit]]    || This API function retrieves the value of the time limit that was last set. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_getUTCtime]]    || This API function fills a bz_Time object with values for the Universal Time Coordinated (UTC) time. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz givePlayerFlag]]    || This API function will give the specified player the specified flag. If the player has no flag, they will get a flag. If they have a flag and the force parameter is true the new flag code will replace the old flag code. If the force parameter is false, and the player has a flag, no action will be taken. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_grantPerm]]    || This API function grants the specified player the specified permission. After this method has been called, calls to bz_hasPerm, passing in this player&#039;s id and the permission specified, will return true.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_groupAllowPerm]]    || This API function grants the group a certain permission.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_hasPerm]]    || This API function checks to see if the player specified has the permission specified. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_HostBanUser]]    || This API function sets up a new Host ban Rule in the ban list. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_HostUnbanUser]]    || This API function unbans a host name that has been previously banned.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_IDUnbanUser]]    || This API function unbans a bzID address currently listed in the ban list. Note: The bzID is automatically assigned via the registration process at the BZBB.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_incrementPlayerLosses]]    || This API function increments the losses of a player.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_incrementPlayerTKs]]    || This API function increments the team-kill count of a player.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_incrementPlayerWins]]    || This API function increments the wins of a player. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_incrementTeamLosses]]    || This API function increment the losses of a team.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_incrementTeamWins]]    || This API function increment the wins of a team.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_IPBanUser]]    || This API function sets up a new IP Rule in the ban list. Note that if the player is currently playing when their IP address is banned it will not take effect immediately until they rejoin. This can be counteracted by kicking the player upon the ban, or using bz_IDBanUser() instead. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_IPUnbanUser]]    || This API function unbans an IP address that is currently listed in the ban list.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_isCountDownActive]]    || This API function retrieves whether or not the countdown is active. The countdown timer is active if the timer is continuing to go down every second. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_isCountDownInProgress]]    || This API function retrieves whether or not the countdown to the start of the match is occurring. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_isCountDownPaused]]    || This API function retrieves whether or not the countdown is paused.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_isPlayerPaused]]    || This API function returns true if the specified player is currently paused, false if they are not.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_isPlayerSpawnable]]    || This API function checks if player has the ability to spawn. This is not to be confused with the SPAWN permission but instead, this should be used together with bz_setPlayerSpawnable. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_isTimeManualStart]]    || This API function retrieves whether or not the time limit has to be started via a player issuing the /countdown command. The -timemanual BZFS option would make this return value true. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_kickUser]]    || This API function kicks an user from the server (same as the /kick command).&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_loadPlugin]]    || This API function attempts to load a plugin with the given path and filename along with any passed parameters. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz moveFlag]]    || This API function moves the specified flag. If the flag is carried, it will be dropped. If reset is true, the flag is also &amp;quot;zapped&amp;quot; to the new location ( ring graphical effect).&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_newIntList]]    || This API function creates a new bz_APIIntList.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_pauseCountdown]]    || This API function pauses the countdown that is currently running.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_pollActive]]    || If a poll is active, this function will return true. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_pollVeto]]    || This API function vetos an active poll.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz RegisterCustomFlag]]    || This API function registers a custom flag. The registered abbreviation must be unique (that is, may not conflict with existing built-in or API flags). &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_registerCustomSlashCommand]]    || This API function registers a custom slash commands that is used by the plugin. The event listener must later be unregistered by a call to bz_removeCustomSlashCommand in the bz_Unload (2.0.x) or Cleaup() (2.4+) function. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_registerEvent]]    || This API function registers a new event handler. This event handler will receive events of the event type specified.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_reloadBadwords]]    || This API function reloads the bad words for the server. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_reloadGroups]]    || This API function reloads the group file for the server.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_reloadHelp]]    || This API function reloads the help files for the server.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_reloadLocalBans]]    || This API function reloads the local ban list.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_reloadMasterBans]]    || This API function reloads the master ban list. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_reloadUsers]]    || This API function reloads the user database for the server.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_removeCustomSlashCommand]]    || This API function removes all custom slash commands that were created with the plugin. The event listener must previously have been added by a call to bz_registerCustomSlashCommand.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_removeEvent]]    || This API function removes the specified event listener. The event listener must previously have been added by a call to bz_registerEvent. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz removePlayerFlag]]    || This API function forces the specified player to drop the flag that is currently carried. The flag will be reset following the standard flag spawn logic.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_resetALLBZDBVars]]    || This API function resets all the BZDB (/set) variables.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_resetBZDBVar]]    || This API function resets the value of a variable. (Putting &amp;quot;&amp;quot; as the variable will reset them all).&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz resetFlag]]    || This API function reset (respawn) the flag corresponding to the specified flag ID. If the flag is carried by a player, the player will loose the flag. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz resetFlags]]    || 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;br /&gt;
|-&lt;br /&gt;
|  [[bz_resetPlayerScore]]    || This API function resets the score of a player. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_resetTeamScore]]    || This API function resets the score of a team.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_resetTeamScores]]    || This API function resets all team scores.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz restart]]    || This API function will cause the server to do a full restart. This restart will perform the following actions kick all players, stop any countdowns, stop any recordings, unload the world, reload the world, resets all flags, accept new connections.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_resumeCountdown]]    || This API function resumes the countdown that is currently paused. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_revokePerm]]    || This API function revokes the specified permission on the specified player. The player then loses this permission. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz saveWorldCacheFile]]    || This API function forces the server to save out a world cache file into the specified file. The function will return true if the write was sucsessfull, or false if there was an error. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz sendTextMessage]]    || This API function will cause the server to send a text message to a single player, all players, or team. The text message can be made to appear from any user or the server itself.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz sendTextMessagef]]    || This API function sends a message to a single player, all players, or all players on a team using printf-style formatting. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_setBZDBBool]]    || This API function sets a BZDB variable to a given &#039;&#039;&#039;bool&#039;&#039;&#039; value. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_setBZDBDouble]]    || This API function sets a BZDB variable to a given &#039;&#039;&#039;double&#039;&#039;&#039; value. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_setBZDBInt]]    || This API function sets a BZDB variable to a given &#039;&#039;&#039;int&#039;&#039;&#039; value. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_setBZDBString]]    || This API function sets a BZDB variable to a given &#039;&#039;&#039;string&#039;&#039;&#039; value. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz setClientWorldDownloadURL]]    || This function sets the current URL used to download a cached world file. It will be sent to clients that connect giving them the option of using that file. This is helpful if the plug-ins have changed the map file during a a call to bz_restart.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_setLagWarn]]    || This API function sets the maximum lag a player can have before triggering a lag warning. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_setMaxWaitTime]]    || This API function sets the maximum wait (or idle) time. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_setPlayerOperator]]    || This API function marks this player as a server operator. A player typically becomes a server operator by providing the correct password to the /password command. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_setPlayerSpawnable]]    || This API function marks this player as allowed to spawn or not allowed to spawn. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_setPlayerSpawnAtBase]]    || This API function forces a player to spawn at their base on &#039;&#039;&#039;only&#039;&#039;&#039; their next respawn.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_setPlayerTKs]]    || This API function sets the tks of a player.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_setPlayerWins]]    || This API function sets the wins of a player.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz setShotMetaData]]    || This API function will set the specified data and associated it with the specified shot. If the shot does not exist the function will do nothing. Setting data for a name on a shot will replace any previous data that was associated with the name.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_setShotMismatch]]    || This API function enables or disables the check for a shot mismatch. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_setTeamLosses]]    || This API function sets the losses of a team.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_setTeamWins]]    || This API function sets the wins of a team.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_setTimeLimit]]    || This API function sets the countdown timer to a new value. &#039;&#039;&#039;Note:&#039;&#039;&#039; Any players that retrieved the countdown value before this function is called will not see the changes until they rejoin or a new countdown is triggered via bz_startCountdown(). &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz shotHasMetaData]]    || This API function will return true if the specified shot exists and has data stored under the specified name. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_shutdown]]    || This API function shutsdown the server.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_startCountdown]]    || This API function begins the starting countdown process as if a player were to type &#039;&#039;&#039;/countdown&#039;&#039;&#039;. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_superkill]]    || This API function kicks all users from the server. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_unloadPlugin]]    || This API function unloads a plugin that is currently loaded.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz_updatePlayerData]]    || This API function updates the data in a bz_BasePlayerRecord to the current state of that player. The information in a base player record instance is not kept up-to-date as the game progresses, so this method must be called to get the most up-to-date information. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz validAdminPassword]]    || This API function will return true if the passed in password is a valid server admin password.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:BZFS API Docs]]&lt;/div&gt;</summary>
		<author><name>Loymdayddaud</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=BZFS_API_Events&amp;diff=9580</id>
		<title>BZFS API Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=BZFS_API_Events&amp;diff=9580"/>
		<updated>2025-11-02T04:44:21Z</updated>

		<summary type="html">&lt;p&gt;Loymdayddaud: Add link to main website documentation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; The most up-to-date information on this topic can be found here: https://www.bzflag.org/documentation/developer/bzfs_api/events/&lt;br /&gt;
&lt;br /&gt;
A comparison and overview of BZFS API events.&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
| {{Hl3}} |&#039;&#039;&#039;BZFS API event&#039;&#039;&#039; &lt;br /&gt;
| {{Hl3}} |&#039;&#039;&#039;Function&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eAllowAutoPilotChangeEvent]]    || bz_eAllowAutoPilotChangeEvent is an API event that is called each time a player is about to change autopilot.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eAllowCTFCaptureEvent]]    || bz_eAllowCTFCapEvent is an API event that is called each time a flag is about to be captured.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eAllowFlagGrab]]    || bz_eAllowFlagGrab is an API event that is called each time a player is about to grab a flag.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eAllowKillCommandEvent]]    || bz_eAllowKillCommandEvent is an API event that is called each the /kill command is executed.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eAllowPlayer]]    || bz_eAllowPlayer is an API event that is called each time a player connects to the server.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eAllowSpawn]]    || bz_eAllowSpawn is an API event called before a player respawns.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eAnointRabbitEvent]]    || Bz_eAnointRabbitEvent is an API event that is called each time a new rabbit is to be selected.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eAuthenticatonComplete]]    || bz_eAuthenticatonComplete is an API event that is called each time global authentication for a player is complete.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eAutoPilotChangeEvent]]    || bz_eAutoPilotChangeEvent is an API event that is called each time a player is about to change autopilot.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eBanEvent]]    || bz_eBanEvent is an API event that is called each time a regular ban is executed.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eBZDBChange]]    || bz_eBZDBChange is an API event that is called each time a BZDB variable is changed.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eCaptureEvent]]    || bz_eCaptureEvent is an API event that is called each time a team&#039;s flag has been captured.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eFilteredChatMessageEvent]]    || bz_eFilteredChatMessageEvent is an API event that is called for each chat message the server receives. It is called after the server or any plug-ins have done chat filtering. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eFlagDroppedEvent]]    || bz_eFlagDroppedEvent is an API event that is called each time a flag is dropped by a player.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eFlagGrabbedEvent]]    || bz_eFlagGrabbedEvent is an API event that is called each time a flag is grabbed by a player.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eFlagResetEvent]]    || bz_eFlagResetEvent is an API event that is called each time a flag is reset. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eFlagTransferredEvent]]    || bz_eFlagTransferredEvent is an API event that is called each time a player with Thief steals a flag. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eGameEndEvent]]    || bz_eGameEndEvent is an API event that is called each time a game ends. This only triggers when the game countdown ends (A Game Over), or when /superkill is initiated.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eGamePauseEvent]]    || bz_eGamePauseEvent and bz_eGameResumeEvent are API events triggered when a game (i.e., a time- or score-limited match) pauses or resumes, respectively&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eGameResumeEvent]]    || bz_eGamePauseEvent and bz_eGameResumeEvent are API events triggered when a game (i.e., a time- or score-limited match) pauses or resumes, respectively. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eGameStartEvent]]    || bz_eGameStartEvent and bz_eGameEndEvent are API events triggered when a game (i.e., a time- or score-limited match) begins or ends, respectively.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eGetAutoTeamEvent]]    || bz_eGetAutoTeamEvent is an API event that is called for each new player is added to a team. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eGetPlayerInfoEvent]]    || bz_eGetPlayerInfoEvent is an API event that is called each time the server sends out a player info update message to a remote player.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eGetPlayerMotto]]    || bz_eGetPlayerMotto is an API event that is called when the player joins. It gives us the motto of the player. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eGetPlayerSpawnPosEvent]]    || bz_eGetPlayerSpawnPosEvent is an API event that is called each time the server needs a new spawn position. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eGetWorldEvent]]    || bz_eGetWorldEvent is an API event that is called before the BZFS server defines the world. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eHostBanModifyEvent]]    || bz_eHostBanModifyEvent is an API event that is called each time before a hostban is going to happen.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eHostBanNotifyEvent]]    || bz_eHostBanNotifyEvent is an API event that is called each time a hostban is executed. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eIdBanEvent]]    || bz_eIdBanEvent is an API event that is called each time a ban on bzid (idban) is executed.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eIdleNewNonPlayerConnection]]    || bz_eIdleNewNonPlayerConnection is an API event that is called each time there is an idle connection. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eKickEvent]]    || bz_eKickEvent is an API event triggered when a player is kicked from the server. This event may be triggered by both the /kick Slash Command,another plug-in, or the game&#039;s core logic...&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eKillEvent]]    || bz_eKillEvent is an API event triggered when a player sends the /kill Slash Command to kill another player.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eListServerUpdateEvent]]    || bz_eListServerUpdateEvent is an API event called before the server adds itself to the list server. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eLoggingEvent]]    || bz_eLoggingEvent is an API event called whenever a debug message is outputted. These can normally be seen with the -d verbose options.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eLuaDataEvent]]    || bz_eLuaDataEvent is an API event that is called each time a BZDB variable is changed.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eMessageFilteredEvent]]    || bz_eMessageFilteredEvent is an API event that is called whenever a message is censored by the swear filter.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eMsgDebugEvent]]    || bz_eMsgDebugEvent is an API event called every time packets are sent to the server.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eNetDataReceiveEvent]]    || bz_eNetDataReceiveEvent is an API event that is called each time net data is received.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eNetDataSendEvent]]    || bz_eNetDataSendEvent is an API event that is called each time net data is sent. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eNewNonPlayerConnection]]    || bz_eNewNonPlayerConnection is an API event that is called each time there is a connection to the server not from a player. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eNewRabbitEvent]]    || Bz_eNewRabbitEvent is an API event that is called each time a new rabbit is selected. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eNullEvent]]    || bz_eNullEvent is the start point for the bz_eEventType enumeration. It is never called and has no data. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz ePlayerAuthEvent]]    || bz_ePlayerAuthEvent is an API event triggered when a player&#039;s authorization status changes. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz ePlayerCollision]]    || bz_ePlayerCollision is an API event that is called each time two players collide.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz ePlayerCustomDataChanged]]    || bz_ePlayerCustomDataChanged is an API event that is called each time bz_setPlayerCustomData() is run. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz ePlayerDieEvent]]    || bz_ePlayerDieEvent is an API event that is called each time a tank is killed. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz ePlayerJoinEvent]]    || bz_ePlayerJoinEvent is an API event that is called each time a player joins the game. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz ePlayerPartEvent]]    || bz_ePlayerPartEvent is an API event that is called each time a player parts (ie, leaves) a game. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz ePlayerPausedEvent]]    || bz_ePlayerPausedEvent is an API event that is called each time a playing tank is paused. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz ePlayerPauseRequestEvent]]    || bz_ePlayerPauseRequestEvent is an API event that is called each time a player wants to pause.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz ePlayerScoreChanged]]    || bz_ePlayerScoreChanged is an API event that is called when a player&#039;s score changes.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz ePlayerSentCustomData]]    || bz_ePlayerSentCustomData is an API event that is called each time a player is sent custom data. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz ePlayerSpawnEvent]]    || bz_ePlayerSpawnEvent is an API event that is called each time a playing tank is being spawned into the world.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz ePlayerTeamChangeEvent]]    || bz_ePlayerTeamChangeEvent is an API event that is called each time a player switches teams via bz_changeTeam().&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz ePlayerUpdateDoneEvent]]    || bz_ePlayerUpdateDoneEvent is an API event that is called each time a player update finishes. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz ePlayerUpdateEvent]]    || bz_ePlayerUpdateEvent is an API event that is called each time a player sends an update to the server. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz ePluginLoaded]]    || bz_ePluginLoaded is an API event that is called each time a plugin is loaded. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz ePluginUnloaded]]    || bz_ePluginUnloaded is an API event that is called when a plugin is unloaded. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eRawChatMessageEvent]]    || bz_eRawChatMessageEvent is an API event that is called for each chat message the server receives. It is called before any filtering is done. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eReloadEvent]]    || bz_eReloadEvent is an API event that is called each time a player reloads. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eReportFiledEvent]]    || bz_eReportFiledEvent is an API event that is called each time a player or plugin files a report.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eServerMsgEvent]]    || bz_eServerMsgEvent is an API event that is called each time the server sends a message.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eShotEndedEvent]]    || bz_eShotEndedEvent is an API event that is called each time a shot ends. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eShotExpiredEvent]]    || bz_eShotExpiredEvent is an API event that is called each time a shot expires. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eShotFiredEvent]]    || bz_eShotFiredEvent is an API event that is called each time a shot is fired. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eShotRicochetEvent]]    || bz_eShotRicochetEvent is an API event that is called each time a shot ricochetes. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eShotStoppedEvent]]    || bz_eShotStoppedEvent is an API event that is called each time a shot stops.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eShotTeleportEvent]]    || bz_eShotTeleportEvent is an API event that is called each time a shot teleports via a teleporter. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eSlashCommandEvent]]    || bz_eSlashCommandEvent is an API event that is called each time a player sends a slash command.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eTeamScoreChanged]]    || bz_eTeamScoreChanged is an API event that is called when a team&#039;s score changes.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eTeleportEvent]]    || bz_eTeleportEvent is called when a tank passes through a teleportor. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eTickEvent]]    || bz_eTickevent is an API event that is called once for each BZFS main loop. The wait time between tick calls can vary greatly depending on server load network conditions. Plug-ins that wish to enforce a maximum wait time between ticks should call [[bz_setMaxWaitTime]] with the longest wait time that is acceptable.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eUnknownSlashCommand]]    || bz_eUnknownSlashCommand is an API event that is called when the BZFS server does not have an installed handler for a specific slash command.&lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eWorldFinalized]]    || bz_eWorldFinalized is an API event that is called when the world is done loading. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eZoneEntryEvent]]    || bz_eZoneEntryEvent is an API event that is called each time a player enters a zone on a BZW map. The event is unused and has no data. &lt;br /&gt;
|-&lt;br /&gt;
|  [[bz eZoneExitEvent]]    || bz_eZoneExitEvent is an API event that is called each time a player leaves a zone on a BZW map. The event is unused and has no data. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:BZFS API Docs]]&lt;/div&gt;</summary>
		<author><name>Loymdayddaud</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=BZFS_API&amp;diff=9579</id>
		<title>BZFS API</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=BZFS_API&amp;diff=9579"/>
		<updated>2025-11-02T04:39:58Z</updated>

		<summary type="html">&lt;p&gt;Loymdayddaud: Add note about information on main site&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;
==Note==&lt;br /&gt;
The most up-to-date information about the BZFS API can be found here: https://www.bzflag.org/documentation/developer/bzfs_api/&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>Loymdayddaud</name></author>
	</entry>
</feed>