@skullandbonestools/snbdata
Version:
Inofficial data package for the Skull and Bones game by Ubisoft.
60 lines • 2.97 kB
JavaScript
import shipsData from '../../data/ships.json';
import { Contracts } from './contracts';
import { Materials } from './materials';
import { Seasons } from './seasons';
export class Ship {
constructor(id, size, type, contract, blueprint, 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.contract = contract;
this.blueprint = blueprint;
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);
}
}
return new Ship(rawData.id, rawData.size, rawData.type, rawData.contract ? Contracts[contract] : undefined, rawData.blueprint ?? undefined, 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