STEAMWORKSquery – Arma 3

From Bohemia Interactive Community
Jump to navigation Jump to search
m (Text replacement - ";[ ]+ " to "; ")
m (Some wiki formatting)
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
===Available functionality===
{{TOC|side}}
== Available Functionality ==


Steam API provides an ability to register a game server to Steam master server for player to find it and get it is ip and port, <br>
Steam API provides an ability to register a game server to Steam master server for players to find it and get its ip and port, that is later used by the client to directly connect to the game server.<br>
that is later used by the client to directly connect to the game server. <br>  
In order to players find/select server they want the game server has to send an information about itself to Steam master server.<br>
In order to players find/select server they want the game server has to send an information about itself to Steam master server. <br>  
This information could be used to filter out server the player is not interested in.
This information could be used to filter out server the player is not interested in.


=== Server query ===
== Server Query ==
Available means to set information about the server (what can be set to Steam master server and be retrieved by clients from Steam). <br>
Values set by (marked by the ''orange italic underlined text ''&nbsp;) functions are accessible by the clients, rest is used only by the Steam master server.


==== Main Table ====
Available means to set information about the server (what can be set to Steam master server and be retrieved by clients from Steam).<br>
Values set by (marked by the ''orange italic underlined text '') functions are accessible by the clients, rest is used only by the Steam master server.
 
=== Main Table ===


{| class="wikitable"
{| class="wikitable"
Line 20: Line 21:


|-
|-
| ''SteamGameServer_Init''
| ''SteamGameServer_Init''
| &nbsp;
|
| &nbsp;
|
| Initialize steam server object, and set server properties which may not be changed.  
| Initialize steam server object, and set server properties which may not be changed.


Sets the version of the server.
Sets the version of the server.
| To set version of the server
| To set version of the server


|-
|-
| SetProduct()
| SetProduct()
| string
| string
| &nbsp;
|
| Game product identifier. Identifies to what Steam game the session belongs.
| Game product identifier. Identifies to what Steam game the session belongs.
| constant string "Arma3" for all sessions
| constant string "Arma3" for all sessions


|-
|-
| ''SetGameDescription()''
| ''SetGameDescription()''
| string
| string
| 64 chars
| 64 chars
| Description of the game. &nbsp;
| Description of the game.


This is a required field and is displayed in the steam server browser
This is a required field and is displayed in the steam server browser
| mission name
| mission name


|-
|-
| ''SetModDir()''
| ''SetModDir()''
| string
| string
| 32 chars
| 32 chars
| If your game is a "mod," pass the string that identifies it.
| If your game is a "mod," pass the string that identifies it.
| constant string "Arma3" for all sessions
| constant string "Arma3" for all sessions


|-
|-
| SetDedicatedServer()
| SetDedicatedServer()
| bool
| bool
| true/false
| true/false
| Is this is a dedicated server? &nbsp;The default value is false.
| Is this is a dedicated server? The default value is false.
| set to true if server is dedicated, false otherwise
| set to true if server is dedicated, false otherwise


|-
|-
| ''SetMaxPlayerCount''
| ''SetMaxPlayerCount''
| int
| int
| &nbsp;
|
| Max player count that will be reported to server browser and client queries
| Max player count that will be reported to server browser and client queries
| maximum possible number of players in the mission
| maximum possible number of players in the mission


|-
|-
| ''SetBotPlayerCount''
| ''SetBotPlayerCount''
| int
| int
| &nbsp;
|
| Number of bots. &nbsp;Default value is zero
| Number of bots. Default value is zero
| not used
| not used


|-
|-
| ''SetServerName''
| ''SetServerName''
| string
| string
| 64 chars
| 64 chars
| Set the name of server as it will appear in the server browser
| Set the name of server as it will appear in the server browser
| game session name
| game session name


|-
|-
| ''SetMapName''
| ''SetMapName''
| string
| string
| 32 chars
| 32 chars
| Set name of map to report in the server browser
| Set name of map to report in the server browser
| name of the map (altis, stratis...)
| name of the map (altis, stratis...)


|-
|-
| ''SetPasswordProtected''
| ''SetPasswordProtected''
| bool
| bool
| true/false
| true/false
| If session is password protected
| If session is password protected
| set to true if server is password protected
| set to true if server is password protected


|-
|-
| SetSpectatorPort
| SetSpectatorPort
| int
| int
| &nbsp;
|
| Spectator server. The default value is zero, meaning the service is not used.
| Spectator server. The default value is zero, meaning the service is not used.
| not used
| not used


|-
|-
| SetSpectatorServerName
| SetSpectatorServerName
| char
| char
| 32 chars
| 32 chars
| Name of the spectator server. &nbsp;(Only used if spectator port is nonzero.)
| Name of the spectator server. (Only used if spectator port is nonzero.)
| not used
| not used


|-
|-
| ''SetGameTags''
| ''SetGameTags''
| char
| char
| 128 chars
| 128 chars
| Sets a string defining the "gametags" for this server, this is optional,  
| Sets a string defining the "gametags" for this server, this is optional,


but if it is set it allows users to  
but if it is set it allows users to


filter in the matchmaking/server-browser interfaces based on the value
filter in the matchmaking/server-browser interfaces based on the value
| used for various parameters, described below.
| used for various parameters, described below.


|-
|-
| SetGameData
| SetGameData
| char
| char
| 2048 chars
| 2048 chars
| Sets a string defining the "gamedata" for this server, this is optional,  
| Sets a string defining the "gamedata" for this server, this is optional,


but if it is set it allows users  
but if it is set it allows users


to filter in the matchmaking/server-browser interfaces based on the valuedon't set this unless it actually changes,  
to filter in the matchmaking/server-browser interfaces based on the valuedon't set this unless it actually changes,


it's only uploaded to the master once (when acknowledged)
it's only uploaded to the master once (when acknowledged)
| not used
| not used


|-
|-
| SetRegion
| SetRegion
| char
| char
| &nbsp;
|
| Region identifier. &nbsp;
| Region identifier.


This is an optional field, the default value is empty, meaning the "world" region
This is an optional field, the default value is empty, meaning the "world" region
| not used
| not used


|-
|-
| ''SetKeyValue''
| ''SetKeyValue''
| char, char
| char, char
| 127 chars per pair
| 127 chars per pair


max 1300 for all pairs
max 1300 for all pairs
| sets key/value pair for the session.  
| sets key/value pair for the session.


All pairs can't take more than 1300 characters (about 11 pairs max).
All pairs can't take more than 1300 characters (about 11 pairs max).
| used for storing:
| used for storing:


* GLoadedContentHash (1 pair),&nbsp;
* GLoadedContentHash (1 pair),
* modHashes (2 pairs),&nbsp;
* modHashes (2 pairs),
* modNames (2 pairs),&nbsp;
* modNames (2 pairs),
* sigNames (2 pairs),&nbsp;
* sigNames (2 pairs),
* param1 (1 pair),&nbsp;
* param1 (1 pair),
* param2 (1 pair),&nbsp;
* param2 (1 pair),
* timeLeft (1 pair),&nbsp;
* timeLeft (1 pair),
* country (1 pair).
* country (1 pair).


|}
|}


=== SetGameTags in detail ===
== SetGameTags ==


Arma 3 is currently using&nbsp;SetGameTags parameter to pass multiple information about the session.&nbsp; <br>  
{{arma3}} is currently using SetGameTags parameter to pass multiple information about the session.<br>
All these parameters are encoded into the single string, each parameters is separated by the colon.&nbsp;
All these parameters are encoded into the single string, each parameters is separated by the colon.


==== Values ====
=== Values ===
* BattleEye - bool flag
* EqualModRequired - bool flag
* RequiredVersion - value
* RequiredBuildNo - value
* GameType - int
* ServerState - int
* Dedicated - bool flag
* Lock - bool flag
* VerifySignatures - bool flag
* Language
* Difficulty
* Platform - windows/linux
* LongLat - position of the server


* BattleEye - bool flag
=== Table ===
* EqualModRequired - bool flag
* RequiredVersion - value
* RequiredBuildNo - value
* GameType - int
* ServerState&nbsp;- int
* Dedicated&nbsp;- bool flag
* Lock&nbsp;- bool flag
* VerifySignatures - bool flag
* Language
* Difficulty&nbsp;
* Platform - windows/linux
* LongLat - position of the server


==== Table ====
first character of each tag defines it is type, rest is a value.
first character of each tag defines it is type, rest is a value.


{| class="wikitable"
{| class="wikitable"
! Value in the string
! Value in the string
! identifier
! identifier
! value
! value
! meaning
! meaning
! internal id
! internal id


|-
|-
| bt,
| bt,
| b
| b
| true
| true
| BattleEye
| BattleEye
| 0
| 0


|-
|-
| r120,
| r120,
| r
| r
| 1.20
| 1.20
| RequiredVersion
| RequiredVersion
| 2
| 2


|-
|-
| n0,
| n0,
| n
| n
| 0
| 0
| RequiredBuildNo
| RequiredBuildNo
| 3
| 3


|-
|-
| s1,
| s1,
| s
| s
| 1
| 1
| ServerState
| ServerState
| 5
| 5


|-
|-
| i2,
| i2,
| i
| i
| 2
| 2
| Difficulty
| Difficulty
| 10
| 10


|-
|-
| mf,
| mf,
| m
| m
| false
| false
| EqualModRequired
| EqualModRequired
| 1
| 1


|-
|-
| lf,
| lf,
| l
| l
| false
| false
| Lock
| Lock
| 7
| 7


|-
|-
| vt,
| vt,
| v
| v
| true
| true
| VerifySignatures
| VerifySignatures
| 8
| 8


|-
|-
| dt,
| dt,
| d
| d
| true
| true
| Dedicated
| Dedicated
| 6
| 6


|-
|-
| ttdm
| ttdm
| t
| t
| tdm
| tdm
| GameType
| GameType
| 4
| 4


|-
|-
| g65545,
| g65545,
| g
| g
| 65545
| 65545
| Language
| Language
| 9
| 9


|-
|-
| c0-52,
| c0-52,
| c
| c
| long.=0 lat.=52
| long.=0 lat.=52
| LongLat
| LongLat
| 12
| 12


|-
|-
| pw
| pw
| p
| p
| Windows
| Windows
| Platform
| Platform
| 11
| 11


|-
|-
| h281d1fec
| h281d1fec
| h
| h
| 281d1fec
| 281d1fec
| LoadedContentHash
| LoadedContentHash
| 13
| 13


|-
|-
| oDE
| oDE
| o
| o
| Germany
| Germany
| Country
| Country
| 14
| 14


|-
|-
| e15
| e15
| e
| e
| 15 minutes
| 15 minutes
| timeLeft
| timeLeft
| 15
| 15


|-
|-
| j0
| j0
| j
| j
| ?
| ?
| [[Description.ext#Mission_parameters|param1]]
| [[Description.ext#Mission_parameters|param1]]
| 16
| 16


|-
|-
| k0
| k0
| k
| k
| ?
| ?
| [[Description.ext#Mission_parameters|param2]]
| [[Description.ext#Mission_parameters|param2]]
| 17
| 17


|-
|-
| f1
| f1
| f
| f
| true
| true
| allowedFilePatching
| allowedFilePatching
| 18
| 18


|-
|-
| y?
| y?
| y
| y
| ?
| ?
| island? (unimplemented)
| island? (unimplemented)
| 19
| 19


|}
|}
===== Game Type =====


See <tt>CfgMPGameTypes</tt>. Note that max game tag length seems to be 8 chars.
==== Game Type ====
See {{hl|CfgMPGameTypes}}. Note that max game tag length seems to be 8 chars.


* <tt>tapex</tt> - Apex: "Campaign - Apex Protocol"
* {{hl|tapex}} - Apex: "Campaign - Apex Protocol"
* <tt>tcoop</tt> - Coop: "Cooperative Mission"
* {{hl|tcoop}} - Coop: "Cooperative Mission"
* <tt>tctf</tt> - CTF: "Capture The Flag"
* {{hl|tctf}} - CTF: "Capture The Flag"
* <tt>tcti</tt> - CTI: "Capture The Island"
* {{hl|tcti}} - CTI: "Capture The Island"
* <tt>tdm</tt> - DM: "Deathmatch"
* {{hl|tdm}} - DM: "Deathmatch"
* <tt>tendgame</tt> - EndGame: "End Game"
* {{hl|tendgame}} - EndGame: "End Game"
* <tt>tescape</tt> - Escape: "Escape"
* {{hl|tescape}} - Escape: "Escape"
* <tt>tkoth</tt> - KOTH: "King Of The Hill"
* {{hl|tkoth}} - KOTH: "King Of The Hill"
* <tt>tlastman</tt> - LastMan: "Last Man Standing"
* {{hl|tlastman}} - LastMan: "Last Man Standing"
* <tt>tpatrol</tt> - Patrol: "Combat Patrol"
* {{hl|tpatrol}} - Patrol: "Combat Patrol"
* <tt>trpg</tt> - RPG: "Role-Playing Game"
* {{hl|trpg}} - RPG: "Role-Playing Game"
* <tt>tsandbox</tt> - Sandbox: "Sandbox"
* {{hl|tsandbox}} - Sandbox: "Sandbox"
* <tt>tsc</tt> - SC: "Sector Control"
* {{hl|tsc}} - SC: "Sector Control"
* <tt>tsupport</tt> - Support: "Support"
* {{hl|tsupport}} - Support: "Support"
* <tt>tsurvive</tt> - Survive: "Survival"
* {{hl|tsurvive}} - Survive: "Survival"
* <tt>ttdm</tt> - TDM: "Team Deathmatch"
* {{hl|ttdm}} - TDM: "Team Deathmatch"
* <tt>tunknown</tt> - Unknown: "Undefined Game Mode"
* {{hl|tunknown}} - Unknown: "Undefined Game Mode"
* <tt>tvanguar</tt> - Vanguard: "Vanguard"
* {{hl|tvanguar}} - Vanguard: "Vanguard"
* <tt>twarlord</tt> - Warlords: "Warlords"
* {{hl|twarlord}} - Warlords: "Warlords"
* <tt>tzeus</tt> - Zeus: "Zeus"
* {{hl|tzeus}} - Zeus: "Zeus"


===== Server State =====
==== Server State ====
'''s''' param (see above table)
'''s''' param (see above table)
* s0 - <tt>"NONE"</tt> /* no server */  
* s0 - {{hl|"NONE"}} /* no server */
* s1 - <tt>"SELECTING MISSION"</tt> /* server created, no mission selected */
* s1 - {{hl|"SELECTING MISSION"}} /* server created, no mission selected */
* s2 - <tt>"EDITING MISSION"</tt> /* mission is in editing phase */
* s2 - {{hl|"EDITING MISSION"}} /* mission is in editing phase */
* s3 - <tt>"ASSIGNING ROLES"</tt> /* mission is selected, assigning roles */
* s3 - {{hl|"ASSIGNING ROLES"}} /* mission is selected, assigning roles */
* s4 - <tt>"SENDING MISSION"</tt> /* mission is in sending phase*/
* s4 - {{hl|"SENDING MISSION"}} /* mission is in sending phase*/
* s5 - <tt>"LOADING GAME"</tt> /* game (island, vehicles etc.) is loading */  
* s5 - {{hl|"LOADING GAME"}} /* game (island, vehicles etc.) is loading */
* s6 - <tt>"BRIEFING"</tt> /* prepared to launch game */
* s6 - {{hl|"BRIEFING"}} /* prepared to launch game */
* s7 - <tt>"PLAYING"</tt> /* game is launched */
* s7 - {{hl|"PLAYING"}} /* game is launched */
* s8 - <tt>"DEBRIEFING"</tt> /* game is finished */
* s8 - {{hl|"DEBRIEFING"}} /* game is finished */
* s9 - <tt>"MISSION ABORTED"</tt> /* game is aborted */
* s9 - {{hl|"MISSION ABORTED"}} /* game is aborted */


==== Example ====
=== Example ===


gameTags =&nbsp;bt,r120,n0,s1,i2,mf,lf,vt,dt,ttdm,g65545,c0-52,pw,<br><br>
gameTags = bt,r120,n0,s1,i2,mf,lf,vt,dt,ttdm,g65545,c0-52,pw,
Another example of GameTags returned by API for an official server: <tt>bt,r192,n145639,s3,i0,mf,lf,vt,dt,tapex,g65545,hf694848c,f0,c14-50,pw,e0,j0,k0,</tt>
Another example of GameTags returned by API for an official server: {{hl|bt,r192,n145639,s3,i0,mf,lf,vt,dt,tapex,g65545,hf694848c,f0,c14-50,pw,e0,j0,k0,}}


=== Comparsion of the current STEAMWORKS implementation to GameSpy ===
 
== STEAMWORKS vs GameSpy ==


{| class="wikitable"
{| class="wikitable"
! GS param
! GS param
! Steam equivalent
! Steam equivalent
! Description
! Description


|-
|-
| "numteams"
| "numteams"
| none
| none
| in GS always set to 0
| in GS always set to 0


|-
|-
| "password"
| "password"
| SetPasswordProtected
| SetPasswordProtected
| &nbsp;
|


|-
|-
| "param1"
| "param1"
| SetKeyValue
| SetKeyValue
| &nbsp;
|


|-
|-
| "param2"
| "param2"
| SetKeyValue
| SetKeyValue
| &nbsp;
|


|-
|-
| "equalModRequired"
| "equalModRequired"
| SetGameTags
| SetGameTags
| &nbsp;
|


|-
|-
| "reqSecureId"
| "reqSecureId"
| none
| none
| A3 no longer uses cd keys
| A3 no longer uses cd keys


|-
|-
| "dedicated"
| "dedicated"
| SetGameTags
| SetGameTags
| &nbsp;
|


|-
|-
| "sv_battleye"
| "sv_battleye"
| SetGameTags
| SetGameTags
| &nbsp;
|


|-
|-
| "gamever"
| "gamever"
| &nbsp;
|
| &nbsp;
|


|-
|-
| "timelimit"
| "timelimit"
| &nbsp;
|
| &nbsp;
|


|-
|-
| "currentVersion"
| "currentVersion"
| SteamGameServer_Init
| SteamGameServer_Init
| &nbsp;
|


|-
|-
| "requiredVersion"
| "requiredVersion"
| SetGameTags
| SetGameTags
| &nbsp;
|


|-
|-
| "difficulty"
| "difficulty"
| SetGameTags
| SetGameTags
| &nbsp;
|


|-
|-
| "verifySignatures"
| "verifySignatures"
| SetGameTags
| SetGameTags
| &nbsp;
|


|-
|-
| "numplayers"
| "numplayers"
| none
| none
| this value is update by Steam automatically
| this value is update by Steam automatically


|-
|-
| "maxplayers"
| "maxplayers"
| SetMaxPlayerCount
| SetMaxPlayerCount
| &nbsp;
|


|-
|-
| "language"
| "language"
| SetGameTags
| SetGameTags
| &nbsp;
|


|-
|-
| "hash"
| "hash"
| SetKeyValue
| SetKeyValue
| &nbsp;
|


|-
|-
| "gameState"
| "gameState"
| SetGameTags
| SetGameTags
| &nbsp;now under serverState
| now under serverState


|-
|-
| "reqBuild"
| "reqBuild"
| SetGameTags
| SetGameTags
| &nbsp;
|


|-
|-
| "mod"
| "mod"
| SetKeyValue
| SetKeyValue
| &nbsp;
|


|-
|-
| "mapname"
| "mapname"
| SetMapName
| SetMapName
| &nbsp;
|


|-
|-
| "gametype"
| "gametype"
| SetGameTags
| SetGameTags
| &nbsp;
|


|-
|-
| "mission"
| "mission"
| SetGameDescription
| SetGameDescription
| &nbsp;
|


|-
|-
| "gamename"
| "gamename"
| SetProduct()
| SetProduct()
| &nbsp;
|


|-
|-
| "signatures"
| "signatures"
| SetKeyValue
| SetKeyValue
| &nbsp;
|


|-
|-
| "modhash"
| "modhash"
| SetKeyValue
| SetKeyValue
| &nbsp;
|


|-
|-
| "gamemode"
| "gamemode"
| none
| none
| &nbsp;
|


|-
|-
| "platform"
| "platform"
| SetGameTags
| SetGameTags
| &nbsp;
|


|}
|}


=== Additional details ===
== Additional Details ==
==== Server ====
Read details about (customizable) [[server.cfg#Arma_2:_Operation_Arrowhead_.26_Arma_3_-_STEAM_ports_configuration|STEAM ports]] on server.<br>


note: reportingIP is obsolete and deprecated option in server.cfg , STEAM ports will be fixed value in relation to gameport in upcoming update (+1 query +2 report to master)
=== Server ===
 
Read details about (customizable) [[server.cfg#Arma_2:_Operation_Arrowhead_.26_Arma_3_-_STEAM_ports_configuration|STEAM ports]] on server.
{{Feature|informative|
reportingIP is obsolete and deprecated option in server.cfg, STEAM ports will be fixed value in relation to gameport in upcoming update (+1 query +2 report to master).
}}
 
=== Client ===


==== Client ====
For hosting MP game locally (so called listen server) behind NAT please ensure the default [[server.cfg#Arma_2:_Operation_Arrowhead_.26_Arma_3_-_STEAM_ports_configuration|STEAM ports]] are forwarded and open!
For hosting MP game locally (so called listen server) behind NAT please ensure the default [[server.cfg#Arma_2:_Operation_Arrowhead_.26_Arma_3_-_STEAM_ports_configuration|STEAM ports]] are forwarded and open!


Line 544: Line 550:
note: Try to join password protected server via STEAM client's server browser returns wrong password, will be fixed next patch/hotfix
note: Try to join password protected server via STEAM client's server browser returns wrong password, will be fixed next patch/hotfix


=== External documentation ===


https://developer.valvesoftware.com/wiki/Server_queries#Implementations <br>
== External Documentation ==
https://developer.valvesoftware.com/wiki/Master_Server_Query_Protocol
 
* https://developer.valvesoftware.com/wiki/Server_queries#Implementations
* https://developer.valvesoftware.com/wiki/Master_Server_Query_Protocol
 
== Server Browser Protocol ==
 
For details about SBP, see [[Arma 3: ServerBrowserProtocol3]].


=== Server Browser Protocol ===
For details about SBP see : [[Arma_3_ServerBrowserProtocol3]]


{{GameCategory|arma3|Multiplayer}}
{{GameCategory|arma3|Multiplayer}}

Latest revision as of 16:06, 31 January 2023

Available Functionality

Steam API provides an ability to register a game server to Steam master server for players to find it and get its ip and port, that is later used by the client to directly connect to the game server.
In order to players find/select server they want the game server has to send an information about itself to Steam master server.
This information could be used to filter out server the player is not interested in.

Server Query

Available means to set information about the server (what can be set to Steam master server and be retrieved by clients from Steam).
Values set by (marked by the orange italic underlined text ) functions are accessible by the clients, rest is used only by the Steam master server.

Main Table

Function/variable type max. size description what value is set by the Arma3 server
SteamGameServer_Init Initialize steam server object, and set server properties which may not be changed.

Sets the version of the server.

To set version of the server
SetProduct() string Game product identifier. Identifies to what Steam game the session belongs. constant string "Arma3" for all sessions
SetGameDescription() string 64 chars Description of the game.

This is a required field and is displayed in the steam server browser

mission name
SetModDir() string 32 chars If your game is a "mod," pass the string that identifies it. constant string "Arma3" for all sessions
SetDedicatedServer() bool true/false Is this is a dedicated server? The default value is false. set to true if server is dedicated, false otherwise
SetMaxPlayerCount int Max player count that will be reported to server browser and client queries maximum possible number of players in the mission
SetBotPlayerCount int Number of bots. Default value is zero not used
SetServerName string 64 chars Set the name of server as it will appear in the server browser game session name
SetMapName string 32 chars Set name of map to report in the server browser name of the map (altis, stratis...)
SetPasswordProtected bool true/false If session is password protected set to true if server is password protected
SetSpectatorPort int Spectator server. The default value is zero, meaning the service is not used. not used
SetSpectatorServerName char 32 chars Name of the spectator server. (Only used if spectator port is nonzero.) not used
SetGameTags char 128 chars Sets a string defining the "gametags" for this server, this is optional,

but if it is set it allows users to

filter in the matchmaking/server-browser interfaces based on the value

used for various parameters, described below.
SetGameData char 2048 chars Sets a string defining the "gamedata" for this server, this is optional,

but if it is set it allows users

to filter in the matchmaking/server-browser interfaces based on the valuedon't set this unless it actually changes,

it's only uploaded to the master once (when acknowledged)

not used
SetRegion char Region identifier.

This is an optional field, the default value is empty, meaning the "world" region

not used
SetKeyValue char, char 127 chars per pair

max 1300 for all pairs

sets key/value pair for the session.

All pairs can't take more than 1300 characters (about 11 pairs max).

used for storing:
  • GLoadedContentHash (1 pair),
  • modHashes (2 pairs),
  • modNames (2 pairs),
  • sigNames (2 pairs),
  • param1 (1 pair),
  • param2 (1 pair),
  • timeLeft (1 pair),
  • country (1 pair).

SetGameTags

Arma 3 is currently using SetGameTags parameter to pass multiple information about the session.
All these parameters are encoded into the single string, each parameters is separated by the colon.

Values

  • BattleEye - bool flag
  • EqualModRequired - bool flag
  • RequiredVersion - value
  • RequiredBuildNo - value
  • GameType - int
  • ServerState - int
  • Dedicated - bool flag
  • Lock - bool flag
  • VerifySignatures - bool flag
  • Language
  • Difficulty
  • Platform - windows/linux
  • LongLat - position of the server

Table

first character of each tag defines it is type, rest is a value.

Value in the string identifier value meaning internal id
bt, b true BattleEye 0
r120, r 1.20 RequiredVersion 2
n0, n 0 RequiredBuildNo 3
s1, s 1 ServerState 5
i2, i 2 Difficulty 10
mf, m false EqualModRequired 1
lf, l false Lock 7
vt, v true VerifySignatures 8
dt, d true Dedicated 6
ttdm t tdm GameType 4
g65545, g 65545 Language 9
c0-52, c long.=0 lat.=52 LongLat 12
pw p Windows Platform 11
h281d1fec h 281d1fec LoadedContentHash 13
oDE o Germany Country 14
e15 e 15 minutes timeLeft 15
j0 j ? param1 16
k0 k ? param2 17
f1 f true allowedFilePatching 18
y? y ? island? (unimplemented) 19

Game Type

See CfgMPGameTypes. Note that max game tag length seems to be 8 chars.

  • tapex - Apex: "Campaign - Apex Protocol"
  • tcoop - Coop: "Cooperative Mission"
  • tctf - CTF: "Capture The Flag"
  • tcti - CTI: "Capture The Island"
  • tdm - DM: "Deathmatch"
  • tendgame - EndGame: "End Game"
  • tescape - Escape: "Escape"
  • tkoth - KOTH: "King Of The Hill"
  • tlastman - LastMan: "Last Man Standing"
  • tpatrol - Patrol: "Combat Patrol"
  • trpg - RPG: "Role-Playing Game"
  • tsandbox - Sandbox: "Sandbox"
  • tsc - SC: "Sector Control"
  • tsupport - Support: "Support"
  • tsurvive - Survive: "Survival"
  • ttdm - TDM: "Team Deathmatch"
  • tunknown - Unknown: "Undefined Game Mode"
  • tvanguar - Vanguard: "Vanguard"
  • twarlord - Warlords: "Warlords"
  • tzeus - Zeus: "Zeus"

Server State

s param (see above table)

  • s0 - "NONE" /* no server */
  • s1 - "SELECTING MISSION" /* server created, no mission selected */
  • s2 - "EDITING MISSION" /* mission is in editing phase */
  • s3 - "ASSIGNING ROLES" /* mission is selected, assigning roles */
  • s4 - "SENDING MISSION" /* mission is in sending phase*/
  • s5 - "LOADING GAME" /* game (island, vehicles etc.) is loading */
  • s6 - "BRIEFING" /* prepared to launch game */
  • s7 - "PLAYING" /* game is launched */
  • s8 - "DEBRIEFING" /* game is finished */
  • s9 - "MISSION ABORTED" /* game is aborted */

Example

gameTags = bt,r120,n0,s1,i2,mf,lf,vt,dt,ttdm,g65545,c0-52,pw,

Another example of GameTags returned by API for an official server: bt,r192,n145639,s3,i0,mf,lf,vt,dt,tapex,g65545,hf694848c,f0,c14-50,pw,e0,j0,k0,


STEAMWORKS vs GameSpy

GS param Steam equivalent Description
"numteams" none in GS always set to 0
"password" SetPasswordProtected
"param1" SetKeyValue
"param2" SetKeyValue
"equalModRequired" SetGameTags
"reqSecureId" none A3 no longer uses cd keys
"dedicated" SetGameTags
"sv_battleye" SetGameTags
"gamever"
"timelimit"
"currentVersion" SteamGameServer_Init
"requiredVersion" SetGameTags
"difficulty" SetGameTags
"verifySignatures" SetGameTags
"numplayers" none this value is update by Steam automatically
"maxplayers" SetMaxPlayerCount
"language" SetGameTags
"hash" SetKeyValue
"gameState" SetGameTags now under serverState
"reqBuild" SetGameTags
"mod" SetKeyValue
"mapname" SetMapName
"gametype" SetGameTags
"mission" SetGameDescription
"gamename" SetProduct()
"signatures" SetKeyValue
"modhash" SetKeyValue
"gamemode" none
"platform" SetGameTags

Additional Details

Server

Read details about (customizable) STEAM ports on server.

reportingIP is obsolete and deprecated option in server.cfg, STEAM ports will be fixed value in relation to gameport in upcoming update (+1 query +2 report to master).

Client

For hosting MP game locally (so called listen server) behind NAT please ensure the default STEAM ports are forwarded and open!

When you have issues with the in-game server browser then try to use the STEAM client server browser instead.
STEAM > menu View > Servers > at bottom in filters choose game "Arma 3" > pick server and play
note: Try to join password protected server via STEAM client's server browser returns wrong password, will be fixed next patch/hotfix


External Documentation

Server Browser Protocol

For details about SBP, see Arma 3: ServerBrowserProtocol3.