@66rpg/lumimaker 0.1.51 → 0.1.52

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@66rpg/lumimaker",
3
- "version": "0.1.51",
3
+ "version": "0.1.52",
4
4
  "description": "幻光文游制作器:登录、校验并发布到幻光文游社区;validate-template(TS);login / publish 等转发 lumimaker",
5
5
  "type": "module",
6
6
  "bin": {
@@ -33,9 +33,9 @@
33
33
  "picocolors": "^1.1.1"
34
34
  },
35
35
  "optionalDependencies": {
36
- "@66rpg/lumimaker-win32-x64": "0.1.51",
37
- "@66rpg/lumimaker-darwin-arm64": "0.1.51",
38
- "@66rpg/lumimaker-darwin-x64": "0.1.51"
36
+ "@66rpg/lumimaker-win32-x64": "0.1.52",
37
+ "@66rpg/lumimaker-darwin-arm64": "0.1.52",
38
+ "@66rpg/lumimaker-darwin-x64": "0.1.52"
39
39
  },
40
40
  "devDependencies": {
41
41
  "@types/node": "^22.15.0",
@@ -39,15 +39,36 @@ description: 命令操作与发布指引。用户询问如何登录、发布作
39
39
  |---|---|---|
40
40
  | **10** | 检测到工具更新 (`update-available`) | 必须先询问用户,**禁止擅自 `--skip-update`**。列出推荐更新并口语询问:“检测到 lumimaker 有新版本,是否现在更新?”<br>• 用户同意:执行信封提供的更新命令(如 `npx lumimaker --apply-update`),成功后再原样重跑原命令。<br>• 用户拒绝:原命令追加 `--skip-update` 参数后重跑。 |
41
41
  | **11** | 缺少输入或待确认 (`need-input`) | 解析信封中的 `questions` 列表,用通俗口语逐一询问用户:<br>• **带有 `field` 属性**:将用户回答写回指定文件(如缺少 `version` / `data_ver` 时写入 `package.json` 对应字段),**写完后原样重跑命令**,不要擅自把 `--version` 等写进命令行。<br>• **带有 `flag` 属性**:将用户答案转化为对应命令行参数后重跑(例如现有 `package.json.name` 是 npm 包名时,信封会提供 `flag: --name`,此时不要覆盖该字段,转为 `--name` 参数重跑)。<br>• **待确认项**:见下方确认机制,严禁擅自加 `--yes`。 |
42
- | **12** | 未登录或凭据失效 (`login-required`) | 口语询问用户:“当前操作需要登录平台,是否现在打开浏览器登录?”<br>用户同意后执行 `npx lumimaker login`,等待用户在浏览器中完成登录后再重跑原命令。 |
42
+ | **12** | 未登录或凭据失效 (`login-required`) | Mac 上若同时发现助手权限不够,**立刻停手并在当轮回复里告诉用户**,见下方「Mac 上用 Agent 登录」。不要先重试、不要用 `security` 绕过。用户处理完权限后再问是否登录。 |
43
43
 
44
- ### 4. 首次发布前先拟标题、简介和详细介绍
45
- - **何时**:本地还没有对应平台记录时(作品没有正式版/试玩 id、模板没有平台 origin、开源工程没有工程 id),在跑 `publish` / `publish-template` / `publish-project` **之前**完成。续发不要重写已有标题简介。
46
- - **怎么拟**:先读 README、玩法说明、关卡或素材、界面上的文案,再写符合作品气质的中文标题,以及一两句简介。不要用 `game`、`template`、`untitled` 这类占位名,也不要把英文短名当成标题。
47
- - **怎么落地**:用口语把标题和简介念给用户确认,同意后再写入工程里的展示名和简介。用户已经给了标题或简介就沿用,不要擅自改写。确认前不要发。
48
- - **详细介绍**:再拟一段给人看的长介绍给用户看。发完后把帖子链接一并交给用户,请到网页把这段贴进帖子。不要为此去跑 `games` / `templates` / `projects` 更新命令。不要把长介绍写进数据包说明。
44
+ ### 4. Mac 上用 Agent 登录(一发现权限不够,立刻告诉用户)
49
45
 
50
- ### 5. 正确理解发布结果与状态
46
+ 在 **Mac** 上用 WorkBuddy 等 Agent 时,助手权限不够会导致登录失败或下一步仍要登录。这是系统权限,不是账号错了。
47
+
48
+ **一发现权限不够,立刻停手,在当轮给用户的回复里说明,再做别的事。** 不要先重试,不要先换命令绕过,不要先写项目笔记,不要等任务做完再提。这段话必须出现在回复正文里,不能只留在思考、工具日志或笔记中:
49
+
50
+ > 当前助手权限不够,请先手动处理权限。请给这个助手打开「完全访问」:系统设置 → 隐私与安全性 → 完全磁盘访问权限。也可以打开电脑自带「终端」,进入工程文件夹,运行 `npx lumimaker login`。
51
+
52
+ - **怎样算发现:** 制作器输出「当前助手权限不够」「无法保存登录」「请检查文件或目录权限」;或出现 `Operation not permitted`;或沙箱拦住登录所需目录。出现其中任一,当轮回复就必须告诉用户。
53
+ - **禁止用命令绕过。** 不要运行 `security`,不要先写再删一条凭证来提权,不要把这种做法写进笔记当成标准流程。笔记里若已有这类做法,忽略它,仍立刻把上面那段告诉用户。
54
+ - **不要描述登录信息放在哪里。** 不要对用户说钥匙串、凭证条目名、日志路径。
55
+ - **用户还没处理权限时不要反复跑 `login`。** 请用户自己打开电脑自带的「终端」(不是 Agent 里的命令盒),进入当前工程文件夹,运行:
56
+
57
+ ```bash
58
+ npx lumimaker login
59
+ ```
60
+
61
+ 浏览器里完成授权后,回到 Agent 说一声,再继续发布。不要描述登录信息保存在哪里。
62
+ - Windows 或用户已在系统终端登录成功过,按原流程即可。
63
+
64
+ ### 5. 首次发布:标题、简介和正文一并提交
65
+ 用户第一次把作品、模板或开源工程发到平台时,**主动说明并一起做完文案**:根据工程内容拟标题、一两句简介和一篇帖子正文,口语确认后随这次发布一起提交。告诉用户不必发完再去网页粘贴。
66
+ - **何时**:本地还没有对应平台记录时(作品没有正式版/试玩 id、模板没有平台 origin、开源工程没有工程 id),在跑 `publish` / `publish-template` / `publish-project` **之前**完成。续发不要重写已有标题简介,也不要带 `--content`。
67
+ - **怎么拟**:先读 README、玩法说明、关卡或素材、界面上的文案。标题要符合作品气质,用中文;简介一两句;正文可以较长,可用 Markdown。不要用 `game`、`template`、`untitled` 这类占位名,也不要把英文短名当成标题。
68
+ - **简介怎么落地**:用口语把标题和简介念给用户确认,同意后再写入工程里的展示名和简介。用户已经给了标题或简介就沿用,不要擅自改写。确认前不要发。
69
+ - **正文怎么落地**:把拟好的帖子正文口语确认后,作为 `--content` 加进**同一条**首发命令。不要写入 `package.json`,不要写进数据包说明,不要为此去跑 `games` / `templates` / `projects` 更新命令,也不要发完再请人去网页粘贴。续发和 `--fork` 不要带 `--content`。以后改简介或正文请用户到网页操作。
70
+
71
+ ### 6. 正确理解发布结果与状态
51
72
  - **命令退出 0 仅代表本次提交操作完成**,绝对不等于作品或模板已经正式上线对外可见。
52
73
  - **发布状态以终端输出的中文标题为准**:
53
74
  - 「发版成功」:表示该版本已通过审核并发布生效。
@@ -65,16 +86,16 @@ description: 命令操作与发布指引。用户询问如何登录、发布作
65
86
  1. [发布作品相关命令](references/publish-game.md)
66
87
  - 发布正式版作品(`npx lumimaker publish`)
67
88
  - 发布试玩版作品(`npx lumimaker publish --demo`)
68
- - 首次发布先拟标题、简介和详细介绍
89
+ - 首次发布:拟标题、简介和正文,确认后随这次发布一并提交
69
90
  - 前置构建要求、作品类型确认机制与横竖屏红线
70
91
  2. [发布模板与数据包相关命令](references/publish-template.md)
71
92
  - 首次发布模板、续发模板版本(`publish-template`、`--with-assets`)
72
- - 首次发布先拟标题、简介和详细介绍
93
+ - 首次发布:拟标题、简介和正文,确认后随这次发布一并提交
73
94
  - 单独更新模板数据包(`publish-template-data`)
74
95
  - 派生新模板(`--fork`)与「他人拉取」命令交付
75
96
  3. [发布开源工程相关命令](references/publish-project.md)
76
97
  - 发布开源项目代码(`publish-project`)
77
- - 首次发布先拟标题、简介和详细介绍
98
+ - 首次发布:拟标题、简介和正文,确认后随这次发布一并提交
78
99
  4. [常用基础与辅助命令](references/common-commands.md)
79
100
  - 账号登录、身份查询与退出(`login`、`whoami`、`logout`)
80
101
  - 规范检查(`validate-template`)与数据校验转调(`validate`)
@@ -6,14 +6,16 @@
6
6
 
7
7
  ## 1. 账号与认证命令
8
8
 
9
- 对用户说明登录或登录失败时,不要描述登录凭证保存在哪里,也不要展开提交 git。
9
+ 对用户说明登录或登录失败时,不要描述登录信息保存在哪里,也不要展开提交 git。
10
+
11
+ Mac 上用 WorkBuddy 等 Agent 时,一发现助手权限不够就立刻停手,当轮回复告诉用户:「当前助手权限不够,请先手动处理权限」,并请其打开「完全访问」(系统设置 → 隐私与安全性 → 完全磁盘访问权限),或到电脑自带「终端」运行 `npx lumimaker login`。信号包括「无法保存登录」「请检查文件或目录权限」、`Operation not permitted`、沙箱拦住登录目录。不要先重试,不要用 `security` 绕过,不要只写进笔记。
10
12
 
11
13
  | 命令 | 用途 | 适用说明 |
12
14
  |---|---|---|
13
- | `npx lumimaker login` | 登录平台 | 唤起浏览器完成授权。若本地已有有效凭证会自动跳过。 |
14
- | `npx lumimaker login --force` | 强制重新登录 | 需要切换账号或原有凭证失效时使用。 |
15
+ | `npx lumimaker login` | 登录平台 | 唤起浏览器完成授权。若本地已有有效登录会自动跳过。 |
16
+ | `npx lumimaker login --force` | 强制重新登录 | 需要切换账号或原来的登录失效时使用。 |
15
17
  | `npx lumimaker whoami` | 查看当前身份 | 打印当前登录的用户名与作者信息。 |
16
- | `npx lumimaker logout` | 退出登录 | 清除本机保存的当前账号登录凭证。 |
18
+ | `npx lumimaker logout` | 退出登录 | 清除本机当前账号登录。 |
17
19
 
18
20
  ---
19
21
 
@@ -13,14 +13,15 @@
13
13
 
14
14
  ---
15
15
 
16
- ## 2. 首次发布文案(标题、简介、详细介绍)
16
+ ## 2. 首次发布文案(标题、简介、正文一并提交)
17
17
 
18
- 本地还没有正式版或对应试玩记录时,**先拟文案,再构建、再发布**。
18
+ 本地还没有正式版或对应试玩记录时,**先拟文案,再构建、再发布**。主动告诉用户:简介和帖子正文可以由助手根据工程拟好,确认后随这次发布一起交上去,不必发完再去网页粘贴。
19
19
 
20
20
  1. 读工程里的 README、玩法说明、界面文案,拟定给人看的中文标题和一两句简介。不要用 `game`、`untitled` 或英文短名当标题。
21
- 2. 口语念给用户确认。同意后写入工程的展示名和简介,然后再跑构建和 `npx lumimaker publish`。用户已经给了标题或简介就沿用。
22
- 3. 同时拟一段详细介绍给用户看。发布成功后把帖子链接交给用户,请到网页把这段贴进帖子。不要为此跑查询或更新命令,也不要把长介绍写进数据包说明。
23
- 4. 续发(本地已有对应正式版或试玩记录)不要重写标题简介;改名改简介请用户到网页操作。
21
+ 2. 口语念给用户确认。同意后写入工程的展示名和简介。用户已经给了标题或简介就沿用。
22
+ 3. 同时拟一篇帖子正文(可用 Markdown),口语确认后作为 `--content` 加进**同一条**首发 `publish`。不要写入 `package.json`,不要为此跑查询或更新命令,也不要把长介绍写进数据包说明。
23
+ 4. 确认前不要发。然后再跑构建和 `npx lumimaker publish`(带上已确认的 `--content`)。
24
+ 5. 续发(本地已有对应正式版或试玩记录)不要重写标题简介,也不要带 `--content`;改名、改简介、改正文请用户到网页操作。
24
25
 
25
26
  ---
26
27
 
@@ -59,5 +60,5 @@
59
60
 
60
61
  发布完成后,CLI 会在终端输出中文卡片。请直接提取其中的关键信息告知用户:
61
62
  - **发布状态**:如「发版成功」(已直接通过)或「已提交审核」(审核中)。
62
- - **帖子链接**:提取输出中的「帖子:...」或「帖子(草稿,确认后才会公开):...」整行链接展示给用户。不要向用户展示版本 ID 或关联帖 ID。不要展示正式版或试玩的作品地址(播放页、带 `lumimaker.66rpg.com` 或 `cg-maker.66rpg.com` 的链接)。若本次是首次发布,提醒用户到该帖补上刚才拟好的详细介绍。
63
+ - **帖子链接**:提取输出中的「帖子:...」或「帖子(草稿,确认后才会公开):...」整行链接展示给用户。不要向用户展示版本 ID 或关联帖 ID。不要展示正式版或试玩的作品地址(播放页、带 `lumimaker.66rpg.com` 或 `cg-maker.66rpg.com` 的链接)。
63
64
  - 平台作品 ID(`game_id`)等信息将由平台自动记录在工程本地 `.lumimaker/game.json` 中,无需手动维护。
@@ -17,14 +17,15 @@ npx lumimaker publish-project
17
17
 
18
18
  ---
19
19
 
20
- ## 2. 首次发布文案(标题、简介、详细介绍)
20
+ ## 2. 首次发布文案(标题、简介、正文一并提交)
21
21
 
22
- 本地还没有开源工程记录时,**先拟文案再发布**。
22
+ 本地还没有开源工程记录时,**先拟文案再发布**。主动告诉用户:简介和帖子正文可以由助手根据工程拟好,确认后随这次发布一起交上去,不必发完再去网页粘贴。
23
23
 
24
24
  1. 读工程说明和源码用途,拟定给人看的中文标题和一两句简介。不要用 `untitled`、`project` 或英文短名当标题。
25
- 2. 口语确认后再写入工程的展示名和简介,然后执行 `npx lumimaker publish-project`。用户已经给了标题或简介就沿用。
26
- 3. 同时拟一段详细介绍。发布成功后把帖子链接交给用户,请到网页贴进帖子。不要为此跑更新命令。
27
- 4. 续发不要重写标题简介;改名改简介请用户到网页操作。
25
+ 2. 口语确认后再写入工程的展示名和简介。用户已经给了标题或简介就沿用。
26
+ 3. 同时拟一篇帖子正文(可用 Markdown),口语确认后作为 `--content` 加进**同一条**首发 `publish-project`。不要写入 `package.json`,不要为此跑更新命令。
27
+ 4. 确认前不要发。然后再执行带 `--content` 的 `npx lumimaker publish-project`。
28
+ 5. 续发不要重写标题简介,也不要带 `--content`;改名、改简介、改正文请用户到网页操作。
28
29
 
29
30
  ---
30
31
 
@@ -52,4 +53,4 @@ npx lumimaker publish-project
52
53
 
53
54
  发布完成后,CLI 会在终端输出中文卡片。请直接提取其中的关键信息告知用户:
54
55
  - **发布状态**:如「发版成功」或「已提交审核」。
55
- - **帖子链接**:提取输出中的「帖子:...」或「帖子(草稿,确认后才会公开):...」整行链接展示给用户。不要向用户展示版本 ID 或关联帖 ID。若本次是首次发布,提醒用户到该帖补上刚才拟好的详细介绍。
56
+ - **帖子链接**:提取输出中的「帖子:...」或「帖子(草稿,确认后才会公开):...」整行链接展示给用户。不要向用户展示版本 ID 或关联帖 ID。
@@ -32,7 +32,7 @@
32
32
  ## 3. 关键交互与规则
33
33
 
34
34
  ### 3.1 首次发布与平台展示名
35
- - **先拟文案再发**:本地还没有平台模板记录时,先读 README、玩法说明和素材,拟定给人看的中文标题和一两句简介,口语确认后再写入工程。不要用 `template`、`untitled` 或英文短名当标题。用户已经给了标题或简介就沿用。同时拟一段详细介绍,发完后请用户到帖子页贴上。不要把长介绍写进数据包说明,也不要为此跑更新命令。续发不要重写标题简介。
35
+ - **先拟文案再发**:本地还没有平台模板记录时,主动告诉用户简介和帖子正文可以由助手拟好,确认后随这次发布一起提交,不必发完再去网页粘贴。先读 README、玩法说明和素材,拟定给人看的中文标题和一两句简介,口语确认后再写入工程。不要用 `template`、`untitled` 或英文短名当标题。用户已经给了标题或简介就沿用。同时拟一篇帖子正文(可用 Markdown),确认后作为 `--content` 加进**同一条**首发 `publish-template`(含 `--init`)。不要把长介绍写进数据包说明或 `package.json`,也不要为此跑更新命令。续发和 `--fork` 不要带 `--content`。续发不要重写标题简介;以后改简介或正文请用户到网页。
36
36
  - **首发自动带包**:首次发布模板时,工程根目录下必须存在 `assets/` 且包含文件。平台会自动上传数据包,无需手动指定 `--with-assets`,也不可绑定已有的数据包 ID。
37
37
  - **展示名填写与保护**:
38
38
  - 首发必须提供合法的平台展示名称(支持中文,不能包含 `/` 或 `@`)。
@@ -60,5 +60,5 @@
60
60
 
61
61
  发布完成后,CLI 会在终端输出中文卡片。请直接提取其中的关键信息告知用户:
62
62
  - **发布状态**:如「发版成功」或「已提交审核」。
63
- - **帖子链接**:提取输出中的「帖子:...」或「帖子(草稿,确认后才会公开):...」整行链接。不要向用户展示版本 ID、模板版本 ID 或关联帖 ID。若本次是首次发布,提醒用户到该帖补上刚才拟好的详细介绍。
63
+ - **帖子链接**:提取输出中的「帖子:...」或「帖子(草稿,确认后才会公开):...」整行链接。不要向用户展示版本 ID、模板版本 ID 或关联帖 ID。
64
64
  - **他人拉取指引**:若输出中包含「他人拉取:...」行(格式形如 `npx @66rpg/lumimaker-create@latest 用户名/slug@版本`,带数据包时会包含 `--with-assets <ID>`),须**原样复制并完整展示给用户**。**切勿将命令中的英文标识替换为中文模板名,缺少用户名时也切勿擅自编造 `<用户名>`**。
@@ -5,7 +5,7 @@ description: 幻光文游社区播放页 SDK(window.LumiMakerSdk)接入指
5
5
 
6
6
  # 播放页 SDK(LumiMakerSdk)
7
7
 
8
- 作品发布后,在幻光文游社区的**播放页**(宿主)里通过 iframe 运行。平台会在玩法 HTML 里注入脚本,全局对象是 **`window.LumiMakerSdk`**。作品用它做登录、读用户、查作品权限、安全跳转、全屏。社区播放页里,下一页写普通链接,查询和 `#` 会留在新页。左键 `target="_blank"`、自定义窗口名,或按着 Ctrl / ⌘,当前作品页不换,另开窗口。需要某个包根页面的地址、又要留在当前页时,用 `signPlayHtml`;返回的地址给程序自己用,不要显示给玩家。播放页静音由 SDK 内置完成,不要对作者说明。
8
+ 作品发布后,在幻光文游社区的**播放页**(宿主)里通过 iframe 运行。平台会在玩法 HTML 里注入脚本,全局对象是 **`window.LumiMakerSdk`**。作品用它做登录、读用户、查作品权限、安全跳转、全屏。社区播放页里,下一页写包内路径,例如 `staff.html` 或 `assets/index.html`,查询和 `#` 会留在新页。左键 `target="_blank"`、自定义窗口名,或按着 Ctrl / ⌘,当前作品页不换,另开窗口。需要某个包内页面的地址、又要留在当前页时,用 `signPlayHtml`;返回的地址给程序自己用,不要显示给玩家。播放页静音由 SDK 内置完成,不要对作者说明。
9
9
 
10
10
  > **核心原则**:
11
11
  > 1. **严禁在工程中引入 SDK 文件**:发布时平台注入。**切勿**下载 `lumimaker-game.js`、**切勿**拷进 `dist/` 或源码、**切勿**手写 `<script src="...lumimaker-game.js">`。
@@ -22,7 +22,7 @@ description: 幻光文游社区播放页 SDK(window.LumiMakerSdk)接入指
22
22
  - **用户信息与登录**:唤起社区登录、展示昵称/头像。未登录的试玩仍可玩离线内容。
23
23
  - **权限与章节锁**:读 `queryGame()` 的 `can_play` / `purchased`,画作品**自己的**关卡锁或试玩结束提示。正式版未获权时播放页会盖购买遮罩,**根本不会加载**作品 iframe。
24
24
  - **安全跳转与全屏**:回社区首页、作者页、上一页;进入/退出播放器全屏壳。公开 API **没有** `toggleFullscreen()`。
25
- - **多页 HTML**:下一页写普通链接,一般不必调 `openPlayHtml`。要另开窗口用 `target="_blank"`、自定义窗口名,或 `openPlayWindow`。要地址、先留在当前页,用 `signPlayHtml`。子目录页面、目录地址打不开。
25
+ - **多页 HTML**:下一页写包内路径,例如 `staff.html` 或 `assets/index.html`,一般不必调 `openPlayHtml`。要另开窗口用 `target="_blank"`、自定义窗口名,或 `openPlayWindow`。要地址、先留在当前页,用 `signPlayHtml`。目录地址打不开。
26
26
 
27
27
  不要用本 skill 讲发版命令;发版看 `lumimaker`。
28
28
 
@@ -146,12 +146,12 @@ declare global {
146
146
  1. **不要把 SDK 打进工程**:不要放 `lumimaker-game.js`,不要手写 script 标签。发版会注入玩法 HTML(`index.html`;若已有语言/方向页也会注入那些页)。
147
147
  2. **通信边界**:不要 `window.parent.postMessage`,不要读、打印、改 token。不要自己调社区登录、签发 token、下单、支付。
148
148
  3. **跳转回社区**:只用 `navigateHome()` / `navigateAuthorPage()` / `navigateBack()`,不要传 URL,不要 `window.top.location`。不要用 `queryGame()` 的 `play_url` 跳转。对玩家只展示帖子链接(若发版卡片有),不要念播放页地址、作品 ID、关联帖 ID。
149
- 4. **玩法页之间**:只使用 `dist/` **根目录**的 `.html`(与 `index.html` 同级)。不要把玩法页放进子目录,不要用 `jubenba/`、`/`、`.` 这种目录地址,也不要写 `./#id`、`/#id`(会当成打开目录)。页内滚动写 `#id`。根目录页可以带查询串和 `#`;**查询**和 **`#` 各自最长 2048 个字符,超出的部分会被截掉**。查询里**不能**使用 `auth_key`、`signature`、`expires`、`OSSAccessKeyId` 这些签名参数名(大小写不限)。链接上若已 `preventDefault`,按页面自己的处理走。已发布入口不必调 `openPlayHtml`。对作者说明换页时,用「下一页链接」这种口语,不要把签名参数名整段念出来。
150
- 5. **只要地址、先不跳转**:`signPlayHtml('staff.html')` 只取包根这个文件的地址。当前页保持不动,也不开新窗口。`./staff.html` 当成 `staff.html`。文件名后面可以带页面自己的查询和 `#`,这两段会留在返回的地址上。返回的地址给程序自己用:不要显示给玩家,不要改路径,不要套到另一个文件上。子目录、外链和已经带签名的地址会失败。
151
- 6. **另开窗口**:左键 `target="_blank"`(含页面 `<base target="_blank">`)、自定义窗口名,或 Ctrl / ⌘ 点击包根页,当前页不换,另开窗口。不要写 `target="_parent"` / `_top`。右键和中键打不开。引擎可调 `openPlayWindow`,拿不到窗口对象。窗口名用字母开头,后面可以是字母、数字、`-`、`_`,最长 64;同一名字回到同一个窗口。`features` 只认宽、高和位置。
149
+ 4. **玩法页之间**:写包内 `.html` 路径,例如 `staff.html` 或 `assets/index.html`。反斜杠会改成斜杠,开头的 `/` 和 `./` 会去掉。不要用 `jubenba/`、`/`、`.` 这种目录地址,也不要写 `./#id`、`/#id`(会当成打开目录,也不会变成该目录的 `index.html`)。`..`、路径里的空白、把 `?` 写进路径,都不会签名。页内滚动写 `#id`。路径后面可以带查询串和 `#`;**查询**和 **`#` 各自最长 2048 个字符,超出的部分会被截掉**。查询里**不能**使用 `auth_key`、`signature`、`expires`、`OSSAccessKeyId` 这些签名参数名(大小写不限)。链接上若已 `preventDefault`,按页面自己的处理走。已发布入口不必调 `openPlayHtml`。`openPlayHtml`、`signPlayHtml`、`openPlayWindow` 按包内路径算,不跟着当前子目录再相对一次:在 `assets/book.html` 里写 `index.html` 仍是根目录那一页。普通链接、`assign`、`window.open` 仍按浏览器相对地址算。根目录 `index.html` 和 `assets/index.html` 是两页。对作者说明换页时,用「下一页链接」这种口语,不要把签名参数名整段念出来。
150
+ 5. **只要地址、先不跳转**:`signPlayHtml('assets/index.html')` 只取这个包内文件的地址。当前页保持不动,也不开新窗口。`./assets/index.html` 当成 `assets/index.html`。路径后面可以带页面自己的查询和 `#`,这两段会留在返回的地址上。返回的地址给程序自己用:不要显示给玩家,不要改路径,不要套到另一个文件上。外链、已经带签名的地址、`..` 和路径中的空白会失败。
151
+ 6. **另开窗口**:左键 `target="_blank"`(含页面 `<base target="_blank">`)、自定义窗口名,或 Ctrl / ⌘ 点击包内页,当前页不换,另开窗口。不要写 `target="_parent"` / `_top`。右键和中键打不开。引擎可调 `openPlayWindow`,拿不到窗口对象。窗口名用字母开头,后面可以是字母、数字、`-`、`_`,最长 64;同一名字回到同一个窗口。`features` 只认宽、高和位置。
152
152
  7. **购买**:正式版未获权时播放页遮罩,iframe 不会开。作品内只处理「已经进来之后」的自制锁,不要复刻社区购买墙。
153
153
  8. **本地预览**:无宿主时 `ready()` 失败正常。不要伪造登录。图音字体继续用工程本地文件。
154
- 9. **没有这些能力**:云存档、内购、查权买断。播放页静音是 SDK 内置,不要对作者说明,也不要让作者写。目录 URL 不会变成该目录的 `index.html`。
154
+ 9. **没有这些能力**:云存档、内购、查权买断。播放页静音是 SDK 内置,不要对作者说明,也不要让作者写。目录 URL 不会变成该目录的 `index.html`。包内子目录里的 `.html` 可以打开。
155
155
 
156
156
  ---
157
157
 
@@ -71,7 +71,8 @@
71
71
  | `status` | number | 货架 `1` 启用 / `2` 禁用。 |
72
72
  | `purchased` | boolean | 对该可售主体是否有已支付订单;作者未下单为 `false`。 |
73
73
  | `can_play` | boolean | 能拿到 token 时为 `true`。用来画自制章节锁。 |
74
- | `ai_model` / `engine` / `languages` / `orientations` / `play_duration` | 可选 | 可能缺省。 |
74
+ | `ai_model` / `engine` / `languages` / `orientations` / `play_duration` / `mouse_only` | 可选 | 可能缺省。`mouse_only` 为游戏上存的值:明确开启才是 `true`。 |
75
+ | `orig_price_flower` / `orig_price_cny` / `orig_price_usd` | 可选 | 仅当前价为活动覆盖价时下发。 |
75
76
 
76
77
  自制 UI 读 `can_play` / `purchased`。正式版未获权时播放页不会加载 iframe。
77
78
 
@@ -86,9 +87,9 @@
86
87
  | `navigateHome()` | void | 播放页回社区首页。 |
87
88
  | `navigateAuthorPage()` | void | 打开作者页。 |
88
89
  | `navigateBack()` | void | 有历史则后退,否则回作品帖。 |
89
- | `openPlayHtml(html)` | `Promise<void>` | 换到 **包根** 另一个玩法 HTML,只传文件名(如 `staff.html`)。不要传目录、不要把查询串写进这个参数给签名接口。社区 iframe 会自动拦 `<a>` / `assign` / `replace`(Chromium 还能拦 `location.href =`),已发布入口一般不必调。查出非法文件名 → `FAILED`。官方 App 直开无宿主时会失败。 |
90
- | `openPlayWindow(html, options?)` | `Promise<void>` | 另开包根玩法页。`options.target` 省略时是新窗口。窗口名用字母开头,后面可以是字母、数字、`-`、`_`,最长 64;同一名字回到同一个窗口。不要传 `_self`、`_parent`、`_top`。`options.features` 只保留宽、高和位置(`width` / `height` / `left` / `top` / `screenX` / `screenY`)。返回值里没有窗口对象。非法文件名 → `FAILED`。 |
91
- | `signPlayHtml(html, done?)` | `Promise<string>` | 只要包根这个文件的地址。当前页保持不动,也不开新窗口。`./staff.html` 当成 `staff.html`。文件名后可以带查询和 `#`,签好后这两段留在返回的地址上。`await`、`.then` 或回调 `(error, url)` 都能拿到。地址给程序自己用:不要显示给玩家,不要改路径,不要套到另一个文件上。子目录、外链、已经带签名的地址直接失败。非法文件名或签名失败 → `FAILED`。官方 App 直开、没有播放页时会失败。 |
90
+ | `openPlayHtml(html)` | `Promise<void>` | 换到包内另一个玩法 HTML,传包内路径(如 `staff.html`、`assets/index.html`)。反斜杠会改成斜杠,开头的 `/` 和 `./` 会去掉。按包内路径算,不跟着当前子目录再相对一次。不要传目录地址,不要把查询串写进路径。`..`、路径里的空白不会签名。社区 iframe 会自动拦 `<a>` / `assign` / `replace`(Chromium 还能拦 `location.href =`),已发布入口一般不必调。查出非法路径 → `FAILED`。官方 App 直开无宿主时会失败。 |
91
+ | `openPlayWindow(html, options?)` | `Promise<void>` | 另开包内玩法页,路径规则与 `openPlayHtml` 相同。`options.target` 省略时是新窗口。窗口名用字母开头,后面可以是字母、数字、`-`、`_`,最长 64;同一名字回到同一个窗口。不要传 `_self`、`_parent`、`_top`。`options.features` 只保留宽、高和位置(`width` / `height` / `left` / `top` / `screenX` / `screenY`)。返回值里没有窗口对象。非法路径 → `FAILED`。 |
92
+ | `signPlayHtml(html, done?)` | `Promise<string>` | 只要这个包内文件的地址,例如 `staff.html` 或 `assets/index.html`。当前页保持不动,也不开新窗口。按包内路径算,不跟着当前子目录再相对一次。`./assets/index.html` 当成 `assets/index.html`。路径后可以带查询和 `#`,签好后这两段留在返回的地址上。`await`、`.then` 或回调 `(error, url)` 都能拿到。地址给程序自己用:不要显示给玩家,不要改路径,不要套到另一个文件上。外链、已经带签名的地址、`..`、路径中的空白直接失败。非法路径或签名失败 → `FAILED`。官方 App 直开、没有播放页时会失败。 |
92
93
  | `requestFullscreen()` | `Promise<void>` | 全屏**播放器外壳**,不是游戏改 `top`。须在真实点击等手势里调用。 |
93
94
  | `exitFullscreen()` | `Promise<void>` | 退出播放器全屏。 |
94
95
 
@@ -102,15 +103,15 @@
102
103
 
103
104
  | 写法 | 播放页里 |
104
105
  |---|---|
105
- | 包根 `staff.html`、`search.html?q=`、`snapshot.html#u=…` | 能打开。查询串和 `#` 在新页补回,不要指望它们出现在签名请求里。查询和 `#` **各自最长 2048 个字符**,超出截掉。查询里不要用 `auth_key`、`signature`、`expires`、`OSSAccessKeyId`(大小写不限),这些是平台签名参数名。再次打开同一页时,业务查询和 `#` 按这次链接整段替换 |
106
+ | 包内 `staff.html`、`assets/index.html`、`search.html?q=`、`snapshot.html#u=…` | 能打开。查询串和 `#` 在新页补回,不要指望它们出现在签名请求里。查询和 `#` **各自最长 2048 个字符**,超出截掉。查询里不要用 `auth_key`、`signature`、`expires`、`OSSAccessKeyId`(大小写不限),这些是平台签名参数名。再次打开同一页时,业务查询和 `#` 按这次链接整段替换。根目录 `index.html` 和 `assets/index.html` 是两页 |
106
107
  | 左键 `target="_blank"`、自定义窗口名,或 Ctrl / ⌘ | 当前页不换。播放页另开可刷新的社区窗口。含 `<base target="_blank">`。页面已 `preventDefault` 则不打开 |
107
108
  | `target="_parent"` / `_top` | 不要写。不换当前页,也不跳出作品框 |
108
109
  | 当前页 `#id` | 只滚动,不换页 |
109
110
  | `./#id`、`/#id`、`.`、`/`、`jubenba/` | **不要写**。会当成打开目录,请求失败;脚本会拦住,但也不会改成该目录的 `index.html` |
110
- | 子目录 `jubenba/search.html` | 打不开。玩法 HTML 放在 `dist/` 根目录 |
111
+ | 子目录 `assets/index.html`、`jubenba/search.html` | 能打开。这是包内路径,不是目录地址 |
111
112
  | 链接上已 `preventDefault` | 脚本不再换页,让页面自己的点击处理先完成 |
112
113
 
113
- 要某个包根页面的地址、又要留在当前页:`signPlayHtml('staff.html')`,也可以写成 `staff.html?q=关键词#intro`。返回的地址给程序自己用,不要显示给玩家,不要改路径,不要套到另一个文件上。
114
+ 要某个包内页面的地址、又要留在当前页:`signPlayHtml('staff.html')`,也可以写成 `assets/index.html?q=关键词#intro`。返回的地址给程序自己用,不要显示给玩家,不要改路径,不要套到另一个文件上。`openPlayHtml`、`signPlayHtml`、`openPlayWindow` 按包内路径算;普通链接、`assign`、`window.open` 仍按浏览器相对地址算。
114
115
 
115
116
  右键「在新标签页中打开」和中键打不开。官方 App 直接打开作品、没有播放页时,换页、另开窗口和 `signPlayHtml` 都不会成功。
116
117
 
@@ -38,7 +38,7 @@ npx lumimaker validate-template
38
38
 
39
39
  - 涉及文件或目录缺失:对照协议第 1 节(目录结构)补齐必要项。
40
40
  - 涉及配置或脚本问题:对照协议第 2 节(package.json)核对字段格式与脚本要求。
41
- - 涉及构建输出问题:对照协议第 3 节(构建产物)检查产物目录与入口。社区播放页能打开的玩法 HTML 须在 `dist/` 根目录,见该节第 5 条。
41
+ - 涉及构建输出问题:对照协议第 3 节(构建产物)检查产物目录与入口。社区播放页能打开包内 `.html` 路径(含子目录文件),目录地址打不开,见该节第 5 条。
42
42
 
43
43
  > **原则**:仅针对报错项和协议明确约定的内容做修改;协议未约定的文件和配置保持原样,切勿随意变动。
44
44
 
@@ -103,7 +103,7 @@
103
103
  2. **入口文件**:`dist/` 根目录下**必须**产出 `index.html` 入口文件。可以仅产出纯 `index.html`,无需任何其他静态资源文件。
104
104
  3. **静态资源(建议)**:若构建产物包含 JavaScript、CSS、图片等静态资源,建议放置于与 `index.html` 同级的 `dist/assets/` 目录下。
105
105
  4. **其他产物**:除 `dist/index.html` 外,产物目录内的其他文件组织形式本协议不作强制限制。
106
- 5. **社区播放页能打开的玩法 HTML**:须与 `index.html` 同在 `dist/` 根目录。子目录里的 `.html`、目录地址(如 `jubenba/`)在播放页打不开,也不会自动改成该目录的 `index.html`。页内锚点写 `#id`,不要写 `./#id`。链接写法见 `lumimaker-play-sdk`。
106
+ 5. **社区播放页能打开的玩法 HTML**:写包内 `.html` 路径,例如 `staff.html` 或 `assets/index.html`。目录地址(如 `jubenba/`)打不开,也不会自动改成该目录的 `index.html`。页内锚点写 `#id`,不要写 `./#id`。链接写法见 `lumimaker-play-sdk`。
107
107
 
108
108
  ---
109
109
 
@@ -113,3 +113,4 @@
113
113
  |---|---|---|
114
114
  | 1.0 | 2026-09-22 | 初始版本。明确工程目录结构、`package.json` 配置字段与脚本规范,以及 `dist/` 构建产物约定(assets 为可选,支持纯 index.html)。 |
115
115
  | 1.1 | 2026-10-05 | 补充:社区播放页只签 `dist/` 根目录的玩法 HTML;目录地址不会回落为该目录的 `index.html`。 |
116
+ | 1.2 | 2026-10-09 | 播放页改为签包内 `.html` 路径,子目录里的页面可以打开;目录地址仍然不会变成该目录的 `index.html`。 |