@skullandbonestools/snbdata
Version:
Inofficial data package for the Skull and Bones game by Ubisoft.
69 lines • 3.19 kB
JavaScript
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