87
src/services/questTypes.ts
Normal file
87
src/services/questTypes.ts
Normal file
@@ -0,0 +1,87 @@
|
||||
import type {
|
||||
QuestNarrativeBinding,
|
||||
QuestNarrativeType,
|
||||
QuestObjectiveKind,
|
||||
QuestReward,
|
||||
QuestStatus,
|
||||
QuestStep,
|
||||
ScenePresetInfo,
|
||||
} from '../types';
|
||||
import type {QuestGenerationContext} from './aiTypes';
|
||||
|
||||
export type QuestUrgency = 'low' | 'medium' | 'high';
|
||||
export type QuestIntimacy = 'transactional' | 'cooperative' | 'trust_based';
|
||||
export type QuestRewardTheme = 'currency' | 'resource' | 'relationship' | 'intel' | 'rare_item';
|
||||
export type QuestFailPolicy = 'never' | 'leave_scene' | 'issuer_hostile' | 'time_window';
|
||||
|
||||
export type QuestSceneSnapshot = Pick<
|
||||
ScenePresetInfo,
|
||||
'id' | 'name' | 'hostileNpcIds' | 'monsterIds' | 'npcs' | 'treasureHints'
|
||||
> & {
|
||||
description?: ScenePresetInfo['description'];
|
||||
};
|
||||
|
||||
export interface QuestIntent {
|
||||
title: string;
|
||||
description: string;
|
||||
summary: string;
|
||||
narrativeType: QuestNarrativeType;
|
||||
dramaticNeed: string;
|
||||
issuerGoal: string;
|
||||
playerHook: string;
|
||||
worldReason: string;
|
||||
recommendedObjectiveKinds: QuestObjectiveKind[];
|
||||
urgency: QuestUrgency;
|
||||
intimacy: QuestIntimacy;
|
||||
rewardTheme: QuestRewardTheme;
|
||||
followupHooks: string[];
|
||||
}
|
||||
|
||||
export interface QuestContract {
|
||||
id: string;
|
||||
issuerNpcId: string;
|
||||
issuerNpcName: string;
|
||||
sceneId: string | null;
|
||||
questArchetype: QuestNarrativeType;
|
||||
title: string;
|
||||
description: string;
|
||||
summary: string;
|
||||
steps: QuestStep[];
|
||||
reward: QuestReward;
|
||||
rewardText: string;
|
||||
narrativeBinding: QuestNarrativeBinding;
|
||||
failPolicy: QuestFailPolicy;
|
||||
}
|
||||
|
||||
export interface QuestOpportunity {
|
||||
shouldOffer: boolean;
|
||||
reason: string;
|
||||
suggestedIssuerNpcId?: string;
|
||||
suggestedThreatType?: 'hostile_npc' | 'treasure' | 'relationship' | 'travel';
|
||||
}
|
||||
|
||||
export type QuestProgressSignal =
|
||||
| {kind: 'hostile_npc_defeated'; sceneId?: string | null; hostileNpcId: string}
|
||||
| {kind: 'treasure_inspected'; sceneId?: string | null}
|
||||
| {kind: 'npc_spar_completed'; npcId: string}
|
||||
| {kind: 'npc_talk_completed'; npcId: string}
|
||||
| {kind: 'scene_reached'; sceneId: string}
|
||||
| {kind: 'item_delivered'; npcId: string; itemId: string; quantity: number};
|
||||
|
||||
export interface QuestCompilationRequest {
|
||||
issuerNpcId: string;
|
||||
issuerNpcName: string;
|
||||
roleText: string;
|
||||
scene: QuestSceneSnapshot | null;
|
||||
worldType: QuestGenerationContext['worldType'];
|
||||
context?: QuestGenerationContext;
|
||||
origin?: QuestNarrativeBinding['origin'];
|
||||
}
|
||||
|
||||
export interface QuestPreviewRequest extends QuestCompilationRequest {
|
||||
currentQuests?: Array<{
|
||||
id: string;
|
||||
issuerNpcId: string;
|
||||
status: QuestStatus;
|
||||
}>;
|
||||
}
|
||||
Reference in New Issue
Block a user