enka-network-api
Version:
Enka-network API wrapper for Genshin Impact.
48 lines (47 loc) • 2.78 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.ArtifactSet = void 0;
const AssetsNotFoundError_1 = require("../../errors/AssetsNotFoundError");
const ImageAssets_1 = require("../assets/ImageAssets");
const TextAssets_1 = require("../assets/TextAssets");
const ArtifactSetBonus_1 = require("./ArtifactSetBonus");
const config_file_js_1 = require("config_file.js");
const ArtifactData_1 = require("./ArtifactData");
const ExcelTransformer_1 = require("../../client/ExcelTransformer");
class ArtifactSet {
constructor(data, enka) {
this.enka = enka;
this._data = data;
const json = new config_file_js_1.JsonReader(ExcelTransformer_1.excelJsonOptions, this._data);
this.id = json.getAsNumber("setId");
const setNeedNum = json.get("setNeedNum").mapArray((_, p) => p.getAsNumber());
const setBonusData = enka.cachedAssetsManager.getExcelData("EquipAffixExcelConfigData", json.getAsNumber("equipAffixId"));
if (!setBonusData)
throw new AssetsNotFoundError_1.AssetsNotFoundError("Artifact Set Bonus", `${this.id}-${json.getAsNumber("equipAffixId")}`);
if (Object.keys(setBonusData).length !== setNeedNum.length)
throw new Error(`Missing some set bonus for this artifact set (ID: ${this.id})`);
this._setBonusData = setBonusData;
this.setBonus = setNeedNum.map((n, i) => new ArtifactSetBonus_1.ArtifactSetBonus(n, this._setBonusData[i], enka));
this.icon = new ImageAssets_1.ImageAssets(json.getAsString("setIcon"), enka);
this.name = new TextAssets_1.TextAssets(new config_file_js_1.JsonReader(ExcelTransformer_1.excelJsonOptions, this._setBonusData[0]).getAsNumber("nameTextMapHash"), enka);
}
static getById(id, enka) {
const data = enka.cachedAssetsManager.getExcelData("ReliquarySetExcelConfigData", id);
if (!data)
throw new AssetsNotFoundError_1.AssetsNotFoundError("ArtifactSet", id);
return new ArtifactSet(data, enka);
}
static getActiveSetBonus(artifacts) {
const artifactSets = artifacts.map(a => (a instanceof ArtifactSet) ? a : (a instanceof ArtifactData_1.ArtifactData) ? a.set : a.artifactData.set);
const separated = (0, config_file_js_1.separateByValue)(artifactSets, a => a.id.toString());
const artifactSetCounts = Object.values(separated).map(array => { return { count: array.length, set: array[0] }; });
return artifactSetCounts.map(obj => {
return {
set: obj.set,
count: obj.count,
activeBonus: obj.set.setBonus.filter(bonus => bonus.needCount <= obj.count),
};
}).sort((a, b) => b.count - a.count);
}
}
exports.ArtifactSet = ArtifactSet;
;