STEAMWORKSquery – Arma 3
m (1 revision) |
m (STEAMWORKSquery description) |
||
Line 1: | Line 1: | ||
/ | ===Available functionality=== | ||
// | Steam API provides an ability to register a game server to Steam master server for player to find it and get it's ip and port, <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> | |||
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). <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==== | |||
{| style="border-spacing:0;" | |||
| style="border:none;padding:0.049cm;"| <center>'''Function/variable'''</center> | |||
| style="border:none;padding:0.049cm;"| <center>'''type'''</center> | |||
| style="border:none;padding:0.049cm;"| <center>'''max. size'''</center> | |||
| style="border:none;padding:0.049cm;"| <center>'''description'''</center> | |||
| style="border:none;padding:0.049cm;"| <center>'''what value is set by the Arma3 server'''</center> | |||
|- | |||
| style="border:none;padding:0.049cm;"| ''SteamGameServer_Init'' | |||
| style="border:none;padding:0.049cm;"| | |||
| style="border:none;padding:0.049cm;"| | |||
| style="border:none;padding:0.049cm;"| Initialize steam server object, and set server properties which may not be changed. | |||
Sets the version of the server. | |||
| style="border:none;padding:0.049cm;"| To set version of the server | |||
|- | |||
| style="border:none;padding:0.049cm;"| SetProduct() | |||
| style="border:none;padding:0.049cm;"| string | |||
| style="border:none;padding:0.049cm;"| | |||
| style="border:none;padding:0.049cm;"| Game product identifier. Identifies to what Steam game the session belongs. | |||
| style="border:none;padding:0.049cm;"| constant string "Arma3" for all sessions | |||
|- | |||
| style="border:none;padding:0.049cm;"| ''SetGameDescription()'' | |||
| style="border:none;padding:0.049cm;"| string | |||
| style="border:none;padding:0.049cm;"| 64 chars | |||
| style="border:none;padding:0.049cm;"| Description of the game. | |||
This is a required field and is displayed in the steam server browser | |||
| style="border:none;padding:0.049cm;"| mission name | |||
|- | |||
| style="border:none;padding:0.049cm;"| ''SetModDir()'' | |||
| style="border:none;padding:0.049cm;"| string | |||
| style="border:none;padding:0.049cm;"| 32 chars | |||
| style="border:none;padding:0.049cm;"| If your game is a "mod," pass the string that identifies it. | |||
| style="border:none;padding:0.049cm;"| constant string "Arma3" for all sessions | |||
|- | |||
| style="border:none;padding:0.049cm;"| SetDedicatedServer() | |||
| style="border:none;padding:0.049cm;"| bool | |||
| style="border:none;padding:0.049cm;"| true/false | |||
| style="border:none;padding:0.049cm;"| Is this is a dedicated server? The default value is false. | |||
| style="border:none;padding:0.049cm;"| set to true if server is dedicated, false otherwise | |||
|- | |||
| style="border:none;padding:0.049cm;"| ''SetMaxPlayerCount'' | |||
| style="border:none;padding:0.049cm;"| int | |||
| style="border:none;padding:0.049cm;"| | |||
| style="border:none;padding:0.049cm;"| Max player count that will be reported to server browser and client queries | |||
| style="border:none;padding:0.049cm;"| maximum possible number of players in the mission | |||
|- | |||
| style="border:none;padding:0.049cm;"| ''SetBotPlayerCount'' | |||
| style="border:none;padding:0.049cm;"| int | |||
| style="border:none;padding:0.049cm;"| | |||
| style="border:none;padding:0.049cm;"| Number of bots. Default value is zero | |||
| style="border:none;padding:0.049cm;"| not used | |||
|- | |||
| style="border:none;padding:0.049cm;"| ''SetServerName'' | |||
| style="border:none;padding:0.049cm;"| string | |||
| style="border:none;padding:0.049cm;"| 64 chars | |||
| style="border:none;padding:0.049cm;"| Set the name of server as it will appear in the server browser | |||
| style="border:none;padding:0.049cm;"| game session name | |||
|- | |||
| style="border:none;padding:0.049cm;"| ''SetMapName'' | |||
| style="border:none;padding:0.049cm;"| string | |||
| style="border:none;padding:0.049cm;"| 32 chars | |||
| style="border:none;padding:0.049cm;"| Set name of map to report in the server browser | |||
| style="border:none;padding:0.049cm;"| name of the map (altis, stratis...) | |||
|- | |||
| style="border:none;padding:0.049cm;"| ''SetPasswordProtected'' | |||
| style="border:none;padding:0.049cm;"| bool | |||
| style="border:none;padding:0.049cm;"| true/false | |||
| style="border:none;padding:0.049cm;"| If session is password protected | |||
| style="border:none;padding:0.049cm;"| set to true if server is password protected | |||
|- | |||
| style="border:none;padding:0.049cm;"| SetSpectatorPort | |||
| style="border:none;padding:0.049cm;"| int | |||
| style="border:none;padding:0.049cm;"| | |||
| style="border:none;padding:0.049cm;"| Spectator server. The default value is zero, meaning the service is not used. | |||
| style="border:none;padding:0.049cm;"| not used | |||
|- | |||
| style="border:none;padding:0.049cm;"| SetSpectatorServerName | |||
| style="border:none;padding:0.049cm;"| char | |||
| style="border:none;padding:0.049cm;"| 32 chars | |||
| style="border:none;padding:0.049cm;"| Name of the spectator server. (Only used if spectator port is nonzero.) | |||
| style="border:none;padding:0.049cm;"| not used | |||
|- | |||
| style="border:none;padding:0.049cm;"| ''SetGameTags'' | |||
| style="border:none;padding:0.049cm;"| char | |||
| style="border:none;padding:0.049cm;"| 128 chars | |||
| style="border:none;padding:0.049cm;"| 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 | |||
| style="border:none;padding:0.049cm;"| used for various parameters, described below. | |||
|- | |||
| style="border:none;padding:0.049cm;"| SetGameData | |||
| style="border:none;padding:0.049cm;"| char | |||
| style="border:none;padding:0.049cm;"| 2048 chars | |||
| style="border:none;padding:0.049cm;"| 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) | |||
| style="border:none;padding:0.049cm;"| not used | |||
|- | |||
| style="border:none;padding:0.049cm;"| SetRegion | |||
| style="border:none;padding:0.049cm;"| char | |||
| style="border:none;padding:0.049cm;"| | |||
| style="border:none;padding:0.049cm;"| Region identifier. | |||
This is an optional field, the default value is empty, meaning the "world" region | |||
| style="border:none;padding:0.049cm;"| not used | |||
|- | |||
| style="border:none;padding:0.049cm;"| ''SetKeyValue'' | |||
| style="border:none;padding:0.049cm;"| char, char | |||
| style="border:none;padding:0.049cm;"| 127 chars per pair | |||
max 1300 for all pairs | |||
| style="border:none;padding:0.049cm;"| sets key/value pair for the session. | |||
All pairs can't take more than 1300 characters (about 11 pairs max). | |||
| style="border:none;padding:0.049cm;"| 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 in detail=== | |||
Arma 3 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. | |||
====Values==== | |||
* BattleEye - bool flag | |||
* EqualModRequired - bool flag | |||
* RequiredVersion - value | |||
* RequiredBuildNo - value | |||
* GameType - int | |||
* ServerState - int | |||
* Dedicated - bool flag | |||
* Lock - bool flag | |||
* VerifySingnatures - bool flag | |||
* Language | |||
* Difficulty | |||
* Platform - windows/linux | |||
* LongLat - position of the server | |||
====Table==== | |||
first character of each tag defines it's type, rest is a value. | |||
{| style="border-spacing:0;" | |||
| style="border:none;padding:0.049cm;"| <center>'''Value in the string'''</center> | |||
| style="border:none;padding:0.049cm;"| <center>'''identifier'''</center> | |||
| style="border:none;padding:0.049cm;"| <center>'''value'''</center> | |||
| style="border:none;padding:0.049cm;"| <center>'''meaning'''</center> | |||
|- | |||
| style="border:none;padding:0.049cm;"| bt, | |||
| style="border:none;padding:0.049cm;"| b | |||
| style="border:none;padding:0.049cm;"| true | |||
| style="border:none;padding:0.049cm;"| BattleEye | |||
|- | |||
| style="border:none;padding:0.049cm;"| r120, | |||
| style="border:none;padding:0.049cm;"| r | |||
| style="border:none;padding:0.049cm;"| 1.20 | |||
| style="border:none;padding:0.049cm;"| RequiredVersion | |||
|- | |||
| style="border:none;padding:0.049cm;"| n0, | |||
| style="border:none;padding:0.049cm;"| n | |||
| style="border:none;padding:0.049cm;"| 0 | |||
| style="border:none;padding:0.049cm;"| RequiredBuildNo | |||
|- | |||
| style="border:none;padding:0.049cm;"| s1, | |||
| style="border:none;padding:0.049cm;"| s | |||
| style="border:none;padding:0.049cm;"| 1 | |||
| style="border:none;padding:0.049cm;"| ServerState | |||
|- | |||
| style="border:none;padding:0.049cm;"| i2, | |||
| style="border:none;padding:0.049cm;"| i | |||
| style="border:none;padding:0.049cm;"| 2 | |||
| style="border:none;padding:0.049cm;"| Difficulty | |||
|- | |||
| style="border:none;padding:0.049cm;"| mf, | |||
| style="border:none;padding:0.049cm;"| m | |||
| style="border:none;padding:0.049cm;"| false | |||
| style="border:none;padding:0.049cm;"| EqualModRequired | |||
|- | |||
| style="border:none;padding:0.049cm;"| lf, | |||
| style="border:none;padding:0.049cm;"| l | |||
| style="border:none;padding:0.049cm;"| false | |||
| style="border:none;padding:0.049cm;"| Lock | |||
|- | |||
| style="border:none;padding:0.049cm;"| vt, | |||
| style="border:none;padding:0.049cm;"| v | |||
| style="border:none;padding:0.049cm;"| true | |||
| style="border:none;padding:0.049cm;"| VerifySignatures | |||
|- | |||
| style="border:none;padding:0.049cm;"| dt, | |||
| style="border:none;padding:0.049cm;"| d | |||
| style="border:none;padding:0.049cm;"| true | |||
| style="border:none;padding:0.049cm;"| Dedicated | |||
|- | |||
| style="border:none;padding:0.049cm;"| ttdm | |||
| style="border:none;padding:0.049cm;"| t | |||
| style="border:none;padding:0.049cm;"| tdm | |||
| style="border:none;padding:0.049cm;"| GameType | |||
|- | |||
| style="border:none;padding:0.049cm;"| g65545, | |||
| style="border:none;padding:0.049cm;"| g | |||
| style="border:none;padding:0.049cm;"| 65545 | |||
| style="border:none;padding:0.049cm;"| Language | |||
|- | |||
| style="border:none;padding:0.049cm;"| c0-52, | |||
| style="border:none;padding:0.049cm;"| c | |||
| style="border:none;padding:0.049cm;"| long.=0 lat.=52 | |||
| style="border:none;padding:0.049cm;"| LongLat | |||
|- | |||
| style="border:none;padding:0.049cm;"| pw | |||
| style="border:none;padding:0.049cm;"| p | |||
| style="border:none;padding:0.049cm;"| Windows | |||
| style="border:none;padding:0.049cm;"| Platform | |||
|} | |||
====Example==== | |||
gameTags = bt,r120,n0,s1,i2,mf,lf,vt,dt,ttdm,g65545,c0-52,pw, | |||
===Comparsion of the current STEAMWORKS implementation to GameSpy=== | |||
{| style="border-spacing:0;" | |||
| style="border:none;padding:0.049cm;"| <center>'''GS param'''</center> | |||
| style="border:none;padding:0.049cm;"| <center>'''Steam equivalent'''</center> | |||
| style="border:none;padding:0.049cm;"| <center>'''Description'''</center> | |||
|- | |||
| style="border:none;padding:0.049cm;"| "numteams" | |||
| style="border:none;padding:0.049cm;"| none | |||
| style="border:none;padding:0.049cm;"| in GS always set to 0 | |||
|- | |||
| style="border:none;padding:0.049cm;"| "password" | |||
| style="border:none;padding:0.049cm;"| SetPasswordProtected | |||
| style="border:none;padding:0.049cm;"| | |||
|- | |||
| style="border:none;padding:0.049cm;"| "param1" | |||
| style="border:none;padding:0.049cm;"| SetKeyValue | |||
| style="border:none;padding:0.049cm;"| | |||
|- | |||
| style="border:none;padding:0.049cm;"| "param2" | |||
| style="border:none;padding:0.049cm;"| SetKeyValue | |||
| style="border:none;padding:0.049cm;"| | |||
|- | |||
| style="border:none;padding:0.049cm;"| "equalModRequired" | |||
| style="border:none;padding:0.049cm;"| SetGameTags | |||
| style="border:none;padding:0.049cm;"| | |||
|- | |||
| style="border:none;padding:0.049cm;"| "reqSecureId" | |||
| style="border:none;padding:0.049cm;"| none | |||
| style="border:none;padding:0.049cm;"| A3 no longer uses cd keys | |||
|- | |||
| style="border:none;padding:0.049cm;"| "dedicated" | |||
| style="border:none;padding:0.049cm;"| SetGameTags | |||
| style="border:none;padding:0.049cm;"| | |||
|- | |||
| style="border:none;padding:0.049cm;"| "sv_battleye" | |||
| style="border:none;padding:0.049cm;"| SetGameTags | |||
| style="border:none;padding:0.049cm;"| | |||
|- | |||
| style="border:none;padding:0.049cm;"| "gamever" | |||
| style="border:none;padding:0.049cm;"| | |||
| style="border:none;padding:0.049cm;"| | |||
|- | |||
| style="border:none;padding:0.049cm;"| "timelimit" | |||
| style="border:none;padding:0.049cm;"| | |||
| style="border:none;padding:0.049cm;"| | |||
|- | |||
| style="border:none;padding:0.049cm;"| "currentVersion" | |||
| style="border:none;padding:0.049cm;"| SteamGameServer_Init | |||
| style="border:none;padding:0.049cm;"| | |||
|- | |||
| style="border:none;padding:0.049cm;"| "requiredVersion" | |||
| style="border:none;padding:0.049cm;"| SetGameTags | |||
| style="border:none;padding:0.049cm;"| | |||
|- | |||
| style="border:none;padding:0.049cm;"| "difficulty" | |||
| style="border:none;padding:0.049cm;"| SetGameTags | |||
| style="border:none;padding:0.049cm;"| | |||
|- | |||
| style="border:none;padding:0.049cm;"| "verifySignatures" | |||
| style="border:none;padding:0.049cm;"| SetGameTags | |||
| style="border:none;padding:0.049cm;"| | |||
|- | |||
| style="border:none;padding:0.049cm;"| "numplayers" | |||
| style="border:none;padding:0.049cm;"| none | |||
| style="border:none;padding:0.049cm;"| this value is update by Steam automatically | |||
|- | |||
| style="border:none;padding:0.049cm;"| "maxplayers" | |||
| style="border:none;padding:0.049cm;"| SetMaxPlayerCount | |||
| style="border:none;padding:0.049cm;"| | |||
|- | |||
| style="border:none;padding:0.049cm;"| "language" | |||
| style="border:none;padding:0.049cm;"| SetGameTags | |||
| style="border:none;padding:0.049cm;"| | |||
|- | |||
| style="border:none;padding:0.049cm;"| "hash" | |||
| style="border:none;padding:0.049cm;"| SetKeyValue | |||
| style="border:none;padding:0.049cm;"| | |||
|- | |||
| style="border:none;padding:0.049cm;"| "gameState" | |||
| style="border:none;padding:0.049cm;"| SetGameTags | |||
| style="border:none;padding:0.049cm;"| now under serverState | |||
|- | |||
| style="border:none;padding:0.049cm;"| "reqBuild" | |||
| style="border:none;padding:0.049cm;"| SetGameTags | |||
| style="border:none;padding:0.049cm;"| | |||
|- | |||
| style="border:none;padding:0.049cm;"| "mod" | |||
| style="border:none;padding:0.049cm;"| SetKeyValue | |||
| style="border:none;padding:0.049cm;"| | |||
|- | |||
| style="border:none;padding:0.049cm;"| "mapname" | |||
| style="border:none;padding:0.049cm;"| SetMapName | |||
| style="border:none;padding:0.049cm;"| | |||
|- | |||
| style="border:none;padding:0.049cm;"| "gametype" | |||
| style="border:none;padding:0.049cm;"| SetGameTags | |||
| style="border:none;padding:0.049cm;"| | |||
|- | |||
| style="border:none;padding:0.049cm;"| "mission" | |||
| style="border:none;padding:0.049cm;"| SetGameDescription | |||
| style="border:none;padding:0.049cm;"| | |||
|- | |||
| style="border:none;padding:0.049cm;"| "gamename" | |||
| style="border:none;padding:0.049cm;"| SetProduct() | |||
| style="border:none;padding:0.049cm;"| | |||
|- | |||
| style="border:none;padding:0.049cm;"| "signatures" | |||
| style="border:none;padding:0.049cm;"| SetKeyValue | |||
| style="border:none;padding:0.049cm;"| | |||
|- | |||
| style="border:none;padding:0.049cm;"| "modhash" | |||
| style="border:none;padding:0.049cm;"| SetKeyValue | |||
| style="border:none;padding:0.049cm;"| | |||
|- | |||
| style="border:none;padding:0.049cm;"| "gamemode" | |||
| style="border:none;padding:0.049cm;"| none | |||
| style="border:none;padding:0.049cm;"| | |||
|- | |||
| style="border:none;padding:0.049cm;"| "platform" | |||
| style="border:none;padding:0.049cm;"| SetGameTags | |||
| style="border:none;padding:0.049cm;"| | |||
|} | |||
| |||
[[Category:Arma 3 Multiplayer]] | [[Category:Arma 3 Multiplayer]] |
Revision as of 17:36, 17 June 2014
Available functionality
Steam API provides an ability to register a game server to Steam master server for player to find it and get it's 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
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:
|
SetGameTags in detail
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
- VerifySingnatures - bool flag
- Language
- Difficulty
- Platform - windows/linux
- LongLat - position of the server
Table
first character of each tag defines it's type, rest is a value.
bt, | b | true | BattleEye |
r120, | r | 1.20 | RequiredVersion |
n0, | n | 0 | RequiredBuildNo |
s1, | s | 1 | ServerState |
i2, | i | 2 | Difficulty |
mf, | m | false | EqualModRequired |
lf, | l | false | Lock |
vt, | v | true | VerifySignatures |
dt, | d | true | Dedicated |
ttdm | t | tdm | GameType |
g65545, | g | 65545 | Language |
c0-52, | c | long.=0 lat.=52 | LongLat |
pw | p | Windows | Platform |
Example
gameTags = bt,r120,n0,s1,i2,mf,lf,vt,dt,ttdm,g65545,c0-52,pw,
Comparsion of the current STEAMWORKS implementation to GameSpy
"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 |