@zhin.js/plugin-dungeon-expedition 1.1.15 → 1.1.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,16 +1,16 @@
1
1
  // Generated by build-plugin-runtime-entries.mjs. Do not edit.
2
2
  import { defineCommand } from 'zhin.js/command';
3
3
  import { messageFromCommandInput } from '@zhin.js/game-kit';
4
- import { DUNGEON_HELP, normalizeDungeonAction, runDungeonCommand, } from "../../../lib/dungeon-command.js";
4
+ import { getDungeonHelp, normalizeDungeonAction, runDungeonCommand, } from "../../../lib/dungeon-command.js";
5
5
  import { resolveGameServices } from "../../../lib/runtime-store.js";
6
6
  export default defineCommand({
7
7
  description: 'Multiplayer dungeon expedition',
8
8
  params: { action: { type: 'string', default: '' } },
9
- async execute({ params, input, use, owner }) {
9
+ async execute({ params, input, use, locale, formatCommand }) {
10
10
  const rawAction = String(params.action ?? '');
11
11
  if (normalizeDungeonAction(rawAction) === 'help')
12
- return DUNGEON_HELP;
12
+ return getDungeonHelp({ locale, formatCommand });
13
13
  const service = resolveGameServices({ use });
14
- return runDungeonCommand(service, messageFromCommandInput(input), rawAction);
14
+ return runDungeonCommand(service, messageFromCommandInput(input, { locale, formatCommand }), rawAction);
15
15
  },
16
16
  });
@@ -1,7 +1,7 @@
1
1
  import { defineCommand } from 'zhin.js/command';
2
2
  import { messageFromCommandInput } from '@zhin.js/game-kit';
3
3
  import {
4
- DUNGEON_HELP,
4
+ getDungeonHelp,
5
5
  normalizeDungeonAction,
6
6
  runDungeonCommand,
7
7
  } from '../../../src/dungeon-command.js';
@@ -10,13 +10,13 @@ import { resolveGameServices } from '../../../src/runtime-store.js';
10
10
  export default defineCommand({
11
11
  description: 'Multiplayer dungeon expedition',
12
12
  params: { action: { type: 'string', default: '' } },
13
- async execute({ params, input, use, owner }) {
13
+ async execute({ params, input, use, locale, formatCommand }) {
14
14
  const rawAction = String(params.action ?? '');
15
- if (normalizeDungeonAction(rawAction) === 'help') return DUNGEON_HELP;
15
+ if (normalizeDungeonAction(rawAction) === 'help') return getDungeonHelp({ locale, formatCommand });
16
16
  const service = resolveGameServices({ use });
17
17
  return runDungeonCommand(
18
18
  service,
19
- messageFromCommandInput(input),
19
+ messageFromCommandInput(input, { locale, formatCommand }),
20
20
  rawAction,
21
21
  );
22
22
  },
@@ -1,5 +1,6 @@
1
1
  import { type GameMessageLike, type GameReply } from '@zhin.js/game-kit';
2
2
  import type { SessionService } from './session-service.js';
3
+ export declare function getDungeonHelp(message?: Pick<GameMessageLike, 'locale' | 'formatCommand'>): string;
3
4
  export declare const DUNGEON_HELP: string;
4
5
  export declare function normalizeDungeonAction(action: string): string | null;
5
6
  export declare function runDungeonCommand(service: SessionService, message: GameMessageLike, rawAction: string): Promise<GameReply>;
@@ -1,17 +1,25 @@
1
- import { channelKey, } from '@zhin.js/game-kit';
1
+ import { createMessages } from 'zhin.js/i18n';
2
+ import { gameCommandHint, channelKey } from '@zhin.js/game-kit';
2
3
  import { continueDungeon, handleDungeonChoice, startDungeon, } from './game-flow.js';
3
4
  import { dungeonSessionToken } from './view.js';
4
- export const DUNGEON_HELP = [
5
- '地牢远征 · 1-4 人确定性回合冒险',
6
- '地牢 开始 — 创建远征队',
7
- '地牢 加入 — 加入当前频道的队伍',
8
- '地牢 准备 — 切换准备状态',
9
- '地牢 出发 — 队长开始远征',
10
- '地牢 探索 — 探索下一房间',
11
- '地牢 攻击 / 防御 / 药水 — 战斗操作',
12
- '地牢 状态 — 刷新当前界面',
13
- '地牢 结束 — 队长结束远征',
14
- ].join('\n');
5
+ const messages = createMessages({
6
+ title: { 'zh-CN': '地牢远征 · 1-4 人确定性回合冒险', en: 'Dungeon Expedition · Turn-based adventure for 1–4 players' },
7
+ start: { 'zh-CN': '创建远征队', en: 'Create a party' },
8
+ join: { 'zh-CN': '加入当前频道的队伍', en: 'Join this channel’s party' },
9
+ ready: { 'zh-CN': '切换准备状态', en: 'Toggle readiness' },
10
+ go: { 'zh-CN': '队长开始远征', en: 'Leader starts the expedition' },
11
+ explore: { 'zh-CN': '探索下一房间', en: 'Explore the next room' },
12
+ attack: { 'zh-CN': '攻击', en: 'Attack' }, defend: { 'zh-CN': '防御', en: 'Defend' }, potion: { 'zh-CN': '使用药水', en: 'Use a potion' },
13
+ status: { 'zh-CN': '刷新当前界面', en: 'View current status' },
14
+ abort: { 'zh-CN': '队长结束远征', en: 'Leader ends the expedition' },
15
+ empty: { 'zh-CN': '当前频道没有远征队。', en: 'This channel has no expedition party.' },
16
+ });
17
+ export function getDungeonHelp(message = {}) {
18
+ const command = message.formatCommand?.('dungeon');
19
+ const actions = ['start', 'join', 'ready', 'go', 'explore', 'attack', 'defend', 'potion', 'status', 'abort'];
20
+ return [messages(message.locale, 'title'), ...(command === undefined ? [] : actions.map(action => `${command} ${action} — ${messages(message.locale, action)}`))].join('\n');
21
+ }
22
+ export const DUNGEON_HELP = getDungeonHelp();
15
23
  const ACTION_ALIASES = {
16
24
  '': 'status',
17
25
  help: 'help',
@@ -49,14 +57,14 @@ export function normalizeDungeonAction(action) {
49
57
  export async function runDungeonCommand(service, message, rawAction) {
50
58
  const action = normalizeDungeonAction(rawAction);
51
59
  if (!action || action === 'help')
52
- return DUNGEON_HELP;
60
+ return getDungeonHelp(message);
53
61
  if (action === 'create')
54
62
  return startDungeon(service, message);
55
63
  if (action === 'status')
56
64
  return continueDungeon(service, message);
57
65
  const session = await service.getActiveByChannel(channelKey(message));
58
66
  if (!session)
59
- return '当前频道没有远征队。发送「地牢 开始」创建。';
67
+ return messages(message.locale, 'empty') + gameCommandHint(message, 'dungeon');
60
68
  return handleDungeonChoice(service, message, dungeonSessionToken(session), action);
61
69
  }
62
70
  //# sourceMappingURL=dungeon-command.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dungeon-command.js","sourceRoot":"","sources":["../src/dungeon-command.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,GAGX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,YAAY,GACb,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEhD,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,qBAAqB;IACrB,eAAe;IACf,mBAAmB;IACnB,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB,wBAAwB;IACxB,gBAAgB;IAChB,gBAAgB;CACjB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,cAAc,GAAqC;IACvD,EAAE,EAAE,QAAQ;IACZ,IAAI,EAAE,MAAM;IACZ,EAAE,EAAE,MAAM;IACV,KAAK,EAAE,QAAQ;IACf,EAAE,EAAE,QAAQ;IACZ,MAAM,EAAE,QAAQ;IAChB,EAAE,EAAE,QAAQ;IACZ,MAAM,EAAE,QAAQ;IAChB,EAAE,EAAE,QAAQ;IACZ,QAAQ,EAAE,QAAQ;IAClB,EAAE,EAAE,QAAQ;IACZ,IAAI,EAAE,MAAM;IACZ,EAAE,EAAE,MAAM;IACV,KAAK,EAAE,OAAO;IACd,EAAE,EAAE,OAAO;IACX,EAAE,EAAE,OAAO;IACX,EAAE,EAAE,OAAO;IACX,OAAO,EAAE,SAAS;IAClB,EAAE,EAAE,SAAS;IACb,MAAM,EAAE,QAAQ;IAChB,EAAE,EAAE,QAAQ;IACZ,MAAM,EAAE,QAAQ;IAChB,EAAE,EAAE,QAAQ;IACZ,MAAM,EAAE,QAAQ;IAChB,EAAE,EAAE,QAAQ;IACZ,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,OAAO;IACd,EAAE,EAAE,OAAO;IACX,EAAE,EAAE,OAAO;CACZ,CAAC;AAEF,MAAM,UAAU,sBAAsB,CAAC,MAAc;IACnD,OAAO,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,IAAI,IAAI,CAAC;AAC7D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAAuB,EACvB,OAAwB,EACxB,SAAiB;IAEjB,MAAM,MAAM,GAAG,sBAAsB,CAAC,SAAS,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,YAAY,CAAC;IACtD,IAAI,MAAM,KAAK,QAAQ;QAAE,OAAO,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/D,IAAI,MAAM,KAAK,QAAQ;QAAE,OAAO,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAElE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IACtE,IAAI,CAAC,OAAO;QAAE,OAAO,wBAAwB,CAAC;IAC9C,OAAO,mBAAmB,CACxB,OAAO,EACP,OAAO,EACP,mBAAmB,CAAC,OAAO,CAAC,EAC5B,MAAM,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"dungeon-command.js","sourceRoot":"","sources":["../src/dungeon-command.ts"],"names":[],"mappings":"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"}
package/lib/engine.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { type Locale } from 'zhin.js/i18n';
1
2
  import { DeterministicRandom } from '@zhin.js/game-kit';
2
3
  export declare const DUNGEON_SCHEMA_VERSION = 1;
3
4
  export declare const MAX_PARTY_SIZE = 4;
@@ -57,7 +58,7 @@ export type DungeonAction = {
57
58
  export declare class DungeonRuleError extends Error {
58
59
  constructor(message: string);
59
60
  }
60
- export declare function createDungeonState(ownerId: string, ownerName: string): DungeonState;
61
- export declare function applyDungeonAction(state: Readonly<DungeonState>, actorId: string, action: DungeonAction, random: DeterministicRandom): DungeonState;
61
+ export declare function createDungeonState(ownerId: string, ownerName: string, locale?: Locale): DungeonState;
62
+ export declare function applyDungeonAction(state: Readonly<DungeonState>, actorId: string, action: DungeonAction, random: DeterministicRandom, locale?: Locale): DungeonState;
62
63
  export declare function activePlayer(state: Readonly<DungeonState>): DungeonPlayer | null;
63
64
  export declare function decodeDungeonState(raw: string): DungeonState;
package/lib/engine.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { createMessages } from 'zhin.js/i18n';
1
2
  export const DUNGEON_SCHEMA_VERSION = 1;
2
3
  export const MAX_PARTY_SIZE = 4;
3
4
  export const MAX_FLOOR = 3;
@@ -8,7 +9,7 @@ export class DungeonRuleError extends Error {
8
9
  this.name = 'DungeonRuleError';
9
10
  }
10
11
  }
11
- export function createDungeonState(ownerId, ownerName) {
12
+ export function createDungeonState(ownerId, ownerName, locale) {
12
13
  return {
13
14
  schemaVersion: DUNGEON_SCHEMA_VERSION,
14
15
  ownerId,
@@ -20,46 +21,46 @@ export function createDungeonState(ownerId, ownerName) {
20
21
  turnIndex: 0,
21
22
  players: [createPlayer(ownerId, ownerName, true)],
22
23
  enemy: null,
23
- log: [`${ownerName} 创建了远征队。`],
24
+ log: [messages(locale, 'text1', { p0: ownerName })],
24
25
  };
25
26
  }
26
- export function applyDungeonAction(state, actorId, action, random) {
27
+ export function applyDungeonAction(state, actorId, action, random, locale) {
27
28
  if (state.phase === 'completed') {
28
- throw new DungeonRuleError('本次远征已经结束。');
29
+ throw new DungeonRuleError(messages(locale, 'text2'));
29
30
  }
30
31
  if (action.type === 'join')
31
- return joinParty(state, actorId, action.name);
32
+ return joinParty(state, actorId, action.name, locale);
32
33
  const actorIndex = state.players.findIndex((player) => player.id === actorId);
33
34
  if (actorIndex < 0)
34
- throw new DungeonRuleError('你还没有加入这支远征队。');
35
+ throw new DungeonRuleError(messages(locale, 'text3'));
35
36
  if (action.type === 'abort') {
36
37
  if (state.ownerId !== actorId) {
37
- throw new DungeonRuleError('只有队长可以结束整支远征。');
38
+ throw new DungeonRuleError(messages(locale, 'text4'));
38
39
  }
39
40
  return appendLog({
40
41
  ...state,
41
42
  phase: 'completed',
42
43
  result: 'aborted',
43
44
  enemy: null,
44
- }, '队长结束了本次远征。');
45
+ }, messages(locale, 'text5'));
45
46
  }
46
47
  if (action.type === 'ready') {
47
48
  if (state.phase !== 'lobby') {
48
- throw new DungeonRuleError('远征已经开始,无法修改准备状态。');
49
+ throw new DungeonRuleError(messages(locale, 'text6'));
49
50
  }
50
51
  const players = state.players.map((player, index) => index === actorIndex ? { ...player, ready: !player.ready } : player);
51
- return appendLog({ ...state, players }, `${players[actorIndex]?.name ?? actorId}${players[actorIndex]?.ready ? '已准备' : '取消准备'}。`);
52
+ return appendLog({ ...state, players }, `${players[actorIndex]?.name ?? actorId}${players[actorIndex]?.ready ? messages(locale, 'text7') : messages(locale, 'text8')}。`);
52
53
  }
53
54
  if (action.type === 'start')
54
- return startExpedition(state, actorId);
55
- assertActorTurn(state, actorId);
55
+ return startExpedition(state, actorId, locale);
56
+ assertActorTurn(state, actorId, locale);
56
57
  if (action.type === 'explore')
57
- return explore(state, random);
58
+ return explore(state, random, locale);
58
59
  if (action.type === 'attack')
59
- return attack(state, actorIndex, random);
60
+ return attack(state, actorIndex, random, locale);
60
61
  if (action.type === 'defend')
61
- return defend(state, actorIndex, random);
62
- return drinkPotion(state, actorIndex, random);
62
+ return defend(state, actorIndex, random, locale);
63
+ return drinkPotion(state, actorIndex, random, locale);
63
64
  }
64
65
  export function activePlayer(state) {
65
66
  if (state.players.length === 0)
@@ -91,54 +92,54 @@ function createPlayer(id, name, ready) {
91
92
  ready,
92
93
  };
93
94
  }
94
- function joinParty(state, actorId, actorName) {
95
+ function joinParty(state, actorId, actorName, locale) {
95
96
  if (state.phase !== 'lobby') {
96
- throw new DungeonRuleError('远征已经出发,无法中途加入。');
97
+ throw new DungeonRuleError(messages(locale, 'text9'));
97
98
  }
98
99
  if (state.players.some((player) => player.id === actorId)) {
99
- throw new DungeonRuleError('你已经在远征队中。');
100
+ throw new DungeonRuleError(messages(locale, 'text10'));
100
101
  }
101
102
  if (state.players.length >= MAX_PARTY_SIZE) {
102
- throw new DungeonRuleError('远征队已满,最多 4 人。');
103
+ throw new DungeonRuleError(messages(locale, 'text11'));
103
104
  }
104
105
  const player = createPlayer(actorId, actorName, false);
105
- return appendLog({ ...state, players: [...state.players, player] }, `${player.name} 加入了远征队。`);
106
+ return appendLog({ ...state, players: [...state.players, player] }, messages(locale, 'text12', { p0: player.name }));
106
107
  }
107
- function startExpedition(state, actorId) {
108
+ function startExpedition(state, actorId, locale) {
108
109
  if (state.phase !== 'lobby') {
109
- throw new DungeonRuleError('远征已经开始。');
110
+ throw new DungeonRuleError(messages(locale, 'text13'));
110
111
  }
111
112
  if (state.ownerId !== actorId) {
112
- throw new DungeonRuleError('只有队长可以带队出发。');
113
+ throw new DungeonRuleError(messages(locale, 'text14'));
113
114
  }
114
115
  const waiting = state.players.filter((player) => !player.ready);
115
116
  if (waiting.length > 0) {
116
- throw new DungeonRuleError(`仍有队员未准备:${waiting.map((player) => player.name).join('、')}`);
117
+ throw new DungeonRuleError(messages(locale, 'text15', { p0: waiting.map((player) => player.name).join('、') }));
117
118
  }
118
- return appendLog({ ...state, phase: 'exploring' }, '远征队进入了第一层地牢。');
119
+ return appendLog({ ...state, phase: 'exploring' }, messages(locale, 'text16'));
119
120
  }
120
- function assertActorTurn(state, actorId) {
121
+ function assertActorTurn(state, actorId, locale) {
121
122
  if (state.phase === 'lobby') {
122
- throw new DungeonRuleError('请先由队长开始远征。');
123
+ throw new DungeonRuleError(messages(locale, 'text17'));
123
124
  }
124
125
  const current = activePlayer(state);
125
126
  if (!current || current.id !== actorId) {
126
- throw new DungeonRuleError(`现在轮到 ${current?.name ?? '其他队员'} 行动。`);
127
+ throw new DungeonRuleError(messages(locale, 'text18', { p0: current?.name ?? messages(locale, 'otherPlayer') }));
127
128
  }
128
129
  }
129
- function explore(state, random) {
130
+ function explore(state, random, locale) {
130
131
  if (state.phase !== 'exploring') {
131
- throw new DungeonRuleError('战斗尚未结束,无法继续探索。');
132
+ throw new DungeonRuleError(messages(locale, 'text19'));
132
133
  }
133
134
  const room = state.room + 1;
134
135
  if (room >= BOSS_ROOM) {
135
- const enemy = createEnemy(state.floor, true, random);
136
- return appendLog({ ...state, room, phase: 'combat', enemy }, `守层者 ${enemy.name} 挡住了去路!`);
136
+ const enemy = createEnemy(state.floor, true, random, locale);
137
+ return appendLog({ ...state, room, phase: 'combat', enemy }, messages(locale, 'text20', { p0: enemy.name }));
137
138
  }
138
139
  const roll = random.int(100);
139
140
  if (roll < 58) {
140
- const enemy = createEnemy(state.floor, false, random);
141
- return appendLog({ ...state, room, phase: 'combat', enemy }, `遭遇了 ${enemy.name}!`);
141
+ const enemy = createEnemy(state.floor, false, random, locale);
142
+ return appendLog({ ...state, room, phase: 'combat', enemy }, messages(locale, 'text21', { p0: enemy.name }));
142
143
  }
143
144
  if (roll < 78) {
144
145
  const gold = random.intInclusive(8, 18);
@@ -149,7 +150,7 @@ function explore(state, random) {
149
150
  ...player,
150
151
  gold: player.gold + gold,
151
152
  })),
152
- }, `发现宝箱,每位队员获得 ${gold} 金币。`);
153
+ }, messages(locale, 'text22', { p0: gold }));
153
154
  }
154
155
  if (roll < 90) {
155
156
  return advanceAfterRoom({
@@ -159,7 +160,7 @@ function explore(state, random) {
159
160
  ...player,
160
161
  hp: Math.min(player.maxHp, player.hp + 18),
161
162
  })),
162
- }, '发现治愈泉,队伍恢复了生命。');
163
+ }, messages(locale, 'text23'));
163
164
  }
164
165
  const damage = random.intInclusive(8, 16);
165
166
  const targetIndex = nextLivingIndex(state.players, state.turnIndex);
@@ -167,48 +168,48 @@ function explore(state, random) {
167
168
  const players = state.players.map((player, index) => index === targetIndex
168
169
  ? { ...player, hp: Math.max(0, player.hp - damage) }
169
170
  : player);
170
- const trapped = advanceAfterRoom({ ...state, room, players }, `${target?.name ?? '队员'} 触发陷阱,受到 ${damage} 点伤害。`);
171
- const resolved = finishIfDefeated(trapped);
171
+ const trapped = advanceAfterRoom({ ...state, room, players }, messages(locale, 'text24', { p0: target?.name ?? messages(locale, 'player'), p1: damage }));
172
+ const resolved = finishIfDefeated(trapped, locale);
172
173
  if (resolved.phase === 'completed' || (players[targetIndex]?.hp ?? 0) > 0) {
173
174
  return resolved;
174
175
  }
175
176
  return advanceTurn(resolved);
176
177
  }
177
- function attack(state, actorIndex, random) {
178
+ function attack(state, actorIndex, random, locale) {
178
179
  if (state.phase !== 'combat' || !state.enemy) {
179
- throw new DungeonRuleError('当前没有可以攻击的敌人。');
180
+ throw new DungeonRuleError(messages(locale, 'text25'));
180
181
  }
181
182
  const actor = state.players[actorIndex];
182
183
  if (!actor || actor.hp <= 0)
183
- throw new DungeonRuleError('倒下的队员无法行动。');
184
+ throw new DungeonRuleError(messages(locale, 'text26'));
184
185
  const damage = random.intInclusive(12, 22);
185
186
  const enemy = { ...state.enemy, hp: Math.max(0, state.enemy.hp - damage) };
186
- let next = appendLog({ ...state, enemy }, `${actor.name} 对 ${enemy.name} 造成 ${damage} 点伤害。`);
187
+ let next = appendLog({ ...state, enemy }, messages(locale, 'text27', { p0: actor.name, p1: enemy.name, p2: damage }));
187
188
  if (enemy.hp <= 0)
188
- return defeatEnemy(next, random);
189
- next = enemyTurn(next, actorIndex, random);
190
- return advanceTurn(finishIfDefeated(next));
189
+ return defeatEnemy(next, random, locale);
190
+ next = enemyTurn(next, actorIndex, random, locale);
191
+ return advanceTurn(finishIfDefeated(next, locale));
191
192
  }
192
- function defend(state, actorIndex, random) {
193
+ function defend(state, actorIndex, random, locale) {
193
194
  if (state.phase !== 'combat' || !state.enemy) {
194
- throw new DungeonRuleError('当前不需要防御。');
195
+ throw new DungeonRuleError(messages(locale, 'text28'));
195
196
  }
196
197
  const actor = state.players[actorIndex];
197
198
  if (!actor || actor.hp <= 0)
198
- throw new DungeonRuleError('倒下的队员无法行动。');
199
+ throw new DungeonRuleError(messages(locale, 'text26'));
199
200
  const players = state.players.map((player, index) => index === actorIndex ? { ...player, guard: 8 } : player);
200
- let next = appendLog({ ...state, players }, `${actor.name} 架起了盾牌。`);
201
- next = enemyTurn(next, actorIndex, random);
202
- return advanceTurn(finishIfDefeated(next));
201
+ let next = appendLog({ ...state, players }, messages(locale, 'text29', { p0: actor.name }));
202
+ next = enemyTurn(next, actorIndex, random, locale);
203
+ return advanceTurn(finishIfDefeated(next, locale));
203
204
  }
204
- function drinkPotion(state, actorIndex, random) {
205
+ function drinkPotion(state, actorIndex, random, locale) {
205
206
  const actor = state.players[actorIndex];
206
207
  if (!actor || actor.hp <= 0)
207
- throw new DungeonRuleError('倒下的队员无法行动。');
208
+ throw new DungeonRuleError(messages(locale, 'text26'));
208
209
  if (actor.potions <= 0)
209
- throw new DungeonRuleError('你的药水已经用完了。');
210
+ throw new DungeonRuleError(messages(locale, 'text30'));
210
211
  if (actor.hp >= actor.maxHp)
211
- throw new DungeonRuleError('你的生命值已经满了。');
212
+ throw new DungeonRuleError(messages(locale, 'text31'));
212
213
  const players = state.players.map((player, index) => index === actorIndex
213
214
  ? {
214
215
  ...player,
@@ -216,14 +217,14 @@ function drinkPotion(state, actorIndex, random) {
216
217
  potions: player.potions - 1,
217
218
  }
218
219
  : player);
219
- let next = appendLog({ ...state, players }, `${actor.name} 使用药水恢复生命。`);
220
+ let next = appendLog({ ...state, players }, messages(locale, 'text32', { p0: actor.name }));
220
221
  if (state.phase === 'combat') {
221
- next = enemyTurn(next, actorIndex, random);
222
- return advanceTurn(finishIfDefeated(next));
222
+ next = enemyTurn(next, actorIndex, random, locale);
223
+ return advanceTurn(finishIfDefeated(next, locale));
223
224
  }
224
225
  return next;
225
226
  }
226
- function enemyTurn(state, targetIndex, random) {
227
+ function enemyTurn(state, targetIndex, random, locale) {
227
228
  const enemy = state.enemy;
228
229
  const target = state.players[targetIndex];
229
230
  if (!enemy || !target)
@@ -233,9 +234,9 @@ function enemyTurn(state, targetIndex, random) {
233
234
  const players = state.players.map((player, index) => index === targetIndex
234
235
  ? { ...player, hp: Math.max(0, player.hp - damage), guard: 0 }
235
236
  : player);
236
- return appendLog({ ...state, players }, `${enemy.name} 反击 ${target.name},造成 ${damage} 点伤害。`);
237
+ return appendLog({ ...state, players }, messages(locale, 'text33', { p0: enemy.name, p1: target.name, p2: damage }));
237
238
  }
238
- function defeatEnemy(state, random) {
239
+ function defeatEnemy(state, random, locale) {
239
240
  const enemy = state.enemy;
240
241
  if (!enemy)
241
242
  return state;
@@ -254,7 +255,7 @@ function defeatEnemy(state, random) {
254
255
  phase: 'completed',
255
256
  result: 'victory',
256
257
  roomsCleared: state.roomsCleared + 1,
257
- }, `击败最终守层者,每人获得 ${gold} 金币。远征胜利!`);
258
+ }, messages(locale, 'text34', { p0: gold }));
258
259
  }
259
260
  if (enemy.boss) {
260
261
  return appendLog({
@@ -263,14 +264,14 @@ function defeatEnemy(state, random) {
263
264
  floor: state.floor + 1,
264
265
  room: 0,
265
266
  roomsCleared: state.roomsCleared + 1,
266
- }, `击败守层者,每人获得 ${gold} 金币。队伍进入下一层。`);
267
+ }, messages(locale, 'text35', { p0: gold }));
267
268
  }
268
- return advanceAfterRoom({ ...rewarded, phase: 'exploring' }, `击败 ${enemy.name},每人获得 ${gold} 金币。`);
269
+ return advanceAfterRoom({ ...rewarded, phase: 'exploring' }, messages(locale, 'text36', { p0: enemy.name, p1: gold }));
269
270
  }
270
- function createEnemy(floor, boss, random) {
271
+ function createEnemy(floor, boss, random, locale) {
271
272
  const names = boss
272
- ? ['石像守卫', '深渊术士', '远古龙影']
273
- : ['洞穴史莱姆', '骷髅巡卫', '暗影猎手', '失控魔像'];
273
+ ? [messages(locale, 'text37'), messages(locale, 'text38'), messages(locale, 'text39')]
274
+ : [messages(locale, 'text40'), messages(locale, 'text41'), messages(locale, 'text42'), messages(locale, 'text43')];
274
275
  const name = boss
275
276
  ? names[Math.min(names.length - 1, floor - 1)]
276
277
  : random.item(names);
@@ -306,7 +307,7 @@ function nextLivingIndex(players, start) {
306
307
  }
307
308
  return 0;
308
309
  }
309
- function finishIfDefeated(state) {
310
+ function finishIfDefeated(state, locale) {
310
311
  if (state.players.some((player) => player.hp > 0))
311
312
  return state;
312
313
  return appendLog({
@@ -314,7 +315,7 @@ function finishIfDefeated(state) {
314
315
  phase: 'completed',
315
316
  result: 'defeat',
316
317
  enemy: null,
317
- }, '远征队全员倒下,本次远征失败。');
318
+ }, messages(locale, 'text44'));
318
319
  }
319
320
  function appendLog(state, message) {
320
321
  return {
@@ -322,4 +323,52 @@ function appendLog(state, message) {
322
323
  log: [...state.log, message].slice(-8),
323
324
  };
324
325
  }
326
+ const messages = createMessages({
327
+ otherPlayer: { 'zh-CN': '其他队员', en: 'another player' },
328
+ player: { 'zh-CN': '队员', en: 'A player' },
329
+ text1: { 'zh-CN': "{p0} 创建了远征队。", en: "{p0} created the expedition party." },
330
+ text2: { 'zh-CN': "本次远征已经结束。", en: "This expedition has ended." },
331
+ text3: { 'zh-CN': "你还没有加入这支远征队。", en: "You have not joined this expedition." },
332
+ text4: { 'zh-CN': "只有队长可以结束整支远征。", en: "Only the leader may end the expedition." },
333
+ text5: { 'zh-CN': "队长结束了本次远征。", en: "The leader ended the expedition." },
334
+ text6: { 'zh-CN': "远征已经开始,无法修改准备状态。", en: "The expedition has started; readiness can no longer be changed." },
335
+ text7: { 'zh-CN': "已准备", en: " is ready" },
336
+ text8: { 'zh-CN': "取消准备", en: " is no longer ready" },
337
+ text9: { 'zh-CN': "远征已经出发,无法中途加入。", en: "The expedition has started; you cannot join mid-game." },
338
+ text10: { 'zh-CN': "你已经在远征队中。", en: "You are already in the party." },
339
+ text11: { 'zh-CN': "远征队已满,最多 4 人。", en: "The party is full (maximum four players)." },
340
+ text12: { 'zh-CN': "{p0} 加入了远征队。", en: "{p0} joined the party." },
341
+ text13: { 'zh-CN': "远征已经开始。", en: "The expedition has already started." },
342
+ text14: { 'zh-CN': "只有队长可以带队出发。", en: "Only the leader may start the expedition." },
343
+ text15: { 'zh-CN': "仍有队员未准备:{p0}", en: "Players not ready: {p0}" },
344
+ text16: { 'zh-CN': "远征队进入了第一层地牢。", en: "The party entered the first floor." },
345
+ text17: { 'zh-CN': "请先由队长开始远征。", en: "Ask the leader to start the expedition first." },
346
+ text18: { 'zh-CN': "现在轮到 {p0} 行动。", en: "It is {p0}’s turn." },
347
+ text19: { 'zh-CN': "战斗尚未结束,无法继续探索。", en: "Finish the battle before exploring further." },
348
+ text20: { 'zh-CN': "守层者 {p0} 挡住了去路!", en: "Floor guardian {p0} blocks the way!" },
349
+ text21: { 'zh-CN': "遭遇了 {p0}!", en: "Encountered {p0}!" },
350
+ text22: { 'zh-CN': "发现宝箱,每位队员获得 {p0} 金币。", en: "A treasure chest! Each player gains {p0} gold." },
351
+ text23: { 'zh-CN': "发现治愈泉,队伍恢复了生命。", en: "A healing spring restores the party’s health." },
352
+ text24: { 'zh-CN': "{p0} 触发陷阱,受到 {p1} 点伤害。", en: "{p0} triggered a trap and took {p1} damage." },
353
+ text25: { 'zh-CN': "当前没有可以攻击的敌人。", en: "There is no enemy to attack." },
354
+ text26: { 'zh-CN': "倒下的队员无法行动。", en: "Defeated players cannot act." },
355
+ text27: { 'zh-CN': "{p0} 对 {p1} 造成 {p2} 点伤害。", en: "{p0} dealt {p2} damage to {p1}." },
356
+ text28: { 'zh-CN': "当前不需要防御。", en: "There is no need to defend right now." },
357
+ text29: { 'zh-CN': "{p0} 架起了盾牌。", en: "{p0} raised a shield." },
358
+ text30: { 'zh-CN': "你的药水已经用完了。", en: "You have no potions left." },
359
+ text31: { 'zh-CN': "你的生命值已经满了。", en: "Your health is already full." },
360
+ text32: { 'zh-CN': "{p0} 使用药水恢复生命。", en: "{p0} used a potion to restore health." },
361
+ text33: { 'zh-CN': "{p0} 反击 {p1},造成 {p2} 点伤害。", en: "{p0} counterattacked {p1} for {p2} damage." },
362
+ text34: { 'zh-CN': "击败最终守层者,每人获得 {p0} 金币。远征胜利!", en: "The final guardian is defeated! Each player gains {p0} gold. Expedition victory!" },
363
+ text35: { 'zh-CN': "击败守层者,每人获得 {p0} 金币。队伍进入下一层。", en: "The floor guardian is defeated! Each player gains {p0} gold. The party advances to the next floor." },
364
+ text36: { 'zh-CN': "击败 {p0},每人获得 {p1} 金币。", en: "Defeated {p0}! Each player gains {p1} gold." },
365
+ text37: { 'zh-CN': "石像守卫", en: "Stone Guardian" },
366
+ text38: { 'zh-CN': "深渊术士", en: "Abyss Warlock" },
367
+ text39: { 'zh-CN': "远古龙影", en: "Ancient Dragon Shade" },
368
+ text40: { 'zh-CN': "洞穴史莱姆", en: "Cave Slime" },
369
+ text41: { 'zh-CN': "骷髅巡卫", en: "Skeleton Patrol" },
370
+ text42: { 'zh-CN': "暗影猎手", en: "Shadow Hunter" },
371
+ text43: { 'zh-CN': "失控魔像", en: "Rampaging Golem" },
372
+ text44: { 'zh-CN': "远征队全员倒下,本次远征失败。", en: "The entire party fell. The expedition failed." },
373
+ });
325
374
  //# sourceMappingURL=engine.js.map
package/lib/engine.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}