dsh-pet-live2d 2.1.0 → 2.3.0
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/CHANGELOG.md +75 -0
- package/README.md +44 -2
- package/lib/client.js +690 -39
- package/lib/index.js +175 -13
- package/package.json +1 -1
- package/pets/ds-whale-girl/pet.json +74 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,80 @@
|
|
|
1
1
|
# 更新日志
|
|
2
2
|
|
|
3
|
+
## 2.3.0
|
|
4
|
+
|
|
5
|
+
### 摸头判定改成按模型自己的几何(不再是手绘方框)
|
|
6
|
+
|
|
7
|
+
用户:"看看摸头的区域能否精准匹配头部的模型而不是手绘区域。" 查下来比想象的糟:
|
|
8
|
+
老实现用英文正则 `face|eye|mouth|nose|brow|cheek|head` 去猜哪些 drawable 是头,
|
|
9
|
+
而这只模型的 drawable 叫 `Part46` / `lianhong` / `Face_line` 这种 —— **一个都匹配不上**,
|
|
10
|
+
判定静默退化成"点哪都算头",摸哪都在撒娇。
|
|
11
|
+
|
|
12
|
+
现在的路是三段,全用模型自己的数据,没有猜的:
|
|
13
|
+
|
|
14
|
+
1. **cdi3 的部件名**:作者给每个部件起了中文名(`Part46` = 脸蛋、`Part57/58` = 眼睛、
|
|
15
|
+
`Part14` = 头发、`Part45/68` = 耳朵…),宿主按名字挑出头部部件(这只宠物 21 个);
|
|
16
|
+
2. **部件 → drawable**:cdi3 的 `Parts` 是**部件** id,而 `getDrawableIndex()` 认的是
|
|
17
|
+
**drawable** id —— 两个命名空间不同名(实测 21 个部件一个都解不出来)。引擎原始表里有
|
|
18
|
+
`drawables.parentPartIndices` + `parts.ids`,两边一接就得到 96 个头部 drawable;
|
|
19
|
+
3. **点在三角形内**:每次点击现读那批 drawable 的顶点与三角形索引(顶点是**当前帧变形
|
|
20
|
+
后**的,头歪着、身体摆着也准),先做包围盒排除再逐三角形判定。
|
|
21
|
+
|
|
22
|
+
同一个网格上,新判定和旧方框**有 325 个格子不同**:新的是圆顶、带耳朵尖、下巴收窄的
|
|
23
|
+
头部轮廓,旧的是个完美矩形。
|
|
24
|
+
|
|
25
|
+
> 踩到的坑:顶点在**包装层**(`internalModel.getDrawableVertices`),三角形索引在
|
|
26
|
+
> **core 层**(`internalModel.coreModel.getDrawableVertexIndices`)—— 只查一个就会
|
|
27
|
+
> 静默 null、悄悄退回方框。所以测试里每一段**单独断言**(部件数 / drawable 下标数 /
|
|
28
|
+
> 顶点可读 / 与旧规则不同 / 自身包围盒四角不全中),而不是只验最后那个 true/false。
|
|
29
|
+
|
|
30
|
+
### 新互动:摸尾巴、鼠标绕圈转晕
|
|
31
|
+
|
|
32
|
+
- **摸尾巴**:同一套几何判定,部件换成 cdi3 里命名为 尾/鳍/翅/翼 的那 15 个
|
|
33
|
+
(狐狸尾 / 猫尾 / 狼尾 / 大翅膀…都是可换配件)。默认反应:吐魂 / 问号。
|
|
34
|
+
- **转圈转晕**:鼠标绕着角色转够圈数(默认 2 圈 / 1.6 秒内)就演「晕晕」。看的是
|
|
35
|
+
**累计转角**而不是"位置绕了几圈" —— 前者对半径不敏感,贴着角色转小圈和远远转大圈都算。
|
|
36
|
+
- 三个互动(摸头 / 摸尾巴 / 转圈)各自可开关,反应候选在设置里点选,
|
|
37
|
+
候选就是**宠物自己的动作中文名与表情名**(不用记 id)。
|
|
38
|
+
|
|
39
|
+
### 气泡:会话相位会说一句话,而且全部可配
|
|
40
|
+
|
|
41
|
+
- 会话相位现在会弹一句台词(思考中 / 用工具 / 等你批准 / 等你回答 / 叫了帮手 / 消息排队 /
|
|
42
|
+
完成 / 出错),来源还是 DSH 的真实事件。
|
|
43
|
+
- **所有气泡文本都能在设置里改**(问候 / 点击 / 摸头 / 摸尾巴 / 转晕 / 归位 / 加载失败 +
|
|
44
|
+
每个相位)。一组用 `|` 分隔多个变体、随机挑一句;**留空 = 用宠物默认**
|
|
45
|
+
(`pet.json` 的 `live2d.lines`),所以"看一眼"不会把默认改掉。
|
|
46
|
+
- **位置可配**:左右 / 上下偏移两个滑杆,外加"一句话停留多久"。
|
|
47
|
+
- **总开关**:关掉之后任何台词都不弹。
|
|
48
|
+
|
|
49
|
+
### 顺手修掉两个潜伏的问题
|
|
50
|
+
|
|
51
|
+
- **退化三角形**:`pointInTriangle` 对三个顶点几乎重合(面积 0)的三角形会返回 true ——
|
|
52
|
+
而隐藏的配件(缩放成一点)正好是这种,会让"每个点都算命中"。已加面积下限。
|
|
53
|
+
- **转圈时间窗**:第一版写成 `now - 上次触发 > 窗口`,那个值一开始恒大于窗口,于是
|
|
54
|
+
每次移动都把累计清零,永远攒不够圈数(诊断读口里 `total` 一直停在 0.07)。
|
|
55
|
+
现在窗口从**这轮累计开始**算起。
|
|
56
|
+
|
|
57
|
+
## 2.2.0
|
|
58
|
+
|
|
59
|
+
### 多接三个会话状态(对着 DSH 0.1.7 的事件表挑的)
|
|
60
|
+
|
|
61
|
+
0.1.7 里能订阅的事件有 100 个,但只有一部分能翻译成"宠物该演什么"。挑的标准是
|
|
62
|
+
**它填的是不是一个真实的空档**:
|
|
63
|
+
|
|
64
|
+
| 新相位 | 来自 | 以前的样子 |
|
|
65
|
+
|---|---|---|
|
|
66
|
+
| `asking` | `user-questions/request` | 它问你问题、等你回答的整段时间里,宠物还在演"干活" —— 最大的一个空档 |
|
|
67
|
+
| `helper` | `subagent/start` / `subagent/end` | 子代理是**长活**(几分钟),和一次普通工具调用混在一起看不出区别 |
|
|
68
|
+
| `queued` | `agent/inbox/inserted` | 你发的话在它忙的时候排队,宠物毫无反应 |
|
|
69
|
+
|
|
70
|
+
`asking` 挂的是 waterfall:链一直挂到你答完才 resume,所以这个相位**正好**等于"卡在等你"
|
|
71
|
+
的那一段,不用自己计时。`queued` 是短促反应(1.6 秒),回落到**排队前那个相位**而不是
|
|
72
|
+
一律回 idle —— 否则一个正在跑工具的回合看起来像停了。
|
|
73
|
+
|
|
74
|
+
**没接的**(评估过,理由写在 `lib/index.js` 的注释里):`fs/write-intent` / `edit-intent`
|
|
75
|
+
(tool 相位已经演「写本本」了,再拆一个 editing 和它重复)、`workflow/*`(工作流本身就是
|
|
76
|
+
工具调用,已被 tool 覆盖)、`agent/status`(只有 idle / running 两个值,给不出更细的)。
|
|
77
|
+
|
|
3
78
|
## 2.1.0
|
|
4
79
|
|
|
5
80
|
### 会话相位改成真正的"接管"
|
package/README.md
CHANGED
|
@@ -74,8 +74,24 @@ dsh plugin --profile web add "link:./dsh-pet-live2d/dsh-live2d-pet"
|
|
|
74
74
|
|
|
75
75
|
### 会话相位:同一套池子
|
|
76
76
|
|
|
77
|
-
|
|
78
|
-
|
|
77
|
+
每个会话相位下面是"槽位 → 条目表",机制和摸鱼一样。**宠物跟着 DSH 的真实事件换相位**:
|
|
78
|
+
|
|
79
|
+
| 相位 | 什么时候 | 这只宠物演什么 |
|
|
80
|
+
|---|---|---|
|
|
81
|
+
| `thinking` | 模型在想 / 刚开工 | 抬头看 |
|
|
82
|
+
| `tool` | 调工具(detail 带工具名) | 写本本 + 流汗 |
|
|
83
|
+
| `waiting` | 有操作**等你批准** | 问号 |
|
|
84
|
+
| `asking` | 它**问了你一个问题**、在等你回答 | 举手 + 问号 |
|
|
85
|
+
| `helper` | 起了**子代理**(一段长活) | 喵喵手 + 调皮 |
|
|
86
|
+
| `queued` | 你发的话**排队**了(它还在忙) | 感叹号(短促一下) |
|
|
87
|
+
| `done` | 这一轮说完(庆祝 3.5 秒) | 开心 + 情绪花花 |
|
|
88
|
+
| `failed` | 出错了 | 大哭 + 流汗 |
|
|
89
|
+
|
|
90
|
+
来源是 `agent/status`、`tools/pre-execute|post-execute`、`approval/request`、
|
|
91
|
+
`user-questions/request`、`subagent/start|end`、`agent/inbox/inserted`、
|
|
92
|
+
`agent/turn-stopping`、`agent/error` —— 按主题折成上面这几个相位。
|
|
93
|
+
|
|
94
|
+
相位表**一开始就列出全部相位**,显示的是**有效池子**:
|
|
79
95
|
|
|
80
96
|
| 行头标记 | 含义 | 那一行有什么 |
|
|
81
97
|
|---|---|---|
|
|
@@ -96,6 +112,32 @@ dsh plugin --profile web add "link:./dsh-pet-live2d/dsh-live2d-pet"
|
|
|
96
112
|
|
|
97
113
|
右键面板的「装扮」页签跟着相位走 —— 会话中它显示的是**相位抽到的**,不是你上次手选的。
|
|
98
114
|
|
|
115
|
+
### 互动:摸头 / 摸尾巴 / 转圈
|
|
116
|
+
|
|
117
|
+
点她身上会有反应,判定用的是**模型自己的几何**,不是画出来的区域:
|
|
118
|
+
|
|
119
|
+
| 互动 | 怎么触发 | 默认反应 |
|
|
120
|
+
|---|---|---|
|
|
121
|
+
| 摸头 | 点在**头部**(含头发、耳朵 —— 宿主读 cdi3 里作者的部件命名认出来的 21 个部件) | 重锤出击 / 问号 / 星星眼 随机一个,**不脸红** |
|
|
122
|
+
| 摸尾巴 | 点在**尾巴/翅膀**上(狐狸尾 / 猫尾 / 狼尾 / 大翅膀…15 个部件) | 吐魂 / 问号 随机一个 |
|
|
123
|
+
| 转圈转晕 | 鼠标**绕着角色转圈**:默认 2 圈、1.6 秒内 | 演「晕晕」 |
|
|
124
|
+
|
|
125
|
+
- 摸头/摸尾巴按**三角面**判定:圆顶带耳朵尖的头部轮廓、尾巴的边缘都对得上,不是方框。
|
|
126
|
+
顶点是**当前帧变形后**的,所以头歪着、身体摆着也准。
|
|
127
|
+
- 转圈看的是**累计转角**(不是位置绕了几圈),所以贴着角色转小圈、远远转大圈都算。
|
|
128
|
+
- 三个互动各自可开关,反应也能改(见下)。共用的三句台词在「气泡」设置里。
|
|
129
|
+
|
|
130
|
+
### 气泡:说什么、在哪、要不要
|
|
131
|
+
|
|
132
|
+
她说话时会弹一个小气泡(问候、点击、摸头、摸尾巴、转晕、归位,以及**每个会话相位一句**:
|
|
133
|
+
思考中 / 用工具 / 等你批准 / 等你回答 / 叫了帮手 / 消息排队 / 完成 / 出错)。
|
|
134
|
+
|
|
135
|
+
- **所有文本都能改**:设置页「气泡」卡里逐条编辑。一组台词**用 `|` 分隔多个变体**
|
|
136
|
+
(随机挑一句);**留空 = 用宠物默认**(`pet.json` 的 `live2d.lines`),所以"看一眼"不会
|
|
137
|
+
把默认改掉。
|
|
138
|
+
- **位置可调**:左右 / 上下偏移两个滑杆(相对她头顶的默认位置),另有"一句话停留多久"。
|
|
139
|
+
- **总开关**:关掉之后任何台词都不弹。
|
|
140
|
+
|
|
99
141
|
### 关系:同时(pairs)与前提(requires)
|
|
100
142
|
|
|
101
143
|
条目下面缩进那一层是**关系**,两种刻意用不同前缀:
|