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:
103 lines (102 loc) • 4.82 kB
JavaScript
;
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CharacterSkill = void 0;
const Client_1 = require("../../client/Client");
const OutOfRangeError_1 = require("../../errors/OutOfRangeError");
const ImageAssets_1 = require("../../models/assets/ImageAssets");
const CharacterInfo_1 = require("../../models/character/CharacterInfo");
/**
* Class of character's skill
*/
class CharacterSkill {
/**
* Create a Skill
* @param skillId Skill ID
* @param level Skill level (1-15). Default: 1
* @param extraLevel Levels increased by constellation (0 or 3). Default: 0
*/
constructor(skillId, level = 1, extraLevel = 0) {
/**
* Skill param descriptions
* @returns (`${description}|${param}`)[]
*/
this.paramDescriptions = [];
this.id = skillId;
const skillJson = Client_1.Client._getJsonFromCachedExcelBinOutput('AvatarSkillExcelConfigData', this.id);
this.name =
Client_1.Client._cachedTextMap.get(String(skillJson.nameTextMapHash)) || '';
this.description =
Client_1.Client._cachedTextMap.get(String(skillJson.descTextMapHash)) || '';
this.icon = new ImageAssets_1.ImageAssets(skillJson.skillIcon);
this.extraLevel = extraLevel;
this.level = level + this.extraLevel;
if (this.level < 1 || this.level > 15)
throw new OutOfRangeError_1.OutOfRangeError('level + extraLevel', this.level, 1, 15);
if (skillJson.proudSkillGroupId === undefined ||
skillJson.proudSkillGroupId === 0)
return;
const proudSkillGroupId = skillJson.proudSkillGroupId;
const proudSkillJson = Client_1.Client._getJsonFromCachedExcelBinOutput('ProudSkillExcelConfigData', proudSkillGroupId)[this.level];
const params = proudSkillJson.paramList;
proudSkillJson.paramDescList.forEach((paramDescHash) => {
const paramDesc = (Client_1.Client._cachedTextMap.get(String(paramDescHash)) || '').replace(/|/g, '');
if (paramDesc === '')
return;
this.paramDescriptions.push(paramDesc.replace(/\{param.*?\}/g, (paramTag) => {
var _b, _c, _d, _e;
const paramId = (_b = paramTag.match(/(?<=param).*?(?=:)/g)) === null || _b === void 0 ? void 0 : _b[0];
const replaceTag = (_c = paramTag.match(/(?<=:).*?(?=})/g)) === null || _c === void 0 ? void 0 : _c[0];
if (paramId === undefined || replaceTag === undefined)
return '';
const fixedIndex = +((_e = (_d = replaceTag.match(/(?<=F)./g)) === null || _d === void 0 ? void 0 : _d[0]) !== null && _e !== void 0 ? _e : '0');
const isInt = replaceTag.includes('I');
const isPercent = replaceTag.includes('P');
const paramValue = params[+paramId - 1];
if (isInt)
return `${Math.floor(paramValue)}`;
if (isPercent)
return `${(paramValue * 100).toFixed(fixedIndex)}%`;
return `${paramValue.toFixed(fixedIndex)}`;
}));
});
}
/**
* Get all skill IDs
* @returns All skill IDs
*/
static get allSkillIds() {
const characterIds = CharacterInfo_1.CharacterInfo.allCharacterIds;
return characterIds.flatMap((characterId) => {
if ([10000005, 10000007].includes(characterId)) {
return CharacterInfo_1.CharacterInfo.getTravelerSkillDepotIds(characterId).flatMap((skillDepotId) => {
return new CharacterInfo_1.CharacterInfo(characterId, skillDepotId).skillOrder;
});
}
return new CharacterInfo_1.CharacterInfo(characterId).skillOrder;
});
}
/**
* Get skill order by character ID
* @param characterId Character ID
* @param skillDepotId Skill depot ID
* @returns Skill order
*/
static getSkillOrderByCharacterId(characterId, skillDepotId) {
const avatarJson = Client_1.Client._getJsonFromCachedExcelBinOutput('AvatarExcelConfigData', characterId);
const depotId = skillDepotId && [10000005, 10000007].includes(characterId)
? skillDepotId
: avatarJson.skillDepotId;
const depotJson = Client_1.Client._getJsonFromCachedExcelBinOutput('AvatarSkillDepotExcelConfigData', depotId);
return [501, 701].includes(depotId)
? depotJson.skills.slice(0, 1)
: depotJson.skills
.slice(0, 2)
.concat(depotJson.energySkill);
}
}
exports.CharacterSkill = CharacterSkill;
_a = CharacterSkill;
(() => {
Client_1.Client._addExcelBinOutputKeyFromClassPrototype(_a.prototype);
})();