/** * RPG 运行时任务辅助与道具意图共享契约。 * 该文件只承载 quest / runtime item 辅助类型,不混入 runtime story 主状态。 */ import type { JsonObject } from './common'; export const QUEST_NARRATIVE_TYPES = [ 'bounty', 'escort', 'investigation', 'retrieval', 'relationship', 'trial', ] as const; export type SharedQuestNarrativeType = (typeof QUEST_NARRATIVE_TYPES)[number]; export const QUEST_OBJECTIVE_KINDS = [ 'defeat_hostile_npc', 'inspect_treasure', 'spar_with_npc', 'talk_to_npc', 'reach_scene', 'deliver_item', ] as const; export type SharedQuestObjectiveKind = (typeof QUEST_OBJECTIVE_KINDS)[number]; export const QUEST_URGENCY_LEVELS = ['low', 'medium', 'high'] as const; export type SharedQuestUrgency = (typeof QUEST_URGENCY_LEVELS)[number]; export const QUEST_INTIMACY_LEVELS = [ 'transactional', 'cooperative', 'trust_based', ] as const; export type SharedQuestIntimacy = (typeof QUEST_INTIMACY_LEVELS)[number]; export const QUEST_REWARD_THEMES = [ 'currency', 'resource', 'relationship', 'intel', 'rare_item', ] as const; export type SharedQuestRewardTheme = (typeof QUEST_REWARD_THEMES)[number]; export const RUNTIME_ITEM_FUNCTIONAL_BIAS_VALUES = [ 'heal', 'mana', 'cooldown', 'guard', 'damage', ] as const; export type SharedRuntimeItemFunctionalBias = (typeof RUNTIME_ITEM_FUNCTIONAL_BIAS_VALUES)[number]; export const RUNTIME_ITEM_TONE_VALUES = [ 'grim', 'mysterious', 'martial', 'ritual', 'survival', ] as const; export type SharedRuntimeItemTone = (typeof RUNTIME_ITEM_TONE_VALUES)[number]; export type RuntimeItemIntentRequest< TContext = JsonObject, TPlan = JsonObject, > = { context: TContext; plans: TPlan[]; }; export type RuntimeItemIntentResponse = { intents: TIntent[]; }; export type QuestGenerationRequest< TState = JsonObject, TEncounter = JsonObject, > = { state: TState; encounter: TEncounter; };