130 lines
2.9 KiB
TypeScript
130 lines
2.9 KiB
TypeScript
/**
|
|
* RPG runtime story 动作层共享契约。
|
|
* 将 function id、动作请求与交互元数据从旧 story.ts 中单独收口。
|
|
*/
|
|
import type { JsonObject } from './common';
|
|
|
|
export type RuntimeAction<
|
|
TType extends string = string,
|
|
TPayload = JsonObject,
|
|
> = {
|
|
type: TType;
|
|
functionId?: string;
|
|
targetId?: string;
|
|
payload?: TPayload;
|
|
};
|
|
|
|
export type RuntimeActionRequest<
|
|
TAction extends RuntimeAction = RuntimeAction,
|
|
> = {
|
|
sessionId: string;
|
|
clientVersion?: number;
|
|
action: TAction;
|
|
};
|
|
|
|
export type RuntimeActionResponse<
|
|
TViewModel = JsonObject,
|
|
TPresentation = JsonObject,
|
|
TPatch = JsonObject,
|
|
> = {
|
|
sessionId: string;
|
|
serverVersion: number;
|
|
viewModel: TViewModel;
|
|
presentation: TPresentation;
|
|
patches: TPatch[];
|
|
};
|
|
|
|
export const TASK5_RUNTIME_FUNCTION_IDS = [
|
|
'story_continue_adventure',
|
|
'story_opening_camp_dialogue',
|
|
'camp_travel_home_scene',
|
|
'idle_call_out',
|
|
'idle_explore_forward',
|
|
'idle_observe_signs',
|
|
'idle_rest_focus',
|
|
'idle_travel_next_scene',
|
|
'battle_attack_basic',
|
|
'battle_use_skill',
|
|
'battle_all_in_crush',
|
|
'battle_escape_breakout',
|
|
'battle_feint_step',
|
|
'battle_finisher_window',
|
|
'battle_guard_break',
|
|
'battle_probe_pressure',
|
|
'battle_recover_breath',
|
|
'npc_chat',
|
|
'npc_fight',
|
|
'npc_help',
|
|
'npc_leave',
|
|
'npc_preview_talk',
|
|
'npc_recruit',
|
|
'npc_spar',
|
|
] as const;
|
|
export type Task5RuntimeFunctionId =
|
|
(typeof TASK5_RUNTIME_FUNCTION_IDS)[number];
|
|
|
|
export const TASK6_RUNTIME_FUNCTION_IDS = [
|
|
'equipment_equip',
|
|
'equipment_unequip',
|
|
'forge_craft',
|
|
'forge_dismantle',
|
|
'forge_reforge',
|
|
'inventory_use',
|
|
'npc_gift',
|
|
'npc_chat_quest_offer_abandon',
|
|
'npc_chat_quest_offer_replace',
|
|
'npc_chat_quest_offer_view',
|
|
'npc_quest_accept',
|
|
'npc_quest_turn_in',
|
|
'npc_trade',
|
|
] as const;
|
|
export type Task6RuntimeFunctionId =
|
|
(typeof TASK6_RUNTIME_FUNCTION_IDS)[number];
|
|
|
|
export const SERVER_RUNTIME_FUNCTION_IDS = [
|
|
...TASK5_RUNTIME_FUNCTION_IDS,
|
|
...TASK6_RUNTIME_FUNCTION_IDS,
|
|
] as const;
|
|
export type ServerRuntimeFunctionId =
|
|
(typeof SERVER_RUNTIME_FUNCTION_IDS)[number];
|
|
|
|
export const TASK5_RUNTIME_OPTION_SCOPES = ['story', 'combat', 'npc'] as const;
|
|
export type Task5RuntimeOptionScope =
|
|
(typeof TASK5_RUNTIME_OPTION_SCOPES)[number];
|
|
|
|
export type RuntimeStoryChoicePayload = JsonObject & {
|
|
optionText?: string;
|
|
note?: string;
|
|
releaseNpcId?: string;
|
|
preludeText?: string;
|
|
};
|
|
|
|
export type RuntimeStoryOptionInteraction =
|
|
| {
|
|
kind: 'npc';
|
|
npcId: string;
|
|
action:
|
|
| 'chat'
|
|
| 'help'
|
|
| 'fight'
|
|
| 'leave'
|
|
| 'quest_offer_abandon'
|
|
| 'quest_offer_replace'
|
|
| 'quest_offer_view'
|
|
| 'recruit'
|
|
| 'spar'
|
|
| 'trade'
|
|
| 'gift'
|
|
| 'quest_accept'
|
|
| 'quest_turn_in';
|
|
questId?: string;
|
|
};
|
|
|
|
export type RuntimeStoryChoiceAction = RuntimeAction<
|
|
'story_choice',
|
|
RuntimeStoryChoicePayload
|
|
> & {
|
|
functionId: string;
|
|
targetId?: string;
|
|
};
|