UNPKG

@juice789/tf2items

Version:
152 lines (142 loc) 3.9 kB
const { compose, split, map, reduce, pickBy, mergeRight, converge, concat, join, head, tail, filter } = require('ramda') const { safeItems } = require('./schemaItems.js') const { qualityNames, killstreakTiers, wears } = require('./schemaHelper.json') const { textures, particleEffects } = require('./schema.json') const skuFromItem = ({ defindex, quality, uncraftable, elevated, effect, killstreakTier, festivized, target, output, oq, texture, wear, australium, series, craft, paintColor, halloweenSpell }) => [ defindex, quality, ['1', true].includes(uncraftable) && 'uncraftable', ['1', true].includes(elevated) && 'strange', effect && 'u-' + effect, killstreakTier && ['1', '2', '3', 1, 2, 3].includes(killstreakTier) && 'kt-' + killstreakTier, ['1', true].includes(festivized) && 'festive', target && 'td-' + target, output && 'od-' + output, oq && 'oq-' + oq, texture && 'pk-' + texture, wear && 'w-' + wear, ['1', true].includes(australium) && 'australium', series && isNaN(series) === false && 'c-' + parseInt(series), craft && isNaN(craft) === false && 'no-' + parseInt(craft), paintColor && 'pc-' + paintColor, halloweenSpell && 'hs-' + halloweenSpell ].filter(Boolean).join(';') const rules = { uncraftable: 'uncraftable', strange: 'elevated', u: "effect", kt: "killstreakTier", festive: 'festivized', td: "target", od: "output", oq: "oq", pk: "texture", w: "wear", australium: 'australium', c: "series", no: "craft", pc: "paintColor", hs: "halloweenSpell" } const decodeRules = compose( pickBy((v, k) => k !== 'undefined'), reduce(mergeRight, {}), map( compose( ([k, value = true]) => ({ [rules[k]]: value }), converge(concat, [compose(Array.of, head), compose(filter(Boolean), Array.of, join('-'), tail)]), split('-') ) ) ) const itemFromSku = (sku) => { const [defindex, quality, ...more] = sku.split(';') const item = { defindex, quality, ...decodeRules(more) } item.sku = sku return item } const getName = ({ defindex, quality, uncraftable, elevated, effect, killstreakTier, festivized, target, output, oq, texture, wear, australium, series, craft }, bpTexture = false, qualityBpStyle = false, useProperName = false, showUncraft = true ) => [ craft && '#' + craft, uncraftable && showUncraft && 'Non-Craftable', elevated && 'Strange', quality && !['6', '15'].includes(quality.toString()) && (qualityBpStyle ? !effect : true) && qualityNames[quality], oq && oq.toString() !== '6' && qualityNames[oq], target && killstreakTier && killstreakTiers[killstreakTier], target && safeItems[target].item_name, output && safeItems[output].item_name, effect && particleEffects[effect], festivized && 'Festivized', !target && killstreakTier && killstreakTiers[killstreakTier], texture && textures[texture], bpTexture && '|', australium && 'Australium', useProperName && safeItems[defindex].propername === '1' && quality.toString() === '6' && !uncraftable && !elevated && !festivized && !killstreakTier && 'The', safeItems[defindex].item_name, wear && '(' + wears[wear] + ')', series && '#' + series ].filter(Boolean).join(' ').replace('\\n', ` `) const itemNameFromSku = (sku, ...params) => { const item = itemFromSku(sku) return getName(item, ...params) } module.exports = { skuFromItem, itemFromSku, getName, itemNameFromSku }