mh3-data
Version:
Monster Hunter Tri data for monsters, quests, and weapons
148 lines • 4.33 kB
JavaScript
import {} from '../monsters';
import { CityQuestData } from './city-quest-data';
import { VillageQuestData } from './village-quest-data';
/**
* Type guard for a {@link HuntQuest}
*/
export function isHuntQuest(quest) {
return quest.type === 'hunt';
}
/**
* Type guard for a {@link MultiHuntQuest}
*/
export function isMultiHuntQuest(quest) {
return quest.type === 'multihunt';
}
/**
* Type guard for a {@link CaptureQuest}
*/
export function isCaptureQuest(quest) {
return quest.type === 'capture';
}
/**
* Type guard for a {@link EscortQuest}
*/
export function isEscortQuest(quest) {
return quest.type === 'escort';
}
/**
* Type guard for a {@link SlayQuest}
*/
export function isSlayQuest(quest) {
return quest.type === 'slay';
}
/**
* Type guard for a {@link RepelQuest}
*/
export function isRepelQuest(quest) {
return quest.type === 'repel';
}
/**
* Type guard for a {@link GatheringQuest}
*/
export function isGatheringQuest(quest) {
return quest.type === 'gather';
}
/**
* Type guard for a {@link HarvestQuest}
*/
export function isHarvestQuest(quest) {
return quest.type === 'harvest';
}
/**
* @param id Large Monster ID to search for
* @param region quest regions to return
* @returns a list of quests with a given large monster as the target
*/
export function getQuestsWithLargeMonster(id, region) {
const cityQuests = Object.values(CityQuestData.starLevels)
.flat()
.concat(CityQuestData.events);
const villageQuests = Object.values(VillageQuestData.starLevels).flat();
let quests = [];
switch (region) {
case 'Village':
quests = villageQuests;
break;
case 'City':
quests = cityQuests;
break;
case 'Both':
quests = villageQuests.concat(cityQuests);
break;
default:
throw new Error(`Invalid quest region ${region}`);
}
// Filter down quests that contain this large monster ID
return quests.filter(quest => quest.bosses.some(bossInfo => bossInfo.monsterId === id));
}
/**
* @region Village or City
* @starLevel 1 star, 4 star, etc
* @returns all quests corresponding to the provided region and star level
*/
export function getQuestByStarLevel(region, starLevel) {
switch (region) {
case 'Village':
return Object.values(VillageQuestData.starLevels[starLevel]);
case 'City':
return Object.values(CityQuestData.starLevels[starLevel]);
default:
throw new Error(`Invalid quest region ${region}`);
}
}
/**
* @returns all arena quests from a particular region
*/
export function getArenaQuests(region) {
switch (region) {
case 'Village':
return Object.values(VillageQuestData.arena);
case 'City':
return Object.values(CityQuestData.arena);
default:
throw new Error(`Invalid quest region ${region}`);
}
}
/**
* @returns all event quests from a particular region
*/
export function getEventQuests(region) {
switch (region) {
case 'Village':
return Object.values(VillageQuestData.events);
case 'City':
return Object.values(CityQuestData.events);
default:
throw new Error(`Invalid quest region ${region}`);
}
}
/**
* @returns Quest with a given ID
* @throws error if quest cannot be found
*/
export function getQuestById(questId) {
const villageQuests = Object.values(VillageQuestData.starLevels)
.flat()
.concat(VillageQuestData.arena);
let quest = villageQuests.find(quest => quest.id === questId);
if (quest)
return quest;
const cityQuests = Object.values(CityQuestData.starLevels)
.flat()
.concat(CityQuestData.events)
.concat(CityQuestData.arena);
quest = cityQuests.find(quest => quest.id === questId);
if (!quest)
throw new Error(`Could not find quest with ID ${questId}`);
return quest;
}
/**
* Verify if a monster is present in a particular quest
* @returns true if monster is in quest, otherwise false
*/
export function isMonsterInQuest(monsterId, questId) {
const quest = getQuestById(questId);
return quest.bosses.some(boss => boss.monsterId === monsterId);
}
//# sourceMappingURL=quests-util.js.map