Compare commits
12 Commits
76082d8e1f
...
new2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e1c37eb510 | ||
|
|
2d11246838 | ||
|
|
d759689269 | ||
|
|
e78f4365e7 | ||
|
|
34a62f0a87 | ||
|
|
1988ae5ef1 | ||
|
|
df0dedba75 | ||
|
|
4fee02d82e | ||
|
|
15d14f7d59 | ||
|
|
9579c4f75e | ||
|
|
d54e6ce1d6 | ||
|
|
d06c99e2f1 |
@@ -38,10 +38,13 @@
|
|||||||
"_components": [
|
"_components": [
|
||||||
{
|
{
|
||||||
"__id__": 110
|
"__id__": 110
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__id__": 112
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_prefab": {
|
"_prefab": {
|
||||||
"__id__": 112
|
"__id__": 114
|
||||||
},
|
},
|
||||||
"_lpos": {
|
"_lpos": {
|
||||||
"__type__": "cc.Vec3",
|
"__type__": "cc.Vec3",
|
||||||
@@ -95,7 +98,7 @@
|
|||||||
},
|
},
|
||||||
"_lpos": {
|
"_lpos": {
|
||||||
"__type__": "cc.Vec3",
|
"__type__": "cc.Vec3",
|
||||||
"x": 9.114,
|
"x": 0,
|
||||||
"y": 10,
|
"y": 10,
|
||||||
"z": 0
|
"z": 0
|
||||||
},
|
},
|
||||||
@@ -217,7 +220,7 @@
|
|||||||
"__id__": 17
|
"__id__": 17
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_active": false,
|
"_active": true,
|
||||||
"_components": [
|
"_components": [
|
||||||
{
|
{
|
||||||
"__id__": 25
|
"__id__": 25
|
||||||
@@ -235,7 +238,7 @@
|
|||||||
"_lpos": {
|
"_lpos": {
|
||||||
"__type__": "cc.Vec3",
|
"__type__": "cc.Vec3",
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": -9.738,
|
"y": -7.84,
|
||||||
"z": 0
|
"z": 0
|
||||||
},
|
},
|
||||||
"_lrot": {
|
"_lrot": {
|
||||||
@@ -287,7 +290,7 @@
|
|||||||
},
|
},
|
||||||
"_lpos": {
|
"_lpos": {
|
||||||
"__type__": "cc.Vec3",
|
"__type__": "cc.Vec3",
|
||||||
"x": -35,
|
"x": -20,
|
||||||
"y": 0,
|
"y": 0,
|
||||||
"z": 0
|
"z": 0
|
||||||
},
|
},
|
||||||
@@ -328,8 +331,8 @@
|
|||||||
},
|
},
|
||||||
"_contentSize": {
|
"_contentSize": {
|
||||||
"__type__": "cc.Size",
|
"__type__": "cc.Size",
|
||||||
"width": 70,
|
"width": 40,
|
||||||
"height": 10
|
"height": 5
|
||||||
},
|
},
|
||||||
"_anchorPoint": {
|
"_anchorPoint": {
|
||||||
"__type__": "cc.Vec2",
|
"__type__": "cc.Vec2",
|
||||||
@@ -506,8 +509,8 @@
|
|||||||
},
|
},
|
||||||
"_contentSize": {
|
"_contentSize": {
|
||||||
"__type__": "cc.Size",
|
"__type__": "cc.Size",
|
||||||
"width": 240,
|
"width": 140,
|
||||||
"height": 40
|
"height": 23.333333333333336
|
||||||
},
|
},
|
||||||
"_anchorPoint": {
|
"_anchorPoint": {
|
||||||
"__type__": "cc.Vec2",
|
"__type__": "cc.Vec2",
|
||||||
@@ -631,8 +634,8 @@
|
|||||||
},
|
},
|
||||||
"_contentSize": {
|
"_contentSize": {
|
||||||
"__type__": "cc.Size",
|
"__type__": "cc.Size",
|
||||||
"width": 70,
|
"width": 40,
|
||||||
"height": 10
|
"height": 5
|
||||||
},
|
},
|
||||||
"_anchorPoint": {
|
"_anchorPoint": {
|
||||||
"__type__": "cc.Vec2",
|
"__type__": "cc.Vec2",
|
||||||
@@ -859,7 +862,7 @@
|
|||||||
"_contentSize": {
|
"_contentSize": {
|
||||||
"__type__": "cc.Size",
|
"__type__": "cc.Size",
|
||||||
"width": 40,
|
"width": 40,
|
||||||
"height": 11
|
"height": 9
|
||||||
},
|
},
|
||||||
"_anchorPoint": {
|
"_anchorPoint": {
|
||||||
"__type__": "cc.Vec2",
|
"__type__": "cc.Vec2",
|
||||||
@@ -1037,7 +1040,7 @@
|
|||||||
"_contentSize": {
|
"_contentSize": {
|
||||||
"__type__": "cc.Size",
|
"__type__": "cc.Size",
|
||||||
"width": 140,
|
"width": 140,
|
||||||
"height": 43.333333333333336
|
"height": 36.66666666666667
|
||||||
},
|
},
|
||||||
"_anchorPoint": {
|
"_anchorPoint": {
|
||||||
"__type__": "cc.Vec2",
|
"__type__": "cc.Vec2",
|
||||||
@@ -1162,7 +1165,7 @@
|
|||||||
"_contentSize": {
|
"_contentSize": {
|
||||||
"__type__": "cc.Size",
|
"__type__": "cc.Size",
|
||||||
"width": 40,
|
"width": 40,
|
||||||
"height": 11
|
"height": 9
|
||||||
},
|
},
|
||||||
"_anchorPoint": {
|
"_anchorPoint": {
|
||||||
"__type__": "cc.Vec2",
|
"__type__": "cc.Vec2",
|
||||||
@@ -1277,7 +1280,7 @@
|
|||||||
"__id__": 65
|
"__id__": 65
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_active": true,
|
"_active": false,
|
||||||
"_components": [
|
"_components": [
|
||||||
{
|
{
|
||||||
"__id__": 73
|
"__id__": 73
|
||||||
@@ -1389,7 +1392,7 @@
|
|||||||
"_contentSize": {
|
"_contentSize": {
|
||||||
"__type__": "cc.Size",
|
"__type__": "cc.Size",
|
||||||
"width": 40,
|
"width": 40,
|
||||||
"height": 11
|
"height": 9
|
||||||
},
|
},
|
||||||
"_anchorPoint": {
|
"_anchorPoint": {
|
||||||
"__type__": "cc.Vec2",
|
"__type__": "cc.Vec2",
|
||||||
@@ -1692,7 +1695,7 @@
|
|||||||
"_contentSize": {
|
"_contentSize": {
|
||||||
"__type__": "cc.Size",
|
"__type__": "cc.Size",
|
||||||
"width": 40,
|
"width": 40,
|
||||||
"height": 11
|
"height": 9
|
||||||
},
|
},
|
||||||
"_anchorPoint": {
|
"_anchorPoint": {
|
||||||
"__type__": "cc.Vec2",
|
"__type__": "cc.Vec2",
|
||||||
@@ -2520,8 +2523,8 @@
|
|||||||
},
|
},
|
||||||
"_contentSize": {
|
"_contentSize": {
|
||||||
"__type__": "cc.Size",
|
"__type__": "cc.Size",
|
||||||
"width": 70,
|
"width": 40,
|
||||||
"height": 20
|
"height": 11
|
||||||
},
|
},
|
||||||
"_anchorPoint": {
|
"_anchorPoint": {
|
||||||
"__type__": "cc.Vec2",
|
"__type__": "cc.Vec2",
|
||||||
@@ -2534,6 +2537,33 @@
|
|||||||
"__type__": "cc.CompPrefabInfo",
|
"__type__": "cc.CompPrefabInfo",
|
||||||
"fileId": "cdvV5hAkdEaY6AT6urHKuf"
|
"fileId": "cdvV5hAkdEaY6AT6urHKuf"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"__type__": "c4181/FEWhKbY0D0PLdCyKi",
|
||||||
|
"_name": "",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"node": {
|
||||||
|
"__id__": 1
|
||||||
|
},
|
||||||
|
"_enabled": true,
|
||||||
|
"__prefab": {
|
||||||
|
"__id__": 113
|
||||||
|
},
|
||||||
|
"hpProgressBar": {
|
||||||
|
"__id__": 53
|
||||||
|
},
|
||||||
|
"lvLabel": null,
|
||||||
|
"shieldProgressBar": {
|
||||||
|
"__id__": 77
|
||||||
|
},
|
||||||
|
"hpBarSprite": {
|
||||||
|
"__id__": 36
|
||||||
|
},
|
||||||
|
"_id": "a77QVRkP5NX4b+LyqmW1KJ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.CompPrefabInfo",
|
||||||
|
"fileId": "3eCKBFOJhLHKqcnak/mi3d"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"__type__": "cc.PrefabInfo",
|
"__type__": "cc.PrefabInfo",
|
||||||
"root": {
|
"root": {
|
||||||
|
|||||||
@@ -1398,7 +1398,7 @@
|
|||||||
"_lpos": {
|
"_lpos": {
|
||||||
"__type__": "cc.Vec3",
|
"__type__": "cc.Vec3",
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 21.504,
|
"y": -31.947,
|
||||||
"z": 0
|
"z": 0
|
||||||
},
|
},
|
||||||
"_lrot": {
|
"_lrot": {
|
||||||
@@ -1875,7 +1875,7 @@
|
|||||||
"_lpos": {
|
"_lpos": {
|
||||||
"__type__": "cc.Vec3",
|
"__type__": "cc.Vec3",
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 21.504,
|
"y": -50.813,
|
||||||
"z": 0
|
"z": 0
|
||||||
},
|
},
|
||||||
"_lrot": {
|
"_lrot": {
|
||||||
@@ -2352,7 +2352,7 @@
|
|||||||
"_lpos": {
|
"_lpos": {
|
||||||
"__type__": "cc.Vec3",
|
"__type__": "cc.Vec3",
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 0,
|
"y": -150,
|
||||||
"z": 0
|
"z": 0
|
||||||
},
|
},
|
||||||
"_lrot": {
|
"_lrot": {
|
||||||
@@ -2618,6 +2618,8 @@
|
|||||||
"__id__": 0
|
"__id__": 0
|
||||||
},
|
},
|
||||||
"fileId": "6bE0ieRMBGyYHdxvuJ03FA",
|
"fileId": "6bE0ieRMBGyYHdxvuJ03FA",
|
||||||
|
"instance": null,
|
||||||
|
"targetOverrides": null,
|
||||||
"nestedPrefabInstanceRoots": null
|
"nestedPrefabInstanceRoots": null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -3432,6 +3434,8 @@
|
|||||||
"__id__": 0
|
"__id__": 0
|
||||||
},
|
},
|
||||||
"fileId": "256TxMVzhHQopA08O7v8nq",
|
"fileId": "256TxMVzhHQopA08O7v8nq",
|
||||||
|
"instance": null,
|
||||||
|
"targetOverrides": null,
|
||||||
"nestedPrefabInstanceRoots": null
|
"nestedPrefabInstanceRoots": null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -3471,6 +3475,8 @@
|
|||||||
"__id__": 0
|
"__id__": 0
|
||||||
},
|
},
|
||||||
"fileId": "5dWwAe3IFHRJuoSicXBEs8",
|
"fileId": "5dWwAe3IFHRJuoSicXBEs8",
|
||||||
|
"instance": null,
|
||||||
|
"targetOverrides": null,
|
||||||
"nestedPrefabInstanceRoots": null
|
"nestedPrefabInstanceRoots": null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -3710,6 +3716,8 @@
|
|||||||
"__id__": 0
|
"__id__": 0
|
||||||
},
|
},
|
||||||
"fileId": "b9zLdCeJlE5pPiK++dLgBX",
|
"fileId": "b9zLdCeJlE5pPiK++dLgBX",
|
||||||
|
"instance": null,
|
||||||
|
"targetOverrides": null,
|
||||||
"nestedPrefabInstanceRoots": null
|
"nestedPrefabInstanceRoots": null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -4388,6 +4396,8 @@
|
|||||||
"__id__": 0
|
"__id__": 0
|
||||||
},
|
},
|
||||||
"fileId": "9d2p/canpFGof2O/w8JyTj",
|
"fileId": "9d2p/canpFGof2O/w8JyTj",
|
||||||
|
"instance": null,
|
||||||
|
"targetOverrides": null,
|
||||||
"nestedPrefabInstanceRoots": null
|
"nestedPrefabInstanceRoots": null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -4427,6 +4437,8 @@
|
|||||||
"__id__": 0
|
"__id__": 0
|
||||||
},
|
},
|
||||||
"fileId": "6bkL20JyRDOI6ycVYKl/ie",
|
"fileId": "6bkL20JyRDOI6ycVYKl/ie",
|
||||||
|
"instance": null,
|
||||||
|
"targetOverrides": null,
|
||||||
"nestedPrefabInstanceRoots": null
|
"nestedPrefabInstanceRoots": null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -4495,6 +4507,8 @@
|
|||||||
"__id__": 0
|
"__id__": 0
|
||||||
},
|
},
|
||||||
"fileId": "14GnCNU65BbJPIzLWE/Oiz",
|
"fileId": "14GnCNU65BbJPIzLWE/Oiz",
|
||||||
|
"instance": null,
|
||||||
|
"targetOverrides": null,
|
||||||
"nestedPrefabInstanceRoots": null
|
"nestedPrefabInstanceRoots": null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -7363,6 +7377,8 @@
|
|||||||
"__id__": 0
|
"__id__": 0
|
||||||
},
|
},
|
||||||
"fileId": "c4IqMKgXNExa5w4EAciRxE",
|
"fileId": "c4IqMKgXNExa5w4EAciRxE",
|
||||||
|
"instance": null,
|
||||||
|
"targetOverrides": null,
|
||||||
"nestedPrefabInstanceRoots": null
|
"nestedPrefabInstanceRoots": null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -8202,7 +8218,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"__type__": "cc.Node",
|
"__type__": "cc.Node",
|
||||||
"_name": "LINE2",
|
"_name": "BOSS",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"__editorExtras__": {},
|
"__editorExtras__": {},
|
||||||
"_parent": {
|
"_parent": {
|
||||||
@@ -8273,7 +8289,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"__type__": "cc.CompPrefabInfo",
|
"__type__": "cc.CompPrefabInfo",
|
||||||
"fileId": "ea767WaZRHo4s0bZQfN8zP"
|
"fileId": "3fVB8r2UFAB5QujD6LOw6s"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"__type__": "cc.PrefabInfo",
|
"__type__": "cc.PrefabInfo",
|
||||||
@@ -8283,14 +8299,14 @@
|
|||||||
"asset": {
|
"asset": {
|
||||||
"__id__": 0
|
"__id__": 0
|
||||||
},
|
},
|
||||||
"fileId": "60UdPtJn9ALLHCveLwT1bT",
|
"fileId": "f4iFaXCXNKorfGJFH32POa",
|
||||||
"instance": null,
|
"instance": null,
|
||||||
"targetOverrides": null,
|
"targetOverrides": null,
|
||||||
"nestedPrefabInstanceRoots": null
|
"nestedPrefabInstanceRoots": null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"__type__": "cc.Node",
|
"__type__": "cc.Node",
|
||||||
"_name": "HERO",
|
"_name": "MON",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"__editorExtras__": {},
|
"__editorExtras__": {},
|
||||||
"_parent": {
|
"_parent": {
|
||||||
@@ -8361,7 +8377,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"__type__": "cc.CompPrefabInfo",
|
"__type__": "cc.CompPrefabInfo",
|
||||||
"fileId": "dasmpuTSVM7qA3QW9/3XjQ"
|
"fileId": "ea767WaZRHo4s0bZQfN8zP"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"__type__": "cc.PrefabInfo",
|
"__type__": "cc.PrefabInfo",
|
||||||
@@ -8371,14 +8387,14 @@
|
|||||||
"asset": {
|
"asset": {
|
||||||
"__id__": 0
|
"__id__": 0
|
||||||
},
|
},
|
||||||
"fileId": "eaiasKNEFO6qvodGhL4a0b",
|
"fileId": "60UdPtJn9ALLHCveLwT1bT",
|
||||||
"instance": null,
|
"instance": null,
|
||||||
"targetOverrides": null,
|
"targetOverrides": null,
|
||||||
"nestedPrefabInstanceRoots": null
|
"nestedPrefabInstanceRoots": null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"__type__": "cc.Node",
|
"__type__": "cc.Node",
|
||||||
"_name": "LINE1",
|
"_name": "HERO",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"__editorExtras__": {},
|
"__editorExtras__": {},
|
||||||
"_parent": {
|
"_parent": {
|
||||||
@@ -8449,7 +8465,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"__type__": "cc.CompPrefabInfo",
|
"__type__": "cc.CompPrefabInfo",
|
||||||
"fileId": "b8C5CFg5lM4oUHMeSrc/sV"
|
"fileId": "dasmpuTSVM7qA3QW9/3XjQ"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"__type__": "cc.PrefabInfo",
|
"__type__": "cc.PrefabInfo",
|
||||||
@@ -8459,14 +8475,14 @@
|
|||||||
"asset": {
|
"asset": {
|
||||||
"__id__": 0
|
"__id__": 0
|
||||||
},
|
},
|
||||||
"fileId": "4dcNJaDM1CLI9q3fIqHZ/U",
|
"fileId": "eaiasKNEFO6qvodGhL4a0b",
|
||||||
"instance": null,
|
"instance": null,
|
||||||
"targetOverrides": null,
|
"targetOverrides": null,
|
||||||
"nestedPrefabInstanceRoots": null
|
"nestedPrefabInstanceRoots": null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"__type__": "cc.Node",
|
"__type__": "cc.Node",
|
||||||
"_name": "LINE3",
|
"_name": "LINE1",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"__editorExtras__": {},
|
"__editorExtras__": {},
|
||||||
"_parent": {
|
"_parent": {
|
||||||
@@ -8537,7 +8553,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"__type__": "cc.CompPrefabInfo",
|
"__type__": "cc.CompPrefabInfo",
|
||||||
"fileId": "a5LMIIbHtOKK10K5do5dSQ"
|
"fileId": "b8C5CFg5lM4oUHMeSrc/sV"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"__type__": "cc.PrefabInfo",
|
"__type__": "cc.PrefabInfo",
|
||||||
@@ -8547,14 +8563,14 @@
|
|||||||
"asset": {
|
"asset": {
|
||||||
"__id__": 0
|
"__id__": 0
|
||||||
},
|
},
|
||||||
"fileId": "a6CBSkrzZIurlX0D/HzXDp",
|
"fileId": "4dcNJaDM1CLI9q3fIqHZ/U",
|
||||||
"instance": null,
|
"instance": null,
|
||||||
"targetOverrides": null,
|
"targetOverrides": null,
|
||||||
"nestedPrefabInstanceRoots": null
|
"nestedPrefabInstanceRoots": null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"__type__": "cc.Node",
|
"__type__": "cc.Node",
|
||||||
"_name": "BOOS",
|
"_name": "LINE3",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"__editorExtras__": {},
|
"__editorExtras__": {},
|
||||||
"_parent": {
|
"_parent": {
|
||||||
@@ -8625,7 +8641,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"__type__": "cc.CompPrefabInfo",
|
"__type__": "cc.CompPrefabInfo",
|
||||||
"fileId": "3fVB8r2UFAB5QujD6LOw6s"
|
"fileId": "a5LMIIbHtOKK10K5do5dSQ"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"__type__": "cc.PrefabInfo",
|
"__type__": "cc.PrefabInfo",
|
||||||
@@ -8635,7 +8651,7 @@
|
|||||||
"asset": {
|
"asset": {
|
||||||
"__id__": 0
|
"__id__": 0
|
||||||
},
|
},
|
||||||
"fileId": "f4iFaXCXNKorfGJFH32POa",
|
"fileId": "a6CBSkrzZIurlX0D/HzXDp",
|
||||||
"instance": null,
|
"instance": null,
|
||||||
"targetOverrides": null,
|
"targetOverrides": null,
|
||||||
"nestedPrefabInstanceRoots": null
|
"nestedPrefabInstanceRoots": null
|
||||||
@@ -8893,6 +8909,8 @@
|
|||||||
"__id__": 0
|
"__id__": 0
|
||||||
},
|
},
|
||||||
"fileId": "35iAcUUYpE8akTtTCX1ITo",
|
"fileId": "35iAcUUYpE8akTtTCX1ITo",
|
||||||
|
"instance": null,
|
||||||
|
"targetOverrides": null,
|
||||||
"nestedPrefabInstanceRoots": null
|
"nestedPrefabInstanceRoots": null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -8932,6 +8950,8 @@
|
|||||||
"__id__": 0
|
"__id__": 0
|
||||||
},
|
},
|
||||||
"fileId": "68Q5vEQWBINrggngtTZ7wh",
|
"fileId": "68Q5vEQWBINrggngtTZ7wh",
|
||||||
|
"instance": null,
|
||||||
|
"targetOverrides": null,
|
||||||
"nestedPrefabInstanceRoots": null
|
"nestedPrefabInstanceRoots": null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"speed": 1,
|
"speed": 1,
|
||||||
"wrapMode": 1,
|
"wrapMode": 1,
|
||||||
"enableTrsBlending": false,
|
"enableTrsBlending": false,
|
||||||
"_duration": 0.20833333333333334,
|
"_duration": 0.125,
|
||||||
"_hash": 500763545,
|
"_hash": 500763545,
|
||||||
"_tracks": [
|
"_tracks": [
|
||||||
{
|
{
|
||||||
@@ -21,24 +21,24 @@
|
|||||||
"_exoticAnimation": null,
|
"_exoticAnimation": null,
|
||||||
"_events": [
|
"_events": [
|
||||||
{
|
{
|
||||||
"frame": 0.3333333333333333,
|
"frame": 0.08333333333333333,
|
||||||
"func": "",
|
"func": "",
|
||||||
"params": []
|
"params": []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"frame": 0.3333333333333333,
|
"frame": 0.08333333333333333,
|
||||||
"func": "atk",
|
"func": "atk",
|
||||||
"params": []
|
"params": []
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_embeddedPlayers": [],
|
"_embeddedPlayers": [],
|
||||||
"_additiveSettings": {
|
"_additiveSettings": {
|
||||||
"__id__": 7
|
"__id__": 12
|
||||||
},
|
},
|
||||||
"_auxiliaryCurveEntries": []
|
"_auxiliaryCurveEntries": []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"__type__": "cc.animation.ObjectTrack",
|
"__type__": "cc.animation.VectorTrack",
|
||||||
"_binding": {
|
"_binding": {
|
||||||
"__type__": "cc.animation.TrackBinding",
|
"__type__": "cc.animation.TrackBinding",
|
||||||
"path": {
|
"path": {
|
||||||
@@ -46,9 +46,21 @@
|
|||||||
},
|
},
|
||||||
"proxy": null
|
"proxy": null
|
||||||
},
|
},
|
||||||
"_channel": {
|
"_channels": [
|
||||||
"__id__": 5
|
{
|
||||||
}
|
"__id__": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__id__": 6
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__id__": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__id__": 10
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"_nComponents": 3
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"__type__": "cc.animation.TrackPath",
|
"__type__": "cc.animation.TrackPath",
|
||||||
@@ -56,10 +68,7 @@
|
|||||||
{
|
{
|
||||||
"__id__": 3
|
"__id__": 3
|
||||||
},
|
},
|
||||||
{
|
"scale"
|
||||||
"__id__": 4
|
|
||||||
},
|
|
||||||
"spriteFrame"
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -67,46 +76,185 @@
|
|||||||
"path": "Node"
|
"path": "Node"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"__type__": "cc.animation.ComponentPath",
|
"__type__": "cc.animation.Channel",
|
||||||
"component": "cc.Sprite"
|
"_curve": {
|
||||||
|
"__id__": 5
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.RealCurve",
|
||||||
|
"_times": [
|
||||||
|
0,
|
||||||
|
0.08333333333333333,
|
||||||
|
0.125
|
||||||
|
],
|
||||||
|
"_values": [
|
||||||
|
{
|
||||||
|
"__type__": "cc.RealKeyframeValue",
|
||||||
|
"interpolationMode": 0,
|
||||||
|
"tangentWeightMode": 0,
|
||||||
|
"value": 1.2999999523162842,
|
||||||
|
"rightTangent": 0,
|
||||||
|
"rightTangentWeight": 1,
|
||||||
|
"leftTangent": 0,
|
||||||
|
"leftTangentWeight": 1,
|
||||||
|
"easingMethod": 0,
|
||||||
|
"__editorExtras__": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.RealKeyframeValue",
|
||||||
|
"interpolationMode": 0,
|
||||||
|
"tangentWeightMode": 0,
|
||||||
|
"value": 1.2999999523162842,
|
||||||
|
"rightTangent": 0,
|
||||||
|
"rightTangentWeight": 1,
|
||||||
|
"leftTangent": 0,
|
||||||
|
"leftTangentWeight": 1,
|
||||||
|
"easingMethod": 0,
|
||||||
|
"__editorExtras__": {
|
||||||
|
"tangentMode": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.RealKeyframeValue",
|
||||||
|
"interpolationMode": 0,
|
||||||
|
"tangentWeightMode": 0,
|
||||||
|
"value": 1.2999999523162842,
|
||||||
|
"rightTangent": 0,
|
||||||
|
"rightTangentWeight": 1,
|
||||||
|
"leftTangent": 0,
|
||||||
|
"leftTangentWeight": 1,
|
||||||
|
"easingMethod": 0,
|
||||||
|
"__editorExtras__": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"preExtrapolation": 1,
|
||||||
|
"postExtrapolation": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"__type__": "cc.animation.Channel",
|
"__type__": "cc.animation.Channel",
|
||||||
"_curve": {
|
"_curve": {
|
||||||
"__id__": 6
|
"__id__": 7
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"__type__": "cc.ObjectCurve",
|
"__type__": "cc.RealCurve",
|
||||||
"_times": [
|
"_times": [
|
||||||
0,
|
0,
|
||||||
0.041666666666666664,
|
|
||||||
0.08333333333333333,
|
0.08333333333333333,
|
||||||
0.125,
|
0.125
|
||||||
0.16666666666666666
|
|
||||||
],
|
],
|
||||||
"_values": [
|
"_values": [
|
||||||
{
|
{
|
||||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@c9de1",
|
"__type__": "cc.RealKeyframeValue",
|
||||||
"__expectedType__": "cc.SpriteFrame"
|
"interpolationMode": 0,
|
||||||
|
"tangentWeightMode": 0,
|
||||||
|
"value": 1.100000023841858,
|
||||||
|
"rightTangent": 0,
|
||||||
|
"rightTangentWeight": 1,
|
||||||
|
"leftTangent": 0,
|
||||||
|
"leftTangentWeight": 1,
|
||||||
|
"easingMethod": 0,
|
||||||
|
"__editorExtras__": null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@3c745",
|
"__type__": "cc.RealKeyframeValue",
|
||||||
"__expectedType__": "cc.SpriteFrame"
|
"interpolationMode": 0,
|
||||||
|
"tangentWeightMode": 0,
|
||||||
|
"value": 1.100000023841858,
|
||||||
|
"rightTangent": 0,
|
||||||
|
"rightTangentWeight": 1,
|
||||||
|
"leftTangent": 0,
|
||||||
|
"leftTangentWeight": 1,
|
||||||
|
"easingMethod": 0,
|
||||||
|
"__editorExtras__": {
|
||||||
|
"tangentMode": 0
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@1ebb0",
|
"__type__": "cc.RealKeyframeValue",
|
||||||
"__expectedType__": "cc.SpriteFrame"
|
"interpolationMode": 0,
|
||||||
},
|
"tangentWeightMode": 0,
|
||||||
{
|
"value": 1.100000023841858,
|
||||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@0e5a2",
|
"rightTangent": 0,
|
||||||
"__expectedType__": "cc.SpriteFrame"
|
"rightTangentWeight": 1,
|
||||||
},
|
"leftTangent": 0,
|
||||||
{
|
"leftTangentWeight": 1,
|
||||||
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@360bd",
|
"easingMethod": 0,
|
||||||
"__expectedType__": "cc.SpriteFrame"
|
"__editorExtras__": null
|
||||||
}
|
}
|
||||||
]
|
],
|
||||||
|
"preExtrapolation": 1,
|
||||||
|
"postExtrapolation": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.animation.Channel",
|
||||||
|
"_curve": {
|
||||||
|
"__id__": 9
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.RealCurve",
|
||||||
|
"_times": [
|
||||||
|
0,
|
||||||
|
0.08333333333333333,
|
||||||
|
0.125
|
||||||
|
],
|
||||||
|
"_values": [
|
||||||
|
{
|
||||||
|
"__type__": "cc.RealKeyframeValue",
|
||||||
|
"interpolationMode": 0,
|
||||||
|
"tangentWeightMode": 0,
|
||||||
|
"value": 1,
|
||||||
|
"rightTangent": 0,
|
||||||
|
"rightTangentWeight": 1,
|
||||||
|
"leftTangent": 0,
|
||||||
|
"leftTangentWeight": 1,
|
||||||
|
"easingMethod": 0,
|
||||||
|
"__editorExtras__": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.RealKeyframeValue",
|
||||||
|
"interpolationMode": 0,
|
||||||
|
"tangentWeightMode": 0,
|
||||||
|
"value": 1,
|
||||||
|
"rightTangent": 0,
|
||||||
|
"rightTangentWeight": 1,
|
||||||
|
"leftTangent": 0,
|
||||||
|
"leftTangentWeight": 1,
|
||||||
|
"easingMethod": 0,
|
||||||
|
"__editorExtras__": {
|
||||||
|
"tangentMode": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.RealKeyframeValue",
|
||||||
|
"interpolationMode": 0,
|
||||||
|
"tangentWeightMode": 0,
|
||||||
|
"value": 1,
|
||||||
|
"rightTangent": 0,
|
||||||
|
"rightTangentWeight": 1,
|
||||||
|
"leftTangent": 0,
|
||||||
|
"leftTangentWeight": 1,
|
||||||
|
"easingMethod": 0,
|
||||||
|
"__editorExtras__": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"preExtrapolation": 1,
|
||||||
|
"postExtrapolation": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.animation.Channel",
|
||||||
|
"_curve": {
|
||||||
|
"__id__": 11
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.RealCurve",
|
||||||
|
"_times": [],
|
||||||
|
"_values": [],
|
||||||
|
"preExtrapolation": 1,
|
||||||
|
"postExtrapolation": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"__type__": "cc.AnimationClipAdditiveSettings",
|
"__type__": "cc.AnimationClipAdditiveSettings",
|
||||||
|
|||||||
116
assets/resources/game/skill/anm/atk/atk02.anim
Normal file
116
assets/resources/game/skill/anm/atk/atk02.anim
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"__type__": "cc.AnimationClip",
|
||||||
|
"_name": "atk01",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"__editorExtras__": {
|
||||||
|
"embeddedPlayerGroups": []
|
||||||
|
},
|
||||||
|
"_native": "",
|
||||||
|
"sample": 24,
|
||||||
|
"speed": 1,
|
||||||
|
"wrapMode": 1,
|
||||||
|
"enableTrsBlending": false,
|
||||||
|
"_duration": 0.20833333333333334,
|
||||||
|
"_hash": 500763545,
|
||||||
|
"_tracks": [
|
||||||
|
{
|
||||||
|
"__id__": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"_exoticAnimation": null,
|
||||||
|
"_events": [
|
||||||
|
{
|
||||||
|
"frame": 0.08333333333333333,
|
||||||
|
"func": "",
|
||||||
|
"params": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"frame": 0.08333333333333333,
|
||||||
|
"func": "atk",
|
||||||
|
"params": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"_embeddedPlayers": [],
|
||||||
|
"_additiveSettings": {
|
||||||
|
"__id__": 7
|
||||||
|
},
|
||||||
|
"_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.041666666666666664,
|
||||||
|
0.08333333333333333,
|
||||||
|
0.125,
|
||||||
|
0.16666666666666666
|
||||||
|
],
|
||||||
|
"_values": [
|
||||||
|
{
|
||||||
|
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@c9de1",
|
||||||
|
"__expectedType__": "cc.SpriteFrame"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@3c745",
|
||||||
|
"__expectedType__": "cc.SpriteFrame"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@1ebb0",
|
||||||
|
"__expectedType__": "cc.SpriteFrame"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@0e5a2",
|
||||||
|
"__expectedType__": "cc.SpriteFrame"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@360bd",
|
||||||
|
"__expectedType__": "cc.SpriteFrame"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.AnimationClipAdditiveSettings",
|
||||||
|
"enabled": false,
|
||||||
|
"refClip": null
|
||||||
|
}
|
||||||
|
]
|
||||||
13
assets/resources/game/skill/anm/atk/atk02.anim.meta
Normal file
13
assets/resources/game/skill/anm/atk/atk02.anim.meta
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"ver": "2.0.3",
|
||||||
|
"importer": "animation-clip",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "6b9c9f74-0168-4b57-824d-bfcc2cd1785d",
|
||||||
|
"files": [
|
||||||
|
".cconb"
|
||||||
|
],
|
||||||
|
"subMetas": {},
|
||||||
|
"userData": {
|
||||||
|
"name": "atk02"
|
||||||
|
}
|
||||||
|
}
|
||||||
116
assets/resources/game/skill/anm/atk/atk03.anim
Normal file
116
assets/resources/game/skill/anm/atk/atk03.anim
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"__type__": "cc.AnimationClip",
|
||||||
|
"_name": "atk01",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"__editorExtras__": {
|
||||||
|
"embeddedPlayerGroups": []
|
||||||
|
},
|
||||||
|
"_native": "",
|
||||||
|
"sample": 24,
|
||||||
|
"speed": 1,
|
||||||
|
"wrapMode": 1,
|
||||||
|
"enableTrsBlending": false,
|
||||||
|
"_duration": 0.20833333333333334,
|
||||||
|
"_hash": 500763545,
|
||||||
|
"_tracks": [
|
||||||
|
{
|
||||||
|
"__id__": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"_exoticAnimation": null,
|
||||||
|
"_events": [
|
||||||
|
{
|
||||||
|
"frame": 0.08333333333333333,
|
||||||
|
"func": "",
|
||||||
|
"params": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"frame": 0.08333333333333333,
|
||||||
|
"func": "atk",
|
||||||
|
"params": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"_embeddedPlayers": [],
|
||||||
|
"_additiveSettings": {
|
||||||
|
"__id__": 7
|
||||||
|
},
|
||||||
|
"_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.041666666666666664,
|
||||||
|
0.08333333333333333,
|
||||||
|
0.125,
|
||||||
|
0.16666666666666666
|
||||||
|
],
|
||||||
|
"_values": [
|
||||||
|
{
|
||||||
|
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@c9de1",
|
||||||
|
"__expectedType__": "cc.SpriteFrame"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@3c745",
|
||||||
|
"__expectedType__": "cc.SpriteFrame"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@1ebb0",
|
||||||
|
"__expectedType__": "cc.SpriteFrame"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@0e5a2",
|
||||||
|
"__expectedType__": "cc.SpriteFrame"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@360bd",
|
||||||
|
"__expectedType__": "cc.SpriteFrame"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.AnimationClipAdditiveSettings",
|
||||||
|
"enabled": false,
|
||||||
|
"refClip": null
|
||||||
|
}
|
||||||
|
]
|
||||||
13
assets/resources/game/skill/anm/atk/atk03.anim.meta
Normal file
13
assets/resources/game/skill/anm/atk/atk03.anim.meta
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"ver": "2.0.3",
|
||||||
|
"importer": "animation-clip",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "26398731-5541-44ca-b2b7-4947dc9bf7f7",
|
||||||
|
"files": [
|
||||||
|
".cconb"
|
||||||
|
],
|
||||||
|
"subMetas": {},
|
||||||
|
"userData": {
|
||||||
|
"name": "atk03"
|
||||||
|
}
|
||||||
|
}
|
||||||
116
assets/resources/game/skill/anm/atk/atk04.anim
Normal file
116
assets/resources/game/skill/anm/atk/atk04.anim
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"__type__": "cc.AnimationClip",
|
||||||
|
"_name": "atk01",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"__editorExtras__": {
|
||||||
|
"embeddedPlayerGroups": []
|
||||||
|
},
|
||||||
|
"_native": "",
|
||||||
|
"sample": 24,
|
||||||
|
"speed": 1,
|
||||||
|
"wrapMode": 1,
|
||||||
|
"enableTrsBlending": false,
|
||||||
|
"_duration": 0.20833333333333334,
|
||||||
|
"_hash": 500763545,
|
||||||
|
"_tracks": [
|
||||||
|
{
|
||||||
|
"__id__": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"_exoticAnimation": null,
|
||||||
|
"_events": [
|
||||||
|
{
|
||||||
|
"frame": 0.08333333333333333,
|
||||||
|
"func": "",
|
||||||
|
"params": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"frame": 0.08333333333333333,
|
||||||
|
"func": "atk",
|
||||||
|
"params": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"_embeddedPlayers": [],
|
||||||
|
"_additiveSettings": {
|
||||||
|
"__id__": 7
|
||||||
|
},
|
||||||
|
"_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.041666666666666664,
|
||||||
|
0.08333333333333333,
|
||||||
|
0.125,
|
||||||
|
0.16666666666666666
|
||||||
|
],
|
||||||
|
"_values": [
|
||||||
|
{
|
||||||
|
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@c9de1",
|
||||||
|
"__expectedType__": "cc.SpriteFrame"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@3c745",
|
||||||
|
"__expectedType__": "cc.SpriteFrame"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@1ebb0",
|
||||||
|
"__expectedType__": "cc.SpriteFrame"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@0e5a2",
|
||||||
|
"__expectedType__": "cc.SpriteFrame"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@360bd",
|
||||||
|
"__expectedType__": "cc.SpriteFrame"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.AnimationClipAdditiveSettings",
|
||||||
|
"enabled": false,
|
||||||
|
"refClip": null
|
||||||
|
}
|
||||||
|
]
|
||||||
13
assets/resources/game/skill/anm/atk/atk04.anim.meta
Normal file
13
assets/resources/game/skill/anm/atk/atk04.anim.meta
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"ver": "2.0.3",
|
||||||
|
"importer": "animation-clip",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "0ad94bf2-3b2d-4f80-8500-68c5e33e2ed1",
|
||||||
|
"files": [
|
||||||
|
".cconb"
|
||||||
|
],
|
||||||
|
"subMetas": {},
|
||||||
|
"userData": {
|
||||||
|
"name": "atk04"
|
||||||
|
}
|
||||||
|
}
|
||||||
116
assets/resources/game/skill/anm/atk/atk05.anim
Normal file
116
assets/resources/game/skill/anm/atk/atk05.anim
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"__type__": "cc.AnimationClip",
|
||||||
|
"_name": "atk01",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"__editorExtras__": {
|
||||||
|
"embeddedPlayerGroups": []
|
||||||
|
},
|
||||||
|
"_native": "",
|
||||||
|
"sample": 24,
|
||||||
|
"speed": 1,
|
||||||
|
"wrapMode": 1,
|
||||||
|
"enableTrsBlending": false,
|
||||||
|
"_duration": 0.20833333333333334,
|
||||||
|
"_hash": 500763545,
|
||||||
|
"_tracks": [
|
||||||
|
{
|
||||||
|
"__id__": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"_exoticAnimation": null,
|
||||||
|
"_events": [
|
||||||
|
{
|
||||||
|
"frame": 0.08333333333333333,
|
||||||
|
"func": "",
|
||||||
|
"params": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"frame": 0.08333333333333333,
|
||||||
|
"func": "atk",
|
||||||
|
"params": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"_embeddedPlayers": [],
|
||||||
|
"_additiveSettings": {
|
||||||
|
"__id__": 7
|
||||||
|
},
|
||||||
|
"_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.041666666666666664,
|
||||||
|
0.08333333333333333,
|
||||||
|
0.125,
|
||||||
|
0.16666666666666666
|
||||||
|
],
|
||||||
|
"_values": [
|
||||||
|
{
|
||||||
|
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@c9de1",
|
||||||
|
"__expectedType__": "cc.SpriteFrame"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@3c745",
|
||||||
|
"__expectedType__": "cc.SpriteFrame"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@1ebb0",
|
||||||
|
"__expectedType__": "cc.SpriteFrame"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@0e5a2",
|
||||||
|
"__expectedType__": "cc.SpriteFrame"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__uuid__": "2842dc10-d89e-4ff6-8a11-6d09bf48cf20@360bd",
|
||||||
|
"__expectedType__": "cc.SpriteFrame"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.AnimationClipAdditiveSettings",
|
||||||
|
"enabled": false,
|
||||||
|
"refClip": null
|
||||||
|
}
|
||||||
|
]
|
||||||
13
assets/resources/game/skill/anm/atk/atk05.anim.meta
Normal file
13
assets/resources/game/skill/anm/atk/atk05.anim.meta
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"ver": "2.0.3",
|
||||||
|
"importer": "animation-clip",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "ba0a95bf-2ea1-4d27-9c4f-cbd970ca558c",
|
||||||
|
"files": [
|
||||||
|
".cconb"
|
||||||
|
],
|
||||||
|
"subMetas": {},
|
||||||
|
"userData": {
|
||||||
|
"name": "atk05"
|
||||||
|
}
|
||||||
|
}
|
||||||
373
assets/resources/game/skill/atk/atk1.prefab
Normal file
373
assets/resources/game/skill/atk/atk1.prefab
Normal file
@@ -0,0 +1,373 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"__type__": "cc.Prefab",
|
||||||
|
"_name": "atk1",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"__editorExtras__": {},
|
||||||
|
"_native": "",
|
||||||
|
"data": {
|
||||||
|
"__id__": 1
|
||||||
|
},
|
||||||
|
"optimizationPolicy": 0,
|
||||||
|
"persistent": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.Node",
|
||||||
|
"_name": "atk1",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"__editorExtras__": {},
|
||||||
|
"_parent": null,
|
||||||
|
"_children": [
|
||||||
|
{
|
||||||
|
"__id__": 2
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"_active": true,
|
||||||
|
"_components": [
|
||||||
|
{
|
||||||
|
"__id__": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__id__": 10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__id__": 12
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__id__": 14
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__id__": 16
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"_prefab": {
|
||||||
|
"__id__": 18
|
||||||
|
},
|
||||||
|
"_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": 1.3,
|
||||||
|
"y": 1.1,
|
||||||
|
"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": 95,
|
||||||
|
"height": 96
|
||||||
|
},
|
||||||
|
"_anchorPoint": {
|
||||||
|
"__type__": "cc.Vec2",
|
||||||
|
"x": 0.5,
|
||||||
|
"y": 0.5
|
||||||
|
},
|
||||||
|
"_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": null,
|
||||||
|
"_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.UITransform",
|
||||||
|
"_name": "",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"__editorExtras__": {},
|
||||||
|
"node": {
|
||||||
|
"__id__": 1
|
||||||
|
},
|
||||||
|
"_enabled": true,
|
||||||
|
"__prefab": {
|
||||||
|
"__id__": 9
|
||||||
|
},
|
||||||
|
"_contentSize": {
|
||||||
|
"__type__": "cc.Size",
|
||||||
|
"width": 120,
|
||||||
|
"height": 120
|
||||||
|
},
|
||||||
|
"_anchorPoint": {
|
||||||
|
"__type__": "cc.Vec2",
|
||||||
|
"x": 0.5,
|
||||||
|
"y": 0.5
|
||||||
|
},
|
||||||
|
"_id": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.CompPrefabInfo",
|
||||||
|
"fileId": "63NP9yq3hEUKD/OZZZ5t7x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "57aabs7TE1J5obTAZczc+64",
|
||||||
|
"_name": "",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"__editorExtras__": {},
|
||||||
|
"node": {
|
||||||
|
"__id__": 1
|
||||||
|
},
|
||||||
|
"_enabled": true,
|
||||||
|
"__prefab": {
|
||||||
|
"__id__": 11
|
||||||
|
},
|
||||||
|
"atk_x": 20,
|
||||||
|
"atk_y": 40,
|
||||||
|
"runType": 2,
|
||||||
|
"endType": 0,
|
||||||
|
"speed": 720,
|
||||||
|
"time": 0,
|
||||||
|
"distance": 100,
|
||||||
|
"_id": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.CompPrefabInfo",
|
||||||
|
"fileId": "35nW0iQNBH2bqkWAr3MVkQ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.RigidBody2D",
|
||||||
|
"_name": "",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"__editorExtras__": {},
|
||||||
|
"node": {
|
||||||
|
"__id__": 1
|
||||||
|
},
|
||||||
|
"_enabled": true,
|
||||||
|
"__prefab": {
|
||||||
|
"__id__": 13
|
||||||
|
},
|
||||||
|
"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__": 15
|
||||||
|
},
|
||||||
|
"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": 120,
|
||||||
|
"height": 120
|
||||||
|
},
|
||||||
|
"_id": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.CompPrefabInfo",
|
||||||
|
"fileId": "ebw5mObxNGGKxnJXDgX5gl"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.Animation",
|
||||||
|
"_name": "",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"__editorExtras__": {},
|
||||||
|
"node": {
|
||||||
|
"__id__": 1
|
||||||
|
},
|
||||||
|
"_enabled": true,
|
||||||
|
"__prefab": {
|
||||||
|
"__id__": 17
|
||||||
|
},
|
||||||
|
"playOnLoad": true,
|
||||||
|
"_clips": [
|
||||||
|
{
|
||||||
|
"__uuid__": "45017156-064b-43f2-a24e-176b6ce17ad8",
|
||||||
|
"__expectedType__": "cc.AnimationClip"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"_defaultClip": {
|
||||||
|
"__uuid__": "45017156-064b-43f2-a24e-176b6ce17ad8",
|
||||||
|
"__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
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -8,6 +8,6 @@
|
|||||||
],
|
],
|
||||||
"subMetas": {},
|
"subMetas": {},
|
||||||
"userData": {
|
"userData": {
|
||||||
"syncNodeName": "atk"
|
"syncNodeName": "atk1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
"__type__": "cc.Prefab",
|
"__type__": "cc.Prefab",
|
||||||
"_name": "atk",
|
"_name": "atk2",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"__editorExtras__": {},
|
"__editorExtras__": {},
|
||||||
"_native": "",
|
"_native": "",
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"__type__": "cc.Node",
|
"__type__": "cc.Node",
|
||||||
"_name": "atk",
|
"_name": "atk2",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"__editorExtras__": {},
|
"__editorExtras__": {},
|
||||||
"_parent": null,
|
"_parent": null,
|
||||||
@@ -254,7 +254,7 @@
|
|||||||
"atk_x": 20,
|
"atk_x": 20,
|
||||||
"atk_y": 40,
|
"atk_y": 40,
|
||||||
"runType": 2,
|
"runType": 2,
|
||||||
"endType": 2,
|
"endType": 0,
|
||||||
"speed": 720,
|
"speed": 720,
|
||||||
"time": 0,
|
"time": 0,
|
||||||
"_id": ""
|
"_id": ""
|
||||||
@@ -318,7 +318,7 @@
|
|||||||
"_offset": {
|
"_offset": {
|
||||||
"__type__": "cc.Vec2",
|
"__type__": "cc.Vec2",
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": -0.1
|
"y": 0
|
||||||
},
|
},
|
||||||
"_size": {
|
"_size": {
|
||||||
"__type__": "cc.Size",
|
"__type__": "cc.Size",
|
||||||
@@ -343,15 +343,15 @@
|
|||||||
"__prefab": {
|
"__prefab": {
|
||||||
"__id__": 17
|
"__id__": 17
|
||||||
},
|
},
|
||||||
"playOnLoad": false,
|
"playOnLoad": true,
|
||||||
"_clips": [
|
"_clips": [
|
||||||
{
|
{
|
||||||
"__uuid__": "45017156-064b-43f2-a24e-176b6ce17ad8",
|
"__uuid__": "6b9c9f74-0168-4b57-824d-bfcc2cd1785d",
|
||||||
"__expectedType__": "cc.AnimationClip"
|
"__expectedType__": "cc.AnimationClip"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_defaultClip": {
|
"_defaultClip": {
|
||||||
"__uuid__": "45017156-064b-43f2-a24e-176b6ce17ad8",
|
"__uuid__": "6b9c9f74-0168-4b57-824d-bfcc2cd1785d",
|
||||||
"__expectedType__": "cc.AnimationClip"
|
"__expectedType__": "cc.AnimationClip"
|
||||||
},
|
},
|
||||||
"_id": ""
|
"_id": ""
|
||||||
13
assets/resources/game/skill/atk/atk2.prefab.meta
Normal file
13
assets/resources/game/skill/atk/atk2.prefab.meta
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.1.50",
|
||||||
|
"importer": "prefab",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "ff6e9a75-b1b9-448e-9cbd-d30de98fd21b",
|
||||||
|
"files": [
|
||||||
|
".json"
|
||||||
|
],
|
||||||
|
"subMetas": {},
|
||||||
|
"userData": {
|
||||||
|
"syncNodeName": "atk2"
|
||||||
|
}
|
||||||
|
}
|
||||||
375
assets/resources/game/skill/atk/atk3.prefab
Normal file
375
assets/resources/game/skill/atk/atk3.prefab
Normal file
@@ -0,0 +1,375 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"__type__": "cc.Prefab",
|
||||||
|
"_name": "atk3",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"__editorExtras__": {},
|
||||||
|
"_native": "",
|
||||||
|
"data": {
|
||||||
|
"__id__": 1
|
||||||
|
},
|
||||||
|
"optimizationPolicy": 0,
|
||||||
|
"persistent": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.Node",
|
||||||
|
"_name": "atk3",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"__editorExtras__": {},
|
||||||
|
"_parent": null,
|
||||||
|
"_children": [
|
||||||
|
{
|
||||||
|
"__id__": 2
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"_active": true,
|
||||||
|
"_components": [
|
||||||
|
{
|
||||||
|
"__id__": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__id__": 10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__id__": 12
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__id__": 14
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__id__": 16
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"_prefab": {
|
||||||
|
"__id__": 18
|
||||||
|
},
|
||||||
|
"_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": 1.3,
|
||||||
|
"y": 1.1,
|
||||||
|
"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": 95,
|
||||||
|
"height": 96
|
||||||
|
},
|
||||||
|
"_anchorPoint": {
|
||||||
|
"__type__": "cc.Vec2",
|
||||||
|
"x": 0.5,
|
||||||
|
"y": 0.5
|
||||||
|
},
|
||||||
|
"_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@3c745",
|
||||||
|
"__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.UITransform",
|
||||||
|
"_name": "",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"__editorExtras__": {},
|
||||||
|
"node": {
|
||||||
|
"__id__": 1
|
||||||
|
},
|
||||||
|
"_enabled": true,
|
||||||
|
"__prefab": {
|
||||||
|
"__id__": 9
|
||||||
|
},
|
||||||
|
"_contentSize": {
|
||||||
|
"__type__": "cc.Size",
|
||||||
|
"width": 120,
|
||||||
|
"height": 120
|
||||||
|
},
|
||||||
|
"_anchorPoint": {
|
||||||
|
"__type__": "cc.Vec2",
|
||||||
|
"x": 0.5,
|
||||||
|
"y": 0.5
|
||||||
|
},
|
||||||
|
"_id": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.CompPrefabInfo",
|
||||||
|
"fileId": "63NP9yq3hEUKD/OZZZ5t7x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "57aabs7TE1J5obTAZczc+64",
|
||||||
|
"_name": "",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"__editorExtras__": {},
|
||||||
|
"node": {
|
||||||
|
"__id__": 1
|
||||||
|
},
|
||||||
|
"_enabled": true,
|
||||||
|
"__prefab": {
|
||||||
|
"__id__": 11
|
||||||
|
},
|
||||||
|
"atk_x": 20,
|
||||||
|
"atk_y": 40,
|
||||||
|
"runType": 2,
|
||||||
|
"endType": 0,
|
||||||
|
"speed": 720,
|
||||||
|
"time": 0,
|
||||||
|
"_id": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.CompPrefabInfo",
|
||||||
|
"fileId": "35nW0iQNBH2bqkWAr3MVkQ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.RigidBody2D",
|
||||||
|
"_name": "",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"__editorExtras__": {},
|
||||||
|
"node": {
|
||||||
|
"__id__": 1
|
||||||
|
},
|
||||||
|
"_enabled": true,
|
||||||
|
"__prefab": {
|
||||||
|
"__id__": 13
|
||||||
|
},
|
||||||
|
"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__": 15
|
||||||
|
},
|
||||||
|
"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": 120,
|
||||||
|
"height": 120
|
||||||
|
},
|
||||||
|
"_id": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.CompPrefabInfo",
|
||||||
|
"fileId": "ebw5mObxNGGKxnJXDgX5gl"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.Animation",
|
||||||
|
"_name": "",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"__editorExtras__": {},
|
||||||
|
"node": {
|
||||||
|
"__id__": 1
|
||||||
|
},
|
||||||
|
"_enabled": true,
|
||||||
|
"__prefab": {
|
||||||
|
"__id__": 17
|
||||||
|
},
|
||||||
|
"playOnLoad": true,
|
||||||
|
"_clips": [
|
||||||
|
{
|
||||||
|
"__uuid__": "26398731-5541-44ca-b2b7-4947dc9bf7f7",
|
||||||
|
"__expectedType__": "cc.AnimationClip"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"_defaultClip": {
|
||||||
|
"__uuid__": "26398731-5541-44ca-b2b7-4947dc9bf7f7",
|
||||||
|
"__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
|
||||||
|
}
|
||||||
|
]
|
||||||
13
assets/resources/game/skill/atk/atk3.prefab.meta
Normal file
13
assets/resources/game/skill/atk/atk3.prefab.meta
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.1.50",
|
||||||
|
"importer": "prefab",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "16ca6f33-f910-4202-add4-2862be6c9127",
|
||||||
|
"files": [
|
||||||
|
".json"
|
||||||
|
],
|
||||||
|
"subMetas": {},
|
||||||
|
"userData": {
|
||||||
|
"syncNodeName": "atk3"
|
||||||
|
}
|
||||||
|
}
|
||||||
375
assets/resources/game/skill/atk/atk4.prefab
Normal file
375
assets/resources/game/skill/atk/atk4.prefab
Normal file
@@ -0,0 +1,375 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"__type__": "cc.Prefab",
|
||||||
|
"_name": "atk4",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"__editorExtras__": {},
|
||||||
|
"_native": "",
|
||||||
|
"data": {
|
||||||
|
"__id__": 1
|
||||||
|
},
|
||||||
|
"optimizationPolicy": 0,
|
||||||
|
"persistent": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.Node",
|
||||||
|
"_name": "atk4",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"__editorExtras__": {},
|
||||||
|
"_parent": null,
|
||||||
|
"_children": [
|
||||||
|
{
|
||||||
|
"__id__": 2
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"_active": true,
|
||||||
|
"_components": [
|
||||||
|
{
|
||||||
|
"__id__": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__id__": 10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__id__": 12
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__id__": 14
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__id__": 16
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"_prefab": {
|
||||||
|
"__id__": 18
|
||||||
|
},
|
||||||
|
"_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": 1.3,
|
||||||
|
"y": 1.1,
|
||||||
|
"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": 95,
|
||||||
|
"height": 96
|
||||||
|
},
|
||||||
|
"_anchorPoint": {
|
||||||
|
"__type__": "cc.Vec2",
|
||||||
|
"x": 0.5,
|
||||||
|
"y": 0.5
|
||||||
|
},
|
||||||
|
"_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@3c745",
|
||||||
|
"__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.UITransform",
|
||||||
|
"_name": "",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"__editorExtras__": {},
|
||||||
|
"node": {
|
||||||
|
"__id__": 1
|
||||||
|
},
|
||||||
|
"_enabled": true,
|
||||||
|
"__prefab": {
|
||||||
|
"__id__": 9
|
||||||
|
},
|
||||||
|
"_contentSize": {
|
||||||
|
"__type__": "cc.Size",
|
||||||
|
"width": 120,
|
||||||
|
"height": 120
|
||||||
|
},
|
||||||
|
"_anchorPoint": {
|
||||||
|
"__type__": "cc.Vec2",
|
||||||
|
"x": 0.5,
|
||||||
|
"y": 0.5
|
||||||
|
},
|
||||||
|
"_id": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.CompPrefabInfo",
|
||||||
|
"fileId": "63NP9yq3hEUKD/OZZZ5t7x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "57aabs7TE1J5obTAZczc+64",
|
||||||
|
"_name": "",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"__editorExtras__": {},
|
||||||
|
"node": {
|
||||||
|
"__id__": 1
|
||||||
|
},
|
||||||
|
"_enabled": true,
|
||||||
|
"__prefab": {
|
||||||
|
"__id__": 11
|
||||||
|
},
|
||||||
|
"atk_x": 20,
|
||||||
|
"atk_y": 40,
|
||||||
|
"runType": 2,
|
||||||
|
"endType": 0,
|
||||||
|
"speed": 720,
|
||||||
|
"time": 0,
|
||||||
|
"_id": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.CompPrefabInfo",
|
||||||
|
"fileId": "35nW0iQNBH2bqkWAr3MVkQ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.RigidBody2D",
|
||||||
|
"_name": "",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"__editorExtras__": {},
|
||||||
|
"node": {
|
||||||
|
"__id__": 1
|
||||||
|
},
|
||||||
|
"_enabled": true,
|
||||||
|
"__prefab": {
|
||||||
|
"__id__": 13
|
||||||
|
},
|
||||||
|
"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__": 15
|
||||||
|
},
|
||||||
|
"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": 120,
|
||||||
|
"height": 120
|
||||||
|
},
|
||||||
|
"_id": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.CompPrefabInfo",
|
||||||
|
"fileId": "ebw5mObxNGGKxnJXDgX5gl"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.Animation",
|
||||||
|
"_name": "",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"__editorExtras__": {},
|
||||||
|
"node": {
|
||||||
|
"__id__": 1
|
||||||
|
},
|
||||||
|
"_enabled": true,
|
||||||
|
"__prefab": {
|
||||||
|
"__id__": 17
|
||||||
|
},
|
||||||
|
"playOnLoad": true,
|
||||||
|
"_clips": [
|
||||||
|
{
|
||||||
|
"__uuid__": "0ad94bf2-3b2d-4f80-8500-68c5e33e2ed1",
|
||||||
|
"__expectedType__": "cc.AnimationClip"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"_defaultClip": {
|
||||||
|
"__uuid__": "0ad94bf2-3b2d-4f80-8500-68c5e33e2ed1",
|
||||||
|
"__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
|
||||||
|
}
|
||||||
|
]
|
||||||
13
assets/resources/game/skill/atk/atk4.prefab.meta
Normal file
13
assets/resources/game/skill/atk/atk4.prefab.meta
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.1.50",
|
||||||
|
"importer": "prefab",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "7f30cd3c-57d1-476a-96bb-02c4eb082576",
|
||||||
|
"files": [
|
||||||
|
".json"
|
||||||
|
],
|
||||||
|
"subMetas": {},
|
||||||
|
"userData": {
|
||||||
|
"syncNodeName": "atk4"
|
||||||
|
}
|
||||||
|
}
|
||||||
375
assets/resources/game/skill/atk/atk5.prefab
Normal file
375
assets/resources/game/skill/atk/atk5.prefab
Normal file
@@ -0,0 +1,375 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"__type__": "cc.Prefab",
|
||||||
|
"_name": "atk5",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"__editorExtras__": {},
|
||||||
|
"_native": "",
|
||||||
|
"data": {
|
||||||
|
"__id__": 1
|
||||||
|
},
|
||||||
|
"optimizationPolicy": 0,
|
||||||
|
"persistent": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.Node",
|
||||||
|
"_name": "atk5",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"__editorExtras__": {},
|
||||||
|
"_parent": null,
|
||||||
|
"_children": [
|
||||||
|
{
|
||||||
|
"__id__": 2
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"_active": true,
|
||||||
|
"_components": [
|
||||||
|
{
|
||||||
|
"__id__": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__id__": 10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__id__": 12
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__id__": 14
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__id__": 16
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"_prefab": {
|
||||||
|
"__id__": 18
|
||||||
|
},
|
||||||
|
"_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": 1.3,
|
||||||
|
"y": 1.1,
|
||||||
|
"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": 95,
|
||||||
|
"height": 96
|
||||||
|
},
|
||||||
|
"_anchorPoint": {
|
||||||
|
"__type__": "cc.Vec2",
|
||||||
|
"x": 0.5,
|
||||||
|
"y": 0.5
|
||||||
|
},
|
||||||
|
"_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@3c745",
|
||||||
|
"__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.UITransform",
|
||||||
|
"_name": "",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"__editorExtras__": {},
|
||||||
|
"node": {
|
||||||
|
"__id__": 1
|
||||||
|
},
|
||||||
|
"_enabled": true,
|
||||||
|
"__prefab": {
|
||||||
|
"__id__": 9
|
||||||
|
},
|
||||||
|
"_contentSize": {
|
||||||
|
"__type__": "cc.Size",
|
||||||
|
"width": 120,
|
||||||
|
"height": 120
|
||||||
|
},
|
||||||
|
"_anchorPoint": {
|
||||||
|
"__type__": "cc.Vec2",
|
||||||
|
"x": 0.5,
|
||||||
|
"y": 0.5
|
||||||
|
},
|
||||||
|
"_id": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.CompPrefabInfo",
|
||||||
|
"fileId": "63NP9yq3hEUKD/OZZZ5t7x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "57aabs7TE1J5obTAZczc+64",
|
||||||
|
"_name": "",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"__editorExtras__": {},
|
||||||
|
"node": {
|
||||||
|
"__id__": 1
|
||||||
|
},
|
||||||
|
"_enabled": true,
|
||||||
|
"__prefab": {
|
||||||
|
"__id__": 11
|
||||||
|
},
|
||||||
|
"atk_x": 20,
|
||||||
|
"atk_y": 40,
|
||||||
|
"runType": 2,
|
||||||
|
"endType": 0,
|
||||||
|
"speed": 720,
|
||||||
|
"time": 0,
|
||||||
|
"_id": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.CompPrefabInfo",
|
||||||
|
"fileId": "35nW0iQNBH2bqkWAr3MVkQ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.RigidBody2D",
|
||||||
|
"_name": "",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"__editorExtras__": {},
|
||||||
|
"node": {
|
||||||
|
"__id__": 1
|
||||||
|
},
|
||||||
|
"_enabled": true,
|
||||||
|
"__prefab": {
|
||||||
|
"__id__": 13
|
||||||
|
},
|
||||||
|
"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__": 15
|
||||||
|
},
|
||||||
|
"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": 120,
|
||||||
|
"height": 120
|
||||||
|
},
|
||||||
|
"_id": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.CompPrefabInfo",
|
||||||
|
"fileId": "ebw5mObxNGGKxnJXDgX5gl"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.Animation",
|
||||||
|
"_name": "",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"__editorExtras__": {},
|
||||||
|
"node": {
|
||||||
|
"__id__": 1
|
||||||
|
},
|
||||||
|
"_enabled": true,
|
||||||
|
"__prefab": {
|
||||||
|
"__id__": 17
|
||||||
|
},
|
||||||
|
"playOnLoad": true,
|
||||||
|
"_clips": [
|
||||||
|
{
|
||||||
|
"__uuid__": "ba0a95bf-2ea1-4d27-9c4f-cbd970ca558c",
|
||||||
|
"__expectedType__": "cc.AnimationClip"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"_defaultClip": {
|
||||||
|
"__uuid__": "ba0a95bf-2ea1-4d27-9c4f-cbd970ca558c",
|
||||||
|
"__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
|
||||||
|
}
|
||||||
|
]
|
||||||
13
assets/resources/game/skill/atk/atk5.prefab.meta
Normal file
13
assets/resources/game/skill/atk/atk5.prefab.meta
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.1.50",
|
||||||
|
"importer": "prefab",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "7227b42b-9cc7-41bd-8858-9d05c4cc758b",
|
||||||
|
"files": [
|
||||||
|
".json"
|
||||||
|
],
|
||||||
|
"subMetas": {},
|
||||||
|
"userData": {
|
||||||
|
"syncNodeName": "atk5"
|
||||||
|
}
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -232,7 +232,7 @@
|
|||||||
"_top": 0,
|
"_top": 0,
|
||||||
"_bottom": 546.004,
|
"_bottom": 546.004,
|
||||||
"_horizontalCenter": 0,
|
"_horizontalCenter": 0,
|
||||||
"_verticalCenter": 143,
|
"_verticalCenter": -7,
|
||||||
"_isAbsLeft": true,
|
"_isAbsLeft": true,
|
||||||
"_isAbsRight": true,
|
"_isAbsRight": true,
|
||||||
"_isAbsTop": true,
|
"_isAbsTop": true,
|
||||||
@@ -276,7 +276,7 @@
|
|||||||
"value": {
|
"value": {
|
||||||
"__type__": "cc.Vec3",
|
"__type__": "cc.Vec3",
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 783,
|
"y": 633,
|
||||||
"z": 0
|
"z": 0
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -46,7 +46,6 @@ export enum CardTriggerType {
|
|||||||
Interval = 2, // 定时循环:战斗中按 t_inv 间隔重复触发
|
Interval = 2, // 定时循环:战斗中按 t_inv 间隔重复触发
|
||||||
Field = 3, // 驻场光环(俗称「装备」):被动生效,由 field 数组驱动,支持单卡多词条
|
Field = 3, // 驻场光环(俗称「装备」):被动生效,由 field 数组驱动,支持单卡多词条
|
||||||
FightStart = 4, // 战斗开始时触发
|
FightStart = 4, // 战斗开始时触发
|
||||||
FightEnd = 5, // 战斗结束时触发(每回合结束)
|
|
||||||
HeroDead = 6, // 场上己方英雄死亡时触发
|
HeroDead = 6, // 场上己方英雄死亡时触发
|
||||||
HeroCall = 7, // 英雄上场时触发(主角召唤 + 技能召唤 + 复活)
|
HeroCall = 7, // 英雄上场时触发(主角召唤 + 技能召唤 + 复活)
|
||||||
}
|
}
|
||||||
@@ -78,7 +77,7 @@ export interface CardConfig {
|
|||||||
/** 触发类型(必填,技能卡专用;功能卡/英雄卡可缺省) */
|
/** 触发类型(必填,技能卡专用;功能卡/英雄卡可缺省) */
|
||||||
trigger_type?: CardTriggerType;
|
trigger_type?: CardTriggerType;
|
||||||
/**
|
/**
|
||||||
* 事件型触发的全局次数上限(仅 FightStart/FightEnd/HeroDead/HeroCall 有效)
|
* 事件型触发的全局次数上限(仅 FightStart/HeroDead/HeroCall 有效)
|
||||||
* 默认 Infinity;达到上限后销毁节点
|
* 默认 Infinity;达到上限后销毁节点
|
||||||
* 注意:与 t_times 语义不同——t_times 控制每回合内 Interval 的次数
|
* 注意:与 t_times 语义不同——t_times 控制每回合内 Interval 的次数
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -79,7 +79,6 @@ const EquipRawList: EquipRawData[] = [
|
|||||||
{ uuid: 8811, card_lv: 3, icon: "Wand-FA_WP_Main_Wand_004_WoodGold", name: "召唤强化", info: "召唤触发技能次数+1", field: [{ uuid: 7014, value: 1 }] },
|
{ uuid: 8811, card_lv: 3, icon: "Wand-FA_WP_Main_Wand_004_WoodGold", name: "召唤强化", info: "召唤触发技能次数+1", field: [{ uuid: 7014, value: 1 }] },
|
||||||
{ uuid: 8812, card_lv: 3, icon: "Staff-FA_WP_Main_Staff_005_WoodGold", name: "死亡强化", info: "死亡触发技能次数+1", field: [{ uuid: 7015, value: 1 }] },
|
{ uuid: 8812, card_lv: 3, icon: "Staff-FA_WP_Main_Staff_005_WoodGold", name: "死亡强化", info: "死亡触发技能次数+1", field: [{ uuid: 7015, value: 1 }] },
|
||||||
{ uuid: 8813, card_lv: 3, icon: "Spear-FA_WP_Main_Spear_008_GrayGold", name: "开场强化", info: "战斗开始触发技能次数+1", field: [{ uuid: 7016, value: 1 }] },
|
{ uuid: 8813, card_lv: 3, icon: "Spear-FA_WP_Main_Spear_008_GrayGold", name: "开场强化", info: "战斗开始触发技能次数+1", field: [{ uuid: 7016, value: 1 }] },
|
||||||
{ uuid: 8814, card_lv: 3, icon: "Blunt-FA_WP_Main_Blunt_006_OrangeGray", name: "结束强化", info: "战斗结束触发技能次数+1", field: [{ uuid: 7017, value: 1 }] },
|
|
||||||
{ uuid: 8815, card_lv: 3, icon: "Sword-FA_WP_Main_Sword_001_Gold", name: "攻击强化", info: "攻击触发技能次数+1", field: [{ uuid: 7018, value: 1 }] },
|
{ uuid: 8815, card_lv: 3, icon: "Sword-FA_WP_Main_Sword_001_Gold", name: "攻击强化", info: "攻击触发技能次数+1", field: [{ uuid: 7018, value: 1 }] },
|
||||||
{ uuid: 8816, card_lv: 3, icon: "Shield-FA_WP_Sub_Shield_009_RedGold", name: "受击强化", info: "被攻击触发技能次数+1", field: [{ uuid: 7019, value: 1 }] },
|
{ uuid: 8816, card_lv: 3, icon: "Shield-FA_WP_Sub_Shield_009_RedGold", name: "受击强化", info: "被攻击触发技能次数+1", field: [{ uuid: 7019, value: 1 }] },
|
||||||
// 多词条装备
|
// 多词条装备
|
||||||
|
|||||||
@@ -36,7 +36,6 @@ export enum GameEvent {
|
|||||||
FightStart = "FightStart",
|
FightStart = "FightStart",
|
||||||
FightPause = "FightPause",
|
FightPause = "FightPause",
|
||||||
FightResume = "FightResume",
|
FightResume = "FightResume",
|
||||||
FightEnd = "FightEnd",
|
|
||||||
MissionEnd = "MissionEnd",
|
MissionEnd = "MissionEnd",
|
||||||
MissionComplete = "MissionComplete",//战斗结算完成
|
MissionComplete = "MissionComplete",//战斗结算完成
|
||||||
HeroSkillSelect = "HeroSkillSelect",
|
HeroSkillSelect = "HeroSkillSelect",
|
||||||
|
|||||||
@@ -10,10 +10,10 @@ export enum BoxSet {
|
|||||||
MONSTER = 2,
|
MONSTER = 2,
|
||||||
HERO = 4,
|
HERO = 4,
|
||||||
//地图边界
|
//地图边界
|
||||||
LETF_END = -360,
|
LETF_END = -320,
|
||||||
RIGHT_END = 360,
|
RIGHT_END = 320,
|
||||||
//游戏地平线
|
//游戏地平线
|
||||||
GAME_LINE = 160,
|
GAME_LINE = 10,
|
||||||
/** 技能/装备各自独立的上限 */
|
/** 技能/装备各自独立的上限 */
|
||||||
BOX_MAX = 6,
|
BOX_MAX = 6,
|
||||||
}
|
}
|
||||||
@@ -37,7 +37,7 @@ export enum FightSet {
|
|||||||
/** 英雄属性随等级成长的倍率(ap/hp = base * MULTIPLIER^(lv-1)) */
|
/** 英雄属性随等级成长的倍率(ap/hp = base * MULTIPLIER^(lv-1)) */
|
||||||
HERO_LV_MULTIPLIER = 2,
|
HERO_LV_MULTIPLIER = 2,
|
||||||
// BACK_RANG=30,//后退范围
|
// BACK_RANG=30,//后退范围
|
||||||
BACK_RANG = 30,//后退范围
|
BACK_RANG = 20,//后退范围
|
||||||
FiIGHT_TIME = 30,//战斗时间
|
FiIGHT_TIME = 30,//战斗时间
|
||||||
FROST_TIME = 3,//冰冻时间
|
FROST_TIME = 3,//冰冻时间
|
||||||
STUN_TIME = 2,//击晕时间
|
STUN_TIME = 2,//击晕时间
|
||||||
|
|||||||
@@ -45,7 +45,6 @@ export interface ISkillDescSource {
|
|||||||
call?: TriggerGrouped;
|
call?: TriggerGrouped;
|
||||||
dead?: TriggerGrouped;
|
dead?: TriggerGrouped;
|
||||||
fstart?: TriggerGrouped;
|
fstart?: TriggerGrouped;
|
||||||
fend?: TriggerGrouped;
|
|
||||||
atking?: TriggerGrouped;
|
atking?: TriggerGrouped;
|
||||||
atked?: TriggerGrouped;
|
atked?: TriggerGrouped;
|
||||||
field?: LvFieldEntry[];
|
field?: LvFieldEntry[];
|
||||||
@@ -85,7 +84,6 @@ const TRIGGER_KEYS: SkillTriggerType[] = [
|
|||||||
SkillTriggerType.Call,
|
SkillTriggerType.Call,
|
||||||
SkillTriggerType.Dead,
|
SkillTriggerType.Dead,
|
||||||
SkillTriggerType.FStart,
|
SkillTriggerType.FStart,
|
||||||
SkillTriggerType.FEnd,
|
|
||||||
SkillTriggerType.Atking,
|
SkillTriggerType.Atking,
|
||||||
SkillTriggerType.Atked,
|
SkillTriggerType.Atked,
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -287,7 +287,6 @@ export const FieldDescSet: Record<number, FieldDescConfig> = {
|
|||||||
[FieldSkillType.SummonCount]: { verb: "召唤触发技能次数", fmt: FieldValueFmt.Int },
|
[FieldSkillType.SummonCount]: { verb: "召唤触发技能次数", fmt: FieldValueFmt.Int },
|
||||||
[FieldSkillType.DeadCount]: { verb: "死亡触发技能次数", fmt: FieldValueFmt.Int },
|
[FieldSkillType.DeadCount]: { verb: "死亡触发技能次数", fmt: FieldValueFmt.Int },
|
||||||
[FieldSkillType.StartCount]: { verb: "战斗开始触发技能次数", fmt: FieldValueFmt.Int },
|
[FieldSkillType.StartCount]: { verb: "战斗开始触发技能次数", fmt: FieldValueFmt.Int },
|
||||||
[FieldSkillType.EndCount]: { verb: "战斗结束触发技能次数", fmt: FieldValueFmt.Int },
|
|
||||||
[FieldSkillType.WaveGold]: { verb: "每回合金币收益", fmt: FieldValueFmt.Int },
|
[FieldSkillType.WaveGold]: { verb: "每回合金币收益", fmt: FieldValueFmt.Int },
|
||||||
[FieldSkillType.SellGold]: { verb: "卖出英雄金币", fmt: FieldValueFmt.Int },
|
[FieldSkillType.SellGold]: { verb: "卖出英雄金币", fmt: FieldValueFmt.Int },
|
||||||
[FieldSkillType.WaveHeal]: { verb: "战斗结束生命回复量", fmt: FieldValueFmt.Percent },
|
[FieldSkillType.WaveHeal]: { verb: "战斗结束生命回复量", fmt: FieldValueFmt.Percent },
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// ========== 从 HeroAttrs.ts 导入属性相关定义 ==========
|
// ========== 从 HeroAttrs.ts 导入属性相关定义 ==========
|
||||||
import { Attrs } from "./HeroAttrs";
|
import { Attrs } from "./HeroAttrs";
|
||||||
|
|
||||||
export enum HSSet {
|
export enum HSSet {
|
||||||
@@ -134,7 +134,6 @@ export interface SkillConfig {
|
|||||||
gold?: number, // 获取金币技能的金币值
|
gold?: number, // 获取金币技能的金币值
|
||||||
hit_count: number, // 可命中次数
|
hit_count: number, // 可命中次数
|
||||||
hitcd: number, // 持续伤害的伤害间隔(秒)
|
hitcd: number, // 持续伤害的伤害间隔(秒)
|
||||||
/** @deprecated 已下沉到 SkillView @property(prefab 配置),此处仅作兜底 */
|
|
||||||
speed: number, // 移动速度
|
speed: number, // 移动速度
|
||||||
with: number, // 宽度(暂时无用)
|
with: number, // 宽度(暂时无用)
|
||||||
ready: number, // 前摇时间
|
ready: number, // 前摇时间
|
||||||
@@ -143,14 +142,11 @@ export interface SkillConfig {
|
|||||||
EAnm: number, // 结束动画ID
|
EAnm: number, // 结束动画ID
|
||||||
DAnm: string, // 命中后动画ID
|
DAnm: string, // 命中后动画ID
|
||||||
IType: IType, // 技能类型(近战/远程/辅助)
|
IType: IType, // 技能类型(近战/远程/辅助)
|
||||||
/** @deprecated 已下沉到 SkillView @property(prefab 配置),此处仅作兜底 */
|
|
||||||
RType: RType, // 技能运行类型(直线/贝塞尔/固定起点/固定终点)
|
RType: RType, // 技能运行类型(直线/贝塞尔/固定起点/固定终点)
|
||||||
/** @deprecated 已下沉到 SkillView @property(prefab 配置),此处仅作兜底 */
|
|
||||||
EType: EType, // 结束条件(动画结束/时间结束/距离结束/碰撞/次数结束)
|
EType: EType, // 结束条件(动画结束/时间结束/距离结束/碰撞/次数结束)
|
||||||
bezier_start_y?: number, // 贝塞尔起始抬升高度
|
bezier_start_y?: number, // 贝塞尔起始抬升高度
|
||||||
bezier_mid_y?: number, // 贝塞尔中间高度增量
|
bezier_mid_y?: number, // 贝塞尔中间高度增量
|
||||||
bezier_arc?: number, // 贝塞尔弧度系数
|
bezier_arc?: number, // 贝塞尔弧度系数
|
||||||
/** @deprecated 已下沉到 SkillView @property(prefab 配置),此处仅作兜底 */
|
|
||||||
time?: number, // timeEnd 持续时间(秒)
|
time?: number, // timeEnd 持续时间(秒)
|
||||||
kind?: SkillKind, // 主效果类型
|
kind?: SkillKind, // 主效果类型
|
||||||
crt?: number, // 额外暴击率
|
crt?: number, // 额外暴击率
|
||||||
@@ -243,9 +239,9 @@ export const SkillSet: Record<number, SkillConfig> = {
|
|||||||
RType: RType.bezier, EType: EType.collision, info: "造成攻击力100%的伤害",
|
RType: RType.bezier, EType: EType.collision, info: "造成攻击力100%的伤害",
|
||||||
},
|
},
|
||||||
6006: {
|
6006: {
|
||||||
uuid: 6006, name: "攻击", sp_name: "atk", icon: "Stat_Attack_01", TGroup: TGroup.Enemy, readyAnm: "", endAnm: "", act: "atk",
|
uuid: 6006, name: "攻击", sp_name: "atk1", icon: "Stat_Attack_01", 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,
|
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.fixed, EType: EType.collision, info: "造成攻击力100%的伤害",
|
RType: RType.bezier, EType: EType.collision, info: "造成攻击力100%的伤害",
|
||||||
},
|
},
|
||||||
6007: {
|
6007: {
|
||||||
uuid: 6007, name: "飞棒", sp_name: "b1", icon: "Blunt-FA_WP_Main_Blunt_002_Wood", TGroup: TGroup.Enemy, readyAnm: "", endAnm: "", act: "atk",
|
uuid: 6007, name: "飞棒", sp_name: "b1", icon: "Blunt-FA_WP_Main_Blunt_002_Wood", TGroup: TGroup.Enemy, readyAnm: "", endAnm: "", act: "atk",
|
||||||
@@ -464,7 +460,6 @@ export enum FieldSkillType {
|
|||||||
SummonCount = 1, // 召唤触发技能次数提升
|
SummonCount = 1, // 召唤触发技能次数提升
|
||||||
DeadCount = 2, // 死亡触发技能次数提升
|
DeadCount = 2, // 死亡触发技能次数提升
|
||||||
StartCount = 3, // 战斗开始触发技能次数提升
|
StartCount = 3, // 战斗开始触发技能次数提升
|
||||||
EndCount = 4, // 战斗结束触发技能次数提升
|
|
||||||
WaveGold = 5, // 每回合金币收益提升
|
WaveGold = 5, // 每回合金币收益提升
|
||||||
SellGold = 6, // 卖出英雄金币提升
|
SellGold = 6, // 卖出英雄金币提升
|
||||||
WaveHeal = 7, // 战斗结束生命回复量提升
|
WaveHeal = 7, // 战斗结束生命回复量提升
|
||||||
@@ -519,7 +514,6 @@ export const FieldSkillSet: Record<number, FieldSkillConfig> = {
|
|||||||
7014: { uuid: 7014, name: "召唤强化", icon: "Stat_UnitSummonIncrease_02", type: FieldSkillType.SummonCount, info: "召唤触发技能次数提升" },
|
7014: { uuid: 7014, name: "召唤强化", icon: "Stat_UnitSummonIncrease_02", type: FieldSkillType.SummonCount, info: "召唤触发技能次数提升" },
|
||||||
7015: { uuid: 7015, name: "死亡强化", icon: "Stat_PoisonChanceIncrease", type: FieldSkillType.DeadCount, info: "死亡触发技能次数提升" },
|
7015: { uuid: 7015, name: "死亡强化", icon: "Stat_PoisonChanceIncrease", type: FieldSkillType.DeadCount, info: "死亡触发技能次数提升" },
|
||||||
7016: { uuid: 7016, name: "开场强化", icon: "Stat_AttackRangeIncrease_01", type: FieldSkillType.StartCount, info: "战斗开始触发技能次数提升" },
|
7016: { uuid: 7016, name: "开场强化", icon: "Stat_AttackRangeIncrease_01", type: FieldSkillType.StartCount, info: "战斗开始触发技能次数提升" },
|
||||||
7017: { uuid: 7017, name: "结束强化", icon: "Stat_UnitSummonIncrease_01", type: FieldSkillType.EndCount, info: "战斗结束触发技能次数提升" },
|
|
||||||
7018: { uuid: 7018, name: "攻击强化", icon: "Stat_Attack_03", type: FieldSkillType.AtkCount, info: "攻击触发技能次数提升" },
|
7018: { uuid: 7018, name: "攻击强化", icon: "Stat_Attack_03", type: FieldSkillType.AtkCount, info: "攻击触发技能次数提升" },
|
||||||
7019: { uuid: 7019, name: "受击强化", icon: "Stat_Armor_01", type: FieldSkillType.BeAtkCount, info: "被攻击触发技能次数提升" },
|
7019: { uuid: 7019, name: "受击强化", icon: "Stat_Armor_01", type: FieldSkillType.BeAtkCount, info: "被攻击触发技能次数提升" },
|
||||||
7020: { uuid: 7020, name: "穿透强化", icon: "Stat_Tripleshot", type: FieldSkillType.HeroPunctureDmg, info: "英雄穿透后伤害提升(百分点)" },
|
7020: { uuid: 7020, name: "穿透强化", icon: "Stat_Tripleshot", type: FieldSkillType.HeroPunctureDmg, info: "英雄穿透后伤害提升(百分点)" },
|
||||||
|
|||||||
@@ -40,37 +40,22 @@ export const MonTypeName: Record<number, string> = {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 英雄攻击速度分级配置 (数值为攻击间隔cd,越小越快)
|
* 英雄攻击速度分级配置 (数值为攻击间隔cd,越小越快)
|
||||||
* 每档3个速度级别:Lv1(最快) → Lv2(中间) → Lv3(最慢)
|
* 5 档速度:最快 VeryFast 0.75s → 最慢 VerySlow 1.50s
|
||||||
* 6档共18级,覆盖所有英雄/怪物的攻击间隔
|
|
||||||
*/
|
*/
|
||||||
export enum AtkSpeedLv {
|
export enum AtkSpeedLv {
|
||||||
VeryFast1 = 1, VeryFast2 = 2, VeryFast3 = 3,
|
VeryFast = 1,
|
||||||
Fast1 = 4, Fast2 = 5, Fast3 = 6,
|
Fast = 2,
|
||||||
Normal1 = 7, Normal2 = 8, Normal3 = 9,
|
Normal = 3,
|
||||||
Mid1 = 10, Mid2 = 11, Mid3 = 12,
|
Slow = 4,
|
||||||
Slow1 = 13, Slow2 = 14, Slow3 = 15,
|
VerySlow = 5,
|
||||||
VerySlow1 = 16, VerySlow2 = 17, VerySlow3 = 18,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export const AtkSpeedSet = {
|
export const AtkSpeedSet = {
|
||||||
[AtkSpeedLv.VeryFast1]: { name: "极速++", cd: 0.15 },
|
[AtkSpeedLv.VeryFast]: { name: "极速", cd: 0.75 },
|
||||||
[AtkSpeedLv.VeryFast2]: { name: "极速+", cd: 0.20 },
|
[AtkSpeedLv.Fast]: { name: "快速", cd: 0.90 },
|
||||||
[AtkSpeedLv.VeryFast3]: { name: "极速", cd: 0.30 },
|
[AtkSpeedLv.Normal]: { name: "中速", cd: 1.05 },
|
||||||
[AtkSpeedLv.Fast1]: { name: "快速++", cd: 0.40 },
|
[AtkSpeedLv.Slow]: { name: "慢速", cd: 1.20 },
|
||||||
[AtkSpeedLv.Fast2]: { name: "快速+", cd: 0.50 },
|
[AtkSpeedLv.VerySlow]: { name: "极慢", cd: 1.50 },
|
||||||
[AtkSpeedLv.Fast3]: { name: "快速", cd: 0.70 },
|
|
||||||
[AtkSpeedLv.Normal1]: { name: "中速++", cd: 0.80 },
|
|
||||||
[AtkSpeedLv.Normal2]: { name: "中速+", cd: 0.90 },
|
|
||||||
[AtkSpeedLv.Normal3]: { name: "中速", cd: 1.00 },
|
|
||||||
[AtkSpeedLv.Mid1]: { name: "一般+", cd: 1.10 },
|
|
||||||
[AtkSpeedLv.Mid2]: { name: "一般", cd: 1.20 },
|
|
||||||
[AtkSpeedLv.Mid3]: { name: "一般-", cd: 1.30 },
|
|
||||||
[AtkSpeedLv.Slow1]: { name: "慢", cd: 1.50 },
|
|
||||||
[AtkSpeedLv.Slow2]: { name: "慢+", cd: 1.60 },
|
|
||||||
[AtkSpeedLv.Slow3]: { name: "慢++", cd: 1.80 },
|
|
||||||
[AtkSpeedLv.VerySlow1]: { name: "很慢", cd: 2.30 },
|
|
||||||
[AtkSpeedLv.VerySlow2]: { name: "很慢+", cd: 2.50 },
|
|
||||||
[AtkSpeedLv.VerySlow3]: { name: "很慢++", cd: 2.80 },
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export const HeroPos = {
|
export const HeroPos = {
|
||||||
@@ -179,7 +164,6 @@ export enum SkillTriggerType {
|
|||||||
Call = "call", // 召唤后触发 降临
|
Call = "call", // 召唤后触发 降临
|
||||||
Dead = "dead", // 死亡后触发 遗志
|
Dead = "dead", // 死亡后触发 遗志
|
||||||
FStart = "fstart", // 战斗开始 先手
|
FStart = "fstart", // 战斗开始 先手
|
||||||
FEnd = "fend", // 战斗结束 终战
|
|
||||||
Field = "field", // 驻场 光环
|
Field = "field", // 驻场 光环
|
||||||
Atking = "atking", // 攻击后触发 追击
|
Atking = "atking", // 攻击后触发 追击
|
||||||
Atked = "atked", // 受击后触发 反击
|
Atked = "atked", // 受击后触发 反击
|
||||||
@@ -190,7 +174,6 @@ export const SkillTriggerName = {
|
|||||||
[SkillTriggerType.Call]: "召唤",
|
[SkillTriggerType.Call]: "召唤",
|
||||||
[SkillTriggerType.Dead]: "死亡后",
|
[SkillTriggerType.Dead]: "死亡后",
|
||||||
[SkillTriggerType.FStart]: "回合开始",
|
[SkillTriggerType.FStart]: "回合开始",
|
||||||
[SkillTriggerType.FEnd]: "回合结束",
|
|
||||||
[SkillTriggerType.Field]: "光环",
|
[SkillTriggerType.Field]: "光环",
|
||||||
[SkillTriggerType.Atking]: "攻击",
|
[SkillTriggerType.Atking]: "攻击",
|
||||||
[SkillTriggerType.Atked]: "受伤",
|
[SkillTriggerType.Atked]: "受伤",
|
||||||
@@ -201,7 +184,6 @@ export const SkillTriggerDesc = {
|
|||||||
[SkillTriggerType.Call]: "召唤时",
|
[SkillTriggerType.Call]: "召唤时",
|
||||||
[SkillTriggerType.Dead]: "死亡时",
|
[SkillTriggerType.Dead]: "死亡时",
|
||||||
[SkillTriggerType.FStart]: "战斗开始时",
|
[SkillTriggerType.FStart]: "战斗开始时",
|
||||||
[SkillTriggerType.FEnd]: "战斗结束时",
|
|
||||||
[SkillTriggerType.Field]: "光环",
|
[SkillTriggerType.Field]: "光环",
|
||||||
[SkillTriggerType.Atking]: "攻击n次",
|
[SkillTriggerType.Atking]: "攻击n次",
|
||||||
[SkillTriggerType.Atked]: "受伤n次",
|
[SkillTriggerType.Atked]: "受伤n次",
|
||||||
@@ -313,7 +295,6 @@ export interface heroInfo {
|
|||||||
[SkillTriggerType.Call]?: TriggerGrouped; // 召唤后触发的技能配置(按 s_uuid 分组,每组按 lv 升序)
|
[SkillTriggerType.Call]?: TriggerGrouped; // 召唤后触发的技能配置(按 s_uuid 分组,每组按 lv 升序)
|
||||||
[SkillTriggerType.Dead]?: TriggerGrouped; // 死亡后触发的技能配置
|
[SkillTriggerType.Dead]?: TriggerGrouped; // 死亡后触发的技能配置
|
||||||
[SkillTriggerType.FStart]?: TriggerGrouped; // 战斗开始时释放的技能配置
|
[SkillTriggerType.FStart]?: TriggerGrouped; // 战斗开始时释放的技能配置
|
||||||
[SkillTriggerType.FEnd]?: TriggerGrouped; // 战斗结束时释放的技能配置
|
|
||||||
[SkillTriggerType.Field]?: LvFieldEntry[]; // 驻场光环(按 lv 升序,运行时取 ≤英雄等级 的最大档)
|
[SkillTriggerType.Field]?: LvFieldEntry[]; // 驻场光环(按 lv 升序,运行时取 ≤英雄等级 的最大档)
|
||||||
[SkillTriggerType.Atking]?: TriggerGrouped; // 普通攻击后触发的技能配置,s_uuid: 技能id, t_num: 触发所需的普攻次数
|
[SkillTriggerType.Atking]?: TriggerGrouped; // 普通攻击后触发的技能配置,s_uuid: 技能id, t_num: 触发所需的普攻次数
|
||||||
[SkillTriggerType.Atked]?: TriggerGrouped; // 受击后触发的技能配置,s_uuid: 技能id, t_num: 触发所需的受击次数
|
[SkillTriggerType.Atked]?: TriggerGrouped; // 受击后触发的技能配置,s_uuid: 技能id, t_num: 触发所需的受击次数
|
||||||
@@ -404,7 +385,7 @@ export const HeroInfo: Record<number, heroInfo> = {
|
|||||||
// 5001 铁壁战士 — atked 护盾(标杆,原5011)
|
// 5001 铁壁战士 — atked 护盾(标杆,原5011)
|
||||||
5001: {
|
5001: {
|
||||||
uuid: 5001, name: "铁壁战士", path: "hk1", fac: FacSet.HERO, card_lv: 1, lv: 1, type: HType.Melee, grow_type: HGrowType.Tank, role: HRole.Tank, hp: 300, ap: 22,
|
uuid: 5001, name: "铁壁战士", path: "hk1", fac: FacSet.HERO, card_lv: 1, lv: 1, type: HType.Melee, grow_type: HGrowType.Tank, role: HRole.Tank, hp: 300, ap: 22,
|
||||||
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow3].cd, ccd: 0 } },
|
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0 } },
|
||||||
atked: {
|
atked: {
|
||||||
6301: [
|
6301: [
|
||||||
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Self, ap: 2 } },
|
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Self, ap: 2 } },
|
||||||
@@ -417,7 +398,7 @@ export const HeroInfo: Record<number, heroInfo> = {
|
|||||||
// 5002 影袭刺客 — atking 自身攻击
|
// 5002 影袭刺客 — atking 自身攻击
|
||||||
5002: {
|
5002: {
|
||||||
uuid: 5002, name: "影袭刺客", path: "hc1", fac: FacSet.HERO, card_lv: 1, lv: 1, type: HType.Melee, grow_type: HGrowType.Assassin, role: HRole.Assassin, hp: 300, ap: 22,
|
uuid: 5002, name: "影袭刺客", path: "hc1", fac: FacSet.HERO, card_lv: 1, lv: 1, type: HType.Melee, grow_type: HGrowType.Assassin, role: HRole.Assassin, hp: 300, ap: 22,
|
||||||
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Fast2].cd, ccd: 0 } },
|
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Fast].cd, ccd: 0 } },
|
||||||
atking: {
|
atking: {
|
||||||
6401: [
|
6401: [
|
||||||
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Self, ap: 1 } },
|
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Self, ap: 1 } },
|
||||||
@@ -430,7 +411,7 @@ export const HeroInfo: Record<number, heroInfo> = {
|
|||||||
// 5003 遗志将军 — dead 全队攻击
|
// 5003 遗志将军 — dead 全队攻击
|
||||||
5003: {
|
5003: {
|
||||||
uuid: 5003, name: "遗志将军", path: "hk2", fac: FacSet.HERO, card_lv: 1, lv: 1, type: HType.Melee, grow_type: HGrowType.Warrior, role: HRole.Warrior, hp: 300, ap: 22,
|
uuid: 5003, name: "遗志将军", path: "hk2", fac: FacSet.HERO, card_lv: 1, lv: 1, type: HType.Melee, grow_type: HGrowType.Warrior, role: HRole.Warrior, hp: 300, ap: 22,
|
||||||
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow3].cd, ccd: 0 } },
|
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0 } },
|
||||||
dead: {
|
dead: {
|
||||||
6401: [
|
6401: [
|
||||||
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 3 } },
|
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 3 } },
|
||||||
@@ -443,7 +424,7 @@ export const HeroInfo: Record<number, heroInfo> = {
|
|||||||
// 5004 破晓先知 — fstart 全队攻击
|
// 5004 破晓先知 — fstart 全队攻击
|
||||||
5004: {
|
5004: {
|
||||||
uuid: 5004, name: "破晓先知", path: "hm1", fac: FacSet.HERO, card_lv: 1, lv: 1, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Mage, hp: 143, ap: 32,
|
uuid: 5004, name: "破晓先知", path: "hm1", fac: FacSet.HERO, card_lv: 1, lv: 1, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Mage, hp: 143, ap: 32,
|
||||||
skills: { 6013: { uuid: 6013, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Mid3].cd, ccd: 0 } },
|
skills: { 6013: { uuid: 6013, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0 } },
|
||||||
fstart: {
|
fstart: {
|
||||||
6401: [
|
6401: [
|
||||||
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 3 } },
|
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 3 } },
|
||||||
@@ -456,7 +437,7 @@ export const HeroInfo: Record<number, heroInfo> = {
|
|||||||
// 5005 战歌法师 — field 攻击光环
|
// 5005 战歌法师 — field 攻击光环
|
||||||
5005: {
|
5005: {
|
||||||
uuid: 5005, name: "战歌法师", path: "hm2", fac: FacSet.HERO, card_lv: 1, lv: 1, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Support, hp: 143, ap: 32,
|
uuid: 5005, name: "战歌法师", path: "hm2", fac: FacSet.HERO, card_lv: 1, lv: 1, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Support, hp: 143, ap: 32,
|
||||||
skills: { 6013: { uuid: 6013, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Mid3].cd, ccd: 0 } },
|
skills: { 6013: { uuid: 6013, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0 } },
|
||||||
field: [
|
field: [
|
||||||
{ lv: 1, uuids: [{ uuid: 7002, value: 0.1 }] },
|
{ lv: 1, uuids: [{ uuid: 7002, value: 0.1 }] },
|
||||||
{ lv: 3, uuids: [{ uuid: 7002, value: 0.2 }] },
|
{ lv: 3, uuids: [{ uuid: 7002, value: 0.2 }] },
|
||||||
@@ -470,7 +451,7 @@ export const HeroInfo: Record<number, heroInfo> = {
|
|||||||
// 5101 不死斗士 — atked 回血(更高数值)
|
// 5101 不死斗士 — atked 回血(更高数值)
|
||||||
5101: {
|
5101: {
|
||||||
uuid: 5101, name: "不死斗士", path: "hk3", fac: FacSet.HERO, card_lv: 2, lv: 1, type: HType.Melee, grow_type: HGrowType.Tank, role: HRole.Tank, hp: 600, ap: 46,
|
uuid: 5101, name: "不死斗士", path: "hk3", fac: FacSet.HERO, card_lv: 2, lv: 1, type: HType.Melee, grow_type: HGrowType.Tank, role: HRole.Tank, hp: 600, ap: 46,
|
||||||
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow3].cd, ccd: 0 } },
|
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0 } },
|
||||||
atked: {
|
atked: {
|
||||||
6302: [
|
6302: [
|
||||||
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Self, ap: 200 } },
|
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Self, ap: 200 } },
|
||||||
@@ -483,7 +464,7 @@ export const HeroInfo: Record<number, heroInfo> = {
|
|||||||
// 5102 致命杀手 — atking 暴击(更高数值)
|
// 5102 致命杀手 — atking 暴击(更高数值)
|
||||||
5102: {
|
5102: {
|
||||||
uuid: 5102, name: "致命杀手", path: "hc2", fac: FacSet.HERO, card_lv: 2, lv: 1, type: HType.Melee, grow_type: HGrowType.Assassin, role: HRole.Assassin, hp: 600, ap: 46,
|
uuid: 5102, name: "致命杀手", path: "hc2", fac: FacSet.HERO, card_lv: 2, lv: 1, type: HType.Melee, grow_type: HGrowType.Assassin, role: HRole.Assassin, hp: 600, ap: 46,
|
||||||
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Fast2].cd, ccd: 0 } },
|
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Fast].cd, ccd: 0 } },
|
||||||
atking: {
|
atking: {
|
||||||
6403: [
|
6403: [
|
||||||
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7012, buff_value: 5, buff_duration: 5 } },
|
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7012, buff_value: 5, buff_duration: 5 } },
|
||||||
@@ -496,7 +477,7 @@ export const HeroInfo: Record<number, heroInfo> = {
|
|||||||
// 5103 殉道勇士 — dead 全队护盾(更高数值)
|
// 5103 殉道勇士 — dead 全队护盾(更高数值)
|
||||||
5103: {
|
5103: {
|
||||||
uuid: 5103, name: "殉道勇士", path: "hk4", fac: FacSet.HERO, card_lv: 2, lv: 1, type: HType.Melee, grow_type: HGrowType.Warrior, role: HRole.Warrior, hp: 600, ap: 46,
|
uuid: 5103, name: "殉道勇士", path: "hk4", fac: FacSet.HERO, card_lv: 2, lv: 1, type: HType.Melee, grow_type: HGrowType.Warrior, role: HRole.Warrior, hp: 600, ap: 46,
|
||||||
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow3].cd, ccd: 0 } },
|
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0 } },
|
||||||
dead: {
|
dead: {
|
||||||
6301: [
|
6301: [
|
||||||
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 3 } },
|
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 3 } },
|
||||||
@@ -509,7 +490,7 @@ export const HeroInfo: Record<number, heroInfo> = {
|
|||||||
// 5104 圣光祭司 — fstart 全队护盾(更高数值)
|
// 5104 圣光祭司 — fstart 全队护盾(更高数值)
|
||||||
5104: {
|
5104: {
|
||||||
uuid: 5104, name: "圣光祭司", path: "hm3", fac: FacSet.HERO, card_lv: 2, lv: 1, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Mage, hp: 287, ap: 64,
|
uuid: 5104, name: "圣光祭司", path: "hm3", fac: FacSet.HERO, card_lv: 2, lv: 1, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Mage, hp: 287, ap: 64,
|
||||||
skills: { 6013: { uuid: 6013, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow1].cd, ccd: 0 } },
|
skills: { 6013: { uuid: 6013, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0 } },
|
||||||
fstart: {
|
fstart: {
|
||||||
6301: [
|
6301: [
|
||||||
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 3 } },
|
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 3 } },
|
||||||
@@ -522,7 +503,7 @@ export const HeroInfo: Record<number, heroInfo> = {
|
|||||||
// 5105 风怒先知 — field 攻速光环
|
// 5105 风怒先知 — field 攻速光环
|
||||||
5105: {
|
5105: {
|
||||||
uuid: 5105, name: "风怒先知", path: "hm1", fac: FacSet.HERO, card_lv: 2, lv: 1, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Support, hp: 287, ap: 64,
|
uuid: 5105, name: "风怒先知", path: "hm1", fac: FacSet.HERO, card_lv: 2, lv: 1, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Support, hp: 287, ap: 64,
|
||||||
skills: { 6013: { uuid: 6013, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Mid2].cd, ccd: 0 } },
|
skills: { 6013: { uuid: 6013, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0 } },
|
||||||
field: [
|
field: [
|
||||||
{ lv: 1, uuids: [{ uuid: 7006, value: 0.1 }] },
|
{ lv: 1, uuids: [{ uuid: 7006, value: 0.1 }] },
|
||||||
{ lv: 3, uuids: [{ uuid: 7006, value: 0.2 }] },
|
{ lv: 3, uuids: [{ uuid: 7006, value: 0.2 }] },
|
||||||
@@ -533,7 +514,7 @@ export const HeroInfo: Record<number, heroInfo> = {
|
|||||||
// 5106 破甲射手 — atking 自身穿透伤害(计时buff增强)
|
// 5106 破甲射手 — atking 自身穿透伤害(计时buff增强)
|
||||||
5106: {
|
5106: {
|
||||||
uuid: 5106, name: "破甲射手", path: "ha1", fac: FacSet.HERO, card_lv: 2, lv: 1, type: HType.Long, grow_type: HGrowType.Assassin, role: HRole.Archer, hp: 287, ap: 64,
|
uuid: 5106, name: "破甲射手", path: "ha1", fac: FacSet.HERO, card_lv: 2, lv: 1, type: HType.Long, grow_type: HGrowType.Assassin, role: HRole.Archer, hp: 287, ap: 64,
|
||||||
skills: { 6008: { uuid: 6008, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Mid2].cd, ccd: 0 } },
|
skills: { 6008: { uuid: 6008, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Normal].cd, ccd: 0 } },
|
||||||
atking: {
|
atking: {
|
||||||
6512: [
|
6512: [
|
||||||
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7022, buff_value: 5, buff_duration: 5 } },
|
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7022, buff_value: 5, buff_duration: 5 } },
|
||||||
@@ -549,7 +530,7 @@ export const HeroInfo: Record<number, heroInfo> = {
|
|||||||
// 5201 怒血勇士 — atked 全队攻击(范围扩大)
|
// 5201 怒血勇士 — atked 全队攻击(范围扩大)
|
||||||
5201: {
|
5201: {
|
||||||
uuid: 5201, name: "怒血勇士", path: "hk5", fac: FacSet.HERO, card_lv: 3, lv: 1, type: HType.Melee, grow_type: HGrowType.Tank, role: HRole.Tank, hp: 900, ap: 68,
|
uuid: 5201, name: "怒血勇士", path: "hk5", fac: FacSet.HERO, card_lv: 3, lv: 1, type: HType.Melee, grow_type: HGrowType.Tank, role: HRole.Tank, hp: 900, ap: 68,
|
||||||
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow3].cd, ccd: 0 } },
|
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0 } },
|
||||||
atked: {
|
atked: {
|
||||||
6401: [
|
6401: [
|
||||||
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Team, ap: 1 } },
|
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Team, ap: 1 } },
|
||||||
@@ -562,7 +543,7 @@ export const HeroInfo: Record<number, heroInfo> = {
|
|||||||
// 5202 援护射手 — atking 队友攻击(范围扩大)
|
// 5202 援护射手 — atking 队友攻击(范围扩大)
|
||||||
5202: {
|
5202: {
|
||||||
uuid: 5202, name: "援护射手", path: "ha1", fac: FacSet.HERO, card_lv: 3, lv: 1, type: HType.Long, grow_type: HGrowType.Assassin, role: HRole.Archer, hp: 430, ap: 96,
|
uuid: 5202, name: "援护射手", path: "ha1", fac: FacSet.HERO, card_lv: 3, lv: 1, type: HType.Long, grow_type: HGrowType.Assassin, role: HRole.Archer, hp: 430, ap: 96,
|
||||||
skills: { 6008: { uuid: 6008, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Normal2].cd, ccd: 0 } },
|
skills: { 6008: { uuid: 6008, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Normal].cd, ccd: 0 } },
|
||||||
atking: {
|
atking: {
|
||||||
6401: [
|
6401: [
|
||||||
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Team, hit_count: 1, ap: 1 } },
|
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Team, hit_count: 1, ap: 1 } },
|
||||||
@@ -575,7 +556,7 @@ export const HeroInfo: Record<number, heroInfo> = {
|
|||||||
// 5203 传承卫士 — dead 全队生命(范围扩大)
|
// 5203 传承卫士 — dead 全队生命(范围扩大)
|
||||||
5203: {
|
5203: {
|
||||||
uuid: 5203, name: "传承卫士", path: "hk1", fac: FacSet.HERO, card_lv: 3, lv: 1, type: HType.Melee, grow_type: HGrowType.Warrior, role: HRole.Warrior, hp: 900, ap: 68,
|
uuid: 5203, name: "传承卫士", path: "hk1", fac: FacSet.HERO, card_lv: 3, lv: 1, type: HType.Melee, grow_type: HGrowType.Warrior, role: HRole.Warrior, hp: 900, ap: 68,
|
||||||
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow3].cd, ccd: 0 } },
|
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0 } },
|
||||||
dead: {
|
dead: {
|
||||||
6402: [
|
6402: [
|
||||||
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 10 } },
|
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 10 } },
|
||||||
@@ -588,7 +569,7 @@ export const HeroInfo: Record<number, heroInfo> = {
|
|||||||
// 5204 晨光贤者 — fstart 全队暴击(范围扩大)
|
// 5204 晨光贤者 — fstart 全队暴击(范围扩大)
|
||||||
5204: {
|
5204: {
|
||||||
uuid: 5204, name: "晨光贤者", path: "hm2", fac: FacSet.HERO, card_lv: 3, lv: 1, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Mage, hp: 430, ap: 96,
|
uuid: 5204, name: "晨光贤者", path: "hm2", fac: FacSet.HERO, card_lv: 3, lv: 1, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Mage, hp: 430, ap: 96,
|
||||||
skills: { 6013: { uuid: 6013, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Mid3].cd, ccd: 0 } },
|
skills: { 6013: { uuid: 6013, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0 } },
|
||||||
fstart: {
|
fstart: {
|
||||||
6403: [
|
6403: [
|
||||||
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7012, buff_value: 5, buff_duration: 5 } },
|
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7012, buff_value: 5, buff_duration: 5 } },
|
||||||
@@ -601,7 +582,7 @@ export const HeroInfo: Record<number, heroInfo> = {
|
|||||||
// 5205 精准术士 — field 暴击光环(范围扩大)
|
// 5205 精准术士 — field 暴击光环(范围扩大)
|
||||||
5205: {
|
5205: {
|
||||||
uuid: 5205, name: "精准术士", path: "hm3", fac: FacSet.HERO, card_lv: 3, lv: 1, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Support, hp: 430, ap: 96,
|
uuid: 5205, name: "精准术士", path: "hm3", fac: FacSet.HERO, card_lv: 3, lv: 1, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Support, hp: 430, ap: 96,
|
||||||
skills: { 6013: { uuid: 6013, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Mid2].cd, ccd: 0 } },
|
skills: { 6013: { uuid: 6013, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0 } },
|
||||||
field: [
|
field: [
|
||||||
{ lv: 1, uuids: [{ uuid: 7004, value: 0.1 }] },
|
{ lv: 1, uuids: [{ uuid: 7004, value: 0.1 }] },
|
||||||
{ lv: 3, uuids: [{ uuid: 7004, value: 0.2 }] },
|
{ lv: 3, uuids: [{ uuid: 7004, value: 0.2 }] },
|
||||||
@@ -615,7 +596,7 @@ export const HeroInfo: Record<number, heroInfo> = {
|
|||||||
// 5301 复仇守护者 — atked 全队暴击(范围+数值)
|
// 5301 复仇守护者 — atked 全队暴击(范围+数值)
|
||||||
5301: {
|
5301: {
|
||||||
uuid: 5301, name: "复仇守护者", path: "hk2", fac: FacSet.HERO, card_lv: 4, lv: 1, type: HType.Melee, grow_type: HGrowType.Tank, role: HRole.Tank, hp: 1200, ap: 90,
|
uuid: 5301, name: "复仇守护者", path: "hk2", fac: FacSet.HERO, card_lv: 4, lv: 1, type: HType.Melee, grow_type: HGrowType.Tank, role: HRole.Tank, hp: 1200, ap: 90,
|
||||||
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow1].cd, ccd: 0 } },
|
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0 } },
|
||||||
atked: {
|
atked: {
|
||||||
6403: [
|
6403: [
|
||||||
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Team, timed_buff_id: 7012, buff_value: 5, buff_duration: 5 } },
|
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Team, timed_buff_id: 7012, buff_value: 5, buff_duration: 5 } },
|
||||||
@@ -628,7 +609,7 @@ export const HeroInfo: Record<number, heroInfo> = {
|
|||||||
// 5302 破灭游侠 — atking 队友暴伤(范围+数值)
|
// 5302 破灭游侠 — atking 队友暴伤(范围+数值)
|
||||||
5302: {
|
5302: {
|
||||||
uuid: 5302, name: "破灭游侠", path: "ha2", fac: FacSet.HERO, card_lv: 4, lv: 1, type: HType.Long, grow_type: HGrowType.Assassin, role: HRole.Archer, hp: 573, ap: 128,
|
uuid: 5302, name: "破灭游侠", path: "ha2", fac: FacSet.HERO, card_lv: 4, lv: 1, type: HType.Long, grow_type: HGrowType.Assassin, role: HRole.Archer, hp: 573, ap: 128,
|
||||||
skills: { 6008: { uuid: 6008, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Normal1].cd, ccd: 0 } },
|
skills: { 6008: { uuid: 6008, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Normal].cd, ccd: 0 } },
|
||||||
atking: {
|
atking: {
|
||||||
6404: [
|
6404: [
|
||||||
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Team, hit_count: 2, timed_buff_id: 7020, buff_value: 5, buff_duration: 5 } },
|
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Team, hit_count: 2, timed_buff_id: 7020, buff_value: 5, buff_duration: 5 } },
|
||||||
@@ -641,7 +622,7 @@ export const HeroInfo: Record<number, heroInfo> = {
|
|||||||
// 5303 亡语刺客 — dead 全队暴击+暴伤(双效果)
|
// 5303 亡语刺客 — dead 全队暴击+暴伤(双效果)
|
||||||
5303: {
|
5303: {
|
||||||
uuid: 5303, name: "亡语刺客", path: "hc3", fac: FacSet.HERO, card_lv: 4, lv: 1, type: HType.Melee, grow_type: HGrowType.Assassin, role: HRole.Assassin, hp: 1200, ap: 90,
|
uuid: 5303, name: "亡语刺客", path: "hc3", fac: FacSet.HERO, card_lv: 4, lv: 1, type: HType.Melee, grow_type: HGrowType.Assassin, role: HRole.Assassin, hp: 1200, ap: 90,
|
||||||
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Fast3].cd, ccd: 0 } },
|
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Fast].cd, ccd: 0 } },
|
||||||
dead: {
|
dead: {
|
||||||
6403: [
|
6403: [
|
||||||
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7012, buff_value: 5, buff_duration: 5 } },
|
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7012, buff_value: 5, buff_duration: 5 } },
|
||||||
@@ -659,7 +640,7 @@ export const HeroInfo: Record<number, heroInfo> = {
|
|||||||
// 5304 战吼术士 — fstart 全队攻击+生命(双效果)
|
// 5304 战吼术士 — fstart 全队攻击+生命(双效果)
|
||||||
5304: {
|
5304: {
|
||||||
uuid: 5304, name: "战吼术士", path: "hm1", fac: FacSet.HERO, card_lv: 4, lv: 1, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Mage, hp: 573, ap: 128,
|
uuid: 5304, name: "战吼术士", path: "hm1", fac: FacSet.HERO, card_lv: 4, lv: 1, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Mage, hp: 573, ap: 128,
|
||||||
skills: { 6013: { uuid: 6013, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Mid1].cd, ccd: 0 } },
|
skills: { 6013: { uuid: 6013, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0 } },
|
||||||
fstart: {
|
fstart: {
|
||||||
6401: [
|
6401: [
|
||||||
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 5 } },
|
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 5 } },
|
||||||
@@ -677,7 +658,7 @@ export const HeroInfo: Record<number, heroInfo> = {
|
|||||||
// 5305 领域贤者 — field 暴伤+攻速光环(双效果)
|
// 5305 领域贤者 — field 暴伤+攻速光环(双效果)
|
||||||
5305: {
|
5305: {
|
||||||
uuid: 5305, name: "领域贤者", path: "hm2", fac: FacSet.HERO, card_lv: 4, lv: 1, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Support, hp: 573, ap: 128,
|
uuid: 5305, name: "领域贤者", path: "hm2", fac: FacSet.HERO, card_lv: 4, lv: 1, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Support, hp: 573, ap: 128,
|
||||||
skills: { 6013: { uuid: 6013, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Mid2].cd, ccd: 0 } },
|
skills: { 6013: { uuid: 6013, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0 } },
|
||||||
field: [
|
field: [
|
||||||
{ lv: 1, uuids: [{ uuid: 7005, value: 0.2 }, { uuid: 7006, value: 0.1 }] },
|
{ lv: 1, uuids: [{ uuid: 7005, value: 0.2 }, { uuid: 7006, value: 0.1 }] },
|
||||||
{ lv: 3, uuids: [{ uuid: 7005, value: 0.4 }, { uuid: 7006, value: 0.2 }] },
|
{ lv: 3, uuids: [{ uuid: 7005, value: 0.4 }, { uuid: 7006, value: 0.2 }] },
|
||||||
@@ -691,7 +672,7 @@ export const HeroInfo: Record<number, heroInfo> = {
|
|||||||
// 5401 不灭战魂 — atked 攻击 + revive(双技能)
|
// 5401 不灭战魂 — atked 攻击 + revive(双技能)
|
||||||
5401: {
|
5401: {
|
||||||
uuid: 5401, name: "不灭战魂", path: "hk3", fac: FacSet.HERO, card_lv: 5, lv: 1, type: HType.Melee, grow_type: HGrowType.Tank, role: HRole.Tank, hp: 1500, ap: 114,
|
uuid: 5401, name: "不灭战魂", path: "hk3", fac: FacSet.HERO, card_lv: 5, lv: 1, type: HType.Melee, grow_type: HGrowType.Tank, role: HRole.Tank, hp: 1500, ap: 114,
|
||||||
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow3].cd, ccd: 0 } },
|
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0 } },
|
||||||
atked: {
|
atked: {
|
||||||
6401: [
|
6401: [
|
||||||
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Self, ap: 2 } },
|
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Self, ap: 2 } },
|
||||||
@@ -709,7 +690,7 @@ export const HeroInfo: Record<number, heroInfo> = {
|
|||||||
// 5402 战歌游侠 — atking 攻击 + field 攻速光环(双技能)
|
// 5402 战歌游侠 — atking 攻击 + field 攻速光环(双技能)
|
||||||
5402: {
|
5402: {
|
||||||
uuid: 5402, name: "战歌游侠", path: "ha3", fac: FacSet.HERO, card_lv: 5, lv: 1, type: HType.Long, grow_type: HGrowType.Assassin, role: HRole.Archer, hp: 717, ap: 160,
|
uuid: 5402, name: "战歌游侠", path: "ha3", fac: FacSet.HERO, card_lv: 5, lv: 1, type: HType.Long, grow_type: HGrowType.Assassin, role: HRole.Archer, hp: 717, ap: 160,
|
||||||
skills: { 6008: { uuid: 6008, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Fast3].cd, ccd: 0 } },
|
skills: { 6008: { uuid: 6008, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Fast].cd, ccd: 0 } },
|
||||||
atking: {
|
atking: {
|
||||||
6401: [
|
6401: [
|
||||||
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Self, ap: 2 } },
|
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Self, ap: 2 } },
|
||||||
@@ -727,7 +708,7 @@ export const HeroInfo: Record<number, heroInfo> = {
|
|||||||
// 5403 凤凰祭司 — dead 攻击+护盾 + revive(双技能)
|
// 5403 凤凰祭司 — dead 攻击+护盾 + revive(双技能)
|
||||||
5403: {
|
5403: {
|
||||||
uuid: 5403, name: "凤凰祭司", path: "hk4", fac: FacSet.HERO, card_lv: 5, lv: 1, type: HType.Melee, grow_type: HGrowType.Warrior, role: HRole.Warrior, hp: 1500, ap: 114,
|
uuid: 5403, name: "凤凰祭司", path: "hk4", fac: FacSet.HERO, card_lv: 5, lv: 1, type: HType.Melee, grow_type: HGrowType.Warrior, role: HRole.Warrior, hp: 1500, ap: 114,
|
||||||
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow3].cd, ccd: 0 } },
|
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0 } },
|
||||||
dead: {
|
dead: {
|
||||||
6401: [
|
6401: [
|
||||||
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 5 } },
|
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 5 } },
|
||||||
@@ -750,7 +731,7 @@ export const HeroInfo: Record<number, heroInfo> = {
|
|||||||
// 5404 涅槃贤者 — fstart 护盾+攻击 + revive(双技能)
|
// 5404 涅槃贤者 — fstart 护盾+攻击 + revive(双技能)
|
||||||
5404: {
|
5404: {
|
||||||
uuid: 5404, name: "涅槃贤者", path: "hm3", fac: FacSet.HERO, card_lv: 5, lv: 1, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Mage, hp: 717, ap: 160,
|
uuid: 5404, name: "涅槃贤者", path: "hm3", fac: FacSet.HERO, card_lv: 5, lv: 1, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Mage, hp: 717, ap: 160,
|
||||||
skills: { 6013: { uuid: 6013, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Normal3].cd, ccd: 0 } },
|
skills: { 6013: { uuid: 6013, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0 } },
|
||||||
fstart: {
|
fstart: {
|
||||||
6301: [
|
6301: [
|
||||||
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 5 } },
|
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 5 } },
|
||||||
@@ -773,7 +754,7 @@ export const HeroInfo: Record<number, heroInfo> = {
|
|||||||
// 5405 圣言诗人 — atking 治疗 + field 生命光环(双技能)
|
// 5405 圣言诗人 — atking 治疗 + field 生命光环(双技能)
|
||||||
5405: {
|
5405: {
|
||||||
uuid: 5405, name: "圣言诗人", path: "hh1", fac: FacSet.HERO, card_lv: 5, lv: 1, type: HType.Long, grow_type: HGrowType.Support, role: HRole.Support, hp: 717, ap: 160,
|
uuid: 5405, name: "圣言诗人", path: "hh1", fac: FacSet.HERO, card_lv: 5, lv: 1, type: HType.Long, grow_type: HGrowType.Support, role: HRole.Support, hp: 717, ap: 160,
|
||||||
skills: { 6015: { uuid: 6015, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Normal2].cd, ccd: 0 } },
|
skills: { 6015: { uuid: 6015, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Normal].cd, ccd: 0 } },
|
||||||
atking: {
|
atking: {
|
||||||
6302: [
|
6302: [
|
||||||
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Team, ap: 200 } },
|
{ lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Team, ap: 200 } },
|
||||||
@@ -792,7 +773,7 @@ export const HeroInfo: Record<number, heroInfo> = {
|
|||||||
/*
|
/*
|
||||||
*=============怪物配置列表================
|
*=============怪物配置列表================
|
||||||
* 性能基准:1 级怪物与 1 级英雄(card_lv=1)单体性能持平 ——
|
* 性能基准:1 级怪物与 1 级英雄(card_lv=1)单体性能持平 ——
|
||||||
* 近战怪镜像 5001(hp300/ap22/cd1.8),远程怪镜像 5004(hp160/ap28/cd1.3),
|
* 近战怪镜像 5001(hp300/ap22/cd1.20),远程怪镜像 5004(hp160/ap28/cd1.20),
|
||||||
* 重型/Boss 以更高 hp 换取更低 DPS,承担"墙"与"压场"定位。
|
* 重型/Boss 以更高 hp 换取更低 DPS,承担"墙"与"压场"定位。
|
||||||
* 运行时最终属性 = 本表基础值 × RogueConfig.MON_HP_MUL / MON_AP_MUL
|
* 运行时最终属性 = 本表基础值 × RogueConfig.MON_HP_MUL / MON_AP_MUL
|
||||||
* (Boss 额外 × BOSS_HP_BONUS_MUL),校准目标:整场战斗双方对砍 ≈ 30s。
|
* (Boss 额外 × BOSS_HP_BONUS_MUL),校准目标:整场战斗双方对砍 ≈ 30s。
|
||||||
@@ -800,66 +781,67 @@ export const HeroInfo: Record<number, heroInfo> = {
|
|||||||
|
|
||||||
|
|
||||||
// 基础怪物 (全部固定点位站桩攻击,HType仅决定是前排还是后排)
|
// 基础怪物 (全部固定点位站桩攻击,HType仅决定是前排还是后排)
|
||||||
// 前排怪物 — 近战镜像 1 级英雄基准(hp300/ap22/cd1.8),变体微分定位
|
// 前排怪物 — 近战镜像 1 级英雄基准(hp300/ap22/cd1.20),变体微分定位
|
||||||
6001: {
|
6001: {
|
||||||
uuid: 6001, name: "兽人战士", path: "m1", fac: FacSet.MON, lv: 1, type: HType.Melee, monType: MonType.Melee, hp: 300, ap: 22, speed: 70,
|
uuid: 6001, name: "兽人战士", path: "m1", fac: FacSet.MON, lv: 1, type: HType.Melee, monType: MonType.Melee, hp: 300, ap: 22, speed: 70,
|
||||||
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow3].cd, ccd: 0 } }, info: "基础前排怪, 与1级近战英雄持平"
|
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0 } }, info: "基础前排怪, 与1级近战英雄持平"
|
||||||
},
|
},
|
||||||
6002: {
|
6002: {
|
||||||
uuid: 6002, name: "兽人精锐战士", path: "m2", fac: FacSet.MON, lv: 1, type: HType.Melee, monType: MonType.Melee, hp: 340, ap: 26, speed: 110,
|
uuid: 6002, name: "兽人精锐战士", path: "m2", fac: FacSet.MON, lv: 1, type: HType.Melee, monType: MonType.Melee, hp: 340, ap: 26, speed: 110,
|
||||||
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow2].cd, ccd: 0 } }, info: "进阶前排怪, 更快更痛"
|
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0 } }, info: "进阶前排怪, 更快更痛"
|
||||||
},
|
},
|
||||||
6003: {
|
6003: {
|
||||||
uuid: 6003, name: "兽人重装兵", path: "m3", fac: FacSet.MON, lv: 1, type: HType.Melee, monType: MonType.Heavy, hp: 800, ap: 14, speed: 50,
|
uuid: 6003, name: "兽人重装兵", path: "m3", fac: FacSet.MON, lv: 1, type: HType.Melee, monType: MonType.Heavy, hp: 800, ap: 14, speed: 50,
|
||||||
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.VerySlow3].cd, ccd: 0 } }, info: "重型坦克怪, 高HP低攻承伤位"
|
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.VerySlow].cd, ccd: 0 } }, info: "重型坦克怪, 高HP低攻承伤位"
|
||||||
},
|
},
|
||||||
// 后排怪物 — 远程镜像 1 级法师基准(hp160/ap28/cd1.3),变体微分定位
|
// 后排怪物 — 远程镜像 1 级法师基准(hp160/ap28/cd1.20),变体微分定位
|
||||||
6004: {
|
6004: {
|
||||||
uuid: 6004, name: "兽人射手", path: "m4", fac: FacSet.MON, lv: 1, type: HType.Long, monType: MonType.Long, hp: 160, ap: 28, speed: 70,
|
uuid: 6004, name: "兽人射手", path: "m4", fac: FacSet.MON, lv: 1, type: HType.Long, monType: MonType.Long, hp: 160, ap: 28, speed: 70,
|
||||||
skills: { 6008: { uuid: 6008, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Mid3].cd, ccd: 0 } }, info: "后排输出怪, 与1级远程英雄持平"
|
skills: { 6008: { uuid: 6008, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0 } }, info: "后排输出怪, 与1级远程英雄持平"
|
||||||
},
|
},
|
||||||
6005: {
|
6005: {
|
||||||
uuid: 6005, name: "兽人刺客", path: "m5", fac: FacSet.MON, lv: 1, type: HType.Long, monType: MonType.Assassin, hp: 130, ap: 26, speed: 130,
|
uuid: 6005, name: "兽人刺客", path: "m5", fac: FacSet.MON, lv: 1, type: HType.Long, monType: MonType.Assassin, hp: 130, ap: 26, speed: 130,
|
||||||
skills: { 6103: { uuid: 6103, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Normal3].cd, ccd: 0 } }, info: "高攻速低HP刺客"
|
skills: { 6103: { uuid: 6103, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Normal].cd, ccd: 0 } }, info: "高攻速低HP刺客"
|
||||||
},
|
},
|
||||||
// 特殊位怪物
|
// 特殊位怪物
|
||||||
6006: {
|
6006: {
|
||||||
uuid: 6006, name: "骷髅领主", path: "m6", fac: FacSet.MON, lv: 1, type: HType.Melee, monType: MonType.MeleeBoss, hp: 900, ap: 20, speed: 60,
|
uuid: 6006, name: "骷髅领主", path: "m6", fac: FacSet.MON, lv: 1, type: HType.Melee, monType: MonType.MeleeBoss, hp: 900, ap: 20, speed: 60,
|
||||||
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.VerySlow3].cd, ccd: 0 } }, info: "前排MiniBoss级坦克"
|
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.VerySlow].cd, ccd: 0 } }, info: "前排MiniBoss级坦克"
|
||||||
},
|
},
|
||||||
6007: {
|
6007: {
|
||||||
uuid: 6007, name: "兽人术士", path: "m7", fac: FacSet.MON, lv: 1, type: HType.Long, monType: MonType.Support, hp: 240, ap: 18, speed: 70,
|
uuid: 6007, name: "兽人术士", path: "m7", fac: FacSet.MON, lv: 1, type: HType.Long, monType: MonType.Support, hp: 240, ap: 18, speed: 70,
|
||||||
skills: { 6103: { uuid: 6103, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow3].cd, ccd: 0 } }, info: "后排辅助法师怪"
|
skills: { 6103: { uuid: 6103, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0 } }, info: "后排辅助法师怪"
|
||||||
},
|
},
|
||||||
6008: {
|
6008: {
|
||||||
uuid: 6008, name: "兽人火法", path: "m8", fac: FacSet.MON, lv: 1, type: HType.Long, monType: MonType.Summoner, hp: 220, ap: 24, speed: 70,
|
uuid: 6008, name: "兽人火法", path: "m8", fac: FacSet.MON, lv: 1, type: HType.Long, monType: MonType.Summoner, hp: 220, ap: 24, speed: 70,
|
||||||
skills: { 6103: { uuid: 6103, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow1].cd, ccd: 0 } }, info: "后排召唤系法师怪"
|
skills: { 6103: { uuid: 6103, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0 } }, info: "后排召唤系法师怪"
|
||||||
},
|
},
|
||||||
|
|
||||||
// BOSS怪物 — 与6006同基准,以高HP压场,血量经 BOSS_HP_BONUS_MUL 单独放大
|
// BOSS怪物 — 本表 hp/ap 仅作外观/技能档位参考,运行时面板由 RogueConfig 的
|
||||||
|
// BOSS_BASE_HP / BOSS_BASE_AP(初始英雄 2 倍强度)统一决定,不读取本表数值
|
||||||
6101: {
|
6101: {
|
||||||
uuid: 6101, name: "兽人首领-双刀战士", path: "mb1", fac: FacSet.MON, lv: 6, type: HType.Melee, monType: MonType.MeleeBoss, hp: 1200, ap: 24, speed: 120,
|
uuid: 6101, name: "兽人首领-双刀战士", path: "mb1", fac: FacSet.MON, lv: 6, type: HType.Melee, monType: MonType.MeleeBoss, hp: 1200, ap: 24, speed: 120,
|
||||||
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow3].cd, ccd: 0 } }, info: "前排Boss, 攻速型"
|
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0 } }, info: "前排Boss, 攻速型"
|
||||||
},
|
},
|
||||||
6102: {
|
6102: {
|
||||||
uuid: 6102, name: "兽人首领-斧头战士", path: "mb2", fac: FacSet.MON, lv: 6, type: HType.Melee, monType: MonType.MeleeBoss, hp: 1500, ap: 18, speed: 60,
|
uuid: 6102, name: "兽人首领-斧头战士", path: "mb2", fac: FacSet.MON, lv: 6, type: HType.Melee, monType: MonType.MeleeBoss, hp: 1500, ap: 18, speed: 60,
|
||||||
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.VerySlow3].cd, ccd: 0 } }, info: "前排Boss, 超高HP"
|
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.VerySlow].cd, ccd: 0 } }, info: "前排Boss, 超高HP"
|
||||||
},
|
},
|
||||||
6103: {
|
6103: {
|
||||||
uuid: 6103, name: "兽人首领-魔法师", path: "mb3", fac: FacSet.MON, lv: 6, type: HType.Long, monType: MonType.LongBoss, hp: 1000, ap: 28, speed: 110,
|
uuid: 6103, name: "兽人首领-魔法师", path: "mb3", fac: FacSet.MON, lv: 6, type: HType.Long, monType: MonType.LongBoss, hp: 1000, ap: 28, speed: 110,
|
||||||
skills: { 6103: { uuid: 6103, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow1].cd, ccd: 0 } }, info: "后排法系Boss"
|
skills: { 6103: { uuid: 6103, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0 } }, info: "后排法系Boss"
|
||||||
},
|
},
|
||||||
6104: {
|
6104: {
|
||||||
uuid: 6104, name: "兽人首领-射手", path: "mb4", fac: FacSet.MON, lv: 6, type: HType.Long, monType: MonType.LongBoss, hp: 1100, ap: 24, speed: 70,
|
uuid: 6104, name: "兽人首领-射手", path: "mb4", fac: FacSet.MON, lv: 6, type: HType.Long, monType: MonType.LongBoss, hp: 1100, ap: 24, speed: 70,
|
||||||
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow2].cd, ccd: 0 } }, info: "后排位Boss, 均衡型"
|
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0 } }, info: "后排位Boss, 均衡型"
|
||||||
},
|
},
|
||||||
6105: {
|
6105: {
|
||||||
uuid: 6105, name: "亡灵首领-法师", path: "mb5", fac: FacSet.MON, lv: 6, type: HType.Long, monType: MonType.LongBoss, hp: 1000, ap: 30, speed: 110,
|
uuid: 6105, name: "亡灵首领-法师", path: "mb5", fac: FacSet.MON, lv: 6, type: HType.Long, monType: MonType.LongBoss, hp: 1000, ap: 30, speed: 110,
|
||||||
skills: { 6103: { uuid: 6103, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow3].cd, ccd: 0 } }, info: "后排高AP Boss"
|
skills: { 6103: { uuid: 6103, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0 } }, info: "后排高AP Boss"
|
||||||
},
|
},
|
||||||
6106: {
|
6106: {
|
||||||
uuid: 6106, name: "亡灵首领-骑马战士", path: "mb6", fac: FacSet.MON, lv: 6, type: HType.Melee, monType: MonType.MeleeBoss, hp: 1800, ap: 20, speed: 130,
|
uuid: 6106, name: "亡灵首领-骑马战士", path: "mb6", fac: FacSet.MON, lv: 6, type: HType.Melee, monType: MonType.MeleeBoss, hp: 1800, ap: 20, speed: 130,
|
||||||
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.VerySlow3].cd, ccd: 0 } }, info: "前排终极Boss, 最高HP+高速"
|
skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.VerySlow].cd, ccd: 0 } }, info: "前排终极Boss, 最高HP+高速"
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
@@ -952,7 +934,7 @@ export const HeroComboList: number[] = [8001, 8002, 8003, 8004, 8005, 8006];
|
|||||||
* - W_HP: 每 1 点生命值折算 1 分(生命值不随时间变化)
|
* - W_HP: 每 1 点生命值折算 1 分(生命值不随时间变化)
|
||||||
* - W_DPS_PER_SEC: 每 1 点 DPS 持续 1 秒折算 0.5 分
|
* - W_DPS_PER_SEC: 每 1 点 DPS 持续 1 秒折算 0.5 分
|
||||||
* (默认 60 秒评估窗下,1 DPS ≈ 30 分,与旧版 W_DPS=30 等效)
|
* (默认 60 秒评估窗下,1 DPS ≈ 30 分,与旧版 W_DPS=30 等效)
|
||||||
* - WAVE_DURATION / HITS_PER_WAVE: 回合参数,用于估算 atked/fstart/fend/dead 触发次数
|
* - WAVE_DURATION / HITS_PER_WAVE: 回合参数,用于估算 atked/fstart/dead 触发次数
|
||||||
* - DEFAULT_EVAL_SECONDS: calcHeroPower 默认使用的评估时间窗
|
* - DEFAULT_EVAL_SECONDS: calcHeroPower 默认使用的评估时间窗
|
||||||
*/
|
*/
|
||||||
export const HERO_POWER_WEIGHTS = {
|
export const HERO_POWER_WEIGHTS = {
|
||||||
@@ -961,7 +943,6 @@ export const HERO_POWER_WEIGHTS = {
|
|||||||
W_atking: 1.0,
|
W_atking: 1.0,
|
||||||
W_atked: 0.8,
|
W_atked: 0.8,
|
||||||
W_fstart: 1.0,
|
W_fstart: 1.0,
|
||||||
W_fend: 1.2,
|
|
||||||
W_dead: 0.6,
|
W_dead: 0.6,
|
||||||
W_field_alive: 1.0,
|
W_field_alive: 1.0,
|
||||||
W_revive: 1.0,
|
W_revive: 1.0,
|
||||||
@@ -1085,7 +1066,6 @@ function getTriggerCount(
|
|||||||
case SkillTriggerType.Atked:
|
case SkillTriggerType.Atked:
|
||||||
return getHitCount(seconds) / t_num;
|
return getHitCount(seconds) / t_num;
|
||||||
case SkillTriggerType.FStart:
|
case SkillTriggerType.FStart:
|
||||||
case SkillTriggerType.FEnd:
|
|
||||||
return getWaveCount(seconds);
|
return getWaveCount(seconds);
|
||||||
case SkillTriggerType.Dead:
|
case SkillTriggerType.Dead:
|
||||||
return getWaveCount(seconds) * (1 + (resolveReviveByLv(hero.revive, FightSet.HERO_MAX_LV)?.r_num || 0));
|
return getWaveCount(seconds) * (1 + (resolveReviveByLv(hero.revive, FightSet.HERO_MAX_LV)?.r_num || 0));
|
||||||
@@ -1217,7 +1197,6 @@ export interface HeroPowerBreakdown {
|
|||||||
atking: number;
|
atking: number;
|
||||||
atked: number;
|
atked: number;
|
||||||
fstart: number;
|
fstart: number;
|
||||||
fend: number;
|
|
||||||
dead: number;
|
dead: number;
|
||||||
field: number;
|
field: number;
|
||||||
revive: number;
|
revive: number;
|
||||||
@@ -1232,7 +1211,7 @@ export interface HeroPowerDetailed {
|
|||||||
normalAttack: { s_uuid: number, name: string, cd: number, dps: number, value: number };
|
normalAttack: { s_uuid: number, name: string, cd: number, dps: number, value: number };
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 计算普通触发类技能(atking/atked/fstart/fend/dead)的详细价值 */
|
/** 计算普通触发类技能(atking/atked/fstart/dead)的详细价值 */
|
||||||
function calcTriggerPowerDetailed(
|
function calcTriggerPowerDetailed(
|
||||||
triggerConfigs: { s_uuid: number, t_num?: number, overrides?: SkillOverrides }[],
|
triggerConfigs: { s_uuid: number, t_num?: number, overrides?: SkillOverrides }[],
|
||||||
hero: heroInfo,
|
hero: heroInfo,
|
||||||
@@ -1266,9 +1245,6 @@ function calcTriggerPowerDetailed(
|
|||||||
case SkillTriggerType.FStart:
|
case SkillTriggerType.FStart:
|
||||||
weight = weights.W_fstart;
|
weight = weights.W_fstart;
|
||||||
break;
|
break;
|
||||||
case SkillTriggerType.FEnd:
|
|
||||||
weight = weights.W_fend;
|
|
||||||
break;
|
|
||||||
case SkillTriggerType.Dead:
|
case SkillTriggerType.Dead:
|
||||||
weight = weights.W_dead;
|
weight = weights.W_dead;
|
||||||
break;
|
break;
|
||||||
@@ -1365,7 +1341,6 @@ 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 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 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 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 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 fieldEntries = resolveFieldByLv(hero.field, targetLv);
|
||||||
const field = fieldEntries.length > 0 ? calcFieldPowerDetailed(fieldEntries, hero, targetLv, seconds) : { total: 0, items: [] as FieldSkillEval[] };
|
const field = fieldEntries.length > 0 ? calcFieldPowerDetailed(fieldEntries, hero, targetLv, seconds) : { total: 0, items: [] as FieldSkillEval[] };
|
||||||
@@ -1376,7 +1351,7 @@ export function calcHeroPowerDetailed(hero: heroInfo, targetLv: number = 1, seco
|
|||||||
reviveValue = hpEff * revive.upr * revive.r_num * weights.W_revive * getWaveCount(seconds);
|
reviveValue = hpEff * revive.upr * revive.r_num * weights.W_revive * getWaveCount(seconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
const total = hpValue + dpsValue + atking.total + atked.total + fstart.total + fend.total + dead.total + field.total + reviveValue;
|
const total = hpValue + dpsValue + atking.total + atked.total + fstart.total + dead.total + field.total + reviveValue;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
total,
|
total,
|
||||||
@@ -1386,12 +1361,11 @@ export function calcHeroPowerDetailed(hero: heroInfo, targetLv: number = 1, seco
|
|||||||
atking: atking.total,
|
atking: atking.total,
|
||||||
atked: atked.total,
|
atked: atked.total,
|
||||||
fstart: fstart.total,
|
fstart: fstart.total,
|
||||||
fend: fend.total,
|
|
||||||
dead: dead.total,
|
dead: dead.total,
|
||||||
field: field.total,
|
field: field.total,
|
||||||
revive: reviveValue,
|
revive: reviveValue,
|
||||||
},
|
},
|
||||||
triggerSkills: [...atking.items, ...atked.items, ...fstart.items, ...fend.items, ...dead.items],
|
triggerSkills: [...atking.items, ...atked.items, ...fstart.items, ...dead.items],
|
||||||
fieldSkills: field.items,
|
fieldSkills: field.items,
|
||||||
normalAttack,
|
normalAttack,
|
||||||
};
|
};
|
||||||
|
|||||||
361
assets/script/game/common/config/几何王国技能复刻方案.md
Normal file
361
assets/script/game/common/config/几何王国技能复刻方案.md
Normal file
@@ -0,0 +1,361 @@
|
|||||||
|
# 几何王国技能复刻设计文档
|
||||||
|
|
||||||
|
> **目的**:基于《几何王国》热门英雄技能,分析哪些可以**零代码改动**或**最小改动**复刻到本系统(1 回合定生死机制)。
|
||||||
|
>
|
||||||
|
> **前置约束**(已确认的设计原则):
|
||||||
|
> - 局内固定 lv=1,等级成长移交局外
|
||||||
|
> - 单场战斗 30 秒
|
||||||
|
> - card_lv 纯技能数量差异(1~5 个技能槽)
|
||||||
|
> - 技能触发极简(`t_num=1`),高频高数值
|
||||||
|
> - 无相同能力英雄,无阵容限制
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 一、本系统可复用的"触发骨架"
|
||||||
|
|
||||||
|
| 触发类型 | 枚举 | 语义 | 几何王国对应场景 |
|
||||||
|
|---|---|---|---|
|
||||||
|
| 战斗开始 | `SkillTriggerType.FStart` | 入场时触发 1 次 | 战吼、入场护盾 |
|
||||||
|
| 战斗结束 | `SkillTriggerType.FEnd` | 战斗胜利后触发 | (30s 短局意义弱) |
|
||||||
|
| 召唤入场 | `SkillTriggerType.Call` | 落地触发 1 次 | 登场技 |
|
||||||
|
| 死亡触发 | `SkillTriggerType.Dead` | 死亡时触发 1 次 | 亡语、遗志 |
|
||||||
|
| 攻击触发 | `SkillTriggerType.Atking` | 普攻 N 次触发 | 概率普攻特效(t_num 模拟概率) |
|
||||||
|
| 受击触发 | `SkillTriggerType.Atked` | 被击 N 次触发 | 受击反击、叠甲 |
|
||||||
|
| 驻场光环 | `SkillTriggerType.Field` | 存活期间全局生效 | 光环类(移速/攻击/回血) |
|
||||||
|
| 复活 | `SkillTriggerType.Revive` | 死亡后复活 | 凤凰涅槃、尸骸存活 |
|
||||||
|
|
||||||
|
> **概率模拟技巧**:本系统无"概率触发"概念,用 `t_num` 计数模拟。
|
||||||
|
> - `t_num=1`:每次普攻都触发(最高频)
|
||||||
|
> - `t_num=3`:≈33% 概率
|
||||||
|
> - `t_num=4`:≈25% 概率(对应几何王国的"30% 概率")
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 二、本系统可复用的"效果骨架"
|
||||||
|
|
||||||
|
### 2.1 SkillKind(技能主效果)
|
||||||
|
|
||||||
|
| 类型 | 字段 | 几何王国对应 |
|
||||||
|
|---|---|---|
|
||||||
|
| `SkillKind.Damage` | `ap` 百分比伤害 | 大招、战技伤害 |
|
||||||
|
| `SkillKind.Heal` | `ap` 治疗量 | 治疗、吸血 |
|
||||||
|
| `SkillKind.Shield` | `ap` 护盾层数(数值减免) | 暗光之盾、守护壁垒 |
|
||||||
|
| `SkillKind.Support` | `buff_type` + `timed_buff_id` | 属性强化、限时增益 |
|
||||||
|
| `SkillKind.Gold` | `gold` 金币数 | (本局不适用) |
|
||||||
|
|
||||||
|
### 2.2 击杀特效字段
|
||||||
|
|
||||||
|
| 字段 | 含义 | 几何王国对应 |
|
||||||
|
|---|---|---|
|
||||||
|
| `crt` | 额外暴击率 | 致命一击 |
|
||||||
|
| `frz` | 额外冰冻概率 | 寒冰攻击 |
|
||||||
|
| `stun` | 额外击晕概率 | 眩晕 |
|
||||||
|
| `bck` | 击退距离增量 | 击退(雷霆一击、剑刃风暴) |
|
||||||
|
| `hit_count` | 命中目标数 | 多段攻击(乱棍、剑刃风暴) |
|
||||||
|
| `puncture_chance` | 穿透概率 | 穿透(暗器大师) |
|
||||||
|
|
||||||
|
### 2.3 BuffList 已有 DoT / HoT / 控制
|
||||||
|
|
||||||
|
| Buff ID | 名称 | 类型 | 几何王国对应 |
|
||||||
|
|---|---|---|---|
|
||||||
|
| 7002 | 灼烧 | Debuff DoT(-10 伤害/0.5s,吃 30% 攻击加成) | 剧毒利刃、火系持续伤害 |
|
||||||
|
| 7003 | 冰冻 | Control(2s) | 冰冻 |
|
||||||
|
| 7004 | 击晕 | Control(2s) | 眩晕、沉默(替代) |
|
||||||
|
| 7010 | 再生 | Buff HoT(+10 治疗/0.5s) | 持续回血 |
|
||||||
|
| 7011 | 攻击爆发 | Buff(+50% 攻击 5s) | 大圣归来、剑圣 1 觉 |
|
||||||
|
| 7012 | 暴击爆发 | Buff(+30% 暴击 5s) | 暴击强化 |
|
||||||
|
| 7017 | 击晕爆发 | Buff(+30% 击晕 5s) | 群体眩晕强化 |
|
||||||
|
| 7111 | 战前强攻 | Buff(+30 攻击 5s) | 开场增益 |
|
||||||
|
|
||||||
|
### 2.4 FieldSkillType 已有光环
|
||||||
|
|
||||||
|
| 类型 | 几何王国对应 |
|
||||||
|
|---|---|
|
||||||
|
| `HeroAtk` | 攻击光环(人鱼公主、邪恶光环) |
|
||||||
|
| `HeroCrit` / `HeroCritDamage` | 暴击光环 |
|
||||||
|
| `HeroSpeed` | 攻速光环 |
|
||||||
|
| `HeroHp` | 生命光环 |
|
||||||
|
| `HeroStun` / `HeroWindFury` / `HeroPuncture` | 特殊光环 |
|
||||||
|
| `WaveHeal` | 战后回血(30s 短局可改为局内 HoT) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 三、可直接复刻(零代码改动)
|
||||||
|
|
||||||
|
> 仅通过 `heroSet.ts` 配置 + 复用现有 SkillSet / BuffList 即可实现。
|
||||||
|
|
||||||
|
### 3.1 剧毒女王(Mage,复刻"深渊女王·剧毒利刃")
|
||||||
|
|
||||||
|
**核心机制**:普攻触发灼烧 DoT,叠加毒伤害。
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
[SkillTriggerType.Atking]: {
|
||||||
|
// 每次普攻上灼烧 DoT(已存在 BuffList 7002)
|
||||||
|
6101: [{ lv: 1, t_num: 1, overrides: { timed_buff_id: 7002, buff_duration: 5 } }],
|
||||||
|
},
|
||||||
|
```
|
||||||
|
|
||||||
|
**复刻自**:深渊女王·剧毒利刃(普攻 30% 概率 200% 法伤 + 减益)。
|
||||||
|
**适配调整**:30s 战斗节奏快,`t_num=1` 100% 触发,但单层 DoT 数值调低以平衡。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 3.2 猴王·乱棍(Assassin,复刻"至尊宝·大圣归来")
|
||||||
|
|
||||||
|
**核心机制**:普攻触发多段伤害+击晕。
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
[SkillTriggerType.Atking]: {
|
||||||
|
// 每次普攻触发 4 段 30% 伤害 + 高击晕
|
||||||
|
6006: [{ lv: 1, t_num: 1, overrides: { ap: 30, hit_count: 4, stun: 30 } }],
|
||||||
|
},
|
||||||
|
```
|
||||||
|
|
||||||
|
**复刻自**:至尊宝·大圣归来(乱棍 4 次 ×30% 物伤 + 眩晕)。
|
||||||
|
**适配调整**:去除"召唤虚影+攻击+25%"(与本系统能量体系冲突),保留多段+击晕核心。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 3.3 剑圣·疾风(Warrior,复刻"剑圣·剑刃风暴+吸血面罩")
|
||||||
|
|
||||||
|
**核心机制**:高伤范围 + 击退 + 普攻吸血。
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
[SkillTriggerType.Atking]: {
|
||||||
|
// 普攻触发 360% 范围伤害 + 击退
|
||||||
|
6201: [{ lv: 1, t_num: 1, overrides: { ap: 150, bck: 30 } }],
|
||||||
|
// 普攻吸血 35%
|
||||||
|
6302: [{ lv: 1, t_num: 1, overrides: { TGroup: TGroup.Self, ap: 35 } }],
|
||||||
|
},
|
||||||
|
```
|
||||||
|
|
||||||
|
**复刻自**:剑圣·剑刃风暴(360% 物伤 + 击退) + 吸血面罩(普攻 35% 吸血)。
|
||||||
|
**适配调整**:`t_num=1` 高频触发,单场 30s 内吸血量需调平衡。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 3.4 壁垒贤者(Support,复刻"哀木涕·守护壁垒")
|
||||||
|
|
||||||
|
**核心机制**:开场全队护盾 + 驻场生命光环。
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
[SkillTriggerType.FStart]: {
|
||||||
|
// 开场全队护盾(数值减免型)
|
||||||
|
6301: [{ lv: 1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 5 } }],
|
||||||
|
},
|
||||||
|
[SkillTriggerType.Field]: [
|
||||||
|
// 驻场生命光环
|
||||||
|
{ lv: 1, s_uuid: 7007, value: 15 }, // +15% 最大生命
|
||||||
|
],
|
||||||
|
```
|
||||||
|
|
||||||
|
**复刻自**:哀木涕·守护壁垒(开场 10% 最大生命护盾 + 防御光环)。
|
||||||
|
**适配调整**:本系统护盾是"数值减免"非"层数",ap 字段意义不同,需重新校准数值。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 3.5 凤凰祭司(Warrior,复刻"死亡守护 + 复活")
|
||||||
|
|
||||||
|
**核心机制**:死亡时为最低血友军回血 + 自身可复活。
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
[SkillTriggerType.Dead]: {
|
||||||
|
// 死亡守护:死亡时为最低血友军回血
|
||||||
|
6302: [{ lv: 1, t_num: 1, overrides: { ap: 50 } }],
|
||||||
|
},
|
||||||
|
[SkillTriggerType.Revive]: [
|
||||||
|
// 复活:死亡后 1 次 50% 血复活
|
||||||
|
{ lv: 1, s_uuid: 6501, r_num: 1, upr: 50 },
|
||||||
|
],
|
||||||
|
```
|
||||||
|
|
||||||
|
**复刻自**:通用觉醒·死亡守护(10% 最大生命回血) + 黑暗骑士 3 觉(尸骸存活)。
|
||||||
|
**适配调整**:30s 战斗中复活价值高,`r_num=1` 限定 1 次。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 3.6 暗影骑士(Tank,复刻"黑暗骑士·死亡缠绕")
|
||||||
|
|
||||||
|
**核心机制**:普攻治疗血少友军 + 受击反击自盾。
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
[SkillTriggerType.Atking]: {
|
||||||
|
// 普攻触发治疗(自动选血量最低友方,引擎已支持)
|
||||||
|
6302: [{ lv: 1, t_num: 1, overrides: { ap: 220 } }],
|
||||||
|
},
|
||||||
|
[SkillTriggerType.Atked]: {
|
||||||
|
// 受击触发自身护盾
|
||||||
|
6301: [{ lv: 1, t_num: 1, overrides: { TGroup: TGroup.Self, ap: 3 } }],
|
||||||
|
},
|
||||||
|
```
|
||||||
|
|
||||||
|
**复刻自**:黑暗骑士·死亡缠绕(普攻 25% 概率 220% 真伤/治疗友方)。
|
||||||
|
**适配调整**:本系统暂无"真伤",用高治疗量替代。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 3.7 风暴歌者(Mage,复刻"深渊女王·超声波")
|
||||||
|
|
||||||
|
**核心机制**:范围伤害 + 群体击退。
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
[SkillTriggerType.Atking]: {
|
||||||
|
// 范围伤害 + 群体击退
|
||||||
|
6201: [{ lv: 1, t_num: 1, overrides: { ap: 200, bck: 50, hit_count: 6 } }],
|
||||||
|
},
|
||||||
|
```
|
||||||
|
|
||||||
|
**复刻自**:深渊女王·超声波(伤害 + 击退控制)。
|
||||||
|
**适配调整**:`bck` 字段直接对应击退距离增量,无需新增机制。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 3.8 战吼先锋(Warrior,复刻"光明骑士·光明守护")
|
||||||
|
|
||||||
|
**核心机制**:开场全队增益 + 持续回血。
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
[SkillTriggerType.FStart]: {
|
||||||
|
// 开场全队攻击强化
|
||||||
|
6401: [{ lv: 1, t_num: 1, overrides: { ap: 30 } }],
|
||||||
|
// 开场全队持续回血
|
||||||
|
6502: [{ lv: 1, t_num: 1, overrides: { timed_buff_id: 7010, buff_duration: 10 } }],
|
||||||
|
},
|
||||||
|
```
|
||||||
|
|
||||||
|
**复刻自**:光明骑士·光明守护(清异常 + 加防 + 持续治疗)。
|
||||||
|
**适配调整**:本系统无"解控"概念,30s 战斗也不需要,改为纯增益 + HoT。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 四、需要小幅扩展即可复刻
|
||||||
|
|
||||||
|
### 4.1 反伤罗刹(Tank,复刻"剑豪·罗生门")
|
||||||
|
|
||||||
|
**缺失机制**:本系统无"反伤"属性。
|
||||||
|
|
||||||
|
**扩展方案**:
|
||||||
|
1. `HeroAttrs.ts` 的 `Attrs` 枚举新增 `thorns = "thorns"`(反伤数值)
|
||||||
|
2. `HeroAttrsComp.ts` 新增字段 `thorns: number = 0`
|
||||||
|
3. 战斗结算时,受击方对攻击者造成 `thorns` 点固定伤害
|
||||||
|
4. `SkillConfig` 新增 `thorns?: number` 用于 Support 技能附加反伤 buff
|
||||||
|
|
||||||
|
**复刻配置**:
|
||||||
|
```typescript
|
||||||
|
[SkillTriggerType.Atked]: {
|
||||||
|
// 受击触发护盾 + 反伤 buff(5s 内反伤 30 点)
|
||||||
|
6301: [{ lv: 1, t_num: 1, overrides: { ap: 5 } }],
|
||||||
|
6401: [{ lv: 1, t_num: 1, overrides: { buff_type: Attrs.thorns, timed_buff_id: 7030 } }],
|
||||||
|
},
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 4.2 真伤刺客(Assassin,复刻"玉面狐妖·真伤")
|
||||||
|
|
||||||
|
**缺失机制**:本系统伤害公式只支持 `ap × 系数`,无"按目标最大生命百分比伤害"。
|
||||||
|
|
||||||
|
**扩展方案**:
|
||||||
|
1. `SkillConfig` 新增 `target_hp_pct?: number`(按目标最大生命百分比扣血)
|
||||||
|
2. 伤害结算时,若技能含此字段,额外造成 `target.hp_max × target_hp_pct / 100` 伤害
|
||||||
|
|
||||||
|
**复刻配置**:
|
||||||
|
```typescript
|
||||||
|
[SkillTriggerType.Atking]: {
|
||||||
|
// 普攻附带 3% 目标最大生命真伤
|
||||||
|
6001: [{ lv: 1, t_num: 1, overrides: { ap: 100, /* 需新增 target_hp_pct: 3 */ } }],
|
||||||
|
},
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 4.3 重伤诅咒(Mage,复刻"巫妖王·重伤")
|
||||||
|
|
||||||
|
**缺失机制**:本系统无"降低治疗效果"属性。
|
||||||
|
|
||||||
|
**扩展方案**:
|
||||||
|
1. `Attrs` 新增 `heal_reduce = "heal_reduce"`(百分比降低受治疗)
|
||||||
|
2. 治疗结算时,实际治疗量 = 原治疗量 × (1 - heal_reduce/100)
|
||||||
|
|
||||||
|
**复刻配置**:
|
||||||
|
```typescript
|
||||||
|
[SkillTriggerType.Atking]: {
|
||||||
|
// 普攻附带重伤 debuff(敌方受治疗 -50%)
|
||||||
|
6101: [{ lv: 1, t_num: 1, overrides: { /* 需新增 heal_reduce 机制 */ } }],
|
||||||
|
},
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 五、不建议复刻
|
||||||
|
|
||||||
|
| 类型 | 代表技能 | 原因 |
|
||||||
|
|---|---|---|
|
||||||
|
| **能量/大招系统** | 所有英雄的"大招" | 本系统无能量条,技能全靠触发器,无法承载"释放大招"概念 |
|
||||||
|
| **解控** | 光明洗礼、暗黑盾解控 | 30s 战斗节奏快,控制时间仅 2~3s,解控价值极低 |
|
||||||
|
| **多段位移/分身** | 炼狱鬼斩、大圣虚影 | 视觉表现层复杂,ECS 弹道模型难承载"幻影穿梭" |
|
||||||
|
| **沉默 / 减能** | 潮壮壮、海拉 | 本系统无主动技能,沉默无目标可作用 |
|
||||||
|
| **长期叠层** | 剑圣 1 觉(30% 防御转攻击,永久) | 30s 战斗内永久叠层易失衡 |
|
||||||
|
| **按当前生命%伤害** | 女王尖啸(18% 当前生命) | 与"按最大生命%"相比,30s 短局内波动过大,难平衡 |
|
||||||
|
| **击退抗性 / 减速抗性** | 剑豪红武、酒仙 | 本系统已有 `knockback_res`,但减速概念不存在 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 六、复刻优先级矩阵
|
||||||
|
|
||||||
|
| 优先级 | 英雄 | 复刻难度 | 设计价值 |
|
||||||
|
|---|---|---|---|
|
||||||
|
| **P0(必做)** | 剧毒女王 | ✅ 零代码 | 引入 DoT 体系,丰富伤害维度 |
|
||||||
|
| **P0** | 猴王·乱棍 | ✅ 零代码 | 多段伤害+击晕,近战核心 |
|
||||||
|
| **P0** | 剑圣·疾风 | ✅ 零代码 | 范围+击退+吸血,全能战士 |
|
||||||
|
| **P1(推荐)** | 壁垒贤者 | ✅ 零代码 | 团队防御核心 |
|
||||||
|
| **P1** | 凤凰祭司 | ✅ 零代码 | 复活机制已有,强化死亡触发 |
|
||||||
|
| **P1** | 暗影骑士 | ✅ 零代码 | 治疗型坦克,差异化定位 |
|
||||||
|
| **P2(可选)** | 风暴歌者 | ✅ 零代码 | 范围控制,与剧毒女王互补 |
|
||||||
|
| **P2** | 战吼先锋 | ✅ 零代码 | 开场增益,节奏型辅助 |
|
||||||
|
| **P3(扩展后做)** | 反伤罗刹 | ⚙️ 需新增 thorns | 反伤 META,针对高攻速敌人 |
|
||||||
|
| **P3** | 真伤刺客 | ⚙️ 需新增 target_hp_pct | 针对高血量 Boss |
|
||||||
|
| **P3** | 重伤诅咒 | ⚙️ 需新增 heal_reduce | 针对治疗队 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 七、新增机制工作量评估
|
||||||
|
|
||||||
|
| 机制 | 改动文件 | 改动量 | 风险 |
|
||||||
|
|---|---|---|---|
|
||||||
|
| **反伤 thorns** | HeroAttrs.ts + HeroAttrsComp.ts + 战斗结算 | ~50 行 | 低(独立属性) |
|
||||||
|
| **按最大生命%伤害** | SkillSet.ts + 伤害结算 | ~30 行 | 低(额外乘区) |
|
||||||
|
| **减疗 heal_reduce** | HeroAttrs.ts + HeroAttrsComp.ts + 治疗结算 | ~40 行 | 低(独立乘区) |
|
||||||
|
| **敌方 Support 技能** | SCastSystem.ts | ~20 行 | 中(需测试目标选择) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 八、与原"20 回合制"的兼容性
|
||||||
|
|
||||||
|
本设计文档基于 **1 回合定生死** 机制,所有数值均按 **30 秒战斗窗口** 校准:
|
||||||
|
|
||||||
|
- `t_num=1` 触发:30s 内普攻 30~50 次,技能触发 30~50 次
|
||||||
|
- DoT/HoT 持续 5s:覆盖 1/6 战斗时长,效果显著但不至于"挂上就赢"
|
||||||
|
- 复活 `r_num=1`:单场战斗最多 1 次,价值极高但可控
|
||||||
|
- 驻场光环 `value=15%`:30s 内持续生效,等价于"永久"(单场)
|
||||||
|
|
||||||
|
若未来回归多回合制,需重新校准:
|
||||||
|
- `t_num` 提高到 2~4(降低触发频率)
|
||||||
|
- DoT/HoT 持续时间延长至 10~15s
|
||||||
|
- 复活次数可放开到 2~3 次
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 九、下一步行动
|
||||||
|
|
||||||
|
1. **确认 P0 英雄清单**:是否按本方案复刻 8 个英雄?
|
||||||
|
2. **数值校准**:是否需要先用 `calcHeroPower` 公式推导每个英雄的目标强度锚点?
|
||||||
|
3. **新增机制决策**:是否在第 1 阶段引入反伤/真伤/减疗?还是先纯配置复刻?
|
||||||
|
4. **编写 heroSet.ts 配置**:确认后我可以直接输出可粘贴的 TypeScript 配置代码。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**文档版本**:v1.0
|
||||||
|
**创建日期**:2026-08-14
|
||||||
|
**作者**:AI Assistant
|
||||||
|
**关联文档**:[heroSet.ts](./heroSet.ts) / [SkillSet.ts](./SkillSet.ts) / [BuffSet.ts](./BuffSet.ts) / [几何王国英雄技能汇总.md](./几何王国英雄技能汇总.md)
|
||||||
11
assets/script/game/common/config/几何王国技能复刻方案.md.meta
Normal file
11
assets/script/game/common/config/几何王国技能复刻方案.md.meta
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.0.1",
|
||||||
|
"importer": "text",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "4b91da8c-0510-4f36-a3f7-b78ec260c1f9",
|
||||||
|
"files": [
|
||||||
|
".json"
|
||||||
|
],
|
||||||
|
"subMetas": {},
|
||||||
|
"userData": {}
|
||||||
|
}
|
||||||
199
assets/script/game/common/config/几何王国英雄技能汇总.md
Normal file
199
assets/script/game/common/config/几何王国英雄技能汇总.md
Normal file
@@ -0,0 +1,199 @@
|
|||||||
|
# 《几何王国》(微信小游戏)英雄技能汇总
|
||||||
|
|
||||||
|
> **资料说明**:本作暂无官方公开的完整技能数据库,以下内容整理自玩家攻略站、公众号「英雄解析」系列、社区讨论等公开资料(来源见文末)。技能数值可能随版本更新调整,请以游戏内实际为准。游戏现有 45+ 英雄,本文收录主流热门英雄。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 一、技能体系说明
|
||||||
|
|
||||||
|
每个英雄的技能按养成线逐步解锁 [^7^][^27^]:
|
||||||
|
|
||||||
|
| 解锁节点 | 技能类型 |
|
||||||
|
|---|---|
|
||||||
|
| 初始 | 大招(主动技能) |
|
||||||
|
| 2 星 | 战技技能 |
|
||||||
|
| 5 星 | 强化技能 |
|
||||||
|
| 8 星 | 特技技能 |
|
||||||
|
| 12 星 | 属性技能 |
|
||||||
|
| 16 星 | 强化技能 |
|
||||||
|
| 觉醒 | 一觉 ~ 四觉(部分为通用技能池) |
|
||||||
|
| 神器 | 紫 / 黄 / 红 / 彩 四档神器加成 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 二、热门英雄详细技能
|
||||||
|
|
||||||
|
### 1. 黑暗骑士(神话 · 前排主坦,版本必备)
|
||||||
|
|
||||||
|
- **大招「暗光之盾」**:释放无视控制;获得 8% 最大生命值的护盾并转化为生命(持续 7 秒),其中 5% 作用于队友;提供 20% 减速抗性 [^18^]
|
||||||
|
- **缠绕(死亡缠绕)**:普攻有 25% 几率对全场血量最低的目标施放——敌方目标受到 220%(+10% 神器增强)真实伤害,友方目标回复等量生命 [^18^][^75^]
|
||||||
|
- **暗黑盾**:解除控制,且附带击退效果 [^18^]
|
||||||
|
- **神器「霜之暗斧」**:叠加 3 层可沉默敌方前排并减速 [^18^]
|
||||||
|
- **彩色神器「邪恶光环」**:+8% 移动速度光环 + 少量回复 [^18^]
|
||||||
|
- **觉醒**:1 觉全队 +10% 魔抗;3 觉阵亡后以尸体状态存活 3.5 秒,为后排争取输出时间 [^18^]
|
||||||
|
- **定位评价**:目前版本最全面的前排,治疗、推进、解控兼具,基本是必备品 [^18^]
|
||||||
|
|
||||||
|
### 2. 光明骑士(神话 · 前排辅助)
|
||||||
|
|
||||||
|
- **大招「光明守护」**:释放无视控制,清除全队异常状态;全队 +30% 防御、+10% 能量回复速度;每秒 35% 攻击力的治疗,持续 7 秒 [^18^]
|
||||||
|
- **圣洁之锤**:120% 真实伤害,伤害的 70% 转化为自身治疗 [^18^]
|
||||||
|
- **光明洗礼**:每 6 秒触发一次,为 2 名队友解除异常状态(可解沉默、控制、减攻等)[^18^]
|
||||||
|
- **彩色神器「圣域守护」**:减少敌方 20% 攻速、10% 移速;每 10 秒给队友单体释放光明守护 [^18^]
|
||||||
|
|
||||||
|
### 3. 剑圣(神话 · 前排输出)
|
||||||
|
|
||||||
|
- **大招「剑刃风暴」**:360% 物理伤害,击退所有角色,附带 6 秒 20% 重伤 [^68^]
|
||||||
|
- **战技「致命一击」**:普攻 35% 几率造成 1.5~2.2 倍真实伤害 [^68^]
|
||||||
|
- **分身斩**:每隔一段时间造成 5 次伤害 [^68^]
|
||||||
|
- **觉醒**:1 觉将 30% 防御转换为攻击;3 觉普攻随机降低对方攻击 [^68^]
|
||||||
|
- **评价**:免疫技能、群体击退,能聚集敌方后排利于己方 AOE;但伤害多为打前排的"无效输出",定位偏功能性抗伤 + 击退 [^68^]
|
||||||
|
|
||||||
|
### 4. 酒仙(神话 · 为推进而生)
|
||||||
|
|
||||||
|
- **风暴战士**:清除负面效果,击退抗性 +100%,伤害减免 30%(无法减免真伤),75% 免控 [^68^]
|
||||||
|
- **雷霆一击**:普攻 30% 概率使范围内敌人全体减速并强力击退 [^68^]
|
||||||
|
- **酒雾火焰**:每隔一段时间造成伤害并附加 5 秒 50% 重伤效果 [^68^]
|
||||||
|
- **觉醒**:1 觉普攻随机降低目标 6% 攻击或 10% 防御;3 觉血量低于 50% 时,5 秒免疫魔法或物理伤害 [^68^]
|
||||||
|
|
||||||
|
### 5. 剑豪(前排战士 · 针对射手/物理队)
|
||||||
|
|
||||||
|
作用:输出 + 沉默 + 减攻 + 减退抗 + 反伤;BUFF/DEBUFF 全面,进可攻退可守,缺点是缺少硬控 [^7^]
|
||||||
|
|
||||||
|
- **大招「炼狱鬼斩」**:制造幻影在战场穿梭发动 6 次斩击,每次 360% 攻击的物理伤害并附带击退,每个目标至多承受 3 次,优先斩击物理伤害单位 [^7^]
|
||||||
|
- **2 星战技「三十六烦恼凤」**:每 10 秒释放剑气攻击敌方能量最高单位,500% 物理伤害 + 沉默 1.5 秒(可抢第一波大招先手)[^7^]
|
||||||
|
- **5 星强化「强化斩击」**:大招命中攻击高于自己的目标时,降低其 15% 攻击 6 秒 [^7^]
|
||||||
|
- **8 星特技「罗生门」**:每累计损失 25% 最大生命,生成剑门屏障,抵消 18% 伤害 + 25% 反伤,持续 4 秒,无冷却(核心技能)[^7^]
|
||||||
|
- **12 星「武装色霸气」**:攻击 +10%、生命 +15% [^7^]
|
||||||
|
- **16 星「修罗之道」**:大招每次斩击额外造成 100% 真实伤害,并降目标 15% 击退抗性 5 秒 [^7^]
|
||||||
|
- **神器**:紫武(战技沉默结束后降目标 30% 回能 5 秒);黄武(罗生门反伤增至 55%、持续增至 6 秒);**红武「三千世界」**(入场 13 秒后目标承受伤害 +27%,自身受沉默时间 -60%);彩武(罗生门释放时立即回复 11% 最大生命 + 回能/回血加成)[^7^]
|
||||||
|
- **觉醒「空手接白刃」**:生命低于 55% 时,永久降低敌方全体 15% 物理伤害直至阵亡 [^7^]
|
||||||
|
- **培养建议**:神器最低门槛红色,推荐彩色,优先级高 [^7^]
|
||||||
|
|
||||||
|
### 6. 至尊宝(前排战士 · 功能性工具人)
|
||||||
|
|
||||||
|
作用:击退 + 眩晕 + 减防 + 受伤回血 + 扛伤;能抗能解控,劣势局有反打之力,但输出低 [^27^]
|
||||||
|
|
||||||
|
- **大招「大圣归来」**:召唤大圣虚影,期间自身攻击 +25%;乱棍打击 4 次 ×30% 物理伤害并击退,收尾一击 160% 物理伤害 + 2 秒眩晕 [^27^]
|
||||||
|
- **2 星战技「七伤拳」**:普攻 30% 概率降低目标 30% 防御,但 20% 概率降低自身 10% 防御 [^27^]
|
||||||
|
- **5 星强化「大圣之力」**:放大招时自身 +15% 击退效果 3 秒 [^27^]
|
||||||
|
- **8 星特技「般若波罗蜜」**:每 12 秒引导时空之力,3 秒内受到伤害的 60% 转化为自身生命(不受重伤影响,转化总量不超过 12% 最大生命)[^27^]
|
||||||
|
- **12 星「五岳之尊」**:防御 +10%、生命 +15%;**16 星「大圣之御」**:放大招时受伤 -30% 持续 6 秒 [^27^]
|
||||||
|
- **神器**:紫武(七伤拳触发概率 +10%);黄武(般若波罗蜜可作用于所有近战友军)[^27^]
|
||||||
|
|
||||||
|
### 7. 齐天大圣(神话 · T0 全能战士,人气主 C)
|
||||||
|
|
||||||
|
- **主动技能「定海神针」**:对敌方前排造成范围眩晕效果,打乱敌方阵型 [^35^]
|
||||||
|
- 技能与普攻均可造成高额暴击伤害,后期伤害依然可观 [^35^][^33^]
|
||||||
|
- 强度榜长期位居 T0,获取与培养成本低,新手友好 [^33^][^37^]
|
||||||
|
|
||||||
|
### 8. 复仇者(神话 · T0 后排杀手)
|
||||||
|
|
||||||
|
- **「暗影突袭」**:可穿透威胁敌方后排关键目标 [^2^]
|
||||||
|
- 攻击敌人附加流血效果;获取成本较低,性价比极高 [^33^][^1^]
|
||||||
|
- 阵容中可搭配火枪,用斩击 + 狙击双重伤害秒杀敌方后排 [^14^]
|
||||||
|
|
||||||
|
### 9. 深渊女王 / 深渊女巫(法师 · 群体输出 + 控制)
|
||||||
|
|
||||||
|
- **大招「超声波」**:主力伤害 + 击退控制技能 [^60^]
|
||||||
|
- **2 星战技「剧毒利刃」**:普攻 30% 几率射出淬毒匕首,200% 魔法伤害,3 秒内降低目标 20% 击退抗性 [^28^]
|
||||||
|
- **5 星强化「强化声波」**:超声波击退效果 +30% [^28^]
|
||||||
|
- **8 星特技「女王尖啸」**:战斗第 20 秒发出尖啸,使所有敌方目标失去 18% 当前生命并眩晕 2 秒(每场仅 1 次,上限 350% 攻击)[^28^]
|
||||||
|
- **12 星「攻击增强」**:攻击 +25%;**16 星「超级声波」**:超声波魔法伤害 +65%,被击中目标 5 秒内伤害结果 -25% [^28^]
|
||||||
|
|
||||||
|
### 10. 巫妖王(法师 · 当前版本核心)
|
||||||
|
|
||||||
|
- **核心能力是红武提供的"重伤"**——这种能力全英雄中稀缺,在爷爷、光明骑士遍地走的环境下接近必需品 [^3^]
|
||||||
|
- 彩神具有**多段控制**(连环霜冻,黑暗骑士与光明骑士都解控不过来)[^3^]
|
||||||
|
- 自带**减速和冰冻能力**,利于推进甚至壁咚,集控制、输出、重伤、推力于一体 [^3^]
|
||||||
|
- 常见搭配:巫妖王 + 黑暗骑士 + 光明骑士 + 战士(复仇者/哪吒/剑圣/船长)+ 暗器大师或影魔 [^3^]
|
||||||
|
|
||||||
|
### 11. 玉面狐妖(法师 · 真伤输出)
|
||||||
|
|
||||||
|
- 前排杀手队核心之一:真实伤害无视防御,配合爷爷的攻击与回能增益可快速消灭敌方前排 [^14^]
|
||||||
|
- 后期值得培养的法师主 C 之一 [^1^]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 三、英雄觉醒技能表
|
||||||
|
|
||||||
|
以下为各英雄觉醒技能(一觉~四觉,含通用技能池)[^4^]:
|
||||||
|
|
||||||
|
| 英雄 | 觉醒技能 |
|
||||||
|
|---|---|
|
||||||
|
| **斧小王** | 坚硬皮肤(受伤 +1.5% 防御,最多 12 层);梦魇肩甲;死亡守护;嗜血战斧(每次释放「淘汰之斧」回复 15% 已损生命) |
|
||||||
|
| **剑圣** | 吸血面罩(普攻伤害的 35% 转化为自身生命);攻防转换(30% 防御转攻击,50% 几率降敌 5% 攻击 5 秒);梦魇肩甲;死亡守护 |
|
||||||
|
| **剑豪** | 空手接白刃(生命低于 55% 时永久降敌方全体 15% 物理伤害);梦魇肩甲;死亡守护;见闻色霸气(己方半场 +22% 击退抗性 / 敌方半场 +22% 控制抗性) |
|
||||||
|
| **酒仙** | 重拳(普攻随机降 6% 攻击或降 10% 防御 5 秒);元素抗性(血量首次低于 50%,5 秒免疫物理或魔法伤害) |
|
||||||
|
| **哪吒** | 三味真火(攻击附加 3% 最大生命伤害,上限 150% 攻击);莲花护体(每损失 10% 生命 +10% 受伤回能) |
|
||||||
|
| **八神** | 狂暴之怒(15% 伤害转化为自身生命);疯狂之血(血量低于 50%,+5% 攻击 +5% 破甲) |
|
||||||
|
| **哀木涕** | 守护壁垒(开场获得 10% 最大生命护盾,自身与身后友军防御 +6%);战斗意志(每累计损失 20% 生命 +10% 受伤回能 +5% 格挡,最多 6 层) |
|
||||||
|
|
||||||
|
**通用觉醒技能**:
|
||||||
|
|
||||||
|
- **梦魇肩甲**:受到攻击时,使攻击者 6 秒内对自己造成的伤害降低 2%(最多 3 层)[^4^]
|
||||||
|
- **死亡守护**:自身死亡时,为血量最低的友军回复 10% 最大生命值 [^4^]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 四、其他英雄技能速览
|
||||||
|
|
||||||
|
| 英雄 | 定位 | 技能特点 |
|
||||||
|
|---|---|---|
|
||||||
|
| 骷髅王 | 前排/输出 | 大招对敌方全体施加诅咒 + 暴击伤害,通用性强 [^33^] |
|
||||||
|
| 月之女 | 输出 | 爆发能力极强,技能持续叠加伤害,每次释放输出更高 [^33^][^47^] |
|
||||||
|
| 潮壮壮 | 前排/控制 | 技能命中造成沉默,让敌人无法放技能;攻防兼备,泛用性强,PVP 必备且不太吃练度 [^33^][^47^] |
|
||||||
|
| 火枪 | 射手 | 「狙击」致命打击敌方后排,与复仇者斩击配合可双重秒杀后排 [^14^] |
|
||||||
|
| 船长 | 战士 | 幽灵船、舰船突袭:高额伤害 + 大幅击退,暴力推进队核心 [^14^] |
|
||||||
|
| 术士 | 辅助 | 地狱火有强大推进能力并可作前排分摊伤害;技能带减能、减疗、减速 [^14^] |
|
||||||
|
| 海拉 | 法师 | 技能带减能、减疗、沉默,控制折磨队核心 [^14^] |
|
||||||
|
| 沉默 | 辅助 | 技能带减能、沉默效果 [^14^] |
|
||||||
|
| 疾风忍者 | 前排 | 技能带减能、沉默效果 [^14^] |
|
||||||
|
| 铁扇公主 | 法师 | 推进 + 以自身为中心约 2 个人物身位的光环 [^68^] |
|
||||||
|
| 神罗战士 / 李白 | 战士 | 带真实伤害,无视防御,前排杀手 [^14^] |
|
||||||
|
| 人鱼公主 | 辅助 | 提供控制,并为全队增加攻击力加成,提升队伍输出 [^1^][^39^] |
|
||||||
|
| 莫莫 | 辅助 | 为队友提供减防支持,提升队伍生存与输出 [^1^] |
|
||||||
|
| 月光使者 | 辅助 | 黄武可用,开荒期过渡英雄 [^3^] |
|
||||||
|
| 爷爷(葫芦爷爷) | 辅助 | 为队友回能 + 加攻击,强化核心输出伤害 [^14^] |
|
||||||
|
| 暗器大师 / 影魔 | 射手 | 巫妖王体系最推荐的射手位 [^3^] |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 五、英雄强度榜(参考)
|
||||||
|
|
||||||
|
综合多个攻略站的强度评价 [^33^][^37^][^34^]:
|
||||||
|
|
||||||
|
- **T0**:复仇者、齐天大圣(另有榜单列入影刃、月之女)
|
||||||
|
- **T1**:骷髅王、月之女、绿巨人
|
||||||
|
- **T1.5**:剑圣
|
||||||
|
- **T2**:潮壮壮、暗器大师、矮人飞机、双头龙
|
||||||
|
- **T3**:光明骑士、术士(注:此榜为旧版评价,当前版本光明骑士、术士在特色阵容中仍有重要地位 [^14^])
|
||||||
|
|
||||||
|
**后期值得培养的主 C 推荐** [^1^]:
|
||||||
|
|
||||||
|
- 战士:船长、黑暗骑士、复仇者、剑圣、神罗战士、白牛
|
||||||
|
- 辅助:冰女、小鹿、光明骑士、琴音仙女、术士、月光使者、沉默
|
||||||
|
- 射手:火枪、影魔、骷髅射手、暗器大师
|
||||||
|
- 法师:巫妖王、玉面狐妖、海拉、铁扇公主、深渊女王
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 参考来源
|
||||||
|
|
||||||
|
[^1^]: [几何王国游戏攻略/钓鱼/鱼缸搭配/英雄推荐 — 灯塔码铺](https://blog.share888.top/note/game/jihewangguo/index.html)
|
||||||
|
[^2^]: [《几何王国》——快速养成,满满成就!— 小米游戏中心](https://game.xiaomi.com/viewpoint/1585024444_1751347565577_100)
|
||||||
|
[^3^]: [《几何王国》该如何确定"终极"阵容和一些杂谈 — 雷电模拟器](https://www.ldmnq.com/0/zixun/1028749.html)
|
||||||
|
[^4^]: [几何王国英雄觉醒技能表 — 7724游戏](http://www.7724.com/jhwg/news/188085.html)
|
||||||
|
[^7^]: [【几何王国】英雄解析--剑豪 — 微信公众号](http://mp.weixin.qq.com/s?__biz=MzkxMjU1NTA2NA==&mid=2247485616&idx=1&sn=50f23d36776ee8d25f5916dee600caf7)
|
||||||
|
[^14^]: [《几何王国》新英雄与新玩法背景下,如何搭配适应版本的多样阵容 — 雷电模拟器](https://m.ldmnq.com/0/zixun/1028757.html)
|
||||||
|
[^18^]: [觉醒后英雄强度分析-前排篇(I)— 4399](https://a.4399.cn/gl/50173882_361641.html)
|
||||||
|
[^27^]: [【几何王国】英雄解析--至尊宝 — 微信公众号](http://mp.weixin.qq.com/s?__biz=MzkxMjU1NTA2NA==&mid=2247485630&idx=1&sn=5df2e8c053ab873e78ecfae5db7dfcb3)
|
||||||
|
[^28^]: [《几何王国》英雄攻略深渊女巫 — 百度贴吧](https://tieba.baidu.com/p/9105304613)
|
||||||
|
[^33^]: [几何王国角色强度排行 — 3DM手游](https://shouyou.3dmgame.com/gl/517771.html)
|
||||||
|
[^34^]: [几何王国角色排行表大全2025英雄强度排名 — 7724游戏](http://m.7724.com/jhwg/news/183870.html)
|
||||||
|
[^35^]: [几何王国社区 — 小米游戏中心](https://game.xiaomi.com/gamePost/62405456)
|
||||||
|
[^37^]: [几何王国角色强度排行 — 游侠手游](https://m.ali213.net/news/gl2404/1370787.html)
|
||||||
|
[^39^]: [《几何王国》新手进阶全攻略 — 百度文库](https://word.baidu.com/view/e9324c26b8d126fff705cc1755270722192e5990.html)
|
||||||
|
[^47^]: [几何王国最强英雄推荐 t0英雄强度排行 — 16手游网](http://www.16shouyou.com/gl/34278.html)
|
||||||
|
[^60^]: [深渊女王的三个阶段分别是什么?— 百度贴吧·几何王国吧](https://tieba.baidu.com/p/9646144609)
|
||||||
|
[^68^]: [《几何王国》觉醒后英雄强度分析-前排篇(I)— 雷电模拟器](https://m.ldmnq.com/0/zixun/1028753.html)
|
||||||
|
[^75^]: [几何王国绝顶英雄主推2024 — 悟极手游网](https://www.wjmplastics.com/article/223.html)
|
||||||
11
assets/script/game/common/config/几何王国英雄技能汇总.md.meta
Normal file
11
assets/script/game/common/config/几何王国英雄技能汇总.md.meta
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.0.1",
|
||||||
|
"importer": "text",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "3ec17428-df2e-40bc-a707-4de99ee79b10",
|
||||||
|
"files": [
|
||||||
|
".json"
|
||||||
|
],
|
||||||
|
"subMetas": {},
|
||||||
|
"userData": {}
|
||||||
|
}
|
||||||
@@ -133,7 +133,6 @@ export class Hero extends ecs.Entity {
|
|||||||
model.call = hero.call;
|
model.call = hero.call;
|
||||||
model.dead = hero.dead;
|
model.dead = hero.dead;
|
||||||
model.fstart = hero.fstart;
|
model.fstart = hero.fstart;
|
||||||
model.fend = hero.fend;
|
|
||||||
model.atking = hero.atking;
|
model.atking = hero.atking;
|
||||||
model.atked = hero.atked;
|
model.atked = hero.atked;
|
||||||
model.field = hero.field;
|
model.field = hero.field;
|
||||||
@@ -172,7 +171,6 @@ export class Hero extends ecs.Entity {
|
|||||||
model.runtime_call = resolveTriggerByLv(model.call, hero_lv);
|
model.runtime_call = resolveTriggerByLv(model.call, hero_lv);
|
||||||
model.runtime_dead = resolveTriggerByLv(model.dead, hero_lv);
|
model.runtime_dead = resolveTriggerByLv(model.dead, hero_lv);
|
||||||
model.runtime_fstart = resolveTriggerByLv(model.fstart, 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_atking = resolveTriggerByLv(model.atking, hero_lv);
|
||||||
model.runtime_atked = resolveTriggerByLv(model.atked, hero_lv);
|
model.runtime_atked = resolveTriggerByLv(model.atked, hero_lv);
|
||||||
model.runtime_field = resolveFieldByLv(model.field, hero_lv);
|
model.runtime_field = resolveFieldByLv(model.field, hero_lv);
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import { mLogger } from "../common/Logger";
|
|||||||
import { SkillTriggerHelper } from "./SkillTriggerHelper";
|
import { SkillTriggerHelper } from "./SkillTriggerHelper";
|
||||||
import { getMonsterGoldDrop } from "../map/RogueConfig";
|
import { getMonsterGoldDrop } from "../map/RogueConfig";
|
||||||
import { MissionEconomy } from "../map/MissionEconomy";
|
import { MissionEconomy } from "../map/MissionEconomy";
|
||||||
|
import { MoveComp } from "./MoveComp";
|
||||||
|
|
||||||
/** 最终伤害数据接口
|
/** 最终伤害数据接口
|
||||||
* 用于封装一次攻击计算的所有结果数据
|
* 用于封装一次攻击计算的所有结果数据
|
||||||
@@ -194,6 +195,17 @@ export class HeroAtkSystem extends ecs.ComblockSystem implements ecs.ISystemUpda
|
|||||||
if (targetView) {
|
if (targetView) {
|
||||||
targetView.do_atked(damage, isCrit, damageEvent.s_uuid, knockbackExtra);
|
targetView.do_atked(damage, isCrit, damageEvent.s_uuid, knockbackExtra);
|
||||||
targetView.playEnd(skillConf.endAnm);
|
targetView.playEnd(skillConf.endAnm);
|
||||||
|
|
||||||
|
// 击退位移下沉到 MoveSystem:直接写入 knockbackVelocity,由 MoveSystem 每帧衰减并叠加位移
|
||||||
|
const moveComp = target.get(MoveComp);
|
||||||
|
if (moveComp) {
|
||||||
|
const dist = FightSet.BACK_RANG + knockbackExtra;
|
||||||
|
const isHero = TAttrsComp.fac === FacSet.HERO;
|
||||||
|
// 击退初速度:0.1 秒时间常数衰减,总位移约等于 dist
|
||||||
|
const knockbackSpeed = dist * 16;
|
||||||
|
moveComp.knockbackVelocity = isHero ? -knockbackSpeed : knockbackSpeed;
|
||||||
|
}
|
||||||
|
|
||||||
if (isFrost) {
|
if (isFrost) {
|
||||||
TAttrsComp.toFrost();
|
TAttrsComp.toFrost();
|
||||||
targetView.in_iced(FightSet.FROST_TIME);
|
targetView.in_iced(FightSet.FROST_TIME);
|
||||||
|
|||||||
@@ -47,7 +47,6 @@ export class HeroAttrsComp extends ecs.Comp {
|
|||||||
[SkillTriggerType.Call]?: TriggerGrouped;
|
[SkillTriggerType.Call]?: TriggerGrouped;
|
||||||
[SkillTriggerType.Dead]?: TriggerGrouped;
|
[SkillTriggerType.Dead]?: TriggerGrouped;
|
||||||
[SkillTriggerType.FStart]?: TriggerGrouped;
|
[SkillTriggerType.FStart]?: TriggerGrouped;
|
||||||
[SkillTriggerType.FEnd]?: TriggerGrouped;
|
|
||||||
[SkillTriggerType.Atking]?: TriggerGrouped;
|
[SkillTriggerType.Atking]?: TriggerGrouped;
|
||||||
[SkillTriggerType.Atked]?: TriggerGrouped;
|
[SkillTriggerType.Atked]?: TriggerGrouped;
|
||||||
/** 驻场光环(按 lv 解锁,存活期间全局生效) */
|
/** 驻场光环(按 lv 解锁,存活期间全局生效) */
|
||||||
@@ -68,8 +67,6 @@ export class HeroAttrsComp extends ecs.Comp {
|
|||||||
runtime_dead?: { s_uuid: number; t_num: number; overrides?: SkillOverrides }[];
|
runtime_dead?: { s_uuid: number; t_num: number; overrides?: SkillOverrides }[];
|
||||||
/** 当前等级下生效的战前触发条目 */
|
/** 当前等级下生效的战前触发条目 */
|
||||||
runtime_fstart?: { s_uuid: number; t_num: number; overrides?: SkillOverrides }[];
|
runtime_fstart?: { s_uuid: number; t_num: number; overrides?: SkillOverrides }[];
|
||||||
/** 当前等级下生效的战后触发条目 */
|
|
||||||
runtime_fend?: { s_uuid: number; t_num: number; overrides?: SkillOverrides }[];
|
|
||||||
/** 当前等级下生效的驻场光环词条列表 */
|
/** 当前等级下生效的驻场光环词条列表 */
|
||||||
runtime_field?: FieldEntry[];
|
runtime_field?: FieldEntry[];
|
||||||
/** 当前等级下生效的复活配置 */
|
/** 当前等级下生效的复活配置 */
|
||||||
@@ -580,7 +577,6 @@ export class HeroAttrsComp extends ecs.Comp {
|
|||||||
this.call = undefined;
|
this.call = undefined;
|
||||||
this.dead = undefined;
|
this.dead = undefined;
|
||||||
this.fstart = undefined;
|
this.fstart = undefined;
|
||||||
this.fend = undefined;
|
|
||||||
this.atking = undefined;
|
this.atking = undefined;
|
||||||
this.atked = undefined;
|
this.atked = undefined;
|
||||||
this.field = undefined;
|
this.field = undefined;
|
||||||
@@ -592,7 +588,6 @@ export class HeroAttrsComp extends ecs.Comp {
|
|||||||
this.runtime_call = undefined;
|
this.runtime_call = undefined;
|
||||||
this.runtime_dead = undefined;
|
this.runtime_dead = undefined;
|
||||||
this.runtime_fstart = undefined;
|
this.runtime_fstart = undefined;
|
||||||
this.runtime_fend = undefined;
|
|
||||||
this.runtime_field = undefined;
|
this.runtime_field = undefined;
|
||||||
this.runtime_revive = undefined;
|
this.runtime_revive = undefined;
|
||||||
this.critical = 0;
|
this.critical = 0;
|
||||||
|
|||||||
173
assets/script/game/hero/HeroTopBarComp.ts
Normal file
173
assets/script/game/hero/HeroTopBarComp.ts
Normal file
@@ -0,0 +1,173 @@
|
|||||||
|
import { _decorator, ProgressBar, Sprite, UIOpacity, Vec3, v3, tween, Tween, Color, clamp } from "cc";
|
||||||
|
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
|
||||||
|
import { CCComp } from "../../../../extensions/oops-plugin-framework/assets/module/common/CCComp";
|
||||||
|
import { HeroAttrsComp } from "./HeroAttrsComp";
|
||||||
|
import { FacSet, FightSet } from "../common/config/GameSet";
|
||||||
|
|
||||||
|
const { ccclass, property } = _decorator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 英雄头顶状态栏组件
|
||||||
|
*
|
||||||
|
* 挂载在英雄节点下的 "top" 子节点上,独立管理:
|
||||||
|
* - 血条进度(ProgressBar)
|
||||||
|
* - 护盾数值条(ProgressBar,top/shield 节点,显示 shield / SHIELD_MAX)
|
||||||
|
* - 透明度激活 / 闲置
|
||||||
|
* - 受击抖动动画
|
||||||
|
*
|
||||||
|
* 数据流:HeroViewComp 将 HeroAttrsComp 引用传入,本组件通过 model 读取属性。
|
||||||
|
* 注意:英雄根节点下的 "shielded" 是护盾特效动画节点,由 HeroViewComp 管理,不在本组件职责内。
|
||||||
|
*/
|
||||||
|
@ccclass('HeroTopBarComp')
|
||||||
|
@ecs.register('HeroTopBar', false)
|
||||||
|
export class HeroTopBarComp extends CCComp {
|
||||||
|
|
||||||
|
// ==================== @property 绑定(编辑器拖拽) ====================
|
||||||
|
@property({ type: ProgressBar, tooltip: "血条进度条" })
|
||||||
|
private hpProgressBar: ProgressBar = null!;
|
||||||
|
|
||||||
|
@property({ type: ProgressBar, tooltip: "护盾数值条(top 下的 shield 节点)" })
|
||||||
|
private shieldProgressBar: ProgressBar = null!;
|
||||||
|
|
||||||
|
@property({ type: Sprite, tooltip: "血条填充 Sprite(用于设置阵营颜色)" })
|
||||||
|
private hpBarSprite: Sprite = null!;
|
||||||
|
|
||||||
|
// ==================== 内部引用 ====================
|
||||||
|
private topOpacity: UIOpacity = null!;
|
||||||
|
private basePos: Vec3 = v3();
|
||||||
|
|
||||||
|
// ==================== 配置 ====================
|
||||||
|
private hp_height: number = 90;
|
||||||
|
private boss_hp_height: number = 160;
|
||||||
|
|
||||||
|
// ==================== 透明度 ====================
|
||||||
|
private readonly barIdleOpacity: number = 153;
|
||||||
|
private readonly barActiveOpacity: number = 255;
|
||||||
|
private readonly idleOpacityDelay: number = 0.25;
|
||||||
|
|
||||||
|
/** 外部赋值:英雄数据模型 */
|
||||||
|
private _model: HeroAttrsComp = null!;
|
||||||
|
public get model(): HeroAttrsComp { return this._model; }
|
||||||
|
public set model(value: HeroAttrsComp) { this._model = value; }
|
||||||
|
|
||||||
|
private readonly restoreBarIdleOpacity = () => {
|
||||||
|
this.setTopBarOpacity(false);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 初始化 / 对象池复用时重置
|
||||||
|
* @param model 英雄属性组件
|
||||||
|
* @param direction 显示方向(1 或 -1)
|
||||||
|
*/
|
||||||
|
public init(model: HeroAttrsComp, direction: number = 1): void {
|
||||||
|
this._model = model;
|
||||||
|
|
||||||
|
// UIOpacity 无 @property 绑定,运行时获取或添加
|
||||||
|
this.topOpacity = this.node.getComponent(UIOpacity) || this.node.addComponent(UIOpacity);
|
||||||
|
|
||||||
|
// 方向取 abs,避免对象池复用时 scale 累乘导致血条反转
|
||||||
|
this.node.setScale(direction * Math.abs(this.node.scale.x), 1 * this.node.scale.y);
|
||||||
|
|
||||||
|
// 位置
|
||||||
|
const height = model.is_boss ? this.boss_hp_height : this.hp_height;
|
||||||
|
this.node.setPosition(0, height, 0);
|
||||||
|
this.basePos = this.node.position.clone();
|
||||||
|
|
||||||
|
// 血条颜色(英雄阵营为绿色)
|
||||||
|
if (model.fac === FacSet.HERO && this.hpBarSprite) {
|
||||||
|
this.hpBarSprite.color = new Color("#2ECC71");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 确保血条等 UI 始终在最上层
|
||||||
|
this.node.setSiblingIndex(999);
|
||||||
|
|
||||||
|
// 重置显示状态
|
||||||
|
this.node.getChildByName("hp")!.active = true;
|
||||||
|
this.node.getChildByName("cd")!.active = false;
|
||||||
|
this.node.getChildByName("lv")!.active = false;
|
||||||
|
this.node.active = true;
|
||||||
|
|
||||||
|
this.setTopBarOpacity(false);
|
||||||
|
this.hpShow();
|
||||||
|
this.shieldShow(model.shield);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 更新血量进度条 */
|
||||||
|
public hpShow(): void {
|
||||||
|
if (!this._model || !this.hpProgressBar) return;
|
||||||
|
const hp = this._model.hp;
|
||||||
|
const hpMax = this._model.hp_max;
|
||||||
|
let targetProgress = hpMax > 0 ? hp / hpMax : 0;
|
||||||
|
targetProgress = clamp(targetProgress, 0, 1);
|
||||||
|
|
||||||
|
const prevProgress = this.hpProgressBar.progress;
|
||||||
|
if (targetProgress < prevProgress) {
|
||||||
|
this.activateTopBar();
|
||||||
|
this.playHpBarShake();
|
||||||
|
}
|
||||||
|
this.hpProgressBar.progress = targetProgress;
|
||||||
|
if (targetProgress > prevProgress) {
|
||||||
|
this.setTopBarOpacity(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 更新护盾数值条(百分比 = shield / SHIELD_MAX) */
|
||||||
|
public shieldShow(shield: number = 0): void {
|
||||||
|
if (!this.shieldProgressBar) return;
|
||||||
|
const progress = FightSet.SHIELD_MAX > 0 ? shield / FightSet.SHIELD_MAX : 0;
|
||||||
|
this.shieldProgressBar.progress = clamp(progress, 0, 1);
|
||||||
|
// 护盾节点显隐
|
||||||
|
this.shieldProgressBar.node.active = shield > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 激活顶栏(高亮 + 延迟恢复闲置透明度) */
|
||||||
|
public activateTopBar(): void {
|
||||||
|
this.setTopBarOpacity(true);
|
||||||
|
this.unschedule(this.restoreBarIdleOpacity);
|
||||||
|
this.scheduleOnce(this.restoreBarIdleOpacity, this.idleOpacityDelay);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 设置顶栏透明度 */
|
||||||
|
public setTopBarOpacity(isActive: boolean): void {
|
||||||
|
if (!this.node || !this.node.isValid) return;
|
||||||
|
if (this.topOpacity) {
|
||||||
|
this.topOpacity.opacity = isActive ? this.barActiveOpacity : this.barIdleOpacity;
|
||||||
|
}
|
||||||
|
this.node.active = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 显示顶栏 */
|
||||||
|
public show(): void {
|
||||||
|
if (this.node && this.node.isValid) this.node.active = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 隐藏顶栏 */
|
||||||
|
public hide(): void {
|
||||||
|
if (this.node && this.node.isValid) this.node.active = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 血条受击抖动动画 */
|
||||||
|
private playHpBarShake(): void {
|
||||||
|
if (!this.node || !this.node.isValid) return;
|
||||||
|
Tween.stopAllByTarget(this.node);
|
||||||
|
this.node.setPosition(this.basePos);
|
||||||
|
tween(this.node)
|
||||||
|
.by(0.04, { position: v3(-3, 0, 0) })
|
||||||
|
.by(0.04, { position: v3(6, 0, 0) })
|
||||||
|
.by(0.04, { position: v3(-5, 0, 0) })
|
||||||
|
.by(0.04, { position: v3(2, 0, 0) })
|
||||||
|
.call(() => {
|
||||||
|
this.node.setPosition(this.basePos);
|
||||||
|
})
|
||||||
|
.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 对象池回收 / 组件重置时调用 */
|
||||||
|
public reset(): void {
|
||||||
|
this.unscheduleAllCallbacks();
|
||||||
|
if (this.node && this.node.isValid) {
|
||||||
|
Tween.stopAllByTarget(this.node);
|
||||||
|
this.node.setPosition(this.basePos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
9
assets/script/game/hero/HeroTopBarComp.ts.meta
Normal file
9
assets/script/game/hero/HeroTopBarComp.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"ver": "4.0.24",
|
||||||
|
"importer": "typescript",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "c4181fc5-1168-4a6d-8d03-d0f2dd0b22a2",
|
||||||
|
"files": [],
|
||||||
|
"subMetas": {},
|
||||||
|
"userData": {}
|
||||||
|
}
|
||||||
@@ -1,8 +1,9 @@
|
|||||||
import { Vec3, _decorator, v3, Collider2D, Contact2DType, Label, Node, Prefab, instantiate, ProgressBar, Component, Material, Sprite, math, clamp, Game, tween, Tween, Color, BoxCollider2D, UITransform, UIOpacity } from "cc";
|
import { Vec3, _decorator, v3, Collider2D, Contact2DType, Node, Prefab, instantiate, tween, Tween, BoxCollider2D, UITransform } from "cc";
|
||||||
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
|
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
|
||||||
import { CCComp } from "../../../../extensions/oops-plugin-framework/assets/module/common/CCComp";
|
import { CCComp } from "../../../../extensions/oops-plugin-framework/assets/module/common/CCComp";
|
||||||
import { mLogger } from "../common/Logger";
|
import { mLogger } from "../common/Logger";
|
||||||
import { HeroSpine } from "./HeroSpine";
|
import { HeroSpine } from "./HeroSpine";
|
||||||
|
import { HeroTopBarComp } from "./HeroTopBarComp";
|
||||||
import { BoxSet, FacSet, FightSet, NumberFormatter, TooltipTypes } from "../common/config/GameSet";
|
import { BoxSet, FacSet, FightSet, NumberFormatter, TooltipTypes } from "../common/config/GameSet";
|
||||||
import { smc } from "../common/SingletonModuleComp";
|
import { smc } from "../common/SingletonModuleComp";
|
||||||
import { SkillSet, } from "../common/config/SkillSet";
|
import { SkillSet, } from "../common/config/SkillSet";
|
||||||
@@ -37,21 +38,10 @@ export class HeroViewComp extends CCComp {
|
|||||||
realDeadTime: number = 0.1
|
realDeadTime: number = 0.1
|
||||||
deadCD: number = 0
|
deadCD: number = 0
|
||||||
monDeadTime: number = 0.1
|
monDeadTime: number = 0.1
|
||||||
hp_height: number = 90
|
|
||||||
boss_hp_height: number = 160
|
|
||||||
// 血条显示相关
|
// 血条显示相关
|
||||||
lastBarUpdateTime: number = 0; // 最后一次血条/蓝条/护盾更新时间
|
lastBarUpdateTime: number = 0; // 最后一次血条/蓝条/护盾更新时间
|
||||||
// ==================== UI 节点引用 ====================
|
// ==================== UI 节点引用 ====================
|
||||||
private top_node: Node = null!;
|
private topBar: HeroTopBarComp = null!;
|
||||||
private topOpacity: UIOpacity = null!;
|
|
||||||
private topBasePos: Vec3 = v3();
|
|
||||||
private lvLabel: Label | null = null; // 等级显示文本
|
|
||||||
private readonly barIdleOpacity: number = 153;
|
|
||||||
private readonly barActiveOpacity: number = 255;
|
|
||||||
private readonly idleOpacityDelay: number = 0.25;
|
|
||||||
private readonly restoreBarIdleOpacity = () => {
|
|
||||||
this.setTopBarOpacity(false);
|
|
||||||
};
|
|
||||||
|
|
||||||
// ==================== 直接访问 HeroAttrsComp ====================
|
// ==================== 直接访问 HeroAttrsComp ====================
|
||||||
get model() {
|
get model() {
|
||||||
@@ -96,67 +86,26 @@ export class HeroViewComp extends CCComp {
|
|||||||
this.lastBarUpdateTime = 0;
|
this.lastBarUpdateTime = 0;
|
||||||
this.status_change("idle");
|
this.status_change("idle");
|
||||||
|
|
||||||
// 初始化 UI 节点
|
// 初始化头顶状态栏
|
||||||
this.initUINodes();
|
const topNode = this.node.getChildByName("top");
|
||||||
|
this.topBar = topNode.getComponent(HeroTopBarComp) || topNode.addComponent(HeroTopBarComp);
|
||||||
|
this.topBar.init(this.model, this.scale);
|
||||||
|
|
||||||
/** 方向 */
|
/** 方向 */
|
||||||
this.node.setScale(this.scale * Math.abs(this.node.scale.x), 1 * this.node.scale.y); // 确保 scale.x 为正后再乘方向
|
this.node.setScale(this.scale * Math.abs(this.node.scale.x), 1 * this.node.scale.y); // 确保 scale.x 为正后再乘方向
|
||||||
// top_node 取 abs 避免对象池复用时 scale 累乘导致血条方向反转
|
|
||||||
this.top_node.setScale(this.scale * Math.abs(this.top_node.scale.x), 1 * this.top_node.scale.y);
|
|
||||||
/* 显示角色血*/
|
|
||||||
this.top_node.getChildByName("hp").active = true;
|
|
||||||
this.top_node.getChildByName("cd").active = false;
|
|
||||||
this.top_node.getChildByName("shield").active = false;
|
|
||||||
this.top_node.getChildByName("lv").active = true;
|
|
||||||
this.top_node.active = true;
|
|
||||||
this.setTopBarOpacity(false);
|
|
||||||
|
|
||||||
// 初始化等级显示
|
// 🔥 重置描边
|
||||||
this.lv_show();
|
|
||||||
|
|
||||||
// 🔥 重置血条 UI 显示状态
|
|
||||||
if (this.model) {
|
if (this.model) {
|
||||||
this.hp_show();
|
|
||||||
|
|
||||||
// 根据英雄模型中的等级数据设置描边
|
|
||||||
// 注意:HeroViewComp 是挂在 node 上的,而 FlashSprite 可能挂在子节点(如 Sprite/anm 节点)
|
|
||||||
let flashSprite = this.node.getComponent(FlashSprite);
|
let flashSprite = this.node.getComponent(FlashSprite);
|
||||||
if (!flashSprite) {
|
if (!flashSprite) {
|
||||||
// 如果当前节点没有,尝试在所有子节点中查找
|
|
||||||
flashSprite = this.node.getComponentInChildren(FlashSprite);
|
flashSprite = this.node.getComponentInChildren(FlashSprite);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flashSprite) {
|
if (flashSprite) {
|
||||||
flashSprite.setOutlineByLevel(this.model.lv);
|
flashSprite.setOutlineByLevel(this.model.lv);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 初始化 UI 节点引用 */
|
|
||||||
private initUINodes() {
|
|
||||||
this.top_node = this.node.getChildByName("top");
|
|
||||||
this.topOpacity = this.top_node.getComponent(UIOpacity) || this.top_node.addComponent(UIOpacity);
|
|
||||||
this.top_node.setPosition(0, this.hp_height, 0);
|
|
||||||
if (this.model.is_boss) this.top_node.setPosition(0, this.boss_hp_height, 0);
|
|
||||||
this.topBasePos = this.top_node.position.clone();
|
|
||||||
const hpNode = this.top_node.getChildByName("hp");
|
|
||||||
if (this.model.fac == FacSet.HERO) {
|
|
||||||
hpNode.getChildByName("Bar").getComponent(Sprite).color = new Color("#2ECC71")
|
|
||||||
}
|
|
||||||
|
|
||||||
// 确保血条等UI始终在最上层显示
|
|
||||||
this.top_node.setSiblingIndex(999);
|
|
||||||
|
|
||||||
// 缓存等级显示 Label(lv 节点下的 Label 子节点)
|
|
||||||
const lvNode = this.top_node.getChildByName("lv");
|
|
||||||
if (lvNode) {
|
|
||||||
this.lvLabel = lvNode.getChildByName("Label")?.getComponent(Label) ?? null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* View 层每帧更新
|
* View 层每帧更新
|
||||||
* 注意:数据更新逻辑已移到 HeroAttrSystem,这里只负责显示
|
* 注意:数据更新逻辑已移到 HeroAttrSystem,这里只负责显示
|
||||||
@@ -181,103 +130,21 @@ export class HeroViewComp extends CCComp {
|
|||||||
|
|
||||||
// ✅ 按需更新 UI(脏标签模式)- 只在属性变化时更新
|
// ✅ 按需更新 UI(脏标签模式)- 只在属性变化时更新
|
||||||
if (this.model.dirty_hp) {
|
if (this.model.dirty_hp) {
|
||||||
this.hp_show();
|
this.topBar.hpShow();
|
||||||
this.model.dirty_hp = false;
|
this.model.dirty_hp = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (this.model.dirty_shield) {
|
if (this.model.dirty_shield) {
|
||||||
this.show_shield(this.model.shield);
|
this.topBar.shieldShow(this.model.shield);
|
||||||
this.model.dirty_shield = false;
|
this.model.dirty_shield = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.model.dirty_lv) {
|
|
||||||
this.lv_show();
|
|
||||||
this.model.dirty_lv = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public cd_show() {
|
public cd_show() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 显示护盾 */
|
|
||||||
private show_shield(shield: number = 0) {
|
|
||||||
this.lastBarUpdateTime = Date.now() / 1000;
|
|
||||||
this.node.getChildByName("shielded").active = shield > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 显示血量 */
|
|
||||||
private hp_show() {
|
|
||||||
this.lastBarUpdateTime = Date.now() / 1000;
|
|
||||||
// 不再基于血量是否满来决定显示状态,只更新进度条
|
|
||||||
let hp = this.model.hp;
|
|
||||||
let hp_max = this.model.hp_max;
|
|
||||||
// mLogger.log(this.debugMode, 'HeroViewComp', "hp_show",hp,hp_max)
|
|
||||||
|
|
||||||
let targetProgress = hp_max > 0 ? hp / hp_max : 0;
|
|
||||||
targetProgress = clamp(targetProgress, 0, 1);
|
|
||||||
let hpNode = this.top_node.getChildByName("hp");
|
|
||||||
let hpProgressBar = hpNode.getComponent(ProgressBar);
|
|
||||||
|
|
||||||
const prevProgress = hpProgressBar.progress;
|
|
||||||
if (targetProgress < hpProgressBar.progress) {
|
|
||||||
this.activateTopBar();
|
|
||||||
this.playHpBarShake();
|
|
||||||
}
|
|
||||||
hpProgressBar.progress = targetProgress;
|
|
||||||
if (targetProgress > prevProgress) {
|
|
||||||
this.setTopBarOpacity(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private isFullHpAndNoShield(): boolean {
|
|
||||||
if (!this.model) return false;
|
|
||||||
if (this.model.hp_max <= 0) return false;
|
|
||||||
return this.model.hp >= this.model.hp_max;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 更新等级显示 */
|
|
||||||
private lv_show() {
|
|
||||||
if (!this.lvLabel || !this.model) return;
|
|
||||||
this.lvLabel.string = String(this.model.lv);
|
|
||||||
}
|
|
||||||
|
|
||||||
private setTopBarOpacity(isActive: boolean) {
|
|
||||||
if (!this.top_node || !this.top_node.isValid) return;
|
|
||||||
if (this.topOpacity) {
|
|
||||||
this.topOpacity.opacity = this.barActiveOpacity;
|
|
||||||
}
|
|
||||||
if (isActive) {
|
|
||||||
this.top_node.active = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this.top_node.active = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private activateTopBar() {
|
|
||||||
this.setTopBarOpacity(true);
|
|
||||||
this.unschedule(this.restoreBarIdleOpacity);
|
|
||||||
this.scheduleOnce(this.restoreBarIdleOpacity, this.idleOpacityDelay);
|
|
||||||
}
|
|
||||||
|
|
||||||
private playHpBarShake() {
|
|
||||||
if (!this.top_node || !this.top_node.isValid) return;
|
|
||||||
Tween.stopAllByTarget(this.top_node);
|
|
||||||
this.top_node.setPosition(this.topBasePos);
|
|
||||||
tween(this.top_node)
|
|
||||||
.by(0.04, { position: v3(-3, 0, 0) })
|
|
||||||
.by(0.04, { position: v3(6, 0, 0) })
|
|
||||||
.by(0.04, { position: v3(-5, 0, 0) })
|
|
||||||
.by(0.04, { position: v3(2, 0, 0) })
|
|
||||||
.call(() => {
|
|
||||||
this.top_node.setPosition(this.topBasePos);
|
|
||||||
})
|
|
||||||
.start();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** 升级特效 */
|
/** 升级特效 */
|
||||||
public lv_up() {
|
public lv_up() {
|
||||||
this.spawnTimedFx("game/skill/buff/buff_lvup", this.node, 1.0);
|
this.spawnTimedFx("game/skill/buff/buff_lvup", this.node, 1.0);
|
||||||
@@ -432,7 +299,7 @@ export class HeroViewComp extends CCComp {
|
|||||||
}
|
}
|
||||||
add_shield(shield: number) {
|
add_shield(shield: number) {
|
||||||
// 护盾数据更新由 Model 层处理,这里只负责视图表现
|
// 护盾数据更新由 Model 层处理,这里只负责视图表现
|
||||||
if (this.model && this.model.shield > 0) this.show_shield(this.model.shield);
|
if (this.model && this.model.shield > 0) this.topBar.shieldShow(this.model.shield);
|
||||||
}
|
}
|
||||||
|
|
||||||
health(hp: number = 0) {
|
health(hp: number = 0) {
|
||||||
@@ -458,7 +325,7 @@ export class HeroViewComp extends CCComp {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 恢复UI
|
// 恢复UI
|
||||||
this.top_node.active = true;
|
this.topBar.show();
|
||||||
|
|
||||||
this.status_change("idle");
|
this.status_change("idle");
|
||||||
|
|
||||||
@@ -504,7 +371,7 @@ export class HeroViewComp extends CCComp {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 隐藏UI
|
// 隐藏UI
|
||||||
this.top_node.active = false;
|
this.topBar.hide();
|
||||||
|
|
||||||
// 在销毁实体前先禁用碰撞体,从源头减少"尸体"参与碰撞
|
// 在销毁实体前先禁用碰撞体,从源头减少"尸体"参与碰撞
|
||||||
const collider = this.node.getComponent(Collider2D);
|
const collider = this.node.getComponent(Collider2D);
|
||||||
@@ -528,7 +395,7 @@ export class HeroViewComp extends CCComp {
|
|||||||
/** 受击表现(伤害数字、受击动画、击退) */
|
/** 受击表现(伤害数字、受击动画、击退) */
|
||||||
do_atked(damage: number, isCrit: boolean, s_uuid: number, knockbackExtra: number = 0) {
|
do_atked(damage: number, isCrit: boolean, s_uuid: number, knockbackExtra: number = 0) {
|
||||||
// 受到攻击时更新最后更新时间
|
// 受到攻击时更新最后更新时间
|
||||||
this.activateTopBar();
|
this.topBar.activateTopBar();
|
||||||
this.lastBarUpdateTime = Date.now() / 1000;
|
this.lastBarUpdateTime = Date.now() / 1000;
|
||||||
|
|
||||||
if (damage <= 0) return;
|
if (damage <= 0) return;
|
||||||
@@ -548,38 +415,10 @@ export class HeroViewComp extends CCComp {
|
|||||||
this.showDamage(damage, isCrit);
|
this.showDamage(damage, isCrit);
|
||||||
}
|
}
|
||||||
|
|
||||||
private isBackingUp: boolean = false; // 🔥 添加后退状态标记
|
|
||||||
|
|
||||||
//后退
|
//后退
|
||||||
back(distance: number = 0) {
|
back(distance: number = 0) {
|
||||||
// 🔥 防止重复调用后退动画
|
// 击退位移由 MoveSystem 统一处理,视图层只负责触发,不直接操作 position
|
||||||
if (this.isBackingUp) return;
|
// 具体击退速度由 HeroAtkSystem 在伤害结算后写入 MoveComp.knockbackVelocity
|
||||||
this.isBackingUp = true; // 🔥 设置后退状态
|
|
||||||
|
|
||||||
if (this.model.fac == FacSet.MON) {
|
|
||||||
// 基础击退距离,加上额外的距离强化
|
|
||||||
let dist = FightSet.BACK_RANG + distance;
|
|
||||||
let tx = this.node.position.x + dist;
|
|
||||||
if (tx > 320) tx = 320;
|
|
||||||
tween(this.node)
|
|
||||||
.to(0.1, { position: v3(tx, this.node.position.y, 0) })
|
|
||||||
.call(() => {
|
|
||||||
this.isBackingUp = false; // 🔥 动画完成后重置状态
|
|
||||||
})
|
|
||||||
.start();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.model.fac == FacSet.HERO) {
|
|
||||||
let dist = 5 + distance;
|
|
||||||
let tx = this.node.position.x - dist;
|
|
||||||
if (tx < -320) tx = -320;
|
|
||||||
tween(this.node)
|
|
||||||
.to(0.1, { position: v3(tx, this.node.position.y, 0) })
|
|
||||||
.call(() => {
|
|
||||||
this.isBackingUp = false; // 🔥 动画完成后重置状态
|
|
||||||
})
|
|
||||||
.start();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// 伤害计算和战斗逻辑已迁移到 HeroBattleSystem
|
// 伤害计算和战斗逻辑已迁移到 HeroBattleSystem
|
||||||
|
|
||||||
@@ -630,7 +469,7 @@ export class HeroViewComp extends CCComp {
|
|||||||
if (!this.model) return;
|
if (!this.model) return;
|
||||||
|
|
||||||
const damageText = NumberFormatter.formatNumber(Math.max(0, Math.floor(damage)));
|
const damageText = NumberFormatter.formatNumber(Math.max(0, Math.floor(damage)));
|
||||||
this.hp_show();
|
this.topBar.hpShow();
|
||||||
if (isCrit) {
|
if (isCrit) {
|
||||||
this.hp_tip(TooltipTypes.crit, damageText);
|
this.hp_tip(TooltipTypes.crit, damageText);
|
||||||
} else {
|
} else {
|
||||||
@@ -641,10 +480,7 @@ export class HeroViewComp extends CCComp {
|
|||||||
// 清理残留的定时器和缓动
|
// 清理残留的定时器和缓动
|
||||||
this.unscheduleAllCallbacks();
|
this.unscheduleAllCallbacks();
|
||||||
Tween.stopAllByTarget(this.node);
|
Tween.stopAllByTarget(this.node);
|
||||||
if (this.top_node && this.top_node.isValid) {
|
this.topBar.reset();
|
||||||
Tween.stopAllByTarget(this.top_node);
|
|
||||||
this.top_node.setPosition(this.topBasePos);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 清理碰撞器事件监听
|
// 清理碰撞器事件监听
|
||||||
const collider = this.getComponent(Collider2D);
|
const collider = this.getComponent(Collider2D);
|
||||||
@@ -653,7 +489,6 @@ export class HeroViewComp extends CCComp {
|
|||||||
}
|
}
|
||||||
this.deadCD = 0
|
this.deadCD = 0
|
||||||
this.lastBarUpdateTime = 0
|
this.lastBarUpdateTime = 0
|
||||||
this.unschedule(this.restoreBarIdleOpacity);
|
|
||||||
|
|
||||||
// 清理伤害队列
|
// 清理伤害队列
|
||||||
this.damageQueue.length = 0;
|
this.damageQueue.length = 0;
|
||||||
|
|||||||
@@ -148,8 +148,9 @@ export class Monster extends ecs.Entity {
|
|||||||
(node as any)._baseScale = node.scale.clone();
|
(node as any)._baseScale = node.scale.clone();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 统一挂到实体显示层 HERO 节点下
|
// 按身份挂载显示层:Boss → BOSS 层(最底),小怪 → MON 层(编辑器已配置好层级顺序)
|
||||||
node.parent = scene.entityLayer!.node!.getChildByName("HERO")!;
|
const layerName = is_boss ? "BOSS" : "MON";
|
||||||
|
node.parent = scene.entityLayer!.node!.getChildByName(layerName)!;
|
||||||
var view = node.getComponent(HeroViewComp)!;
|
var view = node.getComponent(HeroViewComp)!;
|
||||||
const collider = node.getComponent(BoxCollider2D);
|
const collider = node.getComponent(BoxCollider2D);
|
||||||
// 入场期间关闭碰撞,防止下落时提前参与战斗
|
// 入场期间关闭碰撞,防止下落时提前参与战斗
|
||||||
@@ -185,7 +186,6 @@ export class Monster extends ecs.Entity {
|
|||||||
model.call = hero.call;
|
model.call = hero.call;
|
||||||
model.dead = hero.dead;
|
model.dead = hero.dead;
|
||||||
model.fstart = hero.fstart;
|
model.fstart = hero.fstart;
|
||||||
model.fend = hero.fend;
|
|
||||||
model.atking = hero.atking;
|
model.atking = hero.atking;
|
||||||
model.atked = hero.atked;
|
model.atked = hero.atked;
|
||||||
model.revive = hero.revive;
|
model.revive = hero.revive;
|
||||||
@@ -224,7 +224,6 @@ export class Monster extends ecs.Entity {
|
|||||||
if (testSkills.atked !== undefined) model.atked = testSkills.atked;
|
if (testSkills.atked !== undefined) model.atked = testSkills.atked;
|
||||||
if (testSkills.dead !== undefined) model.dead = testSkills.dead;
|
if (testSkills.dead !== undefined) model.dead = testSkills.dead;
|
||||||
if (testSkills.fstart !== undefined) model.fstart = testSkills.fstart;
|
if (testSkills.fstart !== undefined) model.fstart = testSkills.fstart;
|
||||||
if (testSkills.fend !== undefined) model.fend = testSkills.fend;
|
|
||||||
if (testSkills.call !== undefined) model.call = testSkills.call;
|
if (testSkills.call !== undefined) model.call = testSkills.call;
|
||||||
if (testSkills.revive !== undefined) model.revive = testSkills.revive;
|
if (testSkills.revive !== undefined) model.revive = testSkills.revive;
|
||||||
}
|
}
|
||||||
@@ -233,7 +232,6 @@ export class Monster extends ecs.Entity {
|
|||||||
model.runtime_call = resolveTriggerByLv(model.call, mon_lv);
|
model.runtime_call = resolveTriggerByLv(model.call, mon_lv);
|
||||||
model.runtime_dead = resolveTriggerByLv(model.dead, mon_lv);
|
model.runtime_dead = resolveTriggerByLv(model.dead, mon_lv);
|
||||||
model.runtime_fstart = resolveTriggerByLv(model.fstart, 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_atking = resolveTriggerByLv(model.atking, mon_lv);
|
||||||
model.runtime_atked = resolveTriggerByLv(model.atked, mon_lv);
|
model.runtime_atked = resolveTriggerByLv(model.atked, mon_lv);
|
||||||
model.runtime_revive = resolveReviveByLv(model.revive, mon_lv);
|
model.runtime_revive = resolveReviveByLv(model.revive, mon_lv);
|
||||||
|
|||||||
@@ -28,6 +28,8 @@ export class MoveComp extends ecs.Comp {
|
|||||||
baseY: number = 0;
|
baseY: number = 0;
|
||||||
/** 出生序,用于同条件渲染排序稳定 */
|
/** 出生序,用于同条件渲染排序稳定 */
|
||||||
spawnOrder: number = 0;
|
spawnOrder: number = 0;
|
||||||
|
/** 击退速度(像素/秒),受击瞬间由 HeroAtkSystem 赋值,MoveSystem 每帧指数衰减至 0 */
|
||||||
|
knockbackVelocity: number = 0;
|
||||||
|
|
||||||
reset() {
|
reset() {
|
||||||
this.direction = 1;
|
this.direction = 1;
|
||||||
@@ -35,6 +37,7 @@ export class MoveComp extends ecs.Comp {
|
|||||||
this.moving = true;
|
this.moving = true;
|
||||||
this.baseY = 0;
|
this.baseY = 0;
|
||||||
this.spawnOrder = 0;
|
this.spawnOrder = 0;
|
||||||
|
this.knockbackVelocity = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,11 +85,25 @@ export class MoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 所有移动都锁定在 baseY,避免出现“漂移” */
|
/** 所有移动都锁定在 baseY,避免出现"漂移" */
|
||||||
if (view.node.position.y !== move.baseY) {
|
if (view.node.position.y !== move.baseY) {
|
||||||
view.node.setPosition(view.node.position.x, move.baseY, 0);
|
view.node.setPosition(view.node.position.x, move.baseY, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** 击退位移:每帧叠加 knockbackVelocity 并指数衰减,与推进解耦 */
|
||||||
|
if (Math.abs(move.knockbackVelocity) > 0.01) {
|
||||||
|
const newX = view.node.position.x + move.knockbackVelocity * this.dt;
|
||||||
|
const clampedX = this.clampByFacBoundary(newX, model.fac);
|
||||||
|
if (Math.abs(clampedX - view.node.position.x) > 0.01) {
|
||||||
|
view.node.setPosition(clampedX, view.node.position.y, 0);
|
||||||
|
}
|
||||||
|
// 时间常数 τ=0.1s:0.1 秒衰减到约 37%,0.3 秒衰减到约 5%,总位移 ≈ v0 * 0.0632
|
||||||
|
move.knockbackVelocity *= Math.exp(-10 * this.dt);
|
||||||
|
if (Math.abs(move.knockbackVelocity) < 0.01) {
|
||||||
|
move.knockbackVelocity = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** 准备阶段:双方原地待命,不推进不索敌 */
|
/** 准备阶段:双方原地待命,不推进不索敌 */
|
||||||
if (!smc.mission.in_fight) {
|
if (!smc.mission.in_fight) {
|
||||||
this.clearCombatTarget(model);
|
this.clearCombatTarget(model);
|
||||||
@@ -145,7 +162,9 @@ export class MoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
|
|||||||
const enemyX = enemy.node.position.x;
|
const enemyX = enemy.node.position.x;
|
||||||
const dist = Math.abs(selfX - enemyX);
|
const dist = Math.abs(selfX - enemyX);
|
||||||
const attackRange = model.dis;
|
const attackRange = model.dis;
|
||||||
const inRange = dist <= attackRange;
|
/** 近战贴身作战:攻击距离 dis(100) 大于技能范围(60),推进到与敌人相隔 60 才停下,保证技能可命中且不过度贴身 */
|
||||||
|
const stopRange = model.type === 0 ? 60 : attackRange;
|
||||||
|
const inRange = dist <= stopRange;
|
||||||
|
|
||||||
if (inRange) {
|
if (inRange) {
|
||||||
/** 进入攻击范围:停止移动,进入攻击状态,由 SCastSystem 负责技能释放 */
|
/** 进入攻击范围:停止移动,进入攻击状态,由 SCastSystem 负责技能释放 */
|
||||||
@@ -216,13 +235,19 @@ export class MoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
|
|||||||
|
|
||||||
private updateRenderOrder() {
|
private updateRenderOrder() {
|
||||||
const scene = smc.map?.MapView?.scene;
|
const scene = smc.map?.MapView?.scene;
|
||||||
const actorRoot = scene?.entityLayer?.node?.getChildByName("HERO");
|
const layerNode = scene?.entityLayer?.node;
|
||||||
if (!actorRoot) return;
|
if (!layerNode) return;
|
||||||
|
|
||||||
const now = Date.now() / 1000;
|
const now = Date.now() / 1000;
|
||||||
if (now - this.lastRenderSortAt < this.renderSortInterval) return;
|
if (now - this.lastRenderSortAt < this.renderSortInterval) return;
|
||||||
this.lastRenderSortAt = now;
|
this.lastRenderSortAt = now;
|
||||||
|
|
||||||
|
const heroRoot = layerNode.getChildByName("HERO");
|
||||||
|
const monRoot = layerNode.getChildByName("MON");
|
||||||
|
const bossRoot = layerNode.getChildByName("BOSS");
|
||||||
|
|
||||||
|
/** 分层重排同层节点:各阵营层内按 Y 轴路次 -> 前后位置 -> 出生序 -> eid 排序
|
||||||
|
* (Boss 已有独立 BOSS 层固定在最底,无需 bossPriority 参与排序) */
|
||||||
this.renderEntryCount = 0;
|
this.renderEntryCount = 0;
|
||||||
ecs.query(this.getHeroViewMatcher()).forEach(e => {
|
ecs.query(this.getHeroViewMatcher()).forEach(e => {
|
||||||
const attrs = e.get(HeroAttrsComp);
|
const attrs = e.get(HeroAttrsComp);
|
||||||
@@ -230,8 +255,16 @@ export class MoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
|
|||||||
if (!attrs || !actorView?.node || attrs.is_dead) return;
|
if (!attrs || !actorView?.node || attrs.is_dead) return;
|
||||||
if (attrs.fac !== FacSet.HERO && attrs.fac !== FacSet.MON) return;
|
if (attrs.fac !== FacSet.HERO && attrs.fac !== FacSet.MON) return;
|
||||||
|
|
||||||
if (actorView.node.parent !== actorRoot) {
|
/** 按阵营/身份归位到对应显示层 */
|
||||||
actorView.node.parent = actorRoot;
|
let targetRoot: Node | null | undefined;
|
||||||
|
if (attrs.fac === FacSet.HERO) {
|
||||||
|
targetRoot = heroRoot;
|
||||||
|
} else {
|
||||||
|
targetRoot = attrs.is_boss ? (bossRoot ?? monRoot ?? heroRoot) : (monRoot ?? heroRoot);
|
||||||
|
}
|
||||||
|
if (!targetRoot) return;
|
||||||
|
if (actorView.node.parent !== targetRoot) {
|
||||||
|
actorView.node.parent = targetRoot;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 统一从 MoveComp 获取 spawnOrder */
|
/** 统一从 MoveComp 获取 spawnOrder */
|
||||||
@@ -250,7 +283,6 @@ export class MoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
|
|||||||
this.renderEntries.push(entry);
|
this.renderEntries.push(entry);
|
||||||
}
|
}
|
||||||
entry.node = actorView.node;
|
entry.node = actorView.node;
|
||||||
entry.bossPriority = attrs.is_boss ? 1 : 0;
|
|
||||||
entry.laneScore = laneScore;
|
entry.laneScore = laneScore;
|
||||||
entry.frontScore = frontScore;
|
entry.frontScore = frontScore;
|
||||||
entry.spawnOrder = spawnOrder;
|
entry.spawnOrder = spawnOrder;
|
||||||
@@ -259,9 +291,7 @@ export class MoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
|
|||||||
});
|
});
|
||||||
this.renderEntries.length = this.renderEntryCount;
|
this.renderEntries.length = this.renderEntryCount;
|
||||||
|
|
||||||
/** 定时重排同层节点:Boss 优先级 -> Y 轴路次 -> 前后位置 -> 出生序 -> eid */
|
|
||||||
this.renderEntries.sort((a, b) => {
|
this.renderEntries.sort((a, b) => {
|
||||||
if (a.bossPriority !== b.bossPriority) return a.bossPriority - b.bossPriority;
|
|
||||||
// Y轴靠下的(laneScore 较大)应该在后面,从而渲染在上面
|
// Y轴靠下的(laneScore 较大)应该在后面,从而渲染在上面
|
||||||
if (Math.abs(a.laneScore - b.laneScore) > 10) return a.laneScore - b.laneScore;
|
if (Math.abs(a.laneScore - b.laneScore) > 10) return a.laneScore - b.laneScore;
|
||||||
if (a.frontScore !== b.frontScore) return a.frontScore - b.frontScore;
|
if (a.frontScore !== b.frontScore) return a.frontScore - b.frontScore;
|
||||||
@@ -269,8 +299,14 @@ export class MoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
|
|||||||
return a.eid - b.eid;
|
return a.eid - b.eid;
|
||||||
});
|
});
|
||||||
|
|
||||||
this.renderEntries.forEach((item, index) => {
|
/** 分层应用 siblingIndex:各层内部从 0 递增 */
|
||||||
|
const layerCounters = new Map<Node, number>();
|
||||||
|
this.renderEntries.forEach((item) => {
|
||||||
|
const parent = item.node.parent;
|
||||||
|
if (!parent) return;
|
||||||
|
const index = layerCounters.get(parent) ?? 0;
|
||||||
item.node.setSiblingIndex(index);
|
item.node.setSiblingIndex(index);
|
||||||
|
layerCounters.set(parent, index + 1);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,9 +44,6 @@ export class SkillTriggerHelper {
|
|||||||
case SkillTriggerType.FStart:
|
case SkillTriggerType.FStart:
|
||||||
this.handleArrayTrigger(model.runtime_fstart, model, view, type);
|
this.handleArrayTrigger(model.runtime_fstart, model, view, type);
|
||||||
break;
|
break;
|
||||||
case SkillTriggerType.FEnd:
|
|
||||||
this.handleArrayTrigger(model.runtime_fend, model, view, type);
|
|
||||||
break;
|
|
||||||
case SkillTriggerType.Atking:
|
case SkillTriggerType.Atking:
|
||||||
this.handleAtking(model, view);
|
this.handleAtking(model, view);
|
||||||
break;
|
break;
|
||||||
@@ -142,7 +139,7 @@ export class SkillTriggerHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通用的数组型触发器处理(适用于 FStart / FEnd 等无需额外判定的简单列表触发)
|
* 通用的数组型触发器处理(适用于 FStart 等无需额外判定的简单列表触发)
|
||||||
*/
|
*/
|
||||||
private static handleArrayTrigger(configs: { s_uuid: number, t_num: number, overrides?: SkillOverrides }[] | undefined, model: HeroAttrsComp, view: HeroViewComp, type: SkillTriggerType) {
|
private static handleArrayTrigger(configs: { s_uuid: number, t_num: number, overrides?: SkillOverrides }[] | undefined, model: HeroAttrsComp, view: HeroViewComp, type: SkillTriggerType) {
|
||||||
if (!configs || configs.length === 0) return;
|
if (!configs || configs.length === 0) return;
|
||||||
|
|||||||
@@ -478,7 +478,6 @@ export class CHeroComp extends CCComp {
|
|||||||
call: hero.call,
|
call: hero.call,
|
||||||
dead: hero.dead,
|
dead: hero.dead,
|
||||||
fstart: hero.fstart,
|
fstart: hero.fstart,
|
||||||
fend: hero.fend,
|
|
||||||
atking: hero.atking,
|
atking: hero.atking,
|
||||||
atked: hero.atked,
|
atked: hero.atked,
|
||||||
field: hero.field,
|
field: hero.field,
|
||||||
|
|||||||
@@ -13,7 +13,6 @@
|
|||||||
* - Interval (2):监听 FightStart → update 帧驱动按 t_inv 间隔重复触发(按 t_times 控制每回合次数)
|
* - Interval (2):监听 FightStart → update 帧驱动按 t_inv 间隔重复触发(按 t_times 控制每回合次数)
|
||||||
* - Field (3):被动生效,不主动施法(实际由 FieldSkillSet 处理)
|
* - Field (3):被动生效,不主动施法(实际由 FieldSkillSet 处理)
|
||||||
* - FightStart (4):监听 FightStart 事件,按 trigger_limit 全局累计上限
|
* - FightStart (4):监听 FightStart 事件,按 trigger_limit 全局累计上限
|
||||||
* - FightEnd (5):监听 FightEnd 事件(每回合结束派发),按 trigger_limit 全局累计上限
|
|
||||||
* - HeroDead (6):监听 HeroDead 事件(仅英雄阵营派发,怪物死亡不触发)
|
* - HeroDead (6):监听 HeroDead 事件(仅英雄阵营派发,怪物死亡不触发)
|
||||||
* - HeroCall (7):监听 MasterCalled(主角/技能召唤)+ ReviveSuccess(复活)
|
* - HeroCall (7):监听 MasterCalled(主角/技能召唤)+ ReviveSuccess(复活)
|
||||||
*
|
*
|
||||||
@@ -145,7 +144,6 @@ export class EquipBoxComp extends CCComp {
|
|||||||
oops.message.off(GameEvent.MissionEnd, this.onMissionEnd, this);
|
oops.message.off(GameEvent.MissionEnd, this.onMissionEnd, this);
|
||||||
oops.message.off(GameEvent.FightStart, this.onFightStart, this);
|
oops.message.off(GameEvent.FightStart, this.onFightStart, this);
|
||||||
oops.message.off(GameEvent.FightStart, this.onEventTrigger, this);
|
oops.message.off(GameEvent.FightStart, this.onEventTrigger, this);
|
||||||
oops.message.off(GameEvent.FightEnd, this.onEventTrigger, this);
|
|
||||||
oops.message.off(GameEvent.HeroDead, this.onEventTrigger, this);
|
oops.message.off(GameEvent.HeroDead, this.onEventTrigger, this);
|
||||||
oops.message.off(GameEvent.MasterCalled, this.onEventTrigger, this);
|
oops.message.off(GameEvent.MasterCalled, this.onEventTrigger, this);
|
||||||
oops.message.off(GameEvent.ReviveSuccess, this.onEventTrigger, this);
|
oops.message.off(GameEvent.ReviveSuccess, this.onEventTrigger, this);
|
||||||
@@ -287,7 +285,6 @@ export class EquipBoxComp extends CCComp {
|
|||||||
* - Interval: 监听 FightStart,进入战斗后由 update 帧驱动计时
|
* - Interval: 监听 FightStart,进入战斗后由 update 帧驱动计时
|
||||||
* - Field: 不主动施法(实际生效由 FieldSkillSet 处理)
|
* - Field: 不主动施法(实际生效由 FieldSkillSet 处理)
|
||||||
* - FightStart: 监听 FightStart 事件
|
* - FightStart: 监听 FightStart 事件
|
||||||
* - FightEnd: 监听 FightEnd 事件
|
|
||||||
* - HeroDead: 监听 HeroDead 事件(已在派发处做阵营过滤)
|
* - HeroDead: 监听 HeroDead 事件(已在派发处做阵营过滤)
|
||||||
* - HeroCall: 监听 MasterCalled(主角/技能召唤)+ ReviveSuccess(复活)
|
* - HeroCall: 监听 MasterCalled(主角/技能召唤)+ ReviveSuccess(复活)
|
||||||
*
|
*
|
||||||
@@ -313,10 +310,6 @@ export class EquipBoxComp extends CCComp {
|
|||||||
oops.message.on(GameEvent.FightStart, this.onEventTrigger, this);
|
oops.message.on(GameEvent.FightStart, this.onEventTrigger, this);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CardTriggerType.FightEnd:
|
|
||||||
oops.message.on(GameEvent.FightEnd, this.onEventTrigger, this);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case CardTriggerType.HeroDead:
|
case CardTriggerType.HeroDead:
|
||||||
oops.message.on(GameEvent.HeroDead, this.onEventTrigger, this);
|
oops.message.on(GameEvent.HeroDead, this.onEventTrigger, this);
|
||||||
break;
|
break;
|
||||||
@@ -338,7 +331,7 @@ export class EquipBoxComp extends CCComp {
|
|||||||
* 事件型触发的统一入口:
|
* 事件型触发的统一入口:
|
||||||
* - Instant 类型:按 trigger_times 上限判定,复用 current_trigger_times 跟踪
|
* - Instant 类型:按 trigger_times 上限判定,复用 current_trigger_times 跟踪
|
||||||
* (保持与原 is_instant 行为一致,且 NewWave 中也用 current_trigger_times)
|
* (保持与原 is_instant 行为一致,且 NewWave 中也用 current_trigger_times)
|
||||||
* - 事件型(FightStart/FightEnd/HeroDead/HeroCall):按 trigger_limit 上限判定,使用 trigger_count 跟踪
|
* - 事件型(FightStart/HeroDead/HeroCall):按 trigger_limit 上限判定,使用 trigger_count 跟踪
|
||||||
*
|
*
|
||||||
* 注意:本方法不读取事件 payload,仅作触发信号使用(避免 MasterCalled 不同 payload 字段引发的兼容问题)。
|
* 注意:本方法不读取事件 payload,仅作触发信号使用(避免 MasterCalled 不同 payload 字段引发的兼容问题)。
|
||||||
*/
|
*/
|
||||||
@@ -445,7 +438,6 @@ export class EquipBoxComp extends CCComp {
|
|||||||
const showRemainCount =
|
const showRemainCount =
|
||||||
this.trigger_type === CardTriggerType.Interval ||
|
this.trigger_type === CardTriggerType.Interval ||
|
||||||
this.trigger_type === CardTriggerType.FightStart ||
|
this.trigger_type === CardTriggerType.FightStart ||
|
||||||
this.trigger_type === CardTriggerType.FightEnd ||
|
|
||||||
this.trigger_type === CardTriggerType.HeroDead ||
|
this.trigger_type === CardTriggerType.HeroDead ||
|
||||||
this.trigger_type === CardTriggerType.HeroCall;
|
this.trigger_type === CardTriggerType.HeroCall;
|
||||||
|
|
||||||
@@ -454,7 +446,6 @@ export class EquipBoxComp extends CCComp {
|
|||||||
// 事件型按 trigger_limit;Interval 按 t_times
|
// 事件型按 trigger_limit;Interval 按 t_times
|
||||||
const isEvent =
|
const isEvent =
|
||||||
this.trigger_type === CardTriggerType.FightStart ||
|
this.trigger_type === CardTriggerType.FightStart ||
|
||||||
this.trigger_type === CardTriggerType.FightEnd ||
|
|
||||||
this.trigger_type === CardTriggerType.HeroDead ||
|
this.trigger_type === CardTriggerType.HeroDead ||
|
||||||
this.trigger_type === CardTriggerType.HeroCall;
|
this.trigger_type === CardTriggerType.HeroCall;
|
||||||
const used = isEvent ? this.trigger_count : this.current_trigger_times;
|
const used = isEvent ? this.trigger_count : this.current_trigger_times;
|
||||||
@@ -514,7 +505,7 @@ export class EquipBoxComp extends CCComp {
|
|||||||
* 处理维持回合逻辑:递减剩余回合,或者重置触发次数。
|
* 处理维持回合逻辑:递减剩余回合,或者重置触发次数。
|
||||||
*
|
*
|
||||||
* 各类型在新一回合的行为:
|
* 各类型在新一回合的行为:
|
||||||
* - Instant/Interval/FightStart/FightEnd:按 keep_waves 决定维持/销毁,并在新一回合开始时重置本地计数
|
* - Instant/Interval/FightStart:按 keep_waves 决定维持/销毁,并在新一回合开始时重置本地计数
|
||||||
* - Field:被动生效,跟随 keep_waves 决定存活
|
* - Field:被动生效,跟随 keep_waves 决定存活
|
||||||
* - HeroDead/HeroCall:跨回合触发的事件型,trigger_count(全局)不重置,仅 keep_waves 控制存活
|
* - HeroDead/HeroCall:跨回合触发的事件型,trigger_count(全局)不重置,仅 keep_waves 控制存活
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -217,7 +217,6 @@ export class HeroBoxComp extends CCComp {
|
|||||||
call: hero.call,
|
call: hero.call,
|
||||||
dead: hero.dead,
|
dead: hero.dead,
|
||||||
fstart: hero.fstart,
|
fstart: hero.fstart,
|
||||||
fend: hero.fend,
|
|
||||||
atking: hero.atking,
|
atking: hero.atking,
|
||||||
atked: hero.atked,
|
atked: hero.atked,
|
||||||
field: hero.field,
|
field: hero.field,
|
||||||
|
|||||||
@@ -2264,7 +2264,6 @@ export class MissionCardComp extends CCComp {
|
|||||||
model.runtime_call = resolveTriggerByLv(model.call, nextLv);
|
model.runtime_call = resolveTriggerByLv(model.call, nextLv);
|
||||||
model.runtime_dead = resolveTriggerByLv(model.dead, nextLv);
|
model.runtime_dead = resolveTriggerByLv(model.dead, nextLv);
|
||||||
model.runtime_fstart = resolveTriggerByLv(model.fstart, nextLv);
|
model.runtime_fstart = resolveTriggerByLv(model.fstart, nextLv);
|
||||||
model.runtime_fend = resolveTriggerByLv(model.fend, nextLv);
|
|
||||||
model.runtime_atking = resolveTriggerByLv(model.atking, nextLv);
|
model.runtime_atking = resolveTriggerByLv(model.atking, nextLv);
|
||||||
model.runtime_atked = resolveTriggerByLv(model.atked, nextLv);
|
model.runtime_atked = resolveTriggerByLv(model.atked, nextLv);
|
||||||
model.runtime_field = resolveFieldByLv(model.field, nextLv);
|
model.runtime_field = resolveFieldByLv(model.field, nextLv);
|
||||||
|
|||||||
@@ -225,7 +225,7 @@ export class MissionComp extends CCComp {
|
|||||||
protected update(dt: number): void {
|
protected update(dt: number): void {
|
||||||
if (!smc.mission.play) return
|
if (!smc.mission.play) return
|
||||||
|
|
||||||
// 如果是暂停状态,且不在 BattleEnd 阶段(全灭时需要播放完 fend 技能动画并自动流转),才真正停止 update 逻辑
|
// 如果是暂停状态,且不在 BattleEnd 阶段(全灭时需要自动流转),才真正停止 update 逻辑
|
||||||
if (smc.mission.pause && this.currentPhase !== MissionPhase.BattleEnd) return
|
if (smc.mission.pause && this.currentPhase !== MissionPhase.BattleEnd) return
|
||||||
|
|
||||||
// 回合间倒计时:PrepareStart 复用为倒计时阶段,5 秒后自动进入下一回合
|
// 回合间倒计时:PrepareStart 复用为倒计时阶段,5 秒后自动进入下一回合
|
||||||
@@ -515,7 +515,7 @@ export class MissionComp extends CCComp {
|
|||||||
|
|
||||||
case MissionPhase.BattleStart:
|
case MissionPhase.BattleStart:
|
||||||
// 触发战斗开始技能(fstart)
|
// 触发战斗开始技能(fstart)
|
||||||
this.triggerHeroBattleSkills(true);
|
this.triggerHeroBattleSkills();
|
||||||
// Boss 预警:Boss 同步场立即登场(eta=0)
|
// Boss 预警:Boss 同步场立即登场(eta=0)
|
||||||
if (this.isBossWave) {
|
if (this.isBossWave) {
|
||||||
oops.message.dispatchEvent(GameEvent.BossWarning, {
|
oops.message.dispatchEvent(GameEvent.BossWarning, {
|
||||||
@@ -576,14 +576,9 @@ export class MissionComp extends CCComp {
|
|||||||
smc.vmdata.scores.passed_wave_20 = true;
|
smc.vmdata.scores.passed_wave_20 = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 触发战斗结束技能(fend)
|
|
||||||
this.triggerHeroBattleSkills(false);
|
|
||||||
|
|
||||||
// 战斗结束阶段,按 FightSet.WAVE_HEAL_RATE 恢复所有英雄血量
|
// 战斗结束阶段,按 FightSet.WAVE_HEAL_RATE 恢复所有英雄血量
|
||||||
this.healAllHeroes();
|
this.healAllHeroes();
|
||||||
|
|
||||||
// 【新增】派发每回合战斗结束事件,供卡牌技能监听(区别于整局结束的 MissionEnd)
|
|
||||||
oops.message.dispatchEvent(GameEvent.FightEnd);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MissionPhase.Settle:
|
case MissionPhase.Settle:
|
||||||
@@ -669,32 +664,26 @@ export class MissionComp extends CCComp {
|
|||||||
* - 标记非战斗
|
* - 标记非战斗
|
||||||
* - 暂停刷怪
|
* - 暂停刷怪
|
||||||
* - 显示开始按钮
|
* - 显示开始按钮
|
||||||
* - 触发英雄战斗结束技能
|
|
||||||
*/
|
*/
|
||||||
private enterPreparePhase() {
|
private enterPreparePhase() {
|
||||||
this.changePhase(MissionPhase.PrepareStart);
|
this.changePhase(MissionPhase.PrepareStart);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 触发英雄的战斗开始/结束技能
|
* 触发英雄的战斗开始技能
|
||||||
* @param isStart 是否为战斗开始
|
|
||||||
*/
|
*/
|
||||||
private triggerHeroBattleSkills(isStart: boolean) {
|
private triggerHeroBattleSkills() {
|
||||||
let triggerCount = 1;
|
let triggerCount = 1;
|
||||||
if (isStart) {
|
triggerCount += FieldSkillHelper.getFieldSkillTotalValue(FieldSkillType.StartCount);
|
||||||
triggerCount += FieldSkillHelper.getFieldSkillTotalValue(FieldSkillType.StartCount);
|
|
||||||
} else {
|
|
||||||
triggerCount += FieldSkillHelper.getFieldSkillTotalValue(FieldSkillType.EndCount);
|
|
||||||
}
|
|
||||||
triggerCount = Math.max(1, Math.floor(triggerCount));
|
triggerCount = Math.max(1, Math.floor(triggerCount));
|
||||||
|
|
||||||
ecs.query(this.heroAttrsMatcher).forEach(entity => {
|
ecs.query(this.heroAttrsMatcher).forEach(entity => {
|
||||||
const attrs = entity.get(HeroAttrsComp);
|
const attrs = entity.get(HeroAttrsComp);
|
||||||
const view = entity.get(HeroViewComp);
|
const view = entity.get(HeroViewComp);
|
||||||
if (!attrs || !view || attrs.is_dead || attrs.fac !== FacSet.HERO) return;
|
if (!attrs || !view || attrs.is_dead || attrs.fac !== FacSet.HERO) return;
|
||||||
// 触发战斗开始/结束技能
|
// 触发战斗开始技能
|
||||||
for (let i = 0; i < triggerCount; i++) {
|
for (let i = 0; i < triggerCount; i++) {
|
||||||
SkillTriggerHelper.trigger(isStart ? SkillTriggerType.FStart : SkillTriggerType.FEnd, attrs, view);
|
SkillTriggerHelper.trigger(SkillTriggerType.FStart, attrs, view);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -755,8 +744,7 @@ export class MissionComp extends CCComp {
|
|||||||
open_Victory(e: any, is_hero_dead: boolean = false) {
|
open_Victory(e: any, is_hero_dead: boolean = false) {
|
||||||
// 战斗失败或胜利,标记暂停状态以切断回合流转逻辑
|
// 战斗失败或胜利,标记暂停状态以切断回合流转逻辑
|
||||||
smc.mission.pause = true;
|
smc.mission.pause = true;
|
||||||
// 直接切入 BattleEnd,触发 fend 表现
|
// 直接切入 BattleEnd,2s 后由 autoNextPhase 自动流转弹窗结算
|
||||||
// 倒计时逻辑已在 update 中由 PhaseTime 接管,2s 后将触发 autoNextPhase 弹窗结算
|
|
||||||
this.changePhase(MissionPhase.BattleEnd);
|
this.changePhase(MissionPhase.BattleEnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -859,7 +847,7 @@ export class MissionComp extends CCComp {
|
|||||||
this.isBossWave = true; // 单场 Boss 战,恒为 Boss 战(超时阈值/预警走 Boss 档)
|
this.isBossWave = true; // 单场 Boss 战,恒为 Boss 战(超时阈值/预警走 Boss 档)
|
||||||
|
|
||||||
if (wave > 1) {
|
if (wave > 1) {
|
||||||
// 在新一回合到来时,先进入 BattleEnd,触发上一回合的战斗结束技能 (fend),2秒后自动进入下一回合的准备阶段
|
// 在新一回合到来时,先进入 BattleEnd,2秒后自动进入下一回合的准备阶段
|
||||||
this.changePhase(MissionPhase.BattleEnd);
|
this.changePhase(MissionPhase.BattleEnd);
|
||||||
} else {
|
} else {
|
||||||
// 第1回合不需要结束上一回合,延迟一点播放提示,避免被开始游戏的loading遮挡
|
// 第1回合不需要结束上一回合,延迟一点播放提示,避免被开始游戏的loading遮挡
|
||||||
@@ -1005,21 +993,17 @@ export class MissionComp extends CCComp {
|
|||||||
this.clearBattleSceneNodes();
|
this.clearBattleSceneNodes();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 清理战斗场景中的 HERO 和 SKILL 根节点下的所有子节点 */
|
/** 清理战斗场景中的 HERO/MON/BOSS 和 SKILL 根节点下的所有子节点 */
|
||||||
private clearBattleSceneNodes() {
|
private clearBattleSceneNodes() {
|
||||||
const scene = smc.map?.MapView?.scene;
|
const scene = smc.map?.MapView?.scene;
|
||||||
const layer = scene?.entityLayer?.node;
|
const layer = scene?.entityLayer?.node;
|
||||||
if (!layer) return;
|
if (!layer) return;
|
||||||
const heroRoot = layer.getChildByName("HERO");
|
for (const name of ["HERO", "MON", "BOSS", "SKILL"]) {
|
||||||
const skillRoot = layer.getChildByName("SKILL");
|
const root = layer.getChildByName(name);
|
||||||
if (heroRoot) {
|
if (root) {
|
||||||
for (let i = heroRoot.children.length - 1; i >= 0; i--) {
|
for (let i = root.children.length - 1; i >= 0; i--) {
|
||||||
heroRoot.children[i].destroy();
|
root.children[i].destroy();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (skillRoot) {
|
|
||||||
for (let i = skillRoot.children.length - 1; i >= 0; i--) {
|
|
||||||
skillRoot.children[i].destroy();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -142,7 +142,7 @@ export class MissionMonCompComp extends CCComp {
|
|||||||
const spawnX = MissionMonCompComp.SPAWN_X_MIN
|
const spawnX = MissionMonCompComp.SPAWN_X_MIN
|
||||||
+ (MissionMonCompComp.SPAWN_X_MAX - MissionMonCompComp.SPAWN_X_MIN)
|
+ (MissionMonCompComp.SPAWN_X_MAX - MissionMonCompComp.SPAWN_X_MIN)
|
||||||
* (posIndex / Math.max(1, BOSS_COUNT + MINION_COUNT - 1));
|
* (posIndex / Math.max(1, BOSS_COUNT + MINION_COUNT - 1));
|
||||||
const landingY = basePos.y + (monData.isBoss ? 6 : 0);
|
const landingY = basePos.y;
|
||||||
const spawnPos: Vec3 = v3(spawnX, landingY + MissionMonCompComp.MON_DROP_HEIGHT, 0);
|
const spawnPos: Vec3 = v3(spawnX, landingY + MissionMonCompComp.MON_DROP_HEIGHT, 0);
|
||||||
this.globalSpawnOrder = (this.globalSpawnOrder + 1) % 999;
|
this.globalSpawnOrder = (this.globalSpawnOrder + 1) % 999;
|
||||||
|
|
||||||
|
|||||||
@@ -14,9 +14,10 @@
|
|||||||
* 3. RogueSpawningEngine - 生成引擎(基础属性 × 可调系数)
|
* 3. RogueSpawningEngine - 生成引擎(基础属性 × 可调系数)
|
||||||
*
|
*
|
||||||
* 核心公式(基础属性 × 可调系数):
|
* 核心公式(基础属性 × 可调系数):
|
||||||
* 怪物 hp = HeroInfo 基础hp × MON_HP_MUL(Boss 额外 × BOSS_HP_BONUS_MUL)
|
* 小怪 hp = HeroInfo 基础hp × MON_HP_MUL,小怪 ap = HeroInfo 基础ap × MON_AP_MUL
|
||||||
* 怪物 ap = HeroInfo 基础ap × MON_AP_MUL
|
* Boss 基础面板固定为初始英雄 2 倍强度(BOSS_BASE_HP/BOSS_BASE_AP),与小怪共用同一套系数,
|
||||||
* 怪物基础面板与 1 级英雄持平(近战镜像 hp300/ap22/cd1.8),默认系数校准为
|
* 场上 Boss 恰好为小怪 2 倍强度(如需额外压场可调 BOSS_HP_BONUS_MUL)。
|
||||||
|
* 小怪基础面板与 1 级英雄持平(近战镜像 hp300/ap22/cd1.8),默认系数校准为
|
||||||
* 整场战斗(3 英雄 vs 4 小怪 + 1 Boss)双方对砍 ≈ WAVE_DURATION(30s)。
|
* 整场战斗(3 英雄 vs 4 小怪 + 1 Boss)双方对砍 ≈ WAVE_DURATION(30s)。
|
||||||
* 手感微调只改 MON_HP_MUL / MON_AP_MUL / BOSS_HP_BONUS_MUL 三个系数即可。
|
* 手感微调只改 MON_HP_MUL / MON_AP_MUL / BOSS_HP_BONUS_MUL 三个系数即可。
|
||||||
*/
|
*/
|
||||||
@@ -40,8 +41,14 @@ export const MON_HP_MUL = 2.6;
|
|||||||
/** 怪物攻击可调系数:最终 ap = HeroInfo 基础ap × MON_AP_MUL。
|
/** 怪物攻击可调系数:最终 ap = HeroInfo 基础ap × MON_AP_MUL。
|
||||||
* 0.9 使 4 小怪+1 Boss 的总 DPS ≈ 20,30s 恰好磨光 3 英雄总血量(≈600) */
|
* 0.9 使 4 小怪+1 Boss 的总 DPS ≈ 20,30s 恰好磨光 3 英雄总血量(≈600) */
|
||||||
export const MON_AP_MUL = 0.9;
|
export const MON_AP_MUL = 0.9;
|
||||||
/** Boss 血量额外加成(在 MON_HP_MUL 之上乘算,突出压场定位) */
|
|
||||||
export const BOSS_HP_BONUS_MUL = 1.6;
|
/** Boss 基础面板 = 初始英雄基准(hp300/ap22)× 2 倍强度,
|
||||||
|
* 不读取 Boss HeroInfo 的差异化高基础值,避免数值膨胀 */
|
||||||
|
export const BOSS_BASE_HP = 600;
|
||||||
|
export const BOSS_BASE_AP = 44;
|
||||||
|
|
||||||
|
/** Boss 血量额外加成(在 MON_HP_MUL 之上乘算,默认 1.0 表示不再额外膨胀,保留作压场微调旋钮) */
|
||||||
|
export const BOSS_HP_BONUS_MUL = 1.0;
|
||||||
/** 战斗超时(秒):超过后强制结算整局(残留怪销毁并扣留存分) */
|
/** 战斗超时(秒):超过后强制结算整局(残留怪销毁并扣留存分) */
|
||||||
export const BATTLE_TIMEOUT = 90;
|
export const BATTLE_TIMEOUT = 90;
|
||||||
|
|
||||||
@@ -164,7 +171,7 @@ export function pickBossCombo(): BossComboConfig | null {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 怪物技能套装(一套完整的触发技能配置)
|
* 怪物技能套装(一套完整的触发技能配置)
|
||||||
* 覆盖触发时机:call / atking / atked / dead / fstart / fend / revive
|
* 覆盖触发时机:call / atking / atked / dead / fstart / revive
|
||||||
*/
|
*/
|
||||||
export interface MonSkillSet {
|
export interface MonSkillSet {
|
||||||
id: string;
|
id: string;
|
||||||
@@ -181,8 +188,6 @@ export interface MonSkillSet {
|
|||||||
dead?: TriggerGrouped;
|
dead?: TriggerGrouped;
|
||||||
/** 战斗开始触发 */
|
/** 战斗开始触发 */
|
||||||
fstart?: TriggerGrouped;
|
fstart?: TriggerGrouped;
|
||||||
/** 战斗结束触发 */
|
|
||||||
fend?: TriggerGrouped;
|
|
||||||
/** 复活 */
|
/** 复活 */
|
||||||
revive?: LvReviveEntry[];
|
revive?: LvReviveEntry[];
|
||||||
/** 在技能池中的抽取权重 */
|
/** 在技能池中的抽取权重 */
|
||||||
@@ -336,7 +341,6 @@ export interface GeneratedMonster {
|
|||||||
atked?: TriggerGrouped;
|
atked?: TriggerGrouped;
|
||||||
dead?: TriggerGrouped;
|
dead?: TriggerGrouped;
|
||||||
fstart?: TriggerGrouped;
|
fstart?: TriggerGrouped;
|
||||||
fend?: TriggerGrouped;
|
|
||||||
revive?: LvReviveEntry[];
|
revive?: LvReviveEntry[];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -356,7 +360,6 @@ export const TestModeConfig = {
|
|||||||
atked: undefined as TriggerGrouped | undefined,
|
atked: undefined as TriggerGrouped | undefined,
|
||||||
dead: undefined as TriggerGrouped | undefined,
|
dead: undefined as TriggerGrouped | undefined,
|
||||||
fstart: undefined as TriggerGrouped | undefined,
|
fstart: undefined as TriggerGrouped | undefined,
|
||||||
fend: undefined as TriggerGrouped | undefined,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// ======================== 8. 生成引擎 ========================
|
// ======================== 8. 生成引擎 ========================
|
||||||
@@ -398,7 +401,8 @@ export class RogueSpawningEngine {
|
|||||||
monsters.push(this.makeBoss());
|
monsters.push(this.makeBoss());
|
||||||
}
|
}
|
||||||
|
|
||||||
// 属性缩放:基础属性 × 可调系数(Boss 血量额外加成),校准目标双方对砍 ≈ 30s
|
// 属性缩放:基础属性 × 可调系数(Boss 基础面板已是英雄 2 倍,BOSS_HP_BONUS_MUL 默认 1.0),
|
||||||
|
// 校准目标:Boss 场上强度恰为小怪 2 倍,双方对砍 ≈ 30s
|
||||||
for (const m of monsters) {
|
for (const m of monsters) {
|
||||||
m.hp = Math.max(1, Math.round(m.hp * MON_HP_MUL * (m.isBoss ? BOSS_HP_BONUS_MUL : 1)));
|
m.hp = Math.max(1, Math.round(m.hp * MON_HP_MUL * (m.isBoss ? BOSS_HP_BONUS_MUL : 1)));
|
||||||
m.ap = Math.max(1, Math.round(m.ap * MON_AP_MUL));
|
m.ap = Math.max(1, Math.round(m.ap * MON_AP_MUL));
|
||||||
@@ -444,14 +448,13 @@ export class RogueSpawningEngine {
|
|||||||
atked: TestModeConfig.atked,
|
atked: TestModeConfig.atked,
|
||||||
dead: TestModeConfig.dead,
|
dead: TestModeConfig.dead,
|
||||||
fstart: TestModeConfig.fstart,
|
fstart: TestModeConfig.fstart,
|
||||||
fend: TestModeConfig.fend,
|
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return monsters;
|
return monsters;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 生成 Boss(基础血量带最终战加成,属性随后由总强度框架统一缩放) */
|
/** 生成 Boss(基础面板固定为初始英雄 2 倍强度,属性随后由 generateBossCombo 统一系数缩放) */
|
||||||
private makeBoss(): GeneratedMonster {
|
private makeBoss(): GeneratedMonster {
|
||||||
const isMeleeBoss = Math.random() < 0.5;
|
const isMeleeBoss = Math.random() < 0.5;
|
||||||
const type = isMeleeBoss ? MonType.MeleeBoss : MonType.LongBoss;
|
const type = isMeleeBoss ? MonType.MeleeBoss : MonType.LongBoss;
|
||||||
@@ -463,15 +466,11 @@ export class RogueSpawningEngine {
|
|||||||
}
|
}
|
||||||
const uuid = uuids[Math.floor(Math.random() * uuids.length)];
|
const uuid = uuids[Math.floor(Math.random() * uuids.length)];
|
||||||
|
|
||||||
const baseInfo = HeroInfo[uuid];
|
|
||||||
const baseHp = baseInfo ? baseInfo.hp : 500;
|
|
||||||
const baseAp = baseInfo ? baseInfo.ap : 30;
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
uuid,
|
uuid,
|
||||||
type,
|
type,
|
||||||
hp: Math.round(baseHp * BOSS_HP_BONUS_MUL),
|
hp: BOSS_BASE_HP,
|
||||||
ap: baseAp,
|
ap: BOSS_BASE_AP,
|
||||||
isBoss: true,
|
isBoss: true,
|
||||||
spawnIndex: 0, // 占位值,由 generateBossCombo 统一分配
|
spawnIndex: 0, // 占位值,由 generateBossCombo 统一分配
|
||||||
batch: 0,
|
batch: 0,
|
||||||
@@ -515,7 +514,6 @@ export class RogueSpawningEngine {
|
|||||||
atked: picked.atked,
|
atked: picked.atked,
|
||||||
dead: picked.dead,
|
dead: picked.dead,
|
||||||
fstart: picked.fstart,
|
fstart: picked.fstart,
|
||||||
fend: picked.fend,
|
|
||||||
revive: picked.revive,
|
revive: picked.revive,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,6 @@
|
|||||||
* - Interval (2):监听 FightStart → update 帧驱动按 t_inv 间隔重复触发(按 t_times 控制每回合次数)
|
* - Interval (2):监听 FightStart → update 帧驱动按 t_inv 间隔重复触发(按 t_times 控制每回合次数)
|
||||||
* - Field (3):被动生效,不主动施法(实际由 FieldSkillSet 处理)
|
* - Field (3):被动生效,不主动施法(实际由 FieldSkillSet 处理)
|
||||||
* - FightStart (4):监听 FightStart 事件,按 trigger_limit 全局累计上限
|
* - FightStart (4):监听 FightStart 事件,按 trigger_limit 全局累计上限
|
||||||
* - FightEnd (5):监听 FightEnd 事件(每回合结束派发),按 trigger_limit 全局累计上限
|
|
||||||
* - HeroDead (6):监听 HeroDead 事件(仅英雄阵营派发,怪物死亡不触发)
|
* - HeroDead (6):监听 HeroDead 事件(仅英雄阵营派发,怪物死亡不触发)
|
||||||
* - HeroCall (7):监听 MasterCalled(主角/技能召唤)+ ReviveSuccess(复活)
|
* - HeroCall (7):监听 MasterCalled(主角/技能召唤)+ ReviveSuccess(复活)
|
||||||
*
|
*
|
||||||
@@ -145,7 +144,6 @@ export class SkillBoxComp extends CCComp {
|
|||||||
oops.message.off(GameEvent.MissionEnd, this.onMissionEnd, this);
|
oops.message.off(GameEvent.MissionEnd, this.onMissionEnd, this);
|
||||||
oops.message.off(GameEvent.FightStart, this.onFightStart, this);
|
oops.message.off(GameEvent.FightStart, this.onFightStart, this);
|
||||||
oops.message.off(GameEvent.FightStart, this.onEventTrigger, this);
|
oops.message.off(GameEvent.FightStart, this.onEventTrigger, this);
|
||||||
oops.message.off(GameEvent.FightEnd, this.onEventTrigger, this);
|
|
||||||
oops.message.off(GameEvent.HeroDead, this.onEventTrigger, this);
|
oops.message.off(GameEvent.HeroDead, this.onEventTrigger, this);
|
||||||
oops.message.off(GameEvent.MasterCalled, this.onEventTrigger, this);
|
oops.message.off(GameEvent.MasterCalled, this.onEventTrigger, this);
|
||||||
oops.message.off(GameEvent.ReviveSuccess, this.onEventTrigger, this);
|
oops.message.off(GameEvent.ReviveSuccess, this.onEventTrigger, this);
|
||||||
@@ -289,7 +287,6 @@ export class SkillBoxComp extends CCComp {
|
|||||||
* - Interval: 监听 FightStart,进入战斗后由 update 帧驱动计时
|
* - Interval: 监听 FightStart,进入战斗后由 update 帧驱动计时
|
||||||
* - Field: 不主动施法(实际生效由 FieldSkillSet 处理)
|
* - Field: 不主动施法(实际生效由 FieldSkillSet 处理)
|
||||||
* - FightStart: 监听 FightStart 事件
|
* - FightStart: 监听 FightStart 事件
|
||||||
* - FightEnd: 监听 FightEnd 事件
|
|
||||||
* - HeroDead: 监听 HeroDead 事件(已在派发处做阵营过滤)
|
* - HeroDead: 监听 HeroDead 事件(已在派发处做阵营过滤)
|
||||||
* - HeroCall: 监听 MasterCalled(主角/技能召唤)+ ReviveSuccess(复活)
|
* - HeroCall: 监听 MasterCalled(主角/技能召唤)+ ReviveSuccess(复活)
|
||||||
*
|
*
|
||||||
@@ -320,10 +317,6 @@ export class SkillBoxComp extends CCComp {
|
|||||||
oops.message.on(GameEvent.FightStart, this.onEventTrigger, this);
|
oops.message.on(GameEvent.FightStart, this.onEventTrigger, this);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CardTriggerType.FightEnd:
|
|
||||||
oops.message.on(GameEvent.FightEnd, this.onEventTrigger, this);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case CardTriggerType.HeroDead:
|
case CardTriggerType.HeroDead:
|
||||||
oops.message.on(GameEvent.HeroDead, this.onEventTrigger, this);
|
oops.message.on(GameEvent.HeroDead, this.onEventTrigger, this);
|
||||||
break;
|
break;
|
||||||
@@ -345,7 +338,7 @@ export class SkillBoxComp extends CCComp {
|
|||||||
* 事件型触发的统一入口:
|
* 事件型触发的统一入口:
|
||||||
* - Instant 类型:按 trigger_times 上限判定,复用 current_trigger_times 跟踪
|
* - Instant 类型:按 trigger_times 上限判定,复用 current_trigger_times 跟踪
|
||||||
* (保持与原 is_instant 行为一致,且 NewWave 中也用 current_trigger_times)
|
* (保持与原 is_instant 行为一致,且 NewWave 中也用 current_trigger_times)
|
||||||
* - 事件型(FightStart/FightEnd/HeroDead/HeroCall):按 trigger_limit 上限判定,使用 trigger_count 跟踪
|
* - 事件型(FightStart/HeroDead/HeroCall):按 trigger_limit 上限判定,使用 trigger_count 跟踪
|
||||||
*
|
*
|
||||||
* 注意:本方法不读取事件 payload,仅作触发信号使用(避免 MasterCalled 不同 payload 字段引发的兼容问题)。
|
* 注意:本方法不读取事件 payload,仅作触发信号使用(避免 MasterCalled 不同 payload 字段引发的兼容问题)。
|
||||||
*/
|
*/
|
||||||
@@ -441,7 +434,6 @@ export class SkillBoxComp extends CCComp {
|
|||||||
const showRemainCount =
|
const showRemainCount =
|
||||||
this.trigger_type === CardTriggerType.Interval ||
|
this.trigger_type === CardTriggerType.Interval ||
|
||||||
this.trigger_type === CardTriggerType.FightStart ||
|
this.trigger_type === CardTriggerType.FightStart ||
|
||||||
this.trigger_type === CardTriggerType.FightEnd ||
|
|
||||||
this.trigger_type === CardTriggerType.HeroDead ||
|
this.trigger_type === CardTriggerType.HeroDead ||
|
||||||
this.trigger_type === CardTriggerType.HeroCall;
|
this.trigger_type === CardTriggerType.HeroCall;
|
||||||
|
|
||||||
@@ -450,7 +442,6 @@ export class SkillBoxComp extends CCComp {
|
|||||||
// 事件型按 trigger_limit;Interval 按 t_times
|
// 事件型按 trigger_limit;Interval 按 t_times
|
||||||
const isEvent =
|
const isEvent =
|
||||||
this.trigger_type === CardTriggerType.FightStart ||
|
this.trigger_type === CardTriggerType.FightStart ||
|
||||||
this.trigger_type === CardTriggerType.FightEnd ||
|
|
||||||
this.trigger_type === CardTriggerType.HeroDead ||
|
this.trigger_type === CardTriggerType.HeroDead ||
|
||||||
this.trigger_type === CardTriggerType.HeroCall;
|
this.trigger_type === CardTriggerType.HeroCall;
|
||||||
const used = isEvent ? this.trigger_count : this.current_trigger_times;
|
const used = isEvent ? this.trigger_count : this.current_trigger_times;
|
||||||
@@ -520,7 +511,7 @@ export class SkillBoxComp extends CCComp {
|
|||||||
* 处理维持回合逻辑:递减剩余回合,或者重置触发次数。
|
* 处理维持回合逻辑:递减剩余回合,或者重置触发次数。
|
||||||
*
|
*
|
||||||
* 各类型在新一回合的行为:
|
* 各类型在新一回合的行为:
|
||||||
* - Instant/Interval/FightStart/FightEnd:按 keep_waves 决定维持/销毁,并在新一回合开始时重置本地计数
|
* - Instant/Interval/FightStart:按 keep_waves 决定维持/销毁,并在新一回合开始时重置本地计数
|
||||||
* - Field:被动生效,跟随 keep_waves 决定存活
|
* - Field:被动生效,跟随 keep_waves 决定存活
|
||||||
* - HeroDead/HeroCall:跨回合触发的事件型,trigger_count(全局)不重置,仅 keep_waves 控制存活
|
* - HeroDead/HeroCall:跨回合触发的事件型,trigger_count(全局)不重置,仅 keep_waves 控制存活
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -74,6 +74,9 @@ export class SMoveDataComp extends ecs.Comp {
|
|||||||
|
|
||||||
/** 是否自动销毁(到达目标后) */
|
/** 是否自动销毁(到达目标后) */
|
||||||
autoDestroy: boolean = true;
|
autoDestroy: boolean = true;
|
||||||
|
|
||||||
|
/** 直线飞行距离(仅 runType=linear 生效,<=0 时延长终点飞出屏幕) */
|
||||||
|
distance: number = 0;
|
||||||
|
|
||||||
reset() {
|
reset() {
|
||||||
this.startPos.set(0, 0, 0);
|
this.startPos.set(0, 0, 0);
|
||||||
@@ -98,6 +101,7 @@ export class SMoveDataComp extends ecs.Comp {
|
|||||||
this.startTime = 0;
|
this.startTime = 0;
|
||||||
this.totalTime = 0;
|
this.totalTime = 0;
|
||||||
this.autoDestroy = true;
|
this.autoDestroy = true;
|
||||||
|
this.distance = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -83,21 +83,36 @@ export class SMoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
|
|||||||
const direction = new Vec3();
|
const direction = new Vec3();
|
||||||
Vec3.subtract(direction, originTargetPos, adjustedStartPos);
|
Vec3.subtract(direction, originTargetPos, adjustedStartPos);
|
||||||
|
|
||||||
// 延长终止点,统一消亡点的x坐标为 +-500
|
let adjustedTargetPos: Vec3;
|
||||||
const targetX = moveComp.scale > 0 ? 500 : -500;
|
if (moveComp.distance > 0) {
|
||||||
let targetY = originTargetPos.y;
|
// 距离模式:沿起始指向目标的方向飞行固定距离
|
||||||
|
if (direction.length() < 0.01) {
|
||||||
|
// 起终点重合时退化为按朝向水平飞行
|
||||||
|
direction.set(moveComp.scale > 0 ? 1 : -1, 0, 0);
|
||||||
|
}
|
||||||
|
direction.normalize();
|
||||||
|
adjustedTargetPos = v3(
|
||||||
|
adjustedStartPos.x + direction.x * moveComp.distance,
|
||||||
|
adjustedStartPos.y + direction.y * moveComp.distance,
|
||||||
|
originTargetPos.z
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
// 延长终止点,统一消亡点的x坐标为 +-500
|
||||||
|
const targetX = moveComp.scale > 0 ? 500 : -500;
|
||||||
|
let targetY = originTargetPos.y;
|
||||||
|
|
||||||
if (Math.abs(direction.x) > 0.01) {
|
if (Math.abs(direction.x) > 0.01) {
|
||||||
const slope = direction.y / direction.x;
|
const slope = direction.y / direction.x;
|
||||||
targetY = adjustedStartPos.y + slope * (targetX - adjustedStartPos.x);
|
targetY = adjustedStartPos.y + slope * (targetX - adjustedStartPos.x);
|
||||||
|
}
|
||||||
|
|
||||||
|
adjustedTargetPos = v3(
|
||||||
|
targetX,
|
||||||
|
targetY,
|
||||||
|
originTargetPos.z
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const adjustedTargetPos = v3(
|
|
||||||
targetX,
|
|
||||||
targetY,
|
|
||||||
originTargetPos.z
|
|
||||||
);
|
|
||||||
|
|
||||||
moveComp.startPos.set(adjustedStartPos);
|
moveComp.startPos.set(adjustedStartPos);
|
||||||
moveComp.targetPos.set(adjustedTargetPos);
|
moveComp.targetPos.set(adjustedTargetPos);
|
||||||
node.setPosition(adjustedStartPos);
|
node.setPosition(adjustedStartPos);
|
||||||
|
|||||||
@@ -184,6 +184,7 @@ export class Skill extends ecs.Entity {
|
|||||||
// 从SkillView获取移动参数,位置初始化由SMoveSystem统一处理
|
// 从SkillView获取移动参数,位置初始化由SMoveSystem统一处理
|
||||||
sMoveCom.atk_x = SView.atk_x;
|
sMoveCom.atk_x = SView.atk_x;
|
||||||
sMoveCom.atk_y = SView.atk_y;
|
sMoveCom.atk_y = SView.atk_y;
|
||||||
|
sMoveCom.distance = SView.distance;
|
||||||
|
|
||||||
if (SView.endType === EType.timeEnd) {
|
if (SView.endType === EType.timeEnd) {
|
||||||
let sTimeCom = this.get(StimeDataComp);
|
let sTimeCom = this.get(StimeDataComp);
|
||||||
|
|||||||
@@ -38,6 +38,10 @@ export class SkillView extends CCComp {
|
|||||||
@property({ type: CCFloat, slide: true, range: [0, 30, 0.1], tooltip: "timeEnd 持续时间(秒)" })
|
@property({ type: CCFloat, slide: true, range: [0, 30, 0.1], tooltip: "timeEnd 持续时间(秒)" })
|
||||||
time: number = 0;
|
time: number = 0;
|
||||||
|
|
||||||
|
/** 直线飞行距离(像素),仅 runType=linear 时生效(由 prefab 配置,<=0 时保持默认飞出屏幕的行为) */
|
||||||
|
@property({ type: CCFloat, slide: true, range: [0, 2000, 10], tooltip: "直线飞行距离(仅 linear 生效)" })
|
||||||
|
distance: number = 0;
|
||||||
|
|
||||||
private debugMode: boolean = false;
|
private debugMode: boolean = false;
|
||||||
|
|
||||||
anim: Animation = null;
|
anim: Animation = null;
|
||||||
|
|||||||
@@ -19,8 +19,6 @@ export class TooltipCom extends CCComp {
|
|||||||
@property(Node)
|
@property(Node)
|
||||||
fstart_bg: Node = null;
|
fstart_bg: Node = null;
|
||||||
@property(Node)
|
@property(Node)
|
||||||
fend_bg: Node = null;
|
|
||||||
@property(Node)
|
|
||||||
dead_bg: Node = null;
|
dead_bg: Node = null;
|
||||||
@property(Node)
|
@property(Node)
|
||||||
revive_bg: Node = null;
|
revive_bg: Node = null;
|
||||||
@@ -176,7 +174,6 @@ export class TooltipCom extends CCComp {
|
|||||||
this.atking_bg && (this.atking_bg.active = false);
|
this.atking_bg && (this.atking_bg.active = false);
|
||||||
this.atked_bg && (this.atked_bg.active = false);
|
this.atked_bg && (this.atked_bg.active = false);
|
||||||
this.fstart_bg && (this.fstart_bg.active = false);
|
this.fstart_bg && (this.fstart_bg.active = false);
|
||||||
this.fend_bg && (this.fend_bg.active = false);
|
|
||||||
this.dead_bg && (this.dead_bg.active = false);
|
this.dead_bg && (this.dead_bg.active = false);
|
||||||
this.revive_bg && (this.revive_bg.active = false);
|
this.revive_bg && (this.revive_bg.active = false);
|
||||||
|
|
||||||
@@ -186,7 +183,6 @@ export class TooltipCom extends CCComp {
|
|||||||
[SkillTriggerType.Atking]: this.atking_bg,
|
[SkillTriggerType.Atking]: this.atking_bg,
|
||||||
[SkillTriggerType.Atked]: this.atked_bg,
|
[SkillTriggerType.Atked]: this.atked_bg,
|
||||||
[SkillTriggerType.FStart]: this.fstart_bg,
|
[SkillTriggerType.FStart]: this.fstart_bg,
|
||||||
[SkillTriggerType.FEnd]: this.fend_bg,
|
|
||||||
[SkillTriggerType.Dead]: this.dead_bg,
|
[SkillTriggerType.Dead]: this.dead_bg,
|
||||||
[SkillTriggerType.Revive]: this.revive_bg,
|
[SkillTriggerType.Revive]: this.revive_bg,
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user