@lrplrplrp/dsh-live2d 0.1.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.
Files changed (49) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +100 -0
  3. package/assets/BCSZ1.1/BCSZ1.1.cdi3.json +470 -0
  4. package/assets/BCSZ1.1/BCSZ1.1.moc3 +0 -0
  5. package/assets/BCSZ1.1/BCSZ1.1.model3.json +174 -0
  6. package/assets/BCSZ1.1/BCSZ1.1.physics3.json +2494 -0
  7. package/assets/BCSZ1.1/SZ-/344/270/215/345/217/230.motion3.json +13703 -0
  8. package/assets/BCSZ1.1/SZ-/344/270/255/345/215/210.motion3.json +7201 -0
  9. package/assets/BCSZ1.1/SZ-/345/210/235/350/247/201.motion3.json +27609 -0
  10. package/assets/BCSZ1.1/SZ-/345/244/234/346/231/232.motion3.json +14909 -0
  11. package/assets/BCSZ1.1/SZ-/345/244/264/351/245/260.motion3.json +69 -0
  12. package/assets/BCSZ1.1/SZ-/345/260/276/345/267/264.motion3.json +840 -0
  13. package/assets/BCSZ1.1/SZ-/345/261/221/347/234/274/347/245/236.motion3.json +69 -0
  14. package/assets/BCSZ1.1/SZ-/345/275/222/351/233/266.motion3.json +300 -0
  15. package/assets/BCSZ1.1/SZ-/346/227/240/350/201/212.motion3.json +6617 -0
  16. package/assets/BCSZ1.1/SZ-/346/227/251/344/270/212/345/245/275.motion3.json +16785 -0
  17. package/assets/BCSZ1.1/template.json +59 -0
  18. package/assets/BCSZ1.1/textures/texture_00.png +0 -0
  19. package/assets/BCSZ1.1/waifu-tips-BCSZ.json +49 -0
  20. package/assets/BCSZ1.1//345/205/253/351/207/215/347/245/236/345/255/220-/344/270/215/345/217/230.wav +0 -0
  21. package/assets/BCSZ1.1//345/205/253/351/207/215/347/245/236/345/255/220-/344/270/255/345/215/210.wav +0 -0
  22. package/assets/BCSZ1.1//345/205/253/351/207/215/347/245/236/345/255/220-/345/210/235/350/247/201.wav +0 -0
  23. package/assets/BCSZ1.1//345/205/253/351/207/215/347/245/236/345/255/220-/345/244/234/346/231/232.wav +0 -0
  24. package/assets/BCSZ1.1//345/205/253/351/207/215/347/245/236/345/255/220-/346/227/240/350/201/212.wav +0 -0
  25. package/assets/BCSZ1.1//345/205/253/351/207/215/347/245/236/345/255/220-/346/227/251/344/270/212.wav +0 -0
  26. package/assets/deepseek_l2d/deepseek.2048/texture_00.png +0 -0
  27. package/assets/deepseek_l2d/deepseek.cdi3.json +205 -0
  28. package/assets/deepseek_l2d/deepseek.moc3 +0 -0
  29. package/assets/deepseek_l2d/deepseek.model3.json +67 -0
  30. package/assets/deepseek_l2d/deepseek.physics3.json +311 -0
  31. package/assets/deepseek_l2d/happy.exp3.json +45 -0
  32. package/assets/deepseek_l2d/happy2.exp3.json +35 -0
  33. package/assets/deepseek_l2d/idle.motion3.json +5574 -0
  34. package/assets/deepseek_l2d/index.html +13 -0
  35. package/assets/deepseek_l2d/puzzled.exp3.json +45 -0
  36. package/assets/deepseek_l2d/relax.exp3.json +60 -0
  37. package/assets/deepseek_l2d/speak.motion3.json +6975 -0
  38. package/assets/deepseek_l2d/thinkend.motion3.json +876 -0
  39. package/assets/deepseek_l2d/thinking.motion3.json +4992 -0
  40. package/assets/deepseek_l2d/unhappy.exp3.json +50 -0
  41. package/assets/model_list.json +39 -0
  42. package/cordis.patch.yml +11 -0
  43. package/lib/client.js +1487 -0
  44. package/lib/index.js +642 -0
  45. package/lib/index.min.js +1 -0
  46. package/lib/live2d.min.js +1 -0
  47. package/lib/live2dcubismcore.min.js +9 -0
  48. package/lib/pixi.min.js +9 -0
  49. package/package.json +62 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 lrplrplrp
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,100 @@
1
+ # DSH Live2D 看板娘 🎭
2
+
3
+ **在 DeepSeek Harness Web GUI 中渲染可拖动的 Live2D 模型,由 DSH 真实工作状态实时驱动动画,并支持眼睛跟随鼠标。**
4
+
5
+ [English](README_EN.md) · [GitHub](https://github.com/lrplrplrp/dsh-live2d)
6
+
7
+ ![预览图](https://raw.githubusercontent.com/lrplrplrp/dsh-live2d/main/docs/preview.png)
8
+
9
+ ## 功能
10
+
11
+ - 🎭 **Live2D 模型渲染** — 在 DSH Web GUI 中显示 Live2D 看板娘
12
+ - 🖱️ **拖拽移动** — 通过右下角拖拽图标移动看板娘,位置自动保存
13
+ - 🎡 **滚轮缩放** — 鼠标滚轮实时缩放模型大小,缩放自动保存
14
+ - 📐 **画布大小调整** — 悬停画布时显示右下角手柄,拖动改变画布尺寸
15
+ - 👀 **眼睛跟随鼠标** — 模型视线随光标移动(可在设置页开关)
16
+ - 🎬 **DSH 状态驱动动画** — 基于 Agent 状态(思考/工作/完成/错误)实时切换对应动画
17
+ - ⚡ **实时推送** — 状态变化通过 SSE 即时推送,动画切换零延迟
18
+ - 📦 **内置默认模型** — 开箱即带的 DeepSeek Live2D 模型与完整动画映射,安装即可用
19
+ - 📂 **模型目录自动扫描** — 把 `.model3.json` 模型文件夹放进 `assets/` 即被自动识别
20
+ - ⚙️ **完整设置页** — DSH 设置面板中的 Live2D 配置页面
21
+
22
+ ## 安装
23
+
24
+ ### 1. 完全退出 DSH
25
+
26
+ 关闭 DSH Host(不只是浏览器标签页)。
27
+
28
+ ### 2. 命令安装
29
+
30
+ ```bash
31
+ # 从本地目录安装(开发/调试)
32
+ dsh plugin --profile web add link:/path/to/dsh-live2d
33
+ ```
34
+
35
+ ### 3. 启动 DSH
36
+
37
+ ```bash
38
+ dsh web
39
+ ```
40
+
41
+ 启动后看板娘会自动出现在页面左下角,并以内置的 DeepSeek 模型与动画映射运行。
42
+
43
+ ## 交互说明
44
+
45
+ | 操作 | 方式 |
46
+ |------|------|
47
+ | 移动看板娘 | 拖动右下角的 ✥ 拖拽图标 |
48
+ | 缩放模型 | 鼠标滚轮(悬停在拖拽图标上滚动) |
49
+ | 调整画布大小 | 鼠标悬停画布时,拖动右下角的蓝色边角手柄 |
50
+ | 眼睛跟随 | 全局开启,视线自动看向光标;可在设置页关闭 |
51
+
52
+ ## 模型与动画配置
53
+
54
+ 配置保存在浏览器 localStorage(key: `dsh-live2d.v1`),也可在 **DSH 设置 → Live2D 看板娘** 中可视化编辑。
55
+
56
+ ### 内置默认动画映射
57
+
58
+ 插件内置的 DeepSeek 模型已预置以下映射,安装即可使用:
59
+
60
+ | DSH 状态 | 说明 | 默认动画 |
61
+ |---------|------|---------|
62
+ | `IDLE` | 空闲待机 | Idle 组 motion |
63
+ | `THINKING` | Agent 开始思考 | Anima 组 thinking motion |
64
+ | `THINK_END` | 思考结束,准备输出 | Anima 组 thinkend motion |
65
+ | `WORKING` | 工具调用中 | Anima 组 speak motion |
66
+ | `SPEAKING` | 开始输出对话内容 | Anima 组 speak motion |
67
+ | `SUCCESS` | 任务完成 | happy 表情 |
68
+ | `ERROR` | 任务出错 | unhappy 表情 |
69
+
70
+ 每个模型可独立配置:
71
+ - `motion`: `{ "group": "组名", "index": 0 }` — 播放动作(index 为组内序号,留空随机)
72
+ - `expression`: `"表情名"` — 设置表情
73
+
74
+ ### 添加本地模型
75
+
76
+ 1. 将含 `.model3.json` 的模型文件夹复制到插件的 `assets/` 目录下(如 `assets/my_model/`)。
77
+ 2. 打开 **DSH 设置 → Live2D 看板娘**,点击「刷新模型列表」。
78
+ 3. 模型即出现在列表标签中,可在下方配置其动画映射。
79
+
80
+ 无需手动编辑路径——扫描自动识别 `assets/` 下所有子目录中的 `model3.json`。
81
+
82
+ ## 通用设置
83
+
84
+ 设置页顶部「通用设置」卡片提供:
85
+
86
+ - **眼睛跟随鼠标** — 勾选后模型视线随光标移动;关闭后视线回到正中。开关即时生效并持久化。
87
+
88
+ ## 与原项目的关系
89
+
90
+ 本插件基于 [lrplrplrp/live2d](https://github.com/lrplrplrp/live2d) 改造,移除了对话框、小游戏、外部 API 等,新增了 DSH 状态驱动、拖拽/缩放/画布调整、眼睛跟随、实时推送等能力,并深度集成 DSH 设置页。
91
+
92
+ ## 技术栈
93
+
94
+ - **PIXI.js 7.x** — 2D 渲染引擎
95
+ - **pixi-live2d-display** — Live2D Cubism SDK for Web(含 `model.focus` 视线跟随)
96
+ - **DSH 插件系统** — `window.__ModuleLoader__` + `ctx.slots` + `webServer` SSE
97
+
98
+ ## License
99
+
100
+ MIT
@@ -0,0 +1,470 @@
1
+ {
2
+ "Version": 3,
3
+ "Parameters": [
4
+ {
5
+ "Id": "ParamAngleX",
6
+ "GroupId": "ParamGroup4",
7
+ "Name": "角度 X"
8
+ },
9
+ {
10
+ "Id": "ParamAngleY",
11
+ "GroupId": "ParamGroup4",
12
+ "Name": "角度 Y"
13
+ },
14
+ {
15
+ "Id": "ParamAngleZ",
16
+ "GroupId": "ParamGroup4",
17
+ "Name": "角度 Z"
18
+ },
19
+ {
20
+ "Id": "Param48",
21
+ "GroupId": "ParamGroup4",
22
+ "Name": "身体前后"
23
+ },
24
+ {
25
+ "Id": "ParamBodyAngleZ",
26
+ "GroupId": "ParamGroup4",
27
+ "Name": "身体旋转 Z"
28
+ },
29
+ {
30
+ "Id": "ParamBodyAngleX",
31
+ "GroupId": "ParamGroup4",
32
+ "Name": "身体旋转 X"
33
+ },
34
+ {
35
+ "Id": "ParamBodyAngleY",
36
+ "GroupId": "ParamGroup4",
37
+ "Name": "身体旋转 Y"
38
+ },
39
+ {
40
+ "Id": "ParamEyeBallX",
41
+ "GroupId": "ParamGroup4",
42
+ "Name": "眼珠 X"
43
+ },
44
+ {
45
+ "Id": "ParamEyeBallY",
46
+ "GroupId": "ParamGroup4",
47
+ "Name": "眼珠 Y"
48
+ },
49
+ {
50
+ "Id": "ParamBreath",
51
+ "GroupId": "ParamGroup5",
52
+ "Name": "呼吸"
53
+ },
54
+ {
55
+ "Id": "Param2",
56
+ "GroupId": "ParamGroup5",
57
+ "Name": "左手"
58
+ },
59
+ {
60
+ "Id": "Param50",
61
+ "GroupId": "ParamGroup5",
62
+ "Name": "左手2"
63
+ },
64
+ {
65
+ "Id": "Param3",
66
+ "GroupId": "ParamGroup5",
67
+ "Name": "右手"
68
+ },
69
+ {
70
+ "Id": "Param49",
71
+ "GroupId": "ParamGroup5",
72
+ "Name": "右手2"
73
+ },
74
+ {
75
+ "Id": "ParamMouthForm",
76
+ "GroupId": "ParamGroup5",
77
+ "Name": "嘴 变形"
78
+ },
79
+ {
80
+ "Id": "ParamMouthOpenY",
81
+ "GroupId": "ParamGroup5",
82
+ "Name": "嘴 张开和闭合"
83
+ },
84
+ {
85
+ "Id": "ParamBrowLY",
86
+ "GroupId": "ParamGroup5",
87
+ "Name": "左眉上下"
88
+ },
89
+ {
90
+ "Id": "ParamBrowLAngle",
91
+ "GroupId": "ParamGroup5",
92
+ "Name": "左眉 角度"
93
+ },
94
+ {
95
+ "Id": "ParamEyeLSmile",
96
+ "GroupId": "ParamGroup5",
97
+ "Name": "左眼 微笑"
98
+ },
99
+ {
100
+ "Id": "ParamEyeROpen",
101
+ "GroupId": "ParamGroup5",
102
+ "Name": "右眼"
103
+ },
104
+ {
105
+ "Id": "ParamEyeLOpen",
106
+ "GroupId": "ParamGroup5",
107
+ "Name": "左眼 开闭"
108
+ },
109
+ {
110
+ "Id": "Param",
111
+ "GroupId": "ParamGroup5",
112
+ "Name": "耳朵"
113
+ },
114
+ {
115
+ "Id": "Param43",
116
+ "GroupId": "ParamGroup6",
117
+ "Name": "眼睛"
118
+ },
119
+ {
120
+ "Id": "Param9",
121
+ "GroupId": "ParamGroup6",
122
+ "Name": "尾巴"
123
+ },
124
+ {
125
+ "Id": "Param27",
126
+ "GroupId": "ParamGroup6",
127
+ "Name": "头饰"
128
+ },
129
+ {
130
+ "Id": "Param34",
131
+ "GroupId": "ParamGroup3",
132
+ "Name": "眼球物理"
133
+ },
134
+ {
135
+ "Id": "Param45",
136
+ "GroupId": "ParamGroup3",
137
+ "Name": "眼球高光"
138
+ },
139
+ {
140
+ "Id": "Param52",
141
+ "GroupId": "ParamGroup3",
142
+ "Name": "耳朵1"
143
+ },
144
+ {
145
+ "Id": "Param15",
146
+ "GroupId": "ParamGroup3",
147
+ "Name": "耳饰"
148
+ },
149
+ {
150
+ "Id": "Param40",
151
+ "GroupId": "ParamGroup3",
152
+ "Name": "耳饰1"
153
+ },
154
+ {
155
+ "Id": "ParamHairFront",
156
+ "GroupId": "ParamGroup3",
157
+ "Name": "摇动 前发"
158
+ },
159
+ {
160
+ "Id": "Param18",
161
+ "GroupId": "ParamGroup3",
162
+ "Name": "前发1"
163
+ },
164
+ {
165
+ "Id": "ParamHairSide",
166
+ "GroupId": "ParamGroup3",
167
+ "Name": "摇动 侧发"
168
+ },
169
+ {
170
+ "Id": "Param19",
171
+ "GroupId": "ParamGroup3",
172
+ "Name": "侧发1"
173
+ },
174
+ {
175
+ "Id": "ParamHairBack",
176
+ "GroupId": "ParamGroup3",
177
+ "Name": "摇动 后发"
178
+ },
179
+ {
180
+ "Id": "Param20",
181
+ "GroupId": "ParamGroup3",
182
+ "Name": "后发1"
183
+ },
184
+ {
185
+ "Id": "Param21",
186
+ "GroupId": "ParamGroup3",
187
+ "Name": "后发2"
188
+ },
189
+ {
190
+ "Id": "Param22",
191
+ "GroupId": "ParamGroup3",
192
+ "Name": "中后发"
193
+ },
194
+ {
195
+ "Id": "Param23",
196
+ "GroupId": "ParamGroup3",
197
+ "Name": "中后发1"
198
+ },
199
+ {
200
+ "Id": "Param24",
201
+ "GroupId": "ParamGroup3",
202
+ "Name": "长侧发"
203
+ },
204
+ {
205
+ "Id": "Param25",
206
+ "GroupId": "ParamGroup3",
207
+ "Name": "长侧发1"
208
+ },
209
+ {
210
+ "Id": "Param26",
211
+ "GroupId": "ParamGroup3",
212
+ "Name": "长侧发2"
213
+ },
214
+ {
215
+ "Id": "Param28",
216
+ "GroupId": "ParamGroup2",
217
+ "Name": "胸x"
218
+ },
219
+ {
220
+ "Id": "Param51",
221
+ "GroupId": "ParamGroup2",
222
+ "Name": "下摆外"
223
+ },
224
+ {
225
+ "Id": "Param29",
226
+ "GroupId": "ParamGroup2",
227
+ "Name": "胸y"
228
+ },
229
+ {
230
+ "Id": "Param16",
231
+ "GroupId": "ParamGroup2",
232
+ "Name": "小蝴蝶结1"
233
+ },
234
+ {
235
+ "Id": "Param17",
236
+ "GroupId": "ParamGroup2",
237
+ "Name": "小蝴蝶结2"
238
+ },
239
+ {
240
+ "Id": "Param37",
241
+ "GroupId": "ParamGroup2",
242
+ "Name": "小宝石"
243
+ },
244
+ {
245
+ "Id": "Param30",
246
+ "GroupId": "ParamGroup2",
247
+ "Name": "下摆1"
248
+ },
249
+ {
250
+ "Id": "Param32",
251
+ "GroupId": "ParamGroup2",
252
+ "Name": "下摆1.1"
253
+ },
254
+ {
255
+ "Id": "Param31",
256
+ "GroupId": "ParamGroup2",
257
+ "Name": "下摆2"
258
+ },
259
+ {
260
+ "Id": "Param33",
261
+ "GroupId": "ParamGroup2",
262
+ "Name": "下摆2.1"
263
+ },
264
+ {
265
+ "Id": "Param38",
266
+ "GroupId": "ParamGroup2",
267
+ "Name": "下摆3"
268
+ },
269
+ {
270
+ "Id": "Param39",
271
+ "GroupId": "ParamGroup2",
272
+ "Name": "下摆4"
273
+ },
274
+ {
275
+ "Id": "Param35",
276
+ "GroupId": "ParamGroup2",
277
+ "Name": "背饰"
278
+ },
279
+ {
280
+ "Id": "Param36",
281
+ "GroupId": "ParamGroup2",
282
+ "Name": "背饰1"
283
+ },
284
+ {
285
+ "Id": "Param41",
286
+ "GroupId": "ParamGroup2",
287
+ "Name": "背饰2"
288
+ },
289
+ {
290
+ "Id": "Param42",
291
+ "GroupId": "ParamGroup2",
292
+ "Name": "背饰2.1"
293
+ },
294
+ {
295
+ "Id": "Param44",
296
+ "GroupId": "ParamGroup2",
297
+ "Name": "装饰带"
298
+ },
299
+ {
300
+ "Id": "Param4",
301
+ "GroupId": "ParamGroup",
302
+ "Name": "尾巴1"
303
+ },
304
+ {
305
+ "Id": "Param10",
306
+ "GroupId": "ParamGroup",
307
+ "Name": "尾巴1.1"
308
+ },
309
+ {
310
+ "Id": "Param5",
311
+ "GroupId": "ParamGroup",
312
+ "Name": "尾巴2"
313
+ },
314
+ {
315
+ "Id": "Param11",
316
+ "GroupId": "ParamGroup",
317
+ "Name": "尾巴2.1"
318
+ },
319
+ {
320
+ "Id": "Param6",
321
+ "GroupId": "ParamGroup",
322
+ "Name": "尾巴3"
323
+ },
324
+ {
325
+ "Id": "Param12",
326
+ "GroupId": "ParamGroup",
327
+ "Name": "尾巴3.1"
328
+ },
329
+ {
330
+ "Id": "Param7",
331
+ "GroupId": "ParamGroup",
332
+ "Name": "尾巴4"
333
+ },
334
+ {
335
+ "Id": "Param13",
336
+ "GroupId": "ParamGroup",
337
+ "Name": "尾巴4.1"
338
+ },
339
+ {
340
+ "Id": "Param8",
341
+ "GroupId": "ParamGroup",
342
+ "Name": "尾巴5"
343
+ },
344
+ {
345
+ "Id": "Param14",
346
+ "GroupId": "ParamGroup",
347
+ "Name": "尾巴5.1"
348
+ },
349
+ {
350
+ "Id": "Param46",
351
+ "GroupId": "ParamGroup",
352
+ "Name": "尾巴摇动1"
353
+ },
354
+ {
355
+ "Id": "Param47",
356
+ "GroupId": "ParamGroup",
357
+ "Name": "尾巴摇动1.1"
358
+ },
359
+ {
360
+ "Id": "ParamEyeRSmile",
361
+ "GroupId": "",
362
+ "Name": "右眼 微笑"
363
+ },
364
+ {
365
+ "Id": "ParamBrowRY",
366
+ "GroupId": "",
367
+ "Name": "右眉 上下"
368
+ },
369
+ {
370
+ "Id": "ParamBrowLX",
371
+ "GroupId": "",
372
+ "Name": "左眉 左右"
373
+ },
374
+ {
375
+ "Id": "ParamBrowRX",
376
+ "GroupId": "",
377
+ "Name": "右眉 左右"
378
+ },
379
+ {
380
+ "Id": "ParamBrowRAngle",
381
+ "GroupId": "",
382
+ "Name": "右眉 角度"
383
+ },
384
+ {
385
+ "Id": "ParamBrowLForm",
386
+ "GroupId": "",
387
+ "Name": "左眉 変形"
388
+ },
389
+ {
390
+ "Id": "ParamBrowRForm",
391
+ "GroupId": "",
392
+ "Name": "右眉 変形"
393
+ },
394
+ {
395
+ "Id": "ParamCheek",
396
+ "GroupId": "",
397
+ "Name": "脸颊泛红"
398
+ }
399
+ ],
400
+ "ParameterGroups": [
401
+ {
402
+ "Id": "ParamGroup4",
403
+ "GroupId": "",
404
+ "Name": "九轴"
405
+ },
406
+ {
407
+ "Id": "ParamGroup5",
408
+ "GroupId": "",
409
+ "Name": "表情"
410
+ },
411
+ {
412
+ "Id": "ParamGroup6",
413
+ "GroupId": "",
414
+ "Name": "开关"
415
+ },
416
+ {
417
+ "Id": "ParamGroup3",
418
+ "GroupId": "",
419
+ "Name": "头发物理"
420
+ },
421
+ {
422
+ "Id": "ParamGroup2",
423
+ "GroupId": "",
424
+ "Name": "衣服物理"
425
+ },
426
+ {
427
+ "Id": "ParamGroup",
428
+ "GroupId": "",
429
+ "Name": "尾巴"
430
+ }
431
+ ],
432
+ "Parts": [
433
+ {
434
+ "Id": "Part",
435
+ "Name": "头发"
436
+ },
437
+ {
438
+ "Id": "Part3",
439
+ "Name": "脸"
440
+ },
441
+ {
442
+ "Id": "Part6",
443
+ "Name": "衣服"
444
+ },
445
+ {
446
+ "Id": "Part8",
447
+ "Name": "后背"
448
+ },
449
+ {
450
+ "Id": "Part9",
451
+ "Name": "尾巴"
452
+ },
453
+ {
454
+ "Id": "Part2",
455
+ "Name": "耳饰"
456
+ },
457
+ {
458
+ "Id": "Part4",
459
+ "Name": "面部"
460
+ },
461
+ {
462
+ "Id": "Part7",
463
+ "Name": "身体"
464
+ },
465
+ {
466
+ "Id": "Part5",
467
+ "Name": "影子"
468
+ }
469
+ ]
470
+ }
Binary file