UNPKG

enka-network-api

Version:

Enka-network API wrapper for Genshin Impact.

54 lines (53 loc) 3.45 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Artifact = void 0; const ArtifactData_1 = require("./ArtifactData"); const ArtifactSplitSubstat_1 = require("./ArtifactSplitSubstat"); const StatProperty_1 = require("../StatProperty"); const config_file_js_1 = require("config_file.js"); const IGOODResolvable_1 = require("../good/IGOODResolvable"); const ExcelTransformer_1 = require("../../client/ExcelTransformer"); class Artifact { constructor(data, enka) { var _a, _b; /** The name of character who has this artifact for the GOOD. */ this.location = null; this.enka = enka; this._data = data; const json = new config_file_js_1.JsonReader(config_file_js_1.defaultJsonOptions, this._data); const reliquary = json.get("reliquary"); this.artifactData = ArtifactData_1.ArtifactData.getById(json.getAsNumber("itemId"), enka); this.level = reliquary.getAsNumber("level"); // const mainstatId = reliquary.getAsNumber("mainPropId"); // const mainstatFightProp: FightProp = enka.cachedAssetsManager.getGenshinCacheData("ReliquaryMainPropExcelConfigData").findArray((_, m) => m.getAsNumber("id") === mainstatId)?.[1].getAsString("propType") as FightProp; const mainstatFightProp = json.getAsString("flat", "reliquaryMainstat", "mainPropId"); const levelInfo = enka.cachedAssetsManager.getExcelData("ReliquaryLevelExcelConfigData", this.artifactData.stars, this.level); const mainstatData = levelInfo ? (_a = new config_file_js_1.JsonReader(ExcelTransformer_1.excelJsonOptions, levelInfo).get("addProps").findArray((_, p) => p.getAsString("propType") === mainstatFightProp)) === null || _a === void 0 ? void 0 : _a[1] : null; if (!mainstatData) throw new Error(`Failed to find the mainstat data for ${mainstatFightProp}: stars=${this.artifactData.stars}, level=${this.level}`); this.mainstat = new StatProperty_1.StatProperty(mainstatFightProp, mainstatData.getAsNumber("value"), enka); const splitSubStats = reliquary.has("appendPropIdList") ? (_b = reliquary.get("appendPropIdList")) === null || _b === void 0 ? void 0 : _b.mapArray((_, id) => ArtifactSplitSubstat_1.ArtifactSplitSubstat.getById(id.getAsNumber(), enka)) : []; this.substats = { total: StatProperty_1.StatProperty.sumStatProperties(splitSubStats, enka), split: splitSubStats, }; } /** `lock` is always false since enka.network cannot get the lock state from the game. */ toGOOD() { var _a; return { setKey: (0, IGOODResolvable_1.convertToGOODKey)(this.artifactData.set.name.get("en")), slotKey: (0, IGOODResolvable_1.convertToGOODArtifactSlotKey)(this.artifactData.equipType), level: this.level - 1, rarity: this.artifactData.stars, mainStatKey: (0, IGOODResolvable_1.convertToGOODStatKey)(this.mainstat.fightProp), location: (_a = this.location) !== null && _a !== void 0 ? _a : "", lock: false, substats: this.substats.total.map((substat) => ({ key: (0, IGOODResolvable_1.convertToGOODStatKey)(substat.fightProp), value: substat.isPercent ? Math.round(substat.getMultipliedValue() * 10) / 10 : Math.round(substat.getMultipliedValue()), })), }; } } exports.Artifact = Artifact;