tf2-item-format
Version:
Format's TF2 items like backpack.tf does
300 lines • 9.96 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Schema = void 0;
const tf2_static_schema_1 = require("tf2-static-schema");
const isNumber_1 = __importDefault(require("../util/isNumber"));
const DEFINDEXES = {
// Local naming
'Strangifier Chemistry Set': 20000,
'Specialized Killstreak Kit Fabricator': 20002,
'Professional Killstreak Kit Fabricator': 20003,
'Chemistry Set': 20005,
'Mann Co. Supply Crate Key': 5021,
Lugermorph: 160,
/**
* Old keys, list might be incomplete.
*/
'Festive Winter Crate Key': 5049,
'Refreshing Summer Cooler Key': 5067,
'Naughty Winter Crate Key': 5072,
'Nice Winter Crate Key': 5073,
'Scorched Key': 5079,
'Fall Key': 5081,
'Eerie Key': 5628,
'Naughty Winter Crate Key 2012': 5631,
'Nice Winter Crate Key 2012': 5632,
'Spooky Key': 5713,
'Naughty Winter Crate Key 2013': 5716,
'Nice Winter Crate Key 2013': 5717,
'Limited Late Summer Crate Key': 5762,
'Naughty Winter Crate Key 2014': 5791,
'Nice Winter Crate Key 2014': 5792,
// "'Decorated War Hero' War Paint Civilian Grade Keyless Case": 18000,
// "'Decorated War Hero' War Paint Freelance Grade Keyless Case": 18001,
// "'Decorated War Hero' War Paint Mercenary Grade Keyless Case": 18002,
// "'Contract Campaigner' War Paint\nCivilian Grade Keyless Case": 18003,
// "'Contract Campaigner' War Paint\nFreelance Grade Keyless Case": 18004,
// "'Contract Campaigner' War Paint\nMercenary Grade Keyless Case": 18005,
};
const NAMES = {
160: 'Lugermorph',
5021: 'Mann Co. Supply Crate Key',
5049: 'Festive Winter Crate Key',
5067: 'Refreshing Summer Cooler Key',
5072: 'Naughty Winter Crate Key',
5073: 'Nice Winter Crate Key',
5079: 'Scorched Key',
5081: 'Fall Key',
5628: 'Eerie Key',
5631: 'Naughty Winter Crate Key 2012',
5632: 'Nice Winter Crate Key 2012',
5713: 'Spooky Key',
5716: 'Naughty Winter Crate Key 2013',
5717: 'Nice Winter Crate Key 2013',
5762: 'Limited Late Summer Crate Key',
5791: 'Naughty Winter Crate Key 2014',
5792: 'Nice Winter Crate Key 2014',
20000: 'Strangifier Chemistry Set',
20005: 'Chemistry Set',
// 18000: "'Decorated War Hero' War Paint\nCivilian Grade Keyless Case",
// 18001: "'Decorated War Hero' War Paint\nFreelance Grade Keyless Case",
// 18002: "'Decorated War Hero' War Paint\nMercenary Grade Keyless Case",
// 18003: "'Contract Campaigner' War Paint\nCivilian Grade Keyless Case",
// 18004: "'Contract Campaigner' War Paint\nFreelance Grade Keyless Case",
// 18005: "'Contract Campaigner' War Paint\nMercenary Grade Keyless Case",
};
/* TODO: Set boundaries between these.
"20000":"Chemistry Set",
"20001":"Chemistry Set",
"20005":"Chemistry Set",
"20006":"Chemistry Set",
"20007":"Chemistry Set",
"20008":"Chemistry Set",
"20009":"Chemistry Set"
*/
class Schema {
constructor() { }
getVersion() {
return 1; // Never changes during runtime
}
getTextures() {
if (!this.textures)
this.loadTextures();
return this.textures;
}
getEffects() {
if (!this.effects)
this.loadEffects();
return this.effects;
}
getItems() {
if (!this.items)
this.loadDefindexes();
return this.items;
}
loadEffects() {
this.effects = (0, tf2_static_schema_1.requireStatic)('effects');
}
loadWears() {
this.wears = (0, tf2_static_schema_1.requireStatic)('wears');
}
loadKillstreaks() {
this.killstreaks = (0, tf2_static_schema_1.requireStatic)('killstreaks');
}
loadTextures() {
this.textures = (0, tf2_static_schema_1.requireStatic)('paint-kits');
}
loadItemNames() {
this.itemNames = (0, tf2_static_schema_1.requireStatic)('item-names');
}
loadDefindexes() {
this.items = (0, tf2_static_schema_1.requireStatic)('items');
}
loadQualities() {
this.qualities = (0, tf2_static_schema_1.requireStatic)('qualities');
}
loadItemsGame() {
this.itemsGame = (0, tf2_static_schema_1.requireStatic)('items-game');
}
getEffect(search) {
if (!this.effects)
this.loadEffects();
return this.effects[search];
}
getWear(search) {
if (!this.wears)
this.loadWears();
return this.wears[search];
}
getKillstreak(search) {
if (!this.killstreaks)
this.loadKillstreaks();
return this.killstreaks[search];
}
getTexture(search) {
if (!this.textures)
this.loadTextures();
return this.textures[search];
}
/**
* @todo https://github.com/Nicklason/tf2-automatic/blob/master/src/lib/items.ts
* @param {string} search
* @return {number}
*/
getDefindex(search) {
if (!this.items)
this.loadDefindexes();
if (typeof search === 'number')
return search;
// Exceptions
if (DEFINDEXES[search])
return DEFINDEXES[search];
let upgradeableDfx = null;
for (let i = 0; i < this.items.length; i++) {
const item = this.items[i];
const name = selectName(item);
if (name === search) {
if (!hasUpgradeable(item) || isUpgradeable(item.name)) {
return item.defindex;
}
upgradeableDfx = item.defindex;
}
}
return upgradeableDfx;
}
getName(search) {
if (!this.itemNames)
this.loadItemNames();
if (!(0, isNumber_1.default)(search))
return search;
const name = NAMES[search];
if (name)
return name;
return this.itemNames[search];
}
getQuality(search) {
if (!this.qualities)
this.loadQualities();
return this.qualities[search];
}
getEffectName(effect) {
if (!(0, isNumber_1.default)(effect))
return effect;
return this.getEffect(effect);
}
getWearName(wear) {
if (!(0, isNumber_1.default)(wear))
return wear;
return this.getWear(wear);
}
getKillstreakName(killstreak) {
if (!(0, isNumber_1.default)(killstreak))
return killstreak;
return this.getKillstreak(killstreak);
}
getTextureName(texture) {
if (!(0, isNumber_1.default)(texture))
return texture;
return this.getTexture(texture);
}
getQualityName(quality) {
if (!(0, isNumber_1.default)(quality))
return quality;
return this.getQuality(quality);
}
getEffectEnum(effect) {
if ((0, isNumber_1.default)(effect))
return effect;
return this.getEffect(effect);
}
getWearEnum(wear) {
if ((0, isNumber_1.default)(wear))
return wear;
return this.getWear(wear);
}
getKillstreakEnum(killstreak) {
if ((0, isNumber_1.default)(killstreak))
return killstreak;
return this.getKillstreak(killstreak);
}
getTextureEnum(texture) {
if ((0, isNumber_1.default)(texture))
return texture;
return parseInt(this.getTexture(texture));
}
getQualityEnum(quality) {
if ((0, isNumber_1.default)(quality))
return quality;
return this.getQuality(quality);
}
isUniqueHat(defindexOrName) {
if ((0, isNumber_1.default)(defindexOrName)) {
defindexOrName = this.getName(defindexOrName);
}
const item = this.getSchemaItemFromName(defindexOrName);
return !!(item === null || item === void 0 ? void 0 : item.proper_name);
}
getCrateNumber(defindexOrName) {
if (!this.itemsGame)
this.loadItemsGame();
if (!(0, isNumber_1.default)(defindexOrName)) {
const defindex = this.getDefindex(defindexOrName);
if (!defindex)
return 0;
defindexOrName = defindex;
}
const item = this.itemsGame.items[defindexOrName + ''];
if (!item)
return 0;
const crateSeries = parseInt((item.static_attrs &&
item.static_attrs['set supply crate series']));
return isNaN(crateSeries) ? 0 : crateSeries;
}
getSchemaItemFromName(search) {
if (!this.items)
this.loadDefindexes();
let byDefindex = 0;
if (DEFINDEXES[search]) {
byDefindex = DEFINDEXES[search];
}
let correctItem = null;
for (let i = 0; i < this.items.length; i++) {
const item = this.items[i];
const name = selectName(item);
if (byDefindex ? byDefindex === item.defindex : name === search) {
if (!hasUpgradeable(item) || isUpgradeable(item.name)) {
return item;
}
correctItem = item;
}
}
return correctItem;
}
}
exports.Schema = Schema;
/**
* @todo get from schema
* @param {object} item
* @return {string}
*/
function selectName(item) {
if (item.item_name === 'Kit')
return item.item_type_name;
// Due to BackpackTF naming colisions.
if (item.defindex === 20003)
return 'Professional Killstreak Fabricator';
if (item.defindex === 20002)
return 'Specialized Killstreak Fabricator';
return item.item_name;
}
function isUpgradeable(name) {
return name.startsWith('Upgradeable ');
}
function hasUpgradeable(item) {
return item.name.includes(item.item_class.toUpperCase());
}
exports.default = new Schema();
//# sourceMappingURL=schema.js.map