genshin-manager
Version:
<div align="center"> <p> <a href="https://www.npmjs.com/package/genshin-manager"><img src="https://img.shields.io/npm/v/genshin-manager.svg?maxAge=3600" alt="npm version" /></a> <a href="https://www.npmjs.com/package/genshin-manager"><img src="https:
102 lines (101 loc) • 4.83 kB
JavaScript
"use strict";
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Weapon = void 0;
const Client_1 = require("../../client/Client");
const OutOfRangeError_1 = require("../../errors/OutOfRangeError");
const ImageAssets_1 = require("../../models/assets/ImageAssets");
const StatProperty_1 = require("../../models/StatProperty");
const WeaponAscension_1 = require("../../models/weapon/WeaponAscension");
const WeaponRefinement_1 = require("../../models/weapon/WeaponRefinement");
const calculatePromoteLevel_1 = require("../../utils/calculatePromoteLevel");
/**
* Class of weapon
*/
class Weapon {
/**
* Create a Weapon
* @param weaponId Weapon ID
* @param level Weapon level (1-90). Default: 1
* @param isAscended Weapon is ascended. Default: true
* @param refinementRank Weapon refinement rank (1-5). Default: 1
*/
constructor(weaponId, level = 1, isAscended = true, refinementRank = 1) {
this.id = weaponId;
this.level = level;
const maxPromoteLevel = WeaponAscension_1.WeaponAscension.getMaxPromoteLevelByWeaponId(weaponId);
const maxAscension = new WeaponAscension_1.WeaponAscension(this.id, maxPromoteLevel);
this.maxLevel = maxAscension.unlockMaxLevel;
if (this.level < 1 || this.level > this.maxLevel)
throw new OutOfRangeError_1.OutOfRangeError('level', this.level, 1, this.maxLevel);
this.isAscended = isAscended;
this.refinementRank = refinementRank;
if (this.refinementRank < 1 || this.refinementRank > 5)
throw new OutOfRangeError_1.OutOfRangeError('refinementRank', this.refinementRank, 1, 5);
const weaponJson = Client_1.Client._getJsonFromCachedExcelBinOutput('WeaponExcelConfigData', this.id);
const weaponPromotesJson = Client_1.Client._getJsonFromCachedExcelBinOutput('WeaponPromoteExcelConfigData', weaponJson.weaponPromoteId);
this.promoteLevel = (0, calculatePromoteLevel_1.calculatePromoteLevel)(weaponPromotesJson, this.level, this.isAscended);
const ascension = new WeaponAscension_1.WeaponAscension(this.id, this.promoteLevel);
const refinement = new WeaponRefinement_1.WeaponRefinement(this.id, this.refinementRank);
this.skillName = refinement.skillName;
this.skillDescription = refinement.skillDescription;
this.name =
Client_1.Client._cachedTextMap.get(String(weaponJson.nameTextMapHash)) || '';
this.description =
Client_1.Client._cachedTextMap.get(String(weaponJson.descTextMapHash)) || '';
this.type = weaponJson.weaponType;
this.rarity = weaponJson.rankLevel;
const weaponPropJsonArray = weaponJson.weaponProp;
this.stats = weaponPropJsonArray
.map((weaponPropJson) => {
var _b, _c;
if (!weaponPropJson.initValue || !weaponPropJson.propType)
return;
return this.getStatPropertyByJson(weaponPropJson, (_c = (_b = ascension.addProps.find((prop) => prop.type === weaponPropJson.propType)) === null || _b === void 0 ? void 0 : _b.value) !== null && _c !== void 0 ? _c : 0);
})
.filter((stat) => stat !== undefined);
this.isAwaken = this.promoteLevel >= 2;
this.icon = new ImageAssets_1.ImageAssets((this.isAwaken ? weaponJson.awakenIcon : weaponJson.icon));
}
/**
* Get all weapon IDs
* @returns All weapon IDs
*/
static get allWeaponIds() {
const weaponDatas = Object.values(Client_1.Client._getCachedExcelBinOutputByName('WeaponExcelConfigData'));
return weaponDatas
.filter((data) => !_a.blackWeaponIds.includes(data.id))
.map((data) => data.id);
}
/**
* Get weapon ID by name
* @param name Weapon name
* @returns Weapon ID
*/
static getWeaponIdByName(name) {
return Client_1.Client._searchIdInExcelBinOutByText('WeaponExcelConfigData', name).map((k) => +k);
}
/**
* Get stat value by json
* @param weaponPropJson Weapon property json
* @param addValue Add value
* @returns Stat value
*/
getStatPropertyByJson(weaponPropJson, addValue = 0) {
const curveValue = Client_1.Client._getJsonFromCachedExcelBinOutput('WeaponCurveExcelConfigData', weaponPropJson.type)[this.level];
const statValue = weaponPropJson.initValue * curveValue + addValue;
return new StatProperty_1.StatProperty(weaponPropJson.propType, statValue);
}
}
exports.Weapon = Weapon;
_a = Weapon;
/**
* Black weapon IDs
*/
Weapon.blackWeaponIds = [
10002, 10003, 10004, 10005, 10006, 10008, 11411, 11508, 12304, 12508, 12509,
13304, 13503, 14306, 14411, 14508, 15306, 20001,
];
(() => {
Client_1.Client._addExcelBinOutputKeyFromClassPrototype(_a.prototype);
})();