UNPKG

@skullandbonestools/snbdata

Version:

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

98 lines 4.61 kB
import shipsData from '../../data/ships.json'; import { Contracts } from './contracts'; import { Items } from './items'; import { Materials } from './materials'; import { Seasons } from './seasons'; export class Ship { constructor(id, size, type, archetype, contract, blueprint, obtainable, season, hitpoints, braceStrength, braceStrengthRecovery, stamina, baseRank, requiredRank, contact, sailSpeed, cargo, required, slots, perks, dateAdded, lastUpdated) { this.id = id; this.size = size; this.type = type; this.archetype = archetype; this.contract = contract; this.blueprint = blueprint; this.obtainable = obtainable; this.season = season; this.hitpoints = hitpoints; this.braceStrength = braceStrength; this.braceStrengthRecovery = braceStrengthRecovery; this.stamina = stamina; this.baseRank = baseRank; this.requiredRank = requiredRank; this.contact = contact; this.sailSpeed = sailSpeed; this.cargo = cargo; this.required = required; this.slots = slots; this.perks = perks; this.dateAdded = dateAdded; this.lastUpdated = lastUpdated; } // Static method to create a Ship instance from raw data static fromRawData(rawData) { const season = rawData.season; const contract = rawData.contract; 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); } } let obtainable = rawData.obtainable ?? undefined; if (Array.isArray(obtainable)) { const _obtainable = new Array(); for (const obtainableKey of rawData.obtainable) { if (Array.isArray(obtainableKey)) { const obtainableGroup = new Array(); for (const subKey of obtainableKey) { const obtainableItem = Items[subKey]; if (obtainableItem && obtainableItem.type === "chest") { obtainableGroup.push(obtainableItem); } else { obtainableGroup.push(subKey); } } _obtainable.push(obtainableGroup); } else { const obtainableItem = Items[obtainableKey]; if (obtainableItem && obtainableItem.type === "chest") { _obtainable.push(obtainableItem); } else { _obtainable.push(obtainableKey); } } } obtainable = _obtainable; } else if (obtainable) { const obtainableItem = Items[rawData.obtainable]; if (obtainableItem && obtainableItem.type === "chest") { obtainable = obtainableItem; } } return new Ship(rawData.id, rawData.size, rawData.type, rawData.archetype, rawData.contract ? Contracts[contract] : undefined, rawData.blueprint ?? undefined, obtainable, season ? Seasons[season] : undefined, rawData.hitpoints, rawData.braceStrength, rawData.braceStrengthRecovery, rawData.stamina ?? undefined, rawData.baseRank, rawData.requiredRank ?? undefined, rawData.contact ?? undefined, rawData.sailSpeed, rawData.cargo, required, { attachement: rawData.slots.attachement ?? undefined, frontWeapon: rawData.slots.frontWeapon ?? undefined, leftSideWeapon: rawData.slots.leftSideWeapon ?? undefined, rightSideWeapon: rawData.slots.rightSideWeapon ?? undefined, aftWeapon: rawData.slots.aftWeapon ?? undefined, auxiliaryWeapon: rawData.slots.auxiliaryWeapon ?? undefined, furniture: rawData.slots.furniture ?? undefined, ultimate: rawData.slots.ultimate ?? undefined }, rawData.perks, new Date(rawData.dateAdded), new Date(rawData.lastUpdated)); } // Static method to load all ships from the JSON data static loadShips() { const ships = {}; for (const [key, value] of Object.entries(shipsData)) { ships[key] = Ship.fromRawData(value); } return ships; } } export const Ships = Ship.loadShips(); //# sourceMappingURL=ships.js.map