BF3 PC Server Remote Administration Protocol

Download as pdf or txt
Download as pdf or txt
You are on page 1of 22

BF3 PC Server Remote Administration Protocol

This is the remote-administration protocol used by BF3 PC Server R3. It is work-in-progress; features are first added to the game, and then controlling commands are added to the Remote Administration interface.

Contents
About................................................................................................................................................................................. 2 Low-level protocol ............................................................................................................................................................ 2 Packet format................................................................................................................................................................ 2 int32 .......................................................................................................................................................................... 2 Word ......................................................................................................................................................................... 2 Packet ........................................................................................................................................................................ 2 Protocol behaviour........................................................................................................................................................ 3 Comments ..................................................................................................................................................................... 3 Parameter formats ............................................................................................................................................................ 4 String ............................................................................................................................................................................. 4 Boolean ......................................................................................................................................................................... 4 HexString ....................................................................................................................................................................... 4 Password ....................................................................................................................................................................... 4 Filename........................................................................................................................................................................ 4 Clantag .......................................................................................................................................................................... 4 Player name .................................................................................................................................................................. 4 GUID .............................................................................................................................................................................. 4 Team ID ......................................................................................................................................................................... 4 Squad ID ........................................................................................................................................................................ 4 Player subset ................................................................................................................................................................. 4 Timeout ......................................................................................................................................................................... 5 Id-type ........................................................................................................................................................................... 5 Player info block ............................................................................................................................................................ 5 Team scores ...................................................................................................................................................................... 5 IpPortPair ...................................................................................................................................................................... 5 A string on the following format: ...................................................................................................................................... 5 <IPv4 address>:<port number> ........................................................................................................................................ 5 MapList.......................................................................................................................................................................... 6 Server events .................................................................................................................................................................... 6 Summary ....................................................................................................................................................................... 6

Player events ................................................................................................................................................................. 6 Misc ............................................................................................................................................................................... 7 Level/Round .................................................................................................................................................................. 7 Client commands .............................................................................................................................................................. 9 Summary ....................................................................................................................................................................... 9 Misc ............................................................................................................................................................................. 10 PunkBuster .................................................................................................................................................................. 12 Query........................................................................................................................................................................... 12 Communication ........................................................................................................................................................... 13 Manage players ........................................................................................................................................................... 13 Banning ....................................................................................................................................................................... 14 MapList........................................................................................................................................................................ 15 Variables...................................................................................................................................................................... 17

About
This document describes how to communicate with the Remote Administration interface that is present in BFBC2 PC servers. The protocol is bidirectional, and allows clients to send commands to the server as well as the server to send events to clients. The protocol is designed for machine-readability, not human-readability. It is the basis for all graphical remote administration tools.

Low-level protocol
Packet format
int32 32-bit unsigned integer 1 byte 1 byte 1 byte 1 byte bits 7..0 of value bits 15..8 of value bits 23..16 of value bits 31..24 of value

Word int32 char[] char

Size Content Terminator

Number of bytes in word, excluding trailing null byte Word contents -- must not contain any null bytes Trailing null byte

Packet int32

Sequence

Bit 31: 0 = The command in this command/response pair originated on the server 1 = The command in this command/response pair originated on the client

Bit 30: 0 = Request, 1 = Response Bits 29..0: Sequence number (this is used to match requests/responses in a full duplex transmission) int32 int32 Word[N] Size NumWords Words Total size of packet, in bytes Number of words following the packet header N words

A packet cannot be more than 16384 bytes in size.

Protocol behaviour
The client communicates with the server using a request/response protocol. Each request contains a sequence number which grows monotonically, a flag which indicates whether the command originated on the client or the server, and one word containing the command name. In addition to this, a command can have zero or more arguments. Every request must be acknowledged by a response. The response includes the same sequence number, and the same origin flag. However, it has the response flag set. Sequence numbers are unique within one server-client connection. Thus, the same sequence number can be used when the server is communicating with different clients. Responses must contain at least one word. The first word can be one of the following: OK UnknownCommand InvalidArguments <other> - request completed successfully - unknown command - Arguments not appropriate for command - command-specific error

OK is the only response which signifies success. Subsequent arguments (if any) are command-specific. The server is guaranteed to adhere to this protocol specification. If the client violates the protocol, the server may close the connection without any prior notice.

Comments
The format of the Words portion of a packet is designed such that it shall be easy to split it into individual words in both C++ and Python. Any numerical arguments are always transferred in string form (not in raw binary form). The protocol is designed to be fully bidirectional.

Parameter formats
String
An 8bit ASCII string. Must not contain any characters with ASCII code 0.

Boolean
Two possible values: true false

HexString
A stream of hexadecimal digits. The stream must always contain an even number of digits. Allowed characters are: 0123456789ABCDEF

Password
A password is from 0 up to 16 characters in length, inclusive. The allowed characters are: abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789

Filename
A filename is from 1 up to 240 characters in length, inclusive. The allowed characters are: abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789._-

Clantag
A clan tag is from 0 to an unknown number of characters in length. At the time of writing, it is unclear which the allowed characters are.

Player name
The player name (referred to as Soldier name in-game) is the persona name which the player chose when logging in to EA Online. The exact specification of a player name (length, valid characters, etc.) is currently unclear.

GUID
The GUID is a unique identifier for a player. It is 35 characters long, consists of the prefix EA_ immediately followed by a 32-character HexString.

Team ID
An integer. Team 0 is neutral. Depending on gamemode, there are up to 16 non-neutral teams, numbered 1..16.

Squad ID
An integer. Squad 0 is no squad. Depending on gamemode, there are up to 8 squads numbered 1..8. Note that squad ID are local within each team; that is, to uniquely identify a squad you need to specify both a Team ID and a Squad ID.

Player subset
Several commands such as admin.listPlayers take a player subset as argument. A player subset is one of the following:

all - all players on the server team <team number: Team ID> - all players in the specified team squad <team number: Team ID> <squad number: Squad ID> - all players in the specified team+squad player <player name: string> - one specific player

Timeout
Some commands, such as bans, take a timeout as argument. A timeout is one of the following: perm round seconds <number of seconds: integer> - permanent - until end of round - number of seconds

Id-type
Some commands, such as bans, take an id-type as argument An id-type is one of the following: name ip guid - Soldier name - IP address - Players GUID

Player info block


The standard set of info for a group of players contains a lot of different fields. To reduce the risk of having to do backwards-incompatible changes to the protocol, the player info block includes some formatting information. <number of parameters> - number of parameters for each player N x <parameter type: string> - the parameter types that will be sent below <number of players> - number of players following M x N x <parameter value> - all parameter values for player 0, then all parameter values for player 1, etc. Current parameters: name guid teamId squadId kills deaths score

string GUID Team ID Squad ID integer integer integer

- player name - players GUID - players current team - players current squad - number of kills, as shown in the in-game scoreboard - number of deaths, as shown in the in-game scoreboard - score, as shown in the in-game scoreboard

Team scores
This describes the number of tickets, or kills, for each team in the current round. <number of entries: integer> N x <score: integer> <target score: integer> - number of team scores that follow - score for all teams - when any team reaches this score, the match ends

IpPortPair
A string on the following format: <IPv4 address>:<port number>

MapList
This describes the set of maps which the server rotates through. Format is as follows: <number of maps: integer> - number of maps that follow <number of words per map: integer> - number of words per map <map name: string> - name of map <gamemode name: string> - name of gamemode <number of rounds: integer> - number of rounds to play on map before switching The reason for the <number of words per map> specification is future proofing; in the future, DICE might add extra words per map after the first three. However, the first three words are very likely to remain the same.

Server events
Most commands require the client to be logged in. Before the client has logged in, only 'login.plainText', 'login.hashed', 'logout', 'version', 'listPlayers', 'serverInfo' and 'quit' commands are available.

Summary
Command player.onAuthenticated player.onJoin player.onLeave player.onSpawn player.onKill player.onChat player.onSquadChange player.onTeamChange punkBuster.onMessage server.onLevelLoaded server.onRoundOver server.onRoundOverPlayers server.onRoundOverTeamScores Description Player with name <soldier name> has joined the server Player with name <soldier name> has joined the server with name <soldier name> has left the server Player with name <soldier name> has spawned in Player with name <killing soldier name> has killed <killed soldier name> Chat message has been sent to a group of people Player might have changed squad Player might have changed team PunkBuster server has output a message Level has loaded Round has ended Player stats at end-of-round Team stats at end-of-round

Player events
Request: Response: Effect: player.onAuthenticated <soldier name: string> OK Player with name <soldier name> has joined the server

Request: Response: Effect:

player.onJoin <soldier name: string> <id: GUID> OK Player with name <soldier name> has joined the server

Request: Response:

player.onLeave <soldier name: string> <soldier info: player info block> OK

Effect:

Player with name <soldier name> has left the server; his last set of stats were <soldier info>

Request: Response: Effect: NOTE

player.onSpawn <soldier name: string> <team: Team ID> OK Player with name <soldier name> has spawned in, with team <team> The <team> specifier is probably superfluous information and might get removed in the future

Request: Response: Effect:

player.onKill <killing soldier name: string> <killed soldier name: string> <weapon: string> <headshot: boolean> OK Player with name <killing soldier name> has killed <killed soldier name> Suicide indication is unknown at this moment. If the server kills the player (through admin.killPlayer), the result is unknown.

Request: Response: Effect: Comment:

player.onChat <source soldier name: string> <text: string> OK Player with name <source soldier name> (or the server, or the server admin) has sent chat message <text> to some people If <source soldier name> is Server, then the message was sent from the server rather than from an actual player

Request: Response: Effect:

player.onSquadChange <soldier name: player name> <team: Team ID> <squad: Squad ID> OK Player might have changed squad

Request: Response: Effect:

player.onTeamChange <soldier name: player name> <team: Team ID> <squad: Squad ID> OK Player might have changed team

Misc
Request: Response: Effect: Comment: punkBuster.onMessage <message: string> OK PunkBuster server has output a message The entire message is sent as a raw string. It may contain newlines and whatnot.

Level/Round
Request: Response: Effect: server.onLevelLoaded <level name: string> <gamemode: string> <roundsPlayed: int> <roundsTotal: int> OK Level has completed loading, and will start in a bit

Request: Response: Effect:

server.onRoundOver <winning team: Team ID> OK The round has just ended, and <winning team> won

Request: Response: Effect:

server.onRoundOverPlayers <end-of-round soldier info: player info block> OK The round has just ended, and <end-of-round soldier info> is the final detailed player stats

Request: Response: Effect:

server.onRoundOverTeamScores <end-of-round scores: team scores> OK The round has just ended, and <end-of-round scores> is the final ticket/kill/life count for each team

Client commands
Most commands require the client to be logged in. Before the client has logged in, only 'login.plainText', 'login.hashed', 'logout', 'version', 'serverInfo', 'listPlayers' and 'quit' commands are available.

Summary
Command Description login.plainText <password> Attempt to login to game server with password login.hashed Retrieves the salt, used in the hashed password login process login.hashed <passwordHard> Sends a hashed password to the server, in an attempt to log in serverinfo Query for brief server info admin.help Report which commands the server knows about logout Logout from game server quit Disconnect from server version Reports game server type, and build ID listPlayers <players> Return list of a group of players on the server, without GUIDs admin.eventsEnabled <enabled> Set whether or not the server will send events to the current connection admin.password [password] Set the admin password for the server admin.say <message, players> Send a chat message to a group of players admin.kickPlayer <soldier name, reason> Kick player <soldier name> from server admin.listPlayers <players> Return list of a group of players on the server admin.movePlayer <name, teamID, squadID, forceKill> Move a player to another team and squad admin.killPlayer <name> Kill a player without scoring effects punkBuster.isActive Returns whether or not PunkBuster currently is active punkBuster.activate Attempt to activate PunkBuster if it is not currently running punkBuster.pb_sv_command <command> Send a raw PunkBuster command to the PunkBuster server gameAdmin.load Load list of game admins from file gameAdmin.save Save list of game admins to file gameAdmin.add <player> <restrLevel> Add player to list of game admins gameAdmin.remove <player> Remove player from list of game admins gameAdmin.list Return list of game admins banList.load Load list of banned players/IPs/GUIDs from file banList.save Save list of banned players/IPs/GUIDs to file banList.add <id-type, id, timeout, reason> Add player/IP/GUID to ban list for a certain amount of time banList.remove <id-type, id> Remove player/IP/GUID from ban list banList.clear Clears ban list banList.list [startIndex] Return part of the list of banned players/IPs/GUIDs reservedSlotsList.load Load list of reserved soldier names from file reservedSlotsList.save Save list of reserved soldier names to file reservedSlotsList.add <name> Add <name> to list of players who can use the reserved slots reservedSlotsList.remove <name> Remove <name> from list of players who can use the reserved slots reservedSlotsList.clear Clear reserved slots list reservedSlotsList.list Retrieve list of players who can utilize the reserved slots mapList.load Load list of maps from disk mapList.save Save list of maps to disk mapList.add <map> <gamemode> <rounds> <offset> Insert map at specified offset in map list mapList.remove <index> Remove specified map from map list mapList.clear Clear map list mapList.list Returns entire map list

mapList.setNextMapIndex <index> Set which map to switch to at end of current round mapList.getMapIndices Get indices for current & next map mapList.getRounds Get current round and number of rounds mapList.endRound <teamID> End current round, declaring the specified team as winners mapList.runNextRound Abort current round and move on to next mapList.restartRound Restart current round mapList.availableMaps Currently broken! vars.serverName [name] Set the server name vars.gamePassword [password] Set the game password for the server vars.autoBalance [enabled] Set if the server should autobalance vars.roundStartPlayerCount [numPlayers] Set minimum numbers of players to go from preround to in-round vars.roundRestartPlayerCount [numPlayers] Set minimum numbers of players to go from in-round to preround vars.serverMessage TODO: document vars.killRotation TODO: document vars.friendlyFire [enabled] Set if the server should allow team damage vars.maxPlayers [nr of players] Set desired maximum number of players vars.bannerUrl [url] TODO: document vars.serverDescription [description] TODO: document vars.killCam [enabled] Set if killcam is enabled vars.miniMap [enabled] Set if minimap is enabled vars.hud [enabled] Set if HUD is enabled vars.crossHair [enabled] Set if crosshair for all weapons is enabled vars.3dSpotting [enabled] Set if spotted targets are visible in the 3d-world vars.miniMapSpotting [enabled] Set if spotted targets are visible on the minimap vars.nameTag [enabled] Set if nametags should be displayed vars.3pCam [enabled] Set if allowing to toggle to third person vehicle cameras vars.regenerateHealth [enabled] Set if health regeneration should be active vars.teamKillCountForKick [count] Set number of teamkills allowed during a round vars.teamKillValueForKick [count] Set max kill-value allowed for a player before he/she is kicked vars.teamKillValueIncrease [count] Set kill-value increase for a teamkill vars.teamKillValueDecreasePerSecond [count] Set kill-value decrease per second vars.teamKillKickForBan [count] Set number of team-kill kicks that will lead to permaban vars.idleTimeout [time] Set idle timeout vars.idleBanRounds [enabled] Set how many rounds idle timeout should ban (if at all) vars.vehicleSpawnAllowed [enabled] Set whether vehicles should spawn in-game vars.vehicleSpawnDelay [modifier: percent] Set vehicle spawn delay scale factor vars.soldierHealth [modifier: percent] Set soldier max health scale factor vars.playerRespawnTime [modifier: percent] Set player respawn time scale factor vars.playerManDownTime [modifier: percent] Set player man-down time scale factor vars.bulletDamage [modifier: percent] Set bullet damage scale factor vars.onlySquadLeaderSpawn [enabled] Set if players can only spawn on their squad leader

vars.roundsPerMap

TODO: investigate this

Misc
Request: Response: Response: Response: login.plainText <password: string> OK - Login successful, you are now logged in regardless of prior status InvalidPassword - Login unsuccessful, logged-in status unchanged PasswordNotSet - Login unsuccessful, logged-in status unchanged

Response: InvalidArguments Effect: Attempt to login to game server with password <password> Comments: If you are connecting to the admin interface over the internet, then use login.hashed instead to avoid having evildoers sniff the admin password

Request: Response: Response: Response: Effect: Comments: password.

login.hashed OK <salt: HexString> - Retrieved salt for the current connection PasswordNotSet - No password set for server, login impossible InvalidArguments Retrieves the salt, used in the hashed password login process This is step 1 in the 2-step hashed password process. When using this people cannot sniff your admin

Request: Response: Response: Response: Response: Effect: Comments: password.

login.hashed <passwordHash: HexString> OK - Login successful, you are now logged in regardless of prior status PasswordNotSet - No password set for server, login impossible InvalidPasswordHash - Login unsuccessful, logged-in status unchanged InvalidArguments Sends a hashed password to the server, in an attempt to log in This is step 2 in the 2-step hashed password process. When using this people cannot sniff your admin

Request: Response: Response: Effect:

logout OK InvalidArguments Logout from game server

- You are now logged out regardless of prior status

Request: Response: Response: Effect:

quit OK InvalidArguments Disconnect from server

Request: Response: Response: Effect: Comments:

version OK BF3 <version> InvalidArguments Reports game server type, and build ID Game server type and build ID uniquely identify the server, and the protocol it is running.

Request: Response: Response: Effect:

listPlayers <players: player subset> OK <player info> InvalidArguments Return list of all players on the server, but with zeroed out GUIDs

Request: Response: Response: Response: Effect:

admin.eventsEnabled [enabled: boolean] OK - for set operation OK <enabled: boolean> - for get operation InvalidArguments Set whether or not the server will send events to the current connection

Request: Response: Response: Response: Response: Effect:

admin.password [password: password] OK - for set operation OK <password> - for get operation InvalidArguments InvalidPassword - password does not conform to password format rules Set the admin password for the server, use it with an empty string("") to reset

Request: Response: Response: Effect:

admin.help OK <all commands available on server, as separate words> InvalidArguments Report which commands the server knows about

PunkBuster
Request: Response: Effect: punkBuster.isActive OK <active: Boolean> Query whether the PunkBuster server module is active

Request: Response: Effect:

punkBuster.activate OK Attempt to activate PunkBuster server module if it currently is inactive

Request: Response: Response: Response: Effect: Comment:

punkBuster.pb_sv_command <command: string> OK - Command sent to PunkBuster server module InvalidArguments InvalidPbServerCommand - Command does not begin with pb_sv_ Send a raw PunkBuster command to the PunkBuster server The entire command is to be sent as a single string. Dont split it into multiple words.

Query
Request: Response: serverInfo OK <serverName: string> <current playercount: integer> <max playercount: integer> <current gamemode: string> <current map: string> <roundsPlayed: integer> <roundsTotal: string> <scores: team scores> <onlineState: online state> <ranked: boolean> <punkBuster: boolean> <hasGamePassword: boolean> <serverUpTime: seconds> <roundTime: seconds> InvalidArguments

Response:

Effect: Comments: levels.

Query for brief server info. This command can be performed without being logged in. Some of the arguments will be empty or zero when the server isnt fully up and running or between

Communication
Request: Response: Response: Response: Response: Response: Response: Effect: NOTE admin.say <message: string> <players: player subset> OK InvalidArguments InvalidTeam InvalidSquad InvalidPlayer TooLongMessage Send a chat message to players. The message must be less than 128 characters long. current it is only possible to send messages to all, teams or squads not to individual players!

Manage players
Request: Response: Response: Response: Effect: Comments: admin.kickPlayer <soldier name: player name> [reason: string] OK - Player did exist, and got kicked InvalidArguments PlayerNotFound - Player name doesn't exist on server Kick player <soldier name> from server Reason text is optional. Default reason is Kicked by administrator.

Request: Response: Response: Effect:

admin.listPlayers <players: player subset> OK <player info> InvalidArguments Return list of all players on the server; including guids

Request: Response: Response: Response: Response: Response: Response: Response: Response: Response: Effect: Comment:

admin.movePlayer <name: player name> <teamId: Team ID> <squadId: Squad ID> <forceKill: boolean> OK InvalidArguments InvalidTeamId InvalidSquadId InvalidPlayerName InvalidForceKill PlayerNotDead - Player is alive and forceKill is false SetTeamFailed SetSquadFailed Move a player to another team and/or squad Only works if player is dead. This command will kill player if forceKill is true

Request: Response: Response: Response: Response: Effect:

admin.killPlayer <name: player name> OK InvalidArguments InvalidPlayerName SoldierNotAlive Kill a player without any stats effect

Banning
Request: Response: Response: Response: Response: Response: Response: Response: Effect: Comment: banList.load OK InvalidArguments InvalidIdType InvalidBanType InvalidTimeStamp - A time stamp could not be read IncompleteBan - Incomplete ban entry at end of file AccessError - Could not read from file Load list of banned players/IPs/GUIDs from file 5 lines (Id-type, id, ban-type, time and reason) are retrieved for every ban in the list. Entries read before getting InvalidIdType, InvalidBanType, InvalidTimeStamp and IncompleteBan is still loaded.

Request: Response: Response: Response: Effect: Comment:

banList.save OK InvalidArguments AccessError - Could not save to file Save list of banned players/IPs/GUIDs to file 5 lines (Id-type, id, ban-type, time and reason) are stored for every ban in the list. Every line break has windows \r\n characters.

Request: Response: Response: Response: Effect: Comments:

banList.add <id-type: id-type> <id: string> <timeout: timeout> [reason: string] OK InvalidArguments BanListFull Add player to ban list for a certain amount of time Adding a new name/IP/GUID ban will replace any previous ban for that name/IP/GUID timeout can take three forms: perm - permanent [default] round - until end of round seconds <integer> - number of seconds until ban expires Id-type can be any of these name A soldier name ip An IP address guid A player guid Id could be either a soldier name, ip address or guid depending on id-type.

Reason is optional and defaults to Banned by admin; max length 80 chars.

Request: Response: Response: Response: Effect:

banList.remove <id-type: id-type> <id: string> OK InvalidArguments NotFound - Id not found in banlist; banlist unchanged Remove name/ip/guid from banlist

Request: Response: Response: Effect:

banList.clear OK InvalidArguments Clears ban list

Request: Response: Response: Effect: Comment:

banList.list [startOffset: integer] OK <player ban entries> InvalidArguments Return a section of the list of banned players name/IPs/GUIDs. The list starts with a number telling how many bans the call returns. After that, 5 words (Id-type, id, ban-type, time and reason) are received for every ban in the list. If no startOffset is supplied, it is assumed to be 0. At most 100 entries will be returned by the command. To retrieve the full list, perform several banList.list calls with increasing offset until the server returns 0 entries. (There is an unsolved synchronization problem hidden there: if a ban expires during this process, then one other entry will be skipped during retrieval. There is no known workaround for this.)

MapList
Request: Response: Response: Response: Response: Response: Response: Response: Effect: Comments: mapList.load OK InvalidArguments AccessError file I/O error InvalidMap incorrect map name InvalidGameModeOnMap gamemode does not exist for that map InvalidRoundsPerMap number of rounds must be 1 or greater Full Map list maximum size has been reached Clears the map list and loads it from disk again. If loading fails, the map list will be in an undefined state.

Request: Response: Response:

mapList.save OK InvalidArguments

Response: Effect:

AccessError Saves the map list to disk.

file I/O error

Request: Response: Response: Response: Response: Response: Response: Response: Effect:

mapList.add <map: string> <gamemode: string> <rounds: integer> [index: integer] OK InvalidArguments InvalidMap incorrect map name InvalidGameModeOnMap gamemode does not exist for that map InvalidRoundsPerMap number of rounds must be 1 or greater Full Map list maximum size has been reached InvalidMapIndex Index value is out of range Adds the map <map>, with gamemode <gamemode>, for <rounds> rounds, to the maplist. If <index> is not specified, it is appended to the end; otherwise, it is inserted before the map which is currently at position <index>.

Request: Response: Response: Response: Effect:

mapList.remove <index: integer> OK InvalidArguments InvalidMapIndex Index value is out of range Removes the map at offset <index> from the maplist.

Request: Response: Response: Effect:

mapList.clear OK InvalidArguments Clears the map list.

Request: Response: Response: Effect:

mapList.list OK <entire map list: MapList> InvalidArguments Returns the entire map list.

Request: Response: Response: Response: Effect:

mapList.setNextMapIndex <index: integer> OK InvalidArguments InvalidMapIndex Index value is out of range Specifies which map to switch to once the current round completes. If there are rounds remaining on the current map, those rounds will be skipped.

Request: Response:

mapList.runNextRound OK

Response: Effect:

InvalidArguments Switches immediately to the next round, without going through the end-of-round sequence.

Request: Response: Response: Effect:

mapList.restartRound OK InvalidArguments Restarts the current round, without going through the end-of-round sequence.

Request: Response: Response: Effect:

mapList.endRound <winner: Team ID> OK InvalidArguments End the current round, declaring <winner> as the winning team

Request: Response: Effect:

mapList.availableMaps <> OK Currently broken!

Variables
Request: Response: Response: Response: Response: Effect: vars.serverName [name: string] OK - for set operation OK <name> - for get operation InvalidArguments TooLongName - for set operation Set server name

Request: Response: Response: Response: Response: Response: Effect:

vars.gamePassword [password: password] OK - for set operation OK <password> - for get operation InvalidArguments InvalidPassword - password does not conform to password format rules InvalidConfig - password cant be set if ranked is enabled Set the game password for the server, use it with an empty string("") to reset

Request: Response: Response: Response: Effect:

vars.autoBalance [enabled: boolean] OK - for set operation OK <enabled: boolean> - for get operation InvalidArguments Set if the server should autobalance

Request: Response: Response: Response: Response: Effect: Delay: Comment:

vars.friendlyFire [enabled: boolean] OK - for set operation OK <enabled: boolean> - for get operation InvalidArguments LevelNotLoaded - for set operation Set if the server should allow team damage Works after round restart Not available during level load.

Request: Response: Response: Response: Response: Effect: Comment: engine

vars.maxPlayers [nr of players: integer] OK - for set operation OK <nr of players: integer> - for get operation InvalidArguments InvalidNrOfPlayers - Player limit must be in the range 8..32 Set desired maximum number of players The effective maximum number of players is also effected by the server provider, and the game

Request: Response: Response: Response: Effect: Delay:

vars.killCam [enabled: boolean] OK - for set operation OK <enabled: boolean> - for get operation InvalidArguments Set if killcam is enabled Works after map switch

Request: Response: Response: Response: Effect: Delay:

vars.miniMap [enabled: boolean] OK - for set operation OK <enabled: boolean> - for get operation InvalidArguments Set if minimap is enabled Works after map switch

Request: Response: Response: Response: Effect: Delay:

vars.hud [enabled: boolean] OK - for set operation OK <enabled: boolean> - for get operation InvalidArguments Set if players hud is available Works after round restart

Request: Response: Response: Response:

vars.crossHair [enabled: boolean] OK - for set operation OK <enabled: boolean> - for get operation InvalidArguments

Effect: Delay:

Set if crosshair for all weapons is enabled Works after map switch

Request: Response: Response: Response: Effect: Delay:

vars.3dSpotting [enabled: boolean] OK - for set operation OK <enabled: boolean> - for get operation InvalidArguments Set if spotted targets are visible in the 3d-world Works after map switch

Request: Response: Response: Response: Effect: Delay:

vars.miniMapSpotting [enabled: boolean] OK - for set operation OK <enabled: boolean> - for get operation InvalidArguments Set if spotted targets are visible on the minimap Works after map switch

Request: Response: Response: Response: Effect: Delay:

vars.nameTag [enabled: boolean] OK - for set operation OK <enabled: boolean> - for get operation InvalidArguments Set if nametags should be displayed Works after map switch

Request: Response: Response: Response: Effect: Delay:

vars.3pCam [enabled: boolean] OK - for set operation OK <enabled: boolean> - for get operation InvalidArguments Set if players should be allowed to switch to third-person vehicle cameras Unknown

Request: Response: Response: Response: Effect: Delay:

vars.regenerateHealth [enabled: boolean] OK - for set operation OK <enabled: boolean> - for get operation InvalidArguments Set if players health regeneration is active Instantaneous

Request: Response: Response: Response:

vars.teamKillCountForKick [count: integer] OK - for set operation OK <count: integer> - for get operation InvalidArguments

Effect: Delay:

Set number of teamkills allowed during one round, before the game kicks the player in question Set to 0 to disable kill counting Instantaneous

Request: Response: Response: Response: Effect: Delay:

vars.teamKillValueForKick [count: integer] OK - for set operation OK <count: integer> - for get operation InvalidArguments Set the highest kill-value allowed before a player is kicked for teamkilling Set to 0 to disable kill value mechanism Instantaneous

Request: Response: Response: Response: Effect: Delay:

vars.teamKillValueIncrease [count: integer] OK - for set operation OK <count: integer> - for get operation InvalidArguments Set the value of a teamkill (adds to the players current kill-value) Instantaneous

Request: Response: Response: Response: Effect: Delay: Request: Response: Response: Response: Effect: Delay:

vars.teamKillValueDecreasePerSecond [count: integer] OK - for set operation OK <count: integer> - for get operation InvalidArguments Set how much every players kill-value should decrease per second Instantaneous vars.teamKillKickForBan [count: integer] OK - for set operation OK <count: integer> - for get operation InvalidArguments Set how many teamkill-kicks will lead to permaban Set to 0 to disable feature Instantaneous

Request: Response: Response: Response: Effect: Delay:

vars.idleTimeout [time: seconds] OK - for set operation OK <time: seconds> - for get operation InvalidArguments Set how many seconds a player can be idle before he/she is kicked from server Set to 0 to disable idle kick Instantaneous

Request: Response: Response: Response: Effect: Delay:

vars.idleBanRounds [number of rounds: integer] OK - for set operation OK <rounds: integer> - for get operation InvalidArguments Set how many rounds an idle-kick person should be banned Set to 0 to disable ban mechanism Instantaneous

Request: Response: Response: Response: Effect: Delay:

vars.roundStartPlayerCount [nr of players: integer] OK - for set operation OK < nr of players: integer > - for get operation InvalidArguments Set the minimum number of players required to begin a round Instantaneous

Request: Response: Response: Response: Effect: Delay:

vars.roundRestartPlayerCount [nr of players: integer] OK - for set operation OK < nr of players: integer > - for get operation InvalidArguments Set the minimum number of players for the round to restart in pre-round Instantaneous

Request: Response: Response: Response: Effect: Delay:

vars.vehicleSpawnAllowed [enabled: boolean] OK - for set operation OK <enabled: boolean> - for get operation InvalidArguments Set whether vehicles should spawn in-game Instantaneous

Request: Response: Response: Response: Effect: Delay:

vars.roundRestartPlayerCount [modifier: integer] OK - for set operation OK < modifier: integer > - for get operation InvalidArguments Set vehicle spawn delay scale factor Instantaneous

Request: Response: Response: Response: Effect: Delay:

vars.soldierHealth [modifier: integer] OK - for set operation OK < modifier: integer > - for get operation InvalidArguments Set soldier max health scale factor Instantaneous

Request: Response: Response: Response: Effect: Delay:

vars.playerRespawnTime [modifier: integer] OK - for set operation OK < modifier: integer > - for get operation InvalidArguments Set player respawn time scale factor Instantaneous

Request: Response: Response: Response: Effect: Delay:

vars.playerManDownTime [modifier: integer] OK - for set operation OK < modifier: integer > - for get operation InvalidArguments Set player man-down time scale factor Instantaneous

Request: Response: Response: Response: Effect: Delay:

vars.bulletDamage [modifier: integer] OK - for set operation OK < modifier: integer > - for get operation InvalidArguments Set bullet damage scale factor Instantaneous

Request: Response: Response: Response: Effect: Delay:

vars.onlySquadLeaderSpawn [enabled: boolean] OK - for set operation OK <enabled: boolean> - for get operation InvalidArguments Set if players can only spawn on their squad leader Instantaneous

You might also like