plugin exposing an API to the Team Fortress 2 client
- general
- fixed issues with retrieving entities
- general
- ported to Linux
- general
- fixed crashes caused by changes outside of the game thread
- general
- rewrote onto StatusSpec plugin base
- added options to start/stop the server and change server port
- console
- added convar change command
- added convar query command
- added convar change notification
- game info
- added new module
- general
- initial version
- console
- added module
This plugin exposes a WebSockets server on port 2006. Information on communications from and to it can be found below.
executes a command
Call Info
type
:command
command
: command to be executed
Example Call
{
"type": "command",
"command": "hud_reloadscheme"
}
outputs everything printed to the console
Notification Info
type
:consoleprint
message
type
:color
,regular
,debug
text
: message to be printedcolor
(only withtype
:color
)r
: red value of message to be printedg
: green value of message to be printedb
: blue value of message to be printeda
: alpha value of message to be printed
Example Notification
{
"message": {
"color": {
"a": 255,
"b": 255,
"g": 255,
"r": 255
},
"text": " 0:Stopped sound ui\\buttonclickrelease.wav\n",
"type": "color"
},
"type": "consoleprint"
}
returns autocomplete results for a command
Call Info
type
:autocomplete
partial
: string to check for autocomplete results
Example Call
{
"type": "autocomplete",
"partial": "playdemo "
}
Response Info
type
:autocompleteresults
partial
: the string for which autocomplete results were compiledresults
: an array of strings which possible command completions
Example Response
{
"partial": "playdemo ",
"results": [
"playdemo esea_match_3739222",
"playdemo esea_match_3774605",
"playdemo esea_match_3780773",
"playdemo esea_match_3797534"
],
"type": "autocompleteresults"
}
returns information about a ConVar
Call Info
type
:convarquery
name
: ConVar name
Example Call
{
"type": "convarquery",
"name": "externalextensions_port"
}
Response Info
type
:convarqueryresult
name
: name of ConVar queriedexists
: whether the ConVar exists`help
(only withexists
:true
): help string of the ConVarvalue
(only withexists
:true
): the value of the ConVar
Example Response
{
"exists": true,
"help": "port to run the WebSockets server on",
"name": "externalextensions_port",
"type": "convarqueryresult",
"value": "2006"
}
changes the value of a ConVar
Call Info
type
:convarchange
name
: ConVar namevalue
: new ConVar value
Example Call
{
"type": "convarchange",
"name": "sv_cheats",
"value": "1"
}
notification of a ConVar value change
Notification Info
type
:convarchanged
name
: name of ConVar changedoldvalue
: old value of ConVarnewvalue
: new value of ConVar
Example Notification
{
"name": "sv_cheats",
"newvalue": "1",
"oldvalue": "0",
"type": "convarchanged"
}
retrieve info about the current game
Call Info
type
:gameinforequest
Example Call
{
"type": "gameinforequest"
}
Response Info
type
:gameinfo
client
steam
: the Steam ID of the current username
: the Steam name of the current user
ingame
: whether the TF2 client is in a gamecontext
(only withingame
:true
)type
: the current game type (demo
,sourcetv
, orgame
)tick
(only withtype
:demo
): the current tick of the playing demopaused
(only withtype
:demo
): whether the demo is pausedaddress
(only withtype
:sourcetv
ortype
:game
): the address to the current serverpassword
(only withtype
:sourcetv
ortype
:game
): the password to the current server
map
(only withingame
:true
): the name of the current mapplayers
(only withingame
:true
): an array of player infoindex
: the index of the playerlocal
: whether the player is the local playername
: the name of the playersteam
: the Steam ID of the playerobsmode
: the current observer mode of the playerobstarget
: the current observer target of the playerteam
: the team the player is onalive
: whether the player is aliveposition
: the current position of the playerx
: the current x position of the playery
: the current y position of the playerz
: the current z position of the player
health
: the current health of the playermaxhealth
: the maximum health of the playerclass
: the current class of the playerconditions
: an array indicating whether a player has a condition with the specified index
Example Response
{
"client": {
"name": "[fwdcp] tsc",
"steam": "76561198043850090"
},
"context": {
"paused": false,
"tick": 432,
"type": "demo"
},
"ingame": true,
"map": "maps/cp_process_final.bsp",
"players": [
{
"alive": false,
"condition": [
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false
],
"health": 1,
"index": 1,
"local": true,
"maxhealth": 1,
"name": "ESEA SourceTV",
"obsmode": 6,
"position": {
"x": 0,
"y": 0,
"z": -427
},
"steam": "0",
"team": "spectator"
},
{
"alive": true,
"class": "demoman",
"condition": [
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
true,
false,
true,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false
],
"health": 225,
"index": 2,
"local": false,
"maxhealth": 175,
"name": "eLv-Bdonski",
"obsmode": 0,
"obstarget": 8,
"position": {
"x": 4346.25,
"y": 1550.125,
"z": 576
},
"steam": "76561198014045134",
"team": "red"
},
{
"alive": true,
"class": "soldier",
"condition": [
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false
],
"health": 200,
"index": 3,
"local": false,
"maxhealth": 200,
"name": "20b ash",
"obsmode": 0,
"obstarget": 5,
"position": {
"x": -4816,
"y": -1280,
"z": 576
},
"steam": "76561198040409232",
"team": "blue"
},
{
"alive": true,
"class": "scout",
"condition": [
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false
],
"health": 125,
"index": 4,
"local": false,
"maxhealth": 125,
"name": "eLv-Decimate",
"obsmode": 0,
"obstarget": 4,
"position": {
"x": 4864,
"y": 1344,
"z": 576
},
"steam": "76561197992409479",
"team": "red"
},
{
"alive": true,
"class": "scout",
"condition": [
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false
],
"health": 125,
"index": 5,
"local": false,
"maxhealth": 125,
"name": "20b paragon",
"obsmode": 0,
"position": {
"x": -4864,
"y": -1216,
"z": 576
},
"steam": "76561198029991763",
"team": "blue"
},
{
"alive": true,
"class": "soldier",
"condition": [
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false
],
"health": 200,
"index": 6,
"local": false,
"maxhealth": 200,
"name": "eLv-Ma3la",
"obsmode": 0,
"obstarget": 11,
"position": {
"x": 4863.875,
"y": 1216,
"z": 576
},
"steam": "76561198035096199",
"team": "red"
},
{
"alive": true,
"class": "scout",
"condition": [
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false
],
"health": 125,
"index": 7,
"local": false,
"maxhealth": 125,
"name": "20b cyzer",
"obsmode": 0,
"obstarget": 5,
"position": {
"x": -4864,
"y": -1344,
"z": 576
},
"steam": "76561197966106312",
"team": "blue"
},
{
"alive": true,
"class": "medic",
"condition": [
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false
],
"health": 150,
"index": 8,
"local": false,
"maxhealth": 150,
"name": "eLv-TheFragile",
"obsmode": 0,
"obstarget": 2,
"position": {
"x": 4815.25,
"y": 1279.875,
"z": 576
},
"steam": "76561197971124276",
"team": "red"
},
{
"alive": true,
"class": "scout",
"condition": [
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false
],
"health": 125,
"index": 9,
"local": false,
"maxhealth": 125,
"name": "eLv-alfa-",
"obsmode": 0,
"obstarget": 11,
"position": {
"x": 4752,
"y": 1408,
"z": 576
},
"steam": "76561197998890766",
"team": "red"
},
{
"alive": true,
"class": "demoman",
"condition": [
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
true,
false,
true,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false
],
"health": 223,
"index": 10,
"local": false,
"maxhealth": 175,
"name": "20b deadbolt",
"obsmode": 0,
"obstarget": 3,
"position": {
"x": -4395,
"y": -1490,
"z": 576
},
"steam": "76561197999131282",
"team": "blue"
},
{
"alive": true,
"class": "soldier",
"condition": [
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false
],
"health": 200,
"index": 11,
"local": false,
"maxhealth": 200,
"name": "eLv-rando",
"obsmode": 0,
"obstarget": 6,
"position": {
"x": 4751.5,
"y": 1152,
"z": 576
},
"steam": "76561197982325629",
"team": "red"
},
{
"alive": true,
"class": "soldier",
"condition": [
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false
],
"health": 116,
"index": 12,
"local": false,
"maxhealth": 200,
"name": "20b grape",
"obsmode": 0,
"obstarget": 4,
"position": {
"x": -4267.99755859375,
"y": -1667.929931640625,
"z": 615.50390625
},
"steam": "76561198005250485",
"team": "blue"
},
{
"alive": true,
"class": "medic",
"condition": [
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false
],
"health": 150,
"index": 13,
"local": false,
"maxhealth": 150,
"name": "20b ninjanick",
"obsmode": 0,
"obstarget": 3,
"position": {
"x": -4751.125,
"y": -1375.8870849609375,
"z": 575.6149291992188
},
"steam": "76561198000609634",
"team": "blue"
}
],
"type": "gameinfo"
}