DoctorMcKay / node-globaloffensive

A Node.js module to connect to and interact with the CS2 game coordinator. Mostly used to get item data.
https://www.npmjs.com/package/globaloffensive
MIT License
262 stars 61 forks source link
counter-strike csgo node-steam-steamuser steam steam-account

Counter-Strike Global Offensive for Node.js

npm version npm downloads license

This module provides a very flexible interface for interacting with the CS2 Game Coordinator. It's designed to work with a node-steam-user SteamUser instance.

This is based off of node-tf2.

You will need steam-user v4.2.0 or later and Node.js v14 or later to use globaloffensive v3.
You will need steam-user v4.2.0 or later and Node.js v8 or later to use globaloffensive v2.

Setup

First, install it from npm:

$ npm install globaloffensive

Require the module and call its constructor with your SteamUser instance:

const SteamUser = require('steam-user');
const GlobalOffensive = require('globaloffensive');

let user = new SteamUser();
let csgo = new GlobalOffensive(user);

To initialize your GC connection, just launch CS:GO via SteamUser normally:

client.gamesPlayed([730]);

node-globaloffensive will emit a connectedToGC event when the game coordinator connection has been successfully established. You shouldn't try to do anything before you receive that event.

Enums

There are some enums that are used by various methods and events. You can find them in enums.js.

Properties

There are a few useful read-only properties available to you.

haveGCSession

true if we're currently connected to the GC, false otherwise. You should only call methods when we have an active GC session.

accountData

A big object containing account data and some statistics including players in-game. Undefined until accountData is emitted.

inventory

An array containing the items in your inventory. Undefined until connectedToGC is emitted.

As of v2.2.0, some special properties are populated on items in this array (and also item objects in itemAcquired and related events), where applicable:

Note that if any of the above attributes are not applicable, then they will not exist in the item object.

It appears that under some circumstances, the GC might load items from storage units into your inventory without calling getCasketContents, so if you are using this property to see what items are in your inventory, you will need to check casket_id to filter out items stored in storage units.

Methods

Constructor(steamClient)

When instantiating your node-globaloffensive instance, you need to pass your active Steam.SteamClient instance as the sole parameter, as shown here:

var csgo = new GlobalOffensive(steamClient);

requestGame(shareCodeOrDetails)

v2.2.0 or later is required to use this method

Requests stats for a historical game. Listen for the matchList event to get your response.

requestLiveGames()

Request a list of current live tournament games. This is the list you see in the client under Watch -> Live. Listen for the matchList event to get your response.

requestRecentGames(steamid)

Request a list of recent games (max. 8). This is the list you see in the client under Watch -> Your Matches. Listen for the matchList event to get your response.

requestLiveGameForUser(steamid)

Request live game info for a specific user. Listen for the matchList event to get your response.

inspectItem(owner[, assetid][, d][, callback])

v1.1.0 or later is required to use this method

Sends the same request to the GC that the official client sends when you inspect an item. If all parameters are correct and the GC is in a good mood, returns the item's data. Using this for an item your account owns is useless as all the data is already available in inventory.

The response will arrive in the callback and in the inspectItemInfo event.

As of v2.1.0, the request will time out if no response is received in 10 seconds. If this happens, inspectItemTimedOut will be emitted.

requestPlayersProfile(steamid[, callback])

v1.2.0 or later is required to use this method

Sends the same request to the GC that viewing the CSGO player profile from the in-game friendlist sends. Returns the same information that you would get in-game. This returns the same protobuf that is used when you request your own profile data, so most of it stays empty.

nameItem(nameTagId, itemId, name)

v2.1.0 or later is required to use this method

Renames a particular item in your inventory, using a given name tag. You can rename storage units for free by passing 0 as the nameTagId.

craft(items, recipe)

v2.3.0 or later is required to use this method

Craft items together into a new item using a specific recipe. items should be an array of item IDs to craft. You will receive a craftingComplete event in response. If crafting succeeded, you will also get itemRemoved events for each item you spent, and itemAcquired events for each item you received.

Recipes are defined in items_game.txt. Available recipes as of late 2022 are:

deleteItem(itemId)

1.3.0 or later is required to use this method

Deletes a particular item from your inventory. This is a destructive operation, which cannot be undone.

addToCasket(casketId, itemId)

v2.1.0 or later is required to use this method

Put an item in your inventory into a casket (storage unit) you own. Assuming the request succeeds, itemRemoved will be emitted for the item that was put into the casket, and itemCustomizationNotification will be emitted with notification type CasketAdded for the casket.

removeFromCasket(casketId, itemId)

v2.1.0 or later is required to use this method

Remove an item from a casket (storage unit) you own and put it into your inventory. Assuming the request succeeds, itemAcquired will be emitted for the item that was removed from the casket, and itemCustomizationNotification will be emitted with notification type CasketRemoved for the casket.

getCasketContents(casketId, callback)

v2.1.0 or later is required to use this method

Loads the contents of a storage unit. Note that calling this will have the GC load the contents of the storage unit using the same mechanism as your actual inventory, so items in the storage unit will appear in the inventory property, and itemAcquired will be emitted for each item. Each item in your inventory that is contained inside of a storage unit has a property casket_id, the value of which is a string containing the ID of the storage unit that contains that item.

It appears that under some circumstances, the GC might load these items into your inventory without calling this method, so if you are using inventory to see what items are in your inventory, you will need to check casket_id to filter out items stored in storage units.

Events

connectedToGC

Emitted when a GC connection is established. You shouldn't use any methods before you receive this. Note that this may be received (after it's first emitted) without any disconnectedFromGC event being emitted. In this case, the GC simply restarted.

disconnectedFromGC

Emitted when we're disconnected from the GC for any reason. node-globaloffensive will automatically try to reconnect and will emit connectedToGC when reconnected.

Example usage:

const GlobalOffensive = require('globaloffensive');
let csgo = new GlobalOffensive(steamUser);

csgo.on('disconnectedFromGC', (reason) => {
    if (reason == GlobalOffensive.GCConnectionStatus.GC_GOING_DOWN) {
        console.log('GC going down');    
    }
});

error

Emitted when we encounter a fatal error attempting to connect to the GC. If this event is not handled, the app will crash.

connectionStatus

Emitted when we receive the status of our connection to the GC. Exactly when this is emitted is currently unknown. This may be removed in the future.

matchList

Emitted when we receive a match list, especially after a requestLiveGames() call. This may be emitted at other times. Presently, the exact behavior is unknown.

inspectItemInfo

v1.1.0 or later is required to use this method

Emitted in response to an inspectItem() call.

inspectItemTimedOut

v2.1.0 or later is required to use this method

Emitted if inspectItem() is called but we don't receive a timely reply to the request.

itemAcquired

Emitted when you receive a new item.

itemChanged

Emitted when an item in your inventory changes in some way.

itemRemoved

Emitted when an item is removed from your inventory.

itemCustomizationNotification

v2.1.0 or later is required to use this event

Emitted when the GC informs us that an item is customized somehow. Example:

const GlobalOffensive = require('globaloffensive');
let csgo = new GlobalOffensive(steamUser);

csgo.on('itemCustomizationNotification', (itemIds, notificationType) => {
    if (notificationType == GlobalOffensive.ItemCustomizationNotification.CasketInvFull) {
        console.log('Storage unit ' + itemIds[0] + ' is full');
    }
});

craftingComplete

v2.3.0 or later is required to use this event

Emitted when a craft initiated by the craft method finishes.

playersProfile

Emitted in response to an requestPlayersProfile() call.