## NAME

bzfs - BZFlag game server

## SYNOPSIS

bzfs [-a linear angular] [-adminlagannounce milliseconds] [-admsg message] [-advertise groupname[,groupname]...] [-autoTeam] [-b] [-badwords badwordfile] [-ban ip[,ip]...] [-banfile filename] [-c] [-cache worldCacheURL] [-cacheout filename] [-conf configfile] [-cr] [-d] [-density num] [-disableBots] [+f {good | bad | team | | flag-id}[{count}]] [-f {good | bad | flag-id}] [-fb] [-filterCallsigns] [-filterChat] [-filterSimple] [-g] [-gndtex texture-name] [-groupdb file] [-h] [-handicap] [-help] [-helpmsg file name] [-i interface] [-j] [-jitterdrop warn-count] [-jitterwarn milliseconds] [-lagannounce milliseconds] [-lagdrop warn-count] [-lagwarn milliseconds] [-loadplugin name[,options]] [-masterBanURL URL] [-maxidle seconds] [-mp {count~ | ~[rogue-count],~[red-count],~[green-count],~[blue-count],~[purple-count],~[observer-count]}] [-mps max-score] [-ms shots] [-mts max-score] [-noMasterBanlist] [-noradar] [-noTeamKills] [-offa] [-p port] [-packetlossdrop warn-count] [-packetlosswarn percent] [-passwd password] [-pidfile filename] [-poll variable=value] [-printscore] [-publictitle description] [-publicaddr address[:port]] [-publiclist url] [-publickey key] [-q] [+r] [-rabbit [score | killer | random]] [-recbuf size] [-recbufonly] [-recdir directory] [-replay] [-reportfile filename] [-reportpipe command] [+s flag-count] [-s flag-count] [-sa] [-sb] [-set name value] [-setforced name value] [-sl id num] [-spamtime time] [-spamwarn warnLimit] [-speedtol factor] [-srvmsg message] [-st time] [-sw count] [-synclocation] [-synctime] [-t] [-tftimeout time-limit] [-time {time-limit | ending-time}] [-timemanual] [-tk] [-tkannounce] [-tkkr percent] [-ts [micros]] [-UPnP] [-userdb file] [-vars file] [-version] [-world world-file] [-worldsize world size]

## DESCRIPTION

Bzfs is the server for BZFlag, and it must be running to play. It can be run on any system on the network (including a player's system or one without graphics). Terminating the server terminates the game in progress.

## OPTIONS

-a linear angular
  Sets the maximum linear and angular accelerations. The units are somewhat arbitrary so you'll have to experiment to find suitable values. Positive values will set limits to the acceleration and lower they are, greater is the inertia. Zero or negative values disable acceleration limits.
-adminlagannounce milliseconds
  Announce players that lag more than milliseconds to admins.
-admsg message
  Define a message which will be broadcast to all players every 15 minutes. This option can be used multiple times to define a multiline message.
-advertise groupname,groupname,...
  Allows control of who can see this server on the server list. Use: -advertise NONE to make a private server (no one will see the server, but global logins can be used). The default, if -advertise is not specified, is to allow everyone to see the server. Otherwise, your server will only be listed to members of the groups which you specify, eg: -advertise JOE,BOB.
-autoTeam
  Automatically assign players to teams when they connect so that there are an equal number of players on all available teams. Players are placed on teams that have the fewest players; otherwise they will be placed on the weakest team. Weakest team is the team with the lowest combined kill ratio.
-b
  When -c is supplied, this option randomly rotates the buildings.
-badwords badwordfile
  Specify a file that contains bad words that will be used when either -filterCallsigns or -filterChat is enabled.
-ban ip[,ip]...
  Prohibits connections from the listed IP addresses. Trailing 255 bytes are treated as mask bytes.
-banfile filename
  Specifies the name of a file where bzfs will store the banlist. It will load the banlist from this file when it starts (if the file exists), and write the banlist back to the file when someone gets banned or unbanned. If this option isn't given the banlist will not be saved.
-c
  Enables the capture-the-flag style game. By default this allocates one team flag per team. This can be modified see +f team. By default, the free-for-all style is used.
-cache worldCacheURL
  Specifies the URL for the world cache file. This is a binary file that clients will attempt to download before getting the world from the bzfs server.
-cacheout filename
  Save the currently specified world into a binary cache file and exit.
-conf configfilename
  Specifies the name of a configuration file to be used to set all of the bzfs options, rather than setting them on the command line.
-cr
  Enables the capture-the-flag style game with random map. You can optionally specify a building density by providing a number (default is 5). One team flag per team is provided, but more can be added thru +f team. By default, the free-for-all style is used.
-d
  Increase debugging level. If more -d is given, more debugging info is obtained.
-density num
  Specify density for buildings, i.e. the higher the integer number, the more buildings you will get. This applies to automatically generated maps only.
-disableBots
  Disallow clients from using the ROGER autopilot or from using robots.
+f {good | bad | team flag-id}[{count}]
  Forces the existence of the given flag. If specified multiple times for the same flag-id, then that many flags will appear. The good argument is equivalent to specifying +f once for each kind of good flag. Same goes for the bad argument. The team argument adds a team flag to each team, assuming that the game style is capture the flag. The optional {count} parameter allows the specification of multiple flags of the same type. Note that the curly braces are required.
-f {good | bad | flag-id}
  Disallows random flags of the given type. Required flags given by the +f option are still provided. The bad argument is equivalent to specifying -f once for each kind of bad flag. Same goes for good, but you probably do not want to do that.

An example of running a server with 40 to 50 flags except genocide would be "+s 40 -s 50 -f G". Similarly, "+f good{40} +f bad{10} -f G{40}" would give you exactly 40 good flags except genocide and 10 of each bad flag.

-fb
  Allow flags on box buildings.
-filterCallsigns
  Turn on the filtering of callsigns and mottos. Callsigns and mottos are compared against bad words provided via -badwords.
-filterChat
  Turn on the filtering of chat messages. Messages that contain words listed via a -badwords file are replaced with !@#$%^&* characters.
-filterSimple
  By default, all filtering is aggressive, matching much more than what is strictly listed in a -badwords file for convenience. Providing this option will make the -filterCallsigns and -filterChat comparisons exact match only.
-g
  Quit after serving one game.
-gndtex texture-name
  Specify the name of the ground texture.
-groupdb file
  Load groups from file
-h
  Buildings are given random heights.
-handicap
  Players are given a handicap advantage based on their ability in relation to the other players. Handicapped players will have faster tanks and shots. The handicap is determined by the player's score in relation to other players.
-help
  Shows a help page and lists all the valid flag id's.
-helpmsg file name
  Provide a message accessible by /help name, which sends no more than the first 50 lines of file to the player.
-i interface
  Server will listen for and respond to ``pings'' (sent via broadcast) on the given interface. Clients use this to find active servers on the network. This is the TCP/UDP/IP address the server will listen on.
-j
  Allows jumping.
-jitterdrop warn-count
  Kicks players after warn-count jitter warnings.
-jitterwarn milliseconds
  Send warnings to players that jitter more than milliseconds.
-lagannounce milliseconds
  Announce players that lag more than milliseconds in public.
-lagdrop warn-count
  Kicks players after warn-count lag warnings.
-lagwarn milliseconds
  Send warnings to players that lag more than milliseconds.
-loadplugin name[,options]
  Load the specified plugin. name can either be the name of the plugin, or a path to its library file. Optionally, you can provide any options the plugin requires.
-masterBanURL URL
  Specify alternate URLs for the master ban file to be pulled from. This argument may be provided multiple times.
-maxidle seconds
  Kick players that did not play longer than seconds. Pausing players are not kicked. If a player uttered a word recently, he will be kicked after thrice the given time.
-mp {count | [rogue],[red],[green],[blue],[purple],[observer]}
  Sets the maximum number of players, total or per team. A single value sets the total number of players allowed. Five comma separated values set the maximum for each team. If a count is left blank then no limit is set for that team, except for the limit on the total number of players. Both forms may be provided. For rabbit chase, the "rogue" value sets the total number of non-observer player, and all other values must be zero.
-mps max-score
  Sets a maximum score for individual players. The first player to reach this score is declared the winner and the game is over.
-ms shots
  Allows up to shots simultaneous shots for each player. This is 1 by default.
-mts max-score
  Sets a maximum score for teams. The first team to reach this score is declared the winner and the game is over.
-noMasterBanlist
  Server will not attempt to load the master ban list from the internet.
-noradar
  Disable the use of the radar.
-noTeamKills
  Players on the same team are immune to each other's shots. Rogue is excepted.
-offa
  Enables the Open-Free-for-All style game. This is a teamless mode, similar to the classic deathmatch in other games.
-p port
  Listen for game connections on port instead of the default port. Use -help to print the default port, or use -d debug printing.
-packetlossdrop warn-count
  Kicks players after warn-count packetloss warnings.
-packetlosswarn percent
  Send warnings to players that have more more than percent loss.
-passwd password
  Specify a server administrator password for use in remote administration such as /kick, /ban, /mute, etc. messages.
-pidfile filename
  Specify a file where the server will write its process ID so it may be used for remote administration.
-poll variable=value
  Configure several aspects of the in-game polling system
banTime
  default number of minutes player should be banned (unspecified, the default is 300)
vetoTime
  max seconds authorized user has to abort poll (default is 20)
votePercentage
  percentage of players required to affirm a poll (unspecified, the default is 50.1%)
voteRepeatTime
  minimum seconds required before a player may request another vote (default is 300)
votesRequired
  minimum number of additional votes required to make a vote valid (default is 2)
voteTime
  maximum amount of time player has to vote, in seconds (default is 60)

-printscore
  Write score to stdout whenever it changes
-publictitle description
  Advertise this server on the internet with the given description. By default, a server will respond to broadcast queries, allowing clients to find servers running on the standard port on the local subnet. The -publictitle option causes the server to register itself with a list server, which clients can query to get a list of bzfs servers.
-publicaddr address[:port]
  Advertise this server with the given address and port. Normally a server advertises itself at the local address and port. Some servers are not accessible from the internet at this address (for example servers behind a firewall using Network Address Translation). Use this option to specify the address and/or port that internet users should use to access this server.
-publiclist url
  Advertise this server on the list servers listed at url. Only has an effect when used with -publictitle and/or -publicaddr. A built-in url is used by default. The BZFlag clients use the same built-in url so, by default, clients will see public servers automatically. This argument may be provided multiple times to publicize a server to multiple list servers.
-publickey key
  Advertise this server on the list server(s) using the specified key. Only has an effect when used with -publictitle and/or -publicaddr.
-q
  If specified, the server will not listen for nor respond to ``pings''. BZFlag sends out these pings to give the user a list of available servers. This effectively makes the server private, especially if the -p option is also used.
+r
  Makes most shots ricochet. Super bullets, shock waves, and guided missiles do not.
-rabbit [score | killer | random]
  Enables the rabbit-chase style game. By default, the free-for-all style is used. You must specify the algorithm used to pick a new rabbit when the old one dies. The score algorithm uses a modified wins/(wins+losses) score and picks the top scoring player to be the new rabbit. The killer algorithm specifies a reverse tag game where whomever kills the rabbit becomes the new rabbit. The random algorithm randomly picks a new rabbit without regard to score. (The score algorithm is the original behavior.)
-recbuf size
  Start with the recording buffer active, with the specified size (in megabytes).
-recbufonly
  Disable recording straight to files
-recdir directory
  Specify the directory for record and replay files.
-replay
  Start the server in replay mode.
-reportfile filename
  Write messages to the server admin written using the /report command to this file. If neither -reportfile or -reportpipe is used the /report command will be disabled.
-reportpipe command
  Pipe messages to the server admin written using the /report command to this program or shell command. See -reportfile.
+s num-flags
  The server will have an extra num-flags random super flags available at all times. The -f option can be used to restrict which types of flags will be added. Required flags given by the +f option are not included in the num-flags total.
-s num-flags
  The server will have up to num-flags random super flags available at any time. The -f option can be used to restrict which types of flags will be added. Required flags given by the +f option are not included in the num-flags total.
-sa
  Antidote flags are provided for players with bad flags.
-sb
  Allow spawns on box buildings.
-set name value
  Set BZDB variable name to value.
-setforced name value
  Set BZDB variable name to value, even if the variable does not exist.
-sl id num
  Restrict flag id to num shots.
-spamtime time
  Minimum time between player chat messages that are alike.
-spamwarn warnLimit
  Number of warnings a player/spammer gets, who violates -spamtime.
-speedtol factor
  Override the default speed auto kick factor. The factor should not be less then 1.0. The factor is a multiplier.
-srvmsg message
  Define a server welcome message. This option can be used multiple times to define a multiline message.
-st time
  Bad flags are automatically dropped after time seconds.
-sw count
  Bad flags are automatically dropped after count wins. Capturing a team flag does not count as a win.
-synclocation
  Forces all clients to use the same location (longitude and latitude).
-synctime
  Forces all clients to use the same time of day. The current time is determined by the server's clock. This disables the + and - keys on the clients.
-t
  Adds teleporters to the game.
-tftimeout time-limit
  If the last player in a team leaves while someone else is carrying the team flag, the team flag will not reset until it is captured, or until the player drops it and it is left alone for some time. This option specifies the number of seconds that the flag should be left alone before it is reset. The default value is 30.
-time {time-limit | ending-time}
  Sets a time limit on the game to time-limit or ending-time. The game will be stopped time-limit seconds after the first player connects, or at ending-time, whichever is given. The ending-time should be given in hh:mm:ss format, but does not need minute and second arguments. If only hour is given, it must end in ':'. Each unspecified argument is set to 0.
-timemanual
  When using -time, the countdown will start when the first player joins. With -timemanual, the countdown has to be started manually using the /countdown command. This is useful for matches.
-tk
  Changes the default behavior where a player dies when he kills a teammate. When using this option, he will just get a -1 score penalty for the kill but not be killed in game.
-tkannounce
  Announce teamkills to the admin channel.
-tkkr percent
  Kicks players whose team killing to normal kill ratio is greater than percent [1-100]. A start up grace period is given to players.
-ts [micros]
  Include timestamp information in DEBUG output useful for logging. If micros is specified, microseconds will be added to the timestamp.
-UPnP
  If enabled during build, bzfs try to communicate with the Gateway to set Port Forwarding and to supply information not specified with -i (local interface) and -publicaddr
-userdb file
  Load group associations from file
-vars file
  Loads values for game configurable variables from file. Entries are one per line in the form: set variable value. For a list of variables that are configurable, in the BZFlag client, send a message with /set as the text.
-version
  Prints the version number of the executable.
-world world-file
  Reads a specific BZFlag .bzw world layout file for the game map.
-worldsize world-size
  Changes the size for random maps

  ## Notes

  The server uses nearly zero CPU time when nobody is playing, and even during a game the server uses very little CPU, so it's not a burden on the system to leave one running and it won't interfere with a player using the same system (except on Windows 95, which really sucks at multitasking). The server will continue to run until terminated. If a game is in progress when the server goes down, all players will be kicked off and the game will be aborted without warning. The server resets itself when all players have quit. All players must quit to reset the server when a game is over (because of a score or time limit).

  The following game styles are recommended starting points.

  -c [-b]
    Basic capture-the-flag game. It teaches teamwork and dogfighting skills.
  -s -t
    Free-for-all with superflags and teleporters. Teaches players how to use superflags and teleporters for maximum effect. You may want to allow players to drop bad flags with any of -sa, -st, and -sw.

  Notice that the maximum number of shots for these styles is one. Having low shot counts can greatly increase general playability and learning speed. However, this is not always true of every game style or game world, and a skilled player will learn to deal with a variety of shot counts. Single shot games have additional disadvantage in WAN games where lag/jitter can cause unfair advantage. Single shot, non-Jump games will teach valuable lessons in dodging, however, and are excellent starting points for the beginner.

  ## Networking

  Communication between the server and clients (i.e. between bzfs and bzflag) during a game is via TCP and UDP. Use the -help option to get the server's default port. If there's a firewall between the server and client, the firewall must accept connections from the client to this port and forward them to the server.

  Clients can search for servers by sending broadcast UDP packets. But they must be on the same local area network for this to work. Clients can also find servers advertised using -publictitle by querying list servers.

  Game information is relayed through the server. Some communication between clients, such as position and orientation information, is normally sent via UDP packets. Other data, like flag grab and kill messages, are sent to the server via TCP. The server then turns around and broadcasts these packets to all players. Since being in a game implies connection to the server, all players are guaranteed to get all messages sent via TCP. But the UDP packets may be discarded. If other players can see your tank in the game but it never appears to move and shots go through it, chances are high that your UDP connection is not working.

  ## Worlds

  BZFlag worlds come in two varieties, randomly generated ones, and human designed ones. By default, bzfs uses randomly generated world unless you specify the -world command line or configuration file option. The world file specified by the -world option is a text based file that contains a list of world objects. This file can be created using programs found on github, or can be hand edited. See the bzw(5) manual page for more details.

  ## GENERAL SERVER COMMANDS

  /clientquery [callsign]
    Retrieve client version info from all users, or just CALLSIGN if given. Example:

        /clientquery MrApathyCream

        MrApathyCream: Version: BZFlag 1.11.6-20040729-gnu-linux-SDL

  /date, /time
    Responds with the current server local time. /date and /time are exactly the same. Example:
    Tuesday September 08 06:45:54 2004

  /flaghistory
    Lists what flags players have grabbed in the past. Example:
    MrApathyCream: (<-) (->) (O) (CB) (M) (B) (JM) (WA)
    Gerbol: (L) (GM) (L) (GM) (CL) (ST) (GM) (L)
    captain_macgyver: (SB) (SW)

  /idlestats
    Displays the idle time in seconds for each player. A player is idle when
    he is dead and has not respawned yet. Example:
    MrApathyCream: 0s
    Gerbol: 80s
    captain_macgyver: 13s

  /lagstats
    Lists network delays, jitter and number of lost resp. out of order packets by player. Example:
    MrApathyCream 335 +- 10ms
    Gerbol 210 +- 3ms
    captain_macgyver 155 +- 0ms 12% lost/ooo

  /me action

    This command displays an "action" that is conveyed to another player. It allows
    for a little more expressivity in the game. For example: "/me is hunting wabbits"
    turns into a message like "TimRiker is hunting wabbits" that gets displayed
    differently to other players.

  /msg callsign message

    This command allows a player to send a message to another player. Similar to using
    the "," and "." message keys in the game and then selecting your recipient, this
    will send some message to particular player. The quotes are optional.

  /part [message]
    Leave the server with a goodbye message (similar to IRC's /part)
    /part Gotta go! bye everyone!

  /password password
    Attempt to gain administrator status Example:
    /password supersecretpassword
    You are now an administrator!

  /poll {{ban | kick} callsign | vote {yes | no} | veto}
    Interact and make requests of the bzflag voting system via the /poll command.
    The ban and kick subcommands request a vote to respectively ban or kick some
    player. The playername is expected as the next argument. The vote and veto
    commands behave identical to the /vote and /veto command counterparts,
    expecting the same arguments in following. By default, you must be registered
    to request or vote on a poll, and an admin to veto.

  /quit [message]
    Quit the game with a goodbye message (similar to IRC's /quit)
    /quit Gotta go! bye everyone!

  /report message
    Write a message to the server administrator. Example:
    /report I like this map!

  /uptime
    Prints server's current running time in days, hours, mins and secs.

  /vote {yes | no}
    If there is a poll active, this command will place a vote in favor or in
    opposition to the poll. Multiple languages are supported as a vote argument
    in addition to "yes" and "no". By default, you must be registered to vote on
    a poll.

  ## SERVER ADMINISTRATIVE COMMANDS

  /ban {ip | ipList | #slot | Player Name | playerName} duration reason

    Ban players using the specified IPs for certain length of time from using this server. <duration> can be: 'short' or 'default' for the default ban time 'forever' or 'max' for infinite bans a time in the format <weeks>W<days>D<hours>H<minutes>M just a number of minutes

    Examples:

        /ban 35.23.43.66 2 cheating

        bans player with specific ip for 2 minutes

        /ban 35.23.*.*,47.23.17.* 0 Cheaters

        bans all ips in this range forever

        /ban 36.37.2.8 2h30m "ShootMe" was abusing players

        bans specific ip for 2.5 hours with given reason

        /ban #5 60m Rejoining

        bans player using slot 5 for 60 minutes with given reason

        /ban "Tanker" max cheating

        bans the player Tanker forever because cheating

        Note: Slots numbers are only displayed in admins clients.

        Duration and reason are required.

  /banlist
    List all of the IPs currently banned from this server. Example:
    /banlist
    IP Ban List
    ------------
    35.23.43.66 (2 minutes) banned by Tankmaster
    reason: Cheaters
    47.23.17.* banned by Tankslave

  /checkip ip
    Check whether the IP is banned and print the corresponding rule. This does not
    cover hostbans. Example:
    /checkip 35.23.43.66
    35.23.43.66 is banned:
    35.23.43.66 banned by Tankmaster
    reason: Cheaters

  /countdown [seconds]
    Starts the countdown sequence for a timed game. The countdown
    sequence length can optionally be specified in seconds. Examples:
    /countdown
    /countdown 3

  /flag reset {all|unused|team|FlagId}
    Repositions flags. If unused is specified, flags carried
    by tanks are not affected. Using the team option only
    resets team flags, whereas specifying a flag id (such as GM) only
    repositions flags of this type. If noteam is specified,
    team flags will not be reset. Examples:
    /flag reset unused noteam
    /flag reset G

  /flag show
    Shows all flags with information. Example:
    0: p:-1 r:1 g:1 1:V s:1 p:159.1x43.2x0.0
    1: p:2 r:1 g:1 1:SW s:1 p:209.1x143.2x10.0
    2: p:-1 r:1 g:3 1:L s:1 p:-29.1x301.2x0.0

  /flag up
    Removes all flags from the game

  /gameover
    Ends the current game

  /handicap
    Shows the handicap boost percentage for every player

  /hostban hostpattern duration reason
    Ban players using the specified hostnames for a certain length of time from using this server.
    Example:
    /hostban *.foo.com 2 cheating
    bans all players from foo.com for 2 minutes

  /hostbanlist
    List all of the host patterns currently banned from this server.

  /jitterwarn [time]
    Change the maximum allowed jitter time. Example:
    /jitterwarn 50

  /jitterdrop [count]
    Change the number of jitter warnings given before a player is kicked. Example:
    /jitterdrop 3

  /kick {Player Name | playerName | #slot} reason
    Kick a player off the server. Example:
    /kick Gerbol
    You were kicked off the server by MrApathyCream

    /kick #1 Team killing
    Kick the player using slot 1 because Team Killing

    Note: Slots numbers are only displayed in admins clients.
    A reason is required

  /kill {Player Name | playerName | #slot} [reason]
    Kill a player just like when shooting. Example:
    /kill Gerbol
    kill the player named Gerbol

    /kill #4 teamkilling
    Kill the player using slot 4 because teamkilling

  /lagwarn [time]
    Change the maximum allowed lag time. Example:
    /lagwarn 300

  /lagdrop [count]
    Change the number of lag warnings given before a player is kicked. Example:
    /lagdrop 3

  /modcount [seconds]
    Change the time on the clock by the specified number of seconds. Example:
    /modcount +320

  /mute {#slot | callsign}
    Allows a server admin to remove the ability for a player to communicate with
    other players. Once muted the player may only talk to admins on the server.
    This command removes the TALK permission that is enabled by default for all
    players. (disabling TALK by default would let you run a "silent" server)

  /packetlosswarn [time]
    Change the maximum allowed packetloss. Example:
    /packetloss 1

  /packetlossdrop [count]
    Change the number of packetloss warnings given before a player is kicked. Example:
    /packetloss 3

  /playerlist
    List player names and IP addresses. Example:
    /playerlist
    [0]MrApathyCream: 35.23.65.44:4808 udp id
    [1]Gerbol: 130.123.1.55:4909 udp id
    [2]captain_macgyver: 15.32.122.51:3201 udp id

  /record file filename
    Start recording directly to a file

  /record list
    List all files in the recordings directory

  /record rate seconds
    Set the time between game state updates stored in the recording. This will affect
    the granularity of the 'skips' you can do while replaying a file. It will also
    make the recording files bigger if it is set to a faster update rate.

  /record save filename [seconds]
    Save the recording buffer into a file. If seconds is specified, then only save
    that many previous seconds into the file.

  /record size megabytes
    Set the size of the recording memory buffer

  /record start
    Start recording into the memory buffer

  /record stats
    Display the statistics for the current recording (file or buffered)

  /record stop
    Stop recording into the memory buffer

  /replay list
    List all files in the recordings directory

  /replay load {filename | #index}
    Load the specified recording file by name, or by index
    (same indices as produced by the 'replay list' command)

  /replay loop
    Start looping the recording. This will oftentimes require that all players connected
    to the server rejoin (to reload the map, etc...)

  /replay play
    Start playing the recording. This will oftentimes require that all players connected
    to the server rejoin (to reload the map, etc...)

  /replay skip [{+ | -} seconds]
    If seconds is specified, then skip that amount of time in the recording.
    Otherwise, skip forwards until there is activity.

  /replay stats
    Show the current replay status (filename, position, etc...)

  /say message
    Generate a public message sent by the server. Example:
    /say This is a servermessage

  /sendhelp {Player name | playerName | #slot} help page
    Send the specified help page to a user
    /sendhelp register "Foo"
    Send the the help page 'register' to the player Foo

  /shutdownserver
    Stop serving BZFlag on this server

  /superkill
    Kick all players off the server

  /unmute {#slot | callsign}
    Allows a server admin to restore the TALK permission to a previously muted
    player.

  /veto
    If there is a poll active, this will cancel the poll. By default, you must be
    an admin to veto a poll.

  /viewreports
    View the server's report file.

  ## USER MANAGEMENT

  Generally, you start with empty files for the user and password databases. These are maintained by the server, and modifiable through server commands. Users in turn belong to groups. Groups are generally customized to perhaps allow administrative control to trusted users.

  There are both local and global groups, i.e. groups that are available across the entire BZFlag network. In setting up a server, you may want to specify global groups that will allow already well known and trusted users to police your server and help maintain control against cheaters and abuse.

  The server will automatically create three groups: EVERYONE, VERIFIED, and LOCAL.ADMIN. EVERYONE has ACTIONMESSAGE, ADMINMESSAGESEND, CLIENTQUERY, DATE, FLAGHISTORY, IDLESTATS, LAGSTATS, PRIVATEMESSAGE, SHOWMOTTO, SPAWN and TALK by default. VERIFIED has LISTPLUGINS, POLL, POLLKICK, POLLBAN, POLLKICK, POLLSET, POLLFLAGRESET, REPORT and VOTE. The LOCAL.ADMIN group has almost every permission possible (similar to granting admin powers via /password).

  Once the server is running, users can register their callsigns and admins can set their group memberships. Users can use any command that their permissions allow. Every user, registered or not, is part of the EVERYONE group. When a user identifies, they become part of the VERIFIED group.

  In addition, there are global groups available that persist network-wide. Users that register their callsigns on the BZFlag website at https://forums.bzflag.org/ have the ability to globally authenticate by providing a password from within the client. When they authenticate, bzfs will ask the list server if they belong to any of the groups listed in your group database file that are not prefixed with "LOCAL.". If they are a member of a group in question, then they are granted the permissions you specify for that group.

  A group database file is set up to contain the specific local and global groups you care to have on your server in addition to default groups and exactly which permissions are granted by each. These files are laid out with one line per group, using the following format:

  GROUP_NAME: [*Group] [ +| -| !]perm1 [ +| -| !]perm2 ... permN

  *Group: inherit permissions from existing group "Group"

  +perm: add perm to this group

  -perm: remove perm from this group

  !perm: forbid perm for this group. makes perm inaccessible whether it's granted from another group or not

  If no operator is given with a permission it is handled like +perm. A group line for a previously existing group adds to already granted permissions. That way you can spread a group's definition over several lines:

  GROUP_NAME: +perm1 +perm2
  GROUP_NAME: +perm3 +perm4 -perm5

  Group names cannot have spaces, quotes, or other special characters in them. This would be a sample line defining a "cop" group:

  COPS: +KICK +SHORTBAN +BANLIST

  Now a group USERADMIN with all permissions granted to COPS plus some additional could look like this:

  USERADMIN: *COPS +BAN +UNBAN

  Probably you want to define customized permissions for the default group "VERIFIED" instead of those automatically assigned by the server:

  VERIFIED: -ALL +perm1 +perm2 ...

  Or you want to disable the /poll command entirely?

  EVERYONE: !POLL

  To distinguish between a group that is local and one that is global, use the "LOCAL." prefix as part of the group name, e.g.:

  LOCAL.OPERATOR: BANLIST

  The available permissions are as follows:

  ACTIONMESSAGE /me
  ADMINMESSAGERECEIVE player receives messages sent to admin channel
  ADMINMESSAGESEND player may send messages on the admin channel
  ALL all permissions available
  ANTIBAN player is immune to /ban
  ANTIKICK player is immune to /kick
  ANTIKILL player is immune to /kill
  ANTIPOLL player is immune to /poll
  ANTIPOLLBAN player is immune to /poll ban
  ANTIPOLLKICK player is immune to /poll kick
  ANTIPOLLKILL player is immune to /poll kill
  BAN /ban /hostban
  BANLIST /banlist /hostbanlist
  CLIENTQUERY /clientquery
  COUNTDOWN /countdown
  ENDGAME /gameover
  FLAGHISTORY /flaghistory
  FLAGMASTER /flag
  FLAGMOD /flag reset /flag show /flag history
  HIDEADMIN player doesn't show the @ sign
  IDLESTATS /idlestats
  INFO not implemented
  JITTERWARN /jitterwarn /jitterdrop
  KICK /kick
  LAGSTATS /lagstats
  LAGWARN /lagwarn /lagdrop
  LISTPERMS not implemented
  LISTPLUGINS /listplugins
  MASTERBAN /masterban
  MODCOUNT /modcount
  MUTE /mute
  PACKETLOSSWARN /packetlosswarn /packetlossdrop
  PLAYERLIST /playerlist
  PLUGINS /listplugins /loadplugin /unloadplugin
  POLL /poll
  POLLBAN /poll ban
  POLLFLAGRESET /poll flagreset
  POLLKICK /poll kick
  POLLSET /poll set
  PRIVATEMESSAGE /msg
  RECORD /record
  REJOIN allows instant rejoin, regardless of _rejoinTime
  REMOVEPERMS /removegroup
  REPLAY /replay
  REPORT /report
  REQUIREIDENTIFY user must use global registration
  SAY /say
  SENDHELP /sendhelp
  SETALL use of all set/remove commands
  SETPERMS /setgroup
  SETPASSWORD not implemented
  SETVAR /set /reset
  SHORTBAN /ban (with a limited duration)
  SHOWADMIN player shows an @ regardless of having 'shortban' perm
  SHOWMOTTO player is allowed to display their motto on the scoreboard
  SHOWOTHERS /showgroup /showperms (on others)
  SHUTDOWNSERVER /shutdownserver
  SPAWN join game as a player. observers don't need this flag.
  SUPERKILL /superkill
  TALK allows all players to send messages
  UNBAN /unban /hostunban
  UNMUTE /unmute
  VETO /veto
  VOTE /vote

  /grouplist
    Lists the available user groups

  /groupperms
    Lists the permissions for each group

  /masterban {flush | reload}
    Forces the server to flush any bans from the master server. If reload is specified instead of flush, also reloads bans from the the internet. Local bans are unaffected. This command requires the UNBAN permission.

  /reload
    Reloads the user, group, and password files (for synchronization between multiple servers on the same machine)

  /removegroup callsign group
    Remove a user from a group

  /setgroup callsign group
    Add a user to a group

  /showgroup callsign
    Lists the groups that a registered user is a member of

  ## SEE ALSO

  bzflag(6), bzadmin(6), bzw(5)