The following game styles are recommended starting points.
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.
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.
/clientquery MrApathyCream
MrApathyCream: Version: BZFlag 1.11.6-20040729-gnu-linux-SDL
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.
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.
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.
/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 #4 teamkilling
Kill the player using slot 4 because teamkilling
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