¿Necesitar ayuda? No abra un problema: pregunte en la sala de Gitter.
Un complemento de nodo-steam para contra-strike: ofensivo global.
Basado en Node-Dota2 por Rjacksonm1
Esta lista se está volviendo demasiado larga. ¿Quieres estar en eso? Envíame un mensaje sobre Gitter y hablaremos. - Joshuaferrara
Parámetros:
steamUser
: pase una instancia de Steamuser para cambiar su estado actual (en el juego/no).steamGC
: pase una instancia de SteamGamecoordinator para usar para enviar y recibir mensajes GC.debug
: un booleano que señala si imprimir información sobre las operaciones a la consola. var Steam = require ( 'steam' ) ,
steamClient = new Steam . SteamClient ( ) ,
steamUser = new Steam . SteamUser ( steamClient ) ,
steamGC = new Steam . SteamGameCoordinator ( steamClient , 730 ) ,
csgo = require ( 'csgo' ) ,
CSGO = new csgo . CSGOClient ( steamUser , steamGC , false ) ;
Todos los métodos requieren que se registre la instancia de SteamClient.
launch()
Informa a Steam que estás jugando contra el golpe: la ofensiva global, y luego inicia la comunicación con el coordinador del juego.
exit()
Le dice a Steam que no estás jugando CS: Go.
ToAccountID(steamId)
Convierte una ID de vapor de 64 bits a una ID de cuenta.
ToSteamID(accountId)
Convierte una ID de cuenta en una ID de vapor de 64 bits.
Rank.getString(int rank_id)
Convierte un entero Rank_ID en una cadena. Ej: CSGO.Rank.getString(1) = "Silver I"
Level.getString(int player_level)
Convierte un Integer Player_Level en una cadena. Ej: CSGO.Level.getString(1) = "Recruit"
matchmakingStatsRequest()
Envía un mensaje al coordinador del juego solicitando algunas estadísticas de emparejamiento. Escuche el evento matchmakingStatsData
para la respuesta del coordinador del juego. Requiere que el GC esté listo (escuche el evento ready
antes de llamar).
requestRecentGames()
Solicita una lista de juegos recientes para la cuenta registrada actualmente. Escuche el evento matchList
para la respuesta del coordinador del juego.
requestLiveGameForUser(accountId)
Solicita la información actual del juego en vivo para el usuario dado. Escuche el evento matchList
para la respuesta del coordinador del juego.
requestGame(string matchid, string outcomeid, int token)
Solicita información sobre el juego dado un MatchID, resultados y token para un juego (consejo: estos se pueden encontrar con el decodificador de Sharecode). Escuche el evento matchList
para la respuesta del coordinador del juego.
requestWatchInfoFriends(arguments)
Solicita información observable para el juego. Argumentos:
int request_id ; //Not enough tests yet
account_ids [ array_of_csgo_accounts ] ; //Not enough tests yet
long serverid ; //ServerID of match.
long matchid ; //MatchID of match.
Ejemplo:
CSGO . requestWatchInfoFriends ( {
serverid : new Long ( - 569600767 , - 2130640678 , true ) . toString ( ) ,
matchid : new Long ( 39 , 719230023 , true ) . toString ( )
} ) ;
Requisitos: el juego debe estar en vivo.
Escuche el evento watchList
para la respuesta del coordinador del juego.
requestCurrentLiveGames()
Solicita una lista de juegos en vivo actuales. Escuche el evento matchList
para la respuesta del coordinador del juego.
playerProfileRequest(accountId)
accountId
es la ID de cuenta del jugador (el SteamId64 de un jugador se puede convertir en una ID de cuenta con CSGO.ToAccountID(steamid)
).
Solicita el perfil de un jugador del coordinador del juego. El reproductor debe estar en línea y jugar CS: Go. Escuche el evento playerProfile
para la respuesta del coordinador del juego.
Nota: Ya no puede establecer su rica presencia en cadenas arbitrarias. Más bien, los juegos ahora definen una lista de hasta 20 valores de presencia ricos que se pueden mostrar. Consulte el método
SetRichPresence
en esta documentación para obtener más información.
richPresenceUpload(richPresenceObject)
Establece el objeto de presencia enriquecida para el usuario registrado actualmente. La rica presencia es la solución de Valve para darle a los amigos información sobre lo que estás haciendo en un juego. Por ejemplo, cuando ves información sobre otro juego de emparejamiento de amigos (como en el mapa y la puntuación), esto se establece mediante la presencia rica. Se puede encontrar un ejemplo de cómo usar este método en el ejemplo.js
itemDataRequest(string s, string a, string d, string m)
Solicita datos del elemento para los parámetros de enlace de inspección de elementos CSGO especificados. El parámetro s
tiene un valor cuando el enlace Inspect es de un inventario; Del mismo modo, el parámetro m
tiene un valor cuando el enlace Inspect es del mercado. Si no hay valor para un parámetro dado del enlace Inspect, configúrelo en "0"
.
Escuche el evento itemData
para la respuesta del coordinador del juego.
Ejemplo para un enlace de inspección de inventario para un elemento CSGO
// steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S76561198084749846A6768147729D12557175561287951743
CSGO . itemDataRequest ( "76561198084749846" , "6768147729" , "12557175561287951743" , "0" ) ;
Ejemplo para un enlace de inspección de mercado para un artículo CSGO
// steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20M563330426657599553A6710760926D9406593057029549017
CSGO . itemDataRequest ( "0" , "6710760926" , "9406593057029549017" , "563330426657599553" ) ;
new CSGO.SharecodeDecoder(string code);
Instancia una clase de SpareCodeDecoder para decodificar a los sharecodes.
Llamar al método decode()
del SharecodeDecoder
devolverá un objeto con la información decodificada.
console . log ( new CSGO . SharecodeDecoder ( "CSGO-U6MWi-hYFWJ-opPwD-JciHm-qOijD" ) . decode ( ) )
{ matchId : '3106049990460440633' ,
outcomeId : '3106056003414655216' ,
tokenId : '11842' }
ready
Emitido cuando el GC está listo para recibir mensajes. Tenga cuidado de no declarar las funciones anónimas como manejadores de eventos aquí, ya que deberá poder invalidar a los manejadores de eventos en un evento unready
.
unready
Emitido cuando el estado de conexión al GC cambia y hace que la biblioteca no esté disponible para interactuar. Debe borrar cualquier evento que los manejadores estén en el evento ready
aquí, de lo contrario, tendrá varios controladores para cada mensaje cada vez que se envíe un nuevo evento ready
.
exited
Emitido cuando .exit()
se llama como una conveniencia para limpiar los manejadores de las salidas intencionales.
itemData
( itemDataResponse
) {
"iteminfo" :
{
"accountid" : null ,
"itemid" : Long { "low" : - 1821786863 , "high" : 1 , "unsigned" : true } ,
"defindex" : 7 ,
"paintindex" : 474 ,
"rarity" : 6 ,
"quality" : 4 ,
"paintwear" : 1054492909 ,
"paintseed" : 183 ,
"killeaterscoretype" : null ,
"killeatervalue" : null ,
"customname" : null ,
"stickers" : [ ] ,
"inventory" : 3221225475 ,
"origin" : 8 ,
"questid" : null ,
"dropreason" : null ,
"floatvalue" : 0.4263376295566559
}
}
Emitido cuando el coordinador del juego responde al método itemDataRequest
.
matchmakingStatsData
( matchmakingStatsResponse
)matchmakingStatsResponse
- Objeto de respuesta sin procesar. Respuesta de ejemplo a continuación. {
"account_id" : 137013074 ,
"ongoingmatch" : { // Only populated when logged in user is in a match
"serverid" : 90112014586923017 ,
"direct_udp_ip" : 2734604850 ,
"direct_udp_port" : 27035 ,
"reservationid" : 18374688715512210549 ,
"reservation" : {
"game_type" : 520 ,
"match_id" : 3245263802660290728 ,
"tournament_event" : null ,
"pre_match_data" : null
} ,
"map" : "de_dust2" ,
"server_address" : "=[A:1:153428969:9318]:0"
} ,
"global_stats" : {
"players_online" : 423480 ,
"servers_online" : 132472 ,
"players_searching" : 4212 ,
"servers_available" : 65497 ,
"ongoing_matches" : 17016 ,
"search_time_avg" : 46530 ,
"search_statistics" : [
{
"game_type" : 264 ,
"search_time_avg" : 128555 ,
"players_searching" : 148
} ,
{
"game_type" : 520 ,
"search_time_avg" : 31962 ,
"players_searching" : 1768
} ,
{
"game_type" : 1032 ,
"search_time_avg" : 122353 ,
"players_searching" : 426
} ,
{
"game_type" : 2056 ,
"search_time_avg" : 136133 ,
"players_searching" : 160
} ,
{
"game_type" : 4104 ,
"search_time_avg" : 62643 ,
"players_searching" : 1069
} ,
{
"game_type" : 8200 ,
"search_time_avg" : 70380 ,
"players_searching" : 563
} ,
{
"game_type" : 16392 ,
"search_time_avg" : 115923 ,
"players_searching" : 132
} ,
{
"game_type" : 32776 ,
"search_time_avg" : 54906 ,
"players_searching" : 1248
} ,
{
"game_type" : 65544 ,
"search_time_avg" : 116871 ,
"players_searching" : 183
} ,
{
"game_type" : 131080 ,
"search_time_avg" : 82308 ,
"players_searching" : 145
} ,
{
"game_type" : 262152 ,
"search_time_avg" : 209331 ,
"players_searching" : 105
} ,
{
"game_type" : 524296 ,
"search_time_avg" : 270376 ,
"players_searching" : 110
} ,
{
"game_type" : 1048584 ,
"search_time_avg" : 64499 ,
"players_searching" : 1020
} ,
{
"game_type" : 268435464 ,
"search_time_avg" : 84615 ,
"players_searching" : 642
} ,
{
"game_type" : 536870920 ,
"search_time_avg" : 104965 ,
"players_searching" : 478
} ,
{
"game_type" : 2097160 ,
"search_time_avg" : 198734 ,
"players_searching" : 228
} ,
{
"game_type" : 134217736 ,
"search_time_avg" : 147703 ,
"players_searching" : 203
} ,
{
"game_type" : 8388616 ,
"search_time_avg" : 538828 ,
"players_searching" : 138
} ,
{
"game_type" : 16777224 ,
"search_time_avg" : 232350 ,
"players_searching" : 192
} ,
{
"game_type" : 4194312 ,
"search_time_avg" : 237269 ,
"players_searching" : 151
} ,
{
"game_type" : 33554440 ,
"search_time_avg" : 203183 ,
"players_searching" : 181
}
] ,
"main_post_url" : "" ,
"required_appid_version" : 13494 ,
"pricesheet_version" : 1438240620 ,
"twitch_streams_version" : 2 ,
"active_tournament_eventid" : 6 ,
"active_survey_id" : 0
} ,
"penalty_seconds" : null , // Contains amount of time logged in account has an MM cooldown
"penalty_reason" : null , // Integer representing reason for MM cooldown
"vac_banned" : 0 ,
"ranking" : {
"account_id" : 137013074 ,
"rank_id" : 11 ,
"wins" : 192 ,
"rank_change" : null
} ,
"commendation" : {
"cmd_friendly" : 3 ,
"cmd_teaching" : 3 ,
"cmd_leader" : 3
} ,
"medals" : {
"medal_team" : 0 ,
"medal_combat" : 0 ,
"medal_weapon" : 0 ,
"medal_global" : 0 ,
"medal_arms" : 0 ,
"display_items_defidx" : [ ] ,
"featured_display_item_defidx" : null
} ,
"my_current_event" : null ,
"my_current_event_teams" : [ ] ,
"my_current_team" : null ,
"my_current_event_stages" : [ ] ,
"survey_vote" : null ,
"activity" : null ,
"player_level" : 3 ,
"player_cur_xp" : 327684342 ,
"player_xp_bonus_flags" : null
}
Emitido cuando el coordinador del juego responde al método matchmakingStatsRequest
.
playerProfile
(respuesta al playerProfileRequest
) {
"request_id" : null ,
"account_profiles" : [
{
"account_id" : 137013074 ,
"ongoingmatch" : null ,
"global_stats" : null ,
"penalty_seconds" : null ,
"penalty_reason" : null ,
"vac_banned" : null ,
"ranking" : {
"account_id" : 137013074 ,
"rank_id" : 11 ,
"wins" : 192 ,
"rank_change" : null
},
"commendation" : {
"cmd_friendly" : 3 ,
"cmd_teaching" : 3 ,
"cmd_leader" : 3
},
"medals" : {
"medal_team" : 0 ,
"medal_combat" : 0 ,
"medal_weapon" : 0 ,
"medal_global" : 0 ,
"medal_arms" : 0 ,
"display_items_defidx" : [],
"featured_display_item_defidx" : null
},
"my_current_event" : null ,
"my_current_event_teams" : [],
"my_current_team" : null ,
"my_current_event_stages" : [],
"survey_vote" : null ,
"activity" : null ,
"player_level" : 3 ,
"player_cur_xp" : 327684342 ,
"player_xp_bonus_flags" : null
}
]
}
Emitido cuando el coordinador del juego responde al método playerProfileRequest
.
matchList
(respuesta a requestRecentGames
)Toda la respuesta terminó siendo demasiado grande para el readme y provocó que los navegadores se estrellaran. Debido a esto, solo he incluido un extracto de lo que se devuelve.
{
"reservationid" : {
"low" : 65 ,
"high" : 715485165 ,
"unsigned" : true
},
"reservation" : {
"account_ids" : [
2879081 ,
182261908 ,
225695551 ,
30039512 ,
90132590 ,
94815387 ,
37671978 ,
31906737 ,
137013074 ,
61347894
],
"game_type" : 1032 ,
"match_id" : null ,
"server_version" : null ,
"rankings" : [],
"encryption_key" : null ,
"encryption_key_pub" : null ,
"party_ids" : [],
"whitelist" : [],
"tv_master_steamid" : null ,
"tournament_event" : null ,
"tournament_teams" : [],
"tournament_casters_account_ids" : [],
"tv_relay_steamid" : null ,
"pre_match_data" : null
},
"map" : " http://replay124.valve.net/730/003072985384448163905_0699089210.dem.bz2 " ,
"round" : null ,
"kills" : [
21 ,
22 ,
15 ,
15 ,
12 ,
37 ,
20 ,
23 ,
17 ,
15
],
"assists" : [
5 ,
5 ,
1 ,
3 ,
4 ,
2 ,
3 ,
2 ,
6 ,
7
],
"deaths" : [
22 ,
22 ,
24 ,
23 ,
21 ,
13 ,
13 ,
19 ,
20 ,
20
],
"scores" : [
55 ,
54 ,
40 ,
39 ,
37 ,
79 ,
65 ,
59 ,
41 ,
37
],
"pings" : [],
"round_result" : null ,
"match_result" : 2 ,
"team_scores" : [
11 ,
16
],
"confirm" : null ,
"reservation_stage" : null ,
"match_duration" : 2332 ,
"enemy_kills" : [
21 ,
22 ,
15 ,
15 ,
12 ,
37 ,
20 ,
23 ,
17 ,
15
],
"enemy_headshots" : [
12 ,
11 ,
4 ,
2 ,
3 ,
9 ,
6 ,
9 ,
3 ,
12
],
"enemy_3ks" : [],
"enemy_4ks" : [],
"enemy_5ks" : [],
"mvps" : [
4 ,
3 ,
1 ,
1 ,
2 ,
4 ,
5 ,
2 ,
3 ,
2
],
"spectators_count" : null ,
"spectators_count_tv" : null ,
"spectators_count_lnk" : null ,
"enemy_kills_agg" : []
}
Emitido cuando requestRecentGames
, requestGame
, requestLiveGameForUser
, requestCurrentLiveGames
se responde a.
watchList
(respuesta a requestWatchInfoFriends
)Ejemplo:
{
"request_id" : 0 ,
"account_ids" : [],
"watchable_match_infos" : [
{
"server_ip" : 2453839835 ,
"tv_port" : 28056 ,
"tv_spectators" : 1 ,
"tv_time" : 417 ,
"tv_watch_password" : {
"buffer" : {
"type" : " Buffer " ,
"data" : [ ]
},
"offset" : 21 ,
"markedOffset" : -1 ,
"limit" : 53 ,
"littleEndian" : true ,
"noAssert" : false
},
"cl_decryptdata_key" : null ,
"cl_decryptdata_key_pub" : {
"low" : -249571153 ,
"high" : 1941167002 ,
"unsigned" : true
},
"game_type" : 32776 ,
"game_mapgroup" : " mg_de_mirage " ,
"game_map" : " de_mirage " ,
"server_id" : {
"low" : 2054631424 ,
"high" : 20977258 ,
"unsigned" : true
},
"match_id" : {
"low" : 32 ,
"high" : 719254593 ,
"unsigned" : true
},
"reservation_id" : null
}
],
"extended_timeout" : null
}