Compare commits
62 Commits
c97c3f36c5
...
new2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
53a0ee1c6e | ||
|
|
f679644bbb | ||
|
|
541ca0e251 | ||
|
|
7703b0348c | ||
|
|
ad50e11052 | ||
|
|
d5158cde52 | ||
|
|
8176ef098e | ||
|
|
56dcdccca2 | ||
|
|
31a2efee4d | ||
|
|
761d0aa68e | ||
|
|
7766909294 | ||
|
|
71db1c24b0 | ||
|
|
ca38411cc7 | ||
|
|
b149e6517b | ||
|
|
fbb6cc72cc | ||
|
|
4be5252cc4 | ||
|
|
04cea0fbb2 | ||
|
|
0db3404481 | ||
|
|
8c7748436b | ||
|
|
311b8ebb54 | ||
|
|
5d398d0a29 | ||
|
|
9c9cc99e64 | ||
|
|
1bb275607a | ||
|
|
95bf2a4e17 | ||
|
|
3f2989ab55 | ||
|
|
577a62193c | ||
|
|
8f89dd11fa | ||
|
|
c10e24709d | ||
|
|
f92502f4f5 | ||
|
|
fa58f699d9 | ||
|
|
90e8a4a284 | ||
|
|
39de30b9b4 | ||
|
|
8707316032 | ||
|
|
fdcd81c083 | ||
|
|
cd9e7296a1 | ||
|
|
be6d941b90 | ||
|
|
51256a2813 | ||
|
|
0ea0434087 | ||
|
|
1634f6a528 | ||
|
|
c183ae464a | ||
|
|
d140645aab | ||
|
|
c610829661 | ||
|
|
580a5ad131 | ||
|
|
c282adcf3b | ||
|
|
4900911cfc | ||
|
|
45e3e8712b | ||
|
|
f4150bd33c | ||
|
|
707e25e73f | ||
|
|
f53c4293df | ||
|
|
f67f8a4aa0 | ||
|
|
16854ab1b8 | ||
|
|
287989b425 | ||
|
|
63a9f6cba5 | ||
|
|
93dc59a616 | ||
|
|
8c8810bb7e | ||
|
|
7640957325 | ||
|
|
2dc44b2393 | ||
|
|
f2a4926c49 | ||
|
|
5583dca2b6 | ||
|
|
b63572c383 | ||
|
|
923d81c2a0 | ||
|
|
3bbf4a7eb6 |
@@ -56,7 +56,7 @@ description: "Guides users through filling the official software copyright (计
|
||||
- 软件环境(操作系统 / 平台)
|
||||
- 编程语言
|
||||
- 源程序量(行数)
|
||||
- 主要功能(200-300 字)
|
||||
- 主要功能(申请表字段要求 500 字以上,覆盖各功能模块;设计说明书概述章节可用 200-300 字摘要版)
|
||||
- 技术特点(150-250 字,可选)
|
||||
|
||||
**功能模块(ManualModule[])**
|
||||
@@ -72,6 +72,7 @@ description: "Guides users through filling the official software copyright (计
|
||||
3. **设计说明书 / 用户操作手册**:调用 `buildManual` 的章节模板,可选其一:
|
||||
- 设计说明书:引言 / 运行环境 / 功能模块设计 / 数据结构与接口设计 / 安全与异常处理 / 联系方式
|
||||
- 用户操作手册:引言 / 运行环境 / 安装与启动 / 功能操作说明 / 常见问题 / 联系方式
|
||||
4. **填表指引**(用户需要时):见下方"填表指引文档"章节
|
||||
|
||||
### 源程序专项
|
||||
|
||||
@@ -80,10 +81,10 @@ description: "Guides users through filling the official software copyright (计
|
||||
#### 提交要求(来自登记规范)
|
||||
|
||||
- 取前 30 页 + 后 30 页,不足 60 页时全部提交
|
||||
- 每页不少于 50 行有效代码
|
||||
- 每页不少于 50 行有效代码(默认每页 50 行;用户要求更高密度时可调,如 60 行/页,但不得低于 50)
|
||||
- 页眉:左侧标注 `软件全称 版本号`,右侧标注 `第 N 页 共 M 页`
|
||||
- 9.5pt 等宽字体,每行不超过 84 字符(A4 折行限制)
|
||||
- 文件名示例:`软件全称_V1.0_源程序.pdf`
|
||||
- 9.5pt 等宽字体,每行不超过 84 字符(A4 折行限制;按显示宽度计:ASCII 记 1 列,中文/全角记 2 列)
|
||||
- 文件名示例:`软件全称_V1.0_源程序.pdf`;用户需要 docx/PDF 成品时按下方「docx 版本生成」章节产出
|
||||
|
||||
#### 三种生成方式(按用户掌握情况选用)
|
||||
|
||||
@@ -92,11 +93,17 @@ description: "Guides users through filling the official software copyright (计
|
||||
让用户提供源代码文件路径或粘贴代码文本,Skill 直接执行 `paginateCode` 逻辑:
|
||||
|
||||
```text
|
||||
1. 把 \r\n 替换为 \n,\t 替换为 4 空格
|
||||
2. 按每页 50 行切分,得到 N 页
|
||||
3. 若 N > 60:保留前 30 页 + 后 30 页,丢弃中间
|
||||
4. 给每页加上统一页眉
|
||||
5. 用 A4 纸张打印 / 导出 PDF
|
||||
1. 与用户确认源代码根目录范围(只采集约定目录,如 assets/script)
|
||||
2. 排除非源码:.md/.csv 等文档、.d.ts 声明文件、着色器/材质、空文件、
|
||||
构建产物、第三方框架目录(如 extensions/ 下的开源插件框架)
|
||||
3. 清理文件头(前 40 行)的第三方署名与版权行:他人 ID/昵称、QQ 号、
|
||||
第三方框架作者的 @Author/@LastEditors/@Date/@LastEditTime、引擎 Copyright
|
||||
声明;生成后必须 grep 复验清理干净
|
||||
4. 入口文件(如 Main.ts)优先排序,其余按路径字母序;文件间加注释分隔行
|
||||
5. 把 \r\n 替换为 \n,\t 替换为 4 空格
|
||||
6. 按每页 N 行切分(N ≥ 50,默认 50,可按用户要求调整),得到总页数
|
||||
7. 若总页数 > 60:保留前 30 页 + 后 30 页,丢弃中间
|
||||
8. 给每页加上统一页眉;建议沉淀为可重跑脚本(代码变更后重新生成)
|
||||
```
|
||||
|
||||
输出格式示例:
|
||||
@@ -148,7 +155,7 @@ description: "Guides users through filling the official software copyright (计
|
||||
| 3 | 注释行占比 > 40% | info | 建议补充有效代码 |
|
||||
| 4 | 含第三方 License / Copyright 声明且与著作权人不一致 | error | 必须删除或修改 |
|
||||
| 5 | 实际行数与速查表"源程序量"相差 > 10% | warn | 同步修改申请表 |
|
||||
| 6 | 单行字符数 > 84 | warn | 折行换段 |
|
||||
| 6 | 单行显示宽度 > 84 列(中文记 2 列) | warn | 折行换段,续行缩进 4 空格;生成 docx 时必须主动折行,勿依赖 Word 自动换行 |
|
||||
| 7 | 含与著作权人无关的手机号 / 邮箱 | info | 脱敏后提交 |
|
||||
| 8 | 混入 package-lock.json / node_modules / .min.js 等构建产物 | warn | 移除后再上传 |
|
||||
|
||||
@@ -158,6 +165,24 @@ description: "Guides users through filling the official software copyright (计
|
||||
- ⚠️ **建议修改**:无 error,有 warn,列出具体项
|
||||
- ❌ **必须修改**:有 error,阻断提交
|
||||
|
||||
#### docx 版本生成(用户需要成品文件时)
|
||||
|
||||
用 Node + `docx` 库(v9)把 txt/md 排成规范 docx,关键实践:
|
||||
|
||||
- **页眉用 Word 域自动页码**:`PageNumber.CURRENT` / `PageNumber.TOTAL_PAGES`,
|
||||
配右对齐 Tab 位;勿在正文硬编码"共 M 页"——折行增多页数时域自动跟随
|
||||
- **精确分页**:每 N 行代码一页,下一页首段用 `pageBreakBefore: true`,
|
||||
保证"每页行数"与规范声明一致
|
||||
- **主动折行**:超 84 显示列的行在生成时折断(续行缩进 4 空格);
|
||||
依赖 Word 自动换行会导致每页物理行数失控、分页错位
|
||||
- **排版**:A4;边距上下 1.27cm、左右 1.5cm;代码 9.5pt Consolas
|
||||
(中文回退宋体);行距适度压缩(如 230/240)确保每页行数放得下
|
||||
- **依赖隔离**:在材料目录建独立 `package.json` 再 `npm install docx`;
|
||||
中文目录名会导致 `npm init -y` 失败(Invalid name),需手写合法 name;
|
||||
不隔离会污染用户项目根依赖(装错后必须还原 package.json 并删除误装的包)
|
||||
- **文件占用**:写入报 `EBUSY` 说明用户正在 Word 中打开该 docx,
|
||||
提示关闭后重试,勿反复盲试
|
||||
|
||||
## 设计说明书与用户操作手册(详细)
|
||||
|
||||
Skill 必须能根据"功能模块"列表生成完整的说明书文档,章节结构与项目代码 `buildManual` 一致:
|
||||
@@ -256,6 +281,32 @@ Skill 必须能根据"功能模块"列表生成完整的说明书文档,章节
|
||||
|
||||
输出"通过 / 建议修改 / 必须修改"三档结论,列出问题清单。
|
||||
|
||||
## 填表指引文档
|
||||
|
||||
用户要求生成"填表指引/调表指引"时,按在线申请表「软件开发信息」的 12 个系统字段
|
||||
逐项输出(字段名以中国版权保护中心系统实际为准),每项含
|
||||
「可直接粘贴的填写内容 + 填写要点」:
|
||||
|
||||
1. 开发的硬件环境(开发机配置,按实际开发电脑填写)
|
||||
2. 运行的硬件环境(目标设备,要求写低一些以扩大兼容范围)
|
||||
3. 开发该软件的操作系统
|
||||
4. 软件开发环境 / 开发工具(引擎编辑器、IDE、平台调试工具等,列主要项即可)
|
||||
5. 该软件的运行平台 / 操作系统
|
||||
6. 软件运行支撑环境 / 支持软件(如宿主 App、云服务)
|
||||
7. 编程语言(主语言;勿把 JSON/配置格式算作语言)
|
||||
8. 源程序量(与提交材料逻辑一致)
|
||||
9. 开发目的(如实填写,不夸大商业目标)
|
||||
10. 面向领域 / 行业(按系统下拉选项就近选择,游戏软件归文化娱乐类)
|
||||
11. 软件的主要功能(500 字以上,系统要求;覆盖各功能模块,游戏术语、书面语)
|
||||
12. 软件的技术特点(150-250 字)
|
||||
|
||||
**易错提示(必须写进指引)**:第 1/2 项(开发 vs 运行硬件)、第 3/5 项(开发 vs
|
||||
运行操作系统)是两对容易填反的字段,审查员会核对逻辑一致性。
|
||||
|
||||
指引还应包含:办理入口与实名认证、在线填报步骤、鉴别材料上传要求与 PDF 命名规范、
|
||||
提交前自检清单(checkbox)、常见退回原因与规避(已处理项标 ✅)、时间线参考、
|
||||
材料重新生成命令。
|
||||
|
||||
## 关键规则
|
||||
|
||||
- 所有对外材料一律使用「本软件」指代软件本身,不出现具体产品名
|
||||
|
||||
@@ -1781,7 +1781,7 @@
|
||||
"propertyPath": [
|
||||
"_active"
|
||||
],
|
||||
"value": true
|
||||
"value": false
|
||||
},
|
||||
{
|
||||
"__type__": "cc.TargetInfo",
|
||||
@@ -1800,7 +1800,7 @@
|
||||
"value": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": -30,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
}
|
||||
},
|
||||
@@ -1821,7 +1821,7 @@
|
||||
"value": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 150,
|
||||
"height": 95.5
|
||||
"height": 35.5
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -1838,7 +1838,7 @@
|
||||
"propertyPath": [
|
||||
"_active"
|
||||
],
|
||||
"value": true
|
||||
"value": false
|
||||
},
|
||||
{
|
||||
"__type__": "cc.TargetInfo",
|
||||
@@ -1869,7 +1869,7 @@
|
||||
"propertyPath": [
|
||||
"_top"
|
||||
],
|
||||
"value": -8.2625
|
||||
"value": 6.737500000000001
|
||||
},
|
||||
{
|
||||
"__type__": "cc.TargetInfo",
|
||||
@@ -1885,7 +1885,7 @@
|
||||
"propertyPath": [
|
||||
"_bottom"
|
||||
],
|
||||
"value": -7.237500000000001
|
||||
"value": 7.762499999999999
|
||||
},
|
||||
{
|
||||
"__type__": "CCPropertyOverrideInfo",
|
||||
@@ -1933,7 +1933,7 @@
|
||||
"value": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 2.75,
|
||||
"y": 17.75,
|
||||
"z": 0
|
||||
}
|
||||
},
|
||||
@@ -3659,7 +3659,7 @@
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": -30,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
@@ -3766,7 +3766,7 @@
|
||||
"__id__": 202
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_active": false,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 208
|
||||
@@ -4202,7 +4202,7 @@
|
||||
"__id__": 220
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_active": false,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 226
|
||||
@@ -4217,7 +4217,7 @@
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 2.75,
|
||||
"y": 17.75,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
@@ -4635,7 +4635,7 @@
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 150,
|
||||
"height": 95.5
|
||||
"height": 35.5
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
@@ -4664,8 +4664,8 @@
|
||||
"_target": null,
|
||||
"_left": 0,
|
||||
"_right": 0,
|
||||
"_top": -8.2625,
|
||||
"_bottom": -7.237500000000001,
|
||||
"_top": 21.7375,
|
||||
"_bottom": 22.7625,
|
||||
"_horizontalCenter": 0,
|
||||
"_verticalCenter": 0,
|
||||
"_isAbsLeft": true,
|
||||
|
||||
@@ -812,8 +812,8 @@
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 150,
|
||||
"height": 150
|
||||
"width": 80,
|
||||
"height": 100
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
@@ -921,12 +921,12 @@
|
||||
"_offset": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 75
|
||||
"y": 50
|
||||
},
|
||||
"_size": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 150,
|
||||
"height": 150
|
||||
"width": 80,
|
||||
"height": 100
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
|
||||
@@ -809,8 +809,8 @@
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 150,
|
||||
"height": 150
|
||||
"width": 80,
|
||||
"height": 100
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
@@ -918,12 +918,12 @@
|
||||
"_offset": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 75
|
||||
"y": 50
|
||||
},
|
||||
"_size": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 150,
|
||||
"height": 150
|
||||
"width": 60,
|
||||
"height": 100
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
|
||||
@@ -812,8 +812,8 @@
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 150,
|
||||
"height": 150
|
||||
"width": 80,
|
||||
"height": 100
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
@@ -921,12 +921,12 @@
|
||||
"_offset": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 75
|
||||
"y": 50
|
||||
},
|
||||
"_size": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 150,
|
||||
"height": 150
|
||||
"width": 8,
|
||||
"height": 100
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
|
||||
@@ -809,8 +809,8 @@
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 150,
|
||||
"height": 150
|
||||
"width": 80,
|
||||
"height": 100
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
@@ -918,12 +918,12 @@
|
||||
"_offset": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 75
|
||||
"y": 50
|
||||
},
|
||||
"_size": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 150,
|
||||
"height": 150
|
||||
"width": 80,
|
||||
"height": 100
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
|
||||
@@ -809,8 +809,8 @@
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 150,
|
||||
"height": 150
|
||||
"width": 80,
|
||||
"height": 100
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
@@ -918,12 +918,12 @@
|
||||
"_offset": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 75
|
||||
"y": 50
|
||||
},
|
||||
"_size": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 150,
|
||||
"height": 150
|
||||
"width": 80,
|
||||
"height": 100
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
|
||||
@@ -11,29 +11,32 @@
|
||||
"speed": 1,
|
||||
"wrapMode": 1,
|
||||
"enableTrsBlending": false,
|
||||
"_duration": 0.6,
|
||||
"_duration": 0.65,
|
||||
"_hash": 500763545,
|
||||
"_tracks": [
|
||||
{
|
||||
"__id__": 1
|
||||
},
|
||||
{
|
||||
"__id__": 7
|
||||
}
|
||||
],
|
||||
"_exoticAnimation": null,
|
||||
"_events": [
|
||||
{
|
||||
"frame": 0.2,
|
||||
"frame": 0.3,
|
||||
"func": "",
|
||||
"params": []
|
||||
},
|
||||
{
|
||||
"frame": 0.2,
|
||||
"frame": 0.3,
|
||||
"func": "atk",
|
||||
"params": []
|
||||
}
|
||||
],
|
||||
"_embeddedPlayers": [],
|
||||
"_additiveSettings": {
|
||||
"__id__": 7
|
||||
"__id__": 13
|
||||
},
|
||||
"_auxiliaryCurveEntries": []
|
||||
},
|
||||
@@ -90,7 +93,8 @@
|
||||
0.4,
|
||||
0.45,
|
||||
0.5,
|
||||
0.55
|
||||
0.55,
|
||||
0.6
|
||||
],
|
||||
"_values": [
|
||||
{
|
||||
@@ -140,7 +144,98 @@
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@5d13a",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
null
|
||||
]
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.ObjectTrack",
|
||||
"_binding": {
|
||||
"__type__": "cc.animation.TrackBinding",
|
||||
"path": {
|
||||
"__id__": 8
|
||||
},
|
||||
"proxy": null
|
||||
},
|
||||
"_channel": {
|
||||
"__id__": 11
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.TrackPath",
|
||||
"_paths": [
|
||||
{
|
||||
"__id__": 9
|
||||
},
|
||||
{
|
||||
"__id__": 10
|
||||
},
|
||||
"spriteFrame"
|
||||
]
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.HierarchyPath",
|
||||
"path": "slash-horizontal1"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.ComponentPath",
|
||||
"component": "cc.Sprite"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.Channel",
|
||||
"_curve": {
|
||||
"__id__": 12
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.ObjectCurve",
|
||||
"_times": [
|
||||
0.15,
|
||||
0.2,
|
||||
0.25,
|
||||
0.3,
|
||||
0.35,
|
||||
0.4,
|
||||
0.45,
|
||||
0.5,
|
||||
0.55,
|
||||
0.6
|
||||
],
|
||||
"_values": [
|
||||
null,
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@d5755",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@d5755",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@34609",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@35b2b",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@0e377",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@cb59a",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@5adf0",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@6c6f6",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
null
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
@@ -11,29 +11,32 @@
|
||||
"speed": 1,
|
||||
"wrapMode": 1,
|
||||
"enableTrsBlending": false,
|
||||
"_duration": 0.4583333333333333,
|
||||
"_duration": 0.5833333333333334,
|
||||
"_hash": 500763545,
|
||||
"_tracks": [
|
||||
{
|
||||
"__id__": 1
|
||||
},
|
||||
{
|
||||
"__id__": 7
|
||||
}
|
||||
],
|
||||
"_exoticAnimation": null,
|
||||
"_events": [
|
||||
{
|
||||
"frame": 0.08333333333333333,
|
||||
"frame": 0.16666666666666666,
|
||||
"func": "",
|
||||
"params": []
|
||||
},
|
||||
{
|
||||
"frame": 0.08333333333333333,
|
||||
"frame": 0.16666666666666666,
|
||||
"func": "atk",
|
||||
"params": []
|
||||
}
|
||||
],
|
||||
"_embeddedPlayers": [],
|
||||
"_additiveSettings": {
|
||||
"__id__": 7
|
||||
"__id__": 13
|
||||
},
|
||||
"_auxiliaryCurveEntries": []
|
||||
},
|
||||
@@ -89,7 +92,8 @@
|
||||
0.2916666666666667,
|
||||
0.3333333333333333,
|
||||
0.375,
|
||||
0.4166666666666667
|
||||
0.4166666666666667,
|
||||
0.4583333333333333
|
||||
],
|
||||
"_values": [
|
||||
{
|
||||
@@ -135,7 +139,95 @@
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@21b99",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
null
|
||||
]
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.ObjectTrack",
|
||||
"_binding": {
|
||||
"__type__": "cc.animation.TrackBinding",
|
||||
"path": {
|
||||
"__id__": 8
|
||||
},
|
||||
"proxy": null
|
||||
},
|
||||
"_channel": {
|
||||
"__id__": 11
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.TrackPath",
|
||||
"_paths": [
|
||||
{
|
||||
"__id__": 9
|
||||
},
|
||||
{
|
||||
"__id__": 10
|
||||
},
|
||||
"spriteFrame"
|
||||
]
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.HierarchyPath",
|
||||
"path": "slash-horizontal1"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.ComponentPath",
|
||||
"component": "cc.Sprite"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.Channel",
|
||||
"_curve": {
|
||||
"__id__": 12
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.ObjectCurve",
|
||||
"_times": [
|
||||
0,
|
||||
0.20833333333333334,
|
||||
0.25,
|
||||
0.2916666666666667,
|
||||
0.3333333333333333,
|
||||
0.375,
|
||||
0.4166666666666667,
|
||||
0.4583333333333333,
|
||||
0.5,
|
||||
0.5416666666666666
|
||||
],
|
||||
"_values": [
|
||||
null,
|
||||
null,
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@d5755",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@34609",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@35b2b",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@0e377",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@cb59a",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@5adf0",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@6c6f6",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
null
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
@@ -11,29 +11,32 @@
|
||||
"speed": 1,
|
||||
"wrapMode": 1,
|
||||
"enableTrsBlending": false,
|
||||
"_duration": 0.4166666666666667,
|
||||
"_duration": 0.7083333333333334,
|
||||
"_hash": 500763545,
|
||||
"_tracks": [
|
||||
{
|
||||
"__id__": 1
|
||||
},
|
||||
{
|
||||
"__id__": 7
|
||||
}
|
||||
],
|
||||
"_exoticAnimation": null,
|
||||
"_events": [
|
||||
{
|
||||
"frame": 0.08333333333333333,
|
||||
"frame": 0.16666666666666666,
|
||||
"func": "",
|
||||
"params": []
|
||||
},
|
||||
{
|
||||
"frame": 0.08333333333333333,
|
||||
"frame": 0.16666666666666666,
|
||||
"func": "atk",
|
||||
"params": []
|
||||
}
|
||||
],
|
||||
"_embeddedPlayers": [],
|
||||
"_additiveSettings": {
|
||||
"__id__": 7
|
||||
"__id__": 13
|
||||
},
|
||||
"_auxiliaryCurveEntries": []
|
||||
},
|
||||
@@ -88,7 +91,8 @@
|
||||
0.25,
|
||||
0.2916666666666667,
|
||||
0.3333333333333333,
|
||||
0.375
|
||||
0.375,
|
||||
0.4166666666666667
|
||||
],
|
||||
"_values": [
|
||||
{
|
||||
@@ -130,7 +134,115 @@
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@daa57",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
null
|
||||
]
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.ObjectTrack",
|
||||
"_binding": {
|
||||
"__type__": "cc.animation.TrackBinding",
|
||||
"path": {
|
||||
"__id__": 8
|
||||
},
|
||||
"proxy": null
|
||||
},
|
||||
"_channel": {
|
||||
"__id__": 11
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.TrackPath",
|
||||
"_paths": [
|
||||
{
|
||||
"__id__": 9
|
||||
},
|
||||
{
|
||||
"__id__": 10
|
||||
},
|
||||
"spriteFrame"
|
||||
]
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.HierarchyPath",
|
||||
"path": "fire-slash-horizontal1"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.ComponentPath",
|
||||
"component": "cc.Sprite"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.Channel",
|
||||
"_curve": {
|
||||
"__id__": 12
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.ObjectCurve",
|
||||
"_times": [
|
||||
0,
|
||||
0.16666666666666666,
|
||||
0.20833333333333334,
|
||||
0.25,
|
||||
0.2916666666666667,
|
||||
0.3333333333333333,
|
||||
0.375,
|
||||
0.4166666666666667,
|
||||
0.4583333333333333,
|
||||
0.5,
|
||||
0.5416666666666666,
|
||||
0.5833333333333334,
|
||||
0.625,
|
||||
0.6666666666666666
|
||||
],
|
||||
"_values": [
|
||||
null,
|
||||
null,
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@38937",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@31859",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@33f97",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@0ff1b",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@4953c",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@cb80d",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@d0b5c",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@4ce52",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@90cfe",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@17d94",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@64baf",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
null
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
@@ -11,39 +11,32 @@
|
||||
"speed": 1,
|
||||
"wrapMode": 1,
|
||||
"enableTrsBlending": false,
|
||||
"_duration": 0.625,
|
||||
"_duration": 0.75,
|
||||
"_hash": 500763545,
|
||||
"_tracks": [
|
||||
{
|
||||
"__id__": 1
|
||||
},
|
||||
{
|
||||
"__id__": 7
|
||||
}
|
||||
],
|
||||
"_exoticAnimation": null,
|
||||
"_events": [
|
||||
{
|
||||
"frame": 0.20833333333333334,
|
||||
"frame": 0.375,
|
||||
"func": "",
|
||||
"params": []
|
||||
},
|
||||
{
|
||||
"frame": 0.20833333333333334,
|
||||
"func": "atk",
|
||||
"params": []
|
||||
},
|
||||
{
|
||||
"frame": 0.4583333333333333,
|
||||
"func": "",
|
||||
"params": []
|
||||
},
|
||||
{
|
||||
"frame": 0.4583333333333333,
|
||||
"frame": 0.375,
|
||||
"func": "atk",
|
||||
"params": []
|
||||
}
|
||||
],
|
||||
"_embeddedPlayers": [],
|
||||
"_additiveSettings": {
|
||||
"__id__": 7
|
||||
"__id__": 13
|
||||
},
|
||||
"_auxiliaryCurveEntries": []
|
||||
},
|
||||
@@ -103,7 +96,8 @@
|
||||
0.4583333333333333,
|
||||
0.5,
|
||||
0.5416666666666666,
|
||||
0.5833333333333334
|
||||
0.5833333333333334,
|
||||
0.625
|
||||
],
|
||||
"_values": [
|
||||
{
|
||||
@@ -165,7 +159,115 @@
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@1b470",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
null
|
||||
]
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.ObjectTrack",
|
||||
"_binding": {
|
||||
"__type__": "cc.animation.TrackBinding",
|
||||
"path": {
|
||||
"__id__": 8
|
||||
},
|
||||
"proxy": null
|
||||
},
|
||||
"_channel": {
|
||||
"__id__": 11
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.TrackPath",
|
||||
"_paths": [
|
||||
{
|
||||
"__id__": 9
|
||||
},
|
||||
{
|
||||
"__id__": 10
|
||||
},
|
||||
"spriteFrame"
|
||||
]
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.HierarchyPath",
|
||||
"path": "electric-slash-horizontal1"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.ComponentPath",
|
||||
"component": "cc.Sprite"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.Channel",
|
||||
"_curve": {
|
||||
"__id__": 12
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.ObjectCurve",
|
||||
"_times": [
|
||||
0,
|
||||
0.20833333333333334,
|
||||
0.25,
|
||||
0.2916666666666667,
|
||||
0.3333333333333333,
|
||||
0.375,
|
||||
0.4166666666666667,
|
||||
0.4583333333333333,
|
||||
0.5,
|
||||
0.5416666666666666,
|
||||
0.5833333333333334,
|
||||
0.625,
|
||||
0.6666666666666666,
|
||||
0.7083333333333334
|
||||
],
|
||||
"_values": [
|
||||
null,
|
||||
null,
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@f6490",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@6c874",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@5b5e5",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@5cc03",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@161b8",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@01fef",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@70d19",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@34499",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@9ec10",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@9e7f6",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@99406",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
null
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
@@ -89,30 +89,33 @@
|
||||
],
|
||||
"_values": [
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@5cbcb",
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@55402",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@3981b",
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@2ac32",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@1837a",
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@a38c9",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@341ea",
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@005f7",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@494bc",
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@d585f",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@494bc",
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@740a0",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
null
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@6b34e",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
921
assets/resources/game/skill/anm/atk/fb-8.anim
Normal file
@@ -0,0 +1,921 @@
|
||||
[
|
||||
{
|
||||
"__type__": "cc.AnimationClip",
|
||||
"_name": "fb-8",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {
|
||||
"embeddedPlayerGroups": []
|
||||
},
|
||||
"_native": "",
|
||||
"sample": 20,
|
||||
"speed": 1,
|
||||
"wrapMode": 1,
|
||||
"enableTrsBlending": false,
|
||||
"_duration": 1.4,
|
||||
"_hash": 500763545,
|
||||
"_tracks": [
|
||||
{
|
||||
"__id__": 1
|
||||
},
|
||||
{
|
||||
"__id__": 7
|
||||
},
|
||||
{
|
||||
"__id__": 13
|
||||
},
|
||||
{
|
||||
"__id__": 24
|
||||
}
|
||||
],
|
||||
"_exoticAnimation": null,
|
||||
"_events": [
|
||||
{
|
||||
"frame": 0,
|
||||
"func": "",
|
||||
"params": []
|
||||
},
|
||||
{
|
||||
"frame": 0,
|
||||
"func": "atk",
|
||||
"params": []
|
||||
},
|
||||
{
|
||||
"frame": 0.6,
|
||||
"func": "",
|
||||
"params": []
|
||||
},
|
||||
{
|
||||
"frame": 0.6,
|
||||
"func": "atk",
|
||||
"params": []
|
||||
},
|
||||
{
|
||||
"frame": 1.2,
|
||||
"func": "",
|
||||
"params": []
|
||||
},
|
||||
{
|
||||
"frame": 1.2,
|
||||
"func": "atk",
|
||||
"params": []
|
||||
}
|
||||
],
|
||||
"_embeddedPlayers": [],
|
||||
"_additiveSettings": {
|
||||
"__id__": 35
|
||||
},
|
||||
"_auxiliaryCurveEntries": []
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.ObjectTrack",
|
||||
"_binding": {
|
||||
"__type__": "cc.animation.TrackBinding",
|
||||
"path": {
|
||||
"__id__": 2
|
||||
},
|
||||
"proxy": null
|
||||
},
|
||||
"_channel": {
|
||||
"__id__": 5
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.TrackPath",
|
||||
"_paths": [
|
||||
{
|
||||
"__id__": 3
|
||||
},
|
||||
{
|
||||
"__id__": 4
|
||||
},
|
||||
"spriteFrame"
|
||||
]
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.HierarchyPath",
|
||||
"path": "Node"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.ComponentPath",
|
||||
"component": "cc.Sprite"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.Channel",
|
||||
"_curve": {
|
||||
"__id__": 6
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.ObjectCurve",
|
||||
"_times": [
|
||||
0,
|
||||
0.05,
|
||||
0.1,
|
||||
0.15,
|
||||
0.2,
|
||||
0.25,
|
||||
0.3,
|
||||
0.35,
|
||||
0.4,
|
||||
0.45,
|
||||
0.5,
|
||||
0.55,
|
||||
0.6,
|
||||
0.65,
|
||||
0.7,
|
||||
0.75,
|
||||
0.8,
|
||||
0.85,
|
||||
0.9,
|
||||
0.95,
|
||||
1,
|
||||
1.05,
|
||||
1.1,
|
||||
1.15,
|
||||
1.2,
|
||||
1.25,
|
||||
1.3,
|
||||
1.35
|
||||
],
|
||||
"_values": [
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@55402",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@2ac32",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@a38c9",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@005f7",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@d585f",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@740a0",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@6b34e",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@55402",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@2ac32",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@a38c9",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@005f7",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@d585f",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@740a0",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@6b34e",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@55402",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@2ac32",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@a38c9",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@005f7",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@d585f",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@740a0",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@6b34e",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@55402",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@2ac32",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@a38c9",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@005f7",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@d585f",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@740a0",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@6b34e",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.ObjectTrack",
|
||||
"_binding": {
|
||||
"__type__": "cc.animation.TrackBinding",
|
||||
"path": {
|
||||
"__id__": 8
|
||||
},
|
||||
"proxy": null
|
||||
},
|
||||
"_channel": {
|
||||
"__id__": 11
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.TrackPath",
|
||||
"_paths": [
|
||||
{
|
||||
"__id__": 9
|
||||
},
|
||||
{
|
||||
"__id__": 10
|
||||
},
|
||||
"spriteFrame"
|
||||
]
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.HierarchyPath",
|
||||
"path": "Node-001"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.ComponentPath",
|
||||
"component": "cc.Sprite"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.Channel",
|
||||
"_curve": {
|
||||
"__id__": 12
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.ObjectCurve",
|
||||
"_times": [
|
||||
0,
|
||||
0.05,
|
||||
0.1,
|
||||
0.15,
|
||||
0.2,
|
||||
0.25,
|
||||
0.3,
|
||||
0.35,
|
||||
0.4,
|
||||
0.45,
|
||||
0.5,
|
||||
0.55,
|
||||
0.6,
|
||||
0.65,
|
||||
0.7,
|
||||
0.75,
|
||||
0.8,
|
||||
0.85,
|
||||
0.9,
|
||||
0.95,
|
||||
1,
|
||||
1.05,
|
||||
1.1,
|
||||
1.15,
|
||||
1.2,
|
||||
1.25,
|
||||
1.3,
|
||||
1.35
|
||||
],
|
||||
"_values": [
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@55402",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@2ac32",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@a38c9",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@005f7",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@d585f",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@740a0",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@6b34e",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@55402",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@2ac32",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@a38c9",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@005f7",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@d585f",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@740a0",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@6b34e",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@55402",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@2ac32",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@a38c9",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@005f7",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@d585f",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@740a0",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@6b34e",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@55402",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@2ac32",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@a38c9",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@005f7",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@d585f",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@740a0",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@6b34e",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.VectorTrack",
|
||||
"_binding": {
|
||||
"__type__": "cc.animation.TrackBinding",
|
||||
"path": {
|
||||
"__id__": 14
|
||||
},
|
||||
"proxy": null
|
||||
},
|
||||
"_channels": [
|
||||
{
|
||||
"__id__": 16
|
||||
},
|
||||
{
|
||||
"__id__": 18
|
||||
},
|
||||
{
|
||||
"__id__": 20
|
||||
},
|
||||
{
|
||||
"__id__": 22
|
||||
}
|
||||
],
|
||||
"_nComponents": 3
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.TrackPath",
|
||||
"_paths": [
|
||||
{
|
||||
"__id__": 15
|
||||
},
|
||||
"position"
|
||||
]
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.HierarchyPath",
|
||||
"path": "Node"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.Channel",
|
||||
"_curve": {
|
||||
"__id__": 17
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.RealCurve",
|
||||
"_times": [
|
||||
0,
|
||||
0.65,
|
||||
1.35
|
||||
],
|
||||
"_values": [
|
||||
{
|
||||
"__type__": "cc.RealKeyframeValue",
|
||||
"interpolationMode": 0,
|
||||
"tangentWeightMode": 0,
|
||||
"value": -70,
|
||||
"rightTangent": 0,
|
||||
"rightTangentWeight": 1,
|
||||
"leftTangent": 0,
|
||||
"leftTangentWeight": 1,
|
||||
"easingMethod": 0,
|
||||
"__editorExtras__": {
|
||||
"broken": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.RealKeyframeValue",
|
||||
"interpolationMode": 0,
|
||||
"tangentWeightMode": 0,
|
||||
"value": 70,
|
||||
"rightTangent": 0,
|
||||
"rightTangentWeight": 1,
|
||||
"leftTangent": 0,
|
||||
"leftTangentWeight": 1,
|
||||
"easingMethod": 0,
|
||||
"__editorExtras__": {
|
||||
"broken": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.RealKeyframeValue",
|
||||
"interpolationMode": 0,
|
||||
"tangentWeightMode": 0,
|
||||
"value": -70,
|
||||
"rightTangent": 0,
|
||||
"rightTangentWeight": 1,
|
||||
"leftTangent": 0,
|
||||
"leftTangentWeight": 1,
|
||||
"easingMethod": 0,
|
||||
"__editorExtras__": {
|
||||
"broken": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"preExtrapolation": 1,
|
||||
"postExtrapolation": 1
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.Channel",
|
||||
"_curve": {
|
||||
"__id__": 19
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.RealCurve",
|
||||
"_times": [
|
||||
0,
|
||||
0.3,
|
||||
0.65,
|
||||
1,
|
||||
1.35
|
||||
],
|
||||
"_values": [
|
||||
{
|
||||
"__type__": "cc.RealKeyframeValue",
|
||||
"interpolationMode": 0,
|
||||
"tangentWeightMode": 0,
|
||||
"value": -60,
|
||||
"rightTangent": 0,
|
||||
"rightTangentWeight": 1,
|
||||
"leftTangent": 0,
|
||||
"leftTangentWeight": 1,
|
||||
"easingMethod": 0,
|
||||
"__editorExtras__": {
|
||||
"broken": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.RealKeyframeValue",
|
||||
"interpolationMode": 0,
|
||||
"tangentWeightMode": 0,
|
||||
"value": -70,
|
||||
"rightTangent": 0,
|
||||
"rightTangentWeight": 1,
|
||||
"leftTangent": 0,
|
||||
"leftTangentWeight": 1,
|
||||
"easingMethod": 0,
|
||||
"__editorExtras__": {
|
||||
"broken": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.RealKeyframeValue",
|
||||
"interpolationMode": 0,
|
||||
"tangentWeightMode": 0,
|
||||
"value": -60,
|
||||
"rightTangent": 0,
|
||||
"rightTangentWeight": 1,
|
||||
"leftTangent": 0,
|
||||
"leftTangentWeight": 1,
|
||||
"easingMethod": 0,
|
||||
"__editorExtras__": {
|
||||
"broken": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.RealKeyframeValue",
|
||||
"interpolationMode": 0,
|
||||
"tangentWeightMode": 0,
|
||||
"value": -50,
|
||||
"rightTangent": 0,
|
||||
"rightTangentWeight": 1,
|
||||
"leftTangent": 0,
|
||||
"leftTangentWeight": 1,
|
||||
"easingMethod": 0,
|
||||
"__editorExtras__": {
|
||||
"broken": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.RealKeyframeValue",
|
||||
"interpolationMode": 0,
|
||||
"tangentWeightMode": 0,
|
||||
"value": -60,
|
||||
"rightTangent": 0,
|
||||
"rightTangentWeight": 1,
|
||||
"leftTangent": 0,
|
||||
"leftTangentWeight": 1,
|
||||
"easingMethod": 0,
|
||||
"__editorExtras__": {
|
||||
"broken": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"preExtrapolation": 1,
|
||||
"postExtrapolation": 1
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.Channel",
|
||||
"_curve": {
|
||||
"__id__": 21
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.RealCurve",
|
||||
"_times": [],
|
||||
"_values": [],
|
||||
"preExtrapolation": 1,
|
||||
"postExtrapolation": 1
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.Channel",
|
||||
"_curve": {
|
||||
"__id__": 23
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.RealCurve",
|
||||
"_times": [],
|
||||
"_values": [],
|
||||
"preExtrapolation": 1,
|
||||
"postExtrapolation": 1
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.VectorTrack",
|
||||
"_binding": {
|
||||
"__type__": "cc.animation.TrackBinding",
|
||||
"path": {
|
||||
"__id__": 25
|
||||
},
|
||||
"proxy": null
|
||||
},
|
||||
"_channels": [
|
||||
{
|
||||
"__id__": 27
|
||||
},
|
||||
{
|
||||
"__id__": 29
|
||||
},
|
||||
{
|
||||
"__id__": 31
|
||||
},
|
||||
{
|
||||
"__id__": 33
|
||||
}
|
||||
],
|
||||
"_nComponents": 3
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.TrackPath",
|
||||
"_paths": [
|
||||
{
|
||||
"__id__": 26
|
||||
},
|
||||
"position"
|
||||
]
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.HierarchyPath",
|
||||
"path": "Node-001"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.Channel",
|
||||
"_curve": {
|
||||
"__id__": 28
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.RealCurve",
|
||||
"_times": [
|
||||
0,
|
||||
0.65,
|
||||
1.35
|
||||
],
|
||||
"_values": [
|
||||
{
|
||||
"__type__": "cc.RealKeyframeValue",
|
||||
"interpolationMode": 0,
|
||||
"tangentWeightMode": 0,
|
||||
"value": 70,
|
||||
"rightTangent": 0,
|
||||
"rightTangentWeight": 1,
|
||||
"leftTangent": 0,
|
||||
"leftTangentWeight": 1,
|
||||
"easingMethod": 0,
|
||||
"__editorExtras__": {
|
||||
"broken": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.RealKeyframeValue",
|
||||
"interpolationMode": 0,
|
||||
"tangentWeightMode": 0,
|
||||
"value": -70,
|
||||
"rightTangent": 0,
|
||||
"rightTangentWeight": 1,
|
||||
"leftTangent": 0,
|
||||
"leftTangentWeight": 1,
|
||||
"easingMethod": 0,
|
||||
"__editorExtras__": {
|
||||
"broken": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.RealKeyframeValue",
|
||||
"interpolationMode": 0,
|
||||
"tangentWeightMode": 0,
|
||||
"value": 70,
|
||||
"rightTangent": 0,
|
||||
"rightTangentWeight": 1,
|
||||
"leftTangent": 0,
|
||||
"leftTangentWeight": 1,
|
||||
"easingMethod": 0,
|
||||
"__editorExtras__": {
|
||||
"broken": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"preExtrapolation": 1,
|
||||
"postExtrapolation": 1
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.Channel",
|
||||
"_curve": {
|
||||
"__id__": 30
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.RealCurve",
|
||||
"_times": [
|
||||
0,
|
||||
0.3,
|
||||
0.65,
|
||||
1,
|
||||
1.35
|
||||
],
|
||||
"_values": [
|
||||
{
|
||||
"__type__": "cc.RealKeyframeValue",
|
||||
"interpolationMode": 0,
|
||||
"tangentWeightMode": 0,
|
||||
"value": -60,
|
||||
"rightTangent": 0,
|
||||
"rightTangentWeight": 1,
|
||||
"leftTangent": 0,
|
||||
"leftTangentWeight": 1,
|
||||
"easingMethod": 0,
|
||||
"__editorExtras__": {
|
||||
"broken": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.RealKeyframeValue",
|
||||
"interpolationMode": 0,
|
||||
"tangentWeightMode": 0,
|
||||
"value": -50,
|
||||
"rightTangent": 0,
|
||||
"rightTangentWeight": 1,
|
||||
"leftTangent": 0,
|
||||
"leftTangentWeight": 1,
|
||||
"easingMethod": 0,
|
||||
"__editorExtras__": {
|
||||
"broken": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.RealKeyframeValue",
|
||||
"interpolationMode": 0,
|
||||
"tangentWeightMode": 0,
|
||||
"value": -60,
|
||||
"rightTangent": 0,
|
||||
"rightTangentWeight": 1,
|
||||
"leftTangent": 0,
|
||||
"leftTangentWeight": 1,
|
||||
"easingMethod": 0,
|
||||
"__editorExtras__": {
|
||||
"broken": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.RealKeyframeValue",
|
||||
"interpolationMode": 0,
|
||||
"tangentWeightMode": 0,
|
||||
"value": -70,
|
||||
"rightTangent": 0,
|
||||
"rightTangentWeight": 1,
|
||||
"leftTangent": 0,
|
||||
"leftTangentWeight": 1,
|
||||
"easingMethod": 0,
|
||||
"__editorExtras__": {
|
||||
"broken": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.RealKeyframeValue",
|
||||
"interpolationMode": 0,
|
||||
"tangentWeightMode": 0,
|
||||
"value": -60,
|
||||
"rightTangent": 0,
|
||||
"rightTangentWeight": 1,
|
||||
"leftTangent": 0,
|
||||
"leftTangentWeight": 1,
|
||||
"easingMethod": 0,
|
||||
"__editorExtras__": {
|
||||
"broken": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"preExtrapolation": 1,
|
||||
"postExtrapolation": 1
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.Channel",
|
||||
"_curve": {
|
||||
"__id__": 32
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.RealCurve",
|
||||
"_times": [
|
||||
0,
|
||||
0.65,
|
||||
1.35
|
||||
],
|
||||
"_values": [
|
||||
{
|
||||
"__type__": "cc.RealKeyframeValue",
|
||||
"interpolationMode": 0,
|
||||
"tangentWeightMode": 0,
|
||||
"value": 0,
|
||||
"rightTangent": 0,
|
||||
"rightTangentWeight": 1,
|
||||
"leftTangent": 0,
|
||||
"leftTangentWeight": 1,
|
||||
"easingMethod": 0,
|
||||
"__editorExtras__": {
|
||||
"broken": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.RealKeyframeValue",
|
||||
"interpolationMode": 0,
|
||||
"tangentWeightMode": 0,
|
||||
"value": 0,
|
||||
"rightTangent": 0,
|
||||
"rightTangentWeight": 1,
|
||||
"leftTangent": 0,
|
||||
"leftTangentWeight": 1,
|
||||
"easingMethod": 0,
|
||||
"__editorExtras__": {
|
||||
"broken": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.RealKeyframeValue",
|
||||
"interpolationMode": 0,
|
||||
"tangentWeightMode": 0,
|
||||
"value": 0,
|
||||
"rightTangent": 0,
|
||||
"rightTangentWeight": 1,
|
||||
"leftTangent": 0,
|
||||
"leftTangentWeight": 1,
|
||||
"easingMethod": 0,
|
||||
"__editorExtras__": {
|
||||
"broken": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"preExtrapolation": 1,
|
||||
"postExtrapolation": 1
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.Channel",
|
||||
"_curve": {
|
||||
"__id__": 34
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.RealCurve",
|
||||
"_times": [],
|
||||
"_values": [],
|
||||
"preExtrapolation": 1,
|
||||
"postExtrapolation": 1
|
||||
},
|
||||
{
|
||||
"__type__": "cc.AnimationClipAdditiveSettings",
|
||||
"enabled": false,
|
||||
"refClip": null
|
||||
}
|
||||
]
|
||||
13
assets/resources/game/skill/anm/atk/fb-8.anim.meta
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"ver": "2.0.3",
|
||||
"importer": "animation-clip",
|
||||
"imported": true,
|
||||
"uuid": "b0bec9a1-c3c7-412f-b6de-e27ec78dcc86",
|
||||
"files": [
|
||||
".cconb"
|
||||
],
|
||||
"subMetas": {},
|
||||
"userData": {
|
||||
"name": "fb-8"
|
||||
}
|
||||
}
|
||||
@@ -76,23 +76,23 @@
|
||||
],
|
||||
"_values": [
|
||||
{
|
||||
"__uuid__": "3d46f945-3f07-477e-a95a-b49557d552c6@2cfc2",
|
||||
"__uuid__": "3d46f945-3f07-477e-a95a-b49557d552c6@03bc8",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "3d46f945-3f07-477e-a95a-b49557d552c6@1ca40",
|
||||
"__uuid__": "3d46f945-3f07-477e-a95a-b49557d552c6@acc42",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "3d46f945-3f07-477e-a95a-b49557d552c6@66637",
|
||||
"__uuid__": "3d46f945-3f07-477e-a95a-b49557d552c6@aaff4",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "3d46f945-3f07-477e-a95a-b49557d552c6@cf65d",
|
||||
"__uuid__": "3d46f945-3f07-477e-a95a-b49557d552c6@05059",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "3d46f945-3f07-477e-a95a-b49557d552c6@1e597",
|
||||
"__uuid__": "3d46f945-3f07-477e-a95a-b49557d552c6@4b51f",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -76,23 +76,23 @@
|
||||
],
|
||||
"_values": [
|
||||
{
|
||||
"__uuid__": "3d46f945-3f07-477e-a95a-b49557d552c6@94f10",
|
||||
"__uuid__": "3d46f945-3f07-477e-a95a-b49557d552c6@03bc8",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "3d46f945-3f07-477e-a95a-b49557d552c6@ab87c",
|
||||
"__uuid__": "3d46f945-3f07-477e-a95a-b49557d552c6@acc42",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "3d46f945-3f07-477e-a95a-b49557d552c6@7c2ba",
|
||||
"__uuid__": "3d46f945-3f07-477e-a95a-b49557d552c6@aaff4",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "3d46f945-3f07-477e-a95a-b49557d552c6@d6871",
|
||||
"__uuid__": "3d46f945-3f07-477e-a95a-b49557d552c6@05059",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
{
|
||||
"__uuid__": "3d46f945-3f07-477e-a95a-b49557d552c6@4cd95",
|
||||
"__uuid__": "3d46f945-3f07-477e-a95a-b49557d552c6@4b51f",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -20,28 +20,31 @@
|
||||
"_children": [
|
||||
{
|
||||
"__id__": 2
|
||||
},
|
||||
{
|
||||
"__id__": 8
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 8
|
||||
},
|
||||
{
|
||||
"__id__": 10
|
||||
},
|
||||
{
|
||||
"__id__": 12
|
||||
},
|
||||
{
|
||||
"__id__": 14
|
||||
},
|
||||
{
|
||||
"__id__": 16
|
||||
},
|
||||
{
|
||||
"__id__": 18
|
||||
},
|
||||
{
|
||||
"__id__": 20
|
||||
},
|
||||
{
|
||||
"__id__": 22
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 18
|
||||
"__id__": 24
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
@@ -211,6 +214,139 @@
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "slash-horizontal1",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 9
|
||||
},
|
||||
{
|
||||
"__id__": 11
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 13
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 2,
|
||||
"y": 2,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1073741824,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 8
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 10
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 95,
|
||||
"height": 48
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "0aybWnCBJDBb3WOXwo/YxC"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Sprite",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 8
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 12
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
"_dstBlendFactor": 4,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_spriteFrame": null,
|
||||
"_type": 0,
|
||||
"_fillType": 0,
|
||||
"_sizeMode": 1,
|
||||
"_fillCenter": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"_fillStart": 0,
|
||||
"_fillRange": 0,
|
||||
"_isTrimmedMode": true,
|
||||
"_useGrayscale": false,
|
||||
"_atlas": null,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "45iYWOPyBCNKkmXE+dmADF"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "bdI0RFo3VCNKhgFojxldzA",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
@@ -221,7 +357,7 @@
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 9
|
||||
"__id__": 15
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
@@ -249,7 +385,7 @@
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 11
|
||||
"__id__": 17
|
||||
},
|
||||
"atk_x": 20,
|
||||
"atk_y": 40,
|
||||
@@ -261,6 +397,10 @@
|
||||
"forceStartX": -1,
|
||||
"forceStartY": -1,
|
||||
"summon_count": 1,
|
||||
"summon_target_mode": 0,
|
||||
"summon_x_offset": 0,
|
||||
"summon_y_offset": 0,
|
||||
"summon_interval": 0,
|
||||
"height_offset": 0,
|
||||
"_id": ""
|
||||
},
|
||||
@@ -278,7 +418,7 @@
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 13
|
||||
"__id__": 19
|
||||
},
|
||||
"enabledContactListener": true,
|
||||
"bullet": false,
|
||||
@@ -312,7 +452,7 @@
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 15
|
||||
"__id__": 21
|
||||
},
|
||||
"tag": 0,
|
||||
"_group": 1,
|
||||
@@ -346,7 +486,7 @@
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 17
|
||||
"__id__": 23
|
||||
},
|
||||
"playOnLoad": true,
|
||||
"_clips": [
|
||||
|
||||
@@ -20,28 +20,31 @@
|
||||
"_children": [
|
||||
{
|
||||
"__id__": 2
|
||||
},
|
||||
{
|
||||
"__id__": 8
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 8
|
||||
},
|
||||
{
|
||||
"__id__": 10
|
||||
},
|
||||
{
|
||||
"__id__": 12
|
||||
},
|
||||
{
|
||||
"__id__": 14
|
||||
},
|
||||
{
|
||||
"__id__": 16
|
||||
},
|
||||
{
|
||||
"__id__": 18
|
||||
},
|
||||
{
|
||||
"__id__": 20
|
||||
},
|
||||
{
|
||||
"__id__": 22
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 18
|
||||
"__id__": 24
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
@@ -211,6 +214,139 @@
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "slash-horizontal1",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 9
|
||||
},
|
||||
{
|
||||
"__id__": 11
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 13
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 2,
|
||||
"y": 2,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1073741824,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 8
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 10
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 95,
|
||||
"height": 48
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "82TGDP+iVBv4P1whT99OBW"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Sprite",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 8
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 12
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
"_dstBlendFactor": 4,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_spriteFrame": null,
|
||||
"_type": 0,
|
||||
"_fillType": 0,
|
||||
"_sizeMode": 1,
|
||||
"_fillCenter": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"_fillStart": 0,
|
||||
"_fillRange": 0,
|
||||
"_isTrimmedMode": true,
|
||||
"_useGrayscale": false,
|
||||
"_atlas": null,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "daC3XwzZFG4JHd5pqsR70r"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "e8yfxZXCJCU6wnX0/ttDjH",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
@@ -221,7 +357,7 @@
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 9
|
||||
"__id__": 15
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
@@ -249,7 +385,7 @@
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 11
|
||||
"__id__": 17
|
||||
},
|
||||
"atk_x": 20,
|
||||
"atk_y": 40,
|
||||
@@ -261,6 +397,10 @@
|
||||
"forceStartX": -1,
|
||||
"forceStartY": -1,
|
||||
"summon_count": 1,
|
||||
"summon_target_mode": 0,
|
||||
"summon_x_offset": 0,
|
||||
"summon_y_offset": 0,
|
||||
"summon_interval": 0,
|
||||
"height_offset": 0,
|
||||
"_id": ""
|
||||
},
|
||||
@@ -278,7 +418,7 @@
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 13
|
||||
"__id__": 19
|
||||
},
|
||||
"enabledContactListener": true,
|
||||
"bullet": false,
|
||||
@@ -312,7 +452,7 @@
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 15
|
||||
"__id__": 21
|
||||
},
|
||||
"tag": 0,
|
||||
"_group": 1,
|
||||
@@ -346,7 +486,7 @@
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 17
|
||||
"__id__": 23
|
||||
},
|
||||
"playOnLoad": true,
|
||||
"_clips": [
|
||||
|
||||
@@ -20,28 +20,31 @@
|
||||
"_children": [
|
||||
{
|
||||
"__id__": 2
|
||||
},
|
||||
{
|
||||
"__id__": 8
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 8
|
||||
},
|
||||
{
|
||||
"__id__": 10
|
||||
},
|
||||
{
|
||||
"__id__": 12
|
||||
},
|
||||
{
|
||||
"__id__": 14
|
||||
},
|
||||
{
|
||||
"__id__": 16
|
||||
},
|
||||
{
|
||||
"__id__": 18
|
||||
},
|
||||
{
|
||||
"__id__": 20
|
||||
},
|
||||
{
|
||||
"__id__": 22
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 18
|
||||
"__id__": 24
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
@@ -173,7 +176,7 @@
|
||||
"a": 255
|
||||
},
|
||||
"_spriteFrame": {
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@13b06",
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@7e6d7",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
"_type": 0,
|
||||
@@ -211,6 +214,139 @@
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "fire-slash-horizontal1",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 9
|
||||
},
|
||||
{
|
||||
"__id__": 11
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 13
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 29.777,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 2,
|
||||
"y": 2,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1073741824,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 8
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 10
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 95,
|
||||
"height": 48
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "61GNVJPatIJoTFQpCuL1tc"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Sprite",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 8
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 12
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
"_dstBlendFactor": 4,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_spriteFrame": null,
|
||||
"_type": 0,
|
||||
"_fillType": 0,
|
||||
"_sizeMode": 1,
|
||||
"_fillCenter": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"_fillStart": 0,
|
||||
"_fillRange": 0,
|
||||
"_isTrimmedMode": true,
|
||||
"_useGrayscale": false,
|
||||
"_atlas": null,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "64tuHxFsxBMK3c6Rl+GQll"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "05Mo/yQRtK5YAX1chbWL76",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
@@ -221,7 +357,7 @@
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 9
|
||||
"__id__": 15
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
@@ -249,7 +385,7 @@
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 11
|
||||
"__id__": 17
|
||||
},
|
||||
"atk_x": 20,
|
||||
"atk_y": 40,
|
||||
@@ -261,6 +397,10 @@
|
||||
"forceStartX": -1,
|
||||
"forceStartY": -1,
|
||||
"summon_count": 1,
|
||||
"summon_target_mode": 0,
|
||||
"summon_x_offset": 0,
|
||||
"summon_y_offset": 0,
|
||||
"summon_interval": 0,
|
||||
"height_offset": 0,
|
||||
"_id": ""
|
||||
},
|
||||
@@ -278,7 +418,7 @@
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 13
|
||||
"__id__": 19
|
||||
},
|
||||
"enabledContactListener": true,
|
||||
"bullet": false,
|
||||
@@ -312,7 +452,7 @@
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 15
|
||||
"__id__": 21
|
||||
},
|
||||
"tag": 0,
|
||||
"_group": 1,
|
||||
@@ -346,7 +486,7 @@
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 17
|
||||
"__id__": 23
|
||||
},
|
||||
"playOnLoad": true,
|
||||
"_clips": [
|
||||
|
||||
@@ -20,28 +20,31 @@
|
||||
"_children": [
|
||||
{
|
||||
"__id__": 2
|
||||
},
|
||||
{
|
||||
"__id__": 8
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 8
|
||||
},
|
||||
{
|
||||
"__id__": 10
|
||||
},
|
||||
{
|
||||
"__id__": 12
|
||||
},
|
||||
{
|
||||
"__id__": 14
|
||||
},
|
||||
{
|
||||
"__id__": 16
|
||||
},
|
||||
{
|
||||
"__id__": 18
|
||||
},
|
||||
{
|
||||
"__id__": 20
|
||||
},
|
||||
{
|
||||
"__id__": 22
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 18
|
||||
"__id__": 24
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
@@ -211,6 +214,142 @@
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "electric-slash-horizontal1",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 9
|
||||
},
|
||||
{
|
||||
"__id__": 11
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 13
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 25.352,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 2,
|
||||
"y": 2,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1073741824,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 8
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 10
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 95,
|
||||
"height": 48
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "598QTUIYhAD5NxyPBcSrlV"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Sprite",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 8
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 12
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
"_dstBlendFactor": 4,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_spriteFrame": {
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@f6490",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
"_type": 0,
|
||||
"_fillType": 0,
|
||||
"_sizeMode": 1,
|
||||
"_fillCenter": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"_fillStart": 0,
|
||||
"_fillRange": 0,
|
||||
"_isTrimmedMode": true,
|
||||
"_useGrayscale": false,
|
||||
"_atlas": null,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "79xdyqEqhFdZmXNHgUvUaA"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "d1hgL10YVE8a0CvDCyOdTd",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
@@ -221,7 +360,7 @@
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 9
|
||||
"__id__": 15
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
@@ -249,7 +388,7 @@
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 11
|
||||
"__id__": 17
|
||||
},
|
||||
"atk_x": 20,
|
||||
"atk_y": 40,
|
||||
@@ -261,6 +400,10 @@
|
||||
"forceStartX": -1,
|
||||
"forceStartY": -1,
|
||||
"summon_count": 1,
|
||||
"summon_target_mode": 0,
|
||||
"summon_x_offset": 0,
|
||||
"summon_y_offset": 0,
|
||||
"summon_interval": 0,
|
||||
"height_offset": 0,
|
||||
"_id": ""
|
||||
},
|
||||
@@ -278,7 +421,7 @@
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 13
|
||||
"__id__": 19
|
||||
},
|
||||
"enabledContactListener": true,
|
||||
"bullet": false,
|
||||
@@ -312,7 +455,7 @@
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 15
|
||||
"__id__": 21
|
||||
},
|
||||
"tag": 0,
|
||||
"_group": 1,
|
||||
@@ -346,7 +489,7 @@
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 17
|
||||
"__id__": 23
|
||||
},
|
||||
"playOnLoad": true,
|
||||
"_clips": [
|
||||
|
||||
@@ -35,10 +35,13 @@
|
||||
},
|
||||
{
|
||||
"__id__": 14
|
||||
},
|
||||
{
|
||||
"__id__": 16
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 16
|
||||
"__id__": 18
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
@@ -92,8 +95,8 @@
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 6.77,
|
||||
"y": 0,
|
||||
"x": 0,
|
||||
"y": -60,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
@@ -105,8 +108,8 @@
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0.3,
|
||||
"y": 0.3,
|
||||
"x": 1.4,
|
||||
"y": 2,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
@@ -133,13 +136,13 @@
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 90,
|
||||
"height": 90
|
||||
"width": 128,
|
||||
"height": 128
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
"y": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
@@ -170,7 +173,7 @@
|
||||
"a": 255
|
||||
},
|
||||
"_spriteFrame": {
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@4d4df",
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@55402",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
"_type": 0,
|
||||
@@ -222,13 +225,13 @@
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 30,
|
||||
"height": 40
|
||||
"width": 20,
|
||||
"height": 100
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
"y": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
@@ -248,13 +251,26 @@
|
||||
"__prefab": {
|
||||
"__id__": 11
|
||||
},
|
||||
"atk_x": 10,
|
||||
"atk_y": 15,
|
||||
"atk_x": 0,
|
||||
"atk_y": 0,
|
||||
"runType": 3,
|
||||
"endType": 0,
|
||||
"speed": 720,
|
||||
"time": 0,
|
||||
"distance": 0,
|
||||
"forceStartX": -1,
|
||||
"forceStartY": -1,
|
||||
"summon_count": 1,
|
||||
"summon_target_mode": 0,
|
||||
"summon_x_offset": 0,
|
||||
"summon_y_offset": 0,
|
||||
"summon_interval": 0,
|
||||
"height_offset": 0,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "60LInmZXxDtKu79AshRG9j"
|
||||
"fileId": "35nW0iQNBH2bqkWAr3MVkQ"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.RigidBody2D",
|
||||
@@ -288,7 +304,7 @@
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "e1yBA625RLwLhzo6bLYW7j"
|
||||
"fileId": "57cr7S0YpK4oEZCavwXtIX"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.BoxCollider2D",
|
||||
@@ -315,14 +331,43 @@
|
||||
},
|
||||
"_size": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 30,
|
||||
"height": 40
|
||||
"width": 20,
|
||||
"height": 100
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "43ZDJfXX9AX73gyytKQZWm"
|
||||
"fileId": "ebw5mObxNGGKxnJXDgX5gl"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Animation",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 17
|
||||
},
|
||||
"playOnLoad": true,
|
||||
"_clips": [
|
||||
{
|
||||
"__uuid__": "45605d53-4dca-4529-819d-4a0d98c3a47c",
|
||||
"__expectedType__": "cc.AnimationClip"
|
||||
}
|
||||
],
|
||||
"_defaultClip": {
|
||||
"__uuid__": "45605d53-4dca-4529-819d-4a0d98c3a47c",
|
||||
"__expectedType__": "cc.AnimationClip"
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "20U0hP/NZErJJXRCEib1lq"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"ver": "1.1.50",
|
||||
"importer": "prefab",
|
||||
"imported": true,
|
||||
"uuid": "fc32700f-bf4a-47ce-b619-6497b7280fde",
|
||||
"uuid": "7edb8215-1344-4215-8172-7a50a72da8bb",
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
|
||||
@@ -35,10 +35,13 @@
|
||||
},
|
||||
{
|
||||
"__id__": 14
|
||||
},
|
||||
{
|
||||
"__id__": 16
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 16
|
||||
"__id__": 18
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
@@ -92,7 +95,7 @@
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 6.77,
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
@@ -100,13 +103,13 @@
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
"z": 0.706489444943837,
|
||||
"w": 0.7077235789366842
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0.3,
|
||||
"y": 0.3,
|
||||
"x": -1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
@@ -115,7 +118,7 @@
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
"z": 89.9
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
@@ -133,8 +136,8 @@
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 90,
|
||||
"height": 90
|
||||
"width": 85,
|
||||
"height": 119
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
@@ -170,7 +173,7 @@
|
||||
"a": 255
|
||||
},
|
||||
"_spriteFrame": {
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@179ff",
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@59ec8",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
"_type": 0,
|
||||
@@ -222,8 +225,8 @@
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 30,
|
||||
"height": 40
|
||||
"width": 50,
|
||||
"height": 50
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
@@ -248,13 +251,25 @@
|
||||
"__prefab": {
|
||||
"__id__": 11
|
||||
},
|
||||
"atk_x": 10,
|
||||
"atk_y": 15,
|
||||
"atk_x": 20,
|
||||
"atk_y": 20,
|
||||
"runType": 0,
|
||||
"endType": 2,
|
||||
"speed": 720,
|
||||
"time": 0,
|
||||
"distance": 0,
|
||||
"forceStartX": -1,
|
||||
"forceStartY": -1,
|
||||
"summon_count": 1,
|
||||
"summon_x_offset": 0,
|
||||
"summon_y_offset": 0,
|
||||
"summon_interval": 0,
|
||||
"height_offset": 100,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "60LInmZXxDtKu79AshRG9j"
|
||||
"fileId": "35nW0iQNBH2bqkWAr3MVkQ"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.RigidBody2D",
|
||||
@@ -288,7 +303,7 @@
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "e1yBA625RLwLhzo6bLYW7j"
|
||||
"fileId": "57cr7S0YpK4oEZCavwXtIX"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.BoxCollider2D",
|
||||
@@ -315,14 +330,43 @@
|
||||
},
|
||||
"_size": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 30,
|
||||
"height": 40
|
||||
"width": 50,
|
||||
"height": 150
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "43ZDJfXX9AX73gyytKQZWm"
|
||||
"fileId": "ebw5mObxNGGKxnJXDgX5gl"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Animation",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 17
|
||||
},
|
||||
"playOnLoad": true,
|
||||
"_clips": [
|
||||
{
|
||||
"__uuid__": "45385cba-7334-4ff4-a548-578262417f58",
|
||||
"__expectedType__": "cc.AnimationClip"
|
||||
}
|
||||
],
|
||||
"_defaultClip": {
|
||||
"__uuid__": "45385cba-7334-4ff4-a548-578262417f58",
|
||||
"__expectedType__": "cc.AnimationClip"
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "20U0hP/NZErJJXRCEib1lq"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"ver": "1.1.50",
|
||||
"importer": "prefab",
|
||||
"imported": true,
|
||||
"uuid": "5a0c6727-c741-4a33-b6f2-b2c56e3fc540",
|
||||
"uuid": "7c7ff7a4-17d5-4c4a-8fee-68b73af250e5",
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
|
||||
519
assets/resources/game/skill/atk/m5.prefab
Normal file
@@ -0,0 +1,519 @@
|
||||
[
|
||||
{
|
||||
"__type__": "cc.Prefab",
|
||||
"_name": "m5",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_native": "",
|
||||
"data": {
|
||||
"__id__": 1
|
||||
},
|
||||
"optimizationPolicy": 0,
|
||||
"persistent": false
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "m5",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": null,
|
||||
"_children": [
|
||||
{
|
||||
"__id__": 2
|
||||
},
|
||||
{
|
||||
"__id__": 8
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 14
|
||||
},
|
||||
{
|
||||
"__id__": 16
|
||||
},
|
||||
{
|
||||
"__id__": 18
|
||||
},
|
||||
{
|
||||
"__id__": 20
|
||||
},
|
||||
{
|
||||
"__id__": 22
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 24
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1073741824,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "Node",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 3
|
||||
},
|
||||
{
|
||||
"__id__": 5
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 7
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": -0.5,
|
||||
"y": 0.5,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1073741824,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 4
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 277,
|
||||
"height": 250
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "93pNmvtQlLSqtTgIepyEmA"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Sprite",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 6
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
"_dstBlendFactor": 4,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_spriteFrame": {
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@260b5",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
"_type": 0,
|
||||
"_fillType": 0,
|
||||
"_sizeMode": 0,
|
||||
"_fillCenter": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"_fillStart": 0,
|
||||
"_fillRange": 0,
|
||||
"_isTrimmedMode": true,
|
||||
"_useGrayscale": false,
|
||||
"_atlas": {
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20",
|
||||
"__expectedType__": "cc.SpriteAtlas"
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "12eKc8gltBz50frJCS5+ww"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "3arqAMBz1MvoXBzeDaL5M/",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "Node-001",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 9
|
||||
},
|
||||
{
|
||||
"__id__": 11
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 13
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": -0.5,
|
||||
"y": 0.5,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1073741824,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 8
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 10
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 122,
|
||||
"height": 68
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "4blcTDlixIRI3qtyERLs2E"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Sprite",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 8
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 12
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
"_dstBlendFactor": 4,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_spriteFrame": null,
|
||||
"_type": 0,
|
||||
"_fillType": 0,
|
||||
"_sizeMode": 1,
|
||||
"_fillCenter": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"_fillStart": 0,
|
||||
"_fillRange": 0,
|
||||
"_isTrimmedMode": true,
|
||||
"_useGrayscale": false,
|
||||
"_atlas": null,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "e6QtagQwZA/50lsdWvOjb0"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "ed54OCubBD853t6+5pUPLQ",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 15
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 50,
|
||||
"height": 100
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "63NP9yq3hEUKD/OZZZ5t7x"
|
||||
},
|
||||
{
|
||||
"__type__": "57aabs7TE1J5obTAZczc+64",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 17
|
||||
},
|
||||
"atk_x": 0,
|
||||
"atk_y": 0,
|
||||
"runType": 0,
|
||||
"endType": 2,
|
||||
"speed": 720,
|
||||
"time": 0,
|
||||
"distance": 0,
|
||||
"forceStartX": -1,
|
||||
"forceStartY": -1,
|
||||
"summon_count": 1,
|
||||
"summon_x_offset": 0,
|
||||
"summon_y_offset": 0,
|
||||
"summon_interval": 0,
|
||||
"height_offset": 0,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "35nW0iQNBH2bqkWAr3MVkQ"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.RigidBody2D",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 19
|
||||
},
|
||||
"enabledContactListener": true,
|
||||
"bullet": false,
|
||||
"awakeOnLoad": true,
|
||||
"_group": 1,
|
||||
"_type": 1,
|
||||
"_allowSleep": false,
|
||||
"_gravityScale": 1,
|
||||
"_linearDamping": 0,
|
||||
"_angularDamping": 0,
|
||||
"_linearVelocity": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"_angularVelocity": 0,
|
||||
"_fixedRotation": false,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "57cr7S0YpK4oEZCavwXtIX"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.BoxCollider2D",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 21
|
||||
},
|
||||
"tag": 0,
|
||||
"_group": 1,
|
||||
"_density": 1,
|
||||
"_sensor": true,
|
||||
"_friction": 0.2,
|
||||
"_restitution": 0,
|
||||
"_offset": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 50
|
||||
},
|
||||
"_size": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 50,
|
||||
"height": 100
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "ebw5mObxNGGKxnJXDgX5gl"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Animation",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 23
|
||||
},
|
||||
"playOnLoad": true,
|
||||
"_clips": [
|
||||
{
|
||||
"__uuid__": "a71379d4-b14d-4070-96ee-e7c889f25bbd",
|
||||
"__expectedType__": "cc.AnimationClip"
|
||||
}
|
||||
],
|
||||
"_defaultClip": {
|
||||
"__uuid__": "a71379d4-b14d-4070-96ee-e7c889f25bbd",
|
||||
"__expectedType__": "cc.AnimationClip"
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "20U0hP/NZErJJXRCEib1lq"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "c46/YsCPVOJYA4mWEpNYRx",
|
||||
"instance": null,
|
||||
"targetOverrides": null
|
||||
}
|
||||
]
|
||||
@@ -2,12 +2,12 @@
|
||||
"ver": "1.1.50",
|
||||
"importer": "prefab",
|
||||
"imported": true,
|
||||
"uuid": "91e5e3e3-d2f1-4522-9f82-649e9bc8f8db",
|
||||
"uuid": "8dc65122-222f-4bd3-b89c-62e7f8eefe78",
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {},
|
||||
"userData": {
|
||||
"syncNodeName": "up_red"
|
||||
"syncNodeName": "m5"
|
||||
}
|
||||
}
|
||||
@@ -293,6 +293,10 @@
|
||||
"forceStartX": -1,
|
||||
"forceStartY": -1,
|
||||
"summon_count": 4,
|
||||
"summon_target_mode": 2,
|
||||
"summon_x_offset": 0,
|
||||
"summon_y_offset": 0,
|
||||
"summon_interval": 0,
|
||||
"height_offset": 100,
|
||||
"_id": ""
|
||||
},
|
||||
|
||||
@@ -293,6 +293,10 @@
|
||||
"forceStartX": -1,
|
||||
"forceStartY": -1,
|
||||
"summon_count": 6,
|
||||
"summon_target_mode": 2,
|
||||
"summon_x_offset": 0,
|
||||
"summon_y_offset": 0,
|
||||
"summon_interval": 0,
|
||||
"height_offset": 100,
|
||||
"_id": ""
|
||||
},
|
||||
|
||||
@@ -261,6 +261,10 @@
|
||||
"forceStartX": -1,
|
||||
"forceStartY": -1,
|
||||
"summon_count": 3,
|
||||
"summon_target_mode": 2,
|
||||
"summon_x_offset": 0,
|
||||
"summon_y_offset": 0,
|
||||
"summon_interval": 0,
|
||||
"height_offset": 100,
|
||||
"_id": ""
|
||||
},
|
||||
|
||||
@@ -397,6 +397,10 @@
|
||||
"forceStartX": -1,
|
||||
"forceStartY": -1,
|
||||
"summon_count": 3,
|
||||
"summon_target_mode": 0,
|
||||
"summon_x_offset": 0,
|
||||
"summon_y_offset": 0,
|
||||
"summon_interval": 0.2,
|
||||
"height_offset": 0,
|
||||
"_id": ""
|
||||
},
|
||||
|
||||
@@ -96,7 +96,7 @@
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": -30,
|
||||
"y": -90,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
@@ -108,8 +108,8 @@
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0.9,
|
||||
"y": 1,
|
||||
"x": 1.5,
|
||||
"y": 2,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
@@ -136,8 +136,8 @@
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 65,
|
||||
"height": 330
|
||||
"width": 128,
|
||||
"height": 128
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
@@ -173,7 +173,7 @@
|
||||
"a": 255
|
||||
},
|
||||
"_spriteFrame": {
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@5cbcb",
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@55402",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
"_type": 0,
|
||||
@@ -261,6 +261,10 @@
|
||||
"forceStartX": -1,
|
||||
"forceStartY": -1,
|
||||
"summon_count": 5,
|
||||
"summon_target_mode": 2,
|
||||
"summon_x_offset": 0,
|
||||
"summon_y_offset": 0,
|
||||
"summon_interval": 0,
|
||||
"height_offset": 0,
|
||||
"_id": ""
|
||||
},
|
||||
|
||||
@@ -261,6 +261,10 @@
|
||||
"forceStartX": -1,
|
||||
"forceStartY": -1,
|
||||
"summon_count": 3,
|
||||
"summon_target_mode": 2,
|
||||
"summon_x_offset": 0,
|
||||
"summon_y_offset": 0,
|
||||
"summon_interval": 0.5,
|
||||
"height_offset": 100,
|
||||
"_id": ""
|
||||
},
|
||||
|
||||
@@ -261,6 +261,10 @@
|
||||
"forceStartX": -1,
|
||||
"forceStartY": -1,
|
||||
"summon_count": 3,
|
||||
"summon_target_mode": 2,
|
||||
"summon_x_offset": 0,
|
||||
"summon_y_offset": 0,
|
||||
"summon_interval": 0,
|
||||
"height_offset": 100,
|
||||
"_id": ""
|
||||
},
|
||||
|
||||
@@ -261,6 +261,10 @@
|
||||
"forceStartX": -1,
|
||||
"forceStartY": -1,
|
||||
"summon_count": 3,
|
||||
"summon_target_mode": 2,
|
||||
"summon_x_offset": 0,
|
||||
"summon_y_offset": 0,
|
||||
"summon_interval": 0,
|
||||
"height_offset": 100,
|
||||
"_id": ""
|
||||
},
|
||||
|
||||
526
assets/resources/game/skill/atk/maxm7.prefab
Normal file
@@ -0,0 +1,526 @@
|
||||
[
|
||||
{
|
||||
"__type__": "cc.Prefab",
|
||||
"_name": "maxm7",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_native": "",
|
||||
"data": {
|
||||
"__id__": 1
|
||||
},
|
||||
"optimizationPolicy": 0,
|
||||
"persistent": false
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "maxm7",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": null,
|
||||
"_children": [
|
||||
{
|
||||
"__id__": 2
|
||||
},
|
||||
{
|
||||
"__id__": 8
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 14
|
||||
},
|
||||
{
|
||||
"__id__": 16
|
||||
},
|
||||
{
|
||||
"__id__": 18
|
||||
},
|
||||
{
|
||||
"__id__": 20
|
||||
},
|
||||
{
|
||||
"__id__": 22
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 24
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1073741824,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "Node",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 3
|
||||
},
|
||||
{
|
||||
"__id__": 5
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 7
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": -30,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 2,
|
||||
"y": 2,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1073741824,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 4
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 128,
|
||||
"height": 128
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "93pNmvtQlLSqtTgIepyEmA"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Sprite",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 6
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
"_dstBlendFactor": 4,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_spriteFrame": {
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@55402",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
"_type": 0,
|
||||
"_fillType": 0,
|
||||
"_sizeMode": 1,
|
||||
"_fillCenter": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"_fillStart": 0,
|
||||
"_fillRange": 0,
|
||||
"_isTrimmedMode": true,
|
||||
"_useGrayscale": false,
|
||||
"_atlas": {
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20",
|
||||
"__expectedType__": "cc.SpriteAtlas"
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "12eKc8gltBz50frJCS5+ww"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "3arqAMBz1MvoXBzeDaL5M/",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "Node-001",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 9
|
||||
},
|
||||
{
|
||||
"__id__": 11
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 13
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": -30,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 2,
|
||||
"y": 2,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1073741824,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 8
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 10
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 128,
|
||||
"height": 128
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "cbS/mBx7hFKK1RlGcpOgD1"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Sprite",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 8
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 12
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
"_dstBlendFactor": 4,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_spriteFrame": {
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@55402",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
"_type": 0,
|
||||
"_fillType": 0,
|
||||
"_sizeMode": 1,
|
||||
"_fillCenter": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"_fillStart": 0,
|
||||
"_fillRange": 0,
|
||||
"_isTrimmedMode": true,
|
||||
"_useGrayscale": false,
|
||||
"_atlas": {
|
||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20",
|
||||
"__expectedType__": "cc.SpriteAtlas"
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "eah7cf5S5FCrmP7CHX5e38"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "f9cYdo2HdAp7KWposjmIcg",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 15
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 200,
|
||||
"height": 100
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.3
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "63NP9yq3hEUKD/OZZZ5t7x"
|
||||
},
|
||||
{
|
||||
"__type__": "57aabs7TE1J5obTAZczc+64",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 17
|
||||
},
|
||||
"atk_x": 0,
|
||||
"atk_y": 0,
|
||||
"runType": 3,
|
||||
"endType": 0,
|
||||
"speed": 720,
|
||||
"time": 0,
|
||||
"distance": 0,
|
||||
"forceStartX": -1,
|
||||
"forceStartY": -1,
|
||||
"summon_count": 1,
|
||||
"summon_target_mode": 2,
|
||||
"summon_x_offset": 0,
|
||||
"summon_y_offset": 0,
|
||||
"summon_interval": 0.5,
|
||||
"height_offset": 0,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "35nW0iQNBH2bqkWAr3MVkQ"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.RigidBody2D",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 19
|
||||
},
|
||||
"enabledContactListener": true,
|
||||
"bullet": false,
|
||||
"awakeOnLoad": true,
|
||||
"_group": 1,
|
||||
"_type": 1,
|
||||
"_allowSleep": false,
|
||||
"_gravityScale": 1,
|
||||
"_linearDamping": 0,
|
||||
"_angularDamping": 0,
|
||||
"_linearVelocity": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"_angularVelocity": 0,
|
||||
"_fixedRotation": false,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "57cr7S0YpK4oEZCavwXtIX"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.BoxCollider2D",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 21
|
||||
},
|
||||
"tag": 0,
|
||||
"_group": 1,
|
||||
"_density": 1,
|
||||
"_sensor": true,
|
||||
"_friction": 0.2,
|
||||
"_restitution": 0,
|
||||
"_offset": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"_size": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 200,
|
||||
"height": 100
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "ebw5mObxNGGKxnJXDgX5gl"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Animation",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 23
|
||||
},
|
||||
"playOnLoad": true,
|
||||
"_clips": [
|
||||
{
|
||||
"__uuid__": "b0bec9a1-c3c7-412f-b6de-e27ec78dcc86",
|
||||
"__expectedType__": "cc.AnimationClip"
|
||||
}
|
||||
],
|
||||
"_defaultClip": {
|
||||
"__uuid__": "b0bec9a1-c3c7-412f-b6de-e27ec78dcc86",
|
||||
"__expectedType__": "cc.AnimationClip"
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "20U0hP/NZErJJXRCEib1lq"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "c46/YsCPVOJYA4mWEpNYRx",
|
||||
"instance": null,
|
||||
"targetOverrides": null
|
||||
}
|
||||
]
|
||||
@@ -2,12 +2,12 @@
|
||||
"ver": "1.1.50",
|
||||
"importer": "prefab",
|
||||
"imported": true,
|
||||
"uuid": "55e98478-734f-4d85-92b2-0a62a52c494c",
|
||||
"uuid": "2316d214-bb61-434e-a056-48793e72dcce",
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {},
|
||||
"userData": {
|
||||
"syncNodeName": "up_blue"
|
||||
"syncNodeName": "maxm7"
|
||||
}
|
||||
}
|
||||
@@ -158,13 +158,13 @@
|
||||
"_dstBlendFactor": 4,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"r": 10,
|
||||
"g": 206,
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_spriteFrame": {
|
||||
"__uuid__": "3d46f945-3f07-477e-a95a-b49557d552c6@2cfc2",
|
||||
"__uuid__": "3d46f945-3f07-477e-a95a-b49557d552c6@03bc8",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
"_type": 0,
|
||||
|
||||
@@ -159,12 +159,12 @@
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"g": 12,
|
||||
"b": 12,
|
||||
"a": 255
|
||||
},
|
||||
"_spriteFrame": {
|
||||
"__uuid__": "3d46f945-3f07-477e-a95a-b49557d552c6@94f10",
|
||||
"__uuid__": "3d46f945-3f07-477e-a95a-b49557d552c6@03bc8",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
"_type": 0,
|
||||
|
||||
@@ -1,274 +0,0 @@
|
||||
[
|
||||
{
|
||||
"__type__": "cc.Prefab",
|
||||
"_name": "up_blue",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_native": "",
|
||||
"data": {
|
||||
"__id__": 1
|
||||
},
|
||||
"optimizationPolicy": 0,
|
||||
"persistent": false
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "up_blue",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": null,
|
||||
"_children": [
|
||||
{
|
||||
"__id__": 2
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 8
|
||||
},
|
||||
{
|
||||
"__id__": 10
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 12
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "skill",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 3
|
||||
},
|
||||
{
|
||||
"__id__": 5
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 7
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 10,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1.3,
|
||||
"y": 1.3,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 4
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 77,
|
||||
"height": 77
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "b4sNQPJWFKha7x75SWXmRj"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Sprite",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 6
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
"_dstBlendFactor": 4,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 206
|
||||
},
|
||||
"_spriteFrame": {
|
||||
"__uuid__": "3d46f945-3f07-477e-a95a-b49557d552c6@e7e9c",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
"_type": 1,
|
||||
"_fillType": 1,
|
||||
"_sizeMode": 1,
|
||||
"_fillCenter": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"_fillStart": 0.2,
|
||||
"_fillRange": 1,
|
||||
"_isTrimmedMode": true,
|
||||
"_useGrayscale": false,
|
||||
"_atlas": {
|
||||
"__uuid__": "3d46f945-3f07-477e-a95a-b49557d552c6",
|
||||
"__expectedType__": "cc.SpriteAtlas"
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "9a+65VIghBm4HQxuHPQ/mg"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "7a5LvbdlxEc6FKa7cun2oB",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 9
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 80,
|
||||
"height": 110
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "63NP9yq3hEUKD/OZZZ5t7x"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Animation",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 11
|
||||
},
|
||||
"playOnLoad": true,
|
||||
"_clips": [
|
||||
{
|
||||
"__uuid__": "81e87781-7328-4283-a747-060707c41880",
|
||||
"__expectedType__": "cc.AnimationClip"
|
||||
}
|
||||
],
|
||||
"_defaultClip": {
|
||||
"__uuid__": "81e87781-7328-4283-a747-060707c41880",
|
||||
"__expectedType__": "cc.AnimationClip"
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "c6LOemuvJKyYCqlF/yUJcr"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "c46/YsCPVOJYA4mWEpNYRx",
|
||||
"instance": null,
|
||||
"targetOverrides": null
|
||||
}
|
||||
]
|
||||
@@ -1,274 +0,0 @@
|
||||
[
|
||||
{
|
||||
"__type__": "cc.Prefab",
|
||||
"_name": "up_green",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_native": "",
|
||||
"data": {
|
||||
"__id__": 1
|
||||
},
|
||||
"optimizationPolicy": 0,
|
||||
"persistent": false
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "up_green",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": null,
|
||||
"_children": [
|
||||
{
|
||||
"__id__": 2
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 8
|
||||
},
|
||||
{
|
||||
"__id__": 10
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 12
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "skill",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 3
|
||||
},
|
||||
{
|
||||
"__id__": 5
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 7
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 10,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1.3,
|
||||
"y": 1.3,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 4
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 77,
|
||||
"height": 77
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "b4sNQPJWFKha7x75SWXmRj"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Sprite",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 6
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
"_dstBlendFactor": 4,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 206
|
||||
},
|
||||
"_spriteFrame": {
|
||||
"__uuid__": "3d46f945-3f07-477e-a95a-b49557d552c6@e7e9c",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
"_type": 1,
|
||||
"_fillType": 1,
|
||||
"_sizeMode": 1,
|
||||
"_fillCenter": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"_fillStart": 0.2,
|
||||
"_fillRange": 1,
|
||||
"_isTrimmedMode": true,
|
||||
"_useGrayscale": false,
|
||||
"_atlas": {
|
||||
"__uuid__": "3d46f945-3f07-477e-a95a-b49557d552c6",
|
||||
"__expectedType__": "cc.SpriteAtlas"
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "9a+65VIghBm4HQxuHPQ/mg"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "7a5LvbdlxEc6FKa7cun2oB",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 9
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 80,
|
||||
"height": 110
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "63NP9yq3hEUKD/OZZZ5t7x"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Animation",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 11
|
||||
},
|
||||
"playOnLoad": true,
|
||||
"_clips": [
|
||||
{
|
||||
"__uuid__": "01337a12-a04d-41f5-8f1f-efbf16989fb3",
|
||||
"__expectedType__": "cc.AnimationClip"
|
||||
}
|
||||
],
|
||||
"_defaultClip": {
|
||||
"__uuid__": "01337a12-a04d-41f5-8f1f-efbf16989fb3",
|
||||
"__expectedType__": "cc.AnimationClip"
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "c6LOemuvJKyYCqlF/yUJcr"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "c46/YsCPVOJYA4mWEpNYRx",
|
||||
"instance": null,
|
||||
"targetOverrides": null
|
||||
}
|
||||
]
|
||||
@@ -1,274 +0,0 @@
|
||||
[
|
||||
{
|
||||
"__type__": "cc.Prefab",
|
||||
"_name": "up_red",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_native": "",
|
||||
"data": {
|
||||
"__id__": 1
|
||||
},
|
||||
"optimizationPolicy": 0,
|
||||
"persistent": false
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "up_red",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": null,
|
||||
"_children": [
|
||||
{
|
||||
"__id__": 2
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 8
|
||||
},
|
||||
{
|
||||
"__id__": 10
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 12
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "skill",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 3
|
||||
},
|
||||
{
|
||||
"__id__": 5
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 7
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 10,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1.3,
|
||||
"y": 1.3,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 4
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 77,
|
||||
"height": 77
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "b4sNQPJWFKha7x75SWXmRj"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Sprite",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 6
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
"_dstBlendFactor": 4,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 206
|
||||
},
|
||||
"_spriteFrame": {
|
||||
"__uuid__": "3d46f945-3f07-477e-a95a-b49557d552c6@e7e9c",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
"_type": 1,
|
||||
"_fillType": 1,
|
||||
"_sizeMode": 1,
|
||||
"_fillCenter": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"_fillStart": 0.2,
|
||||
"_fillRange": 1,
|
||||
"_isTrimmedMode": true,
|
||||
"_useGrayscale": false,
|
||||
"_atlas": {
|
||||
"__uuid__": "3d46f945-3f07-477e-a95a-b49557d552c6",
|
||||
"__expectedType__": "cc.SpriteAtlas"
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "9a+65VIghBm4HQxuHPQ/mg"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "7a5LvbdlxEc6FKa7cun2oB",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 9
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 80,
|
||||
"height": 110
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "63NP9yq3hEUKD/OZZZ5t7x"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Animation",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 11
|
||||
},
|
||||
"playOnLoad": true,
|
||||
"_clips": [
|
||||
{
|
||||
"__uuid__": "0f9dab25-82b0-4b96-b649-7c6162deafa0",
|
||||
"__expectedType__": "cc.AnimationClip"
|
||||
}
|
||||
],
|
||||
"_defaultClip": {
|
||||
"__uuid__": "0f9dab25-82b0-4b96-b649-7c6162deafa0",
|
||||
"__expectedType__": "cc.AnimationClip"
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "c6LOemuvJKyYCqlF/yUJcr"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "c46/YsCPVOJYA4mWEpNYRx",
|
||||
"instance": null,
|
||||
"targetOverrides": null
|
||||
}
|
||||
]
|
||||
@@ -1,274 +0,0 @@
|
||||
[
|
||||
{
|
||||
"__type__": "cc.Prefab",
|
||||
"_name": "up_blue",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_native": "",
|
||||
"data": {
|
||||
"__id__": 1
|
||||
},
|
||||
"optimizationPolicy": 0,
|
||||
"persistent": false
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "up_blue",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": null,
|
||||
"_children": [
|
||||
{
|
||||
"__id__": 2
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 8
|
||||
},
|
||||
{
|
||||
"__id__": 10
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 12
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "skill",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 3
|
||||
},
|
||||
{
|
||||
"__id__": 5
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 7
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": -7.953,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1.3,
|
||||
"y": 1.3,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 4
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 77,
|
||||
"height": 77
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "b4sNQPJWFKha7x75SWXmRj"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Sprite",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 6
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
"_dstBlendFactor": 4,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 206
|
||||
},
|
||||
"_spriteFrame": {
|
||||
"__uuid__": "3d46f945-3f07-477e-a95a-b49557d552c6@e7e9c",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
"_type": 1,
|
||||
"_fillType": 1,
|
||||
"_sizeMode": 1,
|
||||
"_fillCenter": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"_fillStart": 0.2,
|
||||
"_fillRange": 1,
|
||||
"_isTrimmedMode": true,
|
||||
"_useGrayscale": false,
|
||||
"_atlas": {
|
||||
"__uuid__": "3d46f945-3f07-477e-a95a-b49557d552c6",
|
||||
"__expectedType__": "cc.SpriteAtlas"
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "9a+65VIghBm4HQxuHPQ/mg"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "7a5LvbdlxEc6FKa7cun2oB",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 9
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 80,
|
||||
"height": 110
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "63NP9yq3hEUKD/OZZZ5t7x"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Animation",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 11
|
||||
},
|
||||
"playOnLoad": true,
|
||||
"_clips": [
|
||||
{
|
||||
"__uuid__": "81e87781-7328-4283-a747-060707c41880",
|
||||
"__expectedType__": "cc.AnimationClip"
|
||||
}
|
||||
],
|
||||
"_defaultClip": {
|
||||
"__uuid__": "81e87781-7328-4283-a747-060707c41880",
|
||||
"__expectedType__": "cc.AnimationClip"
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "c6LOemuvJKyYCqlF/yUJcr"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "c46/YsCPVOJYA4mWEpNYRx",
|
||||
"instance": null,
|
||||
"targetOverrides": null
|
||||
}
|
||||
]
|
||||
@@ -1 +0,0 @@
|
||||
{"ver":"1.1.50","importer":"prefab","imported":true,"uuid":"1b44e122-28a1-4b56-964c-718f6f68737f","files":[".json"],"subMetas":{},"userData":{"syncNodeName":"up_blue"}}
|
||||
@@ -1,274 +0,0 @@
|
||||
[
|
||||
{
|
||||
"__type__": "cc.Prefab",
|
||||
"_name": "up_green",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_native": "",
|
||||
"data": {
|
||||
"__id__": 1
|
||||
},
|
||||
"optimizationPolicy": 0,
|
||||
"persistent": false
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "up_green",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": null,
|
||||
"_children": [
|
||||
{
|
||||
"__id__": 2
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 8
|
||||
},
|
||||
{
|
||||
"__id__": 10
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 12
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "skill",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 3
|
||||
},
|
||||
{
|
||||
"__id__": 5
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 7
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": -5.121,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1.3,
|
||||
"y": 1.3,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 4
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 77,
|
||||
"height": 77
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "b4sNQPJWFKha7x75SWXmRj"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Sprite",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 6
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
"_dstBlendFactor": 4,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 206
|
||||
},
|
||||
"_spriteFrame": {
|
||||
"__uuid__": "3d46f945-3f07-477e-a95a-b49557d552c6@e7e9c",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
"_type": 1,
|
||||
"_fillType": 1,
|
||||
"_sizeMode": 1,
|
||||
"_fillCenter": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"_fillStart": 0.2,
|
||||
"_fillRange": 1,
|
||||
"_isTrimmedMode": true,
|
||||
"_useGrayscale": false,
|
||||
"_atlas": {
|
||||
"__uuid__": "3d46f945-3f07-477e-a95a-b49557d552c6",
|
||||
"__expectedType__": "cc.SpriteAtlas"
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "9a+65VIghBm4HQxuHPQ/mg"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "7a5LvbdlxEc6FKa7cun2oB",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 9
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 80,
|
||||
"height": 110
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "63NP9yq3hEUKD/OZZZ5t7x"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Animation",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 11
|
||||
},
|
||||
"playOnLoad": true,
|
||||
"_clips": [
|
||||
{
|
||||
"__uuid__": "01337a12-a04d-41f5-8f1f-efbf16989fb3",
|
||||
"__expectedType__": "cc.AnimationClip"
|
||||
}
|
||||
],
|
||||
"_defaultClip": {
|
||||
"__uuid__": "01337a12-a04d-41f5-8f1f-efbf16989fb3",
|
||||
"__expectedType__": "cc.AnimationClip"
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "c6LOemuvJKyYCqlF/yUJcr"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "c46/YsCPVOJYA4mWEpNYRx",
|
||||
"instance": null,
|
||||
"targetOverrides": null
|
||||
}
|
||||
]
|
||||
@@ -1 +0,0 @@
|
||||
{"ver":"1.1.50","importer":"prefab","imported":true,"uuid":"dd573541-6f27-4dc4-9e86-c98caf79a58d","files":[".json"],"subMetas":{},"userData":{"syncNodeName":"up_green"}}
|
||||
@@ -1,274 +0,0 @@
|
||||
[
|
||||
{
|
||||
"__type__": "cc.Prefab",
|
||||
"_name": "up_red",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_native": "",
|
||||
"data": {
|
||||
"__id__": 1
|
||||
},
|
||||
"optimizationPolicy": 0,
|
||||
"persistent": false
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "up_red",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": null,
|
||||
"_children": [
|
||||
{
|
||||
"__id__": 2
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 8
|
||||
},
|
||||
{
|
||||
"__id__": 10
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 12
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "skill",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 3
|
||||
},
|
||||
{
|
||||
"__id__": 5
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 7
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": -7.795,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1.3,
|
||||
"y": 1.3,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 4
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 77,
|
||||
"height": 77
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "b4sNQPJWFKha7x75SWXmRj"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Sprite",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 6
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
"_dstBlendFactor": 4,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 206
|
||||
},
|
||||
"_spriteFrame": {
|
||||
"__uuid__": "3d46f945-3f07-477e-a95a-b49557d552c6@e7e9c",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
"_type": 1,
|
||||
"_fillType": 1,
|
||||
"_sizeMode": 1,
|
||||
"_fillCenter": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"_fillStart": 0.2,
|
||||
"_fillRange": 1,
|
||||
"_isTrimmedMode": true,
|
||||
"_useGrayscale": false,
|
||||
"_atlas": {
|
||||
"__uuid__": "3d46f945-3f07-477e-a95a-b49557d552c6",
|
||||
"__expectedType__": "cc.SpriteAtlas"
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "9a+65VIghBm4HQxuHPQ/mg"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "7a5LvbdlxEc6FKa7cun2oB",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 9
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 80,
|
||||
"height": 110
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "63NP9yq3hEUKD/OZZZ5t7x"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Animation",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 11
|
||||
},
|
||||
"playOnLoad": true,
|
||||
"_clips": [
|
||||
{
|
||||
"__uuid__": "0f9dab25-82b0-4b96-b649-7c6162deafa0",
|
||||
"__expectedType__": "cc.AnimationClip"
|
||||
}
|
||||
],
|
||||
"_defaultClip": {
|
||||
"__uuid__": "0f9dab25-82b0-4b96-b649-7c6162deafa0",
|
||||
"__expectedType__": "cc.AnimationClip"
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "c6LOemuvJKyYCqlF/yUJcr"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "c46/YsCPVOJYA4mWEpNYRx",
|
||||
"instance": null,
|
||||
"targetOverrides": null
|
||||
}
|
||||
]
|
||||
@@ -1 +0,0 @@
|
||||
{"ver":"1.1.50","importer":"prefab","imported":true,"uuid":"34fd7720-511b-4935-a1c6-d23e9e095faa","files":[".json"],"subMetas":{},"userData":{"syncNodeName":"up_red"}}
|
||||
|
Before Width: | Height: | Size: 99 KiB After Width: | Height: | Size: 190 KiB |
|
Before Width: | Height: | Size: 1.3 MiB After Width: | Height: | Size: 948 KiB |
213
assets/resources/gui/anim/iround.anim
Normal file
@@ -0,0 +1,213 @@
|
||||
[
|
||||
{
|
||||
"__type__": "cc.AnimationClip",
|
||||
"_name": "iround",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {
|
||||
"embeddedPlayerGroups": []
|
||||
},
|
||||
"_native": "",
|
||||
"sample": 5,
|
||||
"speed": 1,
|
||||
"wrapMode": 38,
|
||||
"enableTrsBlending": false,
|
||||
"_duration": 2.4,
|
||||
"_hash": 500763545,
|
||||
"_tracks": [
|
||||
{
|
||||
"__id__": 1
|
||||
}
|
||||
],
|
||||
"_exoticAnimation": null,
|
||||
"_events": [],
|
||||
"_embeddedPlayers": [],
|
||||
"_additiveSettings": {
|
||||
"__id__": 11
|
||||
},
|
||||
"_auxiliaryCurveEntries": []
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.VectorTrack",
|
||||
"_binding": {
|
||||
"__type__": "cc.animation.TrackBinding",
|
||||
"path": {
|
||||
"__id__": 2
|
||||
},
|
||||
"proxy": null
|
||||
},
|
||||
"_channels": [
|
||||
{
|
||||
"__id__": 3
|
||||
},
|
||||
{
|
||||
"__id__": 5
|
||||
},
|
||||
{
|
||||
"__id__": 7
|
||||
},
|
||||
{
|
||||
"__id__": 9
|
||||
}
|
||||
],
|
||||
"_nComponents": 3
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.TrackPath",
|
||||
"_paths": [
|
||||
"eulerAngles"
|
||||
]
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.Channel",
|
||||
"_curve": {
|
||||
"__id__": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.RealCurve",
|
||||
"_times": [
|
||||
0,
|
||||
2.4
|
||||
],
|
||||
"_values": [
|
||||
{
|
||||
"__type__": "cc.RealKeyframeValue",
|
||||
"interpolationMode": 0,
|
||||
"tangentWeightMode": 0,
|
||||
"value": 0,
|
||||
"rightTangent": 0,
|
||||
"rightTangentWeight": 1,
|
||||
"leftTangent": 0,
|
||||
"leftTangentWeight": 1,
|
||||
"easingMethod": 0,
|
||||
"__editorExtras__": {
|
||||
"tangentMode": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.RealKeyframeValue",
|
||||
"interpolationMode": 0,
|
||||
"tangentWeightMode": 0,
|
||||
"value": 0,
|
||||
"rightTangent": 0,
|
||||
"rightTangentWeight": 1,
|
||||
"leftTangent": 0,
|
||||
"leftTangentWeight": 1,
|
||||
"easingMethod": 0,
|
||||
"__editorExtras__": {
|
||||
"tangentMode": 0
|
||||
}
|
||||
}
|
||||
],
|
||||
"preExtrapolation": 1,
|
||||
"postExtrapolation": 1
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.Channel",
|
||||
"_curve": {
|
||||
"__id__": 6
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.RealCurve",
|
||||
"_times": [
|
||||
0,
|
||||
2.4
|
||||
],
|
||||
"_values": [
|
||||
{
|
||||
"__type__": "cc.RealKeyframeValue",
|
||||
"interpolationMode": 0,
|
||||
"tangentWeightMode": 0,
|
||||
"value": 0,
|
||||
"rightTangent": 0,
|
||||
"rightTangentWeight": 1,
|
||||
"leftTangent": 0,
|
||||
"leftTangentWeight": 1,
|
||||
"easingMethod": 0,
|
||||
"__editorExtras__": {
|
||||
"tangentMode": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.RealKeyframeValue",
|
||||
"interpolationMode": 0,
|
||||
"tangentWeightMode": 0,
|
||||
"value": 0,
|
||||
"rightTangent": 0,
|
||||
"rightTangentWeight": 1,
|
||||
"leftTangent": 0,
|
||||
"leftTangentWeight": 1,
|
||||
"easingMethod": 0,
|
||||
"__editorExtras__": {
|
||||
"tangentMode": 0
|
||||
}
|
||||
}
|
||||
],
|
||||
"preExtrapolation": 1,
|
||||
"postExtrapolation": 1
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.Channel",
|
||||
"_curve": {
|
||||
"__id__": 8
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.RealCurve",
|
||||
"_times": [
|
||||
0,
|
||||
2.4
|
||||
],
|
||||
"_values": [
|
||||
{
|
||||
"__type__": "cc.RealKeyframeValue",
|
||||
"interpolationMode": 0,
|
||||
"tangentWeightMode": 0,
|
||||
"value": 0,
|
||||
"rightTangent": 0,
|
||||
"rightTangentWeight": 1,
|
||||
"leftTangent": 0,
|
||||
"leftTangentWeight": 1,
|
||||
"easingMethod": 0,
|
||||
"__editorExtras__": {
|
||||
"tangentMode": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.RealKeyframeValue",
|
||||
"interpolationMode": 0,
|
||||
"tangentWeightMode": 0,
|
||||
"value": 360,
|
||||
"rightTangent": 0,
|
||||
"rightTangentWeight": 1,
|
||||
"leftTangent": 0,
|
||||
"leftTangentWeight": 1,
|
||||
"easingMethod": 0,
|
||||
"__editorExtras__": {
|
||||
"tangentMode": 0
|
||||
}
|
||||
}
|
||||
],
|
||||
"preExtrapolation": 1,
|
||||
"postExtrapolation": 1
|
||||
},
|
||||
{
|
||||
"__type__": "cc.animation.Channel",
|
||||
"_curve": {
|
||||
"__id__": 10
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.RealCurve",
|
||||
"_times": [],
|
||||
"_values": [],
|
||||
"preExtrapolation": 1,
|
||||
"postExtrapolation": 1
|
||||
},
|
||||
{
|
||||
"__type__": "cc.AnimationClipAdditiveSettings",
|
||||
"enabled": false,
|
||||
"refClip": null
|
||||
}
|
||||
]
|
||||
13
assets/resources/gui/anim/iround.anim.meta
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"ver": "2.0.3",
|
||||
"importer": "animation-clip",
|
||||
"imported": true,
|
||||
"uuid": "3466f525-e22b-4574-80ff-9c55fdc8c481",
|
||||
"files": [
|
||||
".cconb"
|
||||
],
|
||||
"subMetas": {},
|
||||
"userData": {
|
||||
"name": "iround"
|
||||
}
|
||||
}
|
||||
5172
assets/resources/gui/element/TIBox.prefab
Normal file
@@ -2,12 +2,12 @@
|
||||
"ver": "1.1.50",
|
||||
"importer": "prefab",
|
||||
"imported": true,
|
||||
"uuid": "deb4a1bb-3f47-4c7c-9be1-352518675a16",
|
||||
"uuid": "e2394eb1-27f0-4b7c-ace3-cfb3453eef99",
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {},
|
||||
"userData": {
|
||||
"syncNodeName": "up_green"
|
||||
"syncNodeName": "TIBox"
|
||||
}
|
||||
}
|
||||
@@ -257,7 +257,7 @@
|
||||
"value": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 75,
|
||||
"y": 80,
|
||||
"z": 0
|
||||
}
|
||||
},
|
||||
@@ -338,8 +338,8 @@
|
||||
],
|
||||
"value": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 160.26666666666668,
|
||||
"height": 200
|
||||
"width": 200.26666666666665,
|
||||
"height": 213.33333333333334
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -358,8 +358,8 @@
|
||||
],
|
||||
"value": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 160.26666666666668,
|
||||
"height": 200
|
||||
"width": 200.26666666666665,
|
||||
"height": 213.33333333333334
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -379,8 +379,8 @@
|
||||
],
|
||||
"value": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 160.26666666666668,
|
||||
"height": 200
|
||||
"width": 200.26666666666665,
|
||||
"height": 213.33333333333334
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -400,7 +400,7 @@
|
||||
],
|
||||
"value": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 152.26666666666668,
|
||||
"width": 192.26666666666665,
|
||||
"height": 150
|
||||
}
|
||||
},
|
||||
@@ -422,7 +422,7 @@
|
||||
"value": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 21,
|
||||
"y": 27.66666666666667,
|
||||
"z": 0
|
||||
}
|
||||
},
|
||||
@@ -443,7 +443,7 @@
|
||||
],
|
||||
"value": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 152.26666666666668,
|
||||
"width": 192.26666666666665,
|
||||
"height": 24
|
||||
}
|
||||
},
|
||||
@@ -465,7 +465,7 @@
|
||||
"value": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 84,
|
||||
"y": 90.66666666666667,
|
||||
"z": 0
|
||||
}
|
||||
},
|
||||
@@ -486,7 +486,7 @@
|
||||
],
|
||||
"value": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 140.26666666666668,
|
||||
"width": 180.26666666666665,
|
||||
"height": 150
|
||||
}
|
||||
},
|
||||
@@ -508,7 +508,7 @@
|
||||
"value": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 21,
|
||||
"y": 27.66666666666667,
|
||||
"z": 0
|
||||
}
|
||||
},
|
||||
@@ -529,8 +529,8 @@
|
||||
],
|
||||
"value": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 160.26666666666668,
|
||||
"height": 200
|
||||
"width": 200.26666666666665,
|
||||
"height": 213.33333333333334
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -550,8 +550,8 @@
|
||||
],
|
||||
"value": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 160.26666666666668,
|
||||
"height": 200
|
||||
"width": 200.26666666666665,
|
||||
"height": 213.33333333333334
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -571,7 +571,7 @@
|
||||
],
|
||||
"value": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 152.26666666666668,
|
||||
"width": 192.26666666666665,
|
||||
"height": 150
|
||||
}
|
||||
},
|
||||
@@ -593,7 +593,7 @@
|
||||
"value": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 21,
|
||||
"y": 27.66666666666667,
|
||||
"z": 0
|
||||
}
|
||||
},
|
||||
@@ -614,7 +614,7 @@
|
||||
],
|
||||
"value": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 152.26666666666668,
|
||||
"width": 192.26666666666665,
|
||||
"height": 24
|
||||
}
|
||||
},
|
||||
@@ -636,7 +636,7 @@
|
||||
"value": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 84,
|
||||
"y": 90.66666666666667,
|
||||
"z": 0
|
||||
}
|
||||
},
|
||||
@@ -657,7 +657,7 @@
|
||||
],
|
||||
"value": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 140.26666666666668,
|
||||
"width": 180.26666666666665,
|
||||
"height": 150
|
||||
}
|
||||
},
|
||||
@@ -679,7 +679,7 @@
|
||||
"value": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 21,
|
||||
"y": 27.66666666666667,
|
||||
"z": 0
|
||||
}
|
||||
},
|
||||
@@ -752,8 +752,8 @@
|
||||
],
|
||||
"value": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 160.26666666666668,
|
||||
"height": 200
|
||||
"width": 200.26666666666665,
|
||||
"height": 213.33333333333334
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -773,8 +773,8 @@
|
||||
],
|
||||
"value": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 160.26666666666668,
|
||||
"height": 200
|
||||
"width": 200.26666666666665,
|
||||
"height": 213.33333333333334
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -794,7 +794,7 @@
|
||||
],
|
||||
"value": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 152.26666666666668,
|
||||
"width": 192.26666666666665,
|
||||
"height": 150
|
||||
}
|
||||
},
|
||||
@@ -816,7 +816,7 @@
|
||||
"value": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 21,
|
||||
"y": 27.66666666666667,
|
||||
"z": 0
|
||||
}
|
||||
},
|
||||
@@ -837,7 +837,7 @@
|
||||
],
|
||||
"value": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 152.26666666666668,
|
||||
"width": 192.26666666666665,
|
||||
"height": 24
|
||||
}
|
||||
},
|
||||
@@ -859,7 +859,7 @@
|
||||
"value": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 84,
|
||||
"y": 90.66666666666667,
|
||||
"z": 0
|
||||
}
|
||||
},
|
||||
@@ -880,7 +880,7 @@
|
||||
],
|
||||
"value": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 140.26666666666668,
|
||||
"width": 180.26666666666665,
|
||||
"height": 150
|
||||
}
|
||||
},
|
||||
@@ -902,7 +902,7 @@
|
||||
"value": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 21,
|
||||
"y": 27.66666666666667,
|
||||
"z": 0
|
||||
}
|
||||
},
|
||||
@@ -937,7 +937,7 @@
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 50.892,
|
||||
"y": 59.957,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
@@ -1083,7 +1083,7 @@
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 89.47899999999998,
|
||||
"y": 96.661,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
@@ -1244,6 +1244,8 @@
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "08p7XmUnpCJKHgFSs+XBKi",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
@@ -1260,8 +1262,8 @@
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 90,
|
||||
"height": 79.99999999999997
|
||||
"width": 120,
|
||||
"height": 90
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
@@ -1312,8 +1314,8 @@
|
||||
"_target": null,
|
||||
"_left": 15,
|
||||
"_right": 15,
|
||||
"_top": 20.521,
|
||||
"_bottom": 49.479000000000006,
|
||||
"_top": 18.339,
|
||||
"_bottom": 51.66100000000001,
|
||||
"_horizontalCenter": 0,
|
||||
"_verticalCenter": 0,
|
||||
"_isAbsLeft": true,
|
||||
@@ -1418,7 +1420,7 @@
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 131.674,
|
||||
"y": 141.674,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
@@ -3037,8 +3039,8 @@
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 120,
|
||||
"height": 150
|
||||
"width": 150,
|
||||
"height": 160
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
|
||||
15693
assets/resources/gui/element/heroInfo.prefab
Normal file
13
assets/resources/gui/element/heroInfo.prefab.meta
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"ver": "1.1.50",
|
||||
"importer": "prefab",
|
||||
"imported": true,
|
||||
"uuid": "620ee559-61bc-470d-b85d-e881bac42067",
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {},
|
||||
"userData": {
|
||||
"syncNodeName": "heroInfo"
|
||||
}
|
||||
}
|
||||
@@ -34,7 +34,7 @@
|
||||
<key>spriteSourceSize</key>
|
||||
<string>{672,378}</string>
|
||||
<key>textureRect</key>
|
||||
<string>{{1349,1095},{616,182}}</string>
|
||||
<string>{{675,1669},{616,182}}</string>
|
||||
<key>textureRotated</key>
|
||||
<false/>
|
||||
</dict>
|
||||
@@ -51,7 +51,7 @@
|
||||
<key>spriteSourceSize</key>
|
||||
<string>{672,378}</string>
|
||||
<key>textureRect</key>
|
||||
<string>{{675,1775},{672,92}}</string>
|
||||
<string>{{675,1853},{672,92}}</string>
|
||||
<key>textureRotated</key>
|
||||
<false/>
|
||||
</dict>
|
||||
@@ -68,9 +68,9 @@
|
||||
<key>spriteSourceSize</key>
|
||||
<string>{672,378}</string>
|
||||
<key>textureRect</key>
|
||||
<string>{{675,1869},{672,76}}</string>
|
||||
<string>{{1931,675},{672,76}}</string>
|
||||
<key>textureRotated</key>
|
||||
<false/>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>0l5_mountains.png</key>
|
||||
<dict>
|
||||
@@ -102,7 +102,7 @@
|
||||
<key>spriteSourceSize</key>
|
||||
<string>{672,378}</string>
|
||||
<key>textureRect</key>
|
||||
<string>{{1,1589},{672,162}}</string>
|
||||
<string>{{675,1193},{672,162}}</string>
|
||||
<key>textureRotated</key>
|
||||
<false/>
|
||||
</dict>
|
||||
@@ -119,9 +119,9 @@
|
||||
<key>spriteSourceSize</key>
|
||||
<string>{672,378}</string>
|
||||
<key>textureRect</key>
|
||||
<string>{{675,1507},{672,138}}</string>
|
||||
<string>{{1663,675},{672,138}}</string>
|
||||
<key>textureRotated</key>
|
||||
<false/>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>0l8_ground.png</key>
|
||||
<dict>
|
||||
@@ -136,9 +136,9 @@
|
||||
<key>spriteSourceSize</key>
|
||||
<string>{672,378}</string>
|
||||
<key>textureRect</key>
|
||||
<string>{{1349,381},{672,216}}</string>
|
||||
<string>{{1729,1},{672,216}}</string>
|
||||
<key>textureRotated</key>
|
||||
<false/>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>1l1_wall.png</key>
|
||||
<dict>
|
||||
@@ -221,9 +221,9 @@
|
||||
<key>spriteSourceSize</key>
|
||||
<string>{672,378}</string>
|
||||
<key>textureRect</key>
|
||||
<string>{{1349,1279},{662,90}}</string>
|
||||
<string>{{1349,1349},{662,90}}</string>
|
||||
<key>textureRotated</key>
|
||||
<true/>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>1l6_ground.png</key>
|
||||
<dict>
|
||||
@@ -238,9 +238,9 @@
|
||||
<key>spriteSourceSize</key>
|
||||
<string>{672,378}</string>
|
||||
<key>textureRect</key>
|
||||
<string>{{1441,1279},{672,76}}</string>
|
||||
<string>{{1293,1699},{672,76}}</string>
|
||||
<key>textureRotated</key>
|
||||
<true/>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>3l1_sky.png</key>
|
||||
<dict>
|
||||
@@ -272,9 +272,9 @@
|
||||
<key>spriteSourceSize</key>
|
||||
<string>{672,378}</string>
|
||||
<key>textureRect</key>
|
||||
<string>{{675,1353},{672,152}}</string>
|
||||
<string>{{1509,675},{672,152}}</string>
|
||||
<key>textureRotated</key>
|
||||
<false/>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>3l3_pyramid.png</key>
|
||||
<dict>
|
||||
@@ -289,9 +289,9 @@
|
||||
<key>spriteSourceSize</key>
|
||||
<string>{672,378}</string>
|
||||
<key>textureRect</key>
|
||||
<string>{{1621,1279},{528,154}}</string>
|
||||
<string>{{1349,1543},{528,154}}</string>
|
||||
<key>textureRotated</key>
|
||||
<true/>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>3l4_bg-ground01.png</key>
|
||||
<dict>
|
||||
@@ -306,7 +306,7 @@
|
||||
<key>spriteSourceSize</key>
|
||||
<string>{672,378}</string>
|
||||
<key>textureRect</key>
|
||||
<string>{{1,1753},{672,156}}</string>
|
||||
<string>{{675,1357},{672,156}}</string>
|
||||
<key>textureRotated</key>
|
||||
<false/>
|
||||
</dict>
|
||||
@@ -323,7 +323,7 @@
|
||||
<key>spriteSourceSize</key>
|
||||
<string>{672,378}</string>
|
||||
<key>textureRect</key>
|
||||
<string>{{1349,599},{672,180}}</string>
|
||||
<string>{{1,1589},{672,180}}</string>
|
||||
<key>textureRotated</key>
|
||||
<false/>
|
||||
</dict>
|
||||
@@ -340,9 +340,9 @@
|
||||
<key>spriteSourceSize</key>
|
||||
<string>{672,378}</string>
|
||||
<key>textureRect</key>
|
||||
<string>{{675,1647},{672,126}}</string>
|
||||
<string>{{1803,675},{672,126}}</string>
|
||||
<key>textureRotated</key>
|
||||
<false/>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>3l7_ground.png</key>
|
||||
<dict>
|
||||
@@ -357,7 +357,24 @@
|
||||
<key>spriteSourceSize</key>
|
||||
<string>{672,378}</string>
|
||||
<key>textureRect</key>
|
||||
<string>{{1349,941},{672,152}}</string>
|
||||
<string>{{675,1515},{672,152}}</string>
|
||||
<key>textureRotated</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>Icon_Battle.png</key>
|
||||
<dict>
|
||||
<key>aliases</key>
|
||||
<array/>
|
||||
<key>anchor</key>
|
||||
<string>{0.5,0.5}</string>
|
||||
<key>spriteOffset</key>
|
||||
<string>{0,0}</string>
|
||||
<key>spriteSize</key>
|
||||
<string>{64,57}</string>
|
||||
<key>spriteSourceSize</key>
|
||||
<string>{64,57}</string>
|
||||
<key>textureRect</key>
|
||||
<string>{{1349,1894},{64,57}}</string>
|
||||
<key>textureRotated</key>
|
||||
<false/>
|
||||
</dict>
|
||||
@@ -374,9 +391,9 @@
|
||||
<key>spriteSourceSize</key>
|
||||
<string>{68,51}</string>
|
||||
<key>textureRect</key>
|
||||
<string>{{1777,1626},{68,51}}</string>
|
||||
<string>{{1879,1629},{68,51}}</string>
|
||||
<key>textureRotated</key>
|
||||
<false/>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>Stone_A_04.png</key>
|
||||
<dict>
|
||||
@@ -391,9 +408,9 @@
|
||||
<key>spriteSourceSize</key>
|
||||
<string>{60,51}</string>
|
||||
<key>textureRect</key>
|
||||
<string>{{1850,1562},{60,51}}</string>
|
||||
<string>{{1293,1777},{60,51}}</string>
|
||||
<key>textureRotated</key>
|
||||
<false/>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>Stone_A_07.png</key>
|
||||
<dict>
|
||||
@@ -408,9 +425,9 @@
|
||||
<key>spriteSourceSize</key>
|
||||
<string>{107,51}</string>
|
||||
<key>textureRect</key>
|
||||
<string>{{1621,1809},{107,51}}</string>
|
||||
<string>{{1947,1},{107,51}}</string>
|
||||
<key>textureRotated</key>
|
||||
<false/>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>Stone_B_01.png</key>
|
||||
<dict>
|
||||
@@ -425,7 +442,7 @@
|
||||
<key>spriteSourceSize</key>
|
||||
<string>{68,70}</string>
|
||||
<key>textureRect</key>
|
||||
<string>{{1519,1865},{68,70}}</string>
|
||||
<string>{{1935,1441},{68,70}}</string>
|
||||
<key>textureRotated</key>
|
||||
<false/>
|
||||
</dict>
|
||||
@@ -442,7 +459,7 @@
|
||||
<key>spriteSourceSize</key>
|
||||
<string>{66,45}</string>
|
||||
<key>textureRect</key>
|
||||
<string>{{1777,1679},{66,45}}</string>
|
||||
<string>{{1415,1894},{66,45}}</string>
|
||||
<key>textureRotated</key>
|
||||
<false/>
|
||||
</dict>
|
||||
@@ -459,7 +476,7 @@
|
||||
<key>spriteSourceSize</key>
|
||||
<string>{35,22}</string>
|
||||
<key>textureRect</key>
|
||||
<string>{{1730,1809},{35,22}}</string>
|
||||
<string>{{1293,1669},{35,22}}</string>
|
||||
<key>textureRotated</key>
|
||||
<false/>
|
||||
</dict>
|
||||
@@ -476,9 +493,9 @@
|
||||
<key>spriteSourceSize</key>
|
||||
<string>{71,62}</string>
|
||||
<key>textureRect</key>
|
||||
<string>{{1777,1562},{71,62}}</string>
|
||||
<string>{{1899,1777},{71,62}}</string>
|
||||
<key>textureRotated</key>
|
||||
<false/>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>Stone_B_05.png</key>
|
||||
<dict>
|
||||
@@ -493,7 +510,7 @@
|
||||
<key>spriteSourceSize</key>
|
||||
<string>{84,43}</string>
|
||||
<key>textureRect</key>
|
||||
<string>{{1967,1095},{84,43}}</string>
|
||||
<string>{{1879,1543},{84,43}}</string>
|
||||
<key>textureRotated</key>
|
||||
<true/>
|
||||
</dict>
|
||||
@@ -510,7 +527,7 @@
|
||||
<key>spriteSourceSize</key>
|
||||
<string>{31,15}</string>
|
||||
<key>textureRect</key>
|
||||
<string>{{1519,1937},{31,15}}</string>
|
||||
<string>{{1947,110},{31,15}}</string>
|
||||
<key>textureRotated</key>
|
||||
<false/>
|
||||
</dict>
|
||||
@@ -527,7 +544,41 @@
|
||||
<key>spriteSourceSize</key>
|
||||
<string>{44,16}</string>
|
||||
<key>textureRect</key>
|
||||
<string>{{1,1911},{44,16}}</string>
|
||||
<string>{{1,1931},{44,16}}</string>
|
||||
<key>textureRotated</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>Title_01_NoDeco_Orange.Png</key>
|
||||
<dict>
|
||||
<key>aliases</key>
|
||||
<array/>
|
||||
<key>anchor</key>
|
||||
<string>{0.5,0.5}</string>
|
||||
<key>spriteOffset</key>
|
||||
<string>{0,0}</string>
|
||||
<key>spriteSize</key>
|
||||
<string>{273,115}</string>
|
||||
<key>spriteSourceSize</key>
|
||||
<string>{273,115}</string>
|
||||
<key>textureRect</key>
|
||||
<string>{{1349,1777},{273,115}}</string>
|
||||
<key>textureRotated</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>Title_01_NoDeco_Tangerine.Png</key>
|
||||
<dict>
|
||||
<key>aliases</key>
|
||||
<array/>
|
||||
<key>anchor</key>
|
||||
<string>{0.5,0.5}</string>
|
||||
<key>spriteOffset</key>
|
||||
<string>{0,0}</string>
|
||||
<key>spriteSize</key>
|
||||
<string>{273,115}</string>
|
||||
<key>spriteSourceSize</key>
|
||||
<string>{273,115}</string>
|
||||
<key>textureRect</key>
|
||||
<string>{{1624,1777},{273,115}}</string>
|
||||
<key>textureRotated</key>
|
||||
<false/>
|
||||
</dict>
|
||||
@@ -546,7 +597,7 @@
|
||||
<key>textureRect</key>
|
||||
<string>{{1349,1},{672,378}}</string>
|
||||
<key>textureRotated</key>
|
||||
<false/>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>l2_mountains.png</key>
|
||||
<dict>
|
||||
@@ -578,9 +629,9 @@
|
||||
<key>spriteSourceSize</key>
|
||||
<string>{672,378}</string>
|
||||
<key>textureRect</key>
|
||||
<string>{{1519,1279},{584,100}}</string>
|
||||
<string>{{1349,1441},{584,100}}</string>
|
||||
<key>textureRotated</key>
|
||||
<true/>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>l4_bg-ground01.png</key>
|
||||
<dict>
|
||||
@@ -595,9 +646,9 @@
|
||||
<key>spriteSourceSize</key>
|
||||
<string>{672,378}</string>
|
||||
<key>textureRect</key>
|
||||
<string>{{675,1193},{672,158}}</string>
|
||||
<string>{{1349,675},{672,158}}</string>
|
||||
<key>textureRotated</key>
|
||||
<false/>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>l5_bg-ground02.png</key>
|
||||
<dict>
|
||||
@@ -612,7 +663,7 @@
|
||||
<key>spriteSourceSize</key>
|
||||
<string>{672,378}</string>
|
||||
<key>textureRect</key>
|
||||
<string>{{1349,781},{672,158}}</string>
|
||||
<string>{{1,1771},{672,158}}</string>
|
||||
<key>textureRotated</key>
|
||||
<false/>
|
||||
</dict>
|
||||
@@ -633,23 +684,6 @@
|
||||
<key>textureRotated</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>logo2.png</key>
|
||||
<dict>
|
||||
<key>aliases</key>
|
||||
<array/>
|
||||
<key>anchor</key>
|
||||
<string>{0.5,0.5}</string>
|
||||
<key>spriteOffset</key>
|
||||
<string>{1,2}</string>
|
||||
<key>spriteSize</key>
|
||||
<string>{281,231}</string>
|
||||
<key>spriteSourceSize</key>
|
||||
<string>{307,307}</string>
|
||||
<key>textureRect</key>
|
||||
<string>{{1777,1279},{281,231}}</string>
|
||||
<key>textureRotated</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>metadata</key>
|
||||
<dict>
|
||||
@@ -662,9 +696,9 @@
|
||||
<key>realTextureFileName</key>
|
||||
<string>mps.png</string>
|
||||
<key>size</key>
|
||||
<string>{2022,1953}</string>
|
||||
<string>{2012,1952}</string>
|
||||
<key>smartupdate</key>
|
||||
<string>$TexturePacker:SmartUpdate:c995e79e2727f3d5b64d2e4345b903e7:ff13e6153e38a1ee043318ccbb0a835f:4c0e3901f0d5fcb2cf0cd4dcba1c7f8b$</string>
|
||||
<string>$TexturePacker:SmartUpdate:afc599cf42d3db8475edd4bf42d848d7:62891583945cafa92fc112c0ecd848ee:4c0e3901f0d5fcb2cf0cd4dcba1c7f8b$</string>
|
||||
<key>textureFileName</key>
|
||||
<string>mps.png</string>
|
||||
</dict>
|
||||
|
||||
@@ -7,6 +7,52 @@
|
||||
".json"
|
||||
],
|
||||
"subMetas": {
|
||||
"57674": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "81af97ed-7940-45e6-91a1-21bd0df1a343@57674",
|
||||
"displayName": "",
|
||||
"id": "57674",
|
||||
"name": "Icon_Battle",
|
||||
"userData": {
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 1349,
|
||||
"trimY": 1894,
|
||||
"width": 64,
|
||||
"height": 57,
|
||||
"rawWidth": 64,
|
||||
"rawHeight": 57,
|
||||
"borderTop": 0,
|
||||
"borderBottom": 0,
|
||||
"borderLeft": 0,
|
||||
"borderRight": 0,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [],
|
||||
"indexes": [],
|
||||
"uv": [],
|
||||
"nuv": [],
|
||||
"minPos": [],
|
||||
"maxPos": []
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "ca2b26a5-8d54-49ec-bdaf-e9f777afc9cb@6c48a",
|
||||
"atlasUuid": "81af97ed-7940-45e6-91a1-21bd0df1a343",
|
||||
"trimType": "auto"
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"58094": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "81af97ed-7940-45e6-91a1-21bd0df1a343@58094",
|
||||
@@ -53,6 +99,98 @@
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"63222": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "81af97ed-7940-45e6-91a1-21bd0df1a343@63222",
|
||||
"displayName": "",
|
||||
"id": "63222",
|
||||
"name": "Title_01_NoDeco_Tangerine",
|
||||
"userData": {
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 1624,
|
||||
"trimY": 1777,
|
||||
"width": 273,
|
||||
"height": 115,
|
||||
"rawWidth": 273,
|
||||
"rawHeight": 115,
|
||||
"borderTop": 0,
|
||||
"borderBottom": 0,
|
||||
"borderLeft": 0,
|
||||
"borderRight": 0,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [],
|
||||
"indexes": [],
|
||||
"uv": [],
|
||||
"nuv": [],
|
||||
"minPos": [],
|
||||
"maxPos": []
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "ca2b26a5-8d54-49ec-bdaf-e9f777afc9cb@6c48a",
|
||||
"atlasUuid": "81af97ed-7940-45e6-91a1-21bd0df1a343",
|
||||
"trimType": "auto"
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"86850": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "81af97ed-7940-45e6-91a1-21bd0df1a343@86850",
|
||||
"displayName": "",
|
||||
"id": "86850",
|
||||
"name": "Title_01_NoDeco_Orange",
|
||||
"userData": {
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 1349,
|
||||
"trimY": 1777,
|
||||
"width": 273,
|
||||
"height": 115,
|
||||
"rawWidth": 273,
|
||||
"rawHeight": 115,
|
||||
"borderTop": 0,
|
||||
"borderBottom": 0,
|
||||
"borderLeft": 135,
|
||||
"borderRight": 138,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [],
|
||||
"indexes": [],
|
||||
"uv": [],
|
||||
"nuv": [],
|
||||
"minPos": [],
|
||||
"maxPos": []
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "ca2b26a5-8d54-49ec-bdaf-e9f777afc9cb@6c48a",
|
||||
"atlasUuid": "81af97ed-7940-45e6-91a1-21bd0df1a343",
|
||||
"trimType": "auto"
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"4f746": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "81af97ed-7940-45e6-91a1-21bd0df1a343@4f746",
|
||||
@@ -110,8 +248,8 @@
|
||||
"rotated": false,
|
||||
"offsetX": -4,
|
||||
"offsetY": 82,
|
||||
"trimX": 1349,
|
||||
"trimY": 1095,
|
||||
"trimX": 675,
|
||||
"trimY": 1669,
|
||||
"width": 616,
|
||||
"height": 182,
|
||||
"rawWidth": 672,
|
||||
@@ -157,7 +295,7 @@
|
||||
"offsetX": 0,
|
||||
"offsetY": -3,
|
||||
"trimX": 675,
|
||||
"trimY": 1775,
|
||||
"trimY": 1853,
|
||||
"width": 672,
|
||||
"height": 92,
|
||||
"rawWidth": 672,
|
||||
@@ -199,11 +337,11 @@
|
||||
"name": "0l4_clouds02",
|
||||
"userData": {
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"rotated": true,
|
||||
"offsetX": 0,
|
||||
"offsetY": 122,
|
||||
"trimX": 675,
|
||||
"trimY": 1869,
|
||||
"trimX": 1931,
|
||||
"trimY": 675,
|
||||
"width": 672,
|
||||
"height": 76,
|
||||
"rawWidth": 672,
|
||||
@@ -294,8 +432,8 @@
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": -108,
|
||||
"trimX": 1,
|
||||
"trimY": 1589,
|
||||
"trimX": 675,
|
||||
"trimY": 1193,
|
||||
"width": 672,
|
||||
"height": 162,
|
||||
"rawWidth": 672,
|
||||
@@ -337,11 +475,11 @@
|
||||
"name": "0l7_ground02",
|
||||
"userData": {
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"rotated": true,
|
||||
"offsetX": 0,
|
||||
"offsetY": -120,
|
||||
"trimX": 675,
|
||||
"trimY": 1507,
|
||||
"trimX": 1663,
|
||||
"trimY": 675,
|
||||
"width": 672,
|
||||
"height": 138,
|
||||
"rawWidth": 672,
|
||||
@@ -383,11 +521,11 @@
|
||||
"name": "0l8_ground",
|
||||
"userData": {
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"rotated": true,
|
||||
"offsetX": 0,
|
||||
"offsetY": -81,
|
||||
"trimX": 1349,
|
||||
"trimY": 381,
|
||||
"trimX": 1729,
|
||||
"trimY": 1,
|
||||
"width": 672,
|
||||
"height": 216,
|
||||
"rawWidth": 672,
|
||||
@@ -613,11 +751,11 @@
|
||||
"name": "1l5_crystals",
|
||||
"userData": {
|
||||
"trimThreshold": 1,
|
||||
"rotated": true,
|
||||
"rotated": false,
|
||||
"offsetX": -2,
|
||||
"offsetY": -85,
|
||||
"trimX": 1349,
|
||||
"trimY": 1279,
|
||||
"trimY": 1349,
|
||||
"width": 662,
|
||||
"height": 90,
|
||||
"rawWidth": 672,
|
||||
@@ -659,11 +797,11 @@
|
||||
"name": "1l6_ground",
|
||||
"userData": {
|
||||
"trimThreshold": 1,
|
||||
"rotated": true,
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": -151,
|
||||
"trimX": 1441,
|
||||
"trimY": 1279,
|
||||
"trimX": 1293,
|
||||
"trimY": 1699,
|
||||
"width": 672,
|
||||
"height": 76,
|
||||
"rawWidth": 672,
|
||||
@@ -705,11 +843,11 @@
|
||||
"name": "3l2_clouds",
|
||||
"userData": {
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"rotated": true,
|
||||
"offsetX": 0,
|
||||
"offsetY": -48,
|
||||
"trimX": 675,
|
||||
"trimY": 1353,
|
||||
"trimX": 1509,
|
||||
"trimY": 675,
|
||||
"width": 672,
|
||||
"height": 152,
|
||||
"rawWidth": 672,
|
||||
@@ -751,11 +889,11 @@
|
||||
"name": "3l3_pyramid",
|
||||
"userData": {
|
||||
"trimThreshold": 1,
|
||||
"rotated": true,
|
||||
"rotated": false,
|
||||
"offsetX": 2,
|
||||
"offsetY": -7,
|
||||
"trimX": 1621,
|
||||
"trimY": 1279,
|
||||
"trimX": 1349,
|
||||
"trimY": 1543,
|
||||
"width": 528,
|
||||
"height": 154,
|
||||
"rawWidth": 672,
|
||||
@@ -800,8 +938,8 @@
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": -111,
|
||||
"trimX": 1,
|
||||
"trimY": 1753,
|
||||
"trimX": 675,
|
||||
"trimY": 1357,
|
||||
"width": 672,
|
||||
"height": 156,
|
||||
"rawWidth": 672,
|
||||
@@ -846,8 +984,8 @@
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": -99,
|
||||
"trimX": 1349,
|
||||
"trimY": 599,
|
||||
"trimX": 1,
|
||||
"trimY": 1589,
|
||||
"width": 672,
|
||||
"height": 180,
|
||||
"rawWidth": 672,
|
||||
@@ -889,11 +1027,11 @@
|
||||
"name": "3l6_bg-ground03",
|
||||
"userData": {
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"rotated": true,
|
||||
"offsetX": 0,
|
||||
"offsetY": -126,
|
||||
"trimX": 675,
|
||||
"trimY": 1647,
|
||||
"trimX": 1803,
|
||||
"trimY": 675,
|
||||
"width": 672,
|
||||
"height": 126,
|
||||
"rawWidth": 672,
|
||||
@@ -938,8 +1076,8 @@
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": -113,
|
||||
"trimX": 1349,
|
||||
"trimY": 941,
|
||||
"trimX": 675,
|
||||
"trimY": 1515,
|
||||
"width": 672,
|
||||
"height": 152,
|
||||
"rawWidth": 672,
|
||||
@@ -981,11 +1119,11 @@
|
||||
"name": "Stone_A_01",
|
||||
"userData": {
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"rotated": true,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 1777,
|
||||
"trimY": 1626,
|
||||
"trimX": 1879,
|
||||
"trimY": 1629,
|
||||
"width": 68,
|
||||
"height": 51,
|
||||
"rawWidth": 68,
|
||||
@@ -1027,11 +1165,11 @@
|
||||
"name": "Stone_A_04",
|
||||
"userData": {
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"rotated": true,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 1850,
|
||||
"trimY": 1562,
|
||||
"trimX": 1293,
|
||||
"trimY": 1777,
|
||||
"width": 60,
|
||||
"height": 51,
|
||||
"rawWidth": 60,
|
||||
@@ -1073,11 +1211,11 @@
|
||||
"name": "Stone_A_07",
|
||||
"userData": {
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"rotated": true,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 1621,
|
||||
"trimY": 1809,
|
||||
"trimX": 1947,
|
||||
"trimY": 1,
|
||||
"width": 107,
|
||||
"height": 51,
|
||||
"rawWidth": 107,
|
||||
@@ -1122,8 +1260,8 @@
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 1519,
|
||||
"trimY": 1865,
|
||||
"trimX": 1935,
|
||||
"trimY": 1441,
|
||||
"width": 68,
|
||||
"height": 70,
|
||||
"rawWidth": 68,
|
||||
@@ -1168,8 +1306,8 @@
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 1777,
|
||||
"trimY": 1679,
|
||||
"trimX": 1415,
|
||||
"trimY": 1894,
|
||||
"width": 66,
|
||||
"height": 45,
|
||||
"rawWidth": 66,
|
||||
@@ -1214,8 +1352,8 @@
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 1730,
|
||||
"trimY": 1809,
|
||||
"trimX": 1293,
|
||||
"trimY": 1669,
|
||||
"width": 35,
|
||||
"height": 22,
|
||||
"rawWidth": 35,
|
||||
@@ -1257,11 +1395,11 @@
|
||||
"name": "Stone_B_04",
|
||||
"userData": {
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"rotated": true,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 1777,
|
||||
"trimY": 1562,
|
||||
"trimX": 1899,
|
||||
"trimY": 1777,
|
||||
"width": 71,
|
||||
"height": 62,
|
||||
"rawWidth": 71,
|
||||
@@ -1306,8 +1444,8 @@
|
||||
"rotated": true,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 1967,
|
||||
"trimY": 1095,
|
||||
"trimX": 1879,
|
||||
"trimY": 1543,
|
||||
"width": 84,
|
||||
"height": 43,
|
||||
"rawWidth": 84,
|
||||
@@ -1352,8 +1490,8 @@
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 1519,
|
||||
"trimY": 1937,
|
||||
"trimX": 1947,
|
||||
"trimY": 110,
|
||||
"width": 31,
|
||||
"height": 15,
|
||||
"rawWidth": 31,
|
||||
@@ -1399,7 +1537,7 @@
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 1,
|
||||
"trimY": 1911,
|
||||
"trimY": 1931,
|
||||
"width": 44,
|
||||
"height": 16,
|
||||
"rawWidth": 44,
|
||||
@@ -1441,7 +1579,7 @@
|
||||
"name": "l1_sky",
|
||||
"userData": {
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"rotated": true,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 1349,
|
||||
@@ -1533,11 +1671,11 @@
|
||||
"name": "l3_clouds",
|
||||
"userData": {
|
||||
"trimThreshold": 1,
|
||||
"rotated": true,
|
||||
"rotated": false,
|
||||
"offsetX": -6,
|
||||
"offsetY": 89,
|
||||
"trimX": 1519,
|
||||
"trimY": 1279,
|
||||
"trimX": 1349,
|
||||
"trimY": 1441,
|
||||
"width": 584,
|
||||
"height": 100,
|
||||
"rawWidth": 672,
|
||||
@@ -1579,11 +1717,11 @@
|
||||
"name": "l4_bg-ground01",
|
||||
"userData": {
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"rotated": true,
|
||||
"offsetX": 0,
|
||||
"offsetY": -110,
|
||||
"trimX": 675,
|
||||
"trimY": 1193,
|
||||
"trimX": 1349,
|
||||
"trimY": 675,
|
||||
"width": 672,
|
||||
"height": 158,
|
||||
"rawWidth": 672,
|
||||
@@ -1628,8 +1766,8 @@
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": -110,
|
||||
"trimX": 1349,
|
||||
"trimY": 781,
|
||||
"trimX": 1,
|
||||
"trimY": 1771,
|
||||
"width": 672,
|
||||
"height": 158,
|
||||
"rawWidth": 672,
|
||||
@@ -1708,52 +1846,6 @@
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
},
|
||||
"14c74": {
|
||||
"importer": "sprite-frame",
|
||||
"uuid": "81af97ed-7940-45e6-91a1-21bd0df1a343@14c74",
|
||||
"displayName": "",
|
||||
"id": "14c74",
|
||||
"name": "logo2",
|
||||
"userData": {
|
||||
"trimThreshold": 1,
|
||||
"rotated": true,
|
||||
"offsetX": 1,
|
||||
"offsetY": 2,
|
||||
"trimX": 1777,
|
||||
"trimY": 1279,
|
||||
"width": 281,
|
||||
"height": 231,
|
||||
"rawWidth": 307,
|
||||
"rawHeight": 307,
|
||||
"borderTop": 0,
|
||||
"borderBottom": 0,
|
||||
"borderLeft": 0,
|
||||
"borderRight": 0,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
"pivotY": 0.5,
|
||||
"meshType": 0,
|
||||
"vertices": {
|
||||
"rawPosition": [],
|
||||
"indexes": [],
|
||||
"uv": [],
|
||||
"nuv": [],
|
||||
"minPos": [],
|
||||
"maxPos": []
|
||||
},
|
||||
"isUuid": true,
|
||||
"imageUuidOrDatabaseUri": "ca2b26a5-8d54-49ec-bdaf-e9f777afc9cb@6c48a",
|
||||
"atlasUuid": "81af97ed-7940-45e6-91a1-21bd0df1a343",
|
||||
"trimType": "auto"
|
||||
},
|
||||
"ver": "1.0.12",
|
||||
"imported": true,
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {}
|
||||
}
|
||||
},
|
||||
"userData": {
|
||||
|
||||
|
Before Width: | Height: | Size: 469 KiB After Width: | Height: | Size: 396 KiB |
|
Before Width: | Height: | Size: 962 KiB After Width: | Height: | Size: 1.0 MiB |
@@ -116,8 +116,8 @@
|
||||
"height": 54,
|
||||
"rawWidth": 89,
|
||||
"rawHeight": 54,
|
||||
"borderTop": 0,
|
||||
"borderBottom": 0,
|
||||
"borderTop": 26,
|
||||
"borderBottom": 26,
|
||||
"borderLeft": 44,
|
||||
"borderRight": 44,
|
||||
"packable": true,
|
||||
@@ -576,8 +576,8 @@
|
||||
"height": 45,
|
||||
"rawWidth": 52,
|
||||
"rawHeight": 45,
|
||||
"borderTop": 0,
|
||||
"borderBottom": 0,
|
||||
"borderTop": 22,
|
||||
"borderBottom": 23,
|
||||
"borderLeft": 26,
|
||||
"borderRight": 26,
|
||||
"packable": true,
|
||||
@@ -4992,8 +4992,8 @@
|
||||
"height": 45,
|
||||
"rawWidth": 81,
|
||||
"rawHeight": 45,
|
||||
"borderTop": 0,
|
||||
"borderBottom": 0,
|
||||
"borderTop": 22,
|
||||
"borderBottom": 22,
|
||||
"borderLeft": 40,
|
||||
"borderRight": 40,
|
||||
"packable": true,
|
||||
@@ -6096,10 +6096,10 @@
|
||||
"height": 39,
|
||||
"rawWidth": 37,
|
||||
"rawHeight": 39,
|
||||
"borderTop": 0,
|
||||
"borderBottom": 0,
|
||||
"borderLeft": 0,
|
||||
"borderRight": 0,
|
||||
"borderTop": 19,
|
||||
"borderBottom": 18,
|
||||
"borderLeft": 19,
|
||||
"borderRight": 18,
|
||||
"packable": true,
|
||||
"pixelsToUnit": 100,
|
||||
"pivotX": 0.5,
|
||||
|
||||
@@ -68,6 +68,7 @@ const TRIGGER_KEYS: SkillTriggerType[] = [
|
||||
SkillTriggerType.Call,
|
||||
SkillTriggerType.Dead,
|
||||
SkillTriggerType.FStart,
|
||||
SkillTriggerType.FEnd,
|
||||
SkillTriggerType.Atking,
|
||||
SkillTriggerType.Atked,
|
||||
];
|
||||
@@ -80,11 +81,13 @@ const PLACEHOLDER_PATTERN = /\{(\w+)\}/g;
|
||||
* atking/atked 为周期循环触发(运行时按次数取模判定),拼为"每攻击N次"/"每受击N次"
|
||||
* 表达循环语义(N=1 时退化为"每次攻击"/"每次受击");其余类型直接用触发名(召唤/死亡后/回合开始)。
|
||||
*/
|
||||
function buildTriggerLabel(type: SkillTriggerType, tNum: number): string {
|
||||
function buildTriggerLabel(type: SkillTriggerType, tNum: number, chance?: number): string {
|
||||
if (type === SkillTriggerType.Atking || type === SkillTriggerType.Atked) {
|
||||
// 配置了 t_chance 且 < 100 时追加概率说明(保底叠加为隐藏机制,不在文案展示)
|
||||
const chanceSeg = chance !== undefined && chance < 100 ? `(${valueRich(Math.round(chance))}%概率)` : "";
|
||||
return tNum <= 1
|
||||
? `每次${SkillTriggerName[type]}`
|
||||
: `每${SkillTriggerName[type]}${valueRich(tNum)}次`;
|
||||
? `每次${SkillTriggerName[type]}${chanceSeg}`
|
||||
: `每${SkillTriggerName[type]}${valueRich(tNum)}次${chanceSeg}`;
|
||||
}
|
||||
return SkillTriggerName[type];
|
||||
}
|
||||
@@ -136,18 +139,25 @@ function getBuffValue(skill: SkillConfig): number {
|
||||
* Why: 数值不写死在模板里,overrides 调整档位数值时文案自动同步。
|
||||
* @param tmpl 描述模板(含占位符)
|
||||
* @param skill mergeSkillParams 合并后的技能配置
|
||||
* @param extra 条目级参数占位符(触发技能的 t_chance/pity_add 不在 SkillConfig,由调用方透传;优先于技能字段)
|
||||
*/
|
||||
function renderDesc(tmpl: string, skill: SkillConfig): string {
|
||||
function renderDesc(tmpl: string, skill: SkillConfig, extra?: Record<string, number>): string {
|
||||
return tmpl.replace(PLACEHOLDER_PATTERN, (raw, key: string) => {
|
||||
if (key === "target") return buildTargetDesc(skill);
|
||||
if (key === "dur") return valueRich(getBuffDuration(skill));
|
||||
if (key === "buff_value") return valueRich(getBuffValue(skill));
|
||||
if (extra && key in extra) return valueRich(String(extra[key]));
|
||||
const v = (skill as unknown as Record<string, unknown>)[key];
|
||||
// 未定义数值字段按 0 渲染,避免面板出现 undefined(模板与配置不匹配的兜底)
|
||||
return v === undefined ? valueRich(0) : valueRich(String(v));
|
||||
});
|
||||
}
|
||||
|
||||
/** 触发档位的条目级占位符上下文(普攻/大招档位无此层参数,返回 undefined 走技能字段) */
|
||||
function tierExtras(t: ISkillTierInfo): Record<string, number> | undefined {
|
||||
return t.tChance === undefined ? undefined : { t_chance: t.tChance, pity_add: t.pityAdd ?? 0 };
|
||||
}
|
||||
|
||||
/** 无模板时兜底:回退底座技能的 info 备注 */
|
||||
function fallbackDesc(skill: SkillConfig): string {
|
||||
return String(skill.info ?? "");
|
||||
@@ -223,9 +233,12 @@ export function buildHeroSkillDesc(heroUuid: number, showName: boolean = true, s
|
||||
if (e.lv <= lv && e.desc) tmpl = e.desc;
|
||||
}
|
||||
tmpl = tmpl ?? entries[0]?.desc;
|
||||
const text = tmpl ? renderDesc(tmpl, skill) : fallbackDesc(skill);
|
||||
const text = tmpl
|
||||
? renderDesc(tmpl, skill, { t_chance: item.t_chance ?? 100, pity_add: item.pity_add ?? 0 })
|
||||
: fallbackDesc(skill);
|
||||
// 触发语境:"每攻击N次"循环语义(buildTriggerLabel),逗号衔接效果文本
|
||||
const trig = buildTriggerLabel(type, item.t_num);
|
||||
// 模板已显式使用 {t_chance} 时不再自动追加概率后缀,避免同一行重复展示
|
||||
const trig = buildTriggerLabel(type, item.t_num, tmpl?.includes("{t_chance}") ? undefined : item.t_chance);
|
||||
parts.push(`${trig}, ${text}`);
|
||||
}
|
||||
// dead 组内的复活效果(revive_hp / revive_count)并入同一行
|
||||
@@ -278,12 +291,17 @@ interface ISkillTierInfo {
|
||||
ownDesc?: string;
|
||||
/** 触发技能档位的触发次数(普攻无) */
|
||||
tNum: number;
|
||||
/** 触发技能档位的触发概率百分点(普攻无;缺省 100 必触发) */
|
||||
tChance?: number;
|
||||
/** 触发技能档位的保底叠加百分点(普攻无;缺省 0) */
|
||||
pityAdd?: number;
|
||||
}
|
||||
|
||||
/** 相邻档 diff 参与展示的字段(排除动画/弹道/特效等玩家无感字段),t_num 为触发技能专有 */
|
||||
const DIFF_KEYS: string[] = [
|
||||
"ap", "hit_count", "num", "summon_count", "crt", "frz", "stun", "para",
|
||||
"bck", "bck_chance", "buff_duration", "buff_value", "t_num", "timed_buff_id",
|
||||
"t_chance", "pity_add",
|
||||
];
|
||||
|
||||
/** diff 字段的称谓与单位("新增/漂移"描述共用) */
|
||||
@@ -301,11 +319,15 @@ const DIFF_META: Record<string, { label: string; unit: string }> = {
|
||||
buff_duration: { label: "持续", unit: "秒" },
|
||||
buff_value: { label: "增益强度", unit: "" },
|
||||
t_num: { label: "触发次数", unit: "次" },
|
||||
t_chance: { label: "触发概率", unit: "%" },
|
||||
pity_add: { label: "保底叠加", unit: "%" },
|
||||
};
|
||||
|
||||
/** 读取档位某展示字段的实时值(t_num/buff_value 走专用取值) */
|
||||
/** 读取档位某展示字段的实时值(t_num/t_chance/pity_add/buff_value 走专用取值) */
|
||||
function getTierValue(tier: ISkillTierInfo, key: string): number {
|
||||
if (key === "t_num") return tier.tNum;
|
||||
if (key === "t_chance") return tier.tChance ?? 100;
|
||||
if (key === "pity_add") return tier.pityAdd ?? 0;
|
||||
if (key === "buff_value") return getBuffValue(tier.skill);
|
||||
const v = (tier.skill as unknown as Record<string, unknown>)[key];
|
||||
return typeof v === "number" ? v : 0;
|
||||
@@ -496,9 +518,13 @@ function collectTriggerTiers(hero: heroInfo, type: SkillTriggerType, skillUuid:
|
||||
desc: e.desc ?? inherit,
|
||||
ownDesc: e.desc,
|
||||
tNum: e.t_num,
|
||||
tChance: e.t_chance ?? 100,
|
||||
pityAdd: e.pity_add ?? 0,
|
||||
};
|
||||
});
|
||||
const label = buildTriggerLabel(type, sorted[0].t_num);
|
||||
// slv1 模板已显式使用 {t_chance} 时不再自动追加概率后缀,避免同一行重复展示
|
||||
const firstTmpl = tiers[0]?.desc;
|
||||
const label = buildTriggerLabel(type, sorted[0].t_num, firstTmpl?.includes("{t_chance}") ? undefined : sorted[0].t_chance);
|
||||
return { tiers, label };
|
||||
}
|
||||
|
||||
@@ -509,11 +535,11 @@ function buildTierLines(tiers: ISkillTierInfo[], triggerLabel: string): HeroSkil
|
||||
const t = tiers[i];
|
||||
if (i === 0) {
|
||||
// 技能 1 级:完整能力 + 数值
|
||||
const text = t.desc ? renderDesc(t.desc, t.skill) : fallbackDesc(t.skill);
|
||||
const text = t.desc ? renderDesc(t.desc, t.skill, tierExtras(t)) : fallbackDesc(t.skill);
|
||||
lines.push({ sLv: t.sLv, heroLv: t.heroLv, text: triggerLabel ? `${triggerLabel}, ${text}` : text });
|
||||
} else if (t.ownDesc) {
|
||||
// 提升档:该档显式配置了模板(如护盾/治疗等 diff 标签语义不达的技能),策划表述优先
|
||||
lines.push({ sLv: t.sLv, heroLv: t.heroLv, text: renderDesc(t.ownDesc, t.skill) });
|
||||
lines.push({ sLv: t.sLv, heroLv: t.heroLv, text: renderDesc(t.ownDesc, t.skill, tierExtras(t)) });
|
||||
} else {
|
||||
// 提升档:未配置模板,给相对上一级的提升
|
||||
const diff = buildTierDiff(tiers[i - 1], t);
|
||||
|
||||
@@ -9,7 +9,7 @@ import { GameScoreStats } from "./config/HeroAttrs";
|
||||
import { mLogger } from "./Logger";
|
||||
import { gameDataSync } from "./GameDataSync";
|
||||
import { HERO_UPGRADE_NEED_FRAGMENTS } from "./config/GameSet";
|
||||
import { TalentSet, TALENT_LEVEL_MAX, getTalentLevelExp, getTalentUpgradeCost, isTalentTierUnlocked } from "./config/TalentSet";
|
||||
import { TalentSet, TALENT_LEVEL_MAX, getTalentLevelExp, isTalentPrereqMet, isTalentTierUnlocked } from "./config/TalentSet";
|
||||
import { ScoreRankList, ScoreTier, getRankByScore } from "./config/ScoreRankSet";
|
||||
import { RANK_REWARDS, STAGE_REWARDS, RewardItem, pickRandomHeroUuid } from "./config/RewardSet";
|
||||
|
||||
@@ -48,11 +48,9 @@ export interface GameDate {
|
||||
talent_lv?: number,
|
||||
/** 天赋当前等级已累计的经验值 */
|
||||
talent_exp?: number,
|
||||
/** 关卡进度存档:当前章节-关-节 */
|
||||
/** 关卡进度存档:当前关卡号(无限关模式只记关卡号,回合恒从 1 开始) */
|
||||
stage_progress?: {
|
||||
chapter: number,
|
||||
stage: number,
|
||||
section: number,
|
||||
},
|
||||
/** 奖励领取状态:段位/闯关首达奖励的已领取标记(玩家点击领取) */
|
||||
reward_claimed?: {
|
||||
@@ -61,7 +59,7 @@ export interface GameDate {
|
||||
/** 已领取的大关号 */
|
||||
stage: number[],
|
||||
},
|
||||
/** 已通关大关的显式标记(覆盖存档停留场景,如第 10 关通关后进度停留 1-10-10) */
|
||||
/** 已通关大关的显式标记(历史遗留字段,无限关模式不再写入;仅用于兼容读取旧存档) */
|
||||
passed_stages?: number[],
|
||||
}
|
||||
export interface CloudData {
|
||||
@@ -152,11 +150,9 @@ export class SingletonModuleComp extends ecs.Comp {
|
||||
talent_lv: 0,
|
||||
/** 当前等级已累计经验 */
|
||||
talent_exp: 0,
|
||||
/** 关卡进度存档:默认从 1-1-1 开始 */
|
||||
/** 关卡进度存档:默认从第 1 关开始 */
|
||||
stage_progress: {
|
||||
chapter: 1,
|
||||
stage: 1,
|
||||
section: 1,
|
||||
},
|
||||
/** 奖励领取状态(玩家点击领取,跨局保留) */
|
||||
reward_claimed: {
|
||||
@@ -238,9 +234,7 @@ export class SingletonModuleComp extends ecs.Comp {
|
||||
switch_music: true, // 音乐开关(MVVM绑定字段)
|
||||
/** 关卡进度(MVVM绑定字段,镜像 data.stage_progress,供 HUD 实时显示) */
|
||||
stage_progress: {
|
||||
chapter: 1,
|
||||
stage: 1,
|
||||
section: 1,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -352,26 +346,26 @@ export class SingletonModuleComp extends ecs.Comp {
|
||||
* 将 data 层的关卡进度镜像到 vmdata 视图层(MVVM 绑定字段)。
|
||||
* Why: data.stage_progress 为云端持久权威源,vmdata.stage_progress 仅供 HUD 绑定展示;
|
||||
* 登录覆盖、关卡推进后都必须调用本方法保持镜像一致。
|
||||
* 旧版三段存档(chapter/stage/section)在同步时归一化为 stage 单字段。
|
||||
*/
|
||||
public syncStageProgressToView(): void {
|
||||
const p = this.data.stage_progress;
|
||||
// 就地更新字段而非整体替换对象:oops VM(JsonOb)只通知被赋值属性的精确路径,
|
||||
// 整体替换仅派发 VC:data.stage_progress,不会触发 HUD 绑定的
|
||||
// data.stage_progress.section 等嵌套末端路径刷新,导致进度显示停留在老节
|
||||
const view = this.vmdata.stage_progress;
|
||||
view.chapter = p?.chapter ?? 1;
|
||||
view.stage = p?.stage ?? 1;
|
||||
view.section = p?.section ?? 1;
|
||||
// 旧存档归一化:兼容历史 chapter/stage/section 三段结构,仅提取 stage
|
||||
const stage = Math.max(1, Math.floor(p?.stage ?? 1));
|
||||
if (p && (p.stage !== stage || (p as any).chapter !== undefined || (p as any).section !== undefined)) {
|
||||
this.data.stage_progress = { stage };
|
||||
}
|
||||
this.vmdata.stage_progress.stage = stage;
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新关卡进度(权威源 data + 视图镜像 vmdata),并派发事件刷新 UI。
|
||||
* Why: 替代直接赋值 smc.data.stage_progress,保证视图层实时同步。
|
||||
* @param progress 新的关卡进度(章节/大关/小节均从 1 开始)
|
||||
* @param progress 新的关卡进度(仅关卡号,从 1 开始)
|
||||
* @param is_sync 是否标记脏并触发云端/本地同步
|
||||
*/
|
||||
public updateStageProgress(progress: { chapter: number; stage: number; section: number }, is_sync: boolean = true): void {
|
||||
this.data.stage_progress = { ...progress };
|
||||
public updateStageProgress(progress: { stage: number }, is_sync: boolean = true): void {
|
||||
this.data.stage_progress = { stage: Math.max(1, Math.floor(progress.stage)) };
|
||||
this.syncStageProgressToView();
|
||||
if (is_sync) {
|
||||
gameDataSync.markDataDirty();
|
||||
@@ -452,20 +446,18 @@ export class SingletonModuleComp extends ecs.Comp {
|
||||
}
|
||||
|
||||
/**
|
||||
* 标记大关已通关(通关点调用,覆盖存档停留场景)
|
||||
* Why: 第 10 关通关后存档停留 1-10-10,无法从 stage_progress 推导已通状态,
|
||||
* 需在通关时显式写入。
|
||||
* @param stage 大关号
|
||||
* 标记大关已通关(历史遗留入口)
|
||||
* Why: 旧版本第 10 关通关后存档停留,无法从 stage_progress 推导已通状态,需显式标记;
|
||||
* 无限关模式存档永远推进,判定已通可直接由 stage_progress 推导,无需再写入。
|
||||
* 保留空实现以避免破坏外部调用方(若有旧存档读取场景走 passed_stages 兼容)。
|
||||
* @param _stage 大关号(未使用,保留签名兼容)
|
||||
* @deprecated 无限关模式无需调用,保留仅为兼容旧代码引用
|
||||
*/
|
||||
public markStagePassed(stage: number): void {
|
||||
if (!this.data.passed_stages) this.data.passed_stages = [];
|
||||
if (!this.data.passed_stages.includes(stage)) {
|
||||
this.data.passed_stages.push(stage);
|
||||
gameDataSync.markDataDirty();
|
||||
}
|
||||
public markStagePassed(_stage: number): void {
|
||||
// 无限关模式不再写入 passed_stages
|
||||
}
|
||||
|
||||
/** 判定大关是否已通关:显式标记优先,存档推进兜底(已进入后续关即已通关) */
|
||||
/** 判定大关是否已通关:旧存档显式标记兼容,无限关以存档关卡号推导(已进入后续关即已通关) */
|
||||
private isStagePassed(stage: number): boolean {
|
||||
if ((this.data.passed_stages ?? []).includes(stage)) return true;
|
||||
return (this.data.stage_progress?.stage ?? 1) > stage;
|
||||
@@ -694,7 +686,7 @@ export class SingletonModuleComp extends ecs.Comp {
|
||||
/**
|
||||
* 消耗天赋点升级天赋(升级即激活,下一局生效)
|
||||
* @param uuid 天赋 uuid
|
||||
* @returns 是否升级成功(天赋不存在/已满级/阶位未解锁/点数不足时返回 false)
|
||||
* @returns 是否升级成功(天赋不存在/已满级/层位未解锁/前置未满足/点数不足时返回 false)
|
||||
*/
|
||||
upgradeTalent(uuid: number): boolean {
|
||||
const cfg = TalentSet[uuid];
|
||||
@@ -702,11 +694,13 @@ export class SingletonModuleComp extends ecs.Comp {
|
||||
if (!this.data.talents) this.data.talents = {};
|
||||
const curLv = this.getTalentLv(uuid);
|
||||
if (curLv >= cfg.max_lv) return false;
|
||||
// 阶位解锁:二/三阶天赋要求前一阶累计投入点数达标(一阶恒解锁)
|
||||
// 层位解锁:第 N 层天赋要求第 N-1 层累计投入点数达标(第 1 层恒解锁)
|
||||
if (!isTalentTierUnlocked(this.data.talents, cfg.tier)) return false;
|
||||
const cost = getTalentUpgradeCost(cfg.tier);
|
||||
if (cost < 0 || this.getTalentPoints() < cost) return false;
|
||||
this.data.talent_points -= cost;
|
||||
// 软前置:前置天赋等级需达标(仅限制加点)
|
||||
if (!isTalentPrereqMet(this.data.talents, cfg)) return false;
|
||||
// 统一 1 点/级
|
||||
if (this.getTalentPoints() < 1) return false;
|
||||
this.data.talent_points -= 1;
|
||||
this.data.talents[uuid] = curLv + 1;
|
||||
gameDataSync.markDataDirty();
|
||||
oops.message.dispatchEvent(GameEvent.TALENT_UPDATE);
|
||||
@@ -715,17 +709,13 @@ export class SingletonModuleComp extends ecs.Comp {
|
||||
|
||||
/**
|
||||
* 重置所有天赋等级并退还全部已消耗天赋点(看广告入口)
|
||||
* Why: 退还点数按"升到当前等级的累计消耗"计算,与升级消耗表严格对账,避免点数膨胀/缩水。
|
||||
* Why: 统一 1 点/级后退还点数 = 等级总和,与升级消耗严格对账,避免点数膨胀/缩水。
|
||||
*/
|
||||
resetTalents(): void {
|
||||
if (!this.data.talents) this.data.talents = {};
|
||||
let refund = 0;
|
||||
for (const key in this.data.talents) {
|
||||
const lv = this.data.talents[key];
|
||||
for (let i = 0; i < lv; i++) {
|
||||
const c = getTalentUpgradeCost(i);
|
||||
if (c > 0) refund += c;
|
||||
}
|
||||
refund += this.data.talents[key];
|
||||
}
|
||||
this.data.talents = {};
|
||||
this.data.talent_points = (this.data.talent_points ?? 0) + refund;
|
||||
|
||||
146
assets/script/game/common/config/BossPhaseSet.ts
Normal file
@@ -0,0 +1,146 @@
|
||||
/**
|
||||
* @file BossPhaseSet.ts
|
||||
* @description Boss 多阶段战斗方案配置(固定 3 阶段:P1 基线 / P2 / P3)
|
||||
*
|
||||
* 数据流:heroInfo.phase_ids(允许方案)→ RogueConfig.makeBoss 随机取一
|
||||
* → Mon.load 第 8 参 → BossPhaseComp → BossPhaseSystem 检测切换
|
||||
*
|
||||
* 设计约束:
|
||||
* - 方案 id 使用 10000 段(9100 段已被 TalentSet 9101-9199 / ICardSet 9101~9110 占用)
|
||||
* - 增量驱动:切换 = removes 移除 + adds 注入,P1 = 基线技能(heroInfo.skills + RogueConfig 大招)无需配置
|
||||
* - removes/adds 禁止操作普攻首键(SCastSystem.buildSkillCandidates 硬假设首键=普攻垫底;
|
||||
* JS delete+set 会把键移到末尾,破坏普攻垫底契约)
|
||||
* - 混合触发:同一切换点 hp_pct / time 任一满足即切换;
|
||||
* hp_pct 切换点必须构成前缀(time-only 点之后禁止再配 hp_pct,防乱序连切)
|
||||
*/
|
||||
|
||||
import { SkillSet, SkillOverrides } from "./SkillSet";
|
||||
|
||||
/** 阶段切换触发条件(混合触发:任一条件满足即切换) */
|
||||
export interface PhaseTrigger {
|
||||
/** 血量百分比阈值(1~99):Boss 血量比例 ≤ 该值时触发 */
|
||||
hp_pct?: number;
|
||||
/** Boss 在场战斗秒数:超过该时长触发 */
|
||||
time?: number;
|
||||
}
|
||||
|
||||
/** 切换瞬间一次性属性修正(基于当前值链式乘算,P3 基于 P2 修正后的值) */
|
||||
export interface PhaseAttrMod {
|
||||
/** 攻击 ±% */
|
||||
ap_pct?: number;
|
||||
/** 防御 ±%(applyDefense 除法递减模型,收益非线性,配值按公式校验) */
|
||||
defense_pct?: number;
|
||||
}
|
||||
|
||||
/** 注入技能条目(与 RogueConfig 大招条目同构,cd 缺省由系统兜底 8s) */
|
||||
export interface PhaseSkillEntry {
|
||||
s_uuid: number;
|
||||
cd?: number;
|
||||
overrides?: SkillOverrides;
|
||||
}
|
||||
|
||||
/** 单个切换点定义(switches[0] = P1→P2,switches[1] = P2→P3) */
|
||||
export interface PhaseSwitchDef {
|
||||
trigger: PhaseTrigger;
|
||||
/** 注入的技能(追加进 skills 表,SCastSystem 按 CD 轮转)。禁止操作普攻首键 */
|
||||
adds?: PhaseSkillEntry[];
|
||||
/** 移除的技能 s_uuid 列表(含 RogueConfig 注入的大招)。禁止操作普攻首键 */
|
||||
removes?: number[];
|
||||
attr_mod?: PhaseAttrMod;
|
||||
}
|
||||
|
||||
/** 阶段方案:固定 2 个切换点 = 3 阶段,P1 为基线 */
|
||||
export interface BossPhasePlan {
|
||||
name: string;
|
||||
switches: [PhaseSwitchDef, PhaseSwitchDef];
|
||||
}
|
||||
|
||||
/**
|
||||
* 阶段方案表(id 段 10000)
|
||||
* 示例方案 10001 挂在 6101(兽人首领-双刀dps型)的 phase_ids 上;
|
||||
* 大招 s_uuid 引用 RogueConfig.BossUltPools 近战池(6100~6104)保证可达
|
||||
*/
|
||||
export const BossPhaseSet: Record<number, BossPhasePlan> = {
|
||||
10001: {
|
||||
name: "狂暴进化",
|
||||
switches: [
|
||||
{ trigger: { hp_pct: 70 }, adds: [{ s_uuid: 6102, overrides: { ap: 180 } }], removes: [6100] },
|
||||
{ trigger: { hp_pct: 40, time: 60 }, adds: [{ s_uuid: 6103, overrides: { ap: 180 } }], attr_mod: { ap_pct: 20 } },
|
||||
],
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
* 校验阶段方案表合法性(供 validateRogueConfig 追加调用,建议启动期执行一次)
|
||||
* @returns 错误信息数组,空数组表示校验通过
|
||||
*/
|
||||
export function validateBossPhaseSet(): string[] {
|
||||
const errors: string[] = [];
|
||||
|
||||
for (const key in BossPhaseSet) {
|
||||
const plan = BossPhaseSet[key];
|
||||
const tag = `BossPhaseSet[${key}](${plan.name})`;
|
||||
|
||||
if (plan.switches.length !== 2) {
|
||||
errors.push(`${tag} 切换点必须恰为 2 个(固定 3 阶段),实际 ${plan.switches.length}`);
|
||||
continue;
|
||||
}
|
||||
|
||||
let seenTimeOnly = false;
|
||||
let lastHpPct = 101;
|
||||
let lastTime = 0;
|
||||
|
||||
plan.switches.forEach((def, i) => {
|
||||
const t = def.trigger;
|
||||
const stag = `${tag} switches[${i}]`;
|
||||
|
||||
// 条件完备性与取值范围
|
||||
if (t.hp_pct === undefined && t.time === undefined) {
|
||||
errors.push(`${stag} trigger 至少需要 hp_pct 或 time 之一`);
|
||||
return;
|
||||
}
|
||||
if (t.hp_pct !== undefined && (t.hp_pct <= 0 || t.hp_pct >= 100)) {
|
||||
errors.push(`${stag} hp_pct 必须在 (0,100) 区间,实际 ${t.hp_pct}`);
|
||||
}
|
||||
if (t.time !== undefined && t.time <= 0) {
|
||||
errors.push(`${stag} time 必须 > 0,实际 ${t.time}`);
|
||||
}
|
||||
|
||||
// hp_pct 前缀规则:time-only 点之后禁止再配 hp_pct(防"P2 time / P3 hp_pct"乱序连切)
|
||||
if (seenTimeOnly && t.hp_pct !== undefined) {
|
||||
errors.push(`${stag} hp_pct 切换点必须构成前缀:time-only 切换点之后禁止再配置 hp_pct`);
|
||||
}
|
||||
if (t.hp_pct === undefined && t.time !== undefined) {
|
||||
seenTimeOnly = true;
|
||||
}
|
||||
|
||||
// hp_pct 严格递减 / time 严格递增
|
||||
if (t.hp_pct !== undefined) {
|
||||
if (t.hp_pct >= lastHpPct) {
|
||||
errors.push(`${stag} hp_pct=${t.hp_pct} 未严格小于前一档 ${lastHpPct}`);
|
||||
}
|
||||
lastHpPct = t.hp_pct;
|
||||
}
|
||||
if (t.time !== undefined) {
|
||||
if (t.time <= lastTime) {
|
||||
errors.push(`${stag} time=${t.time} 未严格大于前一档 ${lastTime}`);
|
||||
}
|
||||
lastTime = t.time;
|
||||
}
|
||||
|
||||
// 技能引用存在性(error 级)
|
||||
for (const add of def.adds ?? []) {
|
||||
if (!add.s_uuid || !SkillSet[add.s_uuid]) {
|
||||
errors.push(`${stag} adds 技能 ${add.s_uuid} 未在 SkillSet 中定义`);
|
||||
}
|
||||
}
|
||||
for (const s_uuid of def.removes ?? []) {
|
||||
if (!SkillSet[s_uuid]) {
|
||||
errors.push(`${stag} removes 技能 ${s_uuid} 未在 SkillSet 中定义`);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return errors;
|
||||
}
|
||||
9
assets/script/game/common/config/BossPhaseSet.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "73ce05bd-3011-4b93-aa6b-f9eafa596cfe",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
@@ -104,17 +104,19 @@ export enum GameEvent {
|
||||
STAGE_PROGRESS_UPDATE = "STAGE_PROGRESS_UPDATE",
|
||||
/** 奖励领取完成(payload 为空,UI 刷新待领取列表/红点) */
|
||||
REWARD_CLAIMED = "REWARD_CLAIMED",
|
||||
/** 小节开始(payload: { chapter, stage, section },MissionMonComp 据此生成怪物) */
|
||||
/** 回合开始(payload: { stage, section },MissionMonComp 据此生成怪物) */
|
||||
SectionStart = "SectionStart",
|
||||
/** 小节结束(payload: { chapter, stage, section },玩家点击"下一节"后推进) */
|
||||
/** @deprecated 已废弃:无限关模式无节间结算,回合自动推进,勿再监听 */
|
||||
SectionEnd = "SectionEnd",
|
||||
/** 大关结束(payload: { chapter, stage },10 节打完) */
|
||||
/** @deprecated 已废弃:无限关模式无大关结算,勿再监听 */
|
||||
StageEnd = "StageEnd",
|
||||
/** 章节结束(payload: { chapter },10 关打完) */
|
||||
/** @deprecated 已废弃:无限关模式无章节概念,勿再监听 */
|
||||
ChapterEnd = "ChapterEnd",
|
||||
/** 结算弹窗点击"下一节"(payload 为空,MissionComp 据此推进到下一小节) */
|
||||
/** @deprecated 已废弃:无限关模式无"下一节"手动推进,勿再监听 */
|
||||
NextSection = "NextSection",
|
||||
/** 结算弹窗点击"再来一次"(payload 为空,MissionComp 据此重开本关) */
|
||||
RestartMission = "RestartMission",
|
||||
/** Boss 阶段切换(payload: { eid, planId, fromPhase, toPhase },表现层监听此事件实现演出;eid 定位实体,勿持裸引用) */
|
||||
BossPhaseChange = "BossPhaseChange",
|
||||
}
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@ export enum FightSet {
|
||||
/** 英雄属性随等级成长的倍率(ap/hp = base * MULTIPLIER^(lv-1)) */
|
||||
HERO_LV_MULTIPLIER = 2,
|
||||
// BACK_RANG=30,//后退范围
|
||||
BACK_RANG = 20,//后退范围
|
||||
BACK_RANG = 30,//后退范围
|
||||
FiIGHT_TIME = 30,//战斗时间
|
||||
FROST_TIME = 3,//冰冻时间
|
||||
STUN_TIME = 1,//击晕时间(短控:施加瞬间 CD 削减,期间 CD 停止增长)
|
||||
|
||||
@@ -25,6 +25,10 @@ export enum UIID {
|
||||
Mission,
|
||||
/** 技能信息弹窗(技能小图标点击弹出) */
|
||||
SInfo,
|
||||
/** 英雄详情弹窗(图鉴卡片点击弹出:含属性/技能/升级/前后切换) */
|
||||
HeroInfo,
|
||||
/** 天赋详情弹窗(天赋迷你卡点击弹出:图标/等级/前置/条幅说明/加点按钮) */
|
||||
TIBox,
|
||||
}
|
||||
|
||||
/** 打开界面方式的配置数据 */
|
||||
@@ -41,5 +45,7 @@ export var UIConfigData: { [key: number]: UIConfig } = {
|
||||
// [UIID.Talents]: { layer: LayerType.UI, prefab: "gui/element/talents" },
|
||||
[UIID.Mission]: { layer: LayerType.UI, prefab: "gui/element/mission" },
|
||||
[UIID.SInfo]: { layer: LayerType.PopUp, prefab: "gui/element/SInfoBox" },
|
||||
[UIID.HeroInfo]: { layer: LayerType.PopUp, prefab: "gui/element/heroInfo", bundle: "resources" },
|
||||
[UIID.TIBox]: { layer: LayerType.PopUp, prefab: "gui/element/TIBox", bundle: "resources" },
|
||||
|
||||
}
|
||||
@@ -65,6 +65,16 @@ export enum EType {
|
||||
timeEnd = 1, //碰撞够也不消失,时间到才消失
|
||||
collision = 2, //碰撞次数够就消失
|
||||
}
|
||||
|
||||
/**
|
||||
* 召唤类技能(summon_count>1)多次施放的目标选择模式(由技能 prefab 上 SkillView 配置)。
|
||||
* 仅对敌方目标技能生效;友方/自身技能不走该逻辑。
|
||||
*/
|
||||
export enum SummonTMode {
|
||||
same = 0, // 同一敌人:所有召唤物锁定施法时选定的目标(默认,原行为)
|
||||
random = 1, // 随机敌人:每次出手时从射程内敌人中随机锁定一个
|
||||
unique = 2, // 避免相同敌人:优先锁定本轮尚未选过的敌人,一轮选完后重置再选
|
||||
}
|
||||
//debuff类型
|
||||
|
||||
|
||||
@@ -72,31 +82,40 @@ export enum EType {
|
||||
=== 技能配置系统使用说明 ===
|
||||
|
||||
1. 基础属性:
|
||||
- uuid: 技能唯一ID
|
||||
- name: 技能名称
|
||||
- uuid: 技能唯一ID(6001~6013 单体普攻、6100~6204 群体大招、6301~6302 治疗护盾、
|
||||
6401~6416 永久强化、6501~6519 计时强化/特殊、7001~7024 驻场光环)
|
||||
- name: 技能名称(内部底座代号;英雄语境对外名由 heroSet 侧 name 字段覆写)
|
||||
- sp_name: 特效名称
|
||||
- AtkedName: 攻击类型
|
||||
- path: 图片资源路径
|
||||
- icon: 图标ID
|
||||
|
||||
2. 目标和效果:
|
||||
- TGroup: 目标群体 (敌方、友方等)
|
||||
- SType: 技能类型 (伤害、治疗、护盾等)
|
||||
- TGroup: 目标群体(Self 自身 / Ally 全体友方含自己 / Team 全体友方 / Enemy 敌方 / All 全部)
|
||||
- kind: 主效果类型(Damage 伤害 / Heal 治疗 / Shield 护盾 / Support 强化)
|
||||
|
||||
3. 执行参数:
|
||||
- act: 角色执行的动画
|
||||
- DTType: 伤害类型 (单体、范围)
|
||||
- EType: 结束条件
|
||||
- fname: 特效文件名
|
||||
- DTType: 伤害类型(single 单体 / range 范围)
|
||||
- EType: 结束条件(动画结束/时间结束/碰撞次数)
|
||||
- RType: 弹道类型(linear 直线 / bezier 贝塞尔 / fixed 固定起点 / fixedEnd 固定终点)
|
||||
- with: 暂时无用
|
||||
|
||||
4. 数值参数:
|
||||
- ap: 攻击力百分比
|
||||
- cd: 冷却时间
|
||||
- hit_count: 可命中次数
|
||||
- t_num: 目标数量
|
||||
- hitcd: 持续伤害的伤害间隔
|
||||
- speed: 移动速度
|
||||
- cost: 消耗值
|
||||
- ap: 伤害/治疗为攻击力百分比;护盾为生命最大值百分比;强化技能为修饰数值
|
||||
- cd: 冷却时间(普攻 cd 即攻击间隔)
|
||||
- hit_count: 可命中目标数(伤害技能=弹道穿透数;辅助技能=作用目标数)
|
||||
- hitcd: 持续伤害的伤害间隔(秒)
|
||||
- speed: 弹道移动速度
|
||||
- summon_count: 单次施法召唤的弹道/实体个数(>1 视为召唤类技能)
|
||||
|
||||
5. 增益/减益:
|
||||
- buff_type + ap: 永久强化(直接累加到属性,无时长)
|
||||
- timed_buff_id + buff_value/buff_duration/buff_chance/buff_target: 计时强化(走 BuffList)
|
||||
- timed_debuff_id + debuff_value/debuff_duration/debuff_chance: 命中敌方后挂的计时减益
|
||||
- proc_skill: 施法后概率触发额外技能(技能级触发器,无视 CD)
|
||||
|
||||
6. 文案约定:
|
||||
- info 仅作语义描述,禁止写死数值;数值由 heroSet/卡片 overrides 注入,
|
||||
UI 文案由 SkillDescSet / HeroSkillText 按合并后实时配置动态生成
|
||||
*/
|
||||
export enum DType {
|
||||
ATK = 0, // 物理
|
||||
@@ -140,8 +159,8 @@ export interface SkillConfig {
|
||||
TGroup: TGroup, // 目标群体(敌方/友方/自身等)
|
||||
act: string, // 角色执行的动画
|
||||
DTType: DTType, // 伤害类型(单体/范围)
|
||||
ap: number, // 伤害/治疗技能为攻击百分比,护盾技能为免疫次数
|
||||
hit_count: number, // 可命中次数
|
||||
ap: number, // 伤害/治疗为攻击力百分比;护盾为生命最大值百分比;永久强化为修饰数值
|
||||
hit_count: number, // 可命中目标数(伤害技能=弹道穿透数;辅助技能=作用目标数,>1 生效)
|
||||
hitcd: number, // 持续伤害的伤害间隔(秒)
|
||||
speed: number, // 移动速度
|
||||
with: number, // 宽度(暂时无用)
|
||||
@@ -318,6 +337,21 @@ export const SkillSet: Record<number, SkillConfig> = {
|
||||
DTType: DTType.single, ap: 100, hit_count: 1, hitcd: 0.2, speed: 720, with: 0, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.Melee, is_accel: true,
|
||||
RType: RType.bezier, EType: EType.collision, info: "红瓶抛射物",
|
||||
},
|
||||
6013: {
|
||||
uuid: 6013, name: "闪电", sp_name: "m3", icon: "109-Red-Potion", TGroup: TGroup.Enemy, readyAnm: "", endAnm: "", act: "atk",
|
||||
DTType: DTType.single, ap: 100, hit_count: 1, hitcd: 0.2, speed: 720, with: 0, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.Melee, is_accel: true,
|
||||
RType: RType.fixedEnd, EType: EType.collision, info: "单体雷击(固定终点落雷),可附加麻痹",
|
||||
},
|
||||
6014: {
|
||||
uuid: 6014, name: "小火球", sp_name: "m4", icon: "109-Red-Potion", TGroup: TGroup.Enemy, readyAnm: "", endAnm: "", act: "atk",
|
||||
DTType: DTType.single, ap: 100, hit_count: 1, hitcd: 0.2, speed: 720, with: 0, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.Melee, is_accel: true,
|
||||
RType: RType.fixedEnd, EType: EType.collision, info: "小火球(固定终点),可附加灼烧/易伤",
|
||||
},
|
||||
6015: {
|
||||
uuid: 6015, name: "小飓风", sp_name: "m5", icon: "109-Red-Potion", TGroup: TGroup.Enemy, readyAnm: "", endAnm: "", act: "atk",
|
||||
DTType: DTType.single, ap: 100, hit_count: 1, hitcd: 0.2, speed: 720, with: 0, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.Melee, is_accel: true,
|
||||
RType: RType.fixedEnd, EType: EType.collision, info: "小飓风(固定终点),直线穿透",
|
||||
},
|
||||
// ==================== 群体大招(按职业分段:6100-6149 坦克/战士、6150-6199 刺客/射手、6200-6249 法师/辅助) ====================
|
||||
// 坦克/战士群体攻击大招
|
||||
6100: {
|
||||
@@ -336,8 +370,8 @@ export const SkillSet: Record<number, SkillConfig> = {
|
||||
RType: RType.bezier, EType: EType.collision, info: "火焰斩动画",//英雄配置技能的时候,可以叠加暴击debuff
|
||||
},
|
||||
6103: {
|
||||
uuid: 6103, name: "闪电斩", sp_name: "atk5", icon: "100-Enchant-Magic", TGroup: TGroup.Enemy, readyAnm: "", endAnm: "", act: "max0",
|
||||
DTType: DTType.single, para: 30, ap: 150, hit_count: 5, hitcd: 0.2, speed: 720, with: 0, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.Melee, is_accel: true,
|
||||
uuid: 6103, name: "闪电斩", sp_name: "atk6", icon: "100-Enchant-Magic", TGroup: TGroup.Enemy, readyAnm: "", endAnm: "", act: "max0",
|
||||
DTType: DTType.single, ap: 150, hit_count: 5, hitcd: 0.2, speed: 720, with: 0, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.Melee, is_accel: true,
|
||||
RType: RType.bezier, EType: EType.collision, info: "闪电斩动画",//英雄配置技能的时候,可以疲惫触发闪电系追加技能
|
||||
},
|
||||
6104: {
|
||||
@@ -358,52 +392,52 @@ export const SkillSet: Record<number, SkillConfig> = {
|
||||
},
|
||||
// 法师/辅助群体攻击大招
|
||||
6200: {
|
||||
uuid: 6200, name: "火球术", sp_name: "maxm1", icon: "31-Fire", TGroup: TGroup.Enemy, readyAnm: "", endAnm: "", act: "max0",
|
||||
uuid: 6200, name: "火球术", sp_name: "maxm1", icon: "31-Fire", TGroup: TGroup.Enemy, readyAnm: "", endAnm: "", act: "max1",
|
||||
DTType: DTType.single, ap: 100, hit_count: 1, hitcd: 0.2, speed: 720, with: 0, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.remote,
|
||||
RType: RType.bezier, EType: EType.collision, bezier_start_y: 20, bezier_mid_y: 140, bezier_arc: 1.05, info: "一个大火球",
|
||||
},
|
||||
6201: {
|
||||
uuid: 6201, name: "飓风", sp_name: "maxm2", icon: "98-Enchant-Wind", TGroup: TGroup.Enemy, readyAnm: "", endAnm: "", act: "max1",
|
||||
DTType: DTType.single, ap: 100, hit_count: 2, hitcd: 0.3, speed: 720, with: 90, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.remote,
|
||||
DTType: DTType.single, ap: 100, hit_count: 99, hitcd: 0.3, speed: 720, with: 90, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.remote,
|
||||
RType: RType.linear, EType: EType.collision, info: "一个飓风",
|
||||
},
|
||||
6202: {
|
||||
uuid: 6202, name: "毒气弹", sp_name: "maxm4", icon: "o_warlock_hyzy_skill", TGroup: TGroup.Enemy, readyAnm: "", endAnm: "", act: "max1",
|
||||
DTType: DTType.single, ap: 100, hit_count: 2, hitcd: 0.3, speed: 720, with: 90, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.remote,
|
||||
DTType: DTType.single, ap: 100, hit_count: 1, hitcd: 0.3, speed: 720, with: 90, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.remote,
|
||||
RType: RType.linear, EType: EType.collision, bezier_start_y: 20, bezier_mid_y: 140, bezier_arc: 1.05, info: "一个大毒气弹",
|
||||
},
|
||||
6203: {
|
||||
uuid: 6203, name: "能量波", sp_name: "maxm5", icon: "b_priest_kx_skill", TGroup: TGroup.Enemy, readyAnm: "", endAnm: "", act: "max1",
|
||||
DTType: DTType.single, ap: 100, hit_count: 2, hitcd: 0.3, speed: 720, with: 90, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.remote,
|
||||
DTType: DTType.single, ap: 100, hit_count: 1, hitcd: 0.3, speed: 720, with: 90, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.remote,
|
||||
RType: RType.linear, EType: EType.collision, bezier_start_y: 20, bezier_mid_y: 140, bezier_arc: 1.05, info: "一个能量波",
|
||||
},
|
||||
6204: {
|
||||
uuid: 6204, name: "多毒气弹", sp_name: "maxm6", icon: "o_warlock_hyzy_skill", TGroup: TGroup.Enemy, readyAnm: "", endAnm: "", act: "max1",
|
||||
DTType: DTType.single, ap: 100, hit_count: 2, hitcd: 0.3, speed: 720, with: 90, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.remote,
|
||||
RType: RType.linear, EType: EType.collision, bezier_start_y: 20, bezier_mid_y: 140, bezier_arc: 1.05, info: "一个大毒气弹",
|
||||
uuid: 6204, name: "雷暴", sp_name: "maxm7", icon: "o_warlock_hyzy_skill", TGroup: TGroup.Enemy, readyAnm: "", endAnm: "", act: "max1",
|
||||
DTType: DTType.single, ap: 100, hit_count: 99, hitcd: 0.3, speed: 720, with: 90, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.remote,
|
||||
RType: RType.linear, EType: EType.collision, bezier_start_y: 20, bezier_mid_y: 140, bezier_arc: 1.05, info: "雷暴多段打击(hit_count=99 直线穿透),可附加麻痹",
|
||||
},
|
||||
|
||||
//============================= ====== 辅助技能 回合技能 ====== ==========================
|
||||
6301: {
|
||||
uuid: 6301, name: "护盾", sp_name: "buff_wind", icon: "28-Electric-Wave", TGroup: TGroup.Self, readyAnm: "up_blue", endAnm: "", act: "atk",
|
||||
uuid: 6301, name: "护盾", sp_name: "buff_wind", icon: "28-Electric-Wave", TGroup: TGroup.Self, readyAnm: "up_blue", endAnm: "", act: "max1",
|
||||
DTType: DTType.single, kind: SkillKind.Shield, ap: 30, hit_count: 1, hitcd: 0.2, speed: 720, with: 0, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.support, shield_duration: 7,
|
||||
RType: RType.fixed, EType: EType.animationEnd, info: "获得施法者最大生命30%的护盾, 持续7秒",
|
||||
RType: RType.fixed, EType: EType.animationEnd, info: "获得施法者最大生命一定比例的护盾,持续7秒(ap=百分比)",
|
||||
},
|
||||
6302: {
|
||||
uuid: 6302, name: "治疗", sp_name: "buff_wind", icon: "g_priest_zldy_skill", TGroup: TGroup.Team, readyAnm: "up_green", endAnm: "", act: "atk",
|
||||
uuid: 6302, name: "治疗", sp_name: "buff_wind", icon: "g_priest_zldy_skill", TGroup: TGroup.Team, readyAnm: "up_green", endAnm: "", act: "max1",
|
||||
DTType: DTType.single, kind: SkillKind.Heal, ap: 300, hit_count: 1, hitcd: 0.2, speed: 720, with: 0, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.support,
|
||||
RType: RType.fixed, EType: EType.animationEnd, info: "治疗伙伴/自己",
|
||||
RType: RType.fixed, EType: EType.animationEnd, info: "治疗友方目标,回复量=目标最大生命×ap%",
|
||||
},
|
||||
//==========================buff 技能=====================
|
||||
6401: {
|
||||
uuid: 6401, name: "攻击强化", sp_name: "buff_wind", icon: "36-Guardian-Stance", TGroup: TGroup.Team, readyAnm: "up_ap", endAnm: "", act: "atk",
|
||||
DTType: DTType.single, kind: SkillKind.Support, ap: 5, hit_count: 1, hitcd: 0.2, speed: 720, with: 0, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.support,
|
||||
RType: RType.fixed, EType: EType.animationEnd, buff_type: Attrs.ap, info: "全体友方攻击力提升5%, 持续1次",
|
||||
RType: RType.fixed, EType: EType.animationEnd, buff_type: Attrs.ap, info: "全体友方攻击力永久提升(ap=百分比,单次施加)",
|
||||
},
|
||||
6402: {
|
||||
uuid: 6402, name: "生命强化", sp_name: "buff_wind", icon: "29-Endure", TGroup: TGroup.Team, readyAnm: "up_hp", endAnm: "", act: "atk",
|
||||
DTType: DTType.single, kind: SkillKind.Support, ap: 20, hit_count: 1, hitcd: 0.2, speed: 720, with: 0, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.support,
|
||||
RType: RType.fixed, EType: EType.animationEnd, buff_type: Attrs.hp_max, info: "全体友方最大生命值提升20%, 持续1次",
|
||||
RType: RType.fixed, EType: EType.animationEnd, buff_type: Attrs.hp_max, info: "全体友方最大生命值永久提升(ap=百分比,单次施加)",
|
||||
},
|
||||
6403: {
|
||||
uuid: 6403, name: "暴击强化", sp_name: "buff_wind", icon: "5-Apply-Burn", TGroup: TGroup.Team, readyAnm: "up_ap", endAnm: "", act: "atk",
|
||||
@@ -456,7 +490,7 @@ export const SkillSet: Record<number, SkillConfig> = {
|
||||
6412: {
|
||||
uuid: 6412, name: "防御强化", sp_name: "buff_wind", icon: "46-Iron-Clad", TGroup: TGroup.Team, readyAnm: "up_blue", endAnm: "", act: "atk",
|
||||
DTType: DTType.single, kind: SkillKind.Support, ap: 50, hit_count: 1, hitcd: 0.2, speed: 720, with: 0, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.support,
|
||||
RType: RType.fixed, EType: EType.animationEnd, buff_type: Attrs.defense, info: "全体友方防御提升50点, 持续1次",
|
||||
RType: RType.fixed, EType: EType.animationEnd, buff_type: Attrs.defense, info: "全体友方防御永久提升(ap=固定点数,单次施加)",
|
||||
},
|
||||
6413: {
|
||||
uuid: 6413, name: "反伤强化", sp_name: "buff_wind", icon: "75-Shield-Stun", TGroup: TGroup.Team, readyAnm: "up_blue", endAnm: "", act: "atk",
|
||||
@@ -514,7 +548,7 @@ export const SkillSet: Record<number, SkillConfig> = {
|
||||
6507: {
|
||||
uuid: 6507, name: "攻速爆发", sp_name: "buff_wind", icon: "147-Chronomancy", TGroup: TGroup.Team, readyAnm: "up_ap", endAnm: "", act: "atk",
|
||||
DTType: DTType.single, kind: SkillKind.Support, ap: 0, hit_count: 3, hitcd: 0.2, speed: 720, with: 0, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.support,
|
||||
RType: RType.fixed, EType: EType.animationEnd, buff_type: Attrs.speed, timed_buff_id: 7015, info: "全体友方攻击速度提升40%, 持续5秒",
|
||||
RType: RType.fixed, EType: EType.animationEnd, buff_type: Attrs.speed, timed_buff_id: 7015, info: "全体友方攻击速度提升(buff_value=百分比,默认5秒)",
|
||||
},
|
||||
// 风怒机制已停用: 6508 风怒爆发技能已移除
|
||||
/*
|
||||
@@ -568,7 +602,7 @@ export const SkillSet: Record<number, SkillConfig> = {
|
||||
6517: {
|
||||
uuid: 6517, name: "生命爆发", sp_name: "buff_wind", icon: "29-Endure", TGroup: TGroup.Team, readyAnm: "up_green", endAnm: "", act: "atk",
|
||||
DTType: DTType.single, kind: SkillKind.Support, ap: 0, hit_count: 3, hitcd: 0.2, speed: 720, with: 0, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.support,
|
||||
RType: RType.fixed, EType: EType.animationEnd, buff_type: Attrs.hp_max, timed_buff_id: 7029, info: "全体友方最大生命值提升30%, 持续5秒",
|
||||
RType: RType.fixed, EType: EType.animationEnd, buff_type: Attrs.hp_max, timed_buff_id: 7029, info: "全体友方最大生命值提升(buff_value=百分比,默认5秒)",
|
||||
},
|
||||
6518: {
|
||||
uuid: 6518, name: "闪避爆发", sp_name: "buff_wind", icon: "98-Enchant-Wind", TGroup: TGroup.Team, readyAnm: "up_blue", endAnm: "", act: "atk",
|
||||
@@ -576,9 +610,9 @@ export const SkillSet: Record<number, SkillConfig> = {
|
||||
RType: RType.fixed, EType: EType.animationEnd, buff_type: Attrs.dodge, timed_buff_id: 7030, info: "全体友方闪避概率提升20%, 持续5秒",
|
||||
},
|
||||
6519: {
|
||||
uuid: 6519, name: "命中强化", sp_name: "buff_wind", icon: "27-Hawkeye", TGroup: TGroup.Team, readyAnm: "up_blue", endAnm: "", act: "atk",
|
||||
uuid: 6519, name: "命中爆发", sp_name: "buff_wind", icon: "27-Hawkeye", TGroup: TGroup.Team, readyAnm: "up_blue", endAnm: "", act: "atk",
|
||||
DTType: DTType.single, kind: SkillKind.Support, ap: 0, hit_count: 3, hitcd: 0.2, speed: 720, with: 0, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.support,
|
||||
RType: RType.fixed, EType: EType.animationEnd, buff_type: Attrs.accuracy, timed_buff_id: 7031, info: "全体友方命中概率提升20%, 持续5秒",
|
||||
RType: RType.fixed, EType: EType.animationEnd, buff_type: Attrs.accuracy, timed_buff_id: 7031, info: "全体友方命中概率提升(buff_value=百分比,默认5秒)",
|
||||
}
|
||||
};
|
||||
//***************驻场技能配置***************
|
||||
|
||||
@@ -1,17 +1,22 @@
|
||||
/**
|
||||
* @file StageSet.ts
|
||||
* @description 关卡系统配置(章节-关-节三级结构)
|
||||
* @description 关卡系统配置(无限关卡·单线推进)
|
||||
*
|
||||
* 设计要点:
|
||||
* - 1 章 = 10 关,每关 = 5 小节(一关一局,节间自动推进),共 50 个小节
|
||||
* - 每关节点固定:1~3 节普通(3 小怪)、第 4 节精英(3 精英)、第 5 节 Boss(1 Boss + 2 小怪)
|
||||
* - 怪物等级 = 关卡号(1-1 的怪为 Lv1,1-5 的怪为 Lv5)
|
||||
* - 怪物属性 = 基础 × 开局系数 × (1 + 成长斜率 × (lv-1)) × 类型倍率
|
||||
* - 无限关卡:从第 1 关起无上限推进,每关 = 5 回合(一关一局,回合间自动推进)
|
||||
* - 第 1~4 回合为普通怪,属性逐回合轻量增强(SECTION_RAMP_STEP)
|
||||
* - 第 5 回合为单 Boss 回合(无护卫),Boss 采用超厚血量(BOSS_HP_MUL)
|
||||
* - 怪物等级 = 关卡号(第 N 关的怪为 LvN,随关卡无限成长)
|
||||
* - 小节配置按需动态生成,不再依赖章节静态表
|
||||
*
|
||||
* 数值基准:
|
||||
* - 开局系数 0.8(1 级小怪略弱于英雄)
|
||||
* - 成长斜率 +5%/级(10 级 ≈ 1.45 倍)
|
||||
* - 精英倍率 × 1.5,Boss 倍率 × 3.0(精英 × 2)
|
||||
* - 成长斜率 +5%/级(无限线性成长,曲线平缓可控)
|
||||
* - 回合增强 +12%/回合(第 4 回合 ≈ 1.36 倍)
|
||||
* - Boss:HP × 12(超厚血量)/ AP × 2.0(攻击克制,避免 Boss 秒杀英雄)
|
||||
*
|
||||
* 核心公式:
|
||||
* 怪物属性 = 基础 × MON_START_COEF × (1 + MON_GROW_SLOPE×(lv-1)) × 回合增强 × 类型倍率
|
||||
*/
|
||||
|
||||
import { MonType } from "./heroSet";
|
||||
@@ -20,82 +25,54 @@ import { MonType } from "./heroSet";
|
||||
|
||||
/** 怪物开局系数:1 级小怪略弱于英雄(0.8 倍) */
|
||||
export const MON_START_COEF = 0.8;
|
||||
/** 怪物成长斜率:每级 +5% 基础属性 */
|
||||
/** 怪物成长斜率:每级 +5% 基础属性(无限线性成长) */
|
||||
export const MON_GROW_SLOPE = 0.05;
|
||||
/** 精英属性倍率:同级普通怪的 1.5 倍 */
|
||||
export const ELITE_MUL = 1.5;
|
||||
/** Boss 属性倍率:同级普通怪的 3.0 倍(精英 × 2) */
|
||||
export const BOSS_MUL = 3.0;
|
||||
/** 每关小节总数(一关一局,节间自动推进) */
|
||||
/** 回合内轻量增强步长:第 1→4 回合每回合 +12% 属性 */
|
||||
export const SECTION_RAMP_STEP = 0.12;
|
||||
/** Boss 血量倍率:同级普通怪的 12 倍(超厚血量,拖长 Boss 战节奏) */
|
||||
export const BOSS_HP_MUL = 12;
|
||||
/** Boss 攻击倍率:同级普通怪的 2.0 倍(显著低于血量倍率,避免 Boss 秒杀英雄) */
|
||||
export const BOSS_AP_MUL = 2.0;
|
||||
/** 每关回合总数(一关一局,回合间自动推进) */
|
||||
export const SECTIONS_PER_STAGE = 5;
|
||||
/** 精英节号(每关第 4 节为精英节) */
|
||||
export const ELITE_SECTION = 4;
|
||||
/** Boss 节号(每关第 5 节为 Boss 节,即末节) */
|
||||
/** Boss 回合号(每关第 5 回合,即末回合) */
|
||||
export const BOSS_SECTION = 5;
|
||||
/** 普通节小怪数量(一关一局压缩后单节 3 只) */
|
||||
/** 普通回合小怪数量 */
|
||||
export const NORMAL_MON_COUNT = 3;
|
||||
/** 普通节开局立即刷出数量(3 只全部立即刷出) */
|
||||
/** 普通回合开局立即刷出数量(3 只全部立即刷出) */
|
||||
export const NORMAL_FIRST_SPAWN = 3;
|
||||
/** 普通节后续刷怪间隔(秒):保留配置位(3 只全立即刷,当前无后续批次) */
|
||||
/** 普通回合后续刷怪间隔(秒):保留配置位(3 只全立即刷,当前无后续批次) */
|
||||
export const NORMAL_SPAWN_INTERVAL = 2;
|
||||
/** 精英节精英数量 */
|
||||
export const ELITE_COUNT = 3;
|
||||
/** Boss 节护卫小怪数量 */
|
||||
export const BOSS_ELITE_COUNT = 2;
|
||||
/** Boss 节 Boss 延迟刷出时间(秒) */
|
||||
/** Boss 回合 Boss 延迟刷出时间(秒) */
|
||||
export const BOSS_DELAY = 1;
|
||||
|
||||
// ======================== 类型定义 ========================
|
||||
|
||||
/** 小节类型 */
|
||||
/** 回合类型 */
|
||||
export enum SectionType {
|
||||
Normal = 0, // 普通节:3 小怪
|
||||
Elite = 1, // 精英节:3 精英
|
||||
Boss = 2, // Boss 节:1 Boss + 2 小怪
|
||||
Normal = 0, // 普通回合:3 小怪(逐回合轻量增强)
|
||||
Boss = 2, // Boss 回合:1 Boss(超厚血量,无护卫)
|
||||
}
|
||||
|
||||
/** 小节配置 */
|
||||
/** 回合配置 */
|
||||
export interface SectionConfig {
|
||||
/** 小节类型 */
|
||||
/** 回合类型 */
|
||||
type: SectionType;
|
||||
/** 怪物等级(驱动线性成长) */
|
||||
/** 怪物等级(= 关卡号,驱动线性成长) */
|
||||
monLv: number;
|
||||
/** 精英数量(精英关/Boss 关用) */
|
||||
eliteCount?: number;
|
||||
/** Boss UUID(Boss 关用,可选,缺省随机) */
|
||||
bossUuid?: number;
|
||||
/** 怪物类型池(普通关用,缺省随机) */
|
||||
/** 回合增强系数(第 n 回合 = 1 + SECTION_RAMP_STEP×(n-1),仅普通回合生效) */
|
||||
ramp: number;
|
||||
/** 怪物类型池(普通回合用,缺省随机) */
|
||||
monTypes?: MonType[];
|
||||
}
|
||||
|
||||
/** 大关配置(1-1 ~ 1-10),每关 SECTIONS_PER_STAGE 个小节 */
|
||||
export interface StageConfig {
|
||||
/** 章节号 */
|
||||
chapter: number;
|
||||
/** 关卡号 1~10 */
|
||||
stage: number;
|
||||
/** 小节列表(长度 = SECTIONS_PER_STAGE) */
|
||||
sections: SectionConfig[];
|
||||
}
|
||||
|
||||
/** 章节配置 */
|
||||
export interface ChapterConfig {
|
||||
/** 章节号 */
|
||||
chapter: number;
|
||||
/** 章节名称 */
|
||||
name: string;
|
||||
/** 10 个大关 */
|
||||
stages: StageConfig[];
|
||||
}
|
||||
|
||||
// ======================== 工具函数 ========================
|
||||
|
||||
/**
|
||||
* 计算怪物最终属性
|
||||
* 计算怪物最终属性(Boss 血/攻倍率分离:超厚血 + 克制攻)
|
||||
* @param baseHp 基础 HP
|
||||
* @param baseAp 基础 AP
|
||||
* @param lv 怪物等级
|
||||
* @param isElite 是否精英
|
||||
* @param isBoss 是否 Boss
|
||||
* @returns 最终 HP/AP
|
||||
*/
|
||||
@@ -103,159 +80,70 @@ export function calcMonsterAttrs(
|
||||
baseHp: number,
|
||||
baseAp: number,
|
||||
lv: number,
|
||||
isElite: boolean = false,
|
||||
isBoss: boolean = false
|
||||
): { hp: number; ap: number } {
|
||||
const growCoef = 1 + MON_GROW_SLOPE * (lv - 1);
|
||||
let typeMul = 1;
|
||||
if (isBoss) {
|
||||
typeMul = BOSS_MUL;
|
||||
} else if (isElite) {
|
||||
typeMul = ELITE_MUL;
|
||||
}
|
||||
const hp = Math.max(1, Math.round(baseHp * MON_START_COEF * growCoef * typeMul));
|
||||
const ap = Math.max(1, Math.round(baseAp * MON_START_COEF * growCoef * typeMul));
|
||||
const hp = Math.max(1, Math.round(baseHp * MON_START_COEF * growCoef * (isBoss ? BOSS_HP_MUL : 1)));
|
||||
const ap = Math.max(1, Math.round(baseAp * MON_START_COEF * growCoef * (isBoss ? BOSS_AP_MUL : 1)));
|
||||
return { hp, ap };
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取指定关卡的怪物等级
|
||||
* @param stage 关卡号(1~10)
|
||||
* 获取指定关卡的怪物等级(无限关:等级 = 关卡号,无上限)
|
||||
* @param stage 关卡号(1~∞)
|
||||
* @returns 怪物等级
|
||||
*/
|
||||
export function getMonsterLv(stage: number): number {
|
||||
return Math.max(1, Math.min(10, stage));
|
||||
return Math.max(1, Math.floor(stage));
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断是否为精英节(每关第 ELITE_SECTION 节)
|
||||
* @param section 小节号(1~SECTIONS_PER_STAGE)
|
||||
*/
|
||||
export function isEliteSection(section: number): boolean {
|
||||
return section === ELITE_SECTION;
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断是否为 Boss 节(每关第 BOSS_SECTION 节,即末节)
|
||||
* @param section 小节号(1~SECTIONS_PER_STAGE)
|
||||
* 判断是否为 Boss 回合(每关第 BOSS_SECTION 回合,即末回合)
|
||||
* @param section 回合号(1~SECTIONS_PER_STAGE)
|
||||
*/
|
||||
export function isBossSection(section: number): boolean {
|
||||
return section === BOSS_SECTION;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取小节类型(按节号区分:1~3 普通 / 4 精英 / 5 Boss)
|
||||
* @param section 小节号(1~SECTIONS_PER_STAGE)
|
||||
* 获取回合类型(按回合号区分:1~4 普通 / 5 Boss)
|
||||
* @param section 回合号(1~SECTIONS_PER_STAGE)
|
||||
*/
|
||||
export function getSectionType(section: number): SectionType {
|
||||
if (isBossSection(section)) return SectionType.Boss;
|
||||
if (isEliteSection(section)) return SectionType.Elite;
|
||||
return SectionType.Normal;
|
||||
return isBossSection(section) ? SectionType.Boss : SectionType.Normal;
|
||||
}
|
||||
|
||||
// ======================== 第 1 章配置 ========================
|
||||
|
||||
/** 生成单个大关的 SECTIONS_PER_STAGE 个小节配置(1~3 普通 / 4 精英 / 5 Boss) */
|
||||
function makeStageSections(stage: number): SectionConfig[] {
|
||||
const monLv = getMonsterLv(stage);
|
||||
const sections: SectionConfig[] = [];
|
||||
|
||||
for (let i = 1; i <= SECTIONS_PER_STAGE; i++) {
|
||||
const type = getSectionType(i);
|
||||
const section: SectionConfig = { type, monLv };
|
||||
|
||||
if (type === SectionType.Elite) {
|
||||
section.eliteCount = ELITE_COUNT;
|
||||
} else if (type === SectionType.Boss) {
|
||||
section.eliteCount = BOSS_ELITE_COUNT;
|
||||
// bossUuid 缺省随机,由生成引擎从 Boss 池抽取
|
||||
} else {
|
||||
// 普通节:近战为主,穿插远程/重型
|
||||
section.monTypes = [MonType.Melee, MonType.Melee, MonType.Melee, MonType.Heavy, MonType.Long];
|
||||
}
|
||||
|
||||
sections.push(section);
|
||||
}
|
||||
return sections;
|
||||
}
|
||||
|
||||
/** 第 1 章配置 */
|
||||
export const Chapter1: ChapterConfig = {
|
||||
chapter: 1,
|
||||
name: "兽人入侵",
|
||||
stages: [],
|
||||
};
|
||||
|
||||
// 初始化第 1 章 10 个大关
|
||||
for (let stage = 1; stage <= 10; stage++) {
|
||||
Chapter1.stages.push({
|
||||
chapter: 1,
|
||||
stage,
|
||||
sections: makeStageSections(stage),
|
||||
});
|
||||
}
|
||||
|
||||
/** 所有章节配置表(当前仅第 1 章,后续扩展) */
|
||||
export const ChapterSet: Record<number, ChapterConfig> = {
|
||||
1: Chapter1,
|
||||
};
|
||||
|
||||
// ======================== 查询接口 ========================
|
||||
|
||||
/**
|
||||
* 获取小节配置
|
||||
* @param chapter 章节号
|
||||
* @param stage 关卡号
|
||||
* @param section 小节号(1~SECTIONS_PER_STAGE)
|
||||
* @returns 小节配置,不存在时返回 null
|
||||
* 获取回合配置(无限关:按需动态生成,不再依赖章节静态表)
|
||||
* @param stage 关卡号(1~∞)
|
||||
* @param section 回合号(1~SECTIONS_PER_STAGE)
|
||||
* @returns 回合配置,回合号越界时返回 null
|
||||
*/
|
||||
export function getSectionConfig(chapter: number, stage: number, section: number): SectionConfig | null {
|
||||
const ch = ChapterSet[chapter];
|
||||
if (!ch) return null;
|
||||
const st = ch.stages.find(s => s.stage === stage);
|
||||
if (!st) return null;
|
||||
if (section < 1 || section > st.sections.length) return null;
|
||||
return st.sections[section - 1];
|
||||
export function getSectionConfig(stage: number, section: number): SectionConfig | null {
|
||||
if (section < 1 || section > SECTIONS_PER_STAGE) return null;
|
||||
|
||||
const type = getSectionType(section);
|
||||
const cfg: SectionConfig = {
|
||||
type,
|
||||
monLv: getMonsterLv(stage),
|
||||
ramp: 1 + SECTION_RAMP_STEP * (section - 1),
|
||||
};
|
||||
|
||||
if (type !== SectionType.Boss) {
|
||||
// 普通回合:近战为主,穿插远程/重型
|
||||
cfg.monTypes = [MonType.Melee, MonType.Melee, MonType.Melee, MonType.Heavy, MonType.Long];
|
||||
}
|
||||
return cfg;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取大关配置
|
||||
* @param chapter 章节号
|
||||
* 获取当前进度显示文本(无限关:只展示 关-回合)
|
||||
* @param stage 关卡号
|
||||
* @returns 大关配置,不存在时返回 null
|
||||
* @param section 回合号
|
||||
* @returns 格式化文本,如 "5-3"
|
||||
*/
|
||||
export function getStageConfig(chapter: number, stage: number): StageConfig | null {
|
||||
const ch = ChapterSet[chapter];
|
||||
if (!ch) return null;
|
||||
return ch.stages.find(s => s.stage === stage) ?? null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取章节配置
|
||||
* @param chapter 章节号
|
||||
* @returns 章节配置,不存在时返回 null
|
||||
*/
|
||||
export function getChapterConfig(chapter: number): ChapterConfig | null {
|
||||
return ChapterSet[chapter] ?? null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前进度显示文本
|
||||
* @param chapter 章节号
|
||||
* @param stage 关卡号
|
||||
* @param section 小节号
|
||||
* @returns 格式化文本,如 "1-5-3"
|
||||
*/
|
||||
export function getProgressText(chapter: number, stage: number, section: number): string {
|
||||
return `${chapter}-${stage}-${section}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取大关显示文本
|
||||
* @param chapter 章节号
|
||||
* @param stage 关卡号
|
||||
* @returns 格式化文本,如 "1-5"
|
||||
*/
|
||||
export function getStageText(chapter: number, stage: number): string {
|
||||
return `${chapter}-${stage}`;
|
||||
export function getProgressText(stage: number, section: number): string {
|
||||
return `${stage}-${section}`;
|
||||
}
|
||||
|
||||
@@ -4,13 +4,15 @@ import { HRole } from "./heroSet";
|
||||
/**
|
||||
* 天赋系统配置(局外成长:升级即激活,战斗中对英雄属性常驻加成)。
|
||||
*
|
||||
* 三阶结构(阶位逐级解锁,门槛见 TALENT_TIER_UNLOCK_THRESHOLD):
|
||||
* - 一阶·基础天赋(9001-9099):全局生效,对所有英雄叠加;
|
||||
* - 二阶·专精天赋(9101-9199):按 HRole 职业过滤,仅对匹配职业的英雄生效;
|
||||
* - 三阶·超强天赋(9201-9219):全局(9201-9209)+ 职业(9211-9219)混合,数值幅度约为前两阶的 2 倍。
|
||||
* 五层递进结构(逐层解锁,门槛见 TALENT_TIER_UNLOCK_THRESHOLD):
|
||||
* - 第 1 层(9001-9099):恒解锁,建议放置全局基础属性;
|
||||
* - 第 2 层(9101-9199):第 1 层累计投入 ≥5 点解锁;
|
||||
* - 第 3 层(9201-9299):第 2 层累计投入 ≥5 点解锁;
|
||||
* - 第 4 层(9301-9399):第 3 层累计投入 ≥5 点解锁;
|
||||
* - 第 5 层(9401-9499):第 4 层累计投入 ≥5 点解锁。
|
||||
*
|
||||
* 解锁规则:一阶恒可升级;二阶需一阶累计投入 ≥10 点;三阶需二阶累计投入 ≥10 点。
|
||||
* 专精/超强职业天赋不再有独立前置天赋,仅受阶位解锁约束。
|
||||
* 解锁规则:第 1 层恒可升级;第 N 层需第 N-1 层累计投入 ≥5 点。
|
||||
* 前置天赋(prereq_uuid/prereq_lv)为软前置:仅限制加点,不影响已有点数的战斗结算。
|
||||
*
|
||||
* 结算口径(与项目 buff 规范一致):
|
||||
* - percent 模式:按英雄基础值(base_ap/base_hp/hero.def)相对放大;
|
||||
@@ -23,14 +25,18 @@ export enum TalentValueMode {
|
||||
Flat = 1,
|
||||
}
|
||||
|
||||
/** 天赋阶位:一阶基础 / 二阶专精 / 三阶超强 */
|
||||
/** 天赋层位:第 1 层 ~ 第 5 层递进解锁 */
|
||||
export enum TalentTier {
|
||||
/** 一阶:基础天赋,全局生效 */
|
||||
Basic = 1,
|
||||
/** 二阶:专精天赋,按职业过滤 */
|
||||
Specialized = 2,
|
||||
/** 三阶:超强天赋,全局 + 职业混合 */
|
||||
Super = 3,
|
||||
/** 第 1 层:恒解锁 */
|
||||
L1 = 1,
|
||||
/** 第 2 层:第 1 层投入 5 点解锁 */
|
||||
L2 = 2,
|
||||
/** 第 3 层:第 2 层投入 5 点解锁 */
|
||||
L3 = 3,
|
||||
/** 第 4 层:第 3 层投入 5 点解锁 */
|
||||
L4 = 4,
|
||||
/** 第 5 层:第 4 层投入 5 点解锁 */
|
||||
L5 = 5,
|
||||
}
|
||||
|
||||
/** 单条属性加成词条 */
|
||||
@@ -47,7 +53,7 @@ export interface TalentAttrBonus {
|
||||
export interface TalentConfig {
|
||||
/** 天赋 uuid(段位见 TalentSet 注释) */
|
||||
uuid: number;
|
||||
/** 所属阶位(升级校验:升下一阶天赋需前一阶累计投入点数达标) */
|
||||
/** 所属层位(升级校验:升下一层天赋需前一层累计投入点数达标) */
|
||||
tier: TalentTier;
|
||||
/** 天赋名称 */
|
||||
name: string;
|
||||
@@ -59,8 +65,16 @@ export interface TalentConfig {
|
||||
bonuses: TalentAttrBonus[];
|
||||
/** 最大等级 */
|
||||
max_lv: number;
|
||||
/** 专精/超强职业天赋:仅对该职业英雄生效;全局天赋省略此字段 */
|
||||
/** 专精/职业天赋:仅对该职业英雄生效;全局天赋省略此字段 */
|
||||
role?: HRole;
|
||||
/** 软前置:前置天赋 uuid(与 prereq_lv 成对出现;缺省视为无前置) */
|
||||
prereq_uuid?: number;
|
||||
/** 软前置:前置天赋要求达到的等级(仅限制加点,不影响已有点数的结算) */
|
||||
prereq_lv?: number;
|
||||
/** L4 触发修正:触发类技能计数阈值减少量(每级,下限 1;与 bonuses 互斥) */
|
||||
t_num_reduce_per_lv?: number;
|
||||
/** L5 触发修正:触发类技能额外触发 1 次的概率(每级百分点;与 bonuses 互斥) */
|
||||
extra_trigger_chance_per_lv?: number;
|
||||
}
|
||||
|
||||
/** 单条已解析的加成(等级已乘算) */
|
||||
@@ -84,208 +98,201 @@ export interface ITalentTarget {
|
||||
base_ap: number;
|
||||
/** 基础血量快照(percent 模式的基数) */
|
||||
base_hp: number;
|
||||
/** L4 写入:触发类技能计数阈值减少量 */
|
||||
talent_t_num_reduce: number;
|
||||
/** L5 写入:触发类技能额外触发 1 次的概率(百分点) */
|
||||
talent_extra_trigger_chance: number;
|
||||
/** 防御基础值(percent 模式的基数,等于 hero.def) */
|
||||
[key: string]: any;
|
||||
}
|
||||
|
||||
/**
|
||||
* 天赋配置表。
|
||||
* uuid 段位:9001-9099 一阶基础(全局);9101-9199 二阶专精(按职业);
|
||||
* 9201-9209 三阶超强·全局;9211-9219 三阶超强·职业。
|
||||
* uuid 段位:9001-9099 第 1 层;9101-9199 第 2 层;9201-9299 第 3 层;
|
||||
* 9301-9399 第 4 层;9401-9499 第 5 层。
|
||||
* 每层建议放置 4-6 个天赋;前置天赋用 prereq_uuid + prereq_lv 声明(软前置,仅限制加点)。
|
||||
* icon 复用 SkillSet/uiconsAtlas 既有帧名,后续可在编辑器侧替换为专属图标。
|
||||
*/
|
||||
export const TalentSet: Record<number, TalentConfig> = {
|
||||
// ==================== 一阶·基础天赋(9001-9099,全局生效) ====================
|
||||
// ==================== 第 1 层(9001-9099,恒解锁,基础属性) ====================
|
||||
9001: {
|
||||
uuid: 9001, tier: TalentTier.Basic, name: "攻击强化", info: "所有英雄攻击 +{value}%", icon: "3-Aggression",
|
||||
uuid: 9001, tier: TalentTier.L1, name: "攻击强化", info: "所有英雄攻击 +{value}%", icon: "3-Aggression",
|
||||
bonuses: [{ attr: Attrs.ap, mode: TalentValueMode.Percent, per_lv: 3 }],
|
||||
max_lv: 5,
|
||||
},
|
||||
9002: {
|
||||
uuid: 9002, tier: TalentTier.Basic, name: "生命强化", info: "所有英雄生命 +{value}%", icon: "29-Endure",
|
||||
uuid: 9002, tier: TalentTier.L1, name: "生命强化", info: "所有英雄生命 +{value}%", icon: "29-Endure",
|
||||
bonuses: [{ attr: Attrs.hp_max, mode: TalentValueMode.Percent, per_lv: 5 }],
|
||||
max_lv: 5,
|
||||
},
|
||||
9003: {
|
||||
uuid: 9003, tier: TalentTier.Basic, name: "防御强化", info: "所有英雄防御 +{value} 点", icon: "46-Iron-Clad",
|
||||
uuid: 9003, tier: TalentTier.L1, name: "防御强化", info: "所有英雄防御 +{value} 点", icon: "46-Iron-Clad",
|
||||
bonuses: [{ attr: Attrs.defense, mode: TalentValueMode.Flat, per_lv: 8 }],
|
||||
max_lv: 5,
|
||||
},
|
||||
9004: {
|
||||
uuid: 9004, tier: TalentTier.Basic, name: "暴击强化", info: "所有英雄暴击率 +{value}%", icon: "27-Hawkeye",
|
||||
uuid: 9004, tier: TalentTier.L1, name: "反伤荆棘", info: "所有英雄反伤 +{value} 点", icon: "45-Induration",
|
||||
bonuses: [{ attr: Attrs.thorns_dmg, mode: TalentValueMode.Flat, per_lv: 5 }],
|
||||
max_lv: 5,
|
||||
},
|
||||
|
||||
// ==================== 第 2 层(9101-9199,第 1 层投入 5 点解锁,概率属性) ====================
|
||||
9101: {
|
||||
uuid: 9101, tier: TalentTier.L2, name: "暴击强化", info: "所有英雄暴击率 +{value}%", icon: "27-Hawkeye",
|
||||
bonuses: [{ attr: Attrs.critical, mode: TalentValueMode.Flat, per_lv: 2 }],
|
||||
max_lv: 5,
|
||||
},
|
||||
9005: {
|
||||
uuid: 9005, tier: TalentTier.Basic, name: "击晕强化", info: "所有英雄击晕率 +{value}%", icon: "13-Concussion",
|
||||
bonuses: [{ attr: Attrs.stun_chance, mode: TalentValueMode.Flat, per_lv: 2 }],
|
||||
max_lv: 5,
|
||||
},
|
||||
9006: {
|
||||
uuid: 9006, tier: TalentTier.Basic, name: "冰冻强化", info: "所有英雄冰冻率 +{value}%", icon: "92-Frost-Bite",
|
||||
bonuses: [{ attr: Attrs.freeze_chance, mode: TalentValueMode.Flat, per_lv: 2 }],
|
||||
max_lv: 5,
|
||||
},
|
||||
9007: {
|
||||
uuid: 9007, tier: TalentTier.Basic, name: "击退强化", info: "所有英雄击退距离 +{value}", icon: "34-Force-Push",
|
||||
9102: {
|
||||
uuid: 9102, tier: TalentTier.L2, name: "击退强化", info: "所有英雄击退距离 +{value}", icon: "34-Force-Push",
|
||||
bonuses: [{ attr: Attrs.knockback_distance, mode: TalentValueMode.Flat, per_lv: 10 }],
|
||||
max_lv: 5,
|
||||
},
|
||||
// 风怒机制已停用: 9008 风怒强化天赋已移除
|
||||
/*
|
||||
9008: {
|
||||
uuid: 9008, tier: TalentTier.Basic, name: "风怒强化", info: "所有英雄风怒率 +{value}%", icon: "98-Enchant-Wind",
|
||||
bonuses: [{ attr: Attrs.wfuny, mode: TalentValueMode.Flat, per_lv: 2 }],
|
||||
max_lv: 5,
|
||||
},
|
||||
*/
|
||||
|
||||
// ==================== 二阶·专精天赋(9101-9199,按职业过滤;一阶投入 10 点解锁) ====================
|
||||
9101: {
|
||||
uuid: 9101, tier: TalentTier.Specialized, name: "坦克专精", info: "坦克防御 +{value}%、生命 +{value2}%", icon: "36-Guardian-Stance",
|
||||
bonuses: [
|
||||
{ attr: Attrs.defense, mode: TalentValueMode.Percent, per_lv: 30 },
|
||||
{ attr: Attrs.hp_max, mode: TalentValueMode.Percent, per_lv: 5 },
|
||||
],
|
||||
max_lv: 5, role: HRole.Tank,
|
||||
},
|
||||
9102: {
|
||||
uuid: 9102, tier: TalentTier.Specialized, name: "战士专精", info: "战士生命 +{value}%", icon: "1-Battle-Roar",
|
||||
bonuses: [{ attr: Attrs.hp_max, mode: TalentValueMode.Percent, per_lv: 12 }],
|
||||
max_lv: 5, role: HRole.Warrior,
|
||||
},
|
||||
9103: {
|
||||
uuid: 9103, tier: TalentTier.Specialized, name: "刺客专精", info: "刺客攻击 +{value}%、暴击率 +{value2}%", icon: "127-Hide",
|
||||
bonuses: [
|
||||
{ attr: Attrs.ap, mode: TalentValueMode.Percent, per_lv: 8 },
|
||||
{ attr: Attrs.critical, mode: TalentValueMode.Flat, per_lv: 2 },
|
||||
],
|
||||
max_lv: 5, role: HRole.Assassin,
|
||||
uuid: 9103, tier: TalentTier.L2, name: "冰冻强化", info: "所有英雄冰冻率 +{value}%", icon: "92-Frost-Bite",
|
||||
bonuses: [{ attr: Attrs.freeze_chance, mode: TalentValueMode.Flat, per_lv: 2 }],
|
||||
max_lv: 5,
|
||||
},
|
||||
9104: {
|
||||
uuid: 9104, tier: TalentTier.Specialized, name: "射手专精", info: "射手攻击 +{value}%、穿透率 +{value2}%", icon: "56-Pierce-Shot",
|
||||
bonuses: [
|
||||
{ attr: Attrs.ap, mode: TalentValueMode.Percent, per_lv: 8 },
|
||||
{ attr: Attrs.puncture_chance, mode: TalentValueMode.Flat, per_lv: 2 },
|
||||
],
|
||||
max_lv: 5, role: HRole.Archer,
|
||||
uuid: 9104, tier: TalentTier.L2, name: "击晕强化", info: "所有英雄击晕率 +{value}%", icon: "13-Concussion",
|
||||
bonuses: [{ attr: Attrs.stun_chance, mode: TalentValueMode.Flat, per_lv: 2 }],
|
||||
max_lv: 5,
|
||||
},
|
||||
9105: {
|
||||
uuid: 9105, tier: TalentTier.Specialized, name: "法师专精", info: "法师攻击 +{value}%、冰冻率 +{value2}%", icon: "145-Electromancy",
|
||||
bonuses: [
|
||||
{ attr: Attrs.ap, mode: TalentValueMode.Percent, per_lv: 8 },
|
||||
{ attr: Attrs.freeze_chance, mode: TalentValueMode.Flat, per_lv: 2 },
|
||||
],
|
||||
max_lv: 5, role: HRole.Mage,
|
||||
uuid: 9105, tier: TalentTier.L2, name: "穿透强化", info: "所有英雄穿透率 +{value}%", icon: "56-Pierce-Shot",
|
||||
bonuses: [{ attr: Attrs.puncture_chance, mode: TalentValueMode.Flat, per_lv: 2 }],
|
||||
max_lv: 5,
|
||||
},
|
||||
9106: {
|
||||
uuid: 9106, tier: TalentTier.Specialized, name: "辅助专精", info: "辅助治疗量 +{value}%、施加的增益效果 +{value2}%", icon: "38-Healing-Light",
|
||||
bonuses: [
|
||||
{ attr: Attrs.heal_power, mode: TalentValueMode.Flat, per_lv: 10 },
|
||||
{ attr: Attrs.buff_power, mode: TalentValueMode.Flat, per_lv: 8 },
|
||||
],
|
||||
max_lv: 5, role: HRole.Support,
|
||||
uuid: 9106, tier: TalentTier.L2, name: "暴伤强化", info: "所有英雄暴击伤害 +{value}%", icon: "37-Head-Shot",
|
||||
bonuses: [{ attr: Attrs.critical_damage, mode: TalentValueMode.Flat, per_lv: 5 }],
|
||||
max_lv: 5,
|
||||
},
|
||||
|
||||
// ==================== 三阶·超强天赋(9201-9219,二阶投入 10 点解锁;幅度约为前两阶 2 倍) ====================
|
||||
// ---- 全局超强(9201-9209) ----
|
||||
// ==================== 第 3 层(9201-9299,第 2 层投入 5 点解锁,职业加成) ====================
|
||||
9201: {
|
||||
uuid: 9201, tier: TalentTier.Super, name: "神威降临", info: "所有英雄攻击 +{value}%、生命 +{value2}%", icon: "52-Might-of-Heaven",
|
||||
uuid: 9201, tier: TalentTier.L3, name: "坦克专精", info: "坦克生命 +{value}%、防御 +{value2} 点", icon: "36-Guardian-Stance",
|
||||
bonuses: [
|
||||
{ attr: Attrs.ap, mode: TalentValueMode.Percent, per_lv: 8 },
|
||||
{ attr: Attrs.hp_max, mode: TalentValueMode.Percent, per_lv: 8 },
|
||||
],
|
||||
max_lv: 5,
|
||||
},
|
||||
9202: {
|
||||
uuid: 9202, tier: TalentTier.Super, name: "致命终结", info: "所有英雄暴击率 +{value}%、暴击伤害 +{value2}%", icon: "37-Head-Shot",
|
||||
bonuses: [
|
||||
{ attr: Attrs.critical, mode: TalentValueMode.Flat, per_lv: 3 },
|
||||
{ attr: Attrs.critical_damage, mode: TalentValueMode.Flat, per_lv: 15 },
|
||||
],
|
||||
max_lv: 5,
|
||||
},
|
||||
9203: {
|
||||
uuid: 9203, tier: TalentTier.Super, name: "破甲重创", info: "所有英雄穿透率 +{value}%、穿透伤害 +{value2}%", icon: "76-Shove-Stab",
|
||||
bonuses: [
|
||||
{ attr: Attrs.puncture_chance, mode: TalentValueMode.Flat, per_lv: 3 },
|
||||
{ attr: Attrs.puncture_dmg_bonus, mode: TalentValueMode.Flat, per_lv: 10 },
|
||||
],
|
||||
max_lv: 5,
|
||||
},
|
||||
9204: {
|
||||
uuid: 9204, tier: TalentTier.Super, name: "钢铁之躯", info: "所有英雄防御 +{value}%、生命 +{value2}%", icon: "45-Induration",
|
||||
bonuses: [
|
||||
{ attr: Attrs.defense, mode: TalentValueMode.Percent, per_lv: 20 },
|
||||
{ attr: Attrs.hp_max, mode: TalentValueMode.Percent, per_lv: 6 },
|
||||
],
|
||||
max_lv: 5,
|
||||
},
|
||||
// ---- 职业超强(9211-9219,按 HRole 过滤) ----
|
||||
9211: {
|
||||
uuid: 9211, tier: TalentTier.Super, name: "不朽壁垒", info: "坦克防御 +{value}%、生命 +{value2}%", icon: "36-Guardian-Stance",
|
||||
bonuses: [
|
||||
{ attr: Attrs.defense, mode: TalentValueMode.Percent, per_lv: 40 },
|
||||
{ attr: Attrs.hp_max, mode: TalentValueMode.Percent, per_lv: 8 },
|
||||
{ attr: Attrs.defense, mode: TalentValueMode.Flat, per_lv: 10 },
|
||||
],
|
||||
max_lv: 5, role: HRole.Tank,
|
||||
},
|
||||
9212: {
|
||||
uuid: 9212, tier: TalentTier.Super, name: "狂血战魂", info: "战士攻击 +{value}%、生命 +{value2}%", icon: "113-Rage",
|
||||
9202: {
|
||||
uuid: 9202, tier: TalentTier.L3, name: "战士专精", info: "战士攻击 +{value}%、生命 +{value2}%", icon: "1-Battle-Roar",
|
||||
bonuses: [
|
||||
{ attr: Attrs.ap, mode: TalentValueMode.Percent, per_lv: 10 },
|
||||
{ attr: Attrs.hp_max, mode: TalentValueMode.Percent, per_lv: 8 },
|
||||
{ attr: Attrs.ap, mode: TalentValueMode.Percent, per_lv: 6 },
|
||||
{ attr: Attrs.hp_max, mode: TalentValueMode.Percent, per_lv: 6 },
|
||||
],
|
||||
max_lv: 5, role: HRole.Warrior,
|
||||
},
|
||||
9213: {
|
||||
uuid: 9213, tier: TalentTier.Super, name: "影刃绝杀", info: "刺客攻击 +{value}%、暴击伤害 +{value2}%", icon: "136-Heart-Rip",
|
||||
9203: {
|
||||
uuid: 9203, tier: TalentTier.L3, name: "刺客专精", info: "刺客攻击 +{value}%、攻速 +{value2}%", icon: "127-Hide",
|
||||
bonuses: [
|
||||
{ attr: Attrs.ap, mode: TalentValueMode.Percent, per_lv: 12 },
|
||||
{ attr: Attrs.critical_damage, mode: TalentValueMode.Flat, per_lv: 12 },
|
||||
{ attr: Attrs.ap, mode: TalentValueMode.Percent, per_lv: 8 },
|
||||
{ attr: Attrs.speed, mode: TalentValueMode.Flat, per_lv: 3 },
|
||||
],
|
||||
max_lv: 5, role: HRole.Assassin,
|
||||
},
|
||||
9214: {
|
||||
uuid: 9214, tier: TalentTier.Super, name: "穿云贯日", info: "射手攻击 +{value}%、穿透伤害 +{value2}%", icon: "37-Head-Shot",
|
||||
9204: {
|
||||
uuid: 9204, tier: TalentTier.L3, name: "射手专精", info: "射手攻击 +{value}%、攻速 +{value2}%", icon: "56-Pierce-Shot",
|
||||
bonuses: [
|
||||
{ attr: Attrs.ap, mode: TalentValueMode.Percent, per_lv: 12 },
|
||||
{ attr: Attrs.puncture_dmg_bonus, mode: TalentValueMode.Flat, per_lv: 8 },
|
||||
{ attr: Attrs.ap, mode: TalentValueMode.Percent, per_lv: 8 },
|
||||
{ attr: Attrs.speed, mode: TalentValueMode.Flat, per_lv: 3 },
|
||||
],
|
||||
max_lv: 5, role: HRole.Archer,
|
||||
},
|
||||
9215: {
|
||||
uuid: 9215, tier: TalentTier.Super, name: "元素主宰", info: "法师攻击 +{value}%、冰冻率 +{value2}%", icon: "144-Cryomancy",
|
||||
9205: {
|
||||
uuid: 9205, tier: TalentTier.L3, name: "法师专精", info: "法师攻击 +{value}%、技能增益效果 +{value2}%", icon: "145-Electromancy",
|
||||
bonuses: [
|
||||
{ attr: Attrs.ap, mode: TalentValueMode.Percent, per_lv: 12 },
|
||||
{ attr: Attrs.freeze_chance, mode: TalentValueMode.Flat, per_lv: 3 },
|
||||
{ attr: Attrs.ap, mode: TalentValueMode.Percent, per_lv: 8 },
|
||||
{ attr: Attrs.buff_power, mode: TalentValueMode.Flat, per_lv: 6 },
|
||||
],
|
||||
max_lv: 5, role: HRole.Mage,
|
||||
},
|
||||
9216: {
|
||||
uuid: 9216, tier: TalentTier.Super, name: "圣光普照", info: "辅助治疗量 +{value}%、施加的增益效果 +{value2}%", icon: "40-Holy",
|
||||
9206: {
|
||||
uuid: 9206, tier: TalentTier.L3, name: "辅助专精", info: "辅助治疗量 +{value}%、增益效果 +{value2}%", icon: "38-Healing-Light",
|
||||
bonuses: [
|
||||
{ attr: Attrs.heal_power, mode: TalentValueMode.Flat, per_lv: 15 },
|
||||
{ attr: Attrs.buff_power, mode: TalentValueMode.Flat, per_lv: 12 },
|
||||
{ attr: Attrs.heal_power, mode: TalentValueMode.Flat, per_lv: 10 },
|
||||
{ attr: Attrs.buff_power, mode: TalentValueMode.Flat, per_lv: 6 },
|
||||
],
|
||||
max_lv: 5, role: HRole.Support,
|
||||
},
|
||||
|
||||
// ==================== 第 4 层(9301-9399,第 3 层投入 5 点解锁,触发条件减少,按职业) ====================
|
||||
9301: {
|
||||
uuid: 9301, tier: TalentTier.L4, name: "坦克·蓄势", info: "坦克触发类技能所需次数 -{value}", icon: "36-Guardian-Stance",
|
||||
bonuses: [], t_num_reduce_per_lv: 1,
|
||||
max_lv: 2, role: HRole.Tank,
|
||||
},
|
||||
9302: {
|
||||
uuid: 9302, tier: TalentTier.L4, name: "战士·蓄势", info: "战士触发类技能所需次数 -{value}", icon: "113-Rage",
|
||||
bonuses: [], t_num_reduce_per_lv: 1,
|
||||
max_lv: 2, role: HRole.Warrior,
|
||||
},
|
||||
9303: {
|
||||
uuid: 9303, tier: TalentTier.L4, name: "刺客·蓄势", info: "刺客触发类技能所需次数 -{value}", icon: "136-Heart-Rip",
|
||||
bonuses: [], t_num_reduce_per_lv: 1,
|
||||
max_lv: 2, role: HRole.Assassin,
|
||||
},
|
||||
9304: {
|
||||
uuid: 9304, tier: TalentTier.L4, name: "射手·蓄势", info: "射手触发类技能所需次数 -{value}", icon: "74-Satisfaction",
|
||||
bonuses: [], t_num_reduce_per_lv: 1,
|
||||
max_lv: 2, role: HRole.Archer,
|
||||
},
|
||||
9305: {
|
||||
uuid: 9305, tier: TalentTier.L4, name: "法师·蓄势", info: "法师触发类技能所需次数 -{value}", icon: "144-Cryomancy",
|
||||
bonuses: [], t_num_reduce_per_lv: 1,
|
||||
max_lv: 2, role: HRole.Mage,
|
||||
},
|
||||
9306: {
|
||||
uuid: 9306, tier: TalentTier.L4, name: "辅助·蓄势", info: "辅助触发类技能所需次数 -{value}", icon: "40-Holy",
|
||||
bonuses: [], t_num_reduce_per_lv: 1,
|
||||
max_lv: 2, role: HRole.Support,
|
||||
},
|
||||
|
||||
// ==================== 第 5 层(9401-9499,第 4 层投入 5 点解锁,概率额外触发,按职业) ====================
|
||||
9401: {
|
||||
uuid: 9401, tier: TalentTier.L5, name: "坦克·余震", info: "坦克触发类技能 +{value}% 概率额外触发 1 次", icon: "36-Guardian-Stance",
|
||||
bonuses: [], extra_trigger_chance_per_lv: 10,
|
||||
max_lv: 5, role: HRole.Tank, prereq_uuid: 9301, prereq_lv: 1,
|
||||
},
|
||||
9402: {
|
||||
uuid: 9402, tier: TalentTier.L5, name: "战士·余威", info: "战士触发类技能 +{value}% 概率额外触发 1 次", icon: "113-Rage",
|
||||
bonuses: [], extra_trigger_chance_per_lv: 10,
|
||||
max_lv: 5, role: HRole.Warrior, prereq_uuid: 9302, prereq_lv: 1,
|
||||
},
|
||||
9403: {
|
||||
uuid: 9403, tier: TalentTier.L5, name: "刺客·残影", info: "刺客触发类技能 +{value}% 概率额外触发 1 次", icon: "136-Heart-Rip",
|
||||
bonuses: [], extra_trigger_chance_per_lv: 10,
|
||||
max_lv: 5, role: HRole.Assassin, prereq_uuid: 9303, prereq_lv: 1,
|
||||
},
|
||||
9404: {
|
||||
uuid: 9404, tier: TalentTier.L5, name: "射手·连珠", info: "射手触发类技能 +{value}% 概率额外触发 1 次", icon: "74-Satisfaction",
|
||||
bonuses: [], extra_trigger_chance_per_lv: 10,
|
||||
max_lv: 5, role: HRole.Archer, prereq_uuid: 9304, prereq_lv: 1,
|
||||
},
|
||||
9405: {
|
||||
uuid: 9405, tier: TalentTier.L5, name: "法师·回响", info: "法师触发类技能 +{value}% 概率额外触发 1 次", icon: "144-Cryomancy",
|
||||
bonuses: [], extra_trigger_chance_per_lv: 10,
|
||||
max_lv: 5, role: HRole.Mage, prereq_uuid: 9305, prereq_lv: 1,
|
||||
},
|
||||
9406: {
|
||||
uuid: 9406, tier: TalentTier.L5, name: "辅助·福音", info: "辅助触发类技能 +{value}% 概率额外触发 1 次", icon: "40-Holy",
|
||||
bonuses: [], extra_trigger_chance_per_lv: 10,
|
||||
max_lv: 5, role: HRole.Support, prereq_uuid: 9306, prereq_lv: 1,
|
||||
},
|
||||
};
|
||||
|
||||
/** 天赋升级消耗:按阶位统一消耗,同一阶内每级消耗相同 */
|
||||
export const TALENT_UPGRADE_COST: Record<number, number> = {
|
||||
[TalentTier.Basic]: 1, // 基础天赋:1 点升 1 级
|
||||
[TalentTier.Specialized]: 2, // 专精天赋:2 点升 1 级
|
||||
[TalentTier.Super]: 2, // 传说天赋:2 点升 1 级
|
||||
};
|
||||
/** 天赋升级消耗:全部天赋统一 1 点/级 */
|
||||
export const TALENT_UPGRADE_COST = 1;
|
||||
|
||||
/**
|
||||
* 查询升级所需天赋点数
|
||||
* @param tier 天赋所属阶位
|
||||
* @returns 升 1 级所需点数;非法阶位返回 -1
|
||||
* @param _tier 天赋所属层位(保留参数以兼容旧调用;统一点价后不再按层区分)
|
||||
* @returns 升 1 级所需点数(恒为 1)
|
||||
*/
|
||||
export function getTalentUpgradeCost(tier: TalentTier): number {
|
||||
return TALENT_UPGRADE_COST[tier] ?? -1;
|
||||
export function getTalentUpgradeCost(_tier: TalentTier): number {
|
||||
return TALENT_UPGRADE_COST;
|
||||
}
|
||||
|
||||
/** 天赋等级上限(不含):等级从 0 起步,区间 0~29,共 30 级;每升 1 级产出 1 点天赋点 */
|
||||
@@ -308,42 +315,51 @@ export function getTalentLevelExp(curLv: number): number {
|
||||
return TALENT_LEVEL_EXP[curLv];
|
||||
}
|
||||
|
||||
/** 阶位解锁门槛:前一阶累计投入 ≥ 该点数才能升级下一阶天赋 */
|
||||
export const TALENT_TIER_UNLOCK_THRESHOLD = 10;
|
||||
/** 层位解锁门槛:前一层累计投入 ≥ 该点数才能升级下一层天赋 */
|
||||
export const TALENT_TIER_UNLOCK_THRESHOLD = 5;
|
||||
|
||||
/**
|
||||
* 计算指定阶位已投入的天赋点数(按该阶统一消耗 × 等级累加)。
|
||||
* Why: 阶位解锁按"实际消耗点数"而非"等级总和"口径——与玩家直觉(投入了多少点)
|
||||
* 计算指定层位已投入的天赋点数(统一点价 × 等级累加)。
|
||||
* Why: 层位解锁按"实际消耗点数"而非"等级总和"口径——与玩家直觉(投入了多少点)
|
||||
* 及重置退款口径(resetTalents 同表对账)保持一致。
|
||||
* @param levels 天赋等级表(key 为天赋 uuid,value 为当前等级)
|
||||
* @param tier 目标阶位
|
||||
* @returns 该阶位全部天赋已投入的点数总和
|
||||
* @param tier 目标层位
|
||||
* @returns 该层位全部天赋已投入的点数总和
|
||||
*/
|
||||
export function getTalentTierInvestedPoints(levels: Record<number, number>, tier: TalentTier): number {
|
||||
if (!levels) return 0;
|
||||
const cost = getTalentUpgradeCost(tier);
|
||||
if (cost <= 0) return 0;
|
||||
let invested = 0;
|
||||
for (const key in levels) {
|
||||
const cfg = TalentSet[key];
|
||||
if (!cfg || cfg.tier !== tier) continue;
|
||||
invested += levels[key] * cost;
|
||||
invested += levels[key] * TALENT_UPGRADE_COST;
|
||||
}
|
||||
return invested;
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断指定阶位是否已解锁(加点入口校验用;战斗结算无需关心阶位——已投入的等级恒生效)。
|
||||
* 规则:一阶恒解锁;二阶要求一阶累计投入 ≥ TALENT_TIER_UNLOCK_THRESHOLD;三阶要求二阶累计投入达标。
|
||||
* 判断指定层位是否已解锁(加点入口校验用;战斗结算无需关心层位——已投入的等级恒生效)。
|
||||
* 规则:第 1 层恒解锁;第 N 层要求第 N-1 层累计投入 ≥ TALENT_TIER_UNLOCK_THRESHOLD。
|
||||
* @param levels 天赋等级表
|
||||
* @param tier 目标阶位
|
||||
* @param tier 目标层位
|
||||
*/
|
||||
export function isTalentTierUnlocked(levels: Record<number, number>, tier: TalentTier): boolean {
|
||||
if (tier === TalentTier.Basic) return true;
|
||||
if (tier === TalentTier.L1) return true;
|
||||
const prevTier = (tier - 1) as TalentTier;
|
||||
return getTalentTierInvestedPoints(levels, prevTier) >= TALENT_TIER_UNLOCK_THRESHOLD;
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断天赋的软前置是否已满足(加点入口校验用;未满足仅限制加点,不影响已有点数的结算)。
|
||||
* @param levels 天赋等级表
|
||||
* @param cfg 天赋配置
|
||||
* @returns 无前置声明或前置天赋等级达标时返回 true
|
||||
*/
|
||||
export function isTalentPrereqMet(levels: Record<number, number>, cfg: TalentConfig): boolean {
|
||||
if (!cfg.prereq_uuid || !cfg.prereq_lv) return true;
|
||||
return (levels?.[cfg.prereq_uuid] ?? 0) >= cfg.prereq_lv;
|
||||
}
|
||||
|
||||
/** 天赋属性的卡面显示名(迷你卡空间有限,用短标签) */
|
||||
const TALENT_ATTR_LABELS: Partial<Record<Attrs, string>> = {
|
||||
[Attrs.ap]: "攻击",
|
||||
@@ -376,6 +392,15 @@ const TALENT_ATTR_SUFFIX: Partial<Record<Attrs, string>> = {
|
||||
*/
|
||||
export function getTalentDisplayText(cfg: TalentConfig, lv: number): string {
|
||||
const mult = lv > 0 ? lv : 1;
|
||||
// L4/L5 效果词条:不走 bonuses,按专属字段生成文案
|
||||
if (cfg.t_num_reduce_per_lv) {
|
||||
const text = `触发次数 -${cfg.t_num_reduce_per_lv * mult}`;
|
||||
return lv > 0 ? text : `${text}/级`;
|
||||
}
|
||||
if (cfg.extra_trigger_chance_per_lv) {
|
||||
const text = `额外触发 +${cfg.extra_trigger_chance_per_lv * mult}%`;
|
||||
return lv > 0 ? text : `${text}/级`;
|
||||
}
|
||||
const parts: string[] = [];
|
||||
for (const b of cfg.bonuses) {
|
||||
const label = TALENT_ATTR_LABELS[b.attr] ?? String(b.attr);
|
||||
@@ -388,8 +413,8 @@ export function getTalentDisplayText(cfg: TalentConfig, lv: number): string {
|
||||
|
||||
/**
|
||||
* 聚合指定职业英雄生效的全部天赋加成。
|
||||
* Why: 基础/超强全局天赋全局生效,专精与超强职业天赋按 role 过滤;
|
||||
* 阶位解锁只约束加点阶段,战斗加载时(Hero.load / applyHeroLevel)按当前等级直接取加成。
|
||||
* Why: 全局天赋全局生效,职业天赋按 role 过滤;
|
||||
* 层位解锁与软前置只约束加点阶段,战斗加载时(Hero.load / applyHeroLevel)按当前等级直接取加成。
|
||||
* @param levels 天赋等级表(key 为天赋 uuid,value 为当前等级)
|
||||
* @param role 英雄职业(职业过滤依据;无 role 时只应用全局天赋)
|
||||
* @returns 已解析的加成列表(等级已乘算进 value)
|
||||
@@ -412,7 +437,47 @@ export function getTalentBonusesForRole(levels: Record<number, number>, role?: H
|
||||
}
|
||||
|
||||
/**
|
||||
* 将天赋加成写入英雄属性模型(在 Hero.load / MissionCardComp.applyHeroLevel 的属性组装段调用)。
|
||||
* 聚合指定职业英雄的 L4 触发阈值修正量。
|
||||
* @param levels 天赋等级表
|
||||
* @param role 英雄职业
|
||||
* @returns 触发计数阈值的总减少量(SkillTriggerHelper 端再 clamp 下限 1)
|
||||
*/
|
||||
export function getTalentTriggerNumReduce(levels: Record<number, number>, role?: HRole): number {
|
||||
let total = 0;
|
||||
if (!levels) return total;
|
||||
for (const key in levels) {
|
||||
const lv = levels[key];
|
||||
if (lv <= 0) continue;
|
||||
const cfg = TalentSet[key];
|
||||
if (!cfg || !cfg.t_num_reduce_per_lv) continue;
|
||||
if (cfg.role !== undefined && cfg.role !== role) continue;
|
||||
total += cfg.t_num_reduce_per_lv * lv;
|
||||
}
|
||||
return total;
|
||||
}
|
||||
|
||||
/**
|
||||
* 聚合指定职业英雄的 L5 额外触发概率(百分点)。
|
||||
* @param levels 天赋等级表
|
||||
* @param role 英雄职业
|
||||
* @returns 额外触发 1 次的概率(百分点,可超过 100 由消费端自行 clamp)
|
||||
*/
|
||||
export function getTalentExtraTriggerChance(levels: Record<number, number>, role?: HRole): number {
|
||||
let total = 0;
|
||||
if (!levels) return total;
|
||||
for (const key in levels) {
|
||||
const lv = levels[key];
|
||||
if (lv <= 0) continue;
|
||||
const cfg = TalentSet[key];
|
||||
if (!cfg || !cfg.extra_trigger_chance_per_lv) continue;
|
||||
if (cfg.role !== undefined && cfg.role !== role) continue;
|
||||
total += cfg.extra_trigger_chance_per_lv * lv;
|
||||
}
|
||||
return total;
|
||||
}
|
||||
|
||||
/**
|
||||
* 将天赋加成写入英雄属性模型(统一由 HeroAttrsComp.applyTalent 调用)。
|
||||
*
|
||||
* 结算规则:
|
||||
* - Percent 模式:以基础快照为基数(ap→base_ap,hp_max→base_hp,defense→def_base),按百分比放大后累加;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { v3 } from "cc"
|
||||
import { v3 } from "cc"
|
||||
import { BoxSet, FacSet, FightSet } from "./GameSet"
|
||||
import { SkillOverrides, TGroup, SkillSet, FieldSkillSet, SkillConfig, SkillKind, FieldSkillConfig, FieldSkillType, mergeSkillParams } from "./SkillSet"
|
||||
import { SkillOverrides, TGroup, SkillSet, FieldSkillSet, SkillConfig, SkillKind, FieldSkillConfig, FieldSkillType, mergeSkillParams, BuffTarget } from "./SkillSet"
|
||||
import { BuffList, BuffConfig, ModOp } from "./BuffSet"
|
||||
import { Attrs } from "./HeroAttrs"
|
||||
|
||||
@@ -58,6 +58,30 @@ export const AtkSpeedSet = {
|
||||
[AtkSpeedLv.VerySlow]: { name: "极慢", cd: 1.50 },
|
||||
};
|
||||
|
||||
/**
|
||||
* 英雄大招(skills[1])CD 分级配置(5 档,与 AtkSpeedLv 五档结构对齐)。
|
||||
* 分档规则:VeryFast=单体爆发/高频压制,Normal=群体伤害/控制,VerySlow=全体增益/治疗/护盾,
|
||||
* Fast/Slow 为中间档,供同类技能内细分释放节奏。
|
||||
* Why: 大招 CD 曾 18/19 英雄统一 8s,场上大招齐发成"脉冲",玩家难以感知单次大招释放;
|
||||
* 按技能效果类型分档交错 CD(6~10s),形成持续鼓点节奏,拉开"高频小爆发 vs 稀有大回报"的感知差。
|
||||
* TODO: CD 档位与数值联动补偿(短 CD 单次数值下调、长 CD 上调)待观察实战强度后统一调整。
|
||||
*/
|
||||
export enum UltCdLv {
|
||||
VeryFast = 1, // 单体爆发/高频压制
|
||||
Fast = 2, // 频繁压制(中间档)
|
||||
Normal = 3, // 群体伤害/控制
|
||||
Slow = 4, // 中度团队增益(中间档)
|
||||
VerySlow = 5, // 全体增益/治疗/护盾
|
||||
}
|
||||
|
||||
export const UltCdSet = {
|
||||
[UltCdLv.VeryFast]: { name: "极频", cd: 6 },
|
||||
[UltCdLv.Fast]: { name: "高频", cd: 7 },
|
||||
[UltCdLv.Normal]: { name: "标准", cd: 8 },
|
||||
[UltCdLv.Slow]: { name: "低频", cd: 9 },
|
||||
[UltCdLv.VerySlow]: { name: "稀有", cd: 10 },
|
||||
};
|
||||
|
||||
export const HeroPos = {
|
||||
0: { pos: v3(-320, BoxSet.GAME_LINE, 0) },
|
||||
1: { pos: v3(0, BoxSet.GAME_LINE, 0) },
|
||||
@@ -199,6 +223,7 @@ export enum SkillTriggerType {
|
||||
Call = "call", // 召唤后触发 降临
|
||||
Dead = "dead", // 死亡后触发 遗志
|
||||
FStart = "fstart", // 战斗开始 先手
|
||||
FEnd = "fend", // 回合结束 收官
|
||||
Field = "field", // 驻场 光环
|
||||
Atking = "atking", // 攻击后触发 追击
|
||||
Atked = "atked", // 受击后触发 反击
|
||||
@@ -209,6 +234,7 @@ export const SkillTriggerName = {
|
||||
[SkillTriggerType.Call]: "召唤",
|
||||
[SkillTriggerType.Dead]: "死亡后",
|
||||
[SkillTriggerType.FStart]: "回合开始",
|
||||
[SkillTriggerType.FEnd]: "回合结束",
|
||||
[SkillTriggerType.Field]: "光环",
|
||||
[SkillTriggerType.Atking]: "攻击",
|
||||
[SkillTriggerType.Atked]: "受伤",
|
||||
@@ -219,6 +245,7 @@ export const SkillTriggerDesc = {
|
||||
[SkillTriggerType.Call]: "召唤时",
|
||||
[SkillTriggerType.Dead]: "死亡时",
|
||||
[SkillTriggerType.FStart]: "战斗开始时",
|
||||
[SkillTriggerType.FEnd]: "回合结束时",
|
||||
[SkillTriggerType.Field]: "光环",
|
||||
[SkillTriggerType.Atking]: "攻击n次",
|
||||
[SkillTriggerType.Atked]: "受伤n次",
|
||||
@@ -351,7 +378,7 @@ export function getHeroSkillIcon(hero: heroInfo | undefined, skillUuid: number,
|
||||
return undefined;
|
||||
}
|
||||
// 自动定位:再各触发组,最后光环
|
||||
for (const type of [SkillTriggerType.Call, SkillTriggerType.Dead, SkillTriggerType.FStart, SkillTriggerType.Atking, SkillTriggerType.Atked]) {
|
||||
for (const type of [SkillTriggerType.Call, SkillTriggerType.Dead, SkillTriggerType.FStart, SkillTriggerType.FEnd, SkillTriggerType.Atking, SkillTriggerType.Atked]) {
|
||||
const grouped = hero[type] as TriggerGrouped | undefined;
|
||||
const entry = grouped?.[skillUuid]?.[0];
|
||||
if (entry) return resolveTriggerSkillIcon(entry, skillUuid);
|
||||
@@ -395,13 +422,15 @@ export interface heroInfo {
|
||||
[SkillTriggerType.Call]?: TriggerGrouped; // 召唤后触发的技能配置(按 s_uuid 分组,每组按 lv 升序)
|
||||
[SkillTriggerType.Dead]?: TriggerGrouped; // 死亡后触发的技能配置
|
||||
[SkillTriggerType.FStart]?: TriggerGrouped; // 战斗开始时释放的技能配置
|
||||
[SkillTriggerType.FEnd]?: TriggerGrouped; // 回合结束时释放的技能配置
|
||||
[SkillTriggerType.Field]?: LvFieldEntry[]; // 驻场光环(按 lv 升序,运行时取 ≤英雄等级 的最大档)
|
||||
[SkillTriggerType.Atking]?: TriggerGrouped; // 普通攻击后触发的技能配置,s_uuid: 技能id, t_num: 触发所需的普攻次数
|
||||
[SkillTriggerType.Atked]?: TriggerGrouped; // 受击后触发的技能配置,s_uuid: 技能id, t_num: 触发所需的受击次数
|
||||
[SkillTriggerType.Atking]?: TriggerGrouped; // 普通攻击后触发的技能配置,s_uuid: 技能id, t_num: 触发所需的普攻次数, t_chance: 触发概率(%),pity_add: 未触发时下次概率增量
|
||||
[SkillTriggerType.Atked]?: TriggerGrouped; // 受击后触发的技能配置,s_uuid: 技能id, t_num: 触发所需的受击次数, t_chance: 触发概率(%),pity_add: 未触发时下次概率增量
|
||||
dis?: number; // 攻击距离(像素)
|
||||
speed?: number; // 移动速度(像素/秒)
|
||||
dodge?: number; // 闪避率(百分点,缺省由初始化处兜底为全局默认值)
|
||||
accuracy?: number; // 命中率(百分点,缺省由初始化处兜底为全局默认值)
|
||||
phase_ids?: number[]; // Boss 专属:允许的阶段方案 id 列表(引用 BossPhaseSet,生成时随机取一)
|
||||
skills: Record<number, HSkillInfo>; // 携带技能ID列表
|
||||
bonus?: LvBonusAttrsEntry[]; // 额外属性加成(按 lv 升序,运行时累加所有 lv ≤ 英雄等级 的档位 attrs;hp/ap/def 按"基础×品质+成长"快照百分比加成,crt/frz/stun/para 为固定百分点累加)
|
||||
info: string; // 描述文案
|
||||
@@ -476,6 +505,11 @@ export interface LvTriggerEntry {
|
||||
s_lv?: SkillLv; // 此档对应的技能等级(标注用,便于面板显示"技能Lv.x")
|
||||
name?: string; // 该 s_uuid 触发技能组的对外展示名(写在第 1 档,作为组名)
|
||||
t_num: number;
|
||||
/** 触发概率(百分点 0~100,缺省 100 必触发;仅 Atking/Atked 攻受击触发生效) */
|
||||
t_chance?: number;
|
||||
/** 保底叠加:判定未触发时,为该 s_uuid 累积下次概率增量(百分点)。
|
||||
* 缺省/0 = 不叠加;触发成功后清零,最终概率封顶 100 */
|
||||
pity_add?: number;
|
||||
overrides?: SkillOverrides;
|
||||
/** 此档描述模板:缺省回退该组第 1 档 desc;由 HeroSkillText 渲染合并后实时数值。
|
||||
* 显式配置后弹窗提升档(slv2+)直接展示该模板渲染结果,优先于自动 diff */
|
||||
@@ -488,6 +522,20 @@ export interface LvTriggerEntry {
|
||||
*/
|
||||
export type TriggerGrouped = Record<number /*s_uuid*/, LvTriggerEntry[]>;
|
||||
|
||||
/**
|
||||
* 运行时生效的触发条目(resolveTriggerByLv 产出):
|
||||
* 每个 s_uuid 取 ≤lv 最大档的扁平结果,供触发器/评分/文案消费。
|
||||
*/
|
||||
export interface ResolvedTriggerEntry {
|
||||
s_uuid: number;
|
||||
t_num: number;
|
||||
/** 触发概率(百分点,缺省 100 必触发;仅 Atking/Atked 生效) */
|
||||
t_chance?: number;
|
||||
/** 保底叠加:未触发时累积的下次概率增量(百分点,触发成功后清零) */
|
||||
pity_add?: number;
|
||||
overrides?: SkillOverrides;
|
||||
}
|
||||
|
||||
/**
|
||||
* 驻场光环词条:uuid 指向 FieldSkillSet 底座(类型/图标/元数据),
|
||||
* value 为该词条实际生效数值(由配置处按档位指定,不再随 uuid 分档)。
|
||||
@@ -530,26 +578,27 @@ export interface LvBonusAttrsEntry {
|
||||
*=============英雄配置列表================
|
||||
* 几何王国复刻版 — 依据 英雄设计指引.md(A/B 级复刻英雄)配置
|
||||
*
|
||||
* 规则:lv1 激活 skills[0]/skills[1],lv6 解锁 atking/atked/fstart/dead/field 触发技能(触发类统一 lv6 激活,无品质门槛),
|
||||
* 大招(skills[1])lv9/lv16 走 lv_entries 分档成长,lv12 按职业对单项基础属性 +50%(基数取 lv11 有效值),
|
||||
* revive[0] 与 skills[1] 互斥二选一(配置 revive 时按 lv1/lv9/lv16 走 lv_entries 3 级成长),
|
||||
* 品质(rarity)仅影响 lv1 初始基础属性(相邻差 5%,仅 lv1 初始 AP/HP/DEF),不影响 uuid 段位/光环/技能解锁/属性补偿
|
||||
* 编号:本批复刻英雄集中于 5001~5009,rarity 按配置(不遵循段位规则)
|
||||
* 规则:lv1 激活 skills[0]/skills[1],lv4 解锁 atking/atked/fstart/dead/field 触发技能(触发类统一 lv4 激活,无品质门槛),
|
||||
* 大招(skills[1])lv8/lv16 走 lv_entries 分档成长,lv12 按职业对单项基础属性 +50%(基数取"基础×品质+成长"快照),
|
||||
* revive[0] 与 skills[1] 互斥二选一(配置 revive 时按 lv1/lv8/lv16 走 lv_entries 3 级成长),
|
||||
* 品质(rarity)当前全部英雄统一为 1,不再区分品质;getHeroQualityCoef 保留但恒为 1.00,
|
||||
* 若未来重启品质体系,仅影响 lv1 初始基础属性(相邻差 5%),不影响 uuid 段位/光环/技能解锁/属性补偿
|
||||
* 编号:本批复刻英雄集中于 5001~5018,rarity 统一 1
|
||||
*/
|
||||
|
||||
// @hero-setup:region-begin
|
||||
export const HeroInfo: Record<number, heroInfo> = {
|
||||
// @hero-setup:heroes-begin
|
||||
// 5001 叠甲骑士 — CSV导入:自身护盾+全体护盾
|
||||
// 5001 铁憨憨 — CSV导入:自身护盾+全体护盾
|
||||
5001: {
|
||||
uuid: 5001, name: "叠甲骑士", path: "hk1", fac: FacSet.HERO, rarity: 1, lv: 1, type: HType.Melee, grow_type: HGrowType.Tank, role: HRole.Tank, hp: HERO_ROLE_BASE[HRole.Tank].hp + 20, ap: HERO_ROLE_BASE[HRole.Tank].ap, def: HERO_ROLE_BASE[HRole.Tank].def + 10,
|
||||
uuid: 5001, name: "铁憨憨", path: "hk1", fac: FacSet.HERO, rarity: 1, lv: 1, type: HType.Melee, grow_type: HGrowType.Tank, role: HRole.Tank, hp: HERO_ROLE_BASE[HRole.Tank].hp + 20, ap: HERO_ROLE_BASE[HRole.Tank].ap, def: HERO_ROLE_BASE[HRole.Tank].def + 10,
|
||||
skills: {
|
||||
6004: { uuid: 6004, name: "强化普攻", lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0, overrides: {"ap":100}, desc: "挥剑对{target}造成攻击力{ap}%伤害",
|
||||
lv_entries: [
|
||||
{ lv: 2, s_lv: SkillLv.Lv2, overrides: {"ap":120}, desc: "普通攻击 造成 120% 伤害" },
|
||||
],
|
||||
},
|
||||
6301: { uuid: 6301, name: "魔法盾", lv: 1, cd: 10, ccd: 0, overrides: {"ap":30}, desc: "{target}获得生命最大值{ap}%的护盾",
|
||||
6301: { uuid: 6301, name: "魔法盾", lv: 1, cd: UltCdSet[UltCdLv.VerySlow].cd, ccd: 0, overrides: {"ap":30}, desc: "{target}获得生命最大值{ap}%的护盾",
|
||||
lv_entries: [
|
||||
{ lv: 8, s_lv: SkillLv.Lv2, overrides: {"ap":60}, desc: "{target}获得生命最大值{ap}%的护盾" },
|
||||
{ lv: 16, s_lv: SkillLv.Lv3, overrides: {"ap":120}, desc: "{target}获得生命最大值{ap}%的护盾" },
|
||||
@@ -557,206 +606,212 @@ export const HeroInfo: Record<number, heroInfo> = {
|
||||
},
|
||||
},
|
||||
atked: {
|
||||
6301: [
|
||||
{ lv: 4, s_lv: SkillLv.Lv1, name: "全体圣盾", t_num: 3, overrides: {"TGroup":null,"ap":10,"icon":"Stat_UnitSummonIncrease_01"}, desc: "全队获得本英雄生命最大值{ap}%的护盾" },
|
||||
6412: [
|
||||
{ lv: 4, s_lv: SkillLv.Lv1, t_num: 3, t_chance: 50, pity_add: 20, overrides: {"ap":1} },
|
||||
],
|
||||
},
|
||||
bonus: [
|
||||
{ lv: 12, attrs: {"def":50}, name: "钢铁壁垒", icon: "46-Iron-Clad", },
|
||||
],
|
||||
info: "自身强护盾+群体小护盾,强生存",
|
||||
info: "自身强护盾+防御强化",
|
||||
},
|
||||
// 5002 易伤剑仙 — CSV导入:击退压场+易伤放大;复刻酒仙
|
||||
// 5002 破防哥 — CSV导入:击退压场+易伤放大;复刻酒仙
|
||||
5002: {
|
||||
uuid: 5002, name: "易伤剑仙", path: "hk3", fac: FacSet.HERO, rarity: 1, lv: 1, type: HType.Melee, grow_type: HGrowType.Warrior, role: HRole.Warrior, hp: HERO_ROLE_BASE[HRole.Warrior].hp + 5, ap: HERO_ROLE_BASE[HRole.Warrior].ap + 20, def: HERO_ROLE_BASE[HRole.Warrior].def + 5,
|
||||
uuid: 5002, name: "破防哥", path: "hk5", fac: FacSet.HERO, rarity: 1, lv: 1, type: HType.Melee, grow_type: HGrowType.Warrior, role: HRole.Warrior, hp: HERO_ROLE_BASE[HRole.Warrior].hp + 5, ap: HERO_ROLE_BASE[HRole.Warrior].ap + 20, def: HERO_ROLE_BASE[HRole.Warrior].def + 5,
|
||||
skills: {
|
||||
6004: { uuid: 6004, name: "强化普攻", lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0, overrides: {"ap":100}, desc: "对{target}造成攻击力{ap}%伤害",
|
||||
lv_entries: [
|
||||
{ lv: 2, s_lv: SkillLv.Lv2, overrides: {"ap":120}, desc: "普通攻击造成 120% 攻击伤害" },
|
||||
],
|
||||
},
|
||||
6101: { uuid: 6101, name: "气斩", lv: 1, cd: 8, ccd: 0, overrides: {"ap":150,"timed_debuff_id":7002,"icon":"Stat_AttackSpeed_02"}, desc: "斩出气刃,对{target}造成攻击力{ap}%伤害,并使目标易伤(受到伤害加深,持续{dur}秒)",
|
||||
6101: { uuid: 6101, name: "气斩", lv: 1, cd: UltCdSet[UltCdLv.Normal].cd, ccd: 0, overrides: {"ap":150,"timed_debuff_id":7002,"debuff_value":30,"debuff_chance":100,"debuff_duration":5}, desc: "斩出气刃,对{target}造成攻击力{ap}%伤害,并使目标易伤(受到伤害加深,持续{dur}秒)",
|
||||
lv_entries: [
|
||||
{ lv: 8, s_lv: SkillLv.Lv2, overrides: {"buff_value":20} },
|
||||
{ lv: 16, s_lv: SkillLv.Lv3, overrides: {"ap":180,"bck":60,"buff_value":40}, desc: "斩出气刃,对{target}造成攻击力{ap}%伤害,击退{bck},并使目标易伤(持续{dur}秒)" },
|
||||
{ lv: 8, s_lv: SkillLv.Lv2, overrides: {"ap":200,"timed_debuff_id":7002,"debuff_value":70,"debuff_chance":100,"debuff_duration":5} },
|
||||
{ lv: 16, s_lv: SkillLv.Lv3, overrides: {"ap":250,"timed_debuff_id":7002,"debuff_value":150,"debuff_chance":100,"debuff_duration":7} },
|
||||
],
|
||||
},
|
||||
},
|
||||
atking: {
|
||||
6004: [
|
||||
{ lv: 4, s_lv: SkillLv.Lv1, name: "风暴打击", t_num: 3, overrides: {"ap":300,"icon":"Stat_AllUnitAttack"}, desc: "立刻打击{target},造成攻击力{ap}%伤害" },
|
||||
6001: [
|
||||
{ lv: 4, s_lv: SkillLv.Lv1, t_num: 3, t_chance: 50, pity_add: 20, overrides: {"timed_debuff_id":7002,"debuff_value":10,"debuff_chance":100,"debuff_duration":5} },
|
||||
],
|
||||
},
|
||||
bonus: [
|
||||
{ lv: 12, attrs: {"hp":50}, name: "不屈战意", icon: "29-Endure", },
|
||||
],
|
||||
info: "易伤+风怒,近战 dps",
|
||||
info: "易伤,近战 dps",
|
||||
},
|
||||
// 5003 眩晕暴击哥 — CSV导入:高爆发+击晕收割;复刻齐天大圣
|
||||
// 5003 锤哥 — CSV导入:高爆发+击晕收割;复刻齐天大圣
|
||||
5003: {
|
||||
uuid: 5003, name: "眩晕暴击哥", path: "hk5", fac: FacSet.HERO, rarity: 1, lv: 1, type: HType.Melee, grow_type: HGrowType.Warrior, role: HRole.Warrior, hp: HERO_ROLE_BASE[HRole.Warrior].hp + 5, ap: HERO_ROLE_BASE[HRole.Warrior].ap + 20, def: HERO_ROLE_BASE[HRole.Warrior].def + 5,
|
||||
uuid: 5003, name: "锤哥", path: "hk5", fac: FacSet.HERO, rarity: 1, lv: 1, type: HType.Melee, grow_type: HGrowType.Warrior, role: HRole.Warrior, hp: HERO_ROLE_BASE[HRole.Warrior].hp + 5, ap: HERO_ROLE_BASE[HRole.Warrior].ap + 20, def: HERO_ROLE_BASE[HRole.Warrior].def + 5,
|
||||
skills: {
|
||||
6004: { uuid: 6004, name: "强化普攻", lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0, overrides: {"ap":100}, desc: "挥斧对{target}造成攻击力{ap}%伤害",
|
||||
lv_entries: [
|
||||
{ lv: 2, s_lv: SkillLv.Lv2, overrides: {"stun":10}, desc: "普通攻击有{stun}%概率击晕敌人" },
|
||||
],
|
||||
},
|
||||
6104: { uuid: 6104, name: "开山斧", lv: 1, cd: 8, ccd: 0, overrides: {"ap":300,"stun":100}, desc: "劈出开山斧,对{target}造成攻击力{ap}%伤害,必定击晕",
|
||||
6104: { uuid: 6104, name: "开山斧", lv: 1, cd: UltCdSet[UltCdLv.Normal].cd, ccd: 0, overrides: {"ap":250,"stun":100}, desc: "劈出开山斧,对{target}造成攻击力{ap}%伤害,必定击晕",
|
||||
lv_entries: [
|
||||
{ lv: 8, s_lv: SkillLv.Lv2, overrides: {"ap":450,"stun":100} },
|
||||
{ lv: 16, s_lv: SkillLv.Lv3, overrides: {"ap":450,"stun":100} },
|
||||
{ lv: 8, s_lv: SkillLv.Lv2, overrides: {"ap":300,"stun":100} },
|
||||
{ lv: 16, s_lv: SkillLv.Lv3, overrides: {"ap":350,"stun":100} },
|
||||
],
|
||||
},
|
||||
},
|
||||
field: [
|
||||
{ lv: 4, uuids: [{ uuid: 7005, value: 0.25, name: "大圣神威" }] },
|
||||
atking: {
|
||||
6504: [
|
||||
{ lv: 4, s_lv: SkillLv.Lv1, t_num: 3, t_chance: 50, pity_add: 20, overrides: {"buff_value":30}, desc: "{t_chance}% 概率提升普通攻击 30%暴击率5秒" },
|
||||
],
|
||||
},
|
||||
bonus: [
|
||||
{ lv: 12, attrs: {"hp":50}, name: "不屈战意", icon: "29-Endure", },
|
||||
],
|
||||
info: "必晕爆发+暴击光环,近战收割",
|
||||
},
|
||||
// 5004 刀刀暴击 — CSV导入:暴击/暴伤双光环乘区;复刻剑圣
|
||||
// 5004 刀刀 — CSV导入:暴击/暴伤双光环乘区;复刻剑圣
|
||||
5004: {
|
||||
uuid: 5004, name: "刀刀暴击", path: "hc1", fac: FacSet.HERO, rarity: 1, lv: 1, type: HType.Mid, grow_type: HGrowType.Assassin, role: HRole.Assassin, hp: HERO_ROLE_BASE[HRole.Assassin].hp, ap: HERO_ROLE_BASE[HRole.Assassin].ap + 30, def: HERO_ROLE_BASE[HRole.Assassin].def,
|
||||
uuid: 5004, name: "刀刀", path: "hc1", fac: FacSet.HERO, rarity: 1, lv: 1, type: HType.Mid, grow_type: HGrowType.Assassin, role: HRole.Assassin, hp: HERO_ROLE_BASE[HRole.Assassin].hp, ap: HERO_ROLE_BASE[HRole.Assassin].ap + 30, def: HERO_ROLE_BASE[HRole.Assassin].def,
|
||||
skills: {
|
||||
6002: { uuid: 6002, name: "强化普攻", lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Fast].cd, ccd: 0, overrides: {"ap":100}, desc: "挥刀对{target}造成攻击力{ap}%伤害",
|
||||
lv_entries: [
|
||||
{ lv: 2, s_lv: SkillLv.Lv2, overrides: {"crt":10}, desc: "普通攻击有{crt}%概率暴击" },
|
||||
],
|
||||
},
|
||||
6100: { uuid: 6100, name: "光闪", lv: 1, cd: 8, ccd: 0, overrides: {"ap":150}, desc: "斩出光闪,对{target}造成攻击力{ap}%伤害",
|
||||
6150: { uuid: 6150, name: "剑刃风暴", lv: 1, cd: UltCdSet[UltCdLv.VeryFast].cd, ccd: 0, overrides: {"ap":150,"crt":50}, desc: "对{target}造成攻击力{ap}%伤害,有50% 概率暴击",
|
||||
lv_entries: [
|
||||
{ lv: 8, s_lv: SkillLv.Lv2, overrides: {"ap":250} },
|
||||
{ lv: 16, s_lv: SkillLv.Lv3, overrides: {"ap":350} },
|
||||
{ lv: 8, s_lv: SkillLv.Lv2, overrides: {"ap":200,"crt":60} },
|
||||
{ lv: 16, s_lv: SkillLv.Lv3, overrides: {"ap":250,"crt":70} },
|
||||
],
|
||||
},
|
||||
},
|
||||
field: [
|
||||
{ lv: 4, uuids: [{ uuid: 7004, value: 0.12, name: "剑刃风暴" }, { uuid: 7005, value: 0.2, name: "斩魂利刃" }] },
|
||||
atking: {
|
||||
6504: [
|
||||
{ lv: 4, s_lv: SkillLv.Lv1, t_num: 3, t_chance: 50, pity_add: 20, overrides: {"timed_buff_id":7012,"buff_value":10,"buff_chance":100,"buff_duration":5}, desc: "{t_chance}% 概率,普通攻击获得 10% 的暴击率" },
|
||||
],
|
||||
},
|
||||
bonus: [
|
||||
{ lv: 12, attrs: {"ap":50}, name: "致命本能", icon: "36-Guardian-Stance", },
|
||||
],
|
||||
info: "暴击+暴伤双光环,暴击流刺客",
|
||||
},
|
||||
// 5005 出血贼 — CSV导入:入场先手+受击格挡;复刻剑豪
|
||||
// 5005 流血酱 — CSV导入:入场先手+受击格挡;复刻剑豪
|
||||
5005: {
|
||||
uuid: 5005, name: "出血贼", path: "hc2", fac: FacSet.HERO, rarity: 1, lv: 1, type: HType.Mid, grow_type: HGrowType.Assassin, role: HRole.Assassin, hp: HERO_ROLE_BASE[HRole.Assassin].hp, ap: HERO_ROLE_BASE[HRole.Assassin].ap + 30, def: HERO_ROLE_BASE[HRole.Assassin].def,
|
||||
uuid: 5005, name: "流血酱", path: "hc2", fac: FacSet.HERO, rarity: 1, lv: 1, type: HType.Mid, grow_type: HGrowType.Assassin, role: HRole.Assassin, hp: HERO_ROLE_BASE[HRole.Assassin].hp, ap: HERO_ROLE_BASE[HRole.Assassin].ap + 30, def: HERO_ROLE_BASE[HRole.Assassin].def,
|
||||
skills: {
|
||||
6002: { uuid: 6002, name: "强化普攻", lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Fast].cd, ccd: 0, overrides: {"ap":100}, desc: "挥刀对{target}造成攻击力{ap}%伤害",
|
||||
lv_entries: [
|
||||
{ lv: 2, s_lv: SkillLv.Lv2, overrides: {"timed_debuff_id":7007,"debuff_value":30,"debuff_chance":30}, desc: "普通攻击有{debuff_chance}%概率使目标出血(每0.5秒受到{debuff_value}点伤害,持续{dur}秒)" },
|
||||
{ lv: 2, s_lv: SkillLv.Lv2, overrides: {"timed_debuff_id":7007,"debuff_value":-30,"debuff_chance":50}, desc: "普通攻击有{debuff_chance}%概率使目标出血(每0.5秒受到{debuff_value}点伤害,持续{dur}秒)" },
|
||||
],
|
||||
},
|
||||
6103: { uuid: 6103, name: "闪电斩", lv: 1, cd: 8, ccd: 0, overrides: {"ap":150}, desc: "高速斩击{target},造成攻击力{ap}%伤害",
|
||||
6150: { uuid: 6150, name: "血刃风暴", lv: 1, cd: UltCdSet[UltCdLv.VeryFast].cd, ccd: 0, overrides: {"ap":200,"timed_debuff_id":7007,"debuff_value":-20,"debuff_chance":100,"debuff_duration":5}, desc: "高速斩击{target},造成攻击力{ap}%伤害",
|
||||
lv_entries: [
|
||||
{ lv: 8, s_lv: SkillLv.Lv2, overrides: {"ap":250,"timed_debuff_id":7007,"debuff_value":40}, desc: "高速斩击{target},造成攻击力{ap}%,并使目标出血(每0.5秒受到{debuff_value}点伤害,持续{dur}秒)" },
|
||||
{ lv: 16, s_lv: SkillLv.Lv3, overrides: {"ap":350,"timed_debuff_id":7007,"debuff_value":60}, desc: "高速斩击{target},造成攻击力{ap}%,附带 50% 概率麻痹,并使目标出血(每0.5秒受到{debuff_value}点伤害,持续{dur}秒)" },
|
||||
{ lv: 8, s_lv: SkillLv.Lv2, overrides: {"ap":250,"timed_debuff_id":7007,"debuff_value":-30,"debuff_chance":100,"debuff_duration":7}, desc: "高速斩击{target},造成攻击力{ap}%,并使目标出血(每0.5秒受到{debuff_value}点伤害,持续{dur}秒)" },
|
||||
{ lv: 16, s_lv: SkillLv.Lv3, overrides: {"ap":300,"timed_debuff_id":7007,"debuff_value":-50,"debuff_chance":100,"debuff_duration":9}, desc: "高速斩击{target},造成攻击力{ap}%,附带 50% 概率麻痹,并使目标出血(每0.5秒受到{debuff_value}点伤害,持续{dur}秒)" },
|
||||
],
|
||||
},
|
||||
},
|
||||
field: [
|
||||
{ lv: 4, uuids: [{ uuid: 7002, value: 10, name: "攻击光环" }] },
|
||||
atking: {
|
||||
6401: [
|
||||
{ lv: 4, s_lv: SkillLv.Lv1, t_num: 3, t_chance: 50, pity_add: 20, overrides: {"buff_value":2} },
|
||||
],
|
||||
},
|
||||
bonus: [
|
||||
{ lv: 12, attrs: {"ap":50}, name: "致命本能", icon: "36-Guardian-Stance", },
|
||||
],
|
||||
info: "普攻出血+大招群体出血,持续消耗",
|
||||
},
|
||||
// 5006 冻箭哥 — CSV导入:多重单体箭,带冰冻
|
||||
// 5006 冰棍 — CSV导入:多重单体箭,带冰冻
|
||||
5006: {
|
||||
uuid: 5006, name: "冻箭哥", path: "ha1", fac: FacSet.HERO, rarity: 1, lv: 1, type: HType.Long, grow_type: HGrowType.Archer, role: HRole.Archer, hp: HERO_ROLE_BASE[HRole.Archer].hp, ap: HERO_ROLE_BASE[HRole.Archer].ap + 30, def: HERO_ROLE_BASE[HRole.Archer].def,
|
||||
uuid: 5006, name: "冰棍", path: "ha1", fac: FacSet.HERO, rarity: 1, lv: 1, type: HType.Long, grow_type: HGrowType.Archer, role: HRole.Archer, hp: HERO_ROLE_BASE[HRole.Archer].hp, ap: HERO_ROLE_BASE[HRole.Archer].ap + 20, def: HERO_ROLE_BASE[HRole.Archer].def,
|
||||
skills: {
|
||||
6006: { uuid: 6006, name: "强化普攻", lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Normal].cd, ccd: 0, overrides: {"ap":100}, desc: "射出箭矢,对{target}造成攻击力{ap}%伤害",
|
||||
lv_entries: [
|
||||
{ lv: 2, s_lv: SkillLv.Lv2, overrides: {"frz":10}, desc: "普通攻击有{frz}%概率 冰冻敌人" },
|
||||
],
|
||||
},
|
||||
6150: { uuid: 6150, name: "万箭齐发·冰", lv: 1, cd: 8, ccd: 0, overrides: {"ap":150,"frz":30,"icon":"Stat_AttackRangeIncrease_02"}, desc: "万箭齐发,对{target}造成攻击力{ap}%伤害,{frz}%概率冰冻",
|
||||
6150: { uuid: 6150, name: "寒冰箭", lv: 1, cd: UltCdSet[UltCdLv.Normal].cd, ccd: 0, overrides: {"ap":140,"frz":30,"icon":"Stat_AttackRangeIncrease_02","summon_count":5}, desc: "射出 6 支寒冰箭,对{target}造成攻击力{ap}%伤害,每支箭有{frz}%概率冰冻敌人",
|
||||
lv_entries: [
|
||||
{ lv: 8, s_lv: SkillLv.Lv2, overrides: {"ap":200,"frz":50} },
|
||||
{ lv: 16, s_lv: SkillLv.Lv3, overrides: {"ap":250,"frz":70} },
|
||||
{ lv: 8, s_lv: SkillLv.Lv2, overrides: {"ap":180,"frz":30} },
|
||||
{ lv: 16, s_lv: SkillLv.Lv3, overrides: {"ap":220,"frz":30} },
|
||||
],
|
||||
},
|
||||
},
|
||||
field: [
|
||||
{ lv: 4, uuids: [{ uuid: 7006, value: 0.15 }] },
|
||||
atking: {
|
||||
6401: [
|
||||
{ lv: 4, s_lv: SkillLv.Lv1, t_num: 3, t_chance: 50, pity_add: 20, overrides: {"buff_value":2,"TGroup": TGroup.Ally}, desc: "{t_chance}%概率,永久提升全队 2% 攻击力" },
|
||||
],
|
||||
},
|
||||
bonus: [
|
||||
{ lv: 12, attrs: {"ap":50}, name: "鹰眼锁定", icon: "27-Hawkeye", },
|
||||
],
|
||||
info: "冰冻控场+多重箭,远程控制",
|
||||
},
|
||||
// 5007 击退火女 — CSV导入:群体击退/麻痹压场;复刻深渊女王
|
||||
// 5007 火姐 — CSV导入:群体击退/麻痹压场;复刻深渊女王
|
||||
5007: {
|
||||
uuid: 5007, name: "击退火女", path: "hm1", fac: FacSet.HERO, rarity: 1, lv: 1, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Mage, hp: HERO_ROLE_BASE[HRole.Mage].hp - 5, ap: HERO_ROLE_BASE[HRole.Mage].ap + 10, def: HERO_ROLE_BASE[HRole.Mage].def,
|
||||
uuid: 5007, name: "火姐", path: "hm1", fac: FacSet.HERO, rarity: 1, lv: 1, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Mage, hp: HERO_ROLE_BASE[HRole.Mage].hp + 5, ap: HERO_ROLE_BASE[HRole.Mage].ap + 10, def: HERO_ROLE_BASE[HRole.Mage].def,
|
||||
skills: {
|
||||
6010: { uuid: 6010, name: "强化普攻", lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0, overrides: {"ap":100}, desc: "掷出紫魔球,对{target}造成攻击力{ap}%伤害",
|
||||
lv_entries: [
|
||||
{ lv: 2, s_lv: SkillLv.Lv2, overrides: {"bck_chance":20}, desc: "普通攻击有{bck_chance}%概率击退敌人" },
|
||||
],
|
||||
},
|
||||
6200: { uuid: 6200, name: "火焰喷射", lv: 1, cd: 8, ccd: 0, overrides: {"ap":250,"bck":100}, desc: "喷出烈焰风暴,对{target}造成攻击力{ap}%伤害,击退{bck}",
|
||||
6200: { uuid: 6200, name: "火焰喷射", lv: 1, cd: UltCdSet[UltCdLv.Normal].cd, ccd: 0, overrides: {"ap":250,"crt":50}, desc: "喷出烈焰风暴,对{target}造成攻击力{ap}%伤害,击退{bck}",
|
||||
lv_entries: [
|
||||
{ lv: 8, s_lv: SkillLv.Lv2, overrides: {"ap":350,"bck":100} },
|
||||
{ lv: 16, s_lv: SkillLv.Lv3, overrides: {"ap":450,"bck":100,"summon_count":2} },
|
||||
{ lv: 8, s_lv: SkillLv.Lv2, overrides: {"ap":350,"crt":50} },
|
||||
{ lv: 16, s_lv: SkillLv.Lv3, overrides: {"ap":250,"crt":50,"summon_count":4} },
|
||||
],
|
||||
},
|
||||
},
|
||||
field: [
|
||||
{ lv: 4, uuids: [{ uuid: 7002, value: 0.15, name: "深渊威压" }] },
|
||||
{ lv: 4, uuids: [{ uuid: 7002, value: 0.15, name: "攻击光环" }] },
|
||||
],
|
||||
bonus: [
|
||||
{ lv: 12, attrs: {"ap":50}, name: "奥术共鸣", icon: "100-Enchant-Magic", },
|
||||
],
|
||||
info: "烈焰击退+易伤光环,法系压场",
|
||||
},
|
||||
// 5008 团疗奶爸 — CSV导入:全体治疗续航+自身护盾
|
||||
// 5008 奶哥 — CSV导入:全体治疗续航+自身护盾
|
||||
5008: {
|
||||
uuid: 5008, name: "团疗奶爸", path: "hh1", fac: FacSet.HERO, rarity: 1, lv: 1, type: HType.Long, grow_type: HGrowType.Support, role: HRole.Support, hp: HERO_ROLE_BASE[HRole.Support].hp + 10, ap: HERO_ROLE_BASE[HRole.Support].ap + 20, def: HERO_ROLE_BASE[HRole.Support].def,
|
||||
uuid: 5008, name: "奶哥", path: "hh1", fac: FacSet.HERO, rarity: 1, lv: 1, type: HType.Long, grow_type: HGrowType.Support, role: HRole.Support, hp: HERO_ROLE_BASE[HRole.Support].hp + 10, ap: HERO_ROLE_BASE[HRole.Support].ap + 20, def: HERO_ROLE_BASE[HRole.Support].def,
|
||||
skills: {
|
||||
6011: { uuid: 6011, name: "强化普攻", lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Normal].cd, ccd: 0, overrides: {"ap":100}, desc: "挥杖对{target}造成攻击力{ap}%伤害",
|
||||
lv_entries: [
|
||||
{ lv: 2, s_lv: SkillLv.Lv2, overrides: {"ap":120}, desc: "普通攻击造成 120% 攻击伤害" },
|
||||
],
|
||||
},
|
||||
6302: { uuid: 6302, name: "治疗", lv: 1, cd: 8, ccd: 0, overrides: {"ap":30}, desc: "为{target}回复攻击力{ap}%生命",
|
||||
6302: { uuid: 6302, name: "治疗", lv: 1, cd: UltCdSet[UltCdLv.VerySlow].cd, ccd: 0, overrides: {"ap":30,"TGroup": TGroup.Ally}, desc: "为{target}回复攻击力{ap}%生命",
|
||||
lv_entries: [
|
||||
{ lv: 8, s_lv: SkillLv.Lv2, overrides: {"ap":40} },
|
||||
{ lv: 16, s_lv: SkillLv.Lv3, overrides: {"ap":50} },
|
||||
{ lv: 8, s_lv: SkillLv.Lv2, overrides: {"ap":40,"TGroup": TGroup.Ally} },
|
||||
{ lv: 16, s_lv: SkillLv.Lv3, overrides: {"ap":50,"TGroup": TGroup.Ally,"timed_buff_id":7024,"buff_value":20,"buff_chance":100,"buff_duration":5} },
|
||||
],
|
||||
},
|
||||
},
|
||||
atking: {
|
||||
6301: [
|
||||
{ lv: 4, s_lv: SkillLv.Lv1, name: "圣愈之盾", t_num: 3, overrides: {"ap":30}, desc: "{target}获得生命最大值{ap}%的护盾" },
|
||||
field: [
|
||||
{ lv: 4, uuids: [{ uuid: 7001, value: 20 }], desc: "每回合结束 休整恢复的血量值提升 20%" },
|
||||
],
|
||||
},
|
||||
bonus: [
|
||||
{ lv: 12, attrs: {"hp":50}, name: "守护之心", icon: "29-Endure", },
|
||||
],
|
||||
info: "全体治疗+攻击附盾,团队续航",
|
||||
},
|
||||
// 5009 甲虫领主
|
||||
// 5009 甲壳虫
|
||||
5009: {
|
||||
uuid: 5009, name: "甲虫领主", path: "hk2", fac: FacSet.HERO, rarity: 2, lv: 1, type: HType.Melee, grow_type: HGrowType.Tank, role: HRole.Tank, hp: HERO_ROLE_BASE[HRole.Tank].hp, ap: HERO_ROLE_BASE[HRole.Tank].ap, def: HERO_ROLE_BASE[HRole.Tank].def,
|
||||
uuid: 5009, name: "甲壳虫", path: "hk3", fac: FacSet.HERO, rarity: 1, lv: 1, type: HType.Melee, grow_type: HGrowType.Tank, role: HRole.Tank, hp: HERO_ROLE_BASE[HRole.Tank].hp, ap: HERO_ROLE_BASE[HRole.Tank].ap, def: HERO_ROLE_BASE[HRole.Tank].def,
|
||||
skills: {
|
||||
6004: { uuid: 6004, name: "普攻强化", lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0,
|
||||
lv_entries: [
|
||||
{ lv: 2, s_lv: SkillLv.Lv2, overrides: {"proc_skill":{"s_uuid":6502,"chance":10,"overrides":{"ap":5,"TGroup": TGroup.Self}}}, desc: "普通攻击有 10% 的概率为自己释放回春(5 秒恢复生命值的{ap}%)" },
|
||||
{ lv: 2, s_lv: SkillLv.Lv2, overrides: {"ap":120}, desc: "普通攻击造成的伤害提升 20%" },
|
||||
],
|
||||
},
|
||||
6102: { uuid: 6102, lv: 1, cd: 8, ccd: 0, overrides: {"ap":250,"bck":30},
|
||||
6102: { uuid: 6102, lv: 1, cd: UltCdSet[UltCdLv.Normal].cd, ccd: 0, overrides: {"ap":250,"proc_skill":{"s_uuid":6302,"chance":100,"overrides":{"TGroup": TGroup.Self,"buff_value":10}}},
|
||||
lv_entries: [
|
||||
{ lv: 8, s_lv: SkillLv.Lv2, overrides: {"ap":300,"bck":50} },
|
||||
{ lv: 16, s_lv: SkillLv.Lv3, overrides: {"ap":350,"bck":70} },
|
||||
{ lv: 8, s_lv: SkillLv.Lv2, overrides: {"ap":300,"proc_skill":{"s_uuid":6302,"chance":100,"overrides":{"TGroup": TGroup.Self,"buff_value":15}}} },
|
||||
{ lv: 16, s_lv: SkillLv.Lv3, overrides: {"ap":350,"proc_skill":{"s_uuid":6302,"chance":100,"overrides":{"TGroup": TGroup.Self,"buff_value":20}}} },
|
||||
],
|
||||
},
|
||||
},
|
||||
atked: {
|
||||
6302: [
|
||||
{ lv: 4, s_lv: SkillLv.Lv1, t_num: 3, overrides: {"ap":5}, desc: "为自己释放治疗,恢复生命值的{ap}%" },
|
||||
{ lv: 4, s_lv: SkillLv.Lv1, t_num: 3, t_chance: 30, pity_add: 20, overrides: {"ap":5}, desc: "{t_chance}%概率,恢复{ap}%生命值" },
|
||||
],
|
||||
},
|
||||
bonus: [
|
||||
@@ -764,51 +819,51 @@ export const HeroInfo: Record<number, heroInfo> = {
|
||||
],
|
||||
info: "受击自疗+击退,自愈坦克",
|
||||
},
|
||||
// 5010 火箭哥
|
||||
// 5010 火箭筒
|
||||
5010: {
|
||||
uuid: 5010, name: "火箭哥", path: "ha2", fac: FacSet.HERO, rarity: 3, lv: 1, type: HType.Mid, grow_type: HGrowType.Archer, role: HRole.Archer, hp: HERO_ROLE_BASE[HRole.Archer].hp, ap: HERO_ROLE_BASE[HRole.Archer].ap, def: HERO_ROLE_BASE[HRole.Archer].def,
|
||||
uuid: 5010, name: "火箭筒", path: "ha2", fac: FacSet.HERO, rarity: 1, lv: 1, type: HType.Mid, grow_type: HGrowType.Archer, role: HRole.Archer, hp: HERO_ROLE_BASE[HRole.Archer].hp, ap: HERO_ROLE_BASE[HRole.Archer].ap, def: HERO_ROLE_BASE[HRole.Archer].def,
|
||||
skills: {
|
||||
6006: { uuid: 6006, name: "强化普攻", lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Fast].cd, ccd: 0,
|
||||
lv_entries: [
|
||||
{ lv: 2, s_lv: SkillLv.Lv2, overrides: {"ap":100,"bck_chance":10} },
|
||||
{ lv: 2, s_lv: SkillLv.Lv2, overrides: {"crt":10} },
|
||||
],
|
||||
},
|
||||
6151: { uuid: 6151, lv: 1, cd: 8, ccd: 0, overrides: {"ap":70,"summon_count":5,"bck_chance":100},
|
||||
6151: { uuid: 6151, lv: 1, cd: UltCdSet[UltCdLv.VeryFast].cd, ccd: 0, overrides: {"ap":70,"summon_count":5,"timed_debuff_id":7006,"debuff_value":-10,"debuff_chance":100,"debuff_duration":5},
|
||||
lv_entries: [
|
||||
{ lv: 8, s_lv: SkillLv.Lv2, overrides: {"ap":80,"summon_count":5,"bck_chance":100} },
|
||||
{ lv: 16, s_lv: SkillLv.Lv3, overrides: {"bck_chance":100,"ap":100,"summon_count":6} },
|
||||
{ lv: 8, s_lv: SkillLv.Lv2, overrides: {"ap":80,"timed_debuff_id":7006,"debuff_value":-20,"debuff_chance":100,"debuff_duration":5} },
|
||||
{ lv: 16, s_lv: SkillLv.Lv3, overrides: {"ap":100,"timed_debuff_id":7006,"debuff_value":-30,"debuff_chance":100,"debuff_duration":5} },
|
||||
],
|
||||
},
|
||||
},
|
||||
atking: {
|
||||
6008: [
|
||||
{ lv: 4, s_lv: SkillLv.Lv1, t_num: 3, overrides: {"ap":120,"bck_chance":50} },
|
||||
{ lv: 4, s_lv: SkillLv.Lv1, t_num: 3, t_chance: 50, pity_add: 20, overrides: {"ap":120} },
|
||||
],
|
||||
},
|
||||
bonus: [
|
||||
{ lv: 12, attrs: {"ap":50}, name: "鹰眼锁定", icon: "27-Hawkeye", },
|
||||
],
|
||||
info: "万箭齐射+高频击退,远程压制",
|
||||
info: "暴击",
|
||||
},
|
||||
// 5011 控血大师
|
||||
// 5011 血包
|
||||
5011: {
|
||||
uuid: 5011, name: "控血大师", path: "hk3", fac: FacSet.HERO, rarity: 4, lv: 1, type: HType.Melee, grow_type: HGrowType.Tank, role: HRole.Tank, hp: HERO_ROLE_BASE[HRole.Tank].hp, ap: HERO_ROLE_BASE[HRole.Tank].ap, def: HERO_ROLE_BASE[HRole.Tank].def,
|
||||
uuid: 5011, name: "血包", path: "hk2", fac: FacSet.HERO, rarity: 1, lv: 1, type: HType.Melee, grow_type: HGrowType.Tank, role: HRole.Tank, hp: HERO_ROLE_BASE[HRole.Tank].hp, ap: HERO_ROLE_BASE[HRole.Tank].ap, def: HERO_ROLE_BASE[HRole.Tank].def,
|
||||
skills: {
|
||||
6004: { uuid: 6004, name: "普攻强化", lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Normal].cd, ccd: 0,
|
||||
lv_entries: [
|
||||
{ lv: 2, s_lv: SkillLv.Lv2, overrides: {"proc_skill":{"s_uuid":6502,"chance":10,"overrides":{"ap":5}}}, desc: "普攻有 10% 概率,对自己释放回春(5 秒回复5% 生命)" },
|
||||
{ lv: 2, s_lv: SkillLv.Lv2, overrides: {"proc_skill":{"s_uuid":6502,"chance":10,"overrides":{"ap":5,"TGroup": TGroup.Self}}}, desc: "普攻有 10% 概率,对自己释放回春(5 秒回复5% 生命)" },
|
||||
],
|
||||
},
|
||||
6517: { uuid: 6517, name: "生命爆发", lv: 1, cd: 8, ccd: 0, overrides: {"buff_value":30,"buff_duration":10}, desc: "全体友方最大生命值提升{buff_value}%,持续{dur}秒",
|
||||
6103: { uuid: 6103, name: "闪电战", lv: 1, cd: UltCdSet[UltCdLv.VerySlow].cd, ccd: 0, overrides: {"ap":200,"timed_buff_id":7029,"buff_value":30,"buff_chance":100,"buff_duration":5,"buff_target": BuffTarget.Self}, desc: "对前方敌人造成攻击力{ap}%伤害,并提升自己最大生命值{buff_value}%,持续{dur}秒",
|
||||
lv_entries: [
|
||||
{ lv: 8, s_lv: SkillLv.Lv2, overrides: {"buff_value":40,"buff_duration":10}, desc: "全体友方最大生命值提升{buff_value}%,持续{dur}秒" },
|
||||
{ lv: 16, s_lv: SkillLv.Lv3, overrides: {"buff_value":50,"buff_duration":15}, desc: "全体友方最大生命值提升{buff_value}%,持续{dur}秒" },
|
||||
{ lv: 8, s_lv: SkillLv.Lv2, overrides: {"ap":250,"timed_buff_id":7029,"buff_value":40,"buff_chance":100,"buff_duration":5,"buff_target": BuffTarget.Self} },
|
||||
{ lv: 16, s_lv: SkillLv.Lv3, overrides: {"ap":300,"timed_buff_id":7029,"buff_value":50,"buff_chance":100,"buff_duration":5,"buff_target": BuffTarget.Self} },
|
||||
],
|
||||
},
|
||||
},
|
||||
atked: {
|
||||
6402: [
|
||||
{ lv: 4, s_lv: SkillLv.Lv1, t_num: 5, overrides: {"ap":1,"TGroup": TGroup.Ally,"hit_count":3}, desc: "全队永久增加 1% 生命最大值" },
|
||||
{ lv: 4, s_lv: SkillLv.Lv1, t_num: 5, t_chance: 30, pity_add: 15, overrides: {"ap":1,"TGroup": TGroup.Ally,"hit_count":3}, desc: "全队永久增加 1% 生命最大值" },
|
||||
],
|
||||
},
|
||||
bonus: [
|
||||
@@ -816,19 +871,19 @@ export const HeroInfo: Record<number, heroInfo> = {
|
||||
],
|
||||
info: "永久和计时生命最大值,控血大师",
|
||||
},
|
||||
// 5012 疾风法师
|
||||
// 5012 风哥
|
||||
5012: {
|
||||
uuid: 5012, name: "疾风法师", path: "hm2", fac: FacSet.HERO, rarity: 5, lv: 1, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Mage, hp: HERO_ROLE_BASE[HRole.Mage].hp, ap: HERO_ROLE_BASE[HRole.Mage].ap, def: HERO_ROLE_BASE[HRole.Mage].def,
|
||||
uuid: 5012, name: "风哥", path: "hm2", fac: FacSet.HERO, rarity: 1, lv: 1, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Mage, hp: HERO_ROLE_BASE[HRole.Mage].hp, ap: HERO_ROLE_BASE[HRole.Mage].ap, def: HERO_ROLE_BASE[HRole.Mage].def,
|
||||
skills: {
|
||||
6009: { uuid: 6009, name: "普攻强化", lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Normal].cd, ccd: 0,
|
||||
lv_entries: [
|
||||
{ lv: 2, s_lv: SkillLv.Lv2, overrides: {"proc_skill":{"s_uuid":6507,"chance":10,"overrides":{"buff_value":30,"TGroup": TGroup.Self}}} },
|
||||
],
|
||||
},
|
||||
6201: { uuid: 6201, name: "飓风", lv: 1, cd: 8, ccd: 0, overrides: {"ap":100,"summon_count":2,"proc_skill":{"s_uuid":6507,"chance":20,"overrides":{"buff_value":20}}}, desc: "召唤 {summon_count} 道飓风攻击前方敌人,每道飓风造成 {ap}%伤害,每道飓风释放时有<color=#3CE66E>20</color>% 概率增加全体队友<color=#3CE66E>20</color>% 攻速",
|
||||
6201: { uuid: 6201, name: "飓风", lv: 1, cd: UltCdSet[UltCdLv.Normal].cd, ccd: 0, overrides: {"ap":100,"summon_count":2,"proc_skill":{"s_uuid":6507,"chance":20,"overrides":{"buff_value":20,"TGroup": TGroup.Ally}}}, desc: "召唤 {summon_count} 道飓风攻击前方敌人,每道飓风造成 {ap}%伤害,每道飓风释放时有<color=#3CE66E>20</color>% 概率增加全体队友<color=#3CE66E>20</color>% 攻速",
|
||||
lv_entries: [
|
||||
{ lv: 8, s_lv: SkillLv.Lv2, overrides: {"ap":100,"summon_count":3,"proc_skill":{"s_uuid":6507,"chance":20,"overrides":{"buff_value":20}}}, desc: "召唤 {summon_count} 道飓风攻击前方敌人,每道飓风造成 {ap}%伤害,每道飓风释放时有<color=#3CE66E>20</color>% 概率增加全体队友<color=#3CE66E>20</color>% 攻速" },
|
||||
{ lv: 16, s_lv: SkillLv.Lv3, overrides: {"ap":100,"summon_count":4,"proc_skill":{"s_uuid":6507,"chance":20,"overrides":{"buff_value":20}}}, desc: "召唤 {summon_count} 道飓风攻击前方敌人,每道飓风造成 {ap}%伤害,每道飓风释放时有<color=#3CE66E>20</color>% 概率增加全体队友<color=#3CE66E>20</color>% 攻速" },
|
||||
{ lv: 8, s_lv: SkillLv.Lv2, overrides: {"ap":100,"summon_count":3,"proc_skill":{"s_uuid":6507,"chance":25,"overrides":{"buff_value":25,"TGroup": TGroup.Ally}}}, desc: "召唤 {summon_count} 道飓风攻击前方敌人,每道飓风造成 {ap}%伤害,每道飓风释放时有<color=#3CE66E>20</color>% 概率增加全体队友<color=#3CE66E>20</color>% 攻速" },
|
||||
{ lv: 16, s_lv: SkillLv.Lv3, overrides: {"ap":100,"summon_count":4,"proc_skill":{"s_uuid":6507,"chance":30,"overrides":{"buff_value":30,"TGroup": TGroup.Ally}}}, desc: "召唤 {summon_count} 道飓风攻击前方敌人,每道飓风造成 {ap}%伤害,每道飓风释放时有<color=#3CE66E>20</color>% 概率增加全体队友<color=#3CE66E>20</color>% 攻速" },
|
||||
],
|
||||
},
|
||||
},
|
||||
@@ -840,42 +895,42 @@ export const HeroInfo: Record<number, heroInfo> = {
|
||||
],
|
||||
info: "普攻 大招加速 buff+加速光环,加速大师",
|
||||
},
|
||||
// 5013 反伤哥
|
||||
// 5013 血牛
|
||||
5013: {
|
||||
uuid: 5013, name: "反伤哥", path: "hh2", fac: FacSet.HERO, rarity: 4, lv: 1, type: HType.Long, grow_type: HGrowType.Support, role: HRole.Support, hp: HERO_ROLE_BASE[HRole.Support].hp, ap: HERO_ROLE_BASE[HRole.Support].ap, def: HERO_ROLE_BASE[HRole.Support].def,
|
||||
uuid: 5013, name: "血牛", path: "hh2", fac: FacSet.HERO, rarity: 1, lv: 1, type: HType.Long, grow_type: HGrowType.Support, role: HRole.Support, hp: HERO_ROLE_BASE[HRole.Support].hp, ap: HERO_ROLE_BASE[HRole.Support].ap, def: HERO_ROLE_BASE[HRole.Support].def,
|
||||
skills: {
|
||||
6004: { uuid: 6004, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Normal].cd, ccd: 0,
|
||||
lv_entries: [
|
||||
{ lv: 2, s_lv: SkillLv.Lv2, overrides: {"timed_buff_id":7029,"buff_value":10,"buff_chance":20} },
|
||||
{ lv: 2, s_lv: SkillLv.Lv2, overrides: {"ap":120} },
|
||||
],
|
||||
},
|
||||
6515: { uuid: 6515, name: "荆棘护盾", lv: 1, cd: 8, ccd: 0, overrides: {"buff_value":20,"TGroup": TGroup.Ally,"hit_count":3,"buff_duration":5},
|
||||
6517: { uuid: 6517, name: "生命护盾", lv: 1, cd: UltCdSet[UltCdLv.VerySlow].cd, ccd: 0, overrides: {"buff_value":20,"TGroup": TGroup.Ally,"hit_count":3,"buff_duration":5},
|
||||
lv_entries: [
|
||||
{ lv: 8, s_lv: SkillLv.Lv2, overrides: {"buff_value":25,"TGroup": TGroup.Ally,"hit_count":3,"buff_duration":10} },
|
||||
{ lv: 16, s_lv: SkillLv.Lv3, overrides: {"buff_value":30,"buff_duration":10,"hit_count":3,"TGroup": TGroup.Ally} },
|
||||
],
|
||||
},
|
||||
},
|
||||
fstart: {
|
||||
6301: [
|
||||
{ lv: 4, s_lv: SkillLv.Lv1, t_num: 1, overrides: {"ap":20} },
|
||||
atking: {
|
||||
6414: [
|
||||
{ lv: 4, s_lv: SkillLv.Lv1, t_num: 3, t_chance: 30, pity_add: 15, overrides: {"buff_value":10,"TGroup": TGroup.Ally} },
|
||||
],
|
||||
},
|
||||
bonus: [
|
||||
{ lv: 12, attrs: {"hp":50}, name: "守护之心", icon: "29-Endure", },
|
||||
],
|
||||
info: "大招全体反伤 普攻暴击 暴击反伤辅助",
|
||||
info: "大招全体生命最大值+概率全体+反伤护盾",
|
||||
},
|
||||
// 5014 闪避哥
|
||||
// 5014 闪哥
|
||||
5014: {
|
||||
uuid: 5014, name: "闪避哥", path: "hk4", fac: FacSet.HERO, rarity: 4, lv: 1, type: HType.Melee, grow_type: HGrowType.Warrior, role: HRole.Warrior, hp: HERO_ROLE_BASE[HRole.Warrior].hp, ap: HERO_ROLE_BASE[HRole.Warrior].ap, def: HERO_ROLE_BASE[HRole.Warrior].def,
|
||||
uuid: 5014, name: "闪哥", path: "hk4", fac: FacSet.HERO, rarity: 1, lv: 1, type: HType.Melee, grow_type: HGrowType.Warrior, role: HRole.Warrior, hp: HERO_ROLE_BASE[HRole.Warrior].hp, ap: HERO_ROLE_BASE[HRole.Warrior].ap, def: HERO_ROLE_BASE[HRole.Warrior].def,
|
||||
skills: {
|
||||
6004: { uuid: 6004, name: "普攻强化", lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Normal].cd, ccd: 0,
|
||||
lv_entries: [
|
||||
{ lv: 2, s_lv: SkillLv.Lv2, overrides: {"timed_buff_id":7030,"buff_value":10,"buff_chance":20} },
|
||||
{ lv: 2, s_lv: SkillLv.Lv2, overrides: {"crt":10} },
|
||||
],
|
||||
},
|
||||
6100: { uuid: 6100, name: "寒冰斩", lv: 1, cd: 8, ccd: 0, overrides: {"ap":200,"timed_buff_id":7030,"buff_value":50},
|
||||
6100: { uuid: 6100, name: "寒冰斩", lv: 1, cd: UltCdSet[UltCdLv.Normal].cd, ccd: 0, overrides: {"ap":200,"timed_buff_id":7030,"buff_value":50},
|
||||
lv_entries: [
|
||||
{ lv: 8, s_lv: SkillLv.Lv2, overrides: {"ap":250,"timed_buff_id":7030,"buff_value":50} },
|
||||
{ lv: 16, s_lv: SkillLv.Lv3, overrides: {"ap":350,"timed_buff_id":7030,"buff_value":80} },
|
||||
@@ -888,87 +943,74 @@ export const HeroInfo: Record<number, heroInfo> = {
|
||||
bonus: [
|
||||
{ lv: 12, attrs: {"hp":50}, name: "不屈战意", icon: "29-Endure", },
|
||||
],
|
||||
info: "",
|
||||
info: "强闪避",
|
||||
},
|
||||
// 5015 毒箭猎手 — 毒伤持续流:普攻淬毒叠层+毒雨铺DoT+攻击光环喂养毒伤
|
||||
// 5015 毒哥 — 毒伤持续流:普攻淬毒叠层+毒雨铺DoT+攻击光环喂养毒伤
|
||||
5015: {
|
||||
uuid: 5015, name: "毒箭猎手", path: "ha3", fac: FacSet.HERO, rarity: 2, lv: 1, type: HType.Long, grow_type: HGrowType.Archer, role: HRole.Archer, hp: HERO_ROLE_BASE[HRole.Archer].hp + 10, ap: HERO_ROLE_BASE[HRole.Archer].ap, def: HERO_ROLE_BASE[HRole.Archer].def,
|
||||
uuid: 5015, name: "毒哥", path: "ha3", fac: FacSet.HERO, rarity: 1, lv: 1, type: HType.Long, grow_type: HGrowType.Archer, role: HRole.Archer, hp: HERO_ROLE_BASE[HRole.Archer].hp + 10, ap: HERO_ROLE_BASE[HRole.Archer].ap, def: HERO_ROLE_BASE[HRole.Archer].def,
|
||||
skills: {
|
||||
6007: { uuid: 6007, name: "淬毒箭", lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Normal].cd, ccd: 0, overrides: {"ap":100}, desc: "射出箭矢,对{target}造成攻击力{ap}%伤害",
|
||||
lv_entries: [
|
||||
{ lv: 2, s_lv: SkillLv.Lv2, overrides: {"timed_debuff_id":7005,"debuff_value":30,"debuff_chance":30}, desc: "普通攻击有{debuff_chance}%概率使目标中毒(每0.5秒受到{debuff_value}点伤害,持续{dur}秒)" },
|
||||
{ lv: 2, s_lv: SkillLv.Lv2, overrides: {"bck_chance":10}, desc: "普通攻击有{bck_chance}%概率击退敌人" },
|
||||
],
|
||||
},
|
||||
6150: { uuid: 6150, name: "万箭齐发·毒", lv: 1, cd: 8, ccd: 0, overrides: {"ap":150,"timed_debuff_id":7005,"debuff_value":30,"debuff_chance":50,"icon":"4-Apply-Poison"}, desc: "毒箭如雨,对{target}造成攻击力{ap}%伤害,{debuff_chance}%概率使目标中毒(每0.5秒受到{debuff_value}点伤害,持续{dur}秒)",
|
||||
6150: { uuid: 6150, name: "万箭齐发·毒", lv: 1, cd: UltCdSet[UltCdLv.Normal].cd, ccd: 0, overrides: {"ap":150,"timed_debuff_id":7005,"debuff_value":-30,"debuff_chance":50,"icon":"4-Apply-Poison"}, desc: "毒箭如雨,对{target}造成攻击力{ap}%伤害,{debuff_chance}%概率使目标中毒(每0.5秒受到{debuff_value}点伤害,持续{dur}秒)",
|
||||
lv_entries: [
|
||||
{ lv: 8, s_lv: SkillLv.Lv2, overrides: {"ap":200,"buff_value":40,"buff_chance":60} },
|
||||
{ lv: 16, s_lv: SkillLv.Lv3, overrides: {"ap":250,"buff_value":60,"buff_chance":80,"hit_count":2}, desc: "毒箭如雨,对{target}造成攻击力{ap}%伤害,{buff_chance}%概率使目标中毒(每0.5秒受到{buff_value}点伤害,持续{dur}秒),每支箭可命中{hit_count}个目标" },
|
||||
{ lv: 8, s_lv: SkillLv.Lv2, overrides: {"ap":200,"timed_debuff_id":7005,"debuff_value":-60,"debuff_chance":100,"debuff_duration":5} },
|
||||
{ lv: 16, s_lv: SkillLv.Lv3, overrides: {"ap":250,"timed_debuff_id":7005,"debuff_value":-100,"debuff_chance":100,"debuff_duration":7} },
|
||||
],
|
||||
},
|
||||
},
|
||||
atking: {
|
||||
6007: [
|
||||
{ lv: 4, s_lv: SkillLv.Lv1, name: "蚀骨毒箭", t_num: 3, overrides: {"ap":80,"timed_debuff_id":7005,"debuff_value":40,"debuff_chance":100}, desc: "追加射出蚀骨毒箭,对{target}造成攻击力{ap}%伤害,必定使目标中毒(每0.5秒受到{debuff_value}点伤害,持续{dur}秒)" },
|
||||
{ lv: 4, s_lv: SkillLv.Lv1, name: "蚀骨毒箭", t_num: 3, t_chance: 50, pity_add: 20, overrides: {"ap":80,"timed_debuff_id":7005,"debuff_value":40,"debuff_chance":100}, desc: "追加射出蚀骨毒箭,对{target}造成攻击力{ap}%伤害,必定使目标中毒(每0.5秒受到{debuff_value}点伤害,持续{dur}秒)" },
|
||||
],
|
||||
},
|
||||
field: [
|
||||
{ lv: 4, uuids: [{ uuid: 7002, value: 0.1, name: "淬毒磨砺" }] },
|
||||
],
|
||||
bonus: [
|
||||
{ lv: 12, attrs: {"ap":50}, name: "剧毒淬炼", icon: "27-Hawkeye", },
|
||||
],
|
||||
info: "淬毒普攻+毒雨叠层,持续消耗型远程毒C",
|
||||
},
|
||||
// 5016 连珠神射 — 暴击连射爆发流:VeryFast极速普攻+概率追射必暴箭+开局团队暴击爆发
|
||||
// 5016 连珠 — 暴击连射爆发流:VeryFast极速普攻+概率追射必暴箭+开局团队暴击爆发
|
||||
5016: {
|
||||
uuid: 5016, name: "连珠神射", path: "ha4", fac: FacSet.HERO, rarity: 4, lv: 1, type: HType.Mid, grow_type: HGrowType.Archer, role: HRole.Archer, hp: HERO_ROLE_BASE[HRole.Archer].hp, ap: HERO_ROLE_BASE[HRole.Archer].ap + 10, def: HERO_ROLE_BASE[HRole.Archer].def,
|
||||
uuid: 5016, name: "连珠", path: "ha4", fac: FacSet.HERO, rarity: 1, lv: 1, type: HType.Mid, grow_type: HGrowType.Archer, role: HRole.Archer, hp: HERO_ROLE_BASE[HRole.Archer].hp, ap: HERO_ROLE_BASE[HRole.Archer].ap + 10, def: HERO_ROLE_BASE[HRole.Archer].def,
|
||||
skills: {
|
||||
6008: { uuid: 6008, name: "连珠箭", lv: 1, cd: AtkSpeedSet[AtkSpeedLv.VeryFast].cd, ccd: 0, overrides: {"ap":100}, desc: "极速连射,对{target}造成攻击力{ap}%伤害",
|
||||
lv_entries: [
|
||||
{ lv: 2, s_lv: SkillLv.Lv2, overrides: {"crt":20,"proc_skill":{"s_uuid":6007,"chance":20,"overrides":{"crt":100}}}, desc: "普通攻击暴击率提升{crt}%,并有概率触发连射追箭(必定暴击)" },
|
||||
{ lv: 2, s_lv: SkillLv.Lv2, overrides: {"proc_skill":{"s_uuid":6007,"chance":15,"overrides":{"TGroup": TGroup.Enemy,"ap":60}}}, desc: "有 20%额外射击,造成 80% 伤害" },
|
||||
],
|
||||
},
|
||||
6151: { uuid: 6151, name: "裂空箭雨", lv: 1, cd: 8, ccd: 0, overrides: {"ap":150,"crt":30,"summon_count":5}, desc: "箭雨倾泻,对{target}造成攻击力{ap}%伤害,{crt}%概率暴击",
|
||||
6151: { uuid: 6151, name: "裂空箭雨", lv: 1, cd: UltCdSet[UltCdLv.VeryFast].cd, ccd: 0, overrides: {"ap":140,"crt":30,"summon_count":4}, desc: "箭雨倾泻,对{target}造成攻击力{ap}%伤害,{crt}%概率暴击",
|
||||
lv_entries: [
|
||||
{ lv: 8, s_lv: SkillLv.Lv2, overrides: {"ap":200,"crt":50} },
|
||||
{ lv: 16, s_lv: SkillLv.Lv3, overrides: {"ap":250,"crt":70,"summon_count":6,"hit_count":2}, desc: "箭雨倾泻,对{target}造成攻击力{ap}%伤害,{crt}%概率暴击,每支箭可命中{hit_count}个目标" },
|
||||
{ lv: 8, s_lv: SkillLv.Lv2, overrides: {"ap":180,"crt":50} },
|
||||
{ lv: 16, s_lv: SkillLv.Lv3, overrides: {"ap":220,"crt":70,"summon_count":5}, desc: "箭雨倾泻,对{target}造成攻击力{ap}%伤害,{crt}%概率暴击,每支箭可命中{hit_count}个目标" },
|
||||
],
|
||||
},
|
||||
},
|
||||
fstart: {
|
||||
6504: [
|
||||
{ lv: 4, s_lv: SkillLv.Lv1, name: "猎杀时刻", t_num: 1, overrides: {"buff_value":30}, desc: "战斗开始时释放暴击爆发,全体友方暴击率提升{buff_value}%,持续{dur}秒" },
|
||||
],
|
||||
},
|
||||
field: [
|
||||
{ lv: 4, uuids: [{ uuid: 7004, value: 0.15, name: "猎手集结" }] },
|
||||
{ lv: 4, uuids: [{ uuid: 7004, value: 0.1, name: "猎手集结" }] },
|
||||
],
|
||||
bonus: [
|
||||
{ lv: 12, attrs: {"ap":50}, name: "猎杀直觉", icon: "27-Hawkeye", },
|
||||
],
|
||||
info: "极速连射+暴击追射+开局团队暴击,爆发型射手主C",
|
||||
},
|
||||
// 5017 碎甲术士 — 破甲减防法师:fstart先手/普攻概率/大招必定三通道施加破甲7008+穿透光环,团队物理增伤位
|
||||
// 5017 碎甲 — 破甲减防法师:fstart先手/普攻概率/大招必定三通道施加破甲7008+穿透光环,团队物理增伤位
|
||||
5017: {
|
||||
uuid: 5017, name: "碎甲术士", path: "hm3", fac: FacSet.HERO, rarity: 3, lv: 1, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Mage, hp: HERO_ROLE_BASE[HRole.Mage].hp, ap: HERO_ROLE_BASE[HRole.Mage].ap + 10, def: HERO_ROLE_BASE[HRole.Mage].def,
|
||||
uuid: 5017, name: "碎甲", path: "hm3", fac: FacSet.HERO, rarity: 1, lv: 1, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Mage, hp: HERO_ROLE_BASE[HRole.Mage].hp, ap: HERO_ROLE_BASE[HRole.Mage].ap + 10, def: HERO_ROLE_BASE[HRole.Mage].def,
|
||||
skills: {
|
||||
6012: { uuid: 6012, name: "蚀甲酸瓶", lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Normal].cd, ccd: 0, overrides: {"ap":100}, desc: "掷出酸瓶,对{target}造成攻击力{ap}%伤害",
|
||||
lv_entries: [
|
||||
{ lv: 2, s_lv: SkillLv.Lv2, overrides: {"timed_debuff_id":7008,"debuff_chance":30}, desc: "普通攻击有{debuff_chance}%概率使目标破甲(防御降低,持续{dur}秒)" },
|
||||
],
|
||||
},
|
||||
6203: { uuid: 6203, name: "碎甲能量波", lv: 1, cd: 8, ccd: 0, overrides: {"ap":150,"timed_debuff_id":7008}, desc: "释放碎甲能量波,对{target}造成攻击力{ap}%伤害,并使目标破甲(防御降低,持续{dur}秒)",
|
||||
6203: { uuid: 6203, name: "碎甲能量波", lv: 1, cd: UltCdSet[UltCdLv.Normal].cd, ccd: 0, overrides: {"ap":150,"timed_debuff_id":7008,"debuff_value":-30,"debuff_chance":100,"debuff_duration":5}, desc: "释放碎甲能量波,对{target}造成攻击力{ap}%伤害,并使目标破甲(防御降低,持续{dur}秒)",
|
||||
lv_entries: [
|
||||
{ lv: 8, s_lv: SkillLv.Lv2, overrides: {"ap":200} },
|
||||
{ lv: 16, s_lv: SkillLv.Lv3, overrides: {"ap":250,"buff_value":-70}, desc: "释放碎甲能量波,对{target}造成攻击力{ap}%伤害,并使目标破甲加深(防御大幅降低,持续{dur}秒)" },
|
||||
{ lv: 8, s_lv: SkillLv.Lv2, overrides: {"ap":200,"timed_debuff_id":7008,"debuff_value":-50,"debuff_chance":100,"debuff_duration":5} },
|
||||
{ lv: 16, s_lv: SkillLv.Lv3, overrides: {"ap":250,"timed_debuff_id":7008,"debuff_value":-70,"debuff_chance":100,"debuff_duration":7}, desc: "释放碎甲能量波,对{target}造成攻击力{ap}%伤害,并使目标破甲加深(防御大幅降低,持续{dur}秒)" },
|
||||
],
|
||||
},
|
||||
},
|
||||
fstart: {
|
||||
6012: [
|
||||
{ lv: 4, s_lv: SkillLv.Lv1, name: "先手蚀甲", t_num: 1, overrides: {"ap":150,"timed_debuff_id":7008}, desc: "战斗开始时掷出蚀甲酸瓶,对{target}造成攻击力{ap}%伤害,并必定使其破甲(防御降低,持续{dur}秒)" },
|
||||
],
|
||||
},
|
||||
field: [
|
||||
{ lv: 4, uuids: [{ uuid: 7009, value: 0.1, name: "锐矛之赐" }] },
|
||||
],
|
||||
@@ -977,64 +1019,30 @@ export const HeroInfo: Record<number, heroInfo> = {
|
||||
],
|
||||
info: "先手破甲+概率蚀甲+穿透光环,物理队核心增伤位",
|
||||
},
|
||||
// 5018 雷暴领主 — 雷暴AOE爆发+麻痹控场:先手雷击+高倍率能量波
|
||||
// 5018 雷哥 — 雷暴AOE爆发+麻痹控场:先手雷击+高倍率能量波
|
||||
5018: {
|
||||
uuid: 5018, name: "雷暴领主", path: "hm4", fac: FacSet.HERO, rarity: 5, lv: 1, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Mage, hp: HERO_ROLE_BASE[HRole.Mage].hp - 10, ap: HERO_ROLE_BASE[HRole.Mage].ap + 20, def: HERO_ROLE_BASE[HRole.Mage].def,
|
||||
uuid: 5018, name: "雷哥", path: "hm4", fac: FacSet.HERO, rarity: 1, lv: 1, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Mage, hp: HERO_ROLE_BASE[HRole.Mage].hp + 10, ap: HERO_ROLE_BASE[HRole.Mage].ap + 20, def: HERO_ROLE_BASE[HRole.Mage].def,
|
||||
skills: {
|
||||
6009: { uuid: 6009, name: "雷霆弹", lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Fast].cd, ccd: 0, overrides: {"ap":100}, desc: "掷出雷霆弹,对{target}造成攻击力{ap}%伤害",
|
||||
6013: { uuid: 6013, name: "召唤闪电", lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Fast].cd, ccd: 0, overrides: {"ap":100}, desc: "召唤闪电,对{target}造成攻击力{ap}%伤害",
|
||||
lv_entries: [
|
||||
{ lv: 2, s_lv: SkillLv.Lv2, overrides: {"para":15}, desc: "普通攻击有{para}%概率麻痹敌人,减缓其技能冷却恢复" },
|
||||
],
|
||||
},
|
||||
6203: { uuid: 6203, name: "雷霆裂空", lv: 1, cd: 8, ccd: 0, overrides: {"ap":200,"para":40}, desc: "释放雷霆裂空波,对{target}造成攻击力{ap}%伤害,{para}%概率麻痹敌人",
|
||||
6204: { uuid: 6204, name: "雷霆裂空", lv: 1, cd: UltCdSet[UltCdLv.Normal].cd, ccd: 0, overrides: {"ap":150,"para":50}, desc: "释放多束闪电,对{target}造成攻击力{ap}%伤害,{para}%概率麻痹敌人",
|
||||
lv_entries: [
|
||||
{ lv: 8, s_lv: SkillLv.Lv2, overrides: {"ap":250,"para":60}, desc: "释放雷霆裂空波,对{target}造成攻击力{ap}%伤害,{para}%概率麻痹敌人" },
|
||||
{ lv: 16, s_lv: SkillLv.Lv3, overrides: {"ap":300,"para":80,"hit_count":3}, desc: "释放雷霆裂空波,对{target}造成攻击力{ap}%伤害,可多次命中,{para}%概率麻痹敌人" },
|
||||
{ lv: 8, s_lv: SkillLv.Lv2, overrides: {"ap":200,"para":70}, desc: "释放雷霆裂空波,对{target}造成攻击力{ap}%伤害,{para}%概率麻痹敌人" },
|
||||
{ lv: 16, s_lv: SkillLv.Lv3, overrides: {"ap":250,"para":100}, desc: "释放雷霆裂空波,对{target}造成攻击力{ap}%伤害,可多次命中,{para}%概率麻痹敌人" },
|
||||
],
|
||||
},
|
||||
},
|
||||
fstart: {
|
||||
6203: [
|
||||
{ lv: 4, s_lv: SkillLv.Lv1, name: "雷击先手", t_num: 1, overrides: {"ap":150,"para":30,"icon":"100-Enchant-Magic"}, desc: "战斗开始释放雷击,对{target}造成攻击力{ap}%伤害,{para}%概率麻痹敌人" },
|
||||
],
|
||||
},
|
||||
field: [
|
||||
{ lv: 4, uuids: [{ uuid: 7003, value: 10, name: "雷云领域" }] },
|
||||
{ lv: 4, uuids: [{ uuid: 7024, value: 10, name: "雷电精准" }] },
|
||||
],
|
||||
bonus: [
|
||||
{ lv: 12, attrs: {"ap":50}, name: "奥术共鸣", icon: "100-Enchant-Magic", },
|
||||
],
|
||||
info: "雷暴爆发+麻痹控场,法系主C",
|
||||
},
|
||||
// 5019 圣盾贤者 — 护盾反伤生存法:全队圣盾+荆棘反伤+受击荆棘
|
||||
5019: {
|
||||
uuid: 5019, name: "圣盾贤者", path: "hm5", fac: FacSet.HERO, rarity: 2, lv: 1, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Mage, hp: HERO_ROLE_BASE[HRole.Mage].hp + 20, ap: HERO_ROLE_BASE[HRole.Mage].ap - 5, def: HERO_ROLE_BASE[HRole.Mage].def + 5,
|
||||
skills: {
|
||||
6011: { uuid: 6011, name: "圣光飞瓶", lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Normal].cd, ccd: 0, overrides: {"ap":100}, desc: "掷出圣光飞瓶,对{target}造成攻击力{ap}%伤害",
|
||||
lv_entries: [
|
||||
{ lv: 2, s_lv: SkillLv.Lv2, overrides: {"proc_skill":{"s_uuid":6516,"chance":20,"overrides":{"timed_buff_id":7028,"buff_value":10}}}, desc: "普通攻击概率凝聚荆棘护体(受击时反弹{buff_value}%所受伤害,持续{dur}秒)" },
|
||||
],
|
||||
},
|
||||
6301: { uuid: 6301, name: "奥术圣壁", lv: 1, cd: 8, ccd: 0, overrides: {"TGroup": TGroup.Ally,"ap":20,"timed_buff_id":7027,"buff_value":10}, desc: "为全体友方施加生命最大值{ap}%的护盾,并附加荆棘(受击时反弹{buff_value}点伤害,持续{dur}秒)",
|
||||
lv_entries: [
|
||||
{ lv: 8, s_lv: SkillLv.Lv2, overrides: {"ap":30,"buff_value":15}, desc: "为全体友方施加生命最大值{ap}%的护盾,并附加荆棘(受击时反弹{buff_value}点伤害,持续{dur}秒)" },
|
||||
{ lv: 16, s_lv: SkillLv.Lv3, overrides: {"ap":40,"buff_value":20}, desc: "为全体友方施加生命最大值{ap}%的护盾,并附加荆棘(受击时反弹{buff_value}点伤害,持续{dur}秒)" },
|
||||
],
|
||||
},
|
||||
},
|
||||
atked: {
|
||||
6516: [
|
||||
{ lv: 4, s_lv: SkillLv.Lv1, name: "荆棘回应", t_num: 3, overrides: {"timed_buff_id":7028,"buff_value":10,"icon":"75-Shield-Stun"}, desc: "凝聚荆棘护体,受击时反弹{buff_value}%所受伤害,持续{dur}秒" },
|
||||
],
|
||||
},
|
||||
field: [
|
||||
{ lv: 4, uuids: [{ uuid: 7022, value: 8, name: "荆棘领域" }] },
|
||||
],
|
||||
bonus: [
|
||||
{ lv: 12, attrs: {"hp":50}, name: "守护之心", icon: "29-Endure", },
|
||||
],
|
||||
info: "全队护盾+荆棘反伤,生存反击法",
|
||||
},
|
||||
// @hero-setup:heroes-end
|
||||
|
||||
/*
|
||||
@@ -1086,11 +1094,11 @@ export const HeroInfo: Record<number, heroInfo> = {
|
||||
|
||||
// BOSS怪物 — 与英雄同一套设定(role 模板 + 品质系数),高品质承伤/输出位
|
||||
6101: {
|
||||
uuid: 6101, name: "兽人首领-双刀战士", path: "mb1", fac: FacSet.MON, lv: 6, rarity: 4, type: HType.Melee, grow_type: HGrowType.Warrior, role: HRole.Warrior, monType: MonType.MeleeBoss, hp: HERO_ROLE_BASE[HRole.Warrior].hp, ap: HERO_ROLE_BASE[HRole.Warrior].ap, def: HERO_ROLE_BASE[HRole.Warrior].def, speed: 120,
|
||||
uuid: 6101, name: "兽人首领-双刀dps型", path: "mb1", fac: FacSet.MON, lv: 6, rarity: 4, type: HType.Melee, grow_type: HGrowType.Warrior, role: HRole.Warrior, monType: MonType.MeleeBoss, hp: HERO_ROLE_BASE[HRole.Warrior].hp, ap: HERO_ROLE_BASE[HRole.Warrior].ap, def: HERO_ROLE_BASE[HRole.Warrior].def, speed: 120, phase_ids: [10001],
|
||||
skills: { 6004: { uuid: 6004, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0, overrides: { ap: 100 } } }, info: "前排Boss, 攻速型"
|
||||
},
|
||||
6102: {
|
||||
uuid: 6102, name: "兽人首领-斧头战士", path: "mb2", fac: FacSet.MON, lv: 6, rarity: 5, type: HType.Melee, grow_type: HGrowType.Tank, role: HRole.Tank, monType: MonType.MeleeBoss, hp: HERO_ROLE_BASE[HRole.Tank].hp, ap: HERO_ROLE_BASE[HRole.Tank].ap, def: HERO_ROLE_BASE[HRole.Tank].def, speed: 60,
|
||||
uuid: 6102, name: "兽人首领-坦克型", path: "mb2", fac: FacSet.MON, lv: 6, rarity: 5, type: HType.Melee, grow_type: HGrowType.Tank, role: HRole.Tank, monType: MonType.MeleeBoss, hp: HERO_ROLE_BASE[HRole.Tank].hp, ap: HERO_ROLE_BASE[HRole.Tank].ap, def: HERO_ROLE_BASE[HRole.Tank].def, speed: 60,
|
||||
skills: { 6004: { uuid: 6004, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.VerySlow].cd, ccd: 0, overrides: { ap: 100 } } }, info: "前排Boss, 超高HP"
|
||||
},
|
||||
6103: {
|
||||
@@ -1114,9 +1122,9 @@ export const HeroInfo: Record<number, heroInfo> = {
|
||||
};
|
||||
|
||||
export const HeroList: number[] = [
|
||||
// 编辑器导出自动同步(共 19 个)
|
||||
// 编辑器导出自动同步(共 18 个)
|
||||
5001, 5002, 5003, 5004, 5005, 5006, 5007, 5008, 5009, 5010,
|
||||
5011, 5012, 5013, 5014, 5015, 5016, 5017, 5018, 5019,
|
||||
5011, 5012, 5013, 5014, 5015, 5016, 5017, 5018,
|
||||
];
|
||||
// @hero-setup:region-end
|
||||
|
||||
@@ -1136,48 +1144,48 @@ export interface HeroComboInfo {
|
||||
}
|
||||
|
||||
/**
|
||||
* 推荐阵容表(几何王国复刻版 5001~5009)。
|
||||
* 推荐阵容表(基于现役 5001~5018 英雄实际技能组)。
|
||||
* 设计原则:
|
||||
* 1. 铁三角结构:1 前排(坦克)+ 1 增益(光环/先手)+ 1 主C
|
||||
* 2. 乘区分散:攻击/暴击/暴伤各占独立乘区,组合优先覆盖不同乘区避免稀释
|
||||
* 3. 发动机冗余:前排挨打/死亡触发增益,叠甲骑士(5005)死亡缠绕负责献祭点火
|
||||
* 1. 铁三角结构:heroes[0] 固定为近战前排(坦克/战士),其余按站位从近到远
|
||||
* 2. 乘区分散:攻击/攻速/暴击/穿透各占独立乘区,组合优先覆盖不同乘区避免稀释
|
||||
* 3. 主题唯一:每套阵容围绕一个流派关键词(暴击/控制/续航/破甲/光环/消耗)组队
|
||||
*/
|
||||
export const HeroComboSet: Record<number, HeroComboInfo> = {
|
||||
// 8001 暴击爆发流 — 暴击率与暴伤双乘区互不稀释,成型最强
|
||||
// 8001 暴击爆发流 — 连珠神射暴击光环喂养双物理C,成型最强
|
||||
8001: {
|
||||
uuid: 8001, name: "暴击爆发流",
|
||||
heroes: [5005, 5008, 5002],
|
||||
desc: "叠甲骑士前排抗伤叠甲,刀刀暴击的暴击光环与眩晕暴击哥的暴伤光环组成双乘区,双近战暴击爆发收割。",
|
||||
heroes: [5001, 5016, 5004],
|
||||
desc: "叠甲骑士前排抗伤+受击叠防,连珠神射暴击光环覆盖全队并以极速箭雨压场,刀刀暴击近战收割残局。",
|
||||
},
|
||||
// 8002 冰雷控制流 — 冰冻+击晕双控场,敌人出不了手
|
||||
// 8002 冰雷控制流 — 击晕+冰冻+麻痹三控链,敌人出不了手
|
||||
8002: {
|
||||
uuid: 8002, name: "冰雷控制流",
|
||||
heroes: [5007, 5004, 5001],
|
||||
desc: "微醺战神前排击退压场,冻住不谢冰冻链配合紫电魔女能量波击退击晕,击晕光环叠加,全场控制。",
|
||||
heroes: [5003, 5006, 5018],
|
||||
desc: "眩晕暴击哥前排开山斧必晕压阵,冻箭哥寒冰箭冰冻链,雷暴领主雷霆麻痹迟滞技能,三控交替敌人难以出手。",
|
||||
},
|
||||
// 8003 铁桶续航流 — 双防御前排+双治疗保血,最稳
|
||||
// 8003 铁桶续航流 — 双坦克承伤+治疗保血,最稳
|
||||
8003: {
|
||||
uuid: 8003, name: "铁桶续航流",
|
||||
heroes: [5005, 5009, 5006],
|
||||
desc: "叠甲骑士与铁壳斧弟双前排叠甲叠防,光明奶爸治疗+生命光环抬全队血线,专打持久消耗战。",
|
||||
heroes: [5009, 5011, 5008],
|
||||
desc: "甲虫领主受击自疗顶前排,控血大师受击全队永久生命成长+大招生命爆发,团疗奶爸全体治疗+战后回复光环,专打持久战。",
|
||||
},
|
||||
// 8004 先手爆发流 — 入场剑气先手+能量波跟进,短回合最强
|
||||
// 8004 破甲压制流 — 破甲+减攻双减益,克制高防高攻阵容
|
||||
8004: {
|
||||
uuid: 8004, name: "先手爆发流",
|
||||
heroes: [5003, 5001, 5008],
|
||||
desc: "格挡反杀入场500%剑气先手压血线,紫电魔女能量波击退跟进,眩晕暴击哥开山斧收割残局。",
|
||||
uuid: 8004, name: "破甲压制流",
|
||||
heroes: [5001, 5017, 5010],
|
||||
desc: "碎甲术士普攻/大招双通道破甲+穿透光环放大物理伤害,火箭哥五箭弹幕必挂减攻削弱敌方输出,叠甲骑士前排兜底。",
|
||||
},
|
||||
// 8005 破甲推进流 — 易伤放大全队伤害,克制高血Boss
|
||||
// 8005 光环覆盖流 — 闪避/攻击/攻速三光环全覆盖
|
||||
8005: {
|
||||
uuid: 8005, name: "破甲推进流",
|
||||
heroes: [5007, 5006, 5002],
|
||||
desc: "微醺战神气斩易伤放大全队伤害,光明奶爸治疗保前排,刀刀暴击吃满易伤与自身暴击完成推进。",
|
||||
uuid: 8005, name: "光环覆盖流",
|
||||
heroes: [5014, 5007, 5012],
|
||||
desc: "闪避哥前排+闪避光环提升全队生存,击退火女攻击光环、疾风法师攻速光环持续放大全队输出,三光环增益拉满。",
|
||||
},
|
||||
// 8006 光环覆盖流 — 攻击/暴击/暴伤/生命光环全覆盖
|
||||
// 8006 易伤消耗流 — 易伤放大出血DoT,磨血收割
|
||||
8006: {
|
||||
uuid: 8006, name: "光环覆盖流",
|
||||
heroes: [5002, 5006, 5001],
|
||||
desc: "刀刀暴击暴击+暴伤双光环、紫电魔女攻击光环、光明奶爸生命光环,四光环全覆盖持续放大全队输出。",
|
||||
uuid: 8006, name: "易伤消耗流",
|
||||
heroes: [5002, 5005, 5008],
|
||||
desc: "易伤剑仙气斩+普攻双通道挂易伤放大全队伤害,出血贼普攻+大招叠出血磨血,团疗奶爸治疗保前排打消耗战。",
|
||||
},
|
||||
};
|
||||
|
||||
@@ -1235,6 +1243,7 @@ export const HERO_POWER_WEIGHTS = {
|
||||
W_atking: 1.0,
|
||||
W_atked: 0.8,
|
||||
W_fstart: 1.0,
|
||||
W_fend: 1.0,
|
||||
W_dead: 0.6,
|
||||
W_field_alive: 1.0,
|
||||
W_revive: 1.0,
|
||||
@@ -1251,9 +1260,9 @@ export const HERO_POWER_WEIGHTS = {
|
||||
* 解析触发技能在目标等级下的有效条目列表。
|
||||
* 每个 s_uuid 取 ≤lv 的最大档;返回扁平数组供评分/触发器消费。
|
||||
*/
|
||||
export function resolveTriggerByLv(grouped: TriggerGrouped | undefined, lv: number): { s_uuid: number; t_num: number; overrides?: SkillOverrides }[] {
|
||||
export function resolveTriggerByLv(grouped: TriggerGrouped | undefined, lv: number): ResolvedTriggerEntry[] {
|
||||
if (!grouped) return [];
|
||||
const result: { s_uuid: number; t_num: number; overrides?: SkillOverrides }[] = [];
|
||||
const result: ResolvedTriggerEntry[] = [];
|
||||
for (const key in grouped) {
|
||||
const entries = grouped[key];
|
||||
if (!entries || entries.length === 0) continue;
|
||||
@@ -1261,7 +1270,7 @@ export function resolveTriggerByLv(grouped: TriggerGrouped | undefined, lv: numb
|
||||
for (const e of entries) {
|
||||
if (e.lv <= lv && (!pick || e.lv > pick.lv)) pick = e;
|
||||
}
|
||||
if (pick) result.push({ s_uuid: Number(key), t_num: pick.t_num, overrides: pick.overrides });
|
||||
if (pick) result.push({ s_uuid: Number(key), t_num: pick.t_num, t_chance: pick.t_chance, pity_add: pick.pity_add, overrides: pick.overrides });
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -1407,6 +1416,7 @@ function getTriggerCount(
|
||||
case SkillTriggerType.Atked:
|
||||
return getHitCount(seconds) / t_num;
|
||||
case SkillTriggerType.FStart:
|
||||
case SkillTriggerType.FEnd:
|
||||
return getWaveCount(seconds);
|
||||
case SkillTriggerType.Dead:
|
||||
// 死亡触发次数 = 回合数 × (1 + 最大复活次数),复活从 dead 配置中提取
|
||||
@@ -1548,6 +1558,7 @@ export interface HeroPowerBreakdown {
|
||||
atking: number;
|
||||
atked: number;
|
||||
fstart: number;
|
||||
fend: number;
|
||||
dead: number;
|
||||
field: number;
|
||||
revive: number;
|
||||
@@ -1564,7 +1575,7 @@ export interface HeroPowerDetailed {
|
||||
|
||||
/** 计算普通触发类技能(atking/atked/fstart/dead)的详细价值 */
|
||||
function calcTriggerPowerDetailed(
|
||||
triggerConfigs: { s_uuid: number, t_num?: number, overrides?: SkillOverrides }[],
|
||||
triggerConfigs: ResolvedTriggerEntry[],
|
||||
hero: heroInfo,
|
||||
targetLv: number,
|
||||
type: SkillTriggerType,
|
||||
@@ -1596,13 +1607,18 @@ function calcTriggerPowerDetailed(
|
||||
case SkillTriggerType.FStart:
|
||||
weight = weights.W_fstart;
|
||||
break;
|
||||
case SkillTriggerType.FEnd:
|
||||
weight = weights.W_fend;
|
||||
break;
|
||||
case SkillTriggerType.Dead:
|
||||
weight = weights.W_dead;
|
||||
break;
|
||||
}
|
||||
|
||||
const triggerCount = getTriggerCount(type, tNum, hero, seconds);
|
||||
const value = effectValue * triggerCount * scopeMul * weight;
|
||||
// 期望折算:按基础触发概率缩放(保底叠加提升的是方差体验,不影响长期期望)
|
||||
const chanceMul = (trig.t_chance ?? 100) / 100;
|
||||
const value = effectValue * triggerCount * scopeMul * weight * chanceMul;
|
||||
total += value;
|
||||
items.push({ type, s_uuid: trig.s_uuid, name: skill.name, t_num: tNum, value });
|
||||
}
|
||||
@@ -1693,6 +1709,7 @@ export function calcHeroPowerDetailed(hero: heroInfo, targetLv: number = 1, seco
|
||||
const atking = hero.atking ? calcTriggerPowerDetailed(resolveTriggerByLv(hero.atking, targetLv), hero, targetLv, SkillTriggerType.Atking, seconds) : { total: 0, items: [] as TriggerSkillEval[] };
|
||||
const atked = hero.atked ? calcTriggerPowerDetailed(resolveTriggerByLv(hero.atked, targetLv), hero, targetLv, SkillTriggerType.Atked, seconds) : { total: 0, items: [] as TriggerSkillEval[] };
|
||||
const fstart = hero.fstart ? calcTriggerPowerDetailed(resolveTriggerByLv(hero.fstart, targetLv), hero, targetLv, SkillTriggerType.FStart, seconds) : { total: 0, items: [] as TriggerSkillEval[] };
|
||||
const fend = hero.fend ? calcTriggerPowerDetailed(resolveTriggerByLv(hero.fend, targetLv), hero, targetLv, SkillTriggerType.FEnd, seconds) : { total: 0, items: [] as TriggerSkillEval[] };
|
||||
const dead = hero.dead ? calcTriggerPowerDetailed(resolveTriggerByLv(hero.dead, targetLv), hero, targetLv, SkillTriggerType.Dead, seconds) : { total: 0, items: [] as TriggerSkillEval[] };
|
||||
const fieldEntries = resolveFieldByLv(hero.field, targetLv);
|
||||
const field = fieldEntries.length > 0 ? calcFieldPowerDetailed(fieldEntries, hero, targetLv, seconds) : { total: 0, items: [] as FieldSkillEval[] };
|
||||
@@ -1708,7 +1725,7 @@ export function calcHeroPowerDetailed(hero: heroInfo, targetLv: number = 1, seco
|
||||
}
|
||||
}
|
||||
|
||||
const total = hpValue + dpsValue + atking.total + atked.total + fstart.total + dead.total + field.total + reviveValue;
|
||||
const total = hpValue + dpsValue + atking.total + atked.total + fstart.total + fend.total + dead.total + field.total + reviveValue;
|
||||
|
||||
return {
|
||||
total,
|
||||
@@ -1718,11 +1735,12 @@ export function calcHeroPowerDetailed(hero: heroInfo, targetLv: number = 1, seco
|
||||
atking: atking.total,
|
||||
atked: atked.total,
|
||||
fstart: fstart.total,
|
||||
fend: fend.total,
|
||||
dead: dead.total,
|
||||
field: field.total,
|
||||
revive: reviveValue,
|
||||
},
|
||||
triggerSkills: [...atking.items, ...atked.items, ...fstart.items, ...dead.items],
|
||||
triggerSkills: [...atking.items, ...atked.items, ...fstart.items, ...fend.items, ...dead.items],
|
||||
fieldSkills: field.items,
|
||||
normalAttack,
|
||||
};
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
* - 升级表 key 为目标等级:need = HERO_UPGRADE_NEED_FRAGMENTS[lv + 1],查不到即满级。
|
||||
*/
|
||||
import { HERO_UPGRADE_NEED_FRAGMENTS } from "./GameSet";
|
||||
import { HeroInfo, HeroList } from "./heroSet";
|
||||
|
||||
/** 英雄升级状态快照 */
|
||||
export interface HeroUpgradeState {
|
||||
@@ -75,3 +76,25 @@ export function getHeroUpgradeState(lv: number, fragments: number): HeroUpgradeS
|
||||
canUpgrade: !isMax && fragments >= (need as number),
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* 图鉴展示排序:可升级优先 → 现有等级降序 → 品质降序。
|
||||
* Why: 图鉴(HerosListComp)与英雄详情(HeroInfoComp)共用同一排序口径,
|
||||
* 保证图鉴中的卡片顺序与详情面板"前后切换"顺序一致。
|
||||
* @param getGrowth 查询英雄成长数据(lv / fragments)的回调,通常由 smc.getHeroGrowth 注入
|
||||
* @returns 排序后的英雄 uuid 数组(新数组,不修改 HeroList)
|
||||
*/
|
||||
export function getSortedHeroList(getGrowth: (uuid: number) => { lv: number; fragments: number }): number[] {
|
||||
return [...HeroList].sort((a, b) => {
|
||||
const ga = getGrowth(a);
|
||||
const gb = getGrowth(b);
|
||||
// 可升级的一批排在最左
|
||||
const ca = canHeroUpgrade(ga.lv, ga.fragments) ? 0 : 1;
|
||||
const cb = canHeroUpgrade(gb.lv, gb.fragments) ? 0 : 1;
|
||||
if (ca !== cb) return ca - cb;
|
||||
// 同批内:现有等级降序优先
|
||||
if (ga.lv !== gb.lv) return gb.lv - ga.lv;
|
||||
// 等级相同:品质降序(rarity 越大品质越高)
|
||||
return (HeroInfo[b]?.rarity ?? 1) - (HeroInfo[a]?.rarity ?? 1);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,9 +1,23 @@
|
||||
uuid,英雄名称,简化说明,rarity,类型,形态,ap,hp,def,skill[0]_lv1,skill[0]_lv2,skill[1]_lv1,skill[1]_lv8,skill[1]_lv16,atking[0]_lv4,atked[0]_lv4,fstart[0]_lv4,dead[0]_lv4,field[0]_lv4
|
||||
5001,叠甲骑士,CSV导入:自身护盾+全体护盾,1,tank,近战,tank,tank+20,tank+10,6004 强化普攻(ap100;慢速1.20s;触发飞剑6001(100%)),ap120,6301 魔法盾(ap30),ap60,ap120,无,6301 全体圣盾(t_num3;ap10):全队获得本英雄生命最大值{ap}%的护盾,无,无,无
|
||||
5002,易伤剑仙,CSV导入:击退压场+易伤放大;复刻酒仙,1,warrior,近战,warrior+20,warrior+5,warrior+5,6004 强化普攻(ap100;慢速1.20s),ap120,6101 气斩(ap150;附加易伤7002),,ap180;bck60,6004 风暴打击(t_num3;ap300):立刻打击{target},造成攻击力{ap}%伤害,无,无,无,无
|
||||
5003,眩晕暴击哥,CSV导入:高爆发+击晕收割;复刻齐天大圣,1,warrior,近战,warrior+20,warrior+5,warrior+5,6004 强化普攻(ap100;慢速1.20s),stun10,6104 开山斧(ap300;stun100),ap450;stun100,ap450;stun100,无,无,无,无,7005 大圣神威0.25
|
||||
5004,刀刀暴击,CSV导入:暴击/暴伤双光环乘区;复刻剑圣,1,assassin,中程,assassin+30,assassin,assassin,6002 强化普攻(ap100;快速0.90s),crt10,6100 光闪(ap150),ap250,ap350,无,无,无,无,7004 剑刃风暴0.12+7005 斩魂利刃0.2
|
||||
5005,出血贼,CSV导入:入场先手+受击格挡;复刻剑豪,1,assassin,中程,assassin+30,assassin,assassin,6002 强化普攻(ap100;快速0.90s),附加30出血7007buff_chance30,6103 闪电斩(ap150),ap250;附加出血7007,ap350;para50;附加60出血7007,无,无,无,无,7018 连击光环1
|
||||
5006,冻箭哥,CSV导入:多重单体箭,带冰冻,1,archer,远程,archer+30,archer,archer,6006 强化普攻(ap100;中速1.05s),bck10,6150 万箭齐发·冰(ap150;frz30),ap200;frz50,ap250;frz70,无,无,无,无,7006 攻速光环0.15
|
||||
5007,击退火女,CSV导入:群体击退/麻痹压场;复刻深渊女王,1,mage,远程,mage+10,mage-5,mage,6010 强化普攻(ap100;慢速1.20s;bck30),bck40,6200 火焰喷射(ap250;bck100),ap350;bck100,ap450;bck100;summon2,无,无,无,无,7002 深渊威压0.15
|
||||
5008,团疗奶爸,CSV导入:全体治疗续航+自身护盾,1,support,远程,support+20,support+10,support,6011 强化普攻(ap100;中速1.05s),bck10,6302 治疗(ap30),ap40,ap50,6301 圣愈之盾(t_num3;ap30):{target}获得生命最大值{ap}%的护盾,无,无,无,无
|
||||
字段,5001,5002,5003,5004,5005,5006,5007,5008,5009,5010,5011,5012,5013,5014,5015,5016,5017,5018,5019
|
||||
英雄名称,叠甲骑士,易伤剑仙,眩晕暴击哥,刀刀暴击,出血贼,冻箭哥,击退火女,团疗奶爸,甲虫领主,火箭哥,控血大师,疾风法师,反伤哥,闪避哥,毒箭猎手,连珠神射,碎甲术士,雷暴领主,圣盾贤者
|
||||
简化说明,CSV导入:自身护盾+全体护盾,CSV导入:击退压场+易伤放大;复刻酒仙,CSV导入:高爆发+击晕收割;复刻齐天大圣,CSV导入:暴击/暴伤双光环乘区;复刻剑圣,CSV导入:入场先手+受击格挡;复刻剑豪,CSV导入:多重单体箭,带冰冻,CSV导入:群体击退/麻痹压场;复刻深渊女王,CSV导入:全体治疗续航+自身护盾,,,,,,,毒伤持续流:普攻淬毒叠层+毒雨铺DoT+攻击光环喂养毒伤,暴击连射爆发流:VeryFast极速普攻+概率追射必暴箭+开局团队暴击爆发,破甲减防法师:fstart先手/普攻概率/大招必定三通道施加破甲7008+穿透光环,团队物理增伤位,雷暴AOE爆发+麻痹控场:先手雷击+高倍率能量波,护盾反伤生存法:全队圣盾+荆棘反伤+受击荆棘
|
||||
rarity,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
||||
类型,tank,warrior,warrior,assassin,assassin,archer,mage,support,tank,archer,tank,mage,support,warrior,archer,archer,mage,mage,mage
|
||||
形态,近战,近战,近战,中程,中程,远程,远程,远程,近战,中程,近战,远程,远程,近战,远程,中程,远程,远程,远程
|
||||
ap,tank,warrior+20,warrior+20,assassin+30,assassin+30,archer+30,mage+10,support+20,tank,archer,tank,mage,support,warrior,archer,archer+10,mage+10,mage+20,mage-5
|
||||
hp,tank+20,warrior+5,warrior+5,assassin,assassin,archer,mage-5,support+10,tank,archer,tank,mage,support,warrior,archer+10,archer,mage,mage-10,mage+20
|
||||
def,tank+10,warrior+5,warrior+5,assassin,assassin,archer,mage,support,tank,archer,tank,mage,support,warrior,archer,archer,mage,mage,mage+5
|
||||
dodge,,,,,,,,,,,,,,,,,,,
|
||||
accuracy,,,,,,,,,,,,,,,,,,,
|
||||
skill[0]_lv1,6004 强化普攻(ap100;慢速1.20s),6004 强化普攻(ap100;慢速1.20s),6004 强化普攻(ap100;慢速1.20s),6002 强化普攻(ap100;快速0.90s),6002 强化普攻(ap100;快速0.90s),6006 强化普攻(ap100;中速1.05s),6010 强化普攻(ap100;慢速1.20s),6011 强化普攻(ap100;中速1.05s),6004 普攻强化(慢速1.20s),6006 强化普攻(快速0.90s),6004 普攻强化(中速1.05s),6009 普攻强化(中速1.05s),6004 攻击(中速1.05s),6004 普攻强化(中速1.05s),6007 淬毒箭(ap100;中速1.05s),6008 连珠箭(ap100;极速0.75s),6012 蚀甲酸瓶(ap100;中速1.05s),6009 雷霆弹(ap100;快速0.90s),6011 圣光飞瓶(ap100;中速1.05s)
|
||||
skill[0]_lv2,ap120,ap120,stun10,crt10,命中附加30出血7007debuff_chance30,frz10,,ap120,施法触发计时回血6502(10%;ap5),ap100,施法触发计时回血6502(10%;ap5),施法触发攻速爆发6507(10%),附加10生命爆发7029buff_chance20,附加10闪避爆发7030buff_chance20,命中附加30中毒7005debuff_chance30,crt20;施法触发蓝箭6007(20%),命中附加破甲7008debuff_chance30,para15,施法触发次级反伤6516(20%)
|
||||
skill[1]_lv1,6301 魔法盾(ap30),6101 气斩(ap150;命中附加易伤7002),6104 开山斧(ap300;stun100),6100 光闪(ap150),6103 闪电斩(ap150),6150 万箭齐发·冰(ap150;frz30),6200 火焰喷射(ap250;bck100),6302 治疗(ap30),6102 火焰斩(ap250;bck30),6151 万箭齐发.火(ap70;summon5),6517 生命爆发(),6201 飓风(ap100;summon2;施法触发攻速爆发6507(20%)),6515 荆棘护盾(),6100 寒冰斩(ap200;附加50闪避爆发7030),6150 万箭齐发·毒(ap150;命中附加30中毒7005debuff_chance50),6151 裂空箭雨(ap150;crt30;summon5),6203 碎甲能量波(ap150;命中附加破甲7008),6203 雷霆裂空(ap200;para40),6301 奥术圣壁(ap20;附加10荆棘7027)
|
||||
skill[1]_lv8,ap60,,ap450;stun100,ap250,ap250;命中附加40出血7007,ap200;frz50,ap350;bck100,ap40,ap300;bck50,ap80;summon5,,ap100;summon3;施法触发攻速爆发6507(20%),,ap250;附加50闪避爆发7030,ap200,ap200;crt50,ap200,ap250;para60,ap30
|
||||
skill[1]_lv16,ap120,ap180;bck60,ap450;stun100,ap350,ap350;命中附加60出血7007,ap250;frz70,ap450;bck100;summon2,ap50,ap350;bck70,ap100;summon6,,ap100;summon4;施法触发攻速爆发6507(20%),,ap350;附加80闪避爆发7030,ap250,ap250;crt70;summon6,ap250,ap300;para80,ap40
|
||||
atking[0]_lv4,无,6004 风暴打击(t_num3;ap300):立刻打击{target},造成攻击力{ap}%伤害,无,无,无,无,无,6301 圣愈之盾(t_num3;ap30):{target}获得生命最大值{ap}%的护盾,无,6008 红箭(t_num3;ap120):,无,无,无,无,6007 蚀骨毒箭(t_num3;ap80):追加射出蚀骨毒箭,对{target}造成攻击力{ap}%伤害,必定使目标中毒(每0.5秒受到{debuff_value}点伤害,持续{dur}秒),无,无,无,无
|
||||
atked[0]_lv4,6302 治疗(t_num3;概率50%;ap10):有 {t_chance}% 的概率,治疗自己 {ap}%生命最大值,无,无,无,无,无,无,无,6302 治疗(t_num3;ap5):为自己释放治疗,恢复生命值的{ap}%,无,6402 生命强化(t_num5;ap1):全队永久增加 1% 生命最大值,无,无,无,无,无,无,无,6516 荆棘回应(t_num3):凝聚荆棘护体,受击时反弹{buff_value}%所受伤害,持续{dur}秒
|
||||
fstart[0]_lv4,无,无,无,无,无,无,无,无,无,无,无,无,6301 护盾(t_num1;ap20):,无,无,6504 猎杀时刻(t_num1):战斗开始时释放暴击爆发,全体友方暴击率提升{buff_value}%,持续{dur}秒,6012 先手蚀甲(t_num1;ap150):战斗开始时掷出蚀甲酸瓶,对{target}造成攻击力{ap}%伤害,并必定使其破甲(防御降低,持续{dur}秒),6203 雷击先手(t_num1;ap150):战斗开始释放雷击,对{target}造成攻击力{ap}%伤害,{para}%概率麻痹敌人,无
|
||||
fend[0]_lv4,无,无,无,无,无,无,无,无,无,无,无,无,无,无,无,无,无,无,无
|
||||
dead[0]_lv4,无,无,无,无,无,无,无,无,无,无,无,无,无,无,无,无,无,无,无
|
||||
field[0]_lv4,无,无,7005 大圣神威0.25,7004 剑刃风暴0.12+7005 斩魂利刃0.2,7002 攻击光环10,7006 攻速光环0.15,7002 深渊威压0.15,无,无,无,无,7006 攻速光环10,无,7023 闪避光环10,7002 淬毒磨砺0.1,7004 猎手集结0.15,7009 锐矛之赐0.1,7003 雷云领域10,7022 荆棘领域8
|
||||
bonus,lv12 def+50%,lv12 hp+50%,lv12 hp+50%,lv12 ap+50%,lv12 ap+50%,lv12 ap+50%,lv12 ap+50%,lv12 hp+50%,lv12 def+50%,lv12 ap+50%,lv12 def+50%,lv12 ap+50%,lv12 hp+50%,lv12 hp+50%,lv12 ap+50%,lv12 ap+50%,lv12 ap+50%,lv12 ap+50%,lv12 hp+50%
|
||||
|
||||
|
22
assets/script/game/hero/BossPhaseComp.ts
Normal file
@@ -0,0 +1,22 @@
|
||||
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
|
||||
|
||||
/**
|
||||
* Boss 阶段标记组件:挂载即表示该实体参与多阶段状态机
|
||||
* 由 Mon.load 按 phase_plan_id 条件挂载,Monster.destroy 显式 remove(触发 reset + 回组件池)
|
||||
* 计时字段 elapsed 随 reset 天然归零,无全局战斗计时状态
|
||||
*/
|
||||
@ecs.register('BossPhase')
|
||||
export class BossPhaseComp extends ecs.Comp {
|
||||
/** 生效的阶段方案 id(BossPhaseSet key) */
|
||||
plan_id: number = 0;
|
||||
/** 当前阶段索引:0=P1 / 1=P2 / 2=P3(P3 后系统不再检测) */
|
||||
index: number = 0;
|
||||
/** Boss 在场战斗累计时长(秒),time 触发条件基准 */
|
||||
elapsed: number = 0;
|
||||
|
||||
reset() {
|
||||
this.plan_id = 0;
|
||||
this.index = 0;
|
||||
this.elapsed = 0;
|
||||
}
|
||||
}
|
||||
9
assets/script/game/hero/BossPhaseComp.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "49d9ce6c-d575-4453-83f8-721a7865a3e5",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
129
assets/script/game/hero/BossPhaseSystem.ts
Normal file
@@ -0,0 +1,129 @@
|
||||
/**
|
||||
* BossPhaseSystem — Boss 多阶段战斗状态机。
|
||||
*
|
||||
* 检测混合触发条件(血量阈值 OR 在场时长),命中后执行阶段切换:
|
||||
* removes 移除旧技能 → adds 注入新技能(cd 兜底 + 资源预热)→ attr_mod 属性修正
|
||||
* → 空钩子 onPhaseExit/onPhaseEnter(演出后续迭代)→ 广播 GameEvent.BossPhaseChange
|
||||
*
|
||||
* Why: 独立系统符合 M/V/S 分层;filter 按 BossPhaseComp 过滤,每局 Boss 唯一,开销可忽略。
|
||||
* 计时在组件 elapsed(随 reset 归零),避免系统级计数在 per-entity update 中重复累加。
|
||||
*/
|
||||
|
||||
import { Prefab } from "cc";
|
||||
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
|
||||
import { oops } from "../../../../extensions/oops-plugin-framework/assets/core/Oops";
|
||||
import { smc } from "../common/SingletonModuleComp";
|
||||
import { GameEvent } from "../common/config/GameEvent";
|
||||
import { BossPhaseSet, PhaseSwitchDef } from "../common/config/BossPhaseSet";
|
||||
import { SkillSet } from "../common/config/SkillSet";
|
||||
import { mLogger } from "../common/Logger";
|
||||
import { HeroAttrsComp } from "./HeroAttrsComp";
|
||||
import { BossPhaseComp } from "./BossPhaseComp";
|
||||
|
||||
/** 阶段模块调试日志开关 */
|
||||
const DEBUG = true;
|
||||
|
||||
/** 新注入技能缺省 CD(秒),与 Mon.ts 大招注入兜底一致 */
|
||||
const DEFAULT_ADD_CD = 8;
|
||||
|
||||
@ecs.register('BossPhaseSystem')
|
||||
export class BossPhaseSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate {
|
||||
|
||||
filter(): ecs.IMatcher {
|
||||
return ecs.allOf(BossPhaseComp, HeroAttrsComp);
|
||||
}
|
||||
|
||||
update(e: ecs.Entity): void {
|
||||
const phase = e.get(BossPhaseComp);
|
||||
const model = e.get(HeroAttrsComp);
|
||||
if (!phase || !model) return;
|
||||
|
||||
// 战斗状态守卫(与 MoveComp/SCastSystem 同款模式):暂停/未开战不计时
|
||||
if (!smc.mission.play || smc.mission.pause) return;
|
||||
// 死亡同帧守卫:防死尸换阶段
|
||||
if (model.is_dead) return;
|
||||
// P3 后不再检测(固定 3 阶段)
|
||||
if (phase.index >= 2) return;
|
||||
|
||||
const plan = BossPhaseSet[phase.plan_id];
|
||||
if (!plan) return;
|
||||
|
||||
// 分诊日志:系统接管确认(elapsed===0 表示本组件首个有效帧,只输出一次)
|
||||
if (phase.elapsed === 0) {
|
||||
mLogger.log(DEBUG, "BossPhase", `${model.hero_name} 阶段系统已接管(方案 ${phase.plan_id},当前 P${phase.index + 1},hp ${Math.round(model.hp)}/${model.hp_max})`);
|
||||
}
|
||||
phase.elapsed += this.dt;
|
||||
const def = plan.switches[phase.index];
|
||||
|
||||
// 混合触发:任一条件满足即切换(血量实时计算,禁止缓存绝对值——hp_max 在 load 后被外部覆盖)
|
||||
const hpPct = model.hp / model.hp_max * 100;
|
||||
const hpHit = def.trigger.hp_pct !== undefined && hpPct <= def.trigger.hp_pct;
|
||||
const timeHit = def.trigger.time !== undefined && phase.elapsed >= def.trigger.time;
|
||||
if (hpHit || timeHit) {
|
||||
this.executePhaseSwitch(e, def);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 执行阶段切换:技能增量改写 + 属性修正 + 钩子与事件广播
|
||||
* Why 改 skills 而非施法系统过滤:与 _testSkills/RogueConfig.ults 动态注入同模式,
|
||||
* SCastSystem 零改动;施法闭包捕获 SkillSet 静态配置,进行中施法不受影响
|
||||
*/
|
||||
private executePhaseSwitch(e: ecs.Entity, def: PhaseSwitchDef): void {
|
||||
const phase = e.get(BossPhaseComp)!;
|
||||
const model = e.get(HeroAttrsComp)!;
|
||||
const from = phase.index;
|
||||
|
||||
this.onPhaseExit(e);
|
||||
|
||||
// 1. 移除旧技能(仅大招键;普攻首键受键序契约保护,见 BossPhaseSet 文件头注释)
|
||||
if (def.removes) {
|
||||
for (const s_uuid of def.removes) {
|
||||
delete model.skills[s_uuid];
|
||||
}
|
||||
}
|
||||
|
||||
// 2. 注入新技能(cd 强制兜底,防 undefined → Math.min 结果 NaN 导致大招永不释放)
|
||||
if (def.adds) {
|
||||
for (const add of def.adds) {
|
||||
if (!add || !add.s_uuid || !SkillSet[add.s_uuid]) continue;
|
||||
model.skills[add.s_uuid] = {
|
||||
uuid: add.s_uuid,
|
||||
lv: 1,
|
||||
cd: add.cd ?? DEFAULT_ADD_CD,
|
||||
ccd: 0,
|
||||
overrides: add.overrides,
|
||||
};
|
||||
// 资源预热:新技能 prefab 首次异步加载会丢一发,切换时预载(路径与 Skill.load 对齐)
|
||||
oops.res.load(`game/skill/atk/${SkillSet[add.s_uuid].sp_name}`, Prefab);
|
||||
}
|
||||
}
|
||||
|
||||
// 3. 属性修正:基于当前值链式乘算(P3 基于 P2 修正后的值,配置按此口径)
|
||||
const mod = def.attr_mod;
|
||||
if (mod) {
|
||||
if (mod.ap_pct) model.ap = Math.round(model.ap * (1 + mod.ap_pct / 100));
|
||||
if (mod.defense_pct) model.defense = Math.round(model.defense * (1 + mod.defense_pct / 100));
|
||||
}
|
||||
|
||||
phase.index++;
|
||||
|
||||
this.onPhaseEnter(e);
|
||||
|
||||
mLogger.log(DEBUG, "BossPhase", `${model.hero_name} 阶段切换 P${from + 1}→P${phase.index + 1}(方案 ${phase.plan_id})`);
|
||||
|
||||
// 广播阶段切换(payload 用 eid 定位实体,防监听方持有已回收实体裸引用)
|
||||
oops.message.dispatchEvent(GameEvent.BossPhaseChange, {
|
||||
eid: e.eid,
|
||||
planId: phase.plan_id,
|
||||
fromPhase: from,
|
||||
toPhase: phase.index,
|
||||
});
|
||||
}
|
||||
|
||||
/** TODO: 阶段退场表现(震屏/变暗等),后续迭代实现 */
|
||||
private onPhaseExit(e: ecs.Entity): void { }
|
||||
|
||||
/** TODO: 阶段入场表现(怒吼/无敌帧/技能横幅等),后续迭代实现 */
|
||||
private onPhaseEnter(e: ecs.Entity): void { }
|
||||
}
|
||||
9
assets/script/game/hero/BossPhaseSystem.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "bde209ff-324b-4f07-a241-fb977cbc6c2f",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
@@ -13,7 +13,6 @@ import { Attrs } from "../common/config/HeroAttrs";
|
||||
import { MoveComp } from "./MoveComp";
|
||||
import { mLogger } from "../common/Logger";
|
||||
import { FieldSkillType } from "../common/config/SkillSet";
|
||||
import { applyTalentBonuses } from "../common/config/TalentSet";
|
||||
/** 英雄实体:负责英雄节点创建、属性初始化、入场动画与销毁流程 */
|
||||
@ecs.register(`Hero`)
|
||||
|
||||
@@ -173,15 +172,6 @@ export class Hero extends ecs.Entity {
|
||||
model.skills[skill.uuid] = { ...skill, lv: Math.min(FightSet.HERO_SKILL_MAX_LV, Math.max(0, skill.lv + hero_lv - 2)), ccd: 0, overrides: resolveSkillOverrides(skill, hero_lv) };
|
||||
}
|
||||
|
||||
// 按当前英雄等级 resolve 触发技能/光环到运行时缓存,供 SkillTriggerHelper 消费
|
||||
model.runtime_call = resolveTriggerByLv(model.call, hero_lv);
|
||||
model.runtime_dead = resolveTriggerByLv(model.dead, hero_lv);
|
||||
model.runtime_fstart = resolveTriggerByLv(model.fstart, hero_lv);
|
||||
model.runtime_atking = resolveTriggerByLv(model.atking, hero_lv);
|
||||
model.runtime_atked = resolveTriggerByLv(model.atked, hero_lv);
|
||||
model.runtime_field = resolveFieldByLv(model.field, hero_lv);
|
||||
// 复活已纳入 dead 触发组,无需单独解析 revive
|
||||
|
||||
// 应用额外属性加成(成长类型每级递增 + bonus 档位累加)
|
||||
// 成长增量:仅英雄生效(model.fac 已为 HERO),按 grow_type 递增曲线累计
|
||||
const grow = calcGrowBonus(hero, hero_lv);
|
||||
@@ -210,12 +200,23 @@ export class Hero extends ecs.Entity {
|
||||
|
||||
// lv12 职业专项已移除:单项属性强化统一由 bonus 配置(如 attrs: { ap: 50 })按等级注入
|
||||
|
||||
// 天赋加成层:全局天赋(一阶基础/三阶超强全局)全局生效,职业天赋(二阶专精/三阶超强职业)按 role 过滤(仅英雄生效,怪物跳过)
|
||||
// Why: 放在成长/bonus 之后、光环乘区之后,以基础快照为基数叠加,避免与乘区叠加成乘法膨胀
|
||||
// 天赋加成层:全局天赋(L1/L2)全局生效,职业天赋(L3-L5)按 role 过滤(仅英雄生效,怪物跳过)
|
||||
// Why: 放在成长/bonus 之后、runtime_* resolve 之前——触发修正需先写入模型,L4/L5 才能影响阈值判定;
|
||||
// 属性加成以基础快照为基数叠加,避免与光环乘区叠加成乘法膨胀
|
||||
if (model.fac === FacSet.HERO) {
|
||||
applyTalentBonuses(model, smc.getTalentLevels(), model.role);
|
||||
model.applyTalent();
|
||||
}
|
||||
|
||||
// 按当前英雄等级 resolve 触发技能/光环到运行时缓存,供 SkillTriggerHelper 消费
|
||||
model.runtime_call = resolveTriggerByLv(model.call, hero_lv);
|
||||
model.runtime_dead = resolveTriggerByLv(model.dead, hero_lv);
|
||||
model.runtime_fstart = resolveTriggerByLv(model.fstart, hero_lv);
|
||||
model.runtime_fend = resolveTriggerByLv(model.fend, hero_lv);
|
||||
model.runtime_atking = resolveTriggerByLv(model.atking, hero_lv);
|
||||
model.runtime_atked = resolveTriggerByLv(model.atked, hero_lv);
|
||||
model.runtime_field = resolveFieldByLv(model.field, hero_lv);
|
||||
// 复活已纳入 dead 触发组,无需单独解析 revive
|
||||
|
||||
// 缓存技能射程等派生数据,减少战斗帧内重复计算
|
||||
model.updateSkillDistanceCache();
|
||||
|
||||
|
||||
@@ -80,9 +80,15 @@ export default class HeroAnmComp extends Component {
|
||||
if (this.maxPlaying) return
|
||||
this.anmcon.play(`atk0`)
|
||||
}
|
||||
max() {
|
||||
/**
|
||||
* 播放大招动画。
|
||||
* Why 带 name:技能表 act 直接配置 clip 名(战士技 "max0"、法系技 "max1"),
|
||||
* 固定播 max0 会导致法系大招动画永远播不出。
|
||||
* @param name 大招 clip 名("max0"/"max1"),maxPlaying guard 已同时覆盖两者
|
||||
*/
|
||||
max(name: string = "max0") {
|
||||
if (this.maxPlaying) return
|
||||
this.anmcon.play("max0")
|
||||
this.anmcon.play(name)
|
||||
}
|
||||
play(anm: string = "") {
|
||||
if (anm === "") return
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
|
||||
import { HeroDisVal, HeroInfo, HSkillInfo, HType, SkillTriggerType, TriggerGrouped, LvFieldEntry, LvBonusAttrsEntry, FieldEntry, HRole } from "../common/config/heroSet";
|
||||
import { HeroDisVal, HeroInfo, HSkillInfo, HType, SkillTriggerType, TriggerGrouped, LvFieldEntry, LvBonusAttrsEntry, FieldEntry, HRole, ResolvedTriggerEntry } from "../common/config/heroSet";
|
||||
import { mLogger } from "../common/Logger";
|
||||
import { FacSet, FightSet } from "../common/config/GameSet";
|
||||
import { FieldSkillSet, FieldSkillType, SkillOverrides } from "../common/config/SkillSet";
|
||||
import { smc } from "../common/SingletonModuleComp";
|
||||
import { Attrs } from "../common/config/HeroAttrs";
|
||||
import { applyTalentBonuses, getTalentExtraTriggerChance, getTalentTriggerNumReduce } from "../common/config/TalentSet";
|
||||
import { FieldSkillHelper } from "./FieldSkillHelper";
|
||||
import { BuffComp } from "./BuffComp";
|
||||
import { BuffList, ModOp } from "../common/config/BuffSet";
|
||||
@@ -53,6 +54,7 @@ export class HeroAttrsComp extends ecs.Comp {
|
||||
[SkillTriggerType.Call]?: TriggerGrouped;
|
||||
[SkillTriggerType.Dead]?: TriggerGrouped;
|
||||
[SkillTriggerType.FStart]?: TriggerGrouped;
|
||||
[SkillTriggerType.FEnd]?: TriggerGrouped;
|
||||
[SkillTriggerType.Atking]?: TriggerGrouped;
|
||||
[SkillTriggerType.Atked]?: TriggerGrouped;
|
||||
/** 驻场光环(按 lv 解锁,存活期间全局生效) */
|
||||
@@ -62,18 +64,26 @@ export class HeroAttrsComp extends ecs.Comp {
|
||||
|
||||
// ==================== 运行时解析缓存(按当前等级 resolve 后的有效列表) ====================
|
||||
/** 当前等级下生效的攻击触发条目(供 SkillTriggerHelper 消费) */
|
||||
runtime_atking?: { s_uuid: number; t_num: number; overrides?: SkillOverrides }[];
|
||||
runtime_atking?: ResolvedTriggerEntry[];
|
||||
/** 当前等级下生效的受击触发条目 */
|
||||
runtime_atked?: { s_uuid: number; t_num: number; overrides?: SkillOverrides }[];
|
||||
runtime_atked?: ResolvedTriggerEntry[];
|
||||
/** 当前等级下生效的召唤触发条目 */
|
||||
runtime_call?: { s_uuid: number; t_num: number; overrides?: SkillOverrides }[];
|
||||
runtime_call?: ResolvedTriggerEntry[];
|
||||
/** 当前等级下生效的死亡触发条目 */
|
||||
runtime_dead?: { s_uuid: number; t_num: number; overrides?: SkillOverrides }[];
|
||||
runtime_dead?: ResolvedTriggerEntry[];
|
||||
/** 当前等级下生效的战前触发条目 */
|
||||
runtime_fstart?: { s_uuid: number; t_num: number; overrides?: SkillOverrides }[];
|
||||
runtime_fstart?: ResolvedTriggerEntry[];
|
||||
/** 当前等级下生效的回合结束触发条目 */
|
||||
runtime_fend?: ResolvedTriggerEntry[];
|
||||
/** 当前等级下生效的驻场光环词条列表 */
|
||||
runtime_field?: FieldEntry[];
|
||||
|
||||
// ==================== 触发概率保底缓存(key: s_uuid, value: 已累积的概率增量百分点) ====================
|
||||
/** 攻击触发未命中时累积的下次概率增量(pity_add 驱动,触发成功后清零) */
|
||||
pity_atking: Record<number, number> = {};
|
||||
/** 受击触发未命中时累积的下次概率增量(pity_add 驱动,触发成功后清零) */
|
||||
pity_atked: Record<number, number> = {};
|
||||
|
||||
// ==================== 特殊属性 ====================
|
||||
critical: number = 0; // 暴击率
|
||||
critical_res: number = 0; // 暴击抗性
|
||||
@@ -98,6 +108,10 @@ export class HeroAttrsComp extends ecs.Comp {
|
||||
thorns_dmg: number = 0; // 反伤伤害(固定值,受到攻击时对攻击者造成等量伤害)
|
||||
thorns_rate: number = 0; // 反伤比例(百分点;反伤值 = 实际受到伤害 * thorns_rate / 100 + thorns_dmg)
|
||||
|
||||
// ==================== 天赋触发修正(L4/L5 写入,SkillTriggerHelper 消费) ====================
|
||||
talent_t_num_reduce: number = 0; // L4:触发类技能计数阈值减少量(下限 1 由消费端 clamp)
|
||||
talent_extra_trigger_chance: number = 0; // L5:触发类技能额外触发 1 次的概率(百分点)
|
||||
|
||||
revived_count: number = 0; // 已复活次数(从 dead 触发配置的 revive_count 限制)
|
||||
death_count: number = 0; // 本回合死亡次数(用于 dead 触发统计)
|
||||
invincible_time: number = 0;// 无敌时间
|
||||
@@ -151,6 +165,20 @@ export class HeroAttrsComp extends ecs.Comp {
|
||||
*/
|
||||
initAttrs() {
|
||||
}
|
||||
|
||||
/**
|
||||
* 天赋统一应用入口:写入属性加成(L1-L3)与触发修正(L4/L5)。
|
||||
* Why: 收敛到属性组件单点调用,Hero.load 与局内升级重算(applyHeroLevel)不再各自 import TalentSet;
|
||||
* 触发修正必须在 runtime_* 触发缓存 resolve 之前写入,才能影响 SkillTriggerHelper 的阈值判定。
|
||||
* 调用前请确保触发修正字段已归零(升级重算路径由调用方归零,保证幂等)。
|
||||
*/
|
||||
applyTalent(): void {
|
||||
if (this.fac !== FacSet.HERO) return;
|
||||
const levels = smc.getTalentLevels();
|
||||
this.talent_t_num_reduce = getTalentTriggerNumReduce(levels, this.role);
|
||||
this.talent_extra_trigger_chance = getTalentExtraTriggerChance(levels, this.role);
|
||||
applyTalentBonuses(this, levels, this.role);
|
||||
}
|
||||
/*******************基础属性管理********************/
|
||||
|
||||
add_hp(value: number) {
|
||||
@@ -725,6 +753,7 @@ export class HeroAttrsComp extends ecs.Comp {
|
||||
this.call = undefined;
|
||||
this.dead = undefined;
|
||||
this.fstart = undefined;
|
||||
this.fend = undefined;
|
||||
this.atking = undefined;
|
||||
this.atked = undefined;
|
||||
this.field = undefined;
|
||||
@@ -734,7 +763,11 @@ export class HeroAttrsComp extends ecs.Comp {
|
||||
this.runtime_call = undefined;
|
||||
this.runtime_dead = undefined;
|
||||
this.runtime_fstart = undefined;
|
||||
this.runtime_fend = undefined;
|
||||
this.runtime_field = undefined;
|
||||
// 清空触发概率保底叠加缓存
|
||||
this.pity_atking = {};
|
||||
this.pity_atked = {};
|
||||
this.critical = 0;
|
||||
this.critical_res = 0;
|
||||
this.dodge = 0;
|
||||
@@ -760,6 +793,8 @@ export class HeroAttrsComp extends ecs.Comp {
|
||||
this.buff_power = 0;
|
||||
this.thorns_dmg = 0;
|
||||
this.thorns_rate = 0;
|
||||
this.talent_t_num_reduce = 0;
|
||||
this.talent_extra_trigger_chance = 0;
|
||||
this.boom = false;
|
||||
|
||||
// 重置技能距离缓存
|
||||
|
||||
@@ -48,14 +48,16 @@ export class HeroSpine extends Component {
|
||||
atk() {
|
||||
this.anm.atk()
|
||||
}
|
||||
max(){
|
||||
this.anm.max()
|
||||
max(name: string = "max0"){
|
||||
this.anm.max(name)
|
||||
}
|
||||
play(name:string){
|
||||
// 技能表 act 配置的是 clip 名(max0/max1),不能用全等匹配 "max"
|
||||
if(name.startsWith("max")){
|
||||
this.max(name)
|
||||
return
|
||||
}
|
||||
switch(name){
|
||||
case "max":
|
||||
this.max()
|
||||
break
|
||||
case "atk":
|
||||
this.atk()
|
||||
break
|
||||
|
||||
@@ -487,11 +487,14 @@ export class HeroViewComp extends CCComp {
|
||||
playSkillAnm(act: string = "") {
|
||||
mLogger.log(this.debugMode, 'HeroViewComp', '[heroview] act' + act,)
|
||||
if (act === "") return;
|
||||
switch (act) {
|
||||
case "max":
|
||||
// 技能表大招 act 配置为 clip 名("max0"/"max1"),必须前缀匹配,
|
||||
// 全等匹配 "max" 会落空导致大招动画不播、isCastingMax 不置位
|
||||
if (act.startsWith("max")) {
|
||||
this.isCastingMax = true;
|
||||
this.as.max()
|
||||
break
|
||||
this.as.max(act)
|
||||
return
|
||||
}
|
||||
switch (act) {
|
||||
case "atk":
|
||||
this.as.atk()
|
||||
break
|
||||
@@ -544,6 +547,15 @@ export class HeroViewComp extends CCComp {
|
||||
// 清理残留的定时器和缓动
|
||||
this.unscheduleAllCallbacks();
|
||||
Tween.stopAllByTarget(this.node);
|
||||
// 清理挂在节点下未播完的特效子节点(冰冻/击晕/受击等),
|
||||
// 防止对象池复用节点时把上一个单位的特效带到新单位身上。
|
||||
// 判定依据:特效由 spawnTimedFx/spawnAnimEndFx 实例化并挂 timedCom/oneCom,
|
||||
// 预制体自带子节点(anm/top 等)无这两个组件,不受影响。
|
||||
for (const child of [...this.node.children]) {
|
||||
if (child.getComponent(timedCom) || child.getComponent(oneCom)) {
|
||||
child.destroy();
|
||||
}
|
||||
}
|
||||
this.topBar.reset();
|
||||
|
||||
// 清理碰撞器事件监听
|
||||
|
||||
@@ -10,6 +10,10 @@ import { MoveComp } from "./MoveComp";
|
||||
import { GameEvent } from "../common/config/GameEvent";
|
||||
import { SkillTriggerType, HType } from "../common/config/heroSet";
|
||||
import { SkillTriggerHelper } from "./SkillTriggerHelper";
|
||||
import { BossPhaseSet } from "../common/config/BossPhaseSet";
|
||||
import { BossPhaseComp } from "./BossPhaseComp";
|
||||
import "./BossPhaseSystem";
|
||||
import { mLogger } from "../common/Logger";
|
||||
/** 怪物实体:负责怪物对象池复用、属性初始化、入场动画与回收 */
|
||||
@ecs.register(`Monster`)
|
||||
export class Monster extends ecs.Entity {
|
||||
@@ -122,6 +126,10 @@ export class Monster extends ecs.Entity {
|
||||
}
|
||||
}
|
||||
|
||||
// 阶段组件显式移除:触发 reset 清空状态并回组件池(ECS 组件无自动销毁钩子)
|
||||
if (this.has(BossPhaseComp)) {
|
||||
this.remove(BossPhaseComp);
|
||||
}
|
||||
// 手动移除组件,避免 ecs 引用滞留
|
||||
this.remove(HeroViewComp);
|
||||
this.remove(HeroAttrsComp);
|
||||
@@ -134,11 +142,11 @@ export class Monster extends ecs.Entity {
|
||||
* 2) 初始化表现、属性、技能与阵营
|
||||
* 3) 播放下落入场并在落地后启用碰撞与移动
|
||||
*/
|
||||
load(pos: Vec3 = Vec3.ZERO, scale: number = 1, uuid: number = 1001, is_boss: boolean = false, dropToY: number = pos.y, mon_lv: number = 1, laneIndex: number = 0) {
|
||||
load(pos: Vec3 = Vec3.ZERO, scale: number = 1, uuid: number = 1001, is_boss: boolean = false, dropToY: number = pos.y, mon_lv: number = 1, laneIndex: number = 0, phase_plan_id: number = 0) {
|
||||
// 怪物默认朝左,表现缩放固定为负向
|
||||
scale = -1
|
||||
// 当前怪物尺寸固定,保留变量便于后续扩展
|
||||
let size = 1
|
||||
// Boss 体型放大 1.5 倍,小怪保持原尺寸
|
||||
let size = is_boss ? 1.5 : 1
|
||||
var scene = smc.map.MapView.scene;
|
||||
// 根据配置读取怪物预制体路径
|
||||
var path = "game/heros/" + HeroInfo[uuid].path;
|
||||
@@ -236,11 +244,27 @@ export class Monster extends ecs.Entity {
|
||||
if (testSkills.fstart !== undefined) model.fstart = testSkills.fstart;
|
||||
if (testSkills.call !== undefined) model.call = testSkills.call;
|
||||
}
|
||||
// Boss 大招注入:在保留普攻的基础上追加(多个大招共存,由 SCastSystem 按 CD 轮转施放,
|
||||
// 含镜头聚焦 + 技能名横幅表现,与英雄大招同一条施法链路)
|
||||
const ults = (this as any)._testSkills?.ults;
|
||||
if (ults && ults.length > 0) {
|
||||
for (const ult of ults) {
|
||||
if (!ult || !ult.s_uuid) continue;
|
||||
model.skills[ult.s_uuid] = {
|
||||
uuid: ult.s_uuid,
|
||||
cd: ult.cd ?? 8,
|
||||
lv: 1,
|
||||
ccd: 0,
|
||||
overrides: ult.overrides
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
// 按怪物等级 resolve 触发技能到运行时缓存(怪物无 lv 成长,恒用 mon_lv)
|
||||
model.runtime_call = resolveTriggerByLv(model.call, mon_lv);
|
||||
model.runtime_dead = resolveTriggerByLv(model.dead, mon_lv);
|
||||
model.runtime_fstart = resolveTriggerByLv(model.fstart, mon_lv);
|
||||
model.runtime_fend = resolveTriggerByLv(model.fend, mon_lv);
|
||||
model.runtime_atking = resolveTriggerByLv(model.atking, mon_lv);
|
||||
model.runtime_atked = resolveTriggerByLv(model.atked, mon_lv);
|
||||
// 复活已纳入 dead 触发组,无需单独解析 revive
|
||||
@@ -248,6 +272,21 @@ export class Monster extends ecs.Entity {
|
||||
// 缓存技能射程等派生数据,减少战斗帧内重复计算
|
||||
model.updateSkillDistanceCache();
|
||||
|
||||
// Boss 阶段初始化:P1 = 基线技能,仅挂标记组件并记录方案(方案缺失则退化为单阶段 Boss)
|
||||
if (is_boss && phase_plan_id > 0) {
|
||||
const plan = BossPhaseSet[phase_plan_id];
|
||||
if (plan) {
|
||||
const phase = this.add(BossPhaseComp);
|
||||
phase.plan_id = phase_plan_id;
|
||||
phase.index = 0;
|
||||
// 分诊日志:确认组件挂载成功(区分"未挂载"与"系统未接管"两类故障)
|
||||
mLogger.log(true, "BossPhase", `${model.hero_name} 挂载阶段方案 ${phase_plan_id}(P1 起点)`);
|
||||
} else {
|
||||
// 配置兜底:引用了不存在的方案,退化为单阶段并告警(不阻断战斗)
|
||||
mLogger.warn(true, "BossPhase", `阶段方案 ${phase_plan_id} 未在 BossPhaseSet 中定义,Boss 按单阶段战斗`);
|
||||
}
|
||||
}
|
||||
|
||||
// 注册视图组件并重置对象池复用状态
|
||||
this.add(view);
|
||||
view.init();
|
||||
@@ -340,6 +379,9 @@ export class Monster extends ecs.Entity {
|
||||
|
||||
/** 重置入口:复用 destroy 的释放流程 */
|
||||
reset() {
|
||||
if (this.has(BossPhaseComp)) {
|
||||
this.remove(BossPhaseComp);
|
||||
}
|
||||
super.destroy();
|
||||
}
|
||||
|
||||
|
||||
@@ -56,7 +56,7 @@ export class MoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
|
||||
private readonly renderSortInterval = 0.05;
|
||||
private lastRenderSortAt = 0;
|
||||
private heroViewMatcher: ecs.IMatcher | null = null;
|
||||
private readonly renderEntries: { node: Node; bossPriority: number; frontScore: number; spawnOrder: number; eid: number; laneScore: number; isCastingMax: boolean }[] = [];
|
||||
private readonly renderEntries: { node: Node; spawnOrder: number; eid: number; isCastingMax: boolean }[] = [];
|
||||
private renderEntryCount = 0;
|
||||
|
||||
// ======================== 英雄编队排队 ========================
|
||||
@@ -431,8 +431,8 @@ export class MoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
|
||||
const monRoot = layerNode.getChildByName("MON");
|
||||
const bossRoot = layerNode.getChildByName("BOSS");
|
||||
|
||||
/** 分层重排同层节点:各阵营层内按 Y 轴路次 -> 前后位置 -> 出生序 -> eid 排序
|
||||
* (Boss 已有独立 BOSS 层固定在最底,无需 bossPriority 参与排序) */
|
||||
/** 分层重排同层节点:层内层级只由「是否释放大招」决定,出生序/eid 仅保证排序稳定
|
||||
* (Boss 已有独立 BOSS 层固定在最底,天然在最下层) */
|
||||
this.renderEntryCount = 0;
|
||||
ecs.query(this.getHeroViewMatcher()).forEach(e => {
|
||||
const attrs = e.get(HeroAttrsComp);
|
||||
@@ -456,20 +456,13 @@ export class MoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
|
||||
const move = e.get(MoveComp);
|
||||
const spawnOrder = move?.spawnOrder ?? 0;
|
||||
|
||||
// 按 Y 轴计算渲染层级权重(Y 越小,说明越靠近屏幕下方,应该渲染在越前面)
|
||||
const laneScore = -actorView.node.position.y;
|
||||
// X 轴权重:站在前排的(交战处)优先渲染
|
||||
const frontScore = attrs.fac === FacSet.HERO ? actorView.node.position.x : -actorView.node.position.x;
|
||||
|
||||
const entryIndex = this.renderEntryCount;
|
||||
let entry = this.renderEntries[entryIndex];
|
||||
if (!entry) {
|
||||
entry = { node: actorView.node, bossPriority: 0, frontScore: 0, spawnOrder: 0, eid: 0, laneScore: 0, isCastingMax: false };
|
||||
entry = { node: actorView.node, spawnOrder: 0, eid: 0, isCastingMax: false };
|
||||
this.renderEntries.push(entry);
|
||||
}
|
||||
entry.node = actorView.node;
|
||||
entry.laneScore = laneScore;
|
||||
entry.frontScore = frontScore;
|
||||
entry.spawnOrder = spawnOrder;
|
||||
entry.eid = e.eid;
|
||||
entry.isCastingMax = actorView.isCastingMax;
|
||||
@@ -478,11 +471,9 @@ export class MoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
|
||||
this.renderEntries.length = this.renderEntryCount;
|
||||
|
||||
this.renderEntries.sort((a, b) => {
|
||||
// 正在播放大招的英雄排在最后,siblingIndex 越大渲染层级越靠上
|
||||
// 层级只受大招影响:正在播放大招的单位排在最后,siblingIndex 越大渲染层级越靠上
|
||||
if (a.isCastingMax !== b.isCastingMax) return a.isCastingMax ? 1 : -1;
|
||||
// Y轴靠下的(laneScore 较大)应该在后面,从而渲染在上面
|
||||
if (Math.abs(a.laneScore - b.laneScore) > 10) return a.laneScore - b.laneScore;
|
||||
if (a.frontScore !== b.frontScore) return a.frontScore - b.frontScore;
|
||||
// 与位置无关的稳定排序:出生序 -> eid
|
||||
if (a.spawnOrder !== b.spawnOrder) return a.spawnOrder - b.spawnOrder;
|
||||
return a.eid - b.eid;
|
||||
});
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
|
||||
import { Vec3, Prefab, instantiate, tween, Node } from "cc";
|
||||
import { Vec3, Prefab, instantiate, tween, Node, UITransform } from "cc";
|
||||
import { HeroAttrsComp } from "./HeroAttrsComp";
|
||||
import { HeroViewComp } from "./HeroViewComp";
|
||||
import { DTType, RType, SkillConfig, SkillKind, SkillSet, TGroup, SkillOverrides, mergeSkillParams } from "../common/config/SkillSet";
|
||||
import { DTType, RType, SkillConfig, SkillKind, SkillSet, SummonTMode, TGroup, SkillOverrides, mergeSkillParams } from "../common/config/SkillSet";
|
||||
import { Skill } from "../skill/Skill";
|
||||
import { SkillView } from "../skill/SkillView";
|
||||
import { smc } from "../common/SingletonModuleComp";
|
||||
@@ -20,6 +20,16 @@ import { BuffList } from "../common/config/BuffSet";
|
||||
import { CameraFX } from "../common/CameraFX";
|
||||
import { ScreenShake } from "../common/ScreenShake";
|
||||
|
||||
/** 召唤参数:数量 / XY 步进偏移 / 生成间隔 / 目标选择模式,均由技能 prefab 上的 SkillView 配置 */
|
||||
export interface SummonParams {
|
||||
count: number;
|
||||
x_offset: number;
|
||||
y_offset: number;
|
||||
interval: number;
|
||||
/** 多次施放的目标选择模式(同一敌人/随机敌人/避免相同敌人) */
|
||||
target_mode: SummonTMode;
|
||||
}
|
||||
|
||||
/**
|
||||
* ==================== 自动施法系统 ====================
|
||||
*
|
||||
@@ -93,9 +103,10 @@ export class SCastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
|
||||
targetEids = this.collectFriendlyTargetEids(FacSet.HERO, undefined, true); // 获取所有英雄阵营的目标
|
||||
}
|
||||
|
||||
const summonCount = this.resolveSummonCount(config);
|
||||
const cNum = summonCount > 1 ? 0 : Math.min(2, Math.max(0, Math.floor(overrides?.num ?? 0)));
|
||||
const castTimes = Math.max(summonCount, 1 + cNum);
|
||||
const summon = this.resolveSummonParams(config);
|
||||
const cNum = summon.count > 1 ? 0 : Math.min(2, Math.max(0, Math.floor(overrides?.num ?? 0)));
|
||||
const castTimes = Math.max(summon.count, 1 + cNum);
|
||||
const castInterval = this.resolveCastInterval(summon);
|
||||
|
||||
// 构造一个模拟的 HeroAttrsComp 用于数值计算,只包含基础卡牌伤害计算所需的属性
|
||||
const mockAttrs = new HeroAttrsComp();
|
||||
@@ -128,12 +139,12 @@ export class SCastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
|
||||
mockAttrs.type = HType.Long; // 假定为远程,拥有较长索敌范围
|
||||
mockAttrs.dis = 2000; // 给予全屏以上的索敌范围
|
||||
|
||||
let targetPos: Vec3 | null = null;
|
||||
if (!isFriendly) {
|
||||
// 伪造一个 view 供找敌逻辑使用,位置为 spawnPos
|
||||
// 伪造一个 view 供找敌逻辑使用,位置为 spawnPos(random/unique 模式实时索敌也复用)
|
||||
const mockView = {
|
||||
node: { position: spawnPos }
|
||||
} as any;
|
||||
let targetPos: Vec3 | null = null;
|
||||
if (!isFriendly) {
|
||||
// 获取全屏索敌范围
|
||||
const maxRange = this.resolveMaxCastRange(mockAttrs, mockAttrs.type as HType);
|
||||
const target = this.findNearestEnemyInRange(mockAttrs, mockView, maxRange);
|
||||
@@ -148,8 +159,10 @@ export class SCastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
|
||||
}
|
||||
|
||||
mLogger.log(this.debugMode, "SCastSystem", `[卡牌施法] 释放技能「${config.name}」(s_uuid:${s_uuid}) rarity:${rarity} castTimes:${castTimes} targetPos:${targetPos ? `(${targetPos.x.toFixed(0)},${targetPos.y.toFixed(0)})` : "none"} isFriendly:${isFriendly}`);
|
||||
// unique 模式去重记录:本次施法序列内已锁定过的敌人 eid
|
||||
const usedTargetEids = new Set<number>();
|
||||
for (let i = 0; i < castTimes; i++) {
|
||||
// 多发/召唤按间隔错峰执行:i=0 立即,其余延迟 i*SUMMON_INTERVAL(卡牌无施法主体,用 setTimeout 并在回调内做效期校验)
|
||||
// 多发/召唤按间隔错峰执行:i=0 立即,其余延迟 i*castInterval(召唤间隔由 prefab 配置)
|
||||
const exec = () => {
|
||||
if (!smc.mission.play || smc.mission.pause) return;
|
||||
if (isFriendly) {
|
||||
@@ -158,14 +171,14 @@ export class SCastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
|
||||
if (friendlyTargets.length === 0) return;
|
||||
this.applyFriendlySkillEffects(s_uuid, rarity, config, null as any, mockAttrs, friendlyTargets, spawnPos);
|
||||
} else {
|
||||
const enemyTargetPos = this.resolveRepeatCastTargetPos(targetPos, i);
|
||||
this.createSkillEntityForCard(s_uuid, rarity, mockAttrs, spawnPos, enemyTargetPos, i, overrides);
|
||||
const enemyTargetPos = this.resolveSummonCastTargetPos(config, mockAttrs, mockView, targetPos, i, summon, usedTargetEids);
|
||||
this.createSkillEntityForCard(s_uuid, rarity, mockAttrs, spawnPos, enemyTargetPos, i, overrides, summon);
|
||||
}
|
||||
};
|
||||
if (i === 0) {
|
||||
exec();
|
||||
} else {
|
||||
setTimeout(exec, i * FightSet.SUMMON_INTERVAL * 1000);
|
||||
setTimeout(exec, i * castInterval * 1000);
|
||||
}
|
||||
}
|
||||
// 施法后概率触发额外技能(proc_skill,原命中触发改为出手即判定;卡牌技能无视 CD、无施法主体)
|
||||
@@ -173,7 +186,7 @@ export class SCastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
|
||||
}
|
||||
|
||||
/** 专用于卡牌施放的技能实体生成 */
|
||||
private createSkillEntityForCard(s_uuid: number, skillLv: number, mockAttrs: HeroAttrsComp, startPos: Vec3, targetPos: Vec3 | null, castIndex: number = 0, overrides?: SkillOverrides) {
|
||||
private createSkillEntityForCard(s_uuid: number, skillLv: number, mockAttrs: HeroAttrsComp, startPos: Vec3, targetPos: Vec3 | null, castIndex: number = 0, overrides?: SkillOverrides, summon?: SummonParams) {
|
||||
const scene = smc.map.MapView.scene;
|
||||
const parent = scene.entityLayer?.node?.getChildByName("SKILL");
|
||||
if (!parent || !targetPos) {
|
||||
@@ -182,7 +195,7 @@ export class SCastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
|
||||
}
|
||||
|
||||
const skill = ecs.getEntity<Skill>(Skill);
|
||||
const actualStartPos = this.resolveRepeatCastStartPos(startPos, castIndex);
|
||||
const actualStartPos = this.resolveRepeatCastStartPos(startPos, castIndex, summon);
|
||||
|
||||
// 伪造一个简单的 heroView 供 Skill 初始化使用,只包含方向信息
|
||||
const mockView = {
|
||||
@@ -199,31 +212,51 @@ export class SCastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
|
||||
/** 查询缓存:避免每帧重复创建 matcher */
|
||||
private heroMatcher: ecs.IMatcher | null = null;
|
||||
|
||||
/** 技能 prefab 召唤数量缓存:sp_name -> summon_count */
|
||||
private summonCountCache: Map<string, number> = new Map();
|
||||
/** 技能 prefab 召唤参数缓存:sp_name -> 召唤参数(数量/XY偏移/间隔) */
|
||||
private summonParamsCache: Map<string, SummonParams> = new Map();
|
||||
|
||||
/**
|
||||
* 解析单次施法的召唤数量。
|
||||
* 优先级:合并后配置上的 summon_count(heroSet overrides 可覆写) > prefab 上 SkillView.summon_count。
|
||||
* prefab 回退路径仅使用已缓存的资源(oops.res.get 同步命中),未加载时回退 1(单体),不引入异步等待。
|
||||
* 解析单次施法的召唤参数。
|
||||
* 数量优先级:合并后配置上的 summon_count(heroSet overrides 可覆写) > prefab 上 SkillView.summon_count;
|
||||
* XY 偏移、间隔与目标选择模式仅由 prefab 配置。
|
||||
*/
|
||||
private resolveSummonCount(config: SkillConfig): number {
|
||||
if (typeof config.summon_count === "number") {
|
||||
return Math.max(1, Math.floor(config.summon_count));
|
||||
private resolveSummonParams(config: SkillConfig): SummonParams {
|
||||
const fromPrefab = this.readSummonParamsFromPrefab(config.sp_name);
|
||||
const count = typeof config.summon_count === "number"
|
||||
? Math.max(1, Math.floor(config.summon_count))
|
||||
: fromPrefab.count;
|
||||
return { count, x_offset: fromPrefab.x_offset, y_offset: fromPrefab.y_offset, interval: fromPrefab.interval, target_mode: fromPrefab.target_mode };
|
||||
}
|
||||
const cached = this.summonCountCache.get(config.sp_name);
|
||||
if (cached !== undefined) return cached;
|
||||
const path = `game/skill/atk/${config.sp_name}`;
|
||||
let count = 1;
|
||||
|
||||
/**
|
||||
* 读取 prefab 上 SkillView 的召唤参数(带缓存)。
|
||||
* prefab 回退路径仅使用已缓存的资源(oops.res.get 同步命中),未加载时回退默认值(单体、无偏移),不引入异步等待。
|
||||
*/
|
||||
private readSummonParamsFromPrefab(sp_name: string): SummonParams {
|
||||
const cached = this.summonParamsCache.get(sp_name);
|
||||
if (cached) return cached;
|
||||
const path = `game/skill/atk/${sp_name}`;
|
||||
let params: SummonParams = { count: 1, x_offset: 0, y_offset: 0, interval: 0, target_mode: SummonTMode.same };
|
||||
const prefab = oops.res.get(path, Prefab) as Prefab | null;
|
||||
if (prefab) {
|
||||
const view = prefab.data?.getComponent(SkillView);
|
||||
if (view) {
|
||||
count = Math.max(1, Math.floor(view.summon_count));
|
||||
params = {
|
||||
count: Math.max(1, Math.floor(view.summon_count)),
|
||||
x_offset: view.summon_x_offset,
|
||||
y_offset: view.summon_y_offset,
|
||||
interval: view.summon_interval,
|
||||
target_mode: view.summon_target_mode ?? SummonTMode.same,
|
||||
};
|
||||
}
|
||||
this.summonCountCache.set(config.sp_name, count);
|
||||
this.summonParamsCache.set(sp_name, params);
|
||||
}
|
||||
return count;
|
||||
return params;
|
||||
}
|
||||
|
||||
/** 解析错峰施法间隔:召唤技能优先 prefab 配置(>0),其余场景回退全局 SUMMON_INTERVAL */
|
||||
private resolveCastInterval(summon: SummonParams): number {
|
||||
return summon.count > 1 && summon.interval > 0 ? summon.interval : FightSet.SUMMON_INTERVAL;
|
||||
}
|
||||
|
||||
/** 获取英雄查询条件(包含属性与视图组件) */
|
||||
@@ -317,18 +350,21 @@ export class SCastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
|
||||
}
|
||||
}
|
||||
|
||||
const summonCount = this.resolveSummonCount(config);
|
||||
const cNum = summonCount > 1 ? 0 : Math.min(2, Math.max(0, Math.floor(overrides?.num ?? 0)));
|
||||
const castTimes = Math.max(summonCount, 1 + cNum);
|
||||
const summon = this.resolveSummonParams(config);
|
||||
const cNum = summon.count > 1 ? 0 : Math.min(2, Math.max(0, Math.floor(overrides?.num ?? 0)));
|
||||
const castTimes = Math.max(summon.count, 1 + cNum);
|
||||
const castInterval = this.resolveCastInterval(summon);
|
||||
let val = ""
|
||||
if (castTimes > 1) {
|
||||
val = "*" + castTimes.toString()
|
||||
}
|
||||
heroView.skill_name(val, s_uuid)
|
||||
mLogger.log(this.debugMode, "SCastSystem", `[触发施法] ${heroAttrs.hero_name}(uuid:${heroAttrs.hero_uuid}) 触发类型:${triggerType ?? "none"} 释放技能「${config.name}」(s_uuid:${s_uuid}) lv:${skillLv} ${isFriendly ? "友方" : "对敌"} castTimes:${castTimes}`);
|
||||
// unique 模式去重记录:本次施法序列内已锁定过的敌人 eid
|
||||
const usedTargetEids = new Set<number>();
|
||||
for (let i = 0; i < castTimes; i++) {
|
||||
if (!heroView.node || !heroView.node.isValid) return;
|
||||
// 多发/召唤按间隔错峰执行:i=0 立即,其余延迟 i*SUMMON_INTERVAL
|
||||
// 多发/召唤按间隔错峰执行:i=0 立即,其余延迟 i*castInterval(召唤间隔由 prefab 配置)
|
||||
heroView.scheduleOnce(() => {
|
||||
if (!smc.mission.play || smc.mission.pause) return;
|
||||
if (!heroView.node || !heroView.node.isValid || heroAttrs.is_dead) return;
|
||||
@@ -338,9 +374,9 @@ export class SCastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
|
||||
this.applyFriendlySkillEffects(s_uuid, skillLv, config, heroView, heroAttrs, friendlyTargets, null);
|
||||
return;
|
||||
}
|
||||
const enemyTargetPos = this.resolveRepeatCastTargetPos(targetPos, i);
|
||||
this.applyEnemySkillEffects(s_uuid, skillLv, config, heroView, heroAttrs, enemyTargetPos, i, overrides);
|
||||
}, i * FightSet.SUMMON_INTERVAL);
|
||||
const enemyTargetPos = this.resolveSummonCastTargetPos(config, heroAttrs, heroView, targetPos, i, summon, usedTargetEids);
|
||||
this.applyEnemySkillEffects(s_uuid, skillLv, config, heroView, heroAttrs, enemyTargetPos, i, overrides, summon);
|
||||
}, i * castInterval);
|
||||
}
|
||||
// 施法后概率触发额外技能(proc_skill,原命中触发改为出手即判定,无视 CD)
|
||||
this.tryProcSkill(config, heroAttrs, heroView, triggerType);
|
||||
@@ -399,10 +435,11 @@ export class SCastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
|
||||
|
||||
config = mergeSkillParams(config, overrides);
|
||||
|
||||
const summonCount = this.resolveSummonCount(config);
|
||||
const isSummonSkill = summonCount > 1;
|
||||
const summon = this.resolveSummonParams(config);
|
||||
const isSummonSkill = summon.count > 1;
|
||||
const cNum = isSummonSkill ? 0 : Math.min(2, Math.max(0, Math.floor(overrides?.num ?? 0)));
|
||||
const castTimes = Math.max(summonCount, 1 + cNum);
|
||||
const castTimes = Math.max(summon.count, 1 + cNum);
|
||||
const castInterval = this.resolveCastInterval(summon);
|
||||
|
||||
mLogger.log(this.debugMode, "SCastSystem", `[施法] ${heroAttrs.hero_name}(uuid:${heroAttrs.hero_uuid}) 释放技能「${config.name}」(s_uuid:${s_uuid}) lv:${skillLv} ${castPlan.isFriendly ? "友方" : "对敌"} castTimes:${castTimes}`);
|
||||
|
||||
@@ -439,12 +476,14 @@ export class SCastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
|
||||
// 注意:这里仍然是基于时间的延迟,受帧率波动影响。
|
||||
// 若需精确同步,建议在动画中添加帧事件并在 HeroViewComp 中监听。
|
||||
const delay = config.ready > 0 ? config.ready : FightSet.SKILL_CAST_DELAY;
|
||||
// unique 模式去重记录:本次施法序列内已锁定过的敌人 eid
|
||||
const usedTargetEids = new Set<number>();
|
||||
|
||||
heroView.scheduleOnce(() => {
|
||||
if (!smc.mission.play || smc.mission.pause || !smc.mission.in_fight) return;
|
||||
if (!heroView.node || !heroView.node.isValid || heroAttrs.is_dead) return;
|
||||
for (let i = 0; i < castTimes; i++) {
|
||||
// 多发/召唤按间隔错峰执行:i=0 立即,其余延迟 i*SUMMON_INTERVAL
|
||||
// 多发/召唤按间隔错峰执行:i=0 立即,其余延迟 i*castInterval(召唤间隔由 prefab 配置)
|
||||
heroView.scheduleOnce(() => {
|
||||
if (!smc.mission.play || smc.mission.pause || !smc.mission.in_fight) return;
|
||||
if (!heroView.node || !heroView.node.isValid || heroAttrs.is_dead) return;
|
||||
@@ -454,9 +493,9 @@ export class SCastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
|
||||
this.applyFriendlySkillEffects(s_uuid, skillLv, config, heroView, heroAttrs, friendlyTargets, null);
|
||||
return;
|
||||
}
|
||||
const enemyTargetPos = this.resolveRepeatCastTargetPos(castPlan.targetPos, i);
|
||||
this.applyEnemySkillEffects(s_uuid, skillLv, config, heroView, heroAttrs, enemyTargetPos, i, overrides);
|
||||
}, i * FightSet.SUMMON_INTERVAL);
|
||||
const enemyTargetPos = this.resolveSummonCastTargetPos(config, heroAttrs, heroView, castPlan.targetPos, i, summon, usedTargetEids);
|
||||
this.applyEnemySkillEffects(s_uuid, skillLv, config, heroView, heroAttrs, enemyTargetPos, i, overrides, summon);
|
||||
}, i * castInterval);
|
||||
}
|
||||
}, delay);
|
||||
|
||||
@@ -497,14 +536,91 @@ export class SCastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
|
||||
}
|
||||
}
|
||||
|
||||
/** 多发/召唤的纵向扇形偏移档位(像素),索引按 中/上/下/上上/下下... 循环 */
|
||||
/** 多发的纵向扇形偏移档位(像素),索引按 中/上/下/上上/下下... 循环;召唤技能偏移由 prefab 配置 */
|
||||
private static readonly REPEAT_Y_OFFSETS: number[] = [0, 15, -15, 30, -30, 45, -45, 60, -60];
|
||||
|
||||
private resolveRepeatCastTargetPos(targetPos: Vec3 | null, castIndex: number): Vec3 | null {
|
||||
private resolveRepeatCastTargetPos(targetPos: Vec3 | null, castIndex: number, summon?: SummonParams): Vec3 | null {
|
||||
if (!targetPos) return null;
|
||||
const offset = SCastSystem.REPEAT_Y_OFFSETS[castIndex % SCastSystem.REPEAT_Y_OFFSETS.length];
|
||||
if (offset === 0) return targetPos;
|
||||
return new Vec3(targetPos.x, targetPos.y + offset, targetPos.z);
|
||||
const offset = this.resolveCastOffset(castIndex, summon);
|
||||
if (offset.x === 0 && offset.y === 0) return targetPos;
|
||||
return new Vec3(targetPos.x + offset.x, targetPos.y + offset.y, targetPos.z);
|
||||
}
|
||||
|
||||
/**
|
||||
* 解析第 castIndex 次施放的对敌目标点(召唤目标选择模式入口)。
|
||||
* - same(默认):沿用施法时锁定的目标点并按召唤偏移对称铺开(原行为);
|
||||
* - random:每次出手时从射程内敌人中随机锁定一个(错峰施放时实时索敌,目标状态最新鲜);
|
||||
* - unique:优先锁定本轮未选过的敌人,敌人不足一轮时重置去重记录再来一轮;
|
||||
* 实时索敌失败(敌人死亡/移动出射程)时回退施法时锁定的目标点,保证技能不落空。
|
||||
*/
|
||||
private resolveSummonCastTargetPos(config: SkillConfig, heroAttrs: HeroAttrsComp, heroView: HeroViewComp | null, baseTargetPos: Vec3 | null, castIndex: number, summon: SummonParams | undefined, usedEids: Set<number>): Vec3 | null {
|
||||
if (!summon || summon.count <= 1 || summon.target_mode === SummonTMode.same) {
|
||||
return this.resolveRepeatCastTargetPos(baseTargetPos, castIndex, summon);
|
||||
}
|
||||
const maxRange = this.resolveMaxCastRange(heroAttrs, heroAttrs.type as HType);
|
||||
const enemies = this.collectEnemiesInRange(heroAttrs, heroView, maxRange);
|
||||
const picked = enemies.length > 0 ? this.pickEnemyByTargetMode(enemies, summon.target_mode, usedEids) : null;
|
||||
if (picked?.node) {
|
||||
mLogger.log(this.debugMode, "SCastSystem", `[召唤索敌] 「${config.name}」第${castIndex + 1}个实体锁定目标 eid:${picked.ent?.eid} 模式:${SummonTMode[summon.target_mode]}`);
|
||||
// 与 resolveEnemyCastTargetPos 保持一致:贝塞尔取脚底原始坐标,其余补半身高命中身体中心
|
||||
const pos = config.RType === RType.bezier ? picked.node.position.clone() : this.buildEnemyCastTargetPos(picked);
|
||||
// 召唤偏移铺开仍生效:random 模式重复锁定同一敌人时,避免实体完全重叠
|
||||
const offset = this.resolveCastOffset(castIndex, summon);
|
||||
pos.x += offset.x;
|
||||
pos.y += offset.y;
|
||||
return pos;
|
||||
}
|
||||
// 实时索敌失败:回退施法时锁定的目标点
|
||||
return this.resolveRepeatCastTargetPos(baseTargetPos, castIndex, summon);
|
||||
}
|
||||
|
||||
/** 按目标模式从射程内候选敌人中挑选本次施放的锁定目标,并写入去重记录 */
|
||||
private pickEnemyByTargetMode(enemies: HeroViewComp[], mode: SummonTMode, usedEids: Set<number>): HeroViewComp | null {
|
||||
let pool = enemies;
|
||||
if (mode === SummonTMode.unique) {
|
||||
const unused = enemies.filter(view => !view.ent || !usedEids.has(view.ent.eid));
|
||||
if (unused.length > 0) {
|
||||
pool = unused;
|
||||
} else {
|
||||
// 敌人不足一轮:重置已选记录,重新开始去重,保证尽量分散
|
||||
usedEids.clear();
|
||||
}
|
||||
}
|
||||
const picked = pool[Math.floor(Math.random() * pool.length)];
|
||||
if (picked?.ent) usedEids.add(picked.ent.eid);
|
||||
return picked ?? null;
|
||||
}
|
||||
|
||||
/** 收集施法者射程内的全部敌方目标(随机/去重目标模式实时索敌用),网格遍历与 findNearestEnemyByGrid 同源 */
|
||||
private collectEnemiesInRange(heroAttrs: HeroAttrsComp, heroView: HeroViewComp | null, maxRange: number): HeroViewComp[] {
|
||||
const result: HeroViewComp[] = [];
|
||||
if (!heroView?.node) return result;
|
||||
const grid = heroAttrs.fac === FacSet.HERO ? smc.mission.monGrid : smc.mission.heroGrid;
|
||||
const currentX = heroView.node.position.x;
|
||||
for (const eid of grid) {
|
||||
if (eid < 0) continue;
|
||||
const entity = ecs.getEntityByEid(eid);
|
||||
if (!entity) continue;
|
||||
const model = entity.get(HeroAttrsComp);
|
||||
const view = entity.get(HeroViewComp);
|
||||
if (!model || model.is_dead || model.is_reviving || !view?.node) continue;
|
||||
if (Math.abs(currentX - view.node.position.x) <= maxRange) {
|
||||
result.push(view);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/** 解析第 castIndex 个实体的偏移:召唤技能按 prefab 配置对称交替铺开(0, +1, -1, +2, -2... 档 × 步进值);多发回落纵向扇形档位 */
|
||||
private resolveCastOffset(castIndex: number, summon?: SummonParams): { x: number; y: number } {
|
||||
if (summon && summon.count > 1) {
|
||||
// 对称交替:偶数索引(>=2)取负档,奇数索引取正档,使召唤物以原点为中心向两侧展开
|
||||
const level = Math.ceil(castIndex / 2);
|
||||
const sign = castIndex % 2 === 0 ? -1 : 1;
|
||||
const factor = castIndex === 0 ? 0 : sign * level;
|
||||
return { x: factor * summon.x_offset, y: factor * summon.y_offset };
|
||||
}
|
||||
return { x: 0, y: SCastSystem.REPEAT_Y_OFFSETS[castIndex % SCastSystem.REPEAT_Y_OFFSETS.length] };
|
||||
}
|
||||
|
||||
/** 构建技能尝试顺序:优先主动技能,其次普攻 */
|
||||
@@ -518,12 +634,12 @@ export class SCastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
|
||||
* 创建技能实体(投射物/范围体等)。
|
||||
* 仅用于对敌伤害技能的实体化表现与碰撞伤害分发。
|
||||
*/
|
||||
private createSkillEntity(s_uuid: number, skillLv: number, caster: HeroViewComp, cAttrsComp: HeroAttrsComp, targetPos: Vec3, castIndex: number = 0, overrides?: SkillOverrides) {
|
||||
private createSkillEntity(s_uuid: number, skillLv: number, caster: HeroViewComp, cAttrsComp: HeroAttrsComp, targetPos: Vec3, castIndex: number = 0, overrides?: SkillOverrides, summon?: SummonParams) {
|
||||
if (!caster.node || !caster.node.isValid) return;
|
||||
const parent = caster.node.parent;
|
||||
if (!parent) return;
|
||||
const skill = ecs.getEntity<Skill>(Skill);
|
||||
const startPos = this.resolveRepeatCastStartPos(caster.node.position, castIndex);
|
||||
const startPos = this.resolveRepeatCastStartPos(caster.node.position, castIndex, summon);
|
||||
skill.load(startPos, parent, s_uuid, targetPos.clone(), caster, cAttrsComp, skillLv, 0, overrides);
|
||||
}
|
||||
|
||||
@@ -531,17 +647,17 @@ export class SCastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
|
||||
* 对敌技能效果处理。
|
||||
* 当前职责:仅处理伤害技能并创建技能实体。
|
||||
*/
|
||||
private applyEnemySkillEffects(s_uuid: number, skillLv: number, config: SkillConfig, heroView: HeroViewComp, cAttrsComp: HeroAttrsComp, targetPos: Vec3 | null, castIndex: number = 0, overrides?: SkillOverrides) {
|
||||
private applyEnemySkillEffects(s_uuid: number, skillLv: number, config: SkillConfig, heroView: HeroViewComp, cAttrsComp: HeroAttrsComp, targetPos: Vec3 | null, castIndex: number = 0, overrides?: SkillOverrides, summon?: SummonParams) {
|
||||
const kind = config.kind ?? SkillKind.Damage;
|
||||
if (kind !== SkillKind.Damage) return;
|
||||
if (config.ap <= 0 || !targetPos) return;
|
||||
this.createSkillEntity(s_uuid, skillLv, heroView, cAttrsComp, targetPos, castIndex, overrides);
|
||||
this.createSkillEntity(s_uuid, skillLv, heroView, cAttrsComp, targetPos, castIndex, overrides, summon);
|
||||
}
|
||||
|
||||
private resolveRepeatCastStartPos(startPos: Readonly<Vec3>, castIndex: number): Vec3 {
|
||||
const offset = SCastSystem.REPEAT_Y_OFFSETS[castIndex % SCastSystem.REPEAT_Y_OFFSETS.length];
|
||||
if (offset === 0) return startPos.clone();
|
||||
return new Vec3(startPos.x, startPos.y + offset, startPos.z);
|
||||
private resolveRepeatCastStartPos(startPos: Readonly<Vec3>, castIndex: number, summon?: SummonParams): Vec3 {
|
||||
const offset = this.resolveCastOffset(castIndex, summon);
|
||||
if (offset.x === 0 && offset.y === 0) return startPos.clone();
|
||||
return new Vec3(startPos.x + offset.x, startPos.y + offset.y, startPos.z);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -841,7 +957,7 @@ export class SCastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
|
||||
return nearestEnemy.node?.position.clone() ?? null;
|
||||
}
|
||||
if (config.DTType !== DTType.range) {
|
||||
return this.buildEnemyCastTargetPos(heroView, nearestEnemy, maxRange);
|
||||
return this.buildEnemyCastTargetPos(nearestEnemy);
|
||||
}
|
||||
const frontEnemy = this.findFrontEnemyInRange(heroAttrs, heroView, maxRange, nearestEnemy);
|
||||
if (!frontEnemy?.node) return null;
|
||||
@@ -855,19 +971,10 @@ export class SCastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
|
||||
return heroAttrs.dis;
|
||||
}
|
||||
|
||||
/** 生成沿目标方向的施法目标坐标 */
|
||||
private buildEnemyCastTargetPos(caster: HeroViewComp, target: HeroViewComp, castRange: number): Vec3 {
|
||||
// 直接返回目标的真实坐标,保留其 Y 轴信息,确保能向目标真实所在位置发射
|
||||
// 考虑到目前角色的 y 坐标都是脚底(碰撞体底部),为了命中身体中心,给目标 y 加上高度的一半
|
||||
let halfHeight = 0;
|
||||
if (target.node) {
|
||||
const transform = target.node.getComponent('cc.UITransform') as any;
|
||||
if (transform) {
|
||||
halfHeight = transform.height / 2;
|
||||
} else {
|
||||
halfHeight = 40; // 如果没有 UITransform,给一个默认高度偏移
|
||||
}
|
||||
}
|
||||
/** 生成对敌施法目标坐标:直接返回目标的真实坐标;y 为脚底(碰撞体底部),补半身高以命中身体中心 */
|
||||
private buildEnemyCastTargetPos(target: HeroViewComp): Vec3 {
|
||||
const transform = target.node?.getComponent(UITransform);
|
||||
const halfHeight = transform ? transform.height / 2 : 40; // 无 UITransform 时给默认高度偏移
|
||||
|
||||
const pos = target.node.position.clone();
|
||||
pos.y += halfHeight;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { oops } from "db://oops-framework/core/Oops";
|
||||
import { GameEvent } from "../common/config/GameEvent";
|
||||
import { SkillTriggerType } from "../common/config/heroSet";
|
||||
import { ResolvedTriggerEntry, SkillTriggerType } from "../common/config/heroSet";
|
||||
import { HeroAttrsComp } from "./HeroAttrsComp";
|
||||
import { HeroViewComp } from "./HeroViewComp";
|
||||
import { FacSet } from "../common/config/GameSet";
|
||||
@@ -44,6 +44,9 @@ export class SkillTriggerHelper {
|
||||
case SkillTriggerType.FStart:
|
||||
this.handleArrayTrigger(model.runtime_fstart, model, view, type);
|
||||
break;
|
||||
case SkillTriggerType.FEnd:
|
||||
this.handleArrayTrigger(model.runtime_fend, model, view, type);
|
||||
break;
|
||||
case SkillTriggerType.Atking:
|
||||
this.handleAtking(model, view);
|
||||
break;
|
||||
@@ -95,6 +98,7 @@ export class SkillTriggerHelper {
|
||||
/**
|
||||
* 处理攻击附加技能
|
||||
* 判定逻辑:依据配置中的 t_num(触发所需普攻次数),对比当前的普攻累计次数取模判定。
|
||||
* 天赋修正:L4 减少 t_num 阈值(下限 1);L5 按概率额外触发 1 次。
|
||||
*/
|
||||
private static handleAtking(model: HeroAttrsComp, view: HeroViewComp) {
|
||||
if (!model.runtime_atking || model.runtime_atking.length === 0) return;
|
||||
@@ -104,10 +108,18 @@ export class SkillTriggerHelper {
|
||||
triggerCount += FieldSkillHelper.getFieldSkillTotalValue(FieldSkillType.AtkCount);
|
||||
}
|
||||
triggerCount = Math.max(1, Math.floor(triggerCount));
|
||||
// L5 天赋:概率额外触发 1 次(与羁绊次数加成独立乘算)
|
||||
if (model.talent_extra_trigger_chance > 0 && Math.random() * 100 < model.talent_extra_trigger_chance) {
|
||||
triggerCount += 1;
|
||||
}
|
||||
// L4 天赋:减少触发所需次数(下限 1)
|
||||
const tNumReduce = model.talent_t_num_reduce;
|
||||
|
||||
model.runtime_atking.forEach(atkConfig => {
|
||||
// atk_count 代表已进行的普攻次数。当其余数刚好整除配置阈值时触发。
|
||||
if (model.atk_count > 0 && model.atk_count % atkConfig.t_num === 0) {
|
||||
const tNum = Math.max(1, atkConfig.t_num - tNumReduce);
|
||||
if (model.atk_count > 0 && model.atk_count % tNum === 0
|
||||
&& this.rollTriggerChance(model, SkillTriggerType.Atking, atkConfig)) {
|
||||
for (let i = 0; i < triggerCount; i++) {
|
||||
this.dispatchSingle(atkConfig.s_uuid, model, view, SkillTriggerType.Atking, atkConfig.overrides);
|
||||
}
|
||||
@@ -118,6 +130,7 @@ export class SkillTriggerHelper {
|
||||
/**
|
||||
* 处理受击附加技能
|
||||
* 判定逻辑:依据配置中的 t_num(触发所需受击次数),对比当前的受击累计次数取模判定。
|
||||
* 天赋修正:L4 减少 t_num 阈值(下限 1);L5 按概率额外触发 1 次。
|
||||
*/
|
||||
private static handleAtked(model: HeroAttrsComp, view: HeroViewComp) {
|
||||
if (!model.runtime_atked || model.runtime_atked.length === 0) return;
|
||||
@@ -127,10 +140,18 @@ export class SkillTriggerHelper {
|
||||
triggerCount += FieldSkillHelper.getFieldSkillTotalValue(FieldSkillType.BeAtkCount);
|
||||
}
|
||||
triggerCount = Math.max(1, Math.floor(triggerCount));
|
||||
// L5 天赋:概率额外触发 1 次(与羁绊次数加成独立乘算)
|
||||
if (model.talent_extra_trigger_chance > 0 && Math.random() * 100 < model.talent_extra_trigger_chance) {
|
||||
triggerCount += 1;
|
||||
}
|
||||
// L4 天赋:减少触发所需次数(下限 1)
|
||||
const tNumReduce = model.talent_t_num_reduce;
|
||||
|
||||
model.runtime_atked.forEach(atkConfig => {
|
||||
// atked_count 代表已承受的受击次数。当其余数刚好整除配置阈值时触发。
|
||||
if (model.atked_count > 0 && model.atked_count % atkConfig.t_num === 0) {
|
||||
const tNum = Math.max(1, atkConfig.t_num - tNumReduce);
|
||||
if (model.atked_count > 0 && model.atked_count % tNum === 0
|
||||
&& this.rollTriggerChance(model, SkillTriggerType.Atked, atkConfig)) {
|
||||
for (let i = 0; i < triggerCount; i++) {
|
||||
this.dispatchSingle(atkConfig.s_uuid, model, view, SkillTriggerType.Atked, atkConfig.overrides);
|
||||
}
|
||||
@@ -138,6 +159,31 @@ export class SkillTriggerHelper {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 触发概率判定 + 保底叠加(仅 Atking/Atked 消费)
|
||||
* 次数条件达成后按 t_chance(缺省 100 必触发,兼容存量配置)掷骰;
|
||||
* 未命中且配置 pity_add > 0 时,为该 s_uuid 累积下次概率增量,形成"越不触发越容易触发"的保底体验;
|
||||
* 触发成功后清空叠加,最终概率封顶 100。
|
||||
*
|
||||
* @param model 施法者属性组件(保底缓存挂载于此)
|
||||
* @param type 触发类型(决定读/写哪份保底缓存)
|
||||
* @param config 当前生效的触发条目
|
||||
* @returns 是否通过概率判定
|
||||
*/
|
||||
private static rollTriggerChance(model: HeroAttrsComp, type: SkillTriggerType, config: ResolvedTriggerEntry): boolean {
|
||||
const pityMap = type === SkillTriggerType.Atking ? model.pity_atking : model.pity_atked;
|
||||
const chance = Math.min(100, (config.t_chance ?? 100) + (pityMap[config.s_uuid] ?? 0));
|
||||
if (chance >= 100 || Math.random() * 100 < chance) {
|
||||
pityMap[config.s_uuid] = 0; // 触发成功:清空保底叠加
|
||||
return true;
|
||||
}
|
||||
const pityAdd = config.pity_add ?? 0;
|
||||
if (pityAdd > 0) {
|
||||
pityMap[config.s_uuid] = (pityMap[config.s_uuid] ?? 0) + pityAdd;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 通用的数组型触发器处理(适用于 FStart 等无需额外判定的简单列表触发)
|
||||
*/
|
||||
|
||||