改了 好多

This commit is contained in:
2025-06-22 23:50:28 +08:00
parent 80359de181
commit 6584fa0e72
57 changed files with 19275 additions and 4959 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

View File

@@ -0,0 +1,42 @@
{
"ver": "1.0.26",
"importer": "image",
"imported": true,
"uuid": "15588387-53dc-4224-bf79-8427e1cc1e9a",
"files": [
".json",
".png"
],
"subMetas": {
"6c48a": {
"importer": "texture",
"uuid": "15588387-53dc-4224-bf79-8427e1cc1e9a@6c48a",
"displayName": "equips2",
"id": "6c48a",
"name": "texture",
"userData": {
"wrapModeS": "repeat",
"wrapModeT": "repeat",
"minfilter": "linear",
"magfilter": "linear",
"mipfilter": "none",
"anisotropy": 0,
"isUuid": true,
"imageUuidOrDatabaseUri": "15588387-53dc-4224-bf79-8427e1cc1e9a",
"visible": false
},
"ver": "1.0.22",
"imported": true,
"files": [
".json"
],
"subMetas": {}
}
},
"userData": {
"hasAlpha": true,
"type": "texture",
"fixAlphaTransparencyArtifacts": false,
"redirect": "15588387-53dc-4224-bf79-8427e1cc1e9a@6c48a"
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "af9c56db-ffea-45ca-9c39-2e83100a8cf8",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "39dd8f3d-b572-45d7-8c3a-88fcce1783bc",
"files": [],
"subMetas": {},
"userData": {}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

View File

@@ -0,0 +1,134 @@
{
"ver": "1.0.26",
"importer": "image",
"imported": true,
"uuid": "b373d5f8-caad-453e-950c-518597429bf2",
"files": [
".json",
".png"
],
"subMetas": {
"6c48a": {
"importer": "texture",
"uuid": "b373d5f8-caad-453e-950c-518597429bf2@6c48a",
"displayName": "Full",
"id": "6c48a",
"name": "texture",
"userData": {
"wrapModeS": "clamp-to-edge",
"wrapModeT": "clamp-to-edge",
"minfilter": "linear",
"magfilter": "linear",
"mipfilter": "none",
"anisotropy": 0,
"isUuid": true,
"imageUuidOrDatabaseUri": "b373d5f8-caad-453e-950c-518597429bf2",
"visible": false
},
"ver": "1.0.22",
"imported": true,
"files": [
".json"
],
"subMetas": {}
},
"f9941": {
"importer": "sprite-frame",
"uuid": "b373d5f8-caad-453e-950c-518597429bf2@f9941",
"displayName": "Full",
"id": "f9941",
"name": "spriteFrame",
"userData": {
"trimType": "auto",
"trimThreshold": 1,
"rotated": false,
"offsetX": 0,
"offsetY": 0,
"trimX": 0,
"trimY": 0,
"width": 556,
"height": 372,
"rawWidth": 556,
"rawHeight": 372,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"packable": true,
"pixelsToUnit": 100,
"pivotX": 0.5,
"pivotY": 0.5,
"meshType": 0,
"vertices": {
"rawPosition": [
-278,
-186,
0,
278,
-186,
0,
-278,
186,
0,
278,
186,
0
],
"indexes": [
0,
1,
2,
2,
1,
3
],
"uv": [
0,
372,
556,
372,
0,
0,
556,
0
],
"nuv": [
0,
0,
1,
0,
0,
1,
1,
1
],
"minPos": [
-278,
-186,
0
],
"maxPos": [
278,
186,
0
]
},
"isUuid": true,
"imageUuidOrDatabaseUri": "b373d5f8-caad-453e-950c-518597429bf2@6c48a",
"atlasUuid": ""
},
"ver": "1.0.12",
"imported": true,
"files": [
".json"
],
"subMetas": {}
}
},
"userData": {
"hasAlpha": false,
"type": "sprite-frame",
"fixAlphaTransparencyArtifacts": false,
"redirect": "b373d5f8-caad-453e-950c-518597429bf2@f9941"
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "b47240ec-1ac5-4bda-815a-d0a0302a475e",
"files": [],
"subMetas": {},
"userData": {}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View File

@@ -0,0 +1,134 @@
{
"ver": "1.0.26",
"importer": "image",
"imported": true,
"uuid": "32fec538-4ce2-421e-8c0d-cab31b1d7c1e",
"files": [
".json",
".png"
],
"subMetas": {
"6c48a": {
"importer": "texture",
"uuid": "32fec538-4ce2-421e-8c0d-cab31b1d7c1e@6c48a",
"displayName": "Full",
"id": "6c48a",
"name": "texture",
"userData": {
"wrapModeS": "clamp-to-edge",
"wrapModeT": "clamp-to-edge",
"minfilter": "linear",
"magfilter": "linear",
"mipfilter": "none",
"anisotropy": 0,
"isUuid": true,
"imageUuidOrDatabaseUri": "32fec538-4ce2-421e-8c0d-cab31b1d7c1e",
"visible": false
},
"ver": "1.0.22",
"imported": true,
"files": [
".json"
],
"subMetas": {}
},
"f9941": {
"importer": "sprite-frame",
"uuid": "32fec538-4ce2-421e-8c0d-cab31b1d7c1e@f9941",
"displayName": "Full",
"id": "f9941",
"name": "spriteFrame",
"userData": {
"trimType": "auto",
"trimThreshold": 1,
"rotated": false,
"offsetX": 0,
"offsetY": 0,
"trimX": 0,
"trimY": 0,
"width": 556,
"height": 372,
"rawWidth": 556,
"rawHeight": 372,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"packable": true,
"pixelsToUnit": 100,
"pivotX": 0.5,
"pivotY": 0.5,
"meshType": 0,
"vertices": {
"rawPosition": [
-278,
-186,
0,
278,
-186,
0,
-278,
186,
0,
278,
186,
0
],
"indexes": [
0,
1,
2,
2,
1,
3
],
"uv": [
0,
372,
556,
372,
0,
0,
556,
0
],
"nuv": [
0,
0,
1,
0,
0,
1,
1,
1
],
"minPos": [
-278,
-186,
0
],
"maxPos": [
278,
186,
0
]
},
"isUuid": true,
"imageUuidOrDatabaseUri": "32fec538-4ce2-421e-8c0d-cab31b1d7c1e@6c48a",
"atlasUuid": ""
},
"ver": "1.0.12",
"imported": true,
"files": [
".json"
],
"subMetas": {}
}
},
"userData": {
"hasAlpha": false,
"type": "sprite-frame",
"fixAlphaTransparencyArtifacts": false,
"redirect": "32fec538-4ce2-421e-8c0d-cab31b1d7c1e@f9941"
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "54a3e46a-1fca-498c-ac51-7bf907d2b601",
"files": [],
"subMetas": {},
"userData": {}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View File

@@ -0,0 +1,134 @@
{
"ver": "1.0.26",
"importer": "image",
"imported": true,
"uuid": "52d2441e-f68d-4006-a7cc-aaa447815132",
"files": [
".json",
".png"
],
"subMetas": {
"6c48a": {
"importer": "texture",
"uuid": "52d2441e-f68d-4006-a7cc-aaa447815132@6c48a",
"displayName": "Full",
"id": "6c48a",
"name": "texture",
"userData": {
"wrapModeS": "clamp-to-edge",
"wrapModeT": "clamp-to-edge",
"minfilter": "linear",
"magfilter": "linear",
"mipfilter": "none",
"anisotropy": 0,
"isUuid": true,
"imageUuidOrDatabaseUri": "52d2441e-f68d-4006-a7cc-aaa447815132",
"visible": false
},
"ver": "1.0.22",
"imported": true,
"files": [
".json"
],
"subMetas": {}
},
"f9941": {
"importer": "sprite-frame",
"uuid": "52d2441e-f68d-4006-a7cc-aaa447815132@f9941",
"displayName": "Full",
"id": "f9941",
"name": "spriteFrame",
"userData": {
"trimType": "auto",
"trimThreshold": 1,
"rotated": false,
"offsetX": 0,
"offsetY": 0,
"trimX": 0,
"trimY": 0,
"width": 556,
"height": 372,
"rawWidth": 556,
"rawHeight": 372,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"packable": true,
"pixelsToUnit": 100,
"pivotX": 0.5,
"pivotY": 0.5,
"meshType": 0,
"vertices": {
"rawPosition": [
-278,
-186,
0,
278,
-186,
0,
-278,
186,
0,
278,
186,
0
],
"indexes": [
0,
1,
2,
2,
1,
3
],
"uv": [
0,
372,
556,
372,
0,
0,
556,
0
],
"nuv": [
0,
0,
1,
0,
0,
1,
1,
1
],
"minPos": [
-278,
-186,
0
],
"maxPos": [
278,
186,
0
]
},
"isUuid": true,
"imageUuidOrDatabaseUri": "52d2441e-f68d-4006-a7cc-aaa447815132@6c48a",
"atlasUuid": ""
},
"ver": "1.0.12",
"imported": true,
"files": [
".json"
],
"subMetas": {}
}
},
"userData": {
"hasAlpha": false,
"type": "sprite-frame",
"fixAlphaTransparencyArtifacts": false,
"redirect": "52d2441e-f68d-4006-a7cc-aaa447815132@f9941"
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "f39f3d15-14ea-49a3-af82-271aba2b51e0",
"files": [],
"subMetas": {},
"userData": {}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

View File

@@ -0,0 +1,134 @@
{
"ver": "1.0.26",
"importer": "image",
"imported": true,
"uuid": "6ca870bd-0d75-4098-9e85-bec3bab01940",
"files": [
".json",
".png"
],
"subMetas": {
"6c48a": {
"importer": "texture",
"uuid": "6ca870bd-0d75-4098-9e85-bec3bab01940@6c48a",
"displayName": "Full",
"id": "6c48a",
"name": "texture",
"userData": {
"wrapModeS": "clamp-to-edge",
"wrapModeT": "clamp-to-edge",
"minfilter": "linear",
"magfilter": "linear",
"mipfilter": "none",
"anisotropy": 0,
"isUuid": true,
"imageUuidOrDatabaseUri": "6ca870bd-0d75-4098-9e85-bec3bab01940",
"visible": false
},
"ver": "1.0.22",
"imported": true,
"files": [
".json"
],
"subMetas": {}
},
"f9941": {
"importer": "sprite-frame",
"uuid": "6ca870bd-0d75-4098-9e85-bec3bab01940@f9941",
"displayName": "Full",
"id": "f9941",
"name": "spriteFrame",
"userData": {
"trimType": "auto",
"trimThreshold": 1,
"rotated": false,
"offsetX": 0,
"offsetY": 0,
"trimX": 0,
"trimY": 0,
"width": 556,
"height": 372,
"rawWidth": 556,
"rawHeight": 372,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"packable": true,
"pixelsToUnit": 100,
"pivotX": 0.5,
"pivotY": 0.5,
"meshType": 0,
"vertices": {
"rawPosition": [
-278,
-186,
0,
278,
-186,
0,
-278,
186,
0,
278,
186,
0
],
"indexes": [
0,
1,
2,
2,
1,
3
],
"uv": [
0,
372,
556,
372,
0,
0,
556,
0
],
"nuv": [
0,
0,
1,
0,
0,
1,
1,
1
],
"minPos": [
-278,
-186,
0
],
"maxPos": [
278,
186,
0
]
},
"isUuid": true,
"imageUuidOrDatabaseUri": "6ca870bd-0d75-4098-9e85-bec3bab01940@6c48a",
"atlasUuid": ""
},
"ver": "1.0.12",
"imported": true,
"files": [
".json"
],
"subMetas": {}
}
},
"userData": {
"hasAlpha": false,
"type": "sprite-frame",
"fixAlphaTransparencyArtifacts": false,
"redirect": "6ca870bd-0d75-4098-9e85-bec3bab01940@f9941"
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "9f547f2a-09e1-4114-b025-c0fb13f211f0",
"files": [],
"subMetas": {},
"userData": {}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View File

@@ -0,0 +1,134 @@
{
"ver": "1.0.26",
"importer": "image",
"imported": true,
"uuid": "ae5b869d-0875-48de-b278-7ed6f74b7c84",
"files": [
".json",
".png"
],
"subMetas": {
"6c48a": {
"importer": "texture",
"uuid": "ae5b869d-0875-48de-b278-7ed6f74b7c84@6c48a",
"displayName": "Full",
"id": "6c48a",
"name": "texture",
"userData": {
"wrapModeS": "clamp-to-edge",
"wrapModeT": "clamp-to-edge",
"minfilter": "linear",
"magfilter": "linear",
"mipfilter": "none",
"anisotropy": 0,
"isUuid": true,
"imageUuidOrDatabaseUri": "ae5b869d-0875-48de-b278-7ed6f74b7c84",
"visible": false
},
"ver": "1.0.22",
"imported": true,
"files": [
".json"
],
"subMetas": {}
},
"f9941": {
"importer": "sprite-frame",
"uuid": "ae5b869d-0875-48de-b278-7ed6f74b7c84@f9941",
"displayName": "Full",
"id": "f9941",
"name": "spriteFrame",
"userData": {
"trimType": "auto",
"trimThreshold": 1,
"rotated": false,
"offsetX": 0,
"offsetY": 0,
"trimX": 0,
"trimY": 0,
"width": 556,
"height": 372,
"rawWidth": 556,
"rawHeight": 372,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"packable": true,
"pixelsToUnit": 100,
"pivotX": 0.5,
"pivotY": 0.5,
"meshType": 0,
"vertices": {
"rawPosition": [
-278,
-186,
0,
278,
-186,
0,
-278,
186,
0,
278,
186,
0
],
"indexes": [
0,
1,
2,
2,
1,
3
],
"uv": [
0,
372,
556,
372,
0,
0,
556,
0
],
"nuv": [
0,
0,
1,
0,
0,
1,
1,
1
],
"minPos": [
-278,
-186,
0
],
"maxPos": [
278,
186,
0
]
},
"isUuid": true,
"imageUuidOrDatabaseUri": "ae5b869d-0875-48de-b278-7ed6f74b7c84@6c48a",
"atlasUuid": ""
},
"ver": "1.0.12",
"imported": true,
"files": [
".json"
],
"subMetas": {}
}
},
"userData": {
"hasAlpha": false,
"type": "sprite-frame",
"fixAlphaTransparencyArtifacts": false,
"redirect": "ae5b869d-0875-48de-b278-7ed6f74b7c84@f9941"
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "ae3068cc-7971-430a-9410-9d7bc64e0d9f",
"files": [],
"subMetas": {},
"userData": {}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

View File

@@ -0,0 +1,134 @@
{
"ver": "1.0.26",
"importer": "image",
"imported": true,
"uuid": "e8cfbeaa-89cc-48cf-aa21-0725cafbad44",
"files": [
".json",
".png"
],
"subMetas": {
"6c48a": {
"importer": "texture",
"uuid": "e8cfbeaa-89cc-48cf-aa21-0725cafbad44@6c48a",
"displayName": "Full",
"id": "6c48a",
"name": "texture",
"userData": {
"wrapModeS": "clamp-to-edge",
"wrapModeT": "clamp-to-edge",
"minfilter": "linear",
"magfilter": "linear",
"mipfilter": "none",
"anisotropy": 0,
"isUuid": true,
"imageUuidOrDatabaseUri": "e8cfbeaa-89cc-48cf-aa21-0725cafbad44",
"visible": false
},
"ver": "1.0.22",
"imported": true,
"files": [
".json"
],
"subMetas": {}
},
"f9941": {
"importer": "sprite-frame",
"uuid": "e8cfbeaa-89cc-48cf-aa21-0725cafbad44@f9941",
"displayName": "Full",
"id": "f9941",
"name": "spriteFrame",
"userData": {
"trimType": "auto",
"trimThreshold": 1,
"rotated": false,
"offsetX": 0,
"offsetY": 0,
"trimX": 0,
"trimY": 0,
"width": 556,
"height": 372,
"rawWidth": 556,
"rawHeight": 372,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"packable": true,
"pixelsToUnit": 100,
"pivotX": 0.5,
"pivotY": 0.5,
"meshType": 0,
"vertices": {
"rawPosition": [
-278,
-186,
0,
278,
-186,
0,
-278,
186,
0,
278,
186,
0
],
"indexes": [
0,
1,
2,
2,
1,
3
],
"uv": [
0,
372,
556,
372,
0,
0,
556,
0
],
"nuv": [
0,
0,
1,
0,
0,
1,
1,
1
],
"minPos": [
-278,
-186,
0
],
"maxPos": [
278,
186,
0
]
},
"isUuid": true,
"imageUuidOrDatabaseUri": "e8cfbeaa-89cc-48cf-aa21-0725cafbad44@6c48a",
"atlasUuid": ""
},
"ver": "1.0.12",
"imported": true,
"files": [
".json"
],
"subMetas": {}
}
},
"userData": {
"hasAlpha": false,
"type": "sprite-frame",
"fixAlphaTransparencyArtifacts": false,
"redirect": "e8cfbeaa-89cc-48cf-aa21-0725cafbad44@f9941"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

After

Width:  |  Height:  |  Size: 942 KiB

View File

@@ -46,10 +46,10 @@
"offsetY": 0,
"trimX": 0,
"trimY": 0,
"width": 736,
"height": 1312,
"rawWidth": 736,
"rawHeight": 1312,
"width": 640,
"height": 1416,
"rawWidth": 640,
"rawHeight": 1416,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
@@ -61,17 +61,17 @@
"meshType": 0,
"vertices": {
"rawPosition": [
-368,
-656,
-320,
-708,
0,
368,
-656,
320,
-708,
0,
-368,
656,
-320,
708,
0,
368,
656,
320,
708,
0
],
"indexes": [
@@ -84,12 +84,12 @@
],
"uv": [
0,
1312,
736,
1312,
1416,
640,
1416,
0,
0,
736,
640,
0
],
"nuv": [
@@ -103,13 +103,13 @@
1
],
"minPos": [
-368,
-656,
-320,
-708,
0
],
"maxPos": [
368,
656,
320,
708,
0
]
},

File diff suppressed because it is too large Load Diff

View File

@@ -1,8 +1,8 @@
{
"skeleton": { "hash": "77Co1XSdrhx5pbYNC4+3itDmNzU=", "spine": "3.8.75", "x": -159, "y": -132.52, "width": 319, "height": 257.52 },
"skeleton": { "hash": "8pYqU/laTecvmfjtjj7k5PZ07Fo=", "spine": "3.8.75", "x": -142.08, "y": -9.48, "width": 319, "height": 250 },
"bones": [
{ "name": "root" },
{ "name": "hui", "parent": "root", "y": -88.52 }
{ "name": "root", "y": 115.52 },
{ "name": "hui", "parent": "root", "x": 8.19, "y": -76.14 }
],
"slots": [
{ "name": "main", "bone": "root", "attachment": "cold_wind_1/appear/cappear1_1" },
@@ -25,7 +25,7 @@
"cold_wind_1/appear/cappear1_10": { "x": 0.5, "width": 277, "height": 250 }
},
"hui": {
"cold_wind_2/appear/cappear2_1": { "x": 0.5, "y": 0.5, "width": 319, "height": 89 },
"cold_wind_2/appear/cappear2_1": { "x": 9.24, "y": 7.18, "width": 319, "height": 89 },
"cold_wind_2/appear/cappear2_2": { "x": 0.5, "y": 0.5, "width": 319, "height": 89 },
"cold_wind_2/appear/cappear2_3": { "x": 0.5, "y": 0.5, "width": 319, "height": 89 },
"cold_wind_2/appear/cappear2_4": { "x": 0.5, "y": 0.5, "width": 319, "height": 89 },

View File

@@ -1257,7 +1257,7 @@
"__type__": "cc.RealKeyframeValue",
"interpolationMode": 0,
"tangentWeightMode": 0,
"value": 60,
"value": 120,
"rightTangent": 0,
"rightTangentWeight": 1,
"leftTangent": 0,
@@ -1457,7 +1457,7 @@
"__type__": "cc.RealKeyframeValue",
"interpolationMode": 0,
"tangentWeightMode": 0,
"value": 70,
"value": 130,
"rightTangent": 0,
"rightTangentWeight": 1,
"leftTangent": 0,

View File

@@ -25,14 +25,14 @@
"_active": true,
"_components": [
{
"__id__": 8
"__id__": 10
},
{
"__id__": 10
"__id__": 12
}
],
"_prefab": {
"__id__": 12
"__id__": 14
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -79,15 +79,18 @@
},
{
"__id__": 5
},
{
"__id__": 7
}
],
"_prefab": {
"__id__": 7
"__id__": 9
},
"_lpos": {
"__type__": "cc.Vec3",
"x": -15,
"y": 0,
"y": 15,
"z": 0
},
"_lrot": {
@@ -100,7 +103,7 @@
"_lscale": {
"__type__": "cc.Vec3",
"x": 0.4,
"y": 0.4,
"y": 0.5,
"z": 1
},
"_mobility": 0,
@@ -186,6 +189,40 @@
"__type__": "cc.CompPrefabInfo",
"fileId": "32r0xl1k5DpI1RJFYPzNLZ"
},
{
"__type__": "f680dkagx9PmbfqtF463/Ua",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 2
},
"_enabled": true,
"__prefab": {
"__id__": 8
},
"speed": 600,
"controlPointSide": 1,
"controlPointOffset": 0.5,
"controlPointRandomness": 0.3,
"autoRotate": true,
"showTrajectory": true,
"trajectoryColor": {
"__type__": "cc.Color",
"r": 0,
"g": 255,
"b": 0,
"a": 255
},
"trajectoryWidth": 3,
"easing": "linear",
"rotationSmoothness": 0.6,
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "ce9AFWN2BNBpngczHlixQi"
},
{
"__type__": "cc.PrefabInfo",
"root": {
@@ -209,7 +246,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 9
"__id__": 11
},
"_contentSize": {
"__type__": "cc.Size",
@@ -237,7 +274,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 11
"__id__": 13
},
"_id": ""
},

View File

@@ -35,10 +35,13 @@
},
{
"__id__": 14
},
{
"__id__": 16
}
],
"_prefab": {
"__id__": 16
"__id__": 18
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -93,7 +96,7 @@
"_lpos": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"y": -50.3,
"z": 0
},
"_lrot": {
@@ -139,7 +142,7 @@
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.49843260188087773,
"y": 0.5
"y": 0.5146008462489697
},
"_id": ""
},
@@ -252,7 +255,7 @@
"fileId": "0f1YvlzyZOLIAHiCyCBXRz"
},
{
"__type__": "cc.BoxCollider2D",
"__type__": "f680dkagx9PmbfqtF463/Ua",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
@@ -263,7 +266,41 @@
"__prefab": {
"__id__": 13
},
"tag": 0,
"speed": 600,
"controlPointSide": 1,
"controlPointOffset": 0.5,
"controlPointRandomness": 0.3,
"autoRotate": true,
"showTrajectory": true,
"trajectoryColor": {
"__type__": "cc.Color",
"r": 0,
"g": 255,
"b": 0,
"a": 255
},
"trajectoryWidth": 3,
"easing": "linear",
"rotationSmoothness": 0.6,
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "0e6z+f6idKOa2zCg9k4m7q"
},
{
"__type__": "cc.BoxCollider2D",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 1
},
"_enabled": true,
"__prefab": {
"__id__": 15
},
"tag": 8,
"_group": 4,
"_density": 1,
"_sensor": true,
@@ -271,19 +308,19 @@
"_restitution": 0,
"_offset": {
"__type__": "cc.Vec2",
"x": 3.6,
"y": -10.2
"x": 4.2,
"y": 27.2
},
"_size": {
"__type__": "cc.Size",
"width": 63.6,
"height": 106.7
"width": 52.3,
"height": 111
},
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "abSos3/xZFOZSp08Izyl05"
"fileId": "73btikQlhE65V10+8BJjPu"
},
{
"__type__": "cc.RigidBody2D",
@@ -295,12 +332,12 @@
},
"_enabled": true,
"__prefab": {
"__id__": 15
"__id__": 17
},
"enabledContactListener": true,
"bullet": false,
"awakeOnLoad": true,
"_group": 1,
"_group": 4,
"_type": 1,
"_allowSleep": false,
"_gravityScale": 1,
@@ -317,7 +354,7 @@
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "2apGMb5RtE2YHEPWvhVoTH"
"fileId": "e4cImvm/JNgbcCdLeGrq6e"
},
{
"__type__": "cc.PrefabInfo",

View File

@@ -90,7 +90,7 @@
"_lpos": {
"__type__": "cc.Vec3",
"x": 0,
"y": 20,
"y": 40,
"z": 0
},
"_lrot": {

View File

@@ -28,26 +28,26 @@
"__id__": 22
},
{
"__id__": 32
"__id__": 40
},
{
"__id__": 44
"__id__": 52
}
],
"_active": true,
"_components": [
{
"__id__": 54
"__id__": 62
},
{
"__id__": 56
"__id__": 64
},
{
"__id__": 58
"__id__": 66
}
],
"_prefab": {
"__id__": 60
"__id__": 68
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -64,8 +64,8 @@
},
"_lscale": {
"__type__": "cc.Vec3",
"x": 1,
"y": 1,
"x": 0.8,
"y": 0.8,
"z": 1
},
"_mobility": 0,
@@ -193,8 +193,8 @@
},
"_contentSize": {
"__type__": "cc.Size",
"width": 29.8076171875,
"height": 39.8
"width": 120,
"height": 40
},
"_anchorPoint": {
"__type__": "cc.Vec2",
@@ -224,37 +224,37 @@
"_dstBlendFactor": 4,
"_color": {
"__type__": "cc.Color",
"r": 172,
"g": 166,
"b": 166,
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
"_string": "10",
"_horizontalAlign": 1,
"_verticalAlign": 1,
"_actualFontSize": 25,
"_fontSize": 25,
"_actualFontSize": 31,
"_fontSize": 30,
"_fontFamily": "Arial",
"_lineHeight": 30,
"_overflow": 0,
"_overflow": 2,
"_enableWrapText": true,
"_font": null,
"_isSystemFontUsed": true,
"_spacingX": 0,
"_isItalic": false,
"_isBold": false,
"_isBold": true,
"_isUnderline": false,
"_underlineHeight": 2,
"_cacheMode": 0,
"_enableOutline": true,
"_outlineColor": {
"__type__": "cc.Color",
"r": 0,
"g": 0,
"b": 0,
"r": 75,
"g": 75,
"b": 75,
"a": 255
},
"_outlineWidth": 1,
"_outlineWidth": 2,
"_enableShadow": false,
"_shadowColor": {
"__type__": "cc.Color",
@@ -596,11 +596,11 @@
"_active": false,
"_components": [
{
"__id__": 29
"__id__": 37
}
],
"_prefab": {
"__id__": 31
"__id__": 39
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -639,18 +639,22 @@
"_parent": {
"__id__": 22
},
"_children": [],
"_children": [
{
"__id__": 24
}
],
"_active": true,
"_components": [
{
"__id__": 24
"__id__": 32
},
{
"__id__": 26
"__id__": 34
}
],
"_prefab": {
"__id__": 28
"__id__": 36
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -681,6 +685,181 @@
},
"_id": ""
},
{
"__type__": "cc.Node",
"_name": "equipment_detail_icon_critical",
"_objFlags": 0,
"__editorExtras__": {},
"_parent": {
"__id__": 23
},
"_children": [],
"_active": true,
"_components": [
{
"__id__": 25
},
{
"__id__": 27
},
{
"__id__": 29
}
],
"_prefab": {
"__id__": 31
},
"_lpos": {
"__type__": "cc.Vec3",
"x": -34.4845703125,
"y": 0,
"z": 0
},
"_lrot": {
"__type__": "cc.Quat",
"x": 0,
"y": 0,
"z": 0,
"w": 1
},
"_lscale": {
"__type__": "cc.Vec3",
"x": 0.6,
"y": 0.6,
"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__": 24
},
"_enabled": true,
"__prefab": {
"__id__": 26
},
"_contentSize": {
"__type__": "cc.Size",
"width": 54,
"height": 58
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 0.5
},
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "c7zvNS325Dao5AM7/JY8an"
},
{
"__type__": "cc.Sprite",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 24
},
"_enabled": true,
"__prefab": {
"__id__": 28
},
"_customMaterial": null,
"_srcBlendFactor": 2,
"_dstBlendFactor": 4,
"_color": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
"_spriteFrame": {
"__uuid__": "f87f53f9-2fba-4a5b-968a-79a593311ab2@cb5e8",
"__expectedType__": "cc.SpriteFrame"
},
"_type": 0,
"_fillType": 0,
"_sizeMode": 1,
"_fillCenter": {
"__type__": "cc.Vec2",
"x": 0,
"y": 0
},
"_fillStart": 0,
"_fillRange": 0,
"_isTrimmedMode": true,
"_useGrayscale": false,
"_atlas": null,
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "0fkJStDQZBU5ozK4OThO8C"
},
{
"__type__": "cc.Widget",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 24
},
"_enabled": true,
"__prefab": {
"__id__": 30
},
"_alignFlags": 8,
"_target": null,
"_left": -32,
"_right": 0,
"_top": 0,
"_bottom": 0,
"_horizontalCenter": 0,
"_verticalCenter": 0,
"_isAbsLeft": true,
"_isAbsRight": true,
"_isAbsTop": true,
"_isAbsBottom": true,
"_isAbsHorizontalCenter": true,
"_isAbsVerticalCenter": true,
"_originalWidth": 0,
"_originalHeight": 0,
"_alignMode": 2,
"_lockFlags": 0,
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "00pV0oo8FDObrvTB1eOM3/"
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__id__": 0
},
"fileId": "81QDtE/GFI8qUV484Ckbkt",
"instance": null,
"targetOverrides": null,
"nestedPrefabInstanceRoots": null
},
{
"__type__": "cc.UITransform",
"_name": "",
@@ -691,12 +870,12 @@
},
"_enabled": true,
"__prefab": {
"__id__": 25
"__id__": 33
},
"_contentSize": {
"__type__": "cc.Size",
"width": 28.497224978397803,
"height": 27.2
"width": 37.369140625,
"height": 48.1
},
"_anchorPoint": {
"__type__": "cc.Vec2",
@@ -719,7 +898,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 27
"__id__": 35
},
"_customMaterial": null,
"_srcBlendFactor": 2,
@@ -734,29 +913,29 @@
"_string": "10",
"_horizontalAlign": 1,
"_verticalAlign": 1,
"_actualFontSize": 20,
"_fontSize": 20,
"_actualFontSize": 30,
"_fontSize": 30,
"_fontFamily": "Arial",
"_lineHeight": 20,
"_lineHeight": 35,
"_overflow": 0,
"_enableWrapText": true,
"_font": null,
"_isSystemFontUsed": true,
"_spacingX": 0,
"_isItalic": true,
"_isBold": false,
"_isItalic": false,
"_isBold": true,
"_isUnderline": false,
"_underlineHeight": 2,
"_cacheMode": 0,
"_enableOutline": true,
"_outlineColor": {
"__type__": "cc.Color",
"r": 0,
"g": 0,
"b": 0,
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
"_outlineWidth": 1,
"_outlineWidth": 2,
"_enableShadow": false,
"_shadowColor": {
"__type__": "cc.Color",
@@ -800,7 +979,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 30
"__id__": 38
},
"_contentSize": {
"__type__": "cc.Size",
@@ -841,20 +1020,20 @@
},
"_children": [
{
"__id__": 33
"__id__": 41
}
],
"_active": false,
"_components": [
{
"__id__": 39
"__id__": 47
},
{
"__id__": 41
"__id__": 49
}
],
"_prefab": {
"__id__": 43
"__id__": 51
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -891,20 +1070,20 @@
"_objFlags": 0,
"__editorExtras__": {},
"_parent": {
"__id__": 32
"__id__": 40
},
"_children": [],
"_active": true,
"_components": [
{
"__id__": 34
"__id__": 42
},
{
"__id__": 36
"__id__": 44
}
],
"_prefab": {
"__id__": 38
"__id__": 46
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -941,11 +1120,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 33
"__id__": 41
},
"_enabled": true,
"__prefab": {
"__id__": 35
"__id__": 43
},
"_contentSize": {
"__type__": "cc.Size",
@@ -969,11 +1148,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 33
"__id__": 41
},
"_enabled": true,
"__prefab": {
"__id__": 37
"__id__": 45
},
"_customMaterial": null,
"_srcBlendFactor": 2,
@@ -1050,11 +1229,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 32
"__id__": 40
},
"_enabled": true,
"__prefab": {
"__id__": 40
"__id__": 48
},
"_contentSize": {
"__type__": "cc.Size",
@@ -1078,11 +1257,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 32
"__id__": 40
},
"_enabled": true,
"__prefab": {
"__id__": 42
"__id__": 50
},
"_customMaterial": null,
"_srcBlendFactor": 2,
@@ -1137,17 +1316,17 @@
},
"_children": [
{
"__id__": 45
"__id__": 53
}
],
"_active": false,
"_components": [
{
"__id__": 51
"__id__": 59
}
],
"_prefab": {
"__id__": 53
"__id__": 61
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -1184,20 +1363,20 @@
"_objFlags": 0,
"__editorExtras__": {},
"_parent": {
"__id__": 44
"__id__": 52
},
"_children": [],
"_active": true,
"_components": [
{
"__id__": 46
"__id__": 54
},
{
"__id__": 48
"__id__": 56
}
],
"_prefab": {
"__id__": 50
"__id__": 58
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -1234,11 +1413,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 45
"__id__": 53
},
"_enabled": true,
"__prefab": {
"__id__": 47
"__id__": 55
},
"_contentSize": {
"__type__": "cc.Size",
@@ -1262,11 +1441,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 45
"__id__": 53
},
"_enabled": true,
"__prefab": {
"__id__": 49
"__id__": 57
},
"_customMaterial": null,
"_srcBlendFactor": 2,
@@ -1343,11 +1522,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 44
"__id__": 52
},
"_enabled": true,
"__prefab": {
"__id__": 52
"__id__": 60
},
"_contentSize": {
"__type__": "cc.Size",
@@ -1388,7 +1567,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 55
"__id__": 63
},
"_contentSize": {
"__type__": "cc.Size",
@@ -1416,7 +1595,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 57
"__id__": 65
},
"_id": ""
},
@@ -1434,7 +1613,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 59
"__id__": 67
},
"playOnLoad": true,
"_clips": [

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 258 KiB

After

Width:  |  Height:  |  Size: 280 KiB

File diff suppressed because it is too large Load Diff

View File

@@ -137,20 +137,33 @@ export const SuperCardsType={
BUFF:3, //buff技能 范围buff
DEBUFF:4, //debuff技能 范围debuff
}
export const SuperCardsList=[3001,3002,3101,3102,3103,3201,3301];
export const Quality={
WHITE:1,
GREEN:2,
BLUE:3,
PURPLE:4,
ORANGE:5,
}
export const SuperCardsList=[3001,3002,3101,3102,3103,3104,3105,3106];
export const SuperCards={
3001:{uuid:3001,name:"附魔宝典",path:"3001",type:SuperCardsType.SPECIAL,value1:1,value2:0,value3:0,
3001:{uuid:3001,name:"附魔宝典",quality:Quality.WHITE,path:"3001",type:SuperCardsType.SPECIAL,value1:1,value2:0,value3:0,
info:"攻击触发提高英雄/伙伴属性的效果,额外添加+1攻击力"},
3002:{uuid:3002,name:"附魔宝典",path:"3002",type:SuperCardsType.SPECIAL,value1:1,value2:0,value3:0,
3002:{uuid:3002,name:"附魔宝典",quality:Quality.WHITE,path:"3002",type:SuperCardsType.SPECIAL,value1:1,value2:0,value3:0,
info:"攻击触发高英雄/伙伴属性的效果,额外添加+1生命值"},
3101:{uuid:3101,name:"陨石术",path:"3101",type:SuperCardsType.AOE,value1:SkillSet[6019].uuid,value2:3,value3:0,
3101:{uuid:3101,name:"陨石术",quality:Quality.WHITE,path:"3101",type:SuperCardsType.AOE,value1:SkillSet[6019].uuid,value2:3,value3:0,
info:"召唤大量火球攻击敌人,每个火球对敌人造成英雄攻击力的300%伤害"},
3102:{uuid:3102,name:"冰刺",path:"3102",type:SuperCardsType.AOE,value1:SkillSet[6017].uuid,value2:3,value3:0,
3102:{uuid:3102,name:"冰刺",quality:Quality.WHITE,path:"3102",type:SuperCardsType.AOE,value1:SkillSet[6017].uuid,value2:3,value3:0,
info:"召唤大量火球攻击敌人,每个火球对敌人造成英雄攻击力的300%伤害"},
3103:{uuid:3103,name:"潮汐",path:"3103",type:SuperCardsType.AOE,value1:SkillSet[6018].uuid,value2:3,value3:0,
3103:{uuid:3103,name:"潮汐",quality:Quality.WHITE,path:"3103",type:SuperCardsType.AOE,value1:SkillSet[6018].uuid,value2:3,value3:0,
info:"召唤大量火球攻击敌人,每个火球对敌人造成英雄攻击力的300%伤害"},
3201:{uuid:3201,name:"极速充能",path:"3201",type:SuperCardsType.BUFF,value1:10,value2:100,value3:0,
3104:{uuid:3104,name:"龙卷风",quality:Quality.WHITE,path:"3104",type:SuperCardsType.AOE,value1:SkillSet[6013].uuid,value2:3,value3:0,
info:"召唤大量火球攻击敌人,每个火球对敌人造成英雄攻击力的300%伤害"},
3105:{uuid:3105,name:"火球风暴",quality:Quality.WHITE,path:"3105",type:SuperCardsType.AOE,value1:SkillSet[6012].uuid,value2:3,value3:0,
info:"召唤大量火球攻击敌人,每个火球对敌人造成英雄攻击力的300%伤害"},
3106:{uuid:3106,name:"冰雨",quality:Quality.WHITE,path:"3106",type:SuperCardsType.AOE,value1:SkillSet[6020].uuid,value2:3,value3:0,
info:"召唤大量火球攻击敌人,每个火球对敌人造成英雄攻击力的300%伤害"},
3201:{uuid:3201,name:"极速充能",quality:Quality.WHITE,path:"3201",type:SuperCardsType.BUFF,value1:10,value2:100,value3:0,
info:"你的英雄/伙伴接下来的10次普通攻击速度提升100%"},
3301:{uuid:3301,name:"冰霜风暴",path:"3301",type:SuperCardsType.DEBUFF,value1:30,value2:10,value3:0,
3301:{uuid:3301,name:"冰霜风暴",quality:Quality.WHITE,path:"3301",type:SuperCardsType.DEBUFF,value1:30,value2:10,value3:0,
info:"场上敌人获得30%的易伤,(下10次伤害)"},
}

View File

@@ -38,7 +38,7 @@ export enum EquipSpecialAttr {
DOUBLE_DEAD=10, //双倍死亡触发
DOUBLE_ATKED=11, //双倍受击触发
}
export enum EquipQuality {
export enum Quality {
WHITE = 1,
GREEN = 2,
BLUE = 3,
@@ -71,13 +71,14 @@ export interface EquipData {
uuid: number; // 装备唯一ID
name: string; // 装备名称
type: EquipType; // 装备类型
quality: Quality; // 装备品质
info: string; // 装备描述
special_attr: EquipSpecialAttrData[]; // 特殊属性数组
buff: EquipAttribute[]; // 属性加成列表
debuff: EquipDebuffAttribute[]; // 属性减益列表
}
export const EquipInfo: { [key: number]: EquipData } = {
2001: {uuid: 2001, name: "新手剑", type: EquipType.WEAPON,info:"攻击力增加80%",
2001: {uuid: 2001, name: "新手剑", type: EquipType.WEAPON,quality: Quality.WHITE,info:"攻击力增加80%",
special_attr: [
{special_attr:EquipSpecialAttr.ATK_ADD_FRIEND_ATK,special_attr_value:3},
{special_attr:EquipSpecialAttr.ICE,special_attr_value:1},
@@ -90,12 +91,13 @@ export const EquipInfo: { [key: number]: EquipData } = {
],
buff: [
{ type: BuffAttr.ATK, value: 80, target: EquipAttrTarget.HERO },
{ type: BuffAttr.ATK_COUNT, value: 30, target: EquipAttrTarget.HERO },
],
debuff: [
{ type: DebuffAttr.DECD, value: 50, target: EquipAttrTarget.ENEMY },
]
},
2002: {uuid: 2002,name: "新手剑2",type: EquipType.WEAPON,info:"攻击速度增加30%",
2002: {uuid: 2002,name: "新手剑2",type: EquipType.WEAPON,quality: Quality.WHITE,info:"攻击速度增加30%",
special_attr:[
{special_attr:EquipSpecialAttr.FIRE,special_attr_value:1},
{special_attr:EquipSpecialAttr.DOUBLE_DEAD,special_attr_value:1},
@@ -108,12 +110,13 @@ export const EquipInfo: { [key: number]: EquipData } = {
],
buff: [
{ type: BuffAttr.ATK_CD, value: 30, target: EquipAttrTarget.HERO },
{ type: BuffAttr.ATK_COUNT, value: 30, target: EquipAttrTarget.HERO },
],
debuff: [
{ type: DebuffAttr.DECD, value: 50, target: EquipAttrTarget.ENEMY },
]
},
2003: {uuid: 2003,name: "新手剑3",type: EquipType.WEAPON,info:"攻击次数增加1次",
2003: {uuid: 2003,name: "新手剑3",type: EquipType.WEAPON,quality: Quality.WHITE,info:"攻击次数增加1次",
special_attr:[
{special_attr:EquipSpecialAttr.WIND,special_attr_value:1},
{special_attr:EquipSpecialAttr.DOUBLE_DEAD,special_attr_value:1},

View File

@@ -39,7 +39,7 @@ export enum GameEvent {
EquipAdd = "EquipAdd",
EquipRemove = "EquipRemove",
EquipSelect = "EquipSelect",
EquipSelectEnd = "EquipSelectEnd",
FuncSelect = "FuncSelect",
WaveUpdate = "WaveUpdate",
ChangeATK = "ChangeATK",
ChangeATK_FRIEND_LIVE_CD = "ChangeATK_FRIEND_LIVE_CD",

View File

@@ -53,10 +53,21 @@ export const MissionStatus = {
}
export enum FightSet {
FRIEND_WAVE_UP=2, //伙伴登场波次
MON_WAVE_TIME=30,//怪物波次时间
BOSS_WAVE_UP_1=3, //boss登场波次
BOSS_WAVE_UP_2=5, //boss登场波次
BOSS_WAVE_UP_3=7, //boss登场波次
EQUIP_WAVE_UP_1=4, //装备登场波次
EQUIP_WAVE_UP_2=6, //装备登场波次
EQUIP_WAVE_UP_3=8, //装备登场波次
SKILL_WAVE_UP_1=1, //技能登场波次
SKILL_WAVE_UP_2=3, //技能登场波次
SKILL_WAVE_UP_3=5, //技能登场波次
MON_WAVE_TIME=10,//怪物波次时间
FRIEND_LIVE_CD=10,//伙伴复活时间
ATK_ADD_FRIEND_COUNT=4,//伙伴攻击力增加
ATK_ADD_GLOD=1,//金币增加
CRIT_DAMAGE=50,//暴击伤害
DOUBLE_ATK_RATE=100,//额外攻击默认概率
// ATK_TO_ATK_RATIO=0.1,
// ATK_TO_HP_RATIO=0.2,
// ATK_TO_SHIELD_RATIO=2,
@@ -74,7 +85,7 @@ export const MissionData = {
gold:1000,//金币
score:0,//分数
refrsh_time:5, //刷新时间
refresh_gold:3,//刷新金币
refresh_gold:1,//刷新金币
call_gold:0,//召唤金币
add_gold:1,//金币增加
change_gold:0,//金币变化

View File

@@ -59,7 +59,7 @@ export enum EType {
collision = 3,
countEnd = 4,
}
//debuff类型
export enum DebuffAttr {
STUN = 1, //眩晕
SLOW = 2, //减速
@@ -69,8 +69,12 @@ export enum DebuffAttr {
DEHP = 6, //减hp
DEATK = 7, //减atk
DECOUNT = 8, //减攻击次数
BACK = 9, //击退
CRITICAL = 10, //自身暴击率降低
DODGE = 11, //闪避
}
//buff类型
export enum BuffAttr {
ATK = 1, // 攻击力
ATK_COUNT = 2, // 攻击个数
@@ -81,6 +85,11 @@ export enum BuffAttr {
SKILL_CD = 7, // 技能冷却缩减
CARD_EFFECT = 8, // 卡牌效果
CARD_COUNT = 8, // 卡牌起效次数,每3次多起效一次
CRITICAL = 9, //暴击率
CRITICAL_DMG = 10, //暴击伤害
CRITICAL_NO = 11, //暴击免疫
DODGE = 12, //闪避
DODGE_NO = 13, //闪避免疫
}
export const geDebuffNum=()=>{
@@ -93,6 +102,8 @@ export const geDebuffNum=()=>{
DEHP:0, //减hp
DEATK:0, //减atk
DECOUNT:0, //减攻击次数
CRITICAL:0, //暴击
DODGE:0, //闪避
}
}
@@ -108,17 +119,28 @@ export const getBuffNum=()=>{
SKILL_CD:0, // 技能冷却缩减
CARD_EFFECT:0, // 卡牌效果
CARD_COUNT:0, // 卡牌起效次数,每3次多起效一次
CRITICAL:0, //暴击
CRITICAL_DMG:0, //暴击伤害
CRITICAL_NO:0, //暴击免疫
DODGE:0, //闪避
DODGE_NO:0, //闪避免疫
}
}
export enum Quality{
WHITE=1,
GREEN=2,
BLUE=3,
PURPLE=4,
ORANGE=5,
}
/*
path: 图片地址
[debuff] : 0:无12灼烧3眩晕4降低攻击5降低hp6降低防御7吸血8击退
depb:触发比率
debtime :持续时间
derate:伤害比率
in:持续时间
deV:0,deC:0,in:持续时间
count:触发次数
def:增加防御比例
apup:增加攻击比例
@@ -126,7 +148,7 @@ ap:施法者攻击
mhp:增加最大生命比例
hp:增加当前生命比例
cd:buff/debuff持续时间
/debhited:伤害时间
/debhit:1,hited:伤害时间
shield:增加护盾占最大生命比例
speed:移动速度
sonsk:子技能id
@@ -136,91 +158,89 @@ info:技能描述
*/
export const HeroSkillList = [6001,6001,6001,6001,6001,6001]
export const SkillSet = {
6001:{uuid:6001,name:"凛冬之触",sp_name:"greenball",path:"6001",TType:TType.Frontline,
TGroup:3,act:"atk",CdType:1,AType:AType.parabolic,RType:RType.bezier,EType:3,fname:"max",flash:false,with:90,
debuff:0,in:0.8,ap:100,cd:5,hited:0.3,shield:0,speed:720,sonsk:0,hero:0,info:"向最前方敌人释放寒冰弹,造成100%攻击的伤害"},
6001:{uuid:6001,name:"凛冬之触",sp_name:"greenball",path:"6001",quality:Quality.WHITE, TType:TType.Frontline,
TGroup:TGroup.Enemy,act:"atk",CdType:1,AType:AType.parabolic,RType:RType.bezier,EType:EType.collision,fname:"max",flash:false,with:90,
debuff:0,deV:0,deC:0,in:0.8,ap:100,cd:5,hit:1,hited:0.3,shield:0,speed:720,sonsk:0,hero:0,info:"向最前方敌人释放寒冰弹,造成100%攻击的伤害"},
6002:{uuid:6002,name:"穿心箭矢",sp_name:"arrow",path:"6006",TType:TType.Frontline,
TGroup:3,act:"atk",CdType:1,AType:AType.parabolic,RType:RType.bezier,EType:3,fname:"max",flash:false,with:90,
debuff:0,in:0.8,ap:100,cd:5,hited:0.3,shield:0,speed:720,sonsk:0,hero:0,info:"向最前方敌人释放箭矢,造成100%攻击的伤害"},
6002:{uuid:6002,name:"穿心箭矢",sp_name:"arrow",path:"6006",quality:Quality.WHITE, TType:TType.Frontline,
TGroup:TGroup.Enemy,act:"atk",CdType:1,AType:AType.parabolic,RType:RType.bezier,EType:EType.collision,fname:"max",flash:false,with:90,
debuff:0,deV:0,deC:0,in:0.8,ap:100,cd:5,hit:1,hited:0.3,shield:0,speed:720,sonsk:0,hero:0,info:"向最前方敌人释放箭矢,造成100%攻击的伤害"},
6003:{uuid:6003,name:"神圣护盾",sp_name:"shield",path:"6018",TType:TType.Frontline,
TGroup:0,act:"max",CdType:2,AType:AType.parabolic,RType:RType.bezier,EType:1,fname:"max",flash:false,with:90,
debuff:0,in:0.8,ap:100,cd:5,hited:0.3,shield:30,speed:720,sonsk:0,hero:0,info:"召唤圣盾保护自己,可以抵御3次攻击"},
6003:{uuid:6003,name:"神圣护盾",sp_name:"shield",path:"6018",quality:Quality.WHITE, TType:TType.Frontline,
TGroup:TGroup.Self,act:"max",CdType:2,AType:AType.parabolic,RType:RType.bezier,EType:EType.animationEnd,fname:"max",flash:false,with:90,
debuff:0,deV:0,deC:0,in:0.8,ap:100,cd:5,hit:1,hited:0.3,shield:30,speed:720,sonsk:0,hero:0,info:"召唤圣盾保护自己,可以抵御3次攻击"},
6004:{uuid:6004,name:"自愈", sp_name:"heath_small",path:"6032",TType:TType.Frontline,
TGroup:0,act:"max",CdType:2,AType:AType.parabolic,RType:RType.bezier,EType:1,fname:"max",flash:false,with:90,
debuff:0,in:2,ap:100,cd:5,hited:0.3,shield:0,speed:720,sonsk:0,hero:0,info:"主动:自己回复自身5%最大生命值的生命"},
6004:{uuid:6004,name:"自愈", sp_name:"heath_small",path:"6032",quality:Quality.WHITE, TType:TType.Frontline,
TGroup:TGroup.Self,act:"max",CdType:2,AType:AType.parabolic,RType:RType.bezier,EType:EType.animationEnd,fname:"max",flash:false,with:90,
debuff:0,deV:0,deC:0,in:2,ap:100,cd:5,hit:1,hited:0.3,shield:0,speed:720,sonsk:0,hero:0,info:"主动:自己回复自身5%最大生命值的生命"},
6007:{uuid:6007,name:"铁斧打击",sp_name:"mon_ft",path:"6007",TType:TType.Frontline,
TGroup:3,act:"atk",CdType:1,AType:AType.parabolic,RType:RType.bezier,EType:3,fname:"max",flash:false,with:90,
debuff:0,in:0.8,ap:100,cd:5,hited:0.3,shield:0,speed:720,sonsk:0,hero:0,info:"向最前方敌人扔出铁斧,造成100%攻击的伤害"},
6008:{uuid:6008,name:"木棍打击",sp_name:"mon_ly",path:"6008",TType:TType.Frontline,
TGroup:3,act:"atk",CdType:1,AType:AType.parabolic,RType:RType.bezier,EType:3,fname:"max",flash:false,with:90,
debuff:0,in:0.8,ap:100,cd:5,hited:0.3,shield:0,speed:720,sonsk:0,hero:0,info:"向最前方敌人扔出木棍,造成100%攻击的伤害"},
6009:{uuid:6009,name:"飞刀打击",sp_name:"mon_xd",path:"6009",TType:TType.Frontline,
TGroup:3,act:"atk",CdType:1,AType:AType.parabolic,RType:RType.bezier,EType:3,fname:"max",flash:false,with:90,
debuff:0,in:0.8,ap:100,cd:5,hited:0.3,shield:0,speed:720,sonsk:0,hero:0,info:"向最前方敌人扔出飞刀,造成100%攻击的伤害"},
6010:{uuid:6010,name:"石斧打击",sp_name:"mon_sf",path:"6010",TType:TType.Frontline,
TGroup:3,act:"atk",CdType:1,AType:AType.parabolic,RType:RType.bezier,EType:3,fname:"max",flash:false,with:90,
debuff:0,in:0.8,ap:100,cd:5,hited:0.3,shield:0,speed:720,sonsk:0,hero:0,info:"向最前方敌人扔出石斧,造成100%攻击的伤害"},
6007:{uuid:6007,name:"铁斧打击",sp_name:"mon_ft",path:"6007",quality:Quality.WHITE, TType:TType.Frontline,
TGroup:TGroup.Enemy,act:"atk",CdType:1,AType:AType.parabolic,RType:RType.bezier,EType:EType.collision,fname:"max",flash:false,with:90,
debuff:0,deV:0,deC:0,in:0.8,ap:100,cd:5,hit:1,hited:0.3,shield:0,speed:720,sonsk:0,hero:0,info:"向最前方敌人扔出铁斧,造成100%攻击的伤害"},
6008:{uuid:6008,name:"木棍打击",sp_name:"mon_ly",path:"6008",quality:Quality.WHITE, TType:TType.Frontline,
TGroup:TGroup.Enemy,act:"atk",CdType:1,AType:AType.parabolic,RType:RType.bezier,EType:EType.collision,fname:"max",flash:false,with:90,
debuff:0,deV:0,deC:0,in:0.8,ap:100,cd:5,hit:1,hited:0.3,shield:0,speed:720,sonsk:0,hero:0,info:"向最前方敌人扔出木棍,造成100%攻击的伤害"},
6009:{uuid:6009,name:"飞刀打击",sp_name:"mon_xd",path:"6009",quality:Quality.WHITE, TType:TType.Frontline,
TGroup:TGroup.Enemy,act:"atk",CdType:1,AType:AType.parabolic,RType:RType.bezier,EType:EType.collision,fname:"max",flash:false,with:90,
debuff:0,deV:0,deC:0,in:0.8,ap:100,cd:5,hit:1,hited:0.3,shield:0,speed:720,sonsk:0,hero:0,info:"向最前方敌人扔出飞刀,造成100%攻击的伤害"},
6010:{uuid:6010,name:"石斧打击",sp_name:"mon_sf",path:"6010",quality:Quality.WHITE, TType:TType.Frontline,
TGroup:TGroup.Enemy,act:"atk",CdType:1,AType:AType.parabolic,RType:RType.bezier,EType:EType.collision,fname:"max",flash:false,with:90,
debuff:0,deV:0,deC:0,in:0.8,ap:100,cd:5,hit:1,hited:0.3,shield:0,speed:720,sonsk:0,hero:0,info:"向最前方敌人扔出石斧,造成100%攻击的伤害"},
6011:{uuid:6011,name:"烈火呼吸",sp_name:"firequan",path:"6011",TType:TType.Frontline,
TGroup:3,act:"max",CdType:2,AType:AType.parabolic,RType:RType.bezier,EType:1,fname:"max",flash:false,with:90,
debuff:0,in:3,ap:100,cd:5,hited:0.3,shield:0,speed:720,sonsk:0,hero:0,info:"召唤烈焰攻击前方敌人,造成200%攻击的伤害,烈焰维持3秒"},
6012:{uuid:6012,name:"大火球" ,sp_name:"fire",path:"6012",quality:Quality.WHITE, TType:TType.Frontline,
TGroup:TGroup.Enemy,act:"atk",CdType:2,AType:AType.linear,RType:RType.linear,EType:EType.collision,fname:"max",flash:false,with:90,
debuff:DebuffAttr.BURN,deV:20,deC:1,in:1,ap:300,cd:5,hit:2,hited:0.3,shield:0,speed:720,sonsk:0,hero:0,info:"召唤大火球攻击前方所有敌人,造成300%攻击的伤害,有一定几率施加灼烧"},
6012:{uuid:6012,name:"大火球" ,sp_name:"fire",path:"6012",TType:TType.Frontline,
TGroup:3,act:"max",CdType:2,AType:AType.parabolic,RType:RType.linear,EType:1,fname:"max",flash:false,with:90,
debuff:2,in:1,ap:300,cd:5,hited:0.3,shield:0,speed:720,sonsk:0,hero:0,info:"召唤大火球攻击前方所有敌人,造成300%攻击的伤害,有一定几率施加灼烧"},
6013:{uuid:6013,name:"龙卷风", sp_name:"bwind",path:"6016",quality:Quality.WHITE, TType:TType.Frontline,
TGroup:TGroup.Enemy,act:"max",CdType:2,AType:AType.linear,RType:RType.linear,EType:EType.collision,fname:"max",flash:false,with:90,
debuff:DebuffAttr.BACK,deV:0,deC:0,in:3,ap:200,cd:5,hit:1,hited:1,shield:0,speed:360,sonsk:0,hero:0,info:"召唤大火球攻击前方所有敌人,造成200%攻击的伤害,50%几率击退敌人"},
6013:{uuid:6013,name:"火墙", sp_name:"firewall",path:"6013",TType:TType.Frontline,
TGroup:3,act:"max",CdType:2,AType:AType.fixedEnd,RType:RType.bezier,EType:1,fname:"max",flash:false,with:90,
debuff:0,in:10,ap:50,cd:5,hited:0.3,shield:0,speed:720,sonsk:0,hero:0,info:"在最前方敌人位置,召唤一堵火墙,持续10秒,每秒造成50%攻击伤害"},
6014:{uuid:6014,name:"寒冰箭", sp_name:"arrow_blue",path:"6014",quality:Quality.WHITE, TType:TType.Frontline,
TGroup:TGroup.Enemy,act:"atk",CdType:2,AType:AType.linear,RType:RType.linear,EType:EType.collision,fname:"max",flash:false,with:90,
debuff:DebuffAttr.FROST,deV:0,deC:0,in:1,ap:200,cd:5,hit:1,hited:0.3,shield:0,speed:720,sonsk:0,hero:0,info:"召唤大火球攻击前方所有敌人,造成200%攻击伤害,20%几率冰冻敌人"},
6014:{uuid:6014,name:"寒冰箭", sp_name:"arrow_blue",path:"6014",TType:TType.Frontline,
TGroup:3,act:"max",CdType:2,AType:AType.parabolic,RType:RType.bezier,EType:1,fname:"max",flash:false,with:90,
debuff:1,in:1,ap:200,cd:5,hited:0.3,shield:0,speed:720,sonsk:0,hero:0,info:"召唤大火球攻击前方所有敌人,造成200%攻击的伤害,20%几率冰冻敌人"},
6015:{uuid:6015,name:"烈焰射击",sp_name:"arrow_yellow",path:"6015",quality:Quality.WHITE, TType:TType.Frontline,
TGroup:TGroup.Enemy,act:"atk",CdType:2,AType:AType.parabolic,RType:RType.bezier,EType:EType.collision,fname:"max",flash:false,with:90,
debuff:3,deV:0,deC:0,in:1,ap:200,cd:5,hit:1,hited:0.3,shield:0,speed:720,sonsk:0,hero:0,info:"召唤大火球攻击前方所有敌人,造成200%攻击的伤害,20%几率眩晕敌人"},
6015:{uuid:6015,name:"烈焰射击",sp_name:"arrow_yellow",path:"6015",TType:TType.Frontline,
TGroup:3,act:"max",CdType:2,AType:AType.parabolic,RType:RType.bezier,EType:1,fname:"max",flash:false,with:90,
debuff:3,in:1,ap:200,cd:5,hited:0.3,shield:0,speed:720,sonsk:0,hero:0,info:"召唤大火球攻击前方所有敌人,造成200%攻击伤害,20%几率眩晕敌人"},
6016:{uuid:6016,name:"火墙", sp_name:"firewall",path:"6013",quality:Quality.WHITE, TType:TType.Frontline,
TGroup:TGroup.Ally,act:"max",CdType:2,AType:AType.fixedEnd,RType:RType.fixed,EType:EType.timeEnd,fname:"max",flash:false,with:90,
debuff:0,deV:0,deC:0,in:10,ap:50,cd:5,hit:1,hited:0.3,shield:0,speed:720,sonsk:0,hero:0,info:"在最前方敌人位置,召唤一堵火墙,持续10秒,每秒造成50%攻击伤害"},
6017:{uuid:6017,name:"冰刺",sp_name:"icez",path:"6022",quality:Quality.WHITE, TType:TType.Frontline,
TGroup:TGroup.Ally,act:"max",CdType:2,AType:AType.fixedEnd,RType:RType.fixed,EType:EType.animationEnd,fname:"max",flash:false,with:90,
debuff:DebuffAttr.FROST,deV:0,deC:0,in:1,ap:300,cd:5,hit:1,hited:0.3,shield:0,speed:720,sonsk:0,hero:0,info:"在最前方敌人位置,召唤冰刺攻击敌人,造成200%攻击的伤害,20%几率冰冻敌人"},
6018:{uuid:6018,name:"潮汐", sp_name:"watert",path:"6026",quality:Quality.WHITE, TType:TType.Frontline,
TGroup:TGroup.Ally,act:"max",CdType:2,AType:AType.fixedEnd,RType:RType.fixed,EType:EType.animationEnd,fname:"max",flash:false,with:90,
debuff:DebuffAttr.BACK,deV:0,deC:0,in:3,ap:100,cd:5,hit:1,hited:0.3,shield:0,speed:720,sonsk:0,hero:0,info:"在最前方敌人位置,召唤水柱攻击敌人,每秒造成100%攻击的伤害,50%几率击退敌人"},
6019:{uuid:6019,name:"陨石术", sp_name:"fireys",path:"6029",quality:Quality.WHITE, TType:TType.Frontline,
TGroup:TGroup.Ally,act:"max",CdType:2,AType:AType.fixedEnd,RType:RType.fixed,EType:EType.animationEnd,fname:"max",flash:false,with:90,
debuff:0,deV:0,deC:0,in:3,ap:500,cd:5,hit:1,hited:0.3,shield:0,speed:720,sonsk:0,hero:0,info:"在最前方敌人位置,召唤陨石攻击敌人,造成500%攻击的伤害"},
6016:{uuid:6016,name:"龙卷风", sp_name:"bwind",path:"6016",TType:TType.Frontline,
TGroup:3,act:"max",CdType:2,AType:AType.parabolic,RType:RType.bezier,EType:1,fname:"max",flash:false,with:90,
debuff:8,in:1,ap:200,cd:5,hited:0.3,shield:0,speed:720,sonsk:0,hero:0,info:"召唤大火球攻击前方所有敌人,造成200%攻击的伤害,50%几率击退敌人"},
6017:{uuid:6017,name:"冰刺",sp_name:"icez",path:"6022",TType:TType.Frontline,
TGroup:3,act:"max",CdType:2,AType:AType.fixedEnd,RType:RType.linear,EType:1,fname:"max",flash:false,with:90,
debuff:1,in:1,ap:300,cd:5,hited:0.3,shield:0,speed:720,sonsk:0,hero:0,info:"在最前方敌人位置,召唤冰刺攻击敌人,造成200%攻击的伤害,20%几率冰冻敌人"},
6018:{uuid:6018,name:"潮汐", sp_name:"watert",path:"6026",TType:TType.Frontline,
TGroup:3,act:"max",CdType:2,AType:AType.fixedEnd,RType:RType.linear,EType:1,fname:"max",flash:false,with:90,
debuff:8,in:3,ap:100,cd:5,hited:0.3,shield:0,speed:720,sonsk:0,hero:0,info:"在最前方敌人位置,召唤水柱攻击敌人,每秒造成100%攻击的伤害,50%几率击退敌人"},
6019:{uuid:6019,name:"陨石术", sp_name:"fireys",path:"6029",TType:TType.Frontline,
TGroup:3,act:"max",CdType:2,AType:AType.fixedEnd,RType:RType.bezier,EType:1,fname:"max",flash:false,with:90,
debuff:8,in:3,ap:500,cd:5,hited:0.3,shield:0,speed:720,sonsk:0,hero:0,info:"在最前方敌人位置,召唤陨石攻击敌人,造成500%攻击的伤害"},
6020:{uuid:6020,name:"冰暴",sp_name:"bingyu",path:"6034",quality:Quality.WHITE, TType:TType.Frontline,
TGroup:TGroup.Ally,act:"max",CdType:2,AType:AType.fixedEnd,RType:RType.fixed,EType:EType.timeEnd,fname:"max",flash:false,with:90,
debuff:4,deV:0,deC:0,in:4,ap:80,cd:5,hit:1,hited:1,shield:0,speed:720,sonsk:0,hero:0,info:"射出能量暴风箭攻击前方范围敌人,每波造成80%攻击的伤害"},
6021:{uuid:6021,name:"烈火呼吸",sp_name:"firequan",path:"6011",quality:Quality.WHITE, TType:TType.Frontline,
TGroup:TGroup.Ally,act:"max",CdType:2,AType:AType.linear,RType:RType.linear,EType:EType.timeEnd,fname:"max",flash:false,with:90,
debuff:0,deV:0,deC:0,in:3,ap:100,cd:5,hit:1,hited:0.3,shield:0,speed:720,sonsk:0,hero:0,info:"召唤烈焰攻击前方敌人,造成200%攻击的伤害,烈焰维持3秒"},
6023:{uuid:6023,name:"冰墙", sp_name:"icet",path:"6023",TType:TType.Frontline,
TGroup:3,act:"max",CdType:2,AType:AType.parabolic,RType:RType.bezier,EType:1,fname:"max",flash:false,with:90,
debuff:8,in:1,ap:400,cd:5,hited:0.3,shield:0,speed:720,sonsk:0,hero:0,info:"在最前方敌人位置,召唤冰墙攻击敌人,造成200%攻击的伤害,50%几率击退敌人"},
6023:{uuid:6023,name:"冰墙", sp_name:"icet",path:"6023",quality:Quality.WHITE, TType:TType.Frontline,
TGroup:TGroup.Enemy,act:"max",CdType:2,AType:AType.parabolic,RType:RType.bezier,EType:EType.animationEnd,fname:"max",flash:false,with:90,
debuff:DebuffAttr.BACK,deV:0,deC:0,in:1,ap:400,cd:5,hit:1,hited:0.3,shield:0,speed:720,sonsk:0,hero:0,info:"在最前方敌人位置,召唤冰墙攻击敌人,造成200%攻击的伤害,50%几率击退敌人"},
6025:{uuid:6025,name:"火焰漩涡",sp_name:"fireball",path:"6025",TType:TType.Frontline,
TGroup:3,act:"max",CdType:2,AType:AType.parabolic,RType:RType.bezier,EType:1,fname:"max",flash:false,with:90,
debuff:8,in:3,ap:500,cd:5,hited:0.3,shield:0,speed:720,sonsk:0,hero:0,info:"召唤一个能量球射向前方敌人,对遇到的第一个敌人造成500%攻击的伤害,并击退"},
6025:{uuid:6025,name:"火焰漩涡",sp_name:"fireball",path:"6025",quality:Quality.WHITE, TType:TType.Frontline,
TGroup:TGroup.Enemy,act:"max",CdType:2,AType:AType.parabolic,RType:RType.bezier,EType:EType.timeEnd,fname:"max",flash:false,with:90,
debuff:DebuffAttr.BACK,deV:0,deC:0,in:3,ap:500,cd:5,hit:1,hited:0.3,shield:0,speed:720,sonsk:0,hero:0,info:"召唤一个能量球射向前方敌人,对遇到的第一个敌人造成500%攻击的伤害,并击退"},
6030:{uuid:6030,name:"闪电呼吸",sp_name:"dianquan",path:"6030",TType:TType.Frontline,
TGroup:3,act:"max",CdType:2,AType:AType.parabolic,RType:RType.bezier,EType:1,fname:"max",flash:false,with:90,
debuff:0,in:3,ap:100,cd:5,hited:0.3,shield:0,speed:720,sonsk:0,hero:0,info:"召唤闪电攻击前方敌人,造成200%攻击的伤害,烈焰维持3秒"},
6031:{uuid:6031,name:"召唤仆从",sp_name:"zhaohuan",path:"6031",TType:TType.Frontline,
TGroup:0,act:"max",CdType:2,AType:AType.parabolic,RType:RType.bezier,EType:1,fname:"max_blue",flash:true,with:90,
debuff:0,in:2,ap:70,cd:5,hited:0.3,shield:0,speed:720,sonsk:0,hero:5211,info:"召唤一个与施法者等级相同的骷髅战士为我方而战"},
6031:{uuid:6031,name:"召唤仆从",sp_name:"zhaohuan",path:"6031",quality:Quality.WHITE, TType:TType.Frontline,
TGroup:TGroup.Self,act:"max",CdType:2,AType:AType.parabolic,RType:RType.bezier,EType:EType.animationEnd,fname:"max_blue",flash:true,with:90,
debuff:0,deV:0,deC:0,in:2,ap:70,cd:5,hit:1,hited:0.3,shield:0,speed:720,sonsk:0,hero:5211,info:"召唤一个与施法者等级相同的骷髅战士为我方而战"},
6034:{uuid:6034,name:"风暴之矢",sp_name:"bingyu",path:"6034",TType:TType.Frontline,
TGroup:3,act:"max",CdType:2,AType:AType.parabolic,RType:RType.bezier,EType:1,fname:"max",flash:false,with:90,
debuff:4,in:1,ap:80,cd:5,hited:0.3,shield:0,speed:720,sonsk:0,hero:0,info:"射出能量暴风箭攻击最前方范围敌人,每波造成80%攻击的伤害"}
};

View File

@@ -38,48 +38,113 @@ export const HeroSet = {
Start_y:[70,0,-70]
}
export const HeroPos={
0:{pos:v3(-280,0,0)},
1:{pos:v3(-140,0,0)},
2:{pos:v3(-200,0,0)},
0:{pos:v3(-290,10,0)},
1:{pos:v3(-220,0,0)},
2:{pos:v3(-150,0,0)},
}
export const MonSet = {
0:{pos:v3(320,0,0)},
1:{pos:v3(320,15,0)},
2:{pos:v3(320,-15,0)},
0:{pos:v3(350,0,0)},
1:{pos:v3(400,0,0)},
2:{pos:v3(450,0,0)},
3:{pos:v3(500,0,0)},
4:{pos:v3(550,0,0)},
5:{pos:v3(600,0,0)},
6:{pos:v3(650,0,0)},
7:{pos:v3(700,0,0)},
8:{pos:v3(750,0,0)},
9:{pos:v3(800,0,0)},
}
export const HeroInfo = {
5001:{uuid:5001,name:"神圣守护",path:"k2", lv:3,kind:1,type:0,hp:50,ap:10,dis:700,a_cd:1,speed:30,skills:[6001],info:"说明"},
5002:{uuid:5002,name:"幻影剑豪",path:"k1", lv:3,kind:2,type:0,hp:50,ap:10,dis:700,a_cd:1,speed:30,skills:[6001],info:"说明"},
5003:{uuid:5003,name:"战争领主",path:"k5", lv:3,kind:2,type:0,hp:50,ap:10,dis:700,a_cd:1,speed:30,skills:[6001],info:"说明"},
5004:{uuid:5004,name:"混沌法师",path:"zh1", lv:3,kind:2,type:2,hp:50,ap:10,dis:700,a_cd:1.5,speed:30,skills:[6001],info:"说明"},
5005:{uuid:5005,name:"火焰法师",path:"zh2", lv:3,kind:2,type:2,hp:50,ap:15,dis:700,a_cd:1.5,speed:30,skills:[6001],info:"说明"},
5006:{uuid:5006,name:"风暴精灵",path:"m4", lv:3,kind:2,type:2,hp:50,ap:15,dis:700,a_cd:1.5,speed:30,skills:[6001],info:"说明"},
5007:{uuid:5007,name:"生命圣者",path:"d1", lv:3,kind:2,type:2,hp:50,ap:10,dis:700,a_cd:1.5,speed:30,skills:[6001],info:"说明"},
5008:{uuid:5008,name:"战争祭祀",path:"d2", lv:3,kind:2,type:2,hp:50,ap:10,dis:700,a_cd:1.5,speed:30,skills:[6001],info:"说明"},
5009:{uuid:5009,name:"暴风射手",path:"a5", lv:3,kind:2,type:1,hp:50,ap:15,dis:700,a_cd:1.2,speed:30,skills:[6002],info:"说明"},
5010:{uuid:5010,name:"苍穹射手",path:"a3", lv:3,kind:1,type:1,hp:50,ap:15,dis:700,a_cd:1.2,speed:30,skills:[6002],info:"说明"},
5011:{uuid:5011,name:"幽灵射手",path:"a4", lv:3,kind:2,type:1,hp:50,ap:15,dis:700,a_cd:1.2,speed:30,skills:[6002],info:"说明"},
5001:{uuid:5001,name:"神圣守护",path:"k2", lv:3,kind:1,type:0,hp:50,ap:10,dis:700,a_cd:1,
crt:5,crt_d:0,crt_no:false,dod:0,dod_no:false,speed:30,skills:[6001],info:"说明"},
5201:{uuid:5201,name:"兽人战士",path:"mor1", lv:1,kind:1,type:0,hp:200,ap:5,dis:400,a_cd:1,speed:30,skills:[6001],info:"说明"},
5202:{uuid:5202,name:"兽人刺客",path:"mor2", lv:1,kind:1,type:0,hp:200,ap:5,dis:400,a_cd:1,speed:30,skills:[6001],info:"说明"},
5203:{uuid:5203,name:"兽人护卫",path:"mor3", lv:1,kind:1,type:1,hp:200,ap:5,dis:400,a_cd:1.2,speed:30,skills:[6001],info:"说明"},
5204:{uuid:5204,name:"石卫", path:"mgem1",lv:1,kind:1,type:0,hp:200,ap:5,dis:400,a_cd:1,speed:30,skills:[6001],info:"说明"},
5205:{uuid:5205,name:"土卫", path:"mgem2",lv:1,kind:1,type:0,hp:200,ap:5,dis:400,a_cd:1,speed:30,skills:[6001],info:"说明"},
5206:{uuid:5206,name:"树人", path:"mgem3",lv:1,kind:1,type:0,hp:200,ap:5,dis:400,a_cd:1,speed:30,skills:[6001],info:"说明"},
5002:{uuid:5002,name:"幻影剑豪",path:"k1", lv:3,kind:2,type:0,hp:50,ap:10,dis:700,a_cd:1,
crt:5,crt_d:0,crt_no:false,dod:0,dod_no:false,speed:30,skills:[6001],info:"说明"},
5216:{uuid:5216,name:"元素1", path:"my1", lv:2,kind:1,type:2,hp:200,ap:5,dis:400,a_cd:1.5,speed:30,skills:[6001],info:"说明"},
5217:{uuid:5217,name:"元素2", path:"my2", lv:2,kind:1,type:2,hp:200,ap:5,dis:400,a_cd:1.5,speed:30,skills:[6001],info:"说明"},
5218:{uuid:5218,name:"元素3", path:"my3", lv:2,kind:1,type:2,hp:200,ap:5,dis:400,a_cd:1.5,speed:30,skills:[6001],info:"说明"},
5219:{uuid:5219,name:"牛头战士",path:"mn1", lv:2,kind:1,type:0,hp:200,ap:5,dis:400,a_cd:1,speed:30,skills:[6001],info:"说明"},
5220:{uuid:5220,name:"牛头战士",path:"mn2", lv:1,kind:1,type:1,hp:200,ap:5,dis:400,a_cd:1.2,speed:30,skills:[6001],info:"说明"},
5221:{uuid:5221,name:"牛头战士",path:"mn3", lv:1,kind:1,type:0,hp:200,ap:5,dis:400,a_cd:1,speed:30,skills:[6001],info:"说明"},
5222:{uuid:5222,name:"独眼巨人",path:"md1", lv:1,kind:1,type:0,hp:200,ap:5,dis:400,a_cd:1,speed:30,skills:[6001],info:"说明"},
5223:{uuid:5223,name:"独眼巨人",path:"md2", lv:1,kind:1,type:0,hp:200,ap:5,dis:400,a_cd:1,speed:30,skills:[6001],info:"说明"},
5224:{uuid:5224,name:"独眼巨人",path:"md3", lv:1,kind:1,type:1,hp:200,ap:5,dis:400,a_cd:1.2,speed:30,skills:[6001],info:"说明"},
5225:{uuid:5225,name:"精英独眼",path:"md4", lv:3,kind:1,type:2,hp:200,ap:5,dis:400,a_cd:1,speed:30,skills:[6001],info:"说明"},
5226:{uuid:5226,name:"精英牛头",path:"mn4", lv:3,kind:1,type:2,hp:200,ap:5,dis:400,a_cd:1,speed:30,skills:[6001],info:"说明"},
5227:{uuid:5227,name:"精英兽人",path:"mor4", lv:3,kind:1,type:2,hp:200,ap:5,dis:400,a_cd:1,speed:30,skills:[6001],info:"说明"}
5003:{uuid:5003,name:"战争领主",path:"k5", lv:3,kind:2,type:0,hp:50,ap:10,dis:700,a_cd:1,
crt:5,crt_d:0,crt_no:false,dod:0,dod_no:false,speed:30,skills:[6001],info:"说明"},
5004:{uuid:5004,name:"混沌法师",path:"zh1", lv:3,kind:2,type:2,hp:50,ap:10,dis:700,a_cd:1.5,
crt:5,crt_d:0,crt_no:false,dod:0,dod_no:false,speed:30,skills:[6001],info:"说明"},
5005:{uuid:5005,name:"火焰法师",path:"zh2", lv:3,kind:2,type:2,hp:50,ap:15,dis:700,a_cd:1.5,
crt:5,crt_d:0,crt_no:false,dod:0,dod_no:false,speed:30,skills:[6001],info:"说明"},
5006:{uuid:5006,name:"风暴精灵",path:"m4", lv:3,kind:2,type:2,hp:50,ap:15,dis:700,a_cd:1.5,
crt:5,crt_d:0,crt_no:false,dod:0,dod_no:false,speed:30,skills:[6001],info:"说明"},
5007:{uuid:5007,name:"生命圣者",path:"d1", lv:3,kind:2,type:2,hp:50,ap:10,dis:700,a_cd:1.5,
crt:5,crt_d:0,crt_no:false,dod:0,dod_no:false,speed:30,skills:[6001],info:"说明"},
5008:{uuid:5008,name:"战争祭祀",path:"d2", lv:3,kind:2,type:2,hp:50,ap:10,dis:700,a_cd:1.5,
crt:5,crt_d:0,crt_no:false,dod:0,dod_no:false,speed:30,skills:[6001],info:"说明"},
5009:{uuid:5009,name:"暴风射手",path:"a5", lv:3,kind:2,type:1,hp:50,ap:15,dis:700,a_cd:1.2,
crt:5,crt_d:0,crt_no:false,dod:0,dod_no:false,speed:30,skills:[6002],info:"说明"},
5010:{uuid:5010,name:"苍穹射手",path:"a3", lv:3,kind:1,type:1,hp:50,ap:15,dis:700,a_cd:1.2,
crt:5,crt_d:0,crt_no:false,dod:0,dod_no:false,speed:30,skills:[6002],info:"说明"},
5011:{uuid:5011,name:"幽灵射手",path:"a4", lv:3,kind:2,type:1,hp:50,ap:15,dis:700,a_cd:1.2,
crt:5,crt_d:0,crt_no:false,dod:0,dod_no:false,speed:30,skills:[6002],info:"说明"},
//怪物
5201:{uuid:5201,name:"兽人战士",path:"mor1", lv:1,kind:1,type:0,hp:200,ap:5,dis:400,a_cd:1,
crt:5,crt_d:0,crt_no:false,dod:0,dod_no:false,speed:30,skills:[6001],info:"说明"},
5202:{uuid:5202,name:"兽人刺客",path:"mor2", lv:1,kind:1,type:0,hp:200,ap:5,dis:400,a_cd:1,
crt:5,crt_d:0,crt_no:false,dod:0,dod_no:false,speed:30,skills:[6001],info:"说明"},
5203:{uuid:5203,name:"兽人护卫",path:"mor3", lv:1,kind:1,type:1,hp:200,ap:5,dis:400,a_cd:1.2,
crt:5,crt_d:0,crt_no:false,dod:0,dod_no:false,speed:30,skills:[6001],info:"说明"},
5204:{uuid:5204,name:"石卫", path:"mgem1",lv:1,kind:1,type:0,hp:200,ap:5,dis:400,a_cd:1,
crt:5,crt_d:0,crt_no:false,dod:0,dod_no:false,speed:30,skills:[6001],info:"说明"},
5205:{uuid:5205,name:"土卫", path:"mgem2",lv:1,kind:1,type:0,hp:200,ap:5,dis:400,a_cd:1,
crt:5,crt_d:0,crt_no:false,dod:0,dod_no:false,speed:30,skills:[6001],info:"说明"},
5206:{uuid:5206,name:"树人", path:"mgem3",lv:1,kind:1,type:0,hp:200,ap:5,dis:400,a_cd:1,
crt:5,crt_d:0,crt_no:false,dod:0,dod_no:false,speed:30,skills:[6001],info:"说明"},
5216:{uuid:5216,name:"元素1", path:"my1", lv:2,kind:1,type:2,hp:200,ap:5,dis:400,a_cd:1.5,
crt:5,crt_d:0,crt_no:false,dod:0,dod_no:false,speed:30,skills:[6001],info:"说明"},
5217:{uuid:5217,name:"元素2", path:"my2", lv:2,kind:1,type:2,hp:200,ap:5,dis:400,a_cd:1.5,
crt:5,crt_d:0,crt_no:false,dod:0,dod_no:false,speed:30,skills:[6001],info:"说明"},
5218:{uuid:5218,name:"元素3", path:"my3", lv:2,kind:1,type:2,hp:200,ap:5,dis:400,a_cd:1.5,
crt:5,crt_d:0,crt_no:false,dod:0,dod_no:false,speed:30,skills:[6001],info:"说明"},
5219:{uuid:5219,name:"牛头战士",path:"mn1", lv:2,kind:1,type:0,hp:200,ap:5,dis:400,a_cd:1,
crt:5,crt_d:0,crt_no:false,dod:0,dod_no:false,speed:30,skills:[6001],info:"说明"},
5220:{uuid:5220,name:"牛头战士",path:"mn2", lv:1,kind:1,type:1,hp:200,ap:5,dis:400,a_cd:1.2,
crt:5,crt_d:0,crt_no:false,dod:0,dod_no:false,speed:30,skills:[6001],info:"说明"},
5221:{uuid:5221,name:"牛头战士",path:"mn3", lv:1,kind:1,type:0,hp:200,ap:5,dis:400,a_cd:1,
crt:5,crt_d:0,crt_no:false,dod:0,dod_no:false,speed:30,skills:[6001],info:"说明"},
5222:{uuid:5222,name:"独眼巨人",path:"md1", lv:1,kind:1,type:0,hp:200,ap:5,dis:400,a_cd:1,
crt:5,crt_d:0,crt_no:false,dod:0,dod_no:false,speed:30,skills:[6001],info:"说明"},
5223:{uuid:5223,name:"独眼巨人",path:"md2", lv:1,kind:1,type:0,hp:200,ap:5,dis:400,a_cd:1,
crt:5,crt_d:0,crt_no:false,dod:0,dod_no:false,speed:30,skills:[6001],info:"说明"},
5224:{uuid:5224,name:"独眼巨人",path:"md3", lv:1,kind:1,type:1,hp:200,ap:5,dis:400,a_cd:1.2,
crt:5,crt_d:0,crt_no:false,dod:0,dod_no:false,speed:30,skills:[6001],info:"说明"},
5225:{uuid:5225,name:"精英独眼",path:"md4", lv:3,kind:1,type:2,hp:200,ap:5,dis:400,a_cd:1,
crt:5,crt_d:0,crt_no:false,dod:0,dod_no:false,speed:30,skills:[6001],info:"说明"},
5226:{uuid:5226,name:"精英牛头",path:"mn4", lv:3,kind:1,type:2,hp:200,ap:5,dis:400,a_cd:1,
crt:5,crt_d:0,crt_no:false,dod:0,dod_no:false,speed:30,skills:[6001],info:"说明"},
5227:{uuid:5227,name:"精英兽人",path:"mor4", lv:3,kind:1,type:2,hp:200,ap:5,dis:400,a_cd:1,
crt:5,crt_d:0,crt_no:false,dod:0,dod_no:false,speed:30,skills:[6001],info:"说明"}
};
export const HeroUpInfo = {
5001:{ap_up:0,ap_up_rate:10,self_ap_up:0,self_ap_up_rate:0,hp_up:0,self_hp_up:0},
5002:{ap_up:5,ap_up_rate:0,self_ap_up:0,self_ap_up_rate:0,hp_up:0,self_hp_up:0},

View File

@@ -27,7 +27,7 @@ export class BattleMoveSystem extends ecs.ComblockSystem implements ecs.ISystemU
if (!shouldStop&&view.fac==1) { //在攻击范围内停止移动 取消这个判断
// if(view.fac==1){
if(view.is_stop||view.is_dead) return //停止移动或者死亡不移动
if(view.is_stop||view.is_dead||view.DEBUFF_STUN>0 ||view.DEBUFF_FROST>0) return //停止移动或者死亡不移动
// 计算移动量
const delta = (view.speed/3) * this.dt * move.direction;
const newX = view.node.position.x + delta;

View File

@@ -110,6 +110,7 @@ export class BuffComp extends Component {
var node = instantiate(prefab);
node.parent = this.node;
}
show_do_buff(name:string){
var path = "game/skills/"+name;
var prefab: Prefab = oops.res.get(path, Prefab)!;

View File

@@ -46,29 +46,17 @@ export class Hero extends ecs.Entity {
node.parent = scene.entityLayer!.node!
let pos=HeroPos[0].pos
node.setPosition(pos)
var hv = node.getComponent(HeroViewComp)!;
let hero= HeroInfo[uuid] // 共用英雄数据
var hv = this.hero_init(uuid,node)
hv.scale = 1;
hv.fac = FacSet.HERO;
hv.is_master=true;
hv.type = hero.type;
hv.box_group = box_group;
hv.hero_uuid= uuid;
hv.hero_name= hero.name;
hv.speed =hv.ospeed = hero.speed;
hv.dis = hero.dis;
hv.hp= hv.hp_max =hero.hp;
hv.ap = hero.ap;
hv.lv=1
hv.cd = hero.a_cd
hv.hp_up=hero.hp_up
hv.atk_skill=hero.skills[0]
console.log(hv.hero_name+"dis=>"+hv.dis)
this.add(hv);
this.addComponents<ecs.Comp>(MasterModelComp)
console.log("[Hero]:master",hv)
}
/** 加载角色 */
load(pos: Vec3 = Vec3.ZERO,scale:number = 1,uuid:number=1001,info:any={ap:0,hp:0},fight_pos:number=1) {
load(pos: Vec3 = Vec3.ZERO,scale:number = 1,uuid:number=1001,info:any={ap:0,hp:0,lv:1,crt:0,crt_d:0,dod:0,dod_no:false,crt_no:false},fight_pos:number=1) {
// console.log("英雄加载:",uuid,pos,scale,info)
scale = 1
let box_group=BoxSet.HERO
@@ -79,29 +67,39 @@ export class Hero extends ecs.Entity {
node.parent = scene.entityLayer!.node!
node.setPosition(pos)
// console.log("hero load",pos)
var hv = this.hero_init(uuid,node,info)
hv.fight_pos=fight_pos
this.add(hv);
this.addComponents<ecs.Comp>(FriendModelComp);
// const move = this.get(BattleMoveComp);
// move.direction = 1; // 向右移动
// move.targetX = 800; // 右边界'
oops.message.dispatchEvent("hero_load",this)
console.log("[Hero]:friend",hv)
}
hero_init(uuid:number=1001,node:Node,info:any={ap:0,hp:0,lv:1,crt:0,crt_d:0,dod:0,dod_no:false,crt_no:false}) {
var hv = node.getComponent(HeroViewComp)!;
let hero= HeroInfo[uuid] // 共用英雄数据
hv.scale = scale;
hv.scale = 1;
hv.lv=info.lv
hv.fac = FacSet.HERO;
hv.fight_pos=fight_pos
hv.type = hero.type;
hv.box_group = box_group;
hv.box_group = BoxSet.HERO;
hv.hero_uuid= uuid;
hv.hero_name= hero.name;
hv.speed =hv.ospeed = hero.speed;
hv.dis = hero.dis;
hv.hp= hv.hp_max =hero.hp+info.hp;
hv.ap = hero.ap+info.ap;
hv.lv=info.lv+1
hv.cd = hero.a_cd
hv.hp_up=hero.hp_up
hv.hp= hv.hp_max =hero.hp+info.hp
hv.ap = hero.ap+info.ap;
hv.crt=hero.crt+info.crt
hv.crt_d=hero.crt_d+info.crt_d
hv.dod=hero.dod+info.dod
hv.dod_no=info.dod_no
hv.crt_no=info.crt_no
hv.atk_skill=hero.skills[0]
this.add(hv);
this.addComponents<ecs.Comp>(FriendModelComp);
const move = this.get(BattleMoveComp);
move.direction = 1; // 向右移动
move.targetX = 800; // 右边界'
oops.message.dispatchEvent("hero_load",this)
return hv
}

View File

@@ -5,7 +5,7 @@ import { HeroSpine } from "./HeroSpine";
import { BoxSet, FacSet } from "../common/config/BoxSet";
import { smc } from "../common/SingletonModuleComp";
import { Timer } from "../../../../extensions/oops-plugin-framework/assets/core/common/timer/Timer";
import { SkillSet, TGroup, TType } from "../common/config/SkillSet";
import { BuffAttr, DebuffAttr, SkillSet, TGroup, TType } from "../common/config/SkillSet";
import { BuffComp } from "./BuffComp";
import { oops } from "db://oops-framework/core/Oops";
import { GameEvent } from "../common/config/GameEvent";
@@ -62,8 +62,11 @@ export class HeroViewComp extends CCComp {
def: number = 0; //防御
vun: number = 0; //易伤
dodge: number = 10; //闪避率
dod: number = 10; //闪避率
dod_no:boolean=false;
crt:number=0; //暴击率
crt_no:boolean=false; //暴击免疫
crt_d:number=0; //暴击伤害
shield:number = 0; //护盾,免伤1次减1
speed: number = 100; /** 角色移动速度 */
@@ -73,14 +76,17 @@ export class HeroViewComp extends CCComp {
atked_count: number = 0;
atk_add_count:number=0;
stop_cd: number = 0; /*停止倒计时*/
yun_cd: number = 0; //眩晕倒计时
ice_cd: number = 0; //冰冻倒计时
dir_y:number = 0;
speek_time:number = 0;
is_stop_temp:boolean = false;i
Friend_alive_cd:Timer=new Timer(10)
double_dead:boolean=false
double_atked:boolean=false
DEBUFF_BURN: Array<{burn: number, count: number}> = []
DEBUFF_SLOW: number = 0;
DEBUFF_FROST: number = 0;
DEBUFF_STUN: number = 0;
BUFF_DEF: Array<{def: number, count: number}> = []
private damageQueue: Array<{
damage: number,
isCrit: boolean,
@@ -130,12 +136,12 @@ export class HeroViewComp extends CCComp {
if(this.timer.update(dt)){
// this.add_ap(10)
};
if(this.ice_cd > 0){
this.ice_cd -=dt;
if(this.DEBUFF_FROST > 0){
this.DEBUFF_FROST -=dt;
return
}
if(this.yun_cd > 0){
this.yun_cd -=dt;
if(this.DEBUFF_STUN > 0){
this.DEBUFF_STUN -=dt;
return
}
this.in_stop(dt);
@@ -150,7 +156,7 @@ export class HeroViewComp extends CCComp {
}else if(data.fire){
this.atk_skill=6012
}else if(data.wind){
this.atk_skill=6016
this.atk_skill=6013
}else{
this.atk_skill=6001
}
@@ -320,19 +326,68 @@ export class HeroViewComp extends CCComp {
}
}
do_atked(remainingDamage:number){
this.do_atked_trigger()
if (this.shield > 0) {
this.shield -= 1
this.BUFFCOMP.tooltip(5,"*吸收*");
remainingDamage = 0
if (this.shield <= 0) {
if(this == null) return;
this.BUFFCOMP.show_shield(false);
add_debuff(type:number,debuff:number,count:number,){
switch(type){
case DebuffAttr.BURN:
this.DEBUFF_BURN.push({burn:debuff,count:count})
break
case DebuffAttr.SLOW:
this.DEBUFF_SLOW+=debuff
break
case DebuffAttr.FROST:
this.BUFFCOMP.in_iced(debuff)
this.DEBUFF_FROST+=debuff
break
case DebuffAttr.STUN:
this.BUFFCOMP.in_yun(debuff)
this.DEBUFF_STUN+=debuff
this.is_stop=true
break
case DebuffAttr.DECD:
this.cd-=debuff
break
case DebuffAttr.DEHP:
this.hp_max-=debuff
if(this.hp-this.hp_max>0) this.hp=this.hp_max
break
case DebuffAttr.DEATK:
this.ap-=debuff
break
case DebuffAttr.DECOUNT:
this.atk_count-=debuff
if(this.atk_count<0) this.atk_count=1
break
case DebuffAttr.BACK:
if(this.fac==FacSet.MON) {
let tx=this.node.position.x+50
if(tx > 320) tx=320
tween(this.node).to(0.3, { position:v3(tx,this.node.position.y,0)}).start()
}
}else{
break
}
}
add_buff(buff:number,count:number,type:number){
switch(type){
case BuffAttr.DEF:
this.BUFF_DEF.push({def:buff,count:count})
break
}
}
do_atked(remainingDamage:number,crt:number=0,crt_d:number=0){
this.do_atked_trigger()
if(this.check_shield()) return
if(this.check_dodge()) return
let is_crit = this.check_crit(crt)
if(this == null) return;
this.hp -= remainingDamage;
let damage = this.count_damage(remainingDamage)
if(is_crit) {
damage = Math.floor(damage * (1 + (FightSet.CRIT_DAMAGE+crt_d)/100))
}
this.hp -= damage;
if(this.hp <= 0) {
if(this == null) return;
this.is_dead=true
@@ -347,8 +402,71 @@ export class HeroViewComp extends CCComp {
}
}
this.BUFFCOMP.update_info_hp()
this.showDamage(remainingDamage, true);
this.showDamage(damage, is_crit);
}
//伤害计算 debuff 易伤
count_damage(remainingDamage:number){
let damage = 0;
let Burn = 0;
let def = 0;
for(let i=0;i<this.DEBUFF_BURN.length;i++){
Burn+=this.DEBUFF_BURN[i].burn
this.DEBUFF_BURN[i].count-=1
if(this.DEBUFF_BURN[i].count<=0){
this.DEBUFF_BURN.splice(i,1)
}
}
for(let i=0;i<this.BUFF_DEF.length;i++){
def+=this.BUFF_DEF[i].def
this.BUFF_DEF[i].count-=1
if(this.BUFF_DEF[i].count<=0){
this.BUFF_DEF.splice(i,1)
}
}
if(this.fac == FacSet.HERO ){
damage=remainingDamage*(100-(this.FIGHTCON.hero_buff.DEF+def)+(this.FIGHTCON.hero_debuff.BURN+Burn))/100
}
if(this.fac == FacSet.MON){
damage=remainingDamage*(100-(this.FIGHTCON.enemy_buff.DEF+def)+(this.FIGHTCON.enemy_debuff.BURN+Burn))/100
}
return Math.floor(damage)
}
check_shield(){
if(this.shield>0){
this.shield -= 1
this.BUFFCOMP.tooltip(5,"*吸收*");
if (this.shield <= 0) {
if(this == null) return;
this.BUFFCOMP.show_shield(false);
}
return true
}
return false
}
check_dodge(){
if(this.dod > 0){
let random = Math.random()*100
if(random < this.dod) {
this.BUFFCOMP.tooltip(6,"*闪避*");
return true
}
}
return false
}
check_crit(crt:number=0){
if(this.crt_no) return false
if(crt > 0){
let random = Math.random()*100
if(random < crt) {
console.log("[HeroViewComp]:crit",crt,random)
return true
}
}
console.log("[HeroViewComp]:crit",crt)
return false
}
// dead(){
// this.BUFFCOMP.dead()
@@ -440,7 +558,16 @@ export class HeroViewComp extends CCComp {
delay: this.damageInterval
});
}
ex_show(text:string){
switch(text){
case "blue":
this.BUFFCOMP.max_show("max_blue")
break
case "red":
this.BUFFCOMP.max_show("max_red")
break
}
}
/** 处理伤害队列 */
private processDamageQueue() {
if (this.isProcessingDamage || this.damageQueue.length === 0) return;

View File

@@ -67,6 +67,11 @@ export class Monster extends ecs.Entity {
hv.hp= hv.hp_max =hero.hp;
hv.ap = hero.ap;
hv.cd = hero.a_cd
hv.crt=hero.crt
hv.crt_d=hero.crt_d
hv.dod=hero.dod
hv.dod_no=hero.dod_no
hv.crt_no=hero.crt_no
hv.atk_skill=hero.skills[0]
this.add(hv);
}

View File

@@ -11,6 +11,7 @@ import { CCComp } from 'db://oops-framework/module/common/CCComp';
import { FightConComp } from '../map/FightConComp';
import { MonModelComp } from './MonModelComp';
import { HeroModelComp } from './HeroModelComp';
import { FightSet } from '../common/config/Mission';
const { ccclass, property } = _decorator;
@ccclass('SkillCon')
@@ -37,7 +38,7 @@ export class SkillConComp extends CCComp {
update(dt: number) {
if(!smc.mission.play||smc.mission.pause) return
this.HeroView.at += dt;
if(this.HeroView.DEBUFF_STUN <= 0) this.HeroView.at += dt;
let cd = this.get_cd(this.HeroView.cd,this.HeroView)
let count=this.get_count(1,this.HeroView)
@@ -55,29 +56,6 @@ export class SkillConComp extends CCComp {
}
}
get_cd(cd:number,view:HeroViewComp){
if(view.fac==FacSet.HERO){
if(view.is_master){
return cd*(100-this.FIGHTCON.hero_buff.ATK_CD+this.FIGHTCON.hero_debuff.DECD)/100
}else{
return cd*(100-this.FIGHTCON.friend_buff.ATK_CD+this.FIGHTCON.friend_debuff.DECD)/100
}
}else{
return cd*(100-this.FIGHTCON.enemy_buff.ATK_CD+this.FIGHTCON.enemy_debuff.DECD)/100
}
}
get_count(count:number,view:HeroViewComp){
if(view.fac==FacSet.HERO){
if(view.is_master){
return count+(this.FIGHTCON.hero_buff.ATK_COUNT-this.FIGHTCON.hero_debuff.DECOUNT)
}else{
return count+(this.FIGHTCON.friend_buff.ATK_COUNT-this.FIGHTCON.friend_debuff.DECOUNT)
}
}else{
return count+(this.FIGHTCON.enemy_buff.ATK_COUNT-this.FIGHTCON.enemy_debuff.DECOUNT)
}
}
cast_master_skill(e:string,uuid:any){
if(!this.HeroView) return
if(!this.HeroView.is_master) return
@@ -85,7 +63,6 @@ export class SkillConComp extends CCComp {
const config = SkillSet[uuid];
this.castSkill(config,1,this.FIGHTCON.hero_buff.SKILL_DMG)
}
/** 施放技能 */
castSkill(config: typeof SkillSet[keyof typeof SkillSet],count:number=1,dmg:number=0) {
// console.log(view.uuid+"=>"+view.hero_name+"施放技能:"+config.uuid);
@@ -94,6 +71,7 @@ export class SkillConComp extends CCComp {
}
private doSkill(config: typeof SkillSet[keyof typeof SkillSet],count:number=1,angle:number=0,dmg:number=0) {
// 添加节点有效性检查
if (!this.node || !this.node.isValid || !this.HeroView || !this.HeroView.node || !this.HeroView.node.isValid) {
@@ -144,17 +122,22 @@ export class SkillConComp extends CCComp {
dmg
);
}, 300);
count-=1
if(count>0){
let angle=10*count
if(count > 1 && this.check_double_atk(count)){
this.scheduleOnce(()=>{
this.doSkill(config,count,angle)
},0.1)
this.HeroView.ex_show("blue")
this.doSkill(config,1)
},0.05)
}
// 保存定时器ID
this._timers[`skill_${config.uuid}`] = timerId;
}
check_double_atk(count:number){
let random = Math.random()*100
if(random < FightSet.DOUBLE_ATK_RATE*count){
return true
}
return false
}
/** 筛选最前排单位 */
@@ -202,7 +185,29 @@ export class SkillConComp extends CCComp {
// console.log("clear_timer");
Object.values(this._timers).forEach(clearTimeout);
}
get_cd(cd:number,view:HeroViewComp){
if(view.fac==FacSet.HERO){
if(view.is_master){
return cd*(100-this.FIGHTCON.hero_buff.ATK_CD+this.FIGHTCON.hero_debuff.DECD)/100
}else{
return cd*(100-this.FIGHTCON.friend_buff.ATK_CD+this.FIGHTCON.friend_debuff.DECD)/100
}
}else{
return cd*(100-this.FIGHTCON.enemy_buff.ATK_CD+this.FIGHTCON.enemy_debuff.DECD)/100
}
}
get_count(count:number,view:HeroViewComp){
if(view.fac==FacSet.HERO){
if(view.is_master){
return count+(this.FIGHTCON.hero_buff.ATK_COUNT-this.FIGHTCON.hero_debuff.DECOUNT)
}else{
return count+(this.FIGHTCON.friend_buff.ATK_COUNT-this.FIGHTCON.friend_debuff.DECOUNT)
}
}else{
return count+(this.FIGHTCON.enemy_buff.ATK_COUNT-this.FIGHTCON.enemy_debuff.DECOUNT)
}
}
reset() {
this.clear_timer();
}

View File

@@ -9,7 +9,7 @@ import { HeroModelComp } from "../hero/HeroModelComp";
import { HeroViewComp } from "../hero/HeroViewComp";
import { smc } from "../common/SingletonModuleComp";
import { HeroSkillList, SkillSet } from "../common/config/SkillSet";
import { cardType, getRandomCardUUID, SuperCards } from "../common/config/CardSet";
import { cardType, getRandomCardUUID, Quality, SuperCards } from "../common/config/CardSet";
import { EquipInfo } from "../common/config/Equips";
const { ccclass, property } = _decorator;
@@ -105,7 +105,17 @@ export class CardComp extends CCComp {
show_skill(uuid:number){
let show=this.node.getChildByName("show")
show.getChildByName("name").getComponent(Label).string=SkillSet[uuid].name
show.getChildByName("name").getChildByName("name").getComponent(Label).string=SkillSet[uuid].name
show.getChildByName("q1").active=SkillSet[uuid].quality==Quality.WHITE
show.getChildByName("q2").active=SkillSet[uuid].quality==Quality.GREEN
show.getChildByName("q3").active=SkillSet[uuid].quality==Quality.BLUE
show.getChildByName("q4").active=SkillSet[uuid].quality==Quality.PURPLE
show.getChildByName("q5").active=SkillSet[uuid].quality==Quality.ORANGE
show.getChildByName("mask").getChildByName("q1").active=SkillSet[uuid].quality==Quality.WHITE
show.getChildByName("mask").getChildByName("q2").active=SkillSet[uuid].quality==Quality.GREEN
show.getChildByName("mask").getChildByName("q3").active=SkillSet[uuid].quality==Quality.BLUE
show.getChildByName("mask").getChildByName("q4").active=SkillSet[uuid].quality==Quality.PURPLE
show.getChildByName("mask").getChildByName("q5").active=SkillSet[uuid].quality==Quality.ORANGE
this.do_card_bg_show()
var icon_path = "game/skills/skill_icon"
resources.load(icon_path, SpriteAtlas, (err: any, atlas) => {
@@ -117,15 +127,25 @@ export class CardComp extends CCComp {
show_hero(uuid:number){
let show=this.node.getChildByName("show")
this.do_card_bg_show()
show.getChildByName("ap").active=true
show.getChildByName("hp").active=true
show.getChildByName("name").getComponent(Label).string=HeroInfo[uuid].name
show.getChildByName("ap").getChildByName("num").getComponent(Label).string=HeroInfo[uuid].ap.toString()
show.getChildByName("hp").getChildByName("num").getComponent(Label).string=HeroInfo[uuid].hp.toString()
// show.getChildByName("ap").active=true
// show.getChildByName("hp").active=true
show.getChildByName("name").getChildByName("name").getComponent(Label).string=HeroInfo[uuid].name
// show.getChildByName("ap").getChildByName("num").getComponent(Label).string=HeroInfo[uuid].ap.toString()
// show.getChildByName("hp").getChildByName("num").getComponent(Label).string=HeroInfo[uuid].hp.toString()
// show.getChildByName("type").getChildByName("war").active=HeroInfo[uuid].type==0
// show.getChildByName("type").getChildByName("bow").active=HeroInfo[uuid].type==1
// show.getChildByName("type").getChildByName("mag").active=HeroInfo[uuid].type==2
// show.getChildByName("lv").getChildByName("num").getComponent(Label).string=HeroInfo[uuid].lv.toString()
show.getChildByName("q1").active=HeroInfo[uuid].quality==Quality.WHITE
show.getChildByName("q2").active=HeroInfo[uuid].quality==Quality.GREEN
show.getChildByName("q3").active=HeroInfo[uuid].quality==Quality.BLUE
show.getChildByName("q4").active=HeroInfo[uuid].quality==Quality.PURPLE
show.getChildByName("q5").active=HeroInfo[uuid].quality==Quality.ORANGE
show.getChildByName("mask").getChildByName("q1").active=HeroInfo[uuid].quality==Quality.WHITE
show.getChildByName("mask").getChildByName("q2").active=HeroInfo[uuid].quality==Quality.GREEN
show.getChildByName("mask").getChildByName("q3").active=HeroInfo[uuid].quality==Quality.BLUE
show.getChildByName("mask").getChildByName("q4").active=HeroInfo[uuid].quality==Quality.PURPLE
show.getChildByName("mask").getChildByName("q5").active=HeroInfo[uuid].quality==Quality.ORANGE
var icon_path = "game/heros/herois"
resources.load(icon_path, SpriteAtlas, (err: any, atlas) => {
const sprite = show.getChildByName("mask").getChildByName("hero").getComponent(Sprite);
@@ -137,7 +157,17 @@ export class CardComp extends CCComp {
show_equip(uuid:number){
let show=this.node.getChildByName("show")
this.do_card_bg_show()
show.getChildByName("name").getComponent(Label).string=EquipInfo[uuid].name
show.getChildByName("q1").active=EquipInfo[uuid].quality==Quality.WHITE
show.getChildByName("q2").active=EquipInfo[uuid].quality==Quality.GREEN
show.getChildByName("q3").active=EquipInfo[uuid].quality==Quality.BLUE
show.getChildByName("q4").active=EquipInfo[uuid].quality==Quality.PURPLE
show.getChildByName("q5").active=EquipInfo[uuid].quality==Quality.ORANGE
show.getChildByName("mask").getChildByName("q1").active=EquipInfo[uuid].quality==Quality.WHITE
show.getChildByName("mask").getChildByName("q2").active=EquipInfo[uuid].quality==Quality.GREEN
show.getChildByName("mask").getChildByName("q3").active=EquipInfo[uuid].quality==Quality.BLUE
show.getChildByName("mask").getChildByName("q4").active=EquipInfo[uuid].quality==Quality.PURPLE
show.getChildByName("mask").getChildByName("q5").active=EquipInfo[uuid].quality==Quality.ORANGE
show.getChildByName("name").getChildByName("name").getComponent(Label).string=EquipInfo[uuid].name
var icon_path = "game/heros/equips"
resources.load(icon_path, SpriteAtlas, (err: any, atlas) => {
const sprite = show.getChildByName("mask").getChildByName("equip").getComponent(Sprite);
@@ -148,7 +178,19 @@ export class CardComp extends CCComp {
show_func(uuid:number){
let show=this.node.getChildByName("show")
this.do_card_bg_show()
show.getChildByName("name").getComponent(Label).string=SuperCards[uuid].name
show.getChildByName("q1").active=SuperCards[uuid].quality==Quality.WHITE
show.getChildByName("q2").active=SuperCards[uuid].quality==Quality.GREEN
show.getChildByName("q3").active=SuperCards[uuid].quality==Quality.BLUE
show.getChildByName("q4").active=SuperCards[uuid].quality==Quality.PURPLE
show.getChildByName("q5").active=SuperCards[uuid].quality==Quality.ORANGE
show.getChildByName("mask").getChildByName("q1").active=SuperCards[uuid].quality==Quality.WHITE
show.getChildByName("mask").getChildByName("q2").active=SuperCards[uuid].quality==Quality.GREEN
show.getChildByName("mask").getChildByName("q3").active=SuperCards[uuid].quality==Quality.BLUE
show.getChildByName("mask").getChildByName("q4").active=SuperCards[uuid].quality==Quality.PURPLE
show.getChildByName("mask").getChildByName("q5").active=SuperCards[uuid].quality==Quality.ORANGE
show.getChildByName("name").getChildByName("name").getComponent(Label).string=SuperCards[uuid].name
var icon_path = "game/heros/cards"
resources.load(icon_path, SpriteAtlas, (err: any, atlas) => {
const sprite = show.getChildByName("mask").getChildByName("func").getComponent(Sprite);
@@ -162,32 +204,24 @@ export class CardComp extends CCComp {
show.getChildByName("ap").active=false
show.getChildByName("hp").active=false
show.getChildByName("mask").getChildByName("skill").active=false
show.getChildByName("mask").getChildByName("s_bg").active=false
show.getChildByName("mask").getChildByName("equip").active=false
show.getChildByName("mask").getChildByName("e_bg").active=false
show.getChildByName("mask").getChildByName("hero").active=false
show.getChildByName("mask").getChildByName("h_bg").active=false
show.getChildByName("mask").getChildByName("func").active=false
show.getChildByName("mask").getChildByName("f_bg").active=false
switch(this.c_type){
case cardType.HERO:
show.getChildByName("mask").getChildByName("hero").active=true
show.getChildByName("mask").getChildByName("h_bg").active=true
show.getChildByName("type").getChildByName("name").getComponent(Label).string="英雄"
break
case cardType.SKILL:
show.getChildByName("mask").getChildByName("skill").active=true
show.getChildByName("mask").getChildByName("s_bg").active=true
show.getChildByName("type").getChildByName("name").getComponent(Label).string="技能"
break
case cardType.EQUIP:
show.getChildByName("mask").getChildByName("equip").active=true
show.getChildByName("mask").getChildByName("e_bg").active=true
show.getChildByName("type").getChildByName("name").getComponent(Label).string="装备"
break
case cardType.SPECIAL:
show.getChildByName("mask").getChildByName("func").active=true
show.getChildByName("mask").getChildByName("f_bg").active=true
show.getChildByName("type").getChildByName("name").getComponent(Label).string="特效"
break
}
@@ -202,7 +236,7 @@ export class CardComp extends CCComp {
// return "替换"
// }
// }
return "选择"
return "购买"
}
use_card(){
switch(this.c_type){

View File

@@ -32,13 +32,14 @@ export class CardsCompComp extends CCComp {
this.on(GameEvent.HeroSkillSelect, this.addToQueue, this);
this.on(GameEvent.HeroSelect, this.addToQueue, this);
this.on(GameEvent.CardRefresh, this.addToQueue, this);
this.on(GameEvent.FuncSelect, this.addToQueue, this);
this.on(GameEvent.MissionEnd, this.clear_cards, this);
this.on(GameEvent.HeroSkillSelectEnd, this.close_cards, this);
this.on(GameEvent.CardsClose, this.close_cards, this);
this.card1=this.node.getChildByName("card1")
this.card2=this.node.getChildByName("card2")
this.card3=this.node.getChildByName("card3")
this.on(GameEvent.EquipSelect, this.addToQueue, this);
this.card1=this.node.getChildByName("cards").getChildByName("card1")
this.card2=this.node.getChildByName("cards").getChildByName("card2")
this.card3=this.node.getChildByName("cards").getChildByName("card3")
// this.card4=this.node.getChildByName("card4")
this.card1c=this.card1.getComponent(CardComp)
this.card2c=this.card2.getComponent(CardComp)
@@ -116,11 +117,15 @@ export class CardsCompComp extends CCComp {
console.log("[CardsComp]:显示技能选择卡牌")
this.hero_skill_select()
break
case GameEvent.CardRefresh:
console.log("[CardsComp]:显示随机刷新卡牌")
case GameEvent.FuncSelect:
console.log("[CardsComp]:显示功能卡牌")
this.node.getChildByName("Button").active=true
this.func_select()
break
case GameEvent.EquipSelect:
console.log("[CardsComp]:显示装备选择卡牌")
this.equip_select()
break
}
this.show()
}
@@ -144,8 +149,8 @@ export class CardsCompComp extends CCComp {
show(){
// 设置初始状态
smc.mission.pause=true
this.node.getChildByName("Button").setPosition(v3(0, this.node.getChildByName("Button").getPosition().y, 0))
this.node.getChildByName("top").setPosition(v3(0, this.node.getChildByName("top").getPosition().y, 0))
// this.node.getChildByName("Button").setPosition(v3(0, this.node.getChildByName("Button").getPosition().y, 0))
// this.node.getChildByName("top").setPosition(v3(0, this.node.getChildByName("top").getPosition().y, 0))
this.node.setPosition(v3(0, 0, 0));
this.node.setScale(v3(0, 0, 1));

View File

@@ -48,7 +48,7 @@ export class FightConComp extends Component {
private aoe_timer: number = 0; // 技能执行计时器
private readonly AOE_INTERVAL: number = 0.4; // 执行间隔,单位秒
aoe_pos:Vec3=new Vec3(-280,300,0)
aoe_pos:Vec3=new Vec3(-280,20,0)
aoe_target_pos:Vec3=new Vec3(180,0,0)
buff_pos:Vec3=new Vec3(-280,100,0)
debuff_pos:Vec3=new Vec3(-280,100,0)
@@ -185,9 +185,10 @@ export class FightConComp extends Component {
}else{
target_pos= new Vec3(targets[0].get(HeroViewComp).node.position.x,0,0)
}
let start_pos=new Vec3(-280,50,0)
// console.log("[Skill]:node=>",start_pos)
skill.load(
this.aoe_pos,
start_pos,
this.node,
data.s_uuid,
target_pos,

View File

@@ -48,15 +48,42 @@ export class MissionComp extends CCComp {
private on_mon_wave_update(){
smc.vmdata.mission_data.current_wave++
console.log("[任务系统] 当前波次 :",smc.vmdata.mission_data.current_wave)
switch(smc.vmdata.mission_data.current_wave){
case FightSet.FRIEND_WAVE_UP:
let wave=smc.vmdata.mission_data.current_wave
if(wave==FightSet.FRIEND_WAVE_UP){
console.log("[任务系统] FRIEND_WAVE_UP 英雄选择 :",wave,FightSet.FRIEND_WAVE_UP)
this.to_hero_select()
break
case 2:
break
case 3:
}
if(wave==FightSet.BOSS_WAVE_UP_1){
console.log("[任务系统] BOSS_WAVE_UP_1 装备选择 :",wave,FightSet.BOSS_WAVE_UP_1)
}
if(wave==FightSet.BOSS_WAVE_UP_2){
console.log("[任务系统] BOSS_WAVE_UP_2 装备选择 :",wave,FightSet.BOSS_WAVE_UP_2)
}
if(wave==FightSet.BOSS_WAVE_UP_3){
console.log("[任务系统] BOSS_WAVE_UP_3 装备选择 :",wave,FightSet.BOSS_WAVE_UP_3)
}
if(wave==FightSet.EQUIP_WAVE_UP_1){
console.log("[任务系统] EQUIP_WAVE_UP_1 装备选择 :",wave,FightSet.EQUIP_WAVE_UP_1)
}
if(wave==FightSet.EQUIP_WAVE_UP_2){
console.log("[任务系统] EQUIP_WAVE_UP_2 装备选择 :",wave,FightSet.EQUIP_WAVE_UP_2)
}
if(wave==FightSet.EQUIP_WAVE_UP_3){
console.log("[任务系统] EQUIP_WAVE_UP_3 装备选择 :",wave,FightSet.EQUIP_WAVE_UP_3)
}
if(wave==FightSet.SKILL_WAVE_UP_1){
console.log("[任务系统] SKILL_WAVE_UP_1 技能选择 :",wave,FightSet.SKILL_WAVE_UP_1)
oops.message.dispatchEvent(GameEvent.HeroSkillSelect)
}
if(wave==FightSet.SKILL_WAVE_UP_2){
console.log("[任务系统] SKILL_WAVE_UP_2 技能选择 :",wave,FightSet.SKILL_WAVE_UP_2)
oops.message.dispatchEvent(GameEvent.HeroSkillSelect)
}
if(wave==FightSet.SKILL_WAVE_UP_3){
console.log("[任务系统] SKILL_WAVE_UP_3 技能选择 :",wave,FightSet.SKILL_WAVE_UP_3)
oops.message.dispatchEvent(GameEvent.HeroSkillSelect)
}
}
async mission_start(){
@@ -74,7 +101,7 @@ export class MissionComp extends CCComp {
}
to_ready(){
console.log("英雄技能选择")
oops.message.dispatchEvent(GameEvent.HeroSkillSelect)
// oops.message.dispatchEvent(GameEvent.HeroSkillSelect)
}
to_hero_select(){
@@ -133,7 +160,26 @@ export class MissionComp extends CCComp {
mission_data.gold-=(mission_data.refresh_gold+mission_data.buff_refresh_gold)
}
call_equip_card(){
let mission_data=smc.vmdata.mission_data
if(mission_data.gold < (mission_data.refresh_gold+mission_data.buff_refresh_gold)){
oops.gui.toast("金币不足", false);
return
}
oops.message.dispatchEvent(GameEvent.EquipSelect)
mission_data.gold-=(mission_data.refresh_gold+mission_data.buff_refresh_gold)
}
call_func_card(){
let mission_data=smc.vmdata.mission_data
if(mission_data.gold < (mission_data.refresh_gold+mission_data.buff_refresh_gold)){
oops.gui.toast("金币不足", false);
return
}
oops.message.dispatchEvent(GameEvent.FuncSelect)
mission_data.gold-=(mission_data.refresh_gold+mission_data.buff_refresh_gold)
}
private cleanComponents() {
ecs.query(ecs.allOf(HeroViewComp)).forEach(entity => {entity.remove(HeroViewComp);entity.destroy()});
}

View File

@@ -10,6 +10,7 @@ import { HeroViewComp } from "../hero/HeroViewComp";
import { oops } from "db://oops-framework/core/Oops";
import { HeroPos } from "../common/config/heroSet";
import { FightSet } from "../common/config/Mission";
import { FriendModelComp } from "../hero/FriendModel";
const { ccclass, property } = _decorator;
/** 视图层对象 */
@@ -21,7 +22,7 @@ export class MissionHeroCompComp extends CCComp {
Friend_is_dead:boolean=false
current_hero_uuid:number=0
onLoad(){
this.on(GameEvent.UseHeroCard,this.call_friend,this)
this.on(GameEvent.UseHeroCard,this.call_hero,this)
this.on(GameEvent.ChangeATK_EQUIP_SPECIAL_ATTR,this.change_equip_qpecial_attr,this)
this.on(GameEvent.FightReady,this.fight_ready,this)
@@ -113,21 +114,20 @@ export class MissionHeroCompComp extends CCComp {
// }
// call_hero(event: string, args: any){
// // this.node.getChildByName("location").active=false
// // console.log("call_hero",args)
// // let fight_pos=args
// // this.timer.reset()
// // let hero_list =HeroList
// // let x=RandomManager.instance.getRandomInt(0,hero_list.length,1)
// // // let uuid=args.uuid
// // // console.log("call_hero",uuid)
// this.addHero(args.uuid)
// }
call_hero(event: string, args: any){
// this.node.getChildByName("location").active=false
// console.log("call_hero",args)
// let fight_pos=args
// this.timer.reset()
// let hero_list =HeroList
// let x=RandomManager.instance.getRandomInt(0,hero_list.length,1)
// // let uuid=args.uuid
// // console.log("call_hero",uuid)
this.addHero(args.uuid)
}
/** 添加英雄 */
private addHero(uuid:number=1001,freind_pos:number=0) {
console.log("call_hero addHero",uuid)
private addHero(uuid:number=1001,freind_pos:number=1) {
let info:any=this.get_info_and_remove(freind_pos,uuid)
// let info:any={ap:0,hp:0,lv:0}
let hero = ecs.getEntity<Hero>(Hero);
@@ -138,27 +138,22 @@ export class MissionHeroCompComp extends CCComp {
}
get_info_and_remove(fight_pos:number,uuid:number){
let info:any={ap:0,hp:0,lv:0}
let heros=ecs.query(ecs.allOf(HeroModelComp))
for(let hero of heros){
let info:any={ap:0,hp:0,lv:1,crt:0,crt_d:0,dod:0,dod_no:false,crt_no:false}
let heros=ecs.query(ecs.allOf(FriendModelComp))
if(heros.length>0){
let hero = heros[0]
let hv = hero.get(HeroViewComp)
if(hv.fight_pos==fight_pos&&!hv.is_master){
// let AP_UP_RATE = hv.hero_uuid === uuid ? FightSet.AP_UPDATE_RATE : FightSet.AP_CHANGE_RATE;
// let heroUpData = HeroUpInfo[hv.hero_uuid] || {}
// let o_ap_rate = heroUpData.ap_up_rate || 0 //被替换 升级的英雄额外被替换攻击增长比率
// let o_ap = heroUpData.ap_up || 0 //被替换 升级的英雄额外被替换攻击增长值
// let s_ap_rate = (HeroUpInfo[uuid] || {}).ap_up_rate || 0 //替换 升级的英雄额外替换攻击增长比率
// let s_ap = (HeroUpInfo[uuid] || {}).ap_up || 0 //替换 升级的英雄额外替换攻击增长值
// let o_hp_up = heroUpData.hp_up || 0 //被替换 升级的英雄额外被替换血量增长值
// let s_hp_up = (HeroUpInfo[uuid] || {}).hp_up || 0 //替换 升级的英雄额外替换血量增长值
// info.ap=Math.floor(hv.ap*(AP_UP_RATE+o_ap_rate+s_ap_rate)/100+o_ap+s_ap)
// info.hp=Math.floor(o_hp_up+s_hp_up)
info.ap=hv.ap
info.hp=hv.hp_max
info.lv=hv.lv
info.crt=hv.crt
info.crt_d=hv.crt_d
info.dod=hv.dod
info.dod_no=hv.dod_no
info.crt_no=hv.crt_no
hero.destroy()
return info
}
}
return info
}

View File

@@ -1,16 +1,18 @@
import { _decorator,Collider2D ,Contact2DType,v3,IPhysics2DContact,Vec3, tween, math, RigidBody2D, Animation, sp} from "cc";
import { _decorator,Collider2D ,Contact2DType,v3,IPhysics2DContact,Vec3, tween, math, RigidBody2D, Animation, sp, Tween} 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 { smc } from "../common/SingletonModuleComp";
import { oops } from "../../../../extensions/oops-plugin-framework/assets/core/Oops";
import { GameEvent } from "../common/config/GameEvent";
import { AType, EType, RType, SkillSet } from "../common/config/SkillSet";
import { BoxSet } from "../common/config/BoxSet";
import { BoxSet, FacSet } from "../common/config/BoxSet";
import { HeroFac, HeroSet } from "../common/config/heroSet";
import { HeroViewComp } from "../hero/HeroViewComp";
import { BezierMove } from "../BezierMove/BezierMove";
import { FightConComp } from "../map/FightConComp";
import { MonModelComp } from "../hero/MonModelComp";
import { FightSet } from "../common/config/Mission";
import { HeroModelComp } from "../hero/HeroModelComp";
const { ccclass, property } = _decorator;
@@ -41,10 +43,15 @@ export class SkillCom extends CCComp {
distance_y:number=0;
ap:number=0;
FIGHTCON:FightConComp=null;
run_time:number=0;
hited_time:number=0;
hit_count:number=0;
spine:sp.Skeleton=null;
anim:Animation=null;
tweenInstance:Tween<any> = null;
t_end_x:number=0;
caster_crt:number=0;
caster_crt_d:number=0;
private moveDirection: Vec3 | null = null; // 添加一个属性来存储移动方向
protected onLoad(): void {
@@ -53,6 +60,8 @@ export class SkillCom extends CCComp {
}
start() {
this.node.setPosition(this.startPos.x,this.startPos.y,0)
if(this.node.getChildByName('anm')){
this.spine=this.node.getChildByName('anm').getComponent('sp.Skeleton') as sp.Skeleton;
}else{
@@ -60,6 +69,19 @@ export class SkillCom extends CCComp {
}
oops.message.on(GameEvent.MissionEnd, this.doDestroy, this);
this.node.active = true;
console.log("[SkillCom]:caster",this.caster)
if(this.caster.fac==FacSet.HERO){
if(this.caster.is_master){
this.caster_crt = this.caster.crt+this.FIGHTCON.hero_buff.CRITICAL+this.FIGHTCON.hero_debuff.CRITICAL
this.caster_crt_d = this.caster.crt_d+this.FIGHTCON.hero_buff.CRITICAL_DMG
}else{
this.caster_crt = this.caster.crt+this.FIGHTCON.friend_buff.CRITICAL+this.FIGHTCON.hero_debuff.CRITICAL
this.caster_crt_d = this.caster.crt_d+this.FIGHTCON.friend_buff.CRITICAL_DMG
}
}else{
this.caster_crt = this.caster.crt+this.FIGHTCON.enemy_buff.CRITICAL+this.FIGHTCON.enemy_debuff.CRITICAL
this.caster_crt_d = this.caster.crt_d+this.FIGHTCON.enemy_buff.CRITICAL_DMG
}
let collider = this.getComponent(Collider2D);
if(collider) {
collider.group = this.group;
@@ -72,21 +94,20 @@ export class SkillCom extends CCComp {
let bm=this.node.getComponent(BezierMove)
// bm.speed=700
if(this.group==BoxSet.MONSTER) bm.controlPointSide=-1
if(SkillSet[this.s_uuid].RType==RType.linear) bm.controlPointOffset=0
bm.moveTo(this.targetPos)
break;
case AType.linear:
let tx =400
if(this.group==BoxSet.MONSTER){
tx=-400
this.node.scale=v3(this.node.scale.x*-1,1,1)
}
tween(this.node).to(1, { position:v3(tx,this.node.position.y,0)},{
onComplete: (target?: object) => {
this.node.setPosition(tx,this.node.position.y-300,0)
}
}).start()
// this.distance_x=SkillSet[this.s_uuid].in*this.speed
// this.t_end_x =400
// if(this.group==BoxSet.MONSTER){
// this.t_end_x=-400
// this.node.scale=v3(this.node.scale.x*-1,1,1)
// }
// this.tweenInstance = tween(this.node).to(SkillSet[this.s_uuid].in, { position:v3(this.t_end_x,this.node.position.y,0)},{
// onComplete: (target?: object) => {
// // this.node.setPosition(tx,this.node.position.y-300,0)
// }
// }).start()
break;
case AType.fixedStart:
@@ -95,15 +116,15 @@ export class SkillCom extends CCComp {
this.node.setPosition(this.targetPos.x,this.targetPos.y,0)
if(this.node.getComponent(Animation)){
let anim = this.node.getComponent(Animation);
console.log("has anim",anim)
anim.on(Animation.EventType.FINISHED, this.onAnimationFinishedToDestroy, this);
console.log("[SkillCom]:has anim",anim)
anim.on(Animation.EventType.FINISHED, this.onAnimationFinished, this);
}
if(this.node.getChildByName('anm')){
if(this.node.getChildByName('anm').getComponent('sp.Skeleton')){
console.log("has spine",this.spine)
console.log("[SkillCom]:has spine",this.spine)
this.spine.setCompleteListener((trackEntry) => {
this.onAnimationFinishedToDestroy()
console.log("[track %s][animation %s] complete: %s", trackEntry.trackIndex);
this.onAnimationFinished()
console.log("[SkillCom]:[track %s][animation %s] complete: %s", trackEntry.trackIndex);
});
}
}
@@ -112,55 +133,56 @@ export class SkillCom extends CCComp {
}
onAnimationFinishedToDestroy(){
onAnimationFinished(){
if(SkillSet[this.s_uuid].EType==EType.timeEnd) return
this.is_destroy=true
}
onAnimationFinished(){
//范围伤害
range_damage(){
this.hit_count++
let remainingDamage = this.ap;
remainingDamage=remainingDamage*(100-this.FIGHTCON.enemy_buff.DEF+this.FIGHTCON.enemy_debuff.BURN)/100
let enemys=ecs.query(ecs.allOf(MonModelComp))
console.log("onAnimationFinished",enemys)
if(this.fac==FacSet.MON) enemys=ecs.query(ecs.allOf(HeroModelComp))
enemys.forEach(entity => {
let view=entity.get(HeroViewComp)
if(view){
let dis =Math.abs(this.node.position.x-view.node.position.x)
if(dis > SkillSet[this.s_uuid].with) return
view.do_atked(remainingDamage)
view.do_atked(this.ap,this.caster_crt,this.caster_crt_d)
}
});
}
//单体伤害
single_damage(target:HeroViewComp,crt:number=0,crt_d:number=0){
this.hit_count++
console.log("[SkillCom]:onBeginContact hit_count:",this.hit_count,SkillSet[this.s_uuid].hit)
if(this.hit_count>=SkillSet[this.s_uuid].hit) this.is_destroy=true // 技能命中次数
if(target == null) return;
target.do_atked(this.ap,crt,crt_d)
if(SkillSet[this.s_uuid].debuff>0){
target.add_debuff(SkillSet[this.s_uuid].debuff,SkillSet[this.s_uuid].deV,SkillSet[this.s_uuid].deC)
}
}
onBeginContact (seCol: Collider2D, oCol: Collider2D) {
// console.log(this.scale+"碰撞开始 ",seCol,oCol);
let target = oCol.getComponent(HeroViewComp)
let caster = seCol.getComponent(HeroViewComp)
if(oCol.group!=this.group){
if(target == null) return;
let remainingDamage = this.ap;
if(target.fac == BoxSet.HERO ){
remainingDamage=remainingDamage*(100-this.FIGHTCON.hero_buff.DEF+this.FIGHTCON.hero_debuff.BURN)/100
}
if(target.fac == BoxSet.MONSTER){
remainingDamage=remainingDamage*(100-this.FIGHTCON.enemy_buff.DEF+this.FIGHTCON.enemy_debuff.BURN)/100
}
target.do_atked(remainingDamage)
this.ent.destroy()
this.single_damage(target,this.caster_crt,this.caster_crt_d)
// this.ent.destroy()
}
}
private startLinearMove(dt: number) {
if (!this.speed || this.is_destroy) return;
// 使用角度方向移动
const newX = this.node.position.x + this.distance_x * dt;
const newY = this.node.position.y + this.distance_y * dt;
this.node.setPosition(newX, newY, this.node.position.z);
const newX = this.node.position.x + this.speed * dt;
const newY = this.node.position.y;
this.node.setPosition(newX, this.node.position.y, this.node.position.z);
// 检查是否超出边界
if (newX < -400 || newX > 400) {
@@ -169,10 +191,6 @@ export class SkillCom extends CCComp {
}
to_console(value:any,value2:any=null,value3:any=null){
console.log("["+this.s_name+this.s_uuid+"]:",value,value2,value3)
}
update(deltaTime: number) {
let config=SkillSet[this.s_uuid]
if(smc.mission.pause) {
@@ -183,14 +201,24 @@ export class SkillCom extends CCComp {
if(this.anim) this.anim.resume()
if(this.spine) this.spine.paused=false
if (!this.node || !this.node.isValid) return;
this.hited_time+=deltaTime
if(this.hited_time>config.hited&&this.AType==AType.fixedEnd&&this.hit_count == 0){
this.hited_time=0
this.onAnimationFinished()
if(config.EType==EType.timeEnd){
this.run_time+=deltaTime
if(this.run_time>config.in){
console.log("[SkillCom]: timeEnd destroy",this.s_uuid,this.run_time)
this.is_destroy=true
}
// if(this.AType == AType.linear) this.startLinearMove(deltaTime);
}
//范围伤害
this.hited_time+=deltaTime
if(this.hited_time>config.hited&&this.hit_count == 0&&(config.EType==EType.animationEnd||config.EType==EType.timeEnd)){
this.hited_time=0
this.range_damage()
}
//直线移动
if(this.AType == AType.linear) this.startLinearMove(deltaTime);
this.toDestroy();
}
toDestroy() {
if(this.is_destroy){
if (this.ent) {
@@ -204,9 +232,13 @@ export class SkillCom extends CCComp {
}
}
doDestroy(){
// console.log("doDestroy")
// console.log("[SkillCom]:doDestroy")
this.is_destroy=true
}
to_console(value:any,value2:any=null,value3:any=null){
console.log("[SkillCom]:["+this.s_name+this.s_uuid+"]:",value,value2,value3)
}
/** 视图对象通过 ecs.Entity.remove(ModuleViewComp) 删除组件是触发组件处理自定义释放逻辑 */
reset() {
this.is_destroy = false;

View File

@@ -26,6 +26,7 @@ export class TooltipCom extends CCComp {
start() {
switch(this.stype){
case 1:
this.node.setPosition(v3(this.node.position.x,this.node.position.y-50))
this.node.setSiblingIndex(100);
this.node.getChildByName("loss_life").getChildByName("hp").getComponent(Label).string = this.value;
this.node.getChildByName("loss_life").active=true;
@@ -42,6 +43,7 @@ export class TooltipCom extends CCComp {
},0.5)
break
case 4:
this.node.setPosition(v3(this.node.position.x,this.node.position.y-50))
this.node.setSiblingIndex(200);
this.node.getChildByName("bloss").getChildByName("hp").getComponent(Label).string = this.value;
this.node.getChildByName("bloss").active=true;

View File

@@ -20,17 +20,67 @@
- [x] 每攻击n次 加伙伴ap
- [x] 每攻击n次后 增加1金币
- [x] 死亡 , 被攻击触发 2次
- [x] 暴击闪避 加入
- [ ] 卡牌设定,卡牌icon
- [ ] 清理技能动画 及设置
- [ ] 伙伴特殊技能设定
- [ ] 技能需要重新设计
- [x] debuff 设定 易伤 为次数和伤害累加
- [ ] 冰冻 眩晕 功能更新 还需要检验
- [ ] 分按钮三选一, 装备, 功能卡, 副将和技能,特殊情况下 触发更换和获取
- [ ] 修改 发现都是1金币,加白色0金币 绿色+1金币,蓝色+2金币
- [ ] 刷新免费1回合,看广告 再刷新一回
- [ ] 广告拿紫色品质, 各品质装备 属性相差20% ,紫色品质 一定几率出现,出现后 10秒后消失
- [ ] 装备设定,借助AI
- [ ] 添加玩家自主 激活额外boss 按钮,额外boss 有特殊事件
- [ ]
- [ ]
- [ ]
- [ ]
- [ ]
- [ ]
- [ ]
- [ ]
- [ ]
波数 升级 获取装备的等级
# 装备系统三维度分层模型
## 1. 核心分层维度
| 维度 | 作用域 | 设计目标 | 玩家感知重点 |
|------------------|----------------|---------------------------|---------------------|
| **基础值** | 单件装备 | 定义初始强度基准 | "这件装备基础怎么样" |
| **品质系数** | 装备品质(白→紫)| 决定特效能力与成长潜力 | "颜色代表特殊能力" |
| **等级成长系数** | 装备升级过程 | 强化基础值+特效 | "升级后的蜕变效果" |
## 2. 品质维度设计(按颜色分级)
| 品质 | 攻击基础值 | 品质系数 | 独有特效 | 成长潜力 |
|------|------------|----------|------------------------|----------|
| **白** | 80% | 0% | 无 | ★☆☆ |
| **绿** | 85% | +5% | 低阶特效(减速5%) | ★★☆ |
| **蓝** | 90% | +15% | 中阶特效(溅射10%) | ★★★ |
| **紫** | 95% | +30% | 高阶特效(吸血15%) | ★★★★ |
> ✅ 品质核心规则:
> 1. 同等级下品质越高→**基础值+品质系数越高**
> 2. 品质决定**特效类型与强度**
## 3. 等级维度设计(可升级3次)
| 等级 | 成长系数 | 对基础值影响 | 对特效影响 | 升级成本(金币) |
|------|----------|--------------|------------------------|----------------|
| **1级** | 0% | 基准值 | 基准特效强度 | - |
| **2级** | +10% | +10%基础值 | 特效强度+20% | 10/15/25/40* |
| **3级** | +21% | +21%基础值 | 特效强度+42% | 20/30/50/80* |
`*成本顺序:白/绿/蓝/紫装`
> ✅ 升级核心规则:
> 1. 升级**同时强化基础属性与特效**
> 2. 高品质装备升级收益**更高**
---
## 4. 三维综合计算规则
### 总攻击力公式:
```math
总攻击 = 基础值 \times (1 + 品质系数) \times (1 +