enka-network-api
Version:
Enka-network API wrapper for Genshin Impact.
54 lines (53 loc) • 3.45 kB
JavaScript
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;
;