UNPKG

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
"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); })();