mh3-data
Version:
Monster Hunter Tri data for monsters, quests, and weapons
122 lines (121 loc) • 4.34 kB
TypeScript
import type { MonsterLevelTypes } from '../monster-levels';
import type { ItemTypes } from '../items';
import type { MonsterTypes } from '../monsters';
import { BossLevelModifiers, MapLocation, StarLevelEnum } from './enum';
import type { NumericRange } from '../../lib';
export type QuestRegion = 'Village' | 'City';
export type QuestRank = 'Low' | 'High';
export type QuestType = 'gather' | 'hunt' | 'capture' | 'harvest' | 'escort' | 'multihunt' | 'repel' | 'slay';
export type QuestGoal = 'gathering' | 'slay' | 'capture' | 'hunt' | 'break' | 'sever' | 'sonic' | 'repel' | 'other' | 'anthill';
/**
* These properties were derived from the publicly-available MH3 Quest editor.
* The values are incorrect/flawed. ZeSpyro
*/
interface BossInfo {
readonly monsterId: MonsterTypes.Monster['id'];
readonly startingArea: 0 | 1 | 2;
readonly level: MonsterLevelTypes.MonsterLevel;
readonly size: number;
/** controls random distribution of monster's level */
readonly levelModifier: BossLevelModifiers;
/** controls random distribution of monster's size */
readonly sizeModifier: NumericRange<0, 14>;
}
/**
* Base quest type
*/
export interface Quest {
readonly id: number;
readonly name: string;
/** Village or City */
readonly region: QuestRegion;
/** Low or High rank */
readonly rank: QuestRank;
/** Gather, hunt, capture, repel, etc */
readonly type: QuestType;
readonly goal: QuestGoal;
readonly client: string;
/** Cost to initiate quest in zenny */
readonly contract: number;
/** Maximum quest time in minutes */
readonly time: number;
readonly location: MapLocation;
/** If true, hunter will spawn in random location */
readonly randomspawn: boolean;
/** Quest completion reward in zenny */
readonly reward: number;
/** Amount of zenny taken from reward per faint */
readonly ko: number;
/** Hunter Rank Points received for quest completion */
readonly hrp: number;
readonly secondaryRewards: ItemTypes.QuestReward[];
/** Key will be an ID for an item or monster depending on the {@link QuestType} */
readonly targets: Record<number, number>;
/** Large monsters that can spawn in this quest */
readonly bosses: BossInfo[];
readonly subquests?: object;
}
type NumberRequired = number;
export interface GatheringQuest extends Quest {
readonly type: 'gather';
readonly goal: 'gathering';
readonly targets: Record<ItemTypes.Item['id'], NumberRequired>;
}
export interface HarvestQuest extends Quest {
readonly type: 'harvest';
readonly goal: 'gathering';
/** Harvest Ticket */
targets: Readonly<{
396: 1;
}>;
}
export interface HuntQuest extends Quest {
readonly type: 'hunt';
readonly goal: 'hunt' | 'slay';
readonly targets: Record<MonsterTypes.Monster['id'], NumberRequired>;
readonly bosses: BossInfo[];
}
export interface MultiHuntQuest extends Quest {
readonly type: 'multihunt';
readonly goal: 'hunt';
readonly targets: Record<MonsterTypes.Monster['id'], NumberRequired>;
}
export interface CaptureQuest extends Quest {
readonly type: 'capture';
readonly goal: 'capture';
readonly targets: Record<MonsterTypes.Monster['id'], NumberRequired>;
readonly bosses: BossInfo[];
}
export interface EscortQuest extends Quest {
readonly type: 'escort';
readonly goal: 'slay';
readonly targets: Record<MonsterTypes.Monster['id'], NumberRequired>;
}
/**
* Typically used for Arena and Elder Dragon quests
*/
export interface SlayQuest extends Quest {
readonly type: 'slay';
readonly goal: 'hunt';
readonly targets: Record<MonsterTypes.Monster['id'], NumberRequired>;
readonly bosses: BossInfo[];
}
export interface RepelQuest extends Quest {
readonly type: 'repel';
readonly goal: 'repel' | 'other';
readonly bosses: BossInfo[];
}
export interface QuestMode {
readonly region: QuestRegion;
readonly starLevels: Readonly<{
[StarLevelEnum.OneStar]: Quest[];
[StarLevelEnum.TwoStar]: Quest[];
[StarLevelEnum.ThreeStar]: Quest[];
[StarLevelEnum.FourStar]: Quest[];
[StarLevelEnum.FiveStar]: Quest[];
[StarLevelEnum.SixStar]: Quest[];
}>;
readonly arena: SlayQuest[];
readonly events: Quest[];
}
export {};