csgo-items-parser
Version:
Extract Items/Skins/... from raw VDF data files
878 lines (794 loc) • 28 kB
JavaScript
'use strict';
/* jshint node: true */
//Correct vdf for little endian handle ?
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var vdf = require('simple-vdf'),
fs = require('fs'),
winston = require('winston'),
misc = require('./miscHelper'),
Weapon = require('./Weapon.js'),
Collection = require('./Collection.js'),
Rarity = require('./Rarity.js'),
Sticker = require('./Sticker.js'),
SkinPaint = require('./SkinPaint.js'),
MusicKit = require('./MusicKit.js');
/**
* Hardcoded Exteriors Keys List --> Thx Valve :s.
* @const {Array}
* @private
*/
var exteriorsKeysList = ['SFUI_InvTooltip_Wear_Amount_0', 'SFUI_InvTooltip_Wear_Amount_1', 'SFUI_InvTooltip_Wear_Amount_2', 'SFUI_InvTooltip_Wear_Amount_3', 'SFUI_InvTooltip_Wear_Amount_4'];
/**
* Regex for Items.
* @const {RegExp}
* @private
*/
var regexItem = /\[(.*)\](.*)/i;
/**
* Regex for Icon.
* @const {RegExp}
* @private
*/
var regexIcon = /econ\/default_generated\/(.*)_(light|medium|heavy)$/i;
/**
* Regex for Check Icon.
* @const {RegExp}
* @private
*/
var regexIconCheck = /^(?:_[^_]{2}_)/m;
/**
* Parser of CSGOData.
* @param {String} schemaFilePath Path to schema file.
* @param {String} langFilePath Path to csgo_*lang* file.
* @param {String} itemsFilePath Path to items_game file.
* @param {String} logLevel Winston Log Level, if > info no timing data for generations.
* @param {String} logFilePath Choosen file path to write logs.
* @constructor
*
* @todo Refactoring... This file will be too long
* @todo Generalization isDatasInitialized
* @todo Better handle of Little Endian for vdf / Hack dependency
* @todo Datamining File for more informations
* @todo DEBUG - Better Handle of Knifes and Rarities (My god, need so much hack ><. Volvo... that's not really clean ^^')
* @todo To ES6
* @todo Optimize Performances
* @todo defindex to int ?
*/
var CSGODataParser = function () {
function CSGODataParser(schemaFilePath, langFilePath, itemsFilePath, logLevel, logFilePath) {
_classCallCheck(this, CSGODataParser);
this.schemaFilePath = schemaFilePath;
this.langFilePath = langFilePath;
this.itemsFilePath = itemsFilePath;
this._generateObjectDataFromFiles();
this.logger = new winston.Logger({
level: logLevel,
transports: [new winston.transports.Console(), new winston.transports.File({ filename: logFilePath })]
});
}
/**
* Generate Javascript Objects from files.
* @private
*/
_createClass(CSGODataParser, [{
key: '_generateObjectDataFromFiles',
value: function _generateObjectDataFromFiles() {
// ---- LANG FILE ---
var langFile = fs.readFileSync(this.langFilePath, 'utf16le');
this.langData = vdf.parse(langFile);
this.langData.lang = this.langData['lang'];
// ---- ITEMGAME FILE ---
var itemsFile = fs.readFileSync(this.itemsFilePath, 'utf8');
this.itemsData = vdf.parse(itemsFile);
// ---- SCHEMA FILE ---
var schemaFile = fs.readFileSync(this.schemaFilePath, 'utf8');
this.schemaData = vdf.parse(schemaFile);
}
/**
* Get weapon name from technical name.
* @param {String} techName technical name (like weapon_xxx)
* @return {String} Weapon name.
* @private
*/
}, {
key: '_getWeaponNameFromTechnicalName',
value: function _getWeaponNameFromTechnicalName(techName) {
/*jshint camelcase: false */
var self = this;
var findWeapon;
var items = this.schemaData.result.items;
Object.keys(items).forEach(function (key) {
var element = items[key];
if (element.name.indexOf('weapon_') > -1) {
if (element.name === techName) {
findWeapon = self.getLangValue(element.item_name);
}
}
});
return findWeapon;
}
/**
* Get Paint Name from technical name.
* @param {String} techName technical name (like hy_xxx or sp_yyy or ...)
* @return {String} Paint Name.
* @private
*/
}, {
key: '_getPaintNameAndDefIndexFromTechnicalName',
value: function _getPaintNameAndDefIndexFromTechnicalName(techName) {
/*jshint camelcase: false */
var self = this;
var findPaint = [];
findPaint[0] = undefined;
findPaint[1] = undefined;
var paintkits = this.itemsData.items_game.paint_kits;
Object.keys(paintkits).forEach(function (key) {
if (paintkits[key].name === techName) {
findPaint[0] = self.getLangValue(paintkits[key].description_tag);
findPaint[1] = key;
}
});
return findPaint;
}
/**
* Get all Skins from a Weapon technical name.
* /!\ Hack from icons ?! Only way for knife ?! Thx Volvo ?!
* @param {String} techName technical name (like weapon_xxx)
* @return {Array} Skins Name.
* @private
*/
}, {
key: '_getSkinsByWeapon',
value: function _getSkinsByWeapon(techName, type, indexed) {
/*jshint camelcase: false */
var self = this;
var skins;
var icons = this.itemsData.items_game.alternate_icons2.weapon_icons;
indexed ? skins = {} : skins = [];
Object.keys(icons).forEach(function (key) {
var skin = new SkinPaint();
var datas = self._cleanCompositeIconName(icons[key].icon_path, techName);
if (datas.status) {
var skinInfo = self._getPaintNameAndDefIndexFromTechnicalName(datas.skinTechName);
if (indexed) {
var i = skinInfo[1];
skins[i] = {
'name': skinInfo[0],
'techName': datas.skinTechName,
'weaponTechName': techName
};
if (type === '#CSGO_Type_Knife') {
skins[i].fullName = '★ ' + self._getWeaponNameFromTechnicalName(techName) + ' | ' + skins[i].name;
skins[i].rarity = 'unusual';
} else {
skins[i].fullName = '' + self._getWeaponNameFromTechnicalName(techName) + ' | ' + skins[i].name;
skins[i].rarity = self._getRarityFromPaintTechnicalName(datas.skinTechName);
}
} else {
skin.name = skinInfo[0];
skin.techName = datas.skinTechName;
skin.weaponTechName = techName;
skin.defIndex = skinInfo[1];
//Hack for melee weapon :s
if (type === '#CSGO_Type_Knife') {
skin.fullName = '★ ' + self._getWeaponNameFromTechnicalName(techName) + ' | ' + skin.name;
skin.rarity = 'unusual';
} else {
skin.fullName = '' + self._getWeaponNameFromTechnicalName(techName) + ' | ' + skin.name;
skin.rarity = self._getRarityFromPaintTechnicalName(datas.skinTechName);
}
skins.pushUniqueNamedObject(skin);
}
}
});
return skins;
}
/**
* Get Rarity from technical paint name.
* @param {String} techName technical name (like hy_xxx or sp_yyy or ...)
* @return {String} quality technical name.
* @private
*/
}, {
key: '_getRarityFromPaintTechnicalName',
value: function _getRarityFromPaintTechnicalName(techName) {
/*jshint camelcase: false */
var paintkitsrarity = this.itemsData.items_game.paint_kits_rarity;
return paintkitsrarity[techName];
}
/**
* Clean the icon name for extract informations about the skin
* @param {String} icon compositeIconName to split
* @param {String} weaponTechName technical name (like weapon_xxx)
* @return {Object} Object with status of the cleaning and tech names of weapon and skin
* @private
*/
}, {
key: '_cleanCompositeIconName',
value: function _cleanCompositeIconName(icon, weaponTechName) {
var result = {};
result.status = false;
var data = regexIcon.exec(icon)[1];
var pos = data.indexOf(weaponTechName);
if (pos !== -1) {
if (data.slice(weaponTechName.length).match(regexIconCheck)) {
result.status = true;
result.weaponTechName = weaponTechName;
result.skinTechName = data.slice(1 + weaponTechName.length);
}
}
return result;
}
/**
* Get All items of the paramater prefab on item_games file and match them with schema
* WARNING - Don't work for items not in "items_game.items" array
* @param {String} prefab prefab string (like weapon_case)
* @return {Array} Items from the prefab
* @private
*/
}, {
key: '_getItemsByPrefabViaSchema',
value: function _getItemsByPrefabViaSchema(prefab, type, indexed) {
/*jshint camelcase: false */
var self = this;
var timer = misc.generateTimer();
var itemsReturn;
indexed ? itemsReturn = {} : itemsReturn = [];
var itemsPrefab = this.itemsData.items_game.items;
Object.keys(itemsPrefab).forEach(function (key) {
if (typeof itemsPrefab[key].prefab === 'string' && itemsPrefab[key].prefab.containsOnSpaceSplit(prefab)) {
if (indexed) {
itemsReturn[key] = {
'name': self.getLangValue(self._getDefIndexOnSchema(key).item_name),
'techName': self._getDefIndexOnSchema(key).item_name,
'type': type
};
} else {
var element = {};
element.name = self.getLangValue(self._getDefIndexOnSchema(key).item_name);
element.techName = self._getDefIndexOnSchema(key).item_name;
element.defIndex = key;
element.type = type;
itemsReturn.pushUniqueNamedObject(element);
}
self.logger.info('Fetch ' + (indexed ? itemsReturn[key].name : element.name) + ' [' + misc.resultTimer(timer) + 's]');
}
});
var totalPrefab = Object.keys(itemsReturn).length;
self.logger.info('Generate ' + totalPrefab + ' ' + prefab + ' type [' + misc.resultTimer(timer) + 's]');
return itemsReturn;
}
/**
* Get a DefIndex id in the schema
* WARNING - Don't be too greedy this method can cost a lot
* @param {Integer} id DefIndex to find in schema
* @return {Object} Element find in schema
* @private
*/
}, {
key: '_getDefIndexOnSchema',
value: function _getDefIndexOnSchema(id) {
/*jshint eqeqeq: false, camelcase: false*/
var timer = misc.generateTimer();
var self = this;
var returnelm;
var items = this.schemaData.result.items;
Object.keys(items).forEach(function (key) {
var element = items[key];
if (element.defindex == id) {
returnelm = element;
}
});
return returnelm;
}
/**
* Return the parser's logger.
* @return {winston.Logger} Winston based Parser's Logger.
* @public
*/
}, {
key: 'getLogger',
value: function getLogger() {
/*jshint eqeqeq: false, eqnull:true, camelcase: false*/
if (this.logger != null) {
return this.logger;
}
}
/**
* Check if datas files are OK.
* @return {boolean} True if datas initialized, false otherwise
* @public
*/
}, {
key: 'isDatasInitialized',
value: function isDatasInitialized() {
/*jshint eqeqeq: false, eqnull:true, camelcase: false*/
if (this.schemaData == null || this.schemaData.result == null) {
return false;
}
if (this.itemsData == null || this.itemsData.items_game == null) {
return false;
}
return true;
}
/**
* Check if lang file is OK.
* @return {boolean} True if initialized, false otherwise
* @public
*/
}, {
key: 'isLangInitialized',
value: function isLangInitialized() {
/*jshint eqeqeq: false, eqnull:true, camelcase: false*/
if (this.langData == null || this.langData.lang == null) {
return false;
}
return true;
}
/**
* Get the lang value from valve key i18n values.
* @param {String} keyLang valve key i18n values (like #PaintKit_aa_fade_Tag)
* @return {String} traduction if langfile initialized and key is present, key otherwise
* @public
*/
}, {
key: 'getLangValue',
value: function getLangValue(keyLang) {
/*jshint eqeqeq: false, eqnull:true*/
var traduction;
if (this.isLangInitialized()) {
traduction = this.langData.lang.Tokens.getLangValue(keyLang.prepareLang());
if (traduction == null) {
traduction = keyLang;
}
} else {
traduction = keyLang;
}
return traduction;
}
/**
* Generate bases Weapons data from schema's data.
* @return {Array.<Weapon>} List of Objects. One object represent one Weapon.
* @public
*/
}, {
key: 'getWeapons',
value: function getWeapons(indexed) {
/*jshint camelcase: false */
var self = this;
var timer = misc.generateTimer();
self.logger.info('');
self.logger.info('');
self.logger.info('-----------------------------------------');
self.logger.info('-------- Weapons List Generation --------');
self.logger.info('-----------------------------------------');
self.logger.info('');
var weapons;
indexed ? weapons = {} : weapons = [];
var items = this.schemaData.result.items;
Object.keys(items).forEach(function (key) {
var element = items[key];
if (element.name.indexOf('weapon_') > -1) {
var timerSkins = misc.generateTimer();
if (indexed) {
var i = element.defindex;
weapons[i] = {
'name': self.getLangValue(element.item_name),
'techName': element.name,
'type': self.getLangValue(element.item_type_name)
};
if (weapons[i].techName !== 'weapon_knife') {
weapons[i].skins = self._getSkinsByWeapon(element.name, element.item_type_name, indexed);
}
} else {
var weapon = new Weapon();
weapon.name = self.getLangValue(element.item_name);
weapon.techName = element.name;
weapon.type = self.getLangValue(element.item_type_name);
weapon.defIndex = element.defindex;
if (weapon.techName !== 'weapon_knife') {
weapon.skins = self._getSkinsByWeapon(element.name, element.item_type_name, indexed);
}
weapons.push(weapon);
}
self.logger.info('Generate ' + (indexed ? weapons[i].name : weapon.name) + ' skins list [' + misc.resultTimer(timerSkins) + 's]');
}
});
var totalWeapons = Object.keys(weapons).length;
self.logger.info('-----------------------------------------');
self.logger.info('Generate ' + totalWeapons + ' weapons [' + misc.resultTimer(timer) + 's]');
return weapons;
}
}, {
key: 'getWeaponsIndexed',
value: function getWeaponsIndexed() {
return this.getWeapons(true);
}
/**
* Generate collection's data from itemsgame's data.
* @return {Array.<Collection>} List of Collections. One object represent one Collection.
* @public
*/
}, {
key: 'getCollections',
value: function getCollections(indexed) {
/*jshint camelcase: false */
var self = this;
var timer = misc.generateTimer();
self.logger.info('');
self.logger.info('');
self.logger.info('-----------------------------------------');
self.logger.info('------ Collections List Generation ------');
self.logger.info('-----------------------------------------');
self.logger.info('');
var collections = [];
Object.keys(this.itemsData.items_game.item_sets).forEach(function (keycollection) {
var collection = new Collection();
var valuecollection = self.itemsData.items_game.item_sets[keycollection];
collection.name = self.getLangValue(valuecollection.name.prepareLang());
collection.techName = keycollection;
indexed ? collection.content = {} : collection.content = [];
var timerCollections = misc.generateTimer();
Object.keys(valuecollection.items).forEach(function (keyitem) {
var values = regexItem.exec(keyitem);
var skinInfo = self._getPaintNameAndDefIndexFromTechnicalName(values[1]);
if (indexed) {
var i = skinInfo[1];
collection.content[i] = {
'name': skinInfo[0],
'techName': values[1],
'weaponTechName': values[2],
'fullName': self._getWeaponNameFromTechnicalName(values[2]) + ' | ' + skinInfo[0],
'rarity': self._getRarityFromPaintTechnicalName(values[1])
};
} else {
var skin = new SkinPaint();
skin.name = skinInfo[0];
skin.techName = values[1];
skin.weaponTechName = values[2];
skin.fullName = self._getWeaponNameFromTechnicalName(values[2]) + ' | ' + skin.name;
skin.defIndex = skinInfo[1];
skin.rarity = self._getRarityFromPaintTechnicalName(values[1]);
collection.content.push(skin);
}
});
collections.push(collection);
self.logger.info('Generate ' + collection.name + ' collection list [' + misc.resultTimer(timerCollections) + 's]');
});
var totalCollection = Object.keys(collections).length;
self.logger.info('-----------------------------------------');
self.logger.info('Generate ' + totalCollection + ' collections [' + misc.resultTimer(timer) + 's]');
return collections;
}
}, {
key: 'getCollectionsIndexed',
value: function getCollectionsIndexed() {
return this.getCollections(true);
}
/**
* Generate exteriors.
* @return {Array.<String>} One string represent one exterior type - I18N Name
* @public
*/
}, {
key: 'getExteriors',
value: function getExteriors() {
var self = this;
var timer = misc.generateTimer();
self.logger.info('');
self.logger.info('');
self.logger.info('-----------------------------------------');
self.logger.info('------- Exteriors List Generation -------');
self.logger.info('-----------------------------------------');
self.logger.info('');
var exteriors = [];
var totalExteriors = exteriorsKeysList.length;
exteriorsKeysList.forEach(function (element) {
exteriors.push(self.getLangValue(element));
});
self.logger.info('Generate ' + totalExteriors + ' exteriors [' + misc.resultTimer(timer) + 's]');
return exteriors;
}
/**
* Generate Origins List.
* @return {Array.<Origin>} List of Origin objects. One object represent one origin.
* @public
*/
}, {
key: 'getOrigins',
value: function getOrigins(indexed) {
/*jshint camelcase: false */
var self = this;
var timer = misc.generateTimer();
self.logger.info('');
self.logger.info('');
self.logger.info('-----------------------------------------');
self.logger.info('-------- Origins List Generation --------');
self.logger.info('-----------------------------------------');
self.logger.info('');
var origins;
indexed ? origins = {} : origins = [];
var obj = this.schemaData.result.originNames;
Object.keys(obj).forEach(function (key) {
var element = obj[key];
if (indexed) {
var i = element.origin;
origins[i] = element.name;
} else {
origins.push(element.name);
}
});
var totalOrigins = Object.keys(origins).length;
self.logger.info('Generate ' + totalOrigins + ' origins [' + misc.resultTimer(timer) + 's]');
return origins;
}
}, {
key: 'getOriginsIndexed',
value: function getOriginsIndexed() {
return this.getOrigins(true);
}
/**
* Generate Weapon/Stickers skin Case list.
* @return {Array.<Prefab>} List of Object. One object represent one case
* @public
*/
}, {
key: 'getWeaponSkinCases',
value: function getWeaponSkinCases(indexed) {
var self = this;
self.logger.info('');
self.logger.info('');
self.logger.info('-----------------------------------------');
self.logger.info('--- Weapon Skin Cases List Generation ---');
self.logger.info('-----------------------------------------');
self.logger.info('');
return this._getItemsByPrefabViaSchema('weapon_case', 'case', indexed);
}
}, {
key: 'getWeaponSkinCasesIndexed',
value: function getWeaponSkinCasesIndexed() {
return this.getWeaponSkinCases(true);
}
/**
* Generate Weapon/Stickers skin Case list.
* @return {Array.<Prefab>} List of Object. One object represent one case
* @public
*/
}, {
key: 'getCases',
value: function getCases(indexed) {
var self = this;
self.logger.info('');
self.logger.info('');
self.logger.info('-----------------------------------------');
self.logger.info('--------- Cases List Generation ---------');
self.logger.info('-----------------------------------------');
self.logger.info('');
var case1, case2, cases;
if (indexed) {
case1 = {};
case2 = {};
cases = {};
} else {
case1 = [];
case2 = [];
cases = [];
}
case1 = this._getItemsByPrefabViaSchema('weapon_case', 'case', indexed);
case2 = this._getItemsByPrefabViaSchema('weapon_case_base', 'case', indexed);
for (var attrname1 in case1) {
if (case1.hasOwnProperty(attrname1)) {
cases[attrname1] = case1[attrname1];
}
}
for (var attrname2 in case2) {
if (case2.hasOwnProperty(attrname2)) {
cases[attrname2] = case2[attrname2];
}
}
return cases;
}
}, {
key: 'getCasesIndexed',
value: function getCasesIndexed() {
return this.getCases(true);
}
/**
* Generate Weapon/Stickers skin Case keys list.
* @return {Array.<Prefab>} List of Object. One object represent one case key
* @public
*/
}, {
key: 'getCaseKeys',
value: function getCaseKeys(indexed) {
var casekeys = [];
var self = this;
self.logger.info('');
self.logger.info('');
self.logger.info('-----------------------------------------');
self.logger.info('------- Cases Keys List Generation ------');
self.logger.info('-----------------------------------------');
self.logger.info('');
casekeys = this._getItemsByPrefabViaSchema('weapon_case_key', 'case_key', indexed);
return casekeys;
}
}, {
key: 'getCaseKeysIndexed',
value: function getCaseKeysIndexed() {
return this.getCaseKeys(true);
}
/**
* Generate Stickers list.
* Note : Some unknown stickers are present in the item_game file so they have a rarity set to "default" (id 2 to 12)
* @return {Array.<Sticker>} List of Sticker. One object represent one sticker
* @public
*/
}, {
key: 'getStickers',
value: function getStickers(indexed) {
/*jshint eqeqeq: false, eqnull:true, camelcase: false */
var self = this;
var timer = misc.generateTimer();
self.logger.info('');
self.logger.info('');
self.logger.info('-----------------------------------------');
self.logger.info('------- Stickers List Generation --------');
self.logger.info('-----------------------------------------');
self.logger.info('');
var stickers;
var rawstickers = this.itemsData.items_game.sticker_kits;
indexed ? stickers = {} : stickers = [];
Object.keys(rawstickers).forEach(function (key) {
//Remove the default Sticker by remove 0 key
if (key !== '0') {
var timerStickers = misc.generateTimer();
if (indexed) {
var rarity;
if (rawstickers[key].item_rarity == null) {
rarity = 'default';
} else {
rarity = rawstickers[key].item_rarity;
}
stickers[key] = {
'name': self.getLangValue(rawstickers[key].item_name),
'techName': rawstickers[key].name,
'item_rarity': rarity
};
} else {
var sticker = new Sticker();
sticker.name = self.getLangValue(rawstickers[key].item_name);
sticker.techName = rawstickers[key].name;
sticker.defIndex = key;
if (rawstickers[key].item_rarity == null) {
sticker.rarity = 'default';
} else {
sticker.rarity = rawstickers[key].item_rarity;
}
stickers.pushUniqueNamedObject(sticker);
}
self.logger.info('Fetch ' + (indexed ? stickers[key].name : sticker.name) + ' sticker [' + misc.resultTimer(timerStickers) + 's]');
}
});
var totalStickers = Object.keys(stickers).length;
self.logger.info('-----------------------------------------');
self.logger.info('Generate ' + totalStickers + ' stickers [' + misc.resultTimer(timer) + 's]');
return stickers;
}
}, {
key: 'getStickersIndexed',
value: function getStickersIndexed() {
return this.getStickers(true);
}
/**
* Generate MusicKits list.
* @return {Array.<MusicKit>} List of MusicKit. One object represent one music kit
* @public
*/
}, {
key: 'getMusicKits',
value: function getMusicKits(indexed) {
/*jshint camelcase: false */
var self = this;
var timer = misc.generateTimer();
self.logger.info('');
self.logger.info('');
self.logger.info('-----------------------------------------');
self.logger.info('------- Music Kit List Generation ------');
self.logger.info('-----------------------------------------');
self.logger.info('');
var rawmusics = this.itemsData.items_game.music_definitions;
var musics;
indexed ? musics = {} : musics = [];
Object.keys(rawmusics).forEach(function (key) {
//Remove the default CS:GO Musics by remove 1&2 key
if (key !== '1' && key !== '2') {
var timerMusics = misc.generateTimer();
if (indexed) {
musics[key] = {
'name': self.getLangValue(rawmusics[key].loc_name),
'techName': rawmusics[key].name
};
} else {
var music = new MusicKit();
music.name = self.getLangValue(rawmusics[key].loc_name);
music.techName = rawmusics[key].name;
music.defIndex = key;
musics.pushUniqueNamedObject(music);
}
self.logger.info('Fetch ' + (indexed ? musics[key].name : music.name) + ' music kit [' + misc.resultTimer(timerMusics) + 's]');
}
});
var totalMusics = Object.keys(musics).length;
self.logger.info('-----------------------------------------');
self.logger.info('Generate ' + totalMusics + ' music kits [' + misc.resultTimer(timer) + 's]');
return musics;
}
}, {
key: 'getMusicKitsIndexed',
value: function getMusicKitsIndexed() {
return this.getMusicKits(true);
}
/**
* Generate Rarities index.
* @return {Array.<Rarity>} List of Rarity objects. One object represent one rarity.
* @public
*/
}, {
key: 'getRarities',
value: function getRarities(indexed) {
/*jshint camelcase: false */
var self = this;
var timer = misc.generateTimer();
self.logger.info('');
self.logger.info('');
self.logger.info('-----------------------------------------');
self.logger.info('---------- Rarities Generation ----------');
self.logger.info('-----------------------------------------');
self.logger.info('');
var rawrarities = this.itemsData.items_game.rarities;
var rawcolors = this.itemsData.items_game.colors;
var rarities;
indexed ? rarities = {} : rarities = [];
Object.keys(rawrarities).forEach(function (key) {
var timerRarity = misc.generateTimer();
//Hack for melee weapon :s
var wepName;
if (rawrarities[key].loc_key_weapon === 'Rarity_Unusual') {
wepName = '★ ' + self.getLangValue('RI_M');
} else {
wepName = self.getLangValue(rawrarities[key].loc_key_weapon);
}
if (indexed) {
var i = rawrarities[key].value;
rarities[i] = {
'techName': key,
'weaponName': wepName,
'miscName': self.getLangValue(rawrarities[key].loc_key),
'color': rawcolors[rawrarities[key].color].hex_color
};
} else {
var rarity = new Rarity();
rarity.weaponName = wepName;
rarity.techName = key;
rarity.miscName = self.getLangValue(rawrarities[key].loc_key);
rarity.color = rawcolors[rawrarities[key].color].hex_color;
rarity.defIndex = rawrarities[key].value;
rarities.push(rarity);
}
self.logger.info('Fetch ' + key + ' rarity [' + misc.resultTimer(timerRarity) + 's]');
});
var totalRarity = Object.keys(rarities).length;
self.logger.info('-----------------------------------------');
self.logger.info('Generate ' + totalRarity + ' rarities [' + misc.resultTimer(timer) + 's]');
return rarities;
}
}, {
key: 'getRaritiesIndexed',
value: function getRaritiesIndexed() {
return this.getRarities(true);
}
}]);
return CSGODataParser;
}();
module.exports = CSGODataParser;