UNPKG

@skullandbonestools/snbdata

Version:

Inofficial data package for the Skull and Bones game by Ubisoft.

69 lines 3.19 kB
import cosmeticsData from '../../data/cosmetics.json'; import { Contracts } from './contracts'; import { Events } from './events'; import { Materials } from './materials'; import { Seasons } from './seasons'; import { Sets } from './sets'; import { WorldEvents } from './worldEvents'; export class Cosmetic { constructor(id, type, dateAdded, lastUpdated, rarity, tier, set, obtainable, effect, season, contract, basic, upgrades, required, requiredRank, bounty, event, worldEvent) { this.id = id; this.type = type; this.dateAdded = dateAdded; this.lastUpdated = lastUpdated; this.rarity = rarity; this.tier = tier; this.set = set; this.obtainable = obtainable; this.effect = effect; this.season = season; this.contract = contract; this.basic = basic; this.upgrades = upgrades; this.required = required; this.requiredRank = requiredRank; this.bounty = bounty; this.event = event; this.worldEvent = worldEvent; } static fromRawData(rawData) { const season = rawData.season; const set = rawData.set; const contract = rawData.contract; const event = rawData.event; const worldEvent = Array.isArray(rawData.worldEvent) ? rawData.worldEvent.map((_worldEvent) => WorldEvents[_worldEvent]) : WorldEvents[rawData.worldEvent]; const required = rawData.required ? new Map() : undefined; if (required) { for (const [requiredKey, quantity] of Object.entries(rawData.required)) { const requiredMaterial = requiredKey; required.set(Materials[requiredMaterial], quantity); } } return new Cosmetic(rawData.id, rawData.type, new Date(rawData.dateAdded), new Date(rawData.lastUpdated), rawData.rarity ?? undefined, rawData.tier ?? undefined, rawData.set ? Sets[set] : undefined, rawData.obtainable ?? undefined, rawData.effect ?? undefined, rawData.season ? Seasons[season] : undefined, rawData.contract ? Contracts[contract] : undefined, undefined, undefined, required, rawData.requiredRank ?? undefined, rawData.bounty ?? undefined, rawData.event ? Events[event] : undefined, worldEvent ?? undefined); } static updateCosmeticWithUpgrades(key, rawData, cosmetics) { if (rawData.basic) { const basic = cosmetics[rawData.basic]; if (basic) cosmetics[key].basic = basic; } if (rawData.upgrades) { const upgrades = rawData.upgrades.map((upgradeCosmetic) => cosmetics[upgradeCosmetic]); cosmetics[key].upgrades = upgrades; } } static loadCosmetics() { const cosmetics = {}; for (const [key, value] of Object.entries(cosmeticsData)) { cosmetics[key] = Cosmetic.fromRawData(value); } for (const [key, value] of Object.entries(cosmeticsData)) { Cosmetic.updateCosmeticWithUpgrades(key, value, cosmetics); } return cosmetics; } } export const Cosmetics = Cosmetic.loadCosmetics(); //# sourceMappingURL=cosmetics.js.map