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