@juice789/tf2items
Version:
tf2 item schema thingys
166 lines (147 loc) • 5.1 kB
JavaScript
import removeAccents from 'remove-accents'
import { itemFromSku } from './sku.js'
import { toBpQuality, toBpName, toBpPriceIndex } from './skuBp.js'
import schemaHelper from './schemaHelper.json' with { type: 'json' }
import schema from './schema.json' with { type: 'json' }
import { safeItems as items } from './schemaItems.js'
const { qualityNames, killstreakTiers, wears } = schemaHelper
const { particleEffects, textures } = schema
export const marketHashNameFromSku = (sku) => {
const {
defindex,
quality,
killstreakTier,
target,
output,
oq,
elevated,
festivized,
texture,
wear,
australium,
series,
uncraftable
} = itemFromSku(sku)
const chemSeries = {
20000: 1,
20005: 2
}
const marketHashName = [
oq && oq !== '6' && qualityNames[oq],
elevated && 'Strange',
!['6', '15'].includes(quality) && qualityNames[quality],
festivized && 'Festivized',
killstreakTier && killstreakTiers[killstreakTier],
australium && 'Australium',
texture && textures[texture],
target && items[target].item_name,
output && items[output].item_name,
items[defindex].propername === '1' && quality.toString() === '6' && !elevated && !festivized && !killstreakTier && 'The',
items[defindex].item_name,
wear && '(' + wears[wear] + ')',
chemSeries[defindex] && 'Series #' + chemSeries[defindex],
series && !items[defindex].seriesHidden && 'Series #' + series
].filter(Boolean).join(' ')
return marketHashName
}
export const manncoUrl = (sku) => {
const {
defindex,
quality,
uncraftable,
killstreakTier,
target,
output,
oq,
elevated,
festivized,
texture,
wear,
australium,
series,
effect,
rch
} = itemFromSku(sku)
const chemSeries = {
20000: 1,
20005: 2
}
const manncoName = [
440,
uncraftable && 'uncraftable',
oq && oq !== '6' && qualityNames[oq],
effect && particleEffects[effect],
elevated && 'strange',
['6', '15'].includes(quality) === false && qualityNames[quality],
festivized && 'festivized',
killstreakTier && killstreakTiers[killstreakTier],
australium && 'australium',
texture && textures[texture],
target && items[target].item_name,
output && items[output].item_name,
items[defindex].propername === '1' && quality.toString() === '6' && !elevated && !festivized && !killstreakTier && 'The',
defindex === '0000' ? (rch ? items[rch].item_name.replace('\\n', ' ') : 'random craft hat') : items[defindex].item_name.replace('\\n', ' '),
wear && wears[wear],
chemSeries[defindex] && 'series-' + chemSeries[defindex],
series && (!items[defindex].seriesHidden || ['111', '112', '113', '114', '115', '116'].includes(series)) && 'series-' + series
].filter(Boolean).join('-')
const url = removeAccents(manncoName).replaceAll(/[^0-9a-zA-Z -]/g, '').replaceAll(' ', '-').toLowerCase()
return 'https://mannco.store/item/' + url
}
export const scmUrl = (sku) => {
const marketHashName = marketHashNameFromSku(sku)
return marketHashName.includes('Undefined item')
? '#' + encodeURIComponent(marketHashName)
: 'https://steamcommunity.com/market/listings/440/' + encodeURIComponent(marketHashName)
}
export const bpUrl = (sku) => {
const {
uncraftable
} = itemFromSku(sku)
const bpUrl = [
toBpQuality(sku),
encodeURIComponent(toBpName(sku)),
'Tradable',
uncraftable === true ? 'Non-Craftable' : 'Craftable',
toBpPriceIndex(sku)
].filter(Boolean).join('/')
return 'https://backpack.tf/stats/' + bpUrl
}
export const marketplaceUrl = (sku) => {
const {
defindex,
quality,
uncraftable,
killstreakTier,
target,
output,
oq,
elevated,
festivized,
texture,
wear,
australium,
series,
craft,
effect,
rch
} = itemFromSku(sku)
const marketplaceSku = [
defindex === '0000' ? (rch || '-100') : defindex,
quality,
effect && 'u' + effect,
wear && 'w' + wear,
texture && 'pk' + texture,
elevated && 'strange',
series && 'c' + series,
craft && 'n' + craft,
uncraftable && 'uncraftable',
australium && 'australium',
killstreakTier && 'kt-' + killstreakTier,
festivized && 'festive',
target && 'td-' + target,
output && 'od-' + output,
oq && 'oq-' + oq
].filter(Boolean).join(';')
return 'https://marketplace.tf/items/tf2/' + marketplaceSku
}