Setup for azurapi-js
- Updates
ships.json
,ship-list.json
,equipments.json
with fresh data
- Fetch
https://raw.githubusercontent.com/AzurAPI/azurapi-js-setup/master/version-info.json
.application/json
- Check respective version numbers from
ships
/equipments
.- Example:
ships['version-number']
- Example:
- If it is greater than the version number on your local copy. You need to update from either
https://raw.githubusercontent.com/AzurAPI/azurapi-js-setup/master/ships.json
https://raw.githubusercontent.com/AzurAPI/azurapi-js-setup/master/equipments.json
- Overwrite your local copy, and reload it into your program
- Clone this repository
- Update your local copy with
const azurlane = require("./index.js");
azurlane.refreshShips(true);
azurlane.refreshEquipments(true);
azurlane.refreshChapter(true);
azurlane.refreshShipImages();
azurlane.refreshEQImages();
azurlane.publishShips();
azurlane.publishEQ();
- Bewared that this update program will use up a lot of bandwidth and processing power
- To rely on local cache, remove all the
true
parameters
When a single ship's info is extracted, it is of
Ship
type
export type Url = string;
export type Stat = 'health' | 'armor' | 'reload' | 'luck' | 'firepower' | 'torpedo' | 'evasion' | 'speed' | 'antiair'
| 'aviation' | 'oilConsumption' | 'accuracy' | 'antisubmarineWarfare' | 'oxygen' | 'ammunition' | 'huntingRange';
export const isStat = (str: string) => ['health', 'armor', 'reload', 'luck', 'firepower', 'torpedo', 'evasion', 'speed', 'antiair'
, 'aviation', 'oilConsumption', 'accuracy', 'antisubmarineWarfare', 'oxygen', 'ammunition', 'huntingRange'].includes(str);
export type ShipID = string;
export type Rarity = 'Normal' | 'Rare' | 'Epic' | 'Super Rare' | 'Ultra Rare' | 'Priority' | 'Decisive' | 'Unreleased';
export type LimitBreak = string[];
export type ShipNames = { // Ship's name
code: string;
en: string;
cn: string;
jp: string;
kr: string;
};
export type ShipStats = {
baseStats: Stats;
level100: Stats;
level120: Stats;
level100Retrofit?: Stats;
level120Retrofit?: Stats;
};
export type FleetTech = { // fleet tech stuff
statsBonus: {
collection?: Bonus;
maxLevel?: Bonus;
};
techPoints: {
collection: number;
maxLimitBreak: number;
maxLevel: number;
total: number;
};
};
export class Ship {
wikiUrl: Url; // An valid, full url to its wiki page
id: ShipID; // ID of ship, provided by the wiki (not in game id)
names: ShipNames;
thumbnail: Url;
hexagon: [number, number, number, number, number, number];
class: string; // Ship's class
nationality: string;// Ship's nationality
hullType: string; // Ship type (Destroyer etc)
rarity: Rarity; // Super Rare, hopefully
stars: {
stars: string;
value: number;
};
stats: ShipStats;
slots: [Slot, Slot, Slot];
enhanceValue: { firepower: number, torpedo: number, aviation: number, reload: number };
scrapValue: {
coin: number;
oil: number;
medal: number;
};
skills: Skill[];
skins: Skin[];
gallery: GalleryItem[];
limitBreaks: LimitBreak[]; // first layer = breaks, second layer = bonus
devLevels: DevLevel[]
fleetTech: FleetTech;
unreleased?: boolean;
retrofit: boolean; // if the ship is retrofittable
retrofitId: string; // the id after retrofit
retrofitHullType: string; // if the ship changes type
retrofitProjects: { [id: string]: RetrofitProject };
construction: {
constructionTime: string;
availableIn: {
light: boolean;
heavy: boolean;
aviation: boolean;
limited: boolean;
exchange: boolean;
};
};
obtainedFrom: {
obtainedFrom?: string; // source, etc "Available in Medal Exchange for \"Medal\" 80."
fromMaps: string[]; // map ids, etc "1-1" "10-2"
};
misc: {
artist?: Artist;
web?: Artist;
pixiv?: Artist;
twitter?: Artist;
voice?: Artist;
};
}
export type Bonus = { // on collection
applicable: string[]; // applicable ship types (i.e. Destroyer)
stat: Stat; // name of stat to enhance
bonus: string; // human-readable version of how much to enhance
};
export type Stats = {
[k in Stat]?: string;
};
export type Slot = {
type: string;
kaiEfficiency?: number;
minEfficiency: number;
maxEfficiency: number;
}
export type Skill = {
icon: Url;
names: {
en: string;
cn: string;
jp: string;
};
description: string;
color: string;
}
export type SkinInfo = {
enClient?: string;
cnClient?: string;
jpClient?: string;
cost?: number;
obtainedFrom: string;
live2dModel: boolean;
};
export interface Skin {
name: string;
chibi: Url;
image: Url;
cn?: Url; // censored
bg?: Url; // with background
nobg?: Url; // without background (only used internally)
background: Url; // scenery background
info: SkinInfo;
}
export type GalleryItem = {
description: string; // self-explanatory
url: Url; // the image url
}
export type Artist = {
name: string;
url: Url;
}
export type ProjectID = string;
export type RetrofitProject = {
id: ProjectID;
grade: string;
attributes: string[];
materials: string[];
coins: number;
level: number;
levelBreakLevel: number;
levelBreakStars: string;
recurrence: number;
require: ProjectID[];
}
export type DevLevel = {
level: string;
buffs: string[];
}
class Ship {
Default: Array<Line>;
// [Skin Name]: Array<Line>; // note: the skin name is directly from the wiki page
// ...
}
class Line {
event: string; // the event (touch etc) name
en?: string; // the line in english
zh?: string; // the line in chinese
jp?: string; // the line in japanese
audio?: string; // the line's audio url, file type = "audio/ogg"
}
Data is obtained from the official Azur Lane Wiki