mh3-data
Version:
Monster Hunter Tri data for monsters, quests, and weapons
61 lines • 2.29 kB
JavaScript
import { getMonster, MonsterType } from '../monsters';
import { BossLevelModifiers, getQuestById } from '../quests';
import { MonsterLevelData } from './monster-level-data';
/** Ensures a number is within valid range for a {@link MonsterLevel} */
export function isValidMonsterLevel(maybeLevel) {
if (maybeLevel < 0 || maybeLevel > 60) {
throw new Error(`'${maybeLevel}' must be within 0 and 60`);
}
}
/**
* @returns List of monster levels based on an original level and a levelModifier
*/
export function getMonsterLevelRange(monsterLevel, levelModifier) {
const result = [];
switch (levelModifier) {
case BossLevelModifiers.Fixed:
result.push(monsterLevel);
break;
case BossLevelModifiers.PlusOne:
result.push(monsterLevel - 1, monsterLevel, monsterLevel + 1);
break;
case BossLevelModifiers.PlusTwo:
result.push(monsterLevel - 2, monsterLevel - 1, monsterLevel, monsterLevel + 1, monsterLevel + 2);
break;
default:
throw new Error(`Unknown levelModifier '${levelModifier}'`);
}
result.forEach(r => isValidMonsterLevel(r));
return result;
}
/**
*
* @param monsterLevel
* @returns
*/
export function getMonsterStatMultipliers(monsterName, monsterLevel) {
const multipliers = MonsterLevelData[monsterLevel];
if (!multipliers)
throw new Error(`No multipliers found for level '${monsterLevel}'`);
if (getMonster(monsterName).type === MonsterType.EldDrg) {
// Elder Dragons always have a stagger multiplier of 1
return {
...multipliers,
stagger: 1
};
}
return multipliers;
}
/**
* @returns MonsterLevel for a given monster ID in a quest ID
* @throws Error if monster is not present in quest
*/
export function getMonsterLevelsForQuest(monsterName, questId) {
const quest = getQuestById(questId);
const monster = getMonster(monsterName);
const bossInfo = quest.bosses.find(boss => boss.monsterId === monster.id);
if (!bossInfo)
throw new Error(`Quest ID '${questId}' does not include monster ID '${monster.id}'`);
return getMonsterLevelRange(bossInfo.level, bossInfo.levelModifier);
}
//# sourceMappingURL=monster-level-util.js.map