showChoices 显示选项
showChoices
类型: MethodDeclaration
所属类: CommandFunctionList
定义位置: command.ts
描述
显示选项
参数
| 参数名 | 类型 | 描述 | 默认值 |
|---|---|---|---|
\{ choices, parameters, \} | `{ |
choices: Array<any>;
parameters: string;
}` | - | - |
返回值
类型: Array<CommandFunction>
源代码
位置: 第 1580 行
protected showChoices({
choices,
parameters,
}: {
choices: Array<any>;
parameters: string;
}): Array<CommandFunction> {
// 解析变量文本内容
const method = this.showChoices as any;
let { parseVariable } = method;
if (!parseVariable) {
const regexp = /<(local):(.*?)>|<(global):([0-9a-f]{16})>/g;
const replacer = (
match: string,
m1?: string,
m2?: string,
m3?: string,
m4?: string
): any => {
const tag = m1 ?? m3!;
const key = m2 ?? m4!;
switch (tag) {
case "local":
return CurrentEvent.attributes[key]?.toString();
case "global":
return Variable.get(key)?.toString();
}
};
const mapper = (content: string) => content.replace(regexp, replacer);
parseVariable = method.parseVariable = (contents: Array<string>) =>
contents.map(mapper);
}
const { commands, index } = this.stack.get();
const pop = Command.goto(commands, index + 2);
const contents: Array<string> = [];
const branches: Array<CommandFunctionList> = [];
for (const choice of choices) {
contents.push(choice.content);
branches.push(Command.compile(choice.commands, pop));
}
const fn1 = () => {
const list = EventManager.getEnabledEvents("showchoices");
const fn =
list.length === 0
? Command.skip
: () => {
Command.parameters = parameters;
Command.choiceContents = parseVariable(contents);
Command.choiceIndex = -1;
CurrentEvent.stack.push(CommandList, CommandIndex);
for (let i = list.length - 1; i >= 1; i--) {
CurrentEvent.stack.push(list[i], 0);
}
CommandList = list[0];
CommandIndex = 0;
return true;
};
// 编译时不能确定事件已加载,因此使用运行时编译
return (CommandList[CommandIndex - 1] = fn)();
};
const fn2 = () => {
switch (Command.choiceIndex) {
case -1:
return true;
default: {
const commands = branches[Command.choiceIndex];
if (commands) {
CommandList = commands;
CommandIndex = 0;
}
return true;
}
}
};
return [fn1, fn2];
}
文档生成时间:2026/2/1 16:51:39