你也许在 base.js 里看到过这些东西:
const commands = new Map();
const history = [];
let historyIndex = null;
const context = { __vars: {} };
let storyWhere = 0;
let nextStory = false;
let accessGiven = false;
let asking = false;
let askCallback = null;
</code>
这些东西都是用来控制游戏进程的。
然而,你需要注意的仅有 storyWhere。
storyWhere 是整个游戏最重要的东西,用于控制故事流程。
这个是数值规范:
?/??: 单数字/双数字 为故事主线。
1???: PandoraBox 故事主线内容。
35??: manAI 相关故事内容,通常只在序章使用,同样为故事主线。
newCommand() 函数为创建一个命令行函数的命令,参数如下:
commandName: 命令名称
params: 参数列表,["名称:类型"]
handler: 函数
storyWhereNeed: 必须的 storyWhere,判断条件为 storyWhere >= storyWhereNeed, 默认 0.
示例:newCommand("test", ["test:string"], function(api) {echoContent(api.args [0])})
echoContent 函数为输出内容的函数,参数如下:
content: 输出内容:
raw:
[color:(颜色昵称)/(Hex 色号)](内容)[/endcolor]
[progress max=(最大进度) timeAdd(每秒增加的值)][/progress]
[runCommand command=(函数名)](参数)[/endrunning]
loadState 函数用于加载用户在 localStorage 中存储的信息,在每次加载游戏前,必须执行该命令。
saveState 函数用于保存用户信息到 localStorage 中,base.js 中已经添加了每次执行命令后保存的指令,若你需要修改存档,请手动保存。
parseEchoContent 函数用于解析 echoContent 中富文本语法,手动调用不会输出任何信息。
tokenize 函数用于解析用户输入的指令,提供 args 等。
executeLine 函数在用户输入框按下 Enter 后自动执行的函数,调用 tokenize 解析参数和各种信息给予 Command。
reset 函数用于清空 localStorage 信息,为了防止误操作,没有添加相关函数。需要用户手动执行。
newCommand 的 handler,必须有最多一个参数,最好名叫 api;
api 提供了以下东西:
args:一个列表,为参数内容,用 [] 访问。
context: 变量列表。
echo, save: 对应 echoContent 和 saveContent 函数(该函数已弃用)。
setVar, getVar: 创建和获取变量。
storyWhere, nextStory: storyWhere 代表目前进行到了哪里,nextStory 表示是否下一步故事(已弃用)。
setStoryWhere, setNextStory: 设置 storyWhere 和 nextStory 的值。
setStorageKeyForChapter 函数必须在游戏开始前被执行,在执行 loadState 前被执行。
该函数用于设置 localStorageKey,提供 chapterId 作为唯一标识符。
根据规定,所有自制的 doas -su mylife.root 必须在唯一标识符前加上 custom-,并给出改版昵称与章节。
例:
xxx 改版第一章使用 storageKey:
setStorageKeyForChapter("custom-xxx-1");
或
setStorageKeyForChapter("custom-1-xxx");
若你没有修改 storageKey 导致用户存档丢失,请自行尝试恢复。
ask 函数用于在游戏中询问玩家问题。格式如下:
ask("[PROMPT]", function(response) {
...
});
其中,response 是玩家输入的内容。
注意:PROMPT 可以留空,但不能不填。
echoContent 函数用于输出内容,但添加间隔,格式如下:
echoContent(content, [输出内容的 element,请使用 output global var.], delay=30 (ms), callback=[回调函数,可以写为 function(){},但不能为 undefined 或 null])
loadWebTry 负责启动 WebTry,Webtry 是一个使用 webtry.html?pageid=[id] 来进行 webtry 的东西。
参数如下:
page_id:即在游戏目录下 webtries/[page_id].html。
它会启动一个弹出窗口让用户交互。
loadCapturer 负责启动 capturer GUI,其基于 loadWebTry,放在 webtries/capturer.html 目录下。
参数如下:
ip: 即 capturer 抓到的 ip。
sender: 即 capturer 抓到的 sender,推荐填写 'Chromium' 而不是 'Google Chrome'。
more: 即包信息,推荐参照 Burpsuite 格式来写。
和 webtry 一样。
a_setStorageKeyForGame 函数必须在游戏开始前被执行,在执行 getAchieves 前被执行。
该函数用于设置 localStorageKey,提供 gameId 作为唯一标识符。
根据规定,所有自制的 doas -su mylife.root 必须在唯一标识符前加上 custom-,并给出改版昵称与章节。
例:
xxx 改版第一章使用 storageKey:
setStorageKeyForGame("xxx-1");
或
setStorageKeyForGame("1-xxx");
若你没有修改 storageKey 导致用户成就丢失,请自行尝试恢复。
getAchieves 函数用于获得所有成就。如果你的游戏需要成就系统,请在游戏正式开始前执行。
saveAchieve 函数用于保存所有成就。该函数会被 addAchieve 在工作完后自动调用。
addAchieve 函数用于获得成就,函数调用方法如下:
addAchieve(成就名,成就等级)
官方定义的成就等级有 Mythic, Master, Insane, Hard, Normal, Easy 六个等级。
lookAchieve 函数用于遍历并列出所有用户获得的成就。(仅限该游戏)
newContact 函数用于创建网页通信,其参数如下:
key: 通信昵称,即 localStorage Key。
whenValue: 调用 callback 的时机(即 key 什么时候 == whenValue)。
callback: 回调函数。
其原理:
因为需要运行在网页前端,因此只能 localStorage 通信。
newContact 会生成 interval,每秒查询 localStorage,当 webtry 页面更新时,第一时间便会调用 callback();
setContact 函数用于和 newContact 函数沟通,其参数如下:
key: 参照 newContact。
value: 即 whenValue,也可以不是这个。
其原理:
参照 `newContact`。
showPanel 函数用于启动网页右边的侧边栏,您可以在 github.io 上使用该命令显示。
无参数。
updateStatus 函数用于更新右边侧边栏的状态信息,和 showPanel 差不多。
参数如下:
ip: 自定义,默认 127.0.0.1
ports: 自定义,默认 22
mem: 自定义,默认 739MiB(不会自动添加单位哦)
cucontent: 其他信息,推荐填写 "" 而不是 undefined.
updateHelp 函数用于更新右边侧边栏的帮助信息。
参数如下:
content: 帮助内容
– BL.BlueLighting,最后一次更新 2025 / 11 / 09。