UNPKG

enka-network-api

Version:

Enka-network API wrapper for Genshin Impact.

48 lines (47 loc) 2.78 kB
"use strict"; 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;