From cdb8261be975c91ccbc0c0ae96e9dc14d8fc260e Mon Sep 17 00:00:00 2001 From: walkpan Date: Mon, 3 Feb 2025 10:45:06 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8A=E6=94=BE=E6=8A=80=E8=83=BD=E5=8A=A8?= =?UTF-8?q?=E7=94=BB=20=E8=AE=BE=E5=AE=9A=E5=9C=A8=E6=8A=80=E8=83=BD?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E4=B8=AD+=E4=BC=A4=E5=AE=B3=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E5=BB=BA=E7=AB=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/resources/game/heros/k1.prefab | 539 +++++++----------- assets/resources/game/skills/max.prefab | 23 +- .../{buff_do.prefab => max_blue.prefab} | 4 +- ...ff_do.prefab.meta => max_blue.prefab.meta} | 2 +- .../{buff_do2.prefab => max_red.prefab} | 4 +- ...ff_do2.prefab.meta => max_red.prefab.meta} | 2 +- assets/scene.scene | 449 +++++++++++++++ assets/scene.scene.meta | 11 + assets/script/game/common/config/SkillSet.ts | 67 ++- assets/script/game/damage/DamageComp.ts | 41 ++ assets/script/game/damage/DamageSystem.ts | 70 +++ assets/script/game/hero/BuffComp.ts | 10 +- assets/script/game/hero/HeroSpine.ts | 18 + assets/script/game/hero/HeroViewComp.ts | 68 ++- assets/script/game/hero/Mon.ts | 70 ++- assets/script/game/map/HCardComp.ts | 4 +- assets/script/game/skill/HeroSkillSystem.ts | 40 +- 17 files changed, 960 insertions(+), 462 deletions(-) rename assets/resources/game/skills/{buff_do.prefab => max_blue.prefab} (99%) rename assets/resources/game/skills/{buff_do.prefab.meta => max_blue.prefab.meta} (85%) rename assets/resources/game/skills/{buff_do2.prefab => max_red.prefab} (99%) rename assets/resources/game/skills/{buff_do2.prefab.meta => max_red.prefab.meta} (85%) create mode 100644 assets/scene.scene create mode 100644 assets/scene.scene.meta create mode 100644 assets/script/game/damage/DamageComp.ts create mode 100644 assets/script/game/damage/DamageSystem.ts diff --git a/assets/resources/game/heros/k1.prefab b/assets/resources/game/heros/k1.prefab index 4bfca6c6..d81d27b9 100644 --- a/assets/resources/game/heros/k1.prefab +++ b/assets/resources/game/heros/k1.prefab @@ -25,13 +25,13 @@ "__id__": 8 }, { - "__id__": 17 + "__id__": 16 }, { - "__id__": 25 + "__id__": 28 }, { - "__id__": 37 + "__id__": 39 }, { "__id__": 48 @@ -41,28 +41,25 @@ }, { "__id__": 66 - }, - { - "__id__": 75 } ], "_active": true, "_components": [ { - "__id__": 84 + "__id__": 75 }, { - "__id__": 86 + "__id__": 77 }, { - "__id__": 88 + "__id__": 79 }, { - "__id__": 90 + "__id__": 81 } ], "_prefab": { - "__id__": 92 + "__id__": 83 }, "_lpos": { "__type__": "cc.Vec3", @@ -229,131 +226,6 @@ "targetOverrides": null, "nestedPrefabInstanceRoots": null }, - { - "__type__": "cc.Node", - "_objFlags": 0, - "_parent": { - "__id__": 1 - }, - "_prefab": { - "__id__": 9 - }, - "__editorExtras__": {} - }, - { - "__type__": "cc.PrefabInfo", - "root": { - "__id__": 8 - }, - "asset": { - "__uuid__": "198e9c93-3ac9-4564-9d0e-63c9836e509a", - "__expectedType__": "cc.Prefab" - }, - "fileId": "54R/aYBglLI4Jn5pm++Jx8", - "instance": { - "__id__": 10 - }, - "targetOverrides": null - }, - { - "__type__": "cc.PrefabInstance", - "fileId": "cdIK+ocxBJRLNeMROksdDi", - "prefabRootNode": { - "__id__": 1 - }, - "mountedChildren": [], - "mountedComponents": [], - "propertyOverrides": [ - { - "__id__": 11 - }, - { - "__id__": 13 - }, - { - "__id__": 14 - }, - { - "__id__": 15 - }, - { - "__id__": 16 - } - ], - "removedComponents": [] - }, - { - "__type__": "CCPropertyOverrideInfo", - "targetInfo": { - "__id__": 12 - }, - "propertyPath": [ - "_name" - ], - "value": "max" - }, - { - "__type__": "cc.TargetInfo", - "localID": [ - "54R/aYBglLI4Jn5pm++Jx8" - ] - }, - { - "__type__": "CCPropertyOverrideInfo", - "targetInfo": { - "__id__": 12 - }, - "propertyPath": [ - "_lpos" - ], - "value": { - "__type__": "cc.Vec3", - "x": 0, - "y": -0.07, - "z": 0 - } - }, - { - "__type__": "CCPropertyOverrideInfo", - "targetInfo": { - "__id__": 12 - }, - "propertyPath": [ - "_lrot" - ], - "value": { - "__type__": "cc.Quat", - "x": 0, - "y": 0, - "z": 0, - "w": 1 - } - }, - { - "__type__": "CCPropertyOverrideInfo", - "targetInfo": { - "__id__": 12 - }, - "propertyPath": [ - "_euler" - ], - "value": { - "__type__": "cc.Vec3", - "x": 0, - "y": 0, - "z": 0 - } - }, - { - "__type__": "CCPropertyOverrideInfo", - "targetInfo": { - "__id__": 12 - }, - "propertyPath": [ - "_active" - ], - "value": false - }, { "__type__": "cc.Node", "_name": "anm", @@ -366,17 +238,17 @@ "_active": true, "_components": [ { - "__id__": 18 + "__id__": 9 }, { - "__id__": 20 + "__id__": 11 }, { - "__id__": 22 + "__id__": 13 } ], "_prefab": { - "__id__": 24 + "__id__": 15 }, "_lpos": { "__type__": "cc.Vec3", @@ -413,11 +285,11 @@ "_objFlags": 0, "__editorExtras__": {}, "node": { - "__id__": 17 + "__id__": 8 }, "_enabled": true, "__prefab": { - "__id__": 19 + "__id__": 10 }, "_contentSize": { "__type__": "cc.Size", @@ -441,11 +313,11 @@ "_objFlags": 0, "__editorExtras__": {}, "node": { - "__id__": 17 + "__id__": 8 }, "_enabled": true, "__prefab": { - "__id__": 21 + "__id__": 12 }, "_customMaterial": null, "_srcBlendFactor": 2, @@ -486,11 +358,11 @@ "_objFlags": 0, "__editorExtras__": {}, "node": { - "__id__": 17 + "__id__": 8 }, "_enabled": true, "__prefab": { - "__id__": 23 + "__id__": 14 }, "_id": "" }, @@ -518,14 +390,14 @@ "__id__": 1 }, "_prefab": { - "__id__": 26 + "__id__": 17 }, "__editorExtras__": {} }, { "__type__": "cc.PrefabInfo", "root": { - "__id__": 25 + "__id__": 16 }, "asset": { "__uuid__": "e1b8a315-ece3-41a2-941e-a66861753f1b", @@ -533,7 +405,7 @@ }, "fileId": "c46/YsCPVOJYA4mWEpNYRx", "instance": { - "__id__": 27 + "__id__": 18 }, "targetOverrides": null }, @@ -547,25 +419,25 @@ "mountedComponents": [], "propertyOverrides": [ { - "__id__": 28 + "__id__": 19 }, { - "__id__": 30 + "__id__": 21 }, { - "__id__": 31 + "__id__": 22 }, { - "__id__": 32 + "__id__": 23 }, { - "__id__": 33 + "__id__": 24 }, { - "__id__": 34 + "__id__": 25 }, { - "__id__": 36 + "__id__": 27 } ], "removedComponents": [] @@ -573,7 +445,7 @@ { "__type__": "CCPropertyOverrideInfo", "targetInfo": { - "__id__": 29 + "__id__": 20 }, "propertyPath": [ "_name" @@ -589,7 +461,7 @@ { "__type__": "CCPropertyOverrideInfo", "targetInfo": { - "__id__": 29 + "__id__": 20 }, "propertyPath": [ "_lpos" @@ -604,7 +476,7 @@ { "__type__": "CCPropertyOverrideInfo", "targetInfo": { - "__id__": 29 + "__id__": 20 }, "propertyPath": [ "_lrot" @@ -620,7 +492,7 @@ { "__type__": "CCPropertyOverrideInfo", "targetInfo": { - "__id__": 29 + "__id__": 20 }, "propertyPath": [ "_euler" @@ -635,7 +507,7 @@ { "__type__": "CCPropertyOverrideInfo", "targetInfo": { - "__id__": 29 + "__id__": 20 }, "propertyPath": [ "_active" @@ -645,7 +517,7 @@ { "__type__": "CCPropertyOverrideInfo", "targetInfo": { - "__id__": 35 + "__id__": 26 }, "propertyPath": [ "_contentSize" @@ -665,7 +537,7 @@ { "__type__": "CCPropertyOverrideInfo", "targetInfo": { - "__id__": 29 + "__id__": 20 }, "propertyPath": [ "_lscale" @@ -684,14 +556,14 @@ "__id__": 1 }, "_prefab": { - "__id__": 38 + "__id__": 29 }, "__editorExtras__": {} }, { "__type__": "cc.PrefabInfo", "root": { - "__id__": 37 + "__id__": 28 }, "asset": { "__uuid__": "50c3d5e4-49f8-4bd7-a15b-cda359a0ae5c", @@ -699,7 +571,7 @@ }, "fileId": "5fqU0L3/FOhKaco5UkHuWT", "instance": { - "__id__": 39 + "__id__": 30 }, "targetOverrides": null }, @@ -713,22 +585,22 @@ "mountedComponents": [], "propertyOverrides": [ { - "__id__": 40 + "__id__": 31 }, { - "__id__": 42 + "__id__": 33 }, { - "__id__": 43 + "__id__": 34 }, { - "__id__": 44 + "__id__": 35 }, { - "__id__": 45 + "__id__": 36 }, { - "__id__": 47 + "__id__": 38 } ], "removedComponents": [] @@ -736,7 +608,7 @@ { "__type__": "CCPropertyOverrideInfo", "targetInfo": { - "__id__": 41 + "__id__": 32 }, "propertyPath": [ "_name" @@ -752,7 +624,7 @@ { "__type__": "CCPropertyOverrideInfo", "targetInfo": { - "__id__": 41 + "__id__": 32 }, "propertyPath": [ "_lpos" @@ -767,7 +639,7 @@ { "__type__": "CCPropertyOverrideInfo", "targetInfo": { - "__id__": 41 + "__id__": 32 }, "propertyPath": [ "_lrot" @@ -783,7 +655,7 @@ { "__type__": "CCPropertyOverrideInfo", "targetInfo": { - "__id__": 41 + "__id__": 32 }, "propertyPath": [ "_euler" @@ -798,7 +670,7 @@ { "__type__": "CCPropertyOverrideInfo", "targetInfo": { - "__id__": 46 + "__id__": 37 }, "propertyPath": [ "_lpos" @@ -819,7 +691,7 @@ { "__type__": "CCPropertyOverrideInfo", "targetInfo": { - "__id__": 41 + "__id__": 32 }, "propertyPath": [ "_lscale" @@ -831,6 +703,131 @@ "z": 1 } }, + { + "__type__": "cc.Node", + "_objFlags": 0, + "_parent": { + "__id__": 1 + }, + "_prefab": { + "__id__": 40 + }, + "__editorExtras__": {} + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 39 + }, + "asset": { + "__uuid__": "5b4ca49e-0f12-4478-b56d-bf8198b36b90", + "__expectedType__": "cc.Prefab" + }, + "fileId": "0d6ZXmA5dHkZxoGONDL2sE", + "instance": { + "__id__": 41 + }, + "targetOverrides": null + }, + { + "__type__": "cc.PrefabInstance", + "fileId": "fe79INE+JI1Jy2Hu0iKLMn", + "prefabRootNode": { + "__id__": 1 + }, + "mountedChildren": [], + "mountedComponents": [], + "propertyOverrides": [ + { + "__id__": 42 + }, + { + "__id__": 44 + }, + { + "__id__": 45 + }, + { + "__id__": 46 + }, + { + "__id__": 47 + } + ], + "removedComponents": [] + }, + { + "__type__": "CCPropertyOverrideInfo", + "targetInfo": { + "__id__": 43 + }, + "propertyPath": [ + "_name" + ], + "value": "tooltip" + }, + { + "__type__": "cc.TargetInfo", + "localID": [ + "0d6ZXmA5dHkZxoGONDL2sE" + ] + }, + { + "__type__": "CCPropertyOverrideInfo", + "targetInfo": { + "__id__": 43 + }, + "propertyPath": [ + "_lpos" + ], + "value": { + "__type__": "cc.Vec3", + "x": 4.65, + "y": 129.718, + "z": 0 + } + }, + { + "__type__": "CCPropertyOverrideInfo", + "targetInfo": { + "__id__": 43 + }, + "propertyPath": [ + "_lrot" + ], + "value": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + } + }, + { + "__type__": "CCPropertyOverrideInfo", + "targetInfo": { + "__id__": 43 + }, + "propertyPath": [ + "_euler" + ], + "value": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + } + }, + { + "__type__": "CCPropertyOverrideInfo", + "targetInfo": { + "__id__": 43 + }, + "propertyPath": [ + "_active" + ], + "value": false + }, { "__type__": "cc.Node", "_objFlags": 0, @@ -848,10 +845,10 @@ "__id__": 48 }, "asset": { - "__uuid__": "5b4ca49e-0f12-4478-b56d-bf8198b36b90", + "__uuid__": "ae4493bd-cbcc-4392-921c-3e2b0fcd5338", "__expectedType__": "cc.Prefab" }, - "fileId": "0d6ZXmA5dHkZxoGONDL2sE", + "fileId": "91yoyAQGNDm5ziI7NUChZ+", "instance": { "__id__": 50 }, @@ -859,7 +856,7 @@ }, { "__type__": "cc.PrefabInstance", - "fileId": "fe79INE+JI1Jy2Hu0iKLMn", + "fileId": "08n1IzuupL3YNn2/tFvc8M", "prefabRootNode": { "__id__": 1 }, @@ -892,12 +889,12 @@ "propertyPath": [ "_name" ], - "value": "tooltip" + "value": "up" }, { "__type__": "cc.TargetInfo", "localID": [ - "0d6ZXmA5dHkZxoGONDL2sE" + "91yoyAQGNDm5ziI7NUChZ+" ] }, { @@ -910,8 +907,8 @@ ], "value": { "__type__": "cc.Vec3", - "x": 4.65, - "y": 129.718, + "x": 4.302, + "y": 45.887, "z": 0 } }, @@ -973,10 +970,10 @@ "__id__": 57 }, "asset": { - "__uuid__": "ae4493bd-cbcc-4392-921c-3e2b0fcd5338", + "__uuid__": "afb84e4d-b478-4ab6-8f14-4f69d7a2c57f", "__expectedType__": "cc.Prefab" }, - "fileId": "91yoyAQGNDm5ziI7NUChZ+", + "fileId": "733PKzwANLyJWD2ume4u5f", "instance": { "__id__": 59 }, @@ -984,7 +981,7 @@ }, { "__type__": "cc.PrefabInstance", - "fileId": "08n1IzuupL3YNn2/tFvc8M", + "fileId": "6e93Sa8IZKKa8Fw7xWs/I6", "prefabRootNode": { "__id__": 1 }, @@ -1017,12 +1014,12 @@ "propertyPath": [ "_name" ], - "value": "up" + "value": "wind" }, { "__type__": "cc.TargetInfo", "localID": [ - "91yoyAQGNDm5ziI7NUChZ+" + "733PKzwANLyJWD2ume4u5f" ] }, { @@ -1035,8 +1032,8 @@ ], "value": { "__type__": "cc.Vec3", - "x": 4.302, - "y": 45.887, + "x": 0, + "y": 0, "z": 0 } }, @@ -1098,10 +1095,10 @@ "__id__": 66 }, "asset": { - "__uuid__": "afb84e4d-b478-4ab6-8f14-4f69d7a2c57f", + "__uuid__": "3899fa6a-77a8-4809-b34b-64e0daa5674c", "__expectedType__": "cc.Prefab" }, - "fileId": "733PKzwANLyJWD2ume4u5f", + "fileId": "65v9q/98dMjafRlb094Ctr", "instance": { "__id__": 68 }, @@ -1109,7 +1106,7 @@ }, { "__type__": "cc.PrefabInstance", - "fileId": "6e93Sa8IZKKa8Fw7xWs/I6", + "fileId": "526SUDeQZOCbXYj7Jb2Rfx", "prefabRootNode": { "__id__": 1 }, @@ -1142,131 +1139,6 @@ "propertyPath": [ "_name" ], - "value": "wind" - }, - { - "__type__": "cc.TargetInfo", - "localID": [ - "733PKzwANLyJWD2ume4u5f" - ] - }, - { - "__type__": "CCPropertyOverrideInfo", - "targetInfo": { - "__id__": 70 - }, - "propertyPath": [ - "_lpos" - ], - "value": { - "__type__": "cc.Vec3", - "x": 0, - "y": 0, - "z": 0 - } - }, - { - "__type__": "CCPropertyOverrideInfo", - "targetInfo": { - "__id__": 70 - }, - "propertyPath": [ - "_lrot" - ], - "value": { - "__type__": "cc.Quat", - "x": 0, - "y": 0, - "z": 0, - "w": 1 - } - }, - { - "__type__": "CCPropertyOverrideInfo", - "targetInfo": { - "__id__": 70 - }, - "propertyPath": [ - "_euler" - ], - "value": { - "__type__": "cc.Vec3", - "x": 0, - "y": 0, - "z": 0 - } - }, - { - "__type__": "CCPropertyOverrideInfo", - "targetInfo": { - "__id__": 70 - }, - "propertyPath": [ - "_active" - ], - "value": false - }, - { - "__type__": "cc.Node", - "_objFlags": 0, - "_parent": { - "__id__": 1 - }, - "_prefab": { - "__id__": 76 - }, - "__editorExtras__": {} - }, - { - "__type__": "cc.PrefabInfo", - "root": { - "__id__": 75 - }, - "asset": { - "__uuid__": "3899fa6a-77a8-4809-b34b-64e0daa5674c", - "__expectedType__": "cc.Prefab" - }, - "fileId": "65v9q/98dMjafRlb094Ctr", - "instance": { - "__id__": 77 - }, - "targetOverrides": null - }, - { - "__type__": "cc.PrefabInstance", - "fileId": "526SUDeQZOCbXYj7Jb2Rfx", - "prefabRootNode": { - "__id__": 1 - }, - "mountedChildren": [], - "mountedComponents": [], - "propertyOverrides": [ - { - "__id__": 78 - }, - { - "__id__": 80 - }, - { - "__id__": 81 - }, - { - "__id__": 82 - }, - { - "__id__": 83 - } - ], - "removedComponents": [] - }, - { - "__type__": "CCPropertyOverrideInfo", - "targetInfo": { - "__id__": 79 - }, - "propertyPath": [ - "_name" - ], "value": "buff" }, { @@ -1278,7 +1150,7 @@ { "__type__": "CCPropertyOverrideInfo", "targetInfo": { - "__id__": 79 + "__id__": 70 }, "propertyPath": [ "_lpos" @@ -1293,7 +1165,7 @@ { "__type__": "CCPropertyOverrideInfo", "targetInfo": { - "__id__": 79 + "__id__": 70 }, "propertyPath": [ "_lrot" @@ -1309,7 +1181,7 @@ { "__type__": "CCPropertyOverrideInfo", "targetInfo": { - "__id__": 79 + "__id__": 70 }, "propertyPath": [ "_euler" @@ -1324,7 +1196,7 @@ { "__type__": "CCPropertyOverrideInfo", "targetInfo": { - "__id__": 79 + "__id__": 70 }, "propertyPath": [ "_active" @@ -1341,7 +1213,7 @@ }, "_enabled": true, "__prefab": { - "__id__": 85 + "__id__": 76 }, "_contentSize": { "__type__": "cc.Size", @@ -1369,10 +1241,10 @@ }, "_enabled": true, "__prefab": { - "__id__": 87 + "__id__": 78 }, "anm": { - "__id__": 22 + "__id__": 13 }, "_id": "" }, @@ -1390,7 +1262,7 @@ }, "_enabled": true, "__prefab": { - "__id__": 89 + "__id__": 80 }, "_id": "" }, @@ -1408,7 +1280,7 @@ }, "_enabled": true, "__prefab": { - "__id__": 91 + "__id__": 82 }, "_id": "" }, @@ -1428,9 +1300,6 @@ "instance": null, "targetOverrides": null, "nestedPrefabInstanceRoots": [ - { - "__id__": 75 - }, { "__id__": 66 }, @@ -1441,13 +1310,13 @@ "__id__": 48 }, { - "__id__": 37 + "__id__": 39 }, { - "__id__": 25 + "__id__": 28 }, { - "__id__": 8 + "__id__": 16 } ] } diff --git a/assets/resources/game/skills/max.prefab b/assets/resources/game/skills/max.prefab index 36a18077..192cdf6f 100644 --- a/assets/resources/game/skills/max.prefab +++ b/assets/resources/game/skills/max.prefab @@ -26,10 +26,13 @@ "_components": [ { "__id__": 8 + }, + { + "__id__": 10 } ], "_prefab": { - "__id__": 10 + "__id__": 12 }, "_lpos": { "__type__": "cc.Vec3", @@ -224,6 +227,24 @@ "__type__": "cc.CompPrefabInfo", "fileId": "77z0467LpD9JrxJ4yirYik" }, + { + "__type__": "f140bFcc0VDZIGOeHAB+xwZ", + "_name": "", + "_objFlags": 0, + "__editorExtras__": {}, + "node": { + "__id__": 1 + }, + "_enabled": true, + "__prefab": { + "__id__": 11 + }, + "_id": "" + }, + { + "__type__": "cc.CompPrefabInfo", + "fileId": "18p/ymMfpOAYzUdQFqBjOm" + }, { "__type__": "cc.PrefabInfo", "root": { diff --git a/assets/resources/game/skills/buff_do.prefab b/assets/resources/game/skills/max_blue.prefab similarity index 99% rename from assets/resources/game/skills/buff_do.prefab rename to assets/resources/game/skills/max_blue.prefab index 6c4e83e9..9e5950a9 100644 --- a/assets/resources/game/skills/buff_do.prefab +++ b/assets/resources/game/skills/max_blue.prefab @@ -1,7 +1,7 @@ [ { "__type__": "cc.Prefab", - "_name": "buff_do", + "_name": "max_blue", "_objFlags": 0, "__editorExtras__": {}, "_native": "", @@ -13,7 +13,7 @@ }, { "__type__": "cc.Node", - "_name": "buff_do", + "_name": "max_blue", "_objFlags": 0, "__editorExtras__": {}, "_parent": null, diff --git a/assets/resources/game/skills/buff_do.prefab.meta b/assets/resources/game/skills/max_blue.prefab.meta similarity index 85% rename from assets/resources/game/skills/buff_do.prefab.meta rename to assets/resources/game/skills/max_blue.prefab.meta index 04e654ef..9510f97d 100644 --- a/assets/resources/game/skills/buff_do.prefab.meta +++ b/assets/resources/game/skills/max_blue.prefab.meta @@ -8,6 +8,6 @@ ], "subMetas": {}, "userData": { - "syncNodeName": "buff_do" + "syncNodeName": "max_blue" } } diff --git a/assets/resources/game/skills/buff_do2.prefab b/assets/resources/game/skills/max_red.prefab similarity index 99% rename from assets/resources/game/skills/buff_do2.prefab rename to assets/resources/game/skills/max_red.prefab index 7d12fb02..b4ffdc9f 100644 --- a/assets/resources/game/skills/buff_do2.prefab +++ b/assets/resources/game/skills/max_red.prefab @@ -1,7 +1,7 @@ [ { "__type__": "cc.Prefab", - "_name": "buff_do2", + "_name": "max_red", "_objFlags": 0, "__editorExtras__": {}, "_native": "", @@ -13,7 +13,7 @@ }, { "__type__": "cc.Node", - "_name": "buff_do2", + "_name": "max_red", "_objFlags": 0, "__editorExtras__": {}, "_parent": null, diff --git a/assets/resources/game/skills/buff_do2.prefab.meta b/assets/resources/game/skills/max_red.prefab.meta similarity index 85% rename from assets/resources/game/skills/buff_do2.prefab.meta rename to assets/resources/game/skills/max_red.prefab.meta index 80a744ee..1eb91626 100644 --- a/assets/resources/game/skills/buff_do2.prefab.meta +++ b/assets/resources/game/skills/max_red.prefab.meta @@ -8,6 +8,6 @@ ], "subMetas": {}, "userData": { - "syncNodeName": "buff_do2" + "syncNodeName": "max_red" } } diff --git a/assets/scene.scene b/assets/scene.scene new file mode 100644 index 00000000..3bcfe51c --- /dev/null +++ b/assets/scene.scene @@ -0,0 +1,449 @@ +[ + { + "__type__": "cc.SceneAsset", + "_name": "scene", + "_objFlags": 0, + "__editorExtras__": {}, + "_native": "", + "scene": { + "__id__": 1 + } + }, + { + "__type__": "cc.Scene", + "_name": "scene-2d", + "_objFlags": 0, + "__editorExtras__": {}, + "_parent": null, + "_children": [ + { + "__id__": 2 + } + ], + "_active": true, + "_components": [], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_mobility": 0, + "_layer": 1073741824, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "autoReleaseAssets": false, + "_globals": { + "__id__": 8 + }, + "_id": "ec2587ed-e88a-4f08-a890-a4af6075a75e" + }, + { + "__type__": "cc.Node", + "_name": "Canvas", + "_objFlags": 0, + "__editorExtras__": {}, + "_parent": { + "__id__": 1 + }, + "_children": [ + { + "__id__": 3 + } + ], + "_active": true, + "_components": [ + { + "__id__": 5 + }, + { + "__id__": 6 + }, + { + "__id__": 7 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": 360, + "y": 640, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_mobility": 0, + "_layer": 33554432, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "beI88Z2HpFELqR4T5EMHpg" + }, + { + "__type__": "cc.Node", + "_name": "Camera", + "_objFlags": 0, + "__editorExtras__": {}, + "_parent": { + "__id__": 2 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 4 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 1000 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_mobility": 0, + "_layer": 1073741824, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "ebFwiq8gBFaYpqYbdoDODe" + }, + { + "__type__": "cc.Camera", + "_name": "", + "_objFlags": 0, + "__editorExtras__": {}, + "node": { + "__id__": 3 + }, + "_enabled": true, + "__prefab": null, + "_projection": 0, + "_priority": 0, + "_fov": 45, + "_fovAxis": 0, + "_orthoHeight": 640, + "_near": 0, + "_far": 1000, + "_color": { + "__type__": "cc.Color", + "r": 0, + "g": 0, + "b": 0, + "a": 255 + }, + "_depth": 1, + "_stencil": 0, + "_clearFlags": 7, + "_rect": { + "__type__": "cc.Rect", + "x": 0, + "y": 0, + "width": 1, + "height": 1 + }, + "_aperture": 19, + "_shutter": 7, + "_iso": 0, + "_screenScale": 1, + "_visibility": 1108344832, + "_targetTexture": null, + "_postProcess": null, + "_usePostProcess": false, + "_cameraType": -1, + "_trackingType": 0, + "_id": "63WIch3o5BEYRlXzTT0oWc" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "__editorExtras__": {}, + "node": { + "__id__": 2 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 720, + "height": 1280 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "d6rUX5yfhMlKoWX2bSbawx" + }, + { + "__type__": "cc.Canvas", + "_name": "", + "_objFlags": 0, + "__editorExtras__": {}, + "node": { + "__id__": 2 + }, + "_enabled": true, + "__prefab": null, + "_cameraComponent": { + "__id__": 4 + }, + "_alignCanvasWithScreen": true, + "_id": "12O/ljcVlEqLmVm3U2gEOQ" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "__editorExtras__": {}, + "node": { + "__id__": 2 + }, + "_enabled": true, + "__prefab": null, + "_alignFlags": 45, + "_target": null, + "_left": 0, + "_right": 0, + "_top": 5.684341886080802e-14, + "_bottom": 5.684341886080802e-14, + "_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": "c5V1EV8IpMtrIvY1OE9t2u" + }, + { + "__type__": "cc.SceneGlobals", + "ambient": { + "__id__": 9 + }, + "shadows": { + "__id__": 10 + }, + "_skybox": { + "__id__": 11 + }, + "fog": { + "__id__": 12 + }, + "octree": { + "__id__": 13 + }, + "skin": { + "__id__": 14 + }, + "lightProbeInfo": { + "__id__": 15 + }, + "postSettings": { + "__id__": 16 + }, + "bakedWithStationaryMainLight": false, + "bakedWithHighpLightmap": false + }, + { + "__type__": "cc.AmbientInfo", + "_skyColorHDR": { + "__type__": "cc.Vec4", + "x": 0, + "y": 0, + "z": 0, + "w": 0.520833125 + }, + "_skyColor": { + "__type__": "cc.Vec4", + "x": 0, + "y": 0, + "z": 0, + "w": 0.520833125 + }, + "_skyIllumHDR": 20000, + "_skyIllum": 20000, + "_groundAlbedoHDR": { + "__type__": "cc.Vec4", + "x": 0, + "y": 0, + "z": 0, + "w": 0 + }, + "_groundAlbedo": { + "__type__": "cc.Vec4", + "x": 0, + "y": 0, + "z": 0, + "w": 0 + }, + "_skyColorLDR": { + "__type__": "cc.Vec4", + "x": 0.2, + "y": 0.5, + "z": 0.8, + "w": 1 + }, + "_skyIllumLDR": 20000, + "_groundAlbedoLDR": { + "__type__": "cc.Vec4", + "x": 0.2, + "y": 0.2, + "z": 0.2, + "w": 1 + } + }, + { + "__type__": "cc.ShadowsInfo", + "_enabled": false, + "_type": 0, + "_normal": { + "__type__": "cc.Vec3", + "x": 0, + "y": 1, + "z": 0 + }, + "_distance": 0, + "_planeBias": 1, + "_shadowColor": { + "__type__": "cc.Color", + "r": 76, + "g": 76, + "b": 76, + "a": 255 + }, + "_maxReceived": 4, + "_size": { + "__type__": "cc.Vec2", + "x": 512, + "y": 512 + } + }, + { + "__type__": "cc.SkyboxInfo", + "_envLightingType": 0, + "_envmapHDR": null, + "_envmap": null, + "_envmapLDR": null, + "_diffuseMapHDR": null, + "_diffuseMapLDR": null, + "_enabled": false, + "_useHDR": true, + "_editableMaterial": null, + "_reflectionHDR": null, + "_reflectionLDR": null, + "_rotationAngle": 0 + }, + { + "__type__": "cc.FogInfo", + "_type": 0, + "_fogColor": { + "__type__": "cc.Color", + "r": 200, + "g": 200, + "b": 200, + "a": 255 + }, + "_enabled": false, + "_fogDensity": 0.3, + "_fogStart": 0.5, + "_fogEnd": 300, + "_fogAtten": 5, + "_fogTop": 1.5, + "_fogRange": 1.2, + "_accurate": false + }, + { + "__type__": "cc.OctreeInfo", + "_enabled": false, + "_minPos": { + "__type__": "cc.Vec3", + "x": -1024, + "y": -1024, + "z": -1024 + }, + "_maxPos": { + "__type__": "cc.Vec3", + "x": 1024, + "y": 1024, + "z": 1024 + }, + "_depth": 8 + }, + { + "__type__": "cc.SkinInfo", + "_enabled": false, + "_blurRadius": 0.01, + "_sssIntensity": 3 + }, + { + "__type__": "cc.LightProbeInfo", + "_giScale": 1, + "_giSamples": 1024, + "_bounces": 2, + "_reduceRinging": 0, + "_showProbe": true, + "_showWireframe": true, + "_showConvex": false, + "_data": null, + "_lightProbeSphereVolume": 1 + }, + { + "__type__": "cc.PostSettingsInfo", + "_toneMappingType": 0 + } +] \ No newline at end of file diff --git a/assets/scene.scene.meta b/assets/scene.scene.meta new file mode 100644 index 00000000..85381105 --- /dev/null +++ b/assets/scene.scene.meta @@ -0,0 +1,11 @@ +{ + "ver": "1.1.50", + "importer": "scene", + "imported": true, + "uuid": "ec2587ed-e88a-4f08-a890-a4af6075a75e", + "files": [ + ".json" + ], + "subMetas": {}, + "userData": {} +} diff --git a/assets/script/game/common/config/SkillSet.ts b/assets/script/game/common/config/SkillSet.ts index ab19b57d..d79b3a85 100644 --- a/assets/script/game/common/config/SkillSet.ts +++ b/assets/script/game/common/config/SkillSet.ts @@ -99,38 +99,37 @@ export const MSlist={ * } */ export const SkillSet = { - 6001:{uuid:6001,path:"6001",TargetType:1,TargetGroup:3,CdType:CdType.HeroCD,fname:"",flash:false,with:50,debuff:0,depb:0,debtime:0,derate:0,in:0.8,count:1,def:0,apup:0,ap:100,mhp:0,hp:0,cd:10,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"凛冬之触",sp_name:"ball_blue",info:"向最前方敌人释放寒冰弹,造成100%攻击的伤害"}, - 6002:{uuid:6002,path:"6002",TargetType:1,TargetGroup:3,CdType:CdType.HeroCD,fname:"",flash:false,with:50,debuff:0,depb:0,debtime:0,derate:0,in:0.8,count:1,def:0,apup:0,ap:100,mhp:0,hp:0,cd:10,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"烈焰之怒",sp_name:"ball_red",info:"向最前方敌人释放火焰弹,造成100%攻击的伤害"}, - 6003:{uuid:6003,path:"6003",TargetType:1,TargetGroup:3,CdType:CdType.HeroCD,fname:"",flash:false,with:50,debuff:0,depb:0,debtime:0,derate:0,in:0.8,count:1,def:0,apup:0,ap:100,mhp:0,hp:0,cd:10,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"奥术冲击",sp_name:"ball_green",info:"向最前方敌人释放魔法弹,造成100%攻击的伤害"}, - 6004:{uuid:6004,path:"6004",TargetType:1,TargetGroup:3,CdType:CdType.HeroCD,fname:"",flash:false,with:50,debuff:0,depb:0,debtime:0,derate:0,in:0.8,count:1,def:0,apup:0,ap:100,mhp:0,hp:0,cd:10,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"神圣裁决",sp_name:"ball_yellow",info:"向最前方敌人释放圣光弹,造成100%攻击的伤害"}, - 6005:{uuid:6005,path:"6005",TargetType:1,TargetGroup:3,CdType:CdType.HeroCD,fname:"",flash:false,with:50,debuff:0,depb:0,debtime:0,derate:0,in:0.8,count:1,def:0,apup:0,ap:50,mhp:0,hp:0,cd:10,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"破空斩击",sp_name:"patk",info:"攻击前方直线100码内的敌人造成50%伤害"}, - 6006:{uuid:6006,path:"6006",TargetType:1,TargetGroup:3,CdType:CdType.HeroCD,fname:"",flash:false,with:50,debuff:0,depb:0,debtime:0,derate:0,in:0.8,count:1,def:0,apup:0,ap:100,mhp:0,hp:0,cd:10,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"穿心箭矢",sp_name:"arrow",info:"向最前方敌人释放箭矢,造成100%攻击的伤害"}, - 6007:{uuid:6007,path:"6007",TargetType:1,TargetGroup:3,CdType:CdType.HeroCD,fname:"",flash:false,with:50,debuff:0,depb:0,debtime:0,derate:0,in:0.8,count:1,def:0,apup:0,ap:100,mhp:0,hp:0,cd:10,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"铁斧打击",sp_name:"mon_ft",info:"向最前方敌人扔出铁斧,造成100%攻击的伤害"}, - 6008:{uuid:6008,path:"6008",TargetType:1,TargetGroup:3,CdType:CdType.HeroCD,fname:"",flash:false,with:50,debuff:0,depb:0,debtime:0,derate:0,in:0.8,count:1,def:0,apup:0,ap:100,mhp:0,hp:0,cd:10,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"木棍打击",sp_name:"mon_ly",info:"向最前方敌人扔出木棍,造成100%攻击的伤害"}, - 6009:{uuid:6009,path:"6009",TargetType:1,TargetGroup:3,CdType:CdType.HeroCD,fname:"",flash:false,with:50,debuff:0,depb:0,debtime:0,derate:0,in:0.8,count:1,def:0,apup:0,ap:100,mhp:0,hp:0,cd:10,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"飞刀打击",sp_name:"mon_xd",info:"向最前方敌人扔出飞刀,造成100%攻击的伤害"}, - 6010:{uuid:6010,path:"6010",TargetType:1,TargetGroup:3,CdType:CdType.HeroCD,fname:"",flash:false,with:50,debuff:0,depb:0,debtime:0,derate:0,in:0.8,count:1,def:0,apup:0,ap:100,mhp:0,hp:0,cd:10,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"石斧打击",sp_name:"mon_sf",info:"向最前方敌人扔出石斧,造成100%攻击的伤害"}, - 6011:{uuid:6011,path:"6011",TargetType:1,TargetGroup:3,CdType:CdType.HeroPower,fname:"",flash:false,with:50,debuff:0,depb:0,debtime:0,derate:0,in:3,count:1,def:0,apup:0,ap:100,mhp:0,hp:0,cd:10,buff_cd:0.5,hited:0.3,shield:0,speed:100,sonsk:0,hero:0,name:"烈火呼吸",sp_name:"firequan",info:"召唤烈焰攻击前方敌人,造成200%攻击的伤害,烈焰维持3秒"}, - 6012:{uuid:6012,path:"6012",TargetType:1,TargetGroup:3,CdType:CdType.HeroPower,fname:"",flash:false,with:50,debuff:2,depb:20,debtime:2,derate:100,in:1,count:1,def:0,apup:0,ap:300,mhp:0,hp:0,cd:10,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"大火球",sp_name:"fire",info:"召唤大火球攻击前方所有敌人,造成300%攻击的伤害,有一定几率施加灼烧"}, - 6013:{uuid:6013,path:"6013",TargetType:1,TargetGroup:3,CdType:CdType.HeroPower,fname:"",flash:false,with:50,debuff:0,depb:0,debtime:0,derate:0,in:10,count:1,def:0,apup:0,ap:50,mhp:0,hp:0,cd:10,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"火墙",sp_name:"firewall",info:"在最前方敌人位置,召唤一堵火墙,持续10秒,每秒造成50%攻击伤害"}, - 6014:{uuid:6014,path:"6014",TargetType:1,TargetGroup:3,CdType:CdType.HeroPower,fname:"",flash:false,with:50,debuff:1,depb:20,debtime:2,derate:0,in:1,count:1,def:0,apup:0,ap:200,mhp:0,hp:0,cd:10,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"寒冰箭",sp_name:"arrow_blue",info:"召唤大火球攻击前方所有敌人,造成200%攻击的伤害,20%几率冰冻敌人"}, - 6015:{uuid:6015,path:"6015",TargetType:1,TargetGroup:3,CdType:CdType.HeroPower,fname:"",flash:false,with:50,debuff:3,depb:20,debtime:2,derate:0,in:1,count:1,def:0,apup:0,ap:200,mhp:0,hp:0,cd:10,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"烈焰射击",sp_name:"arrow_yellow",info:"召唤大火球攻击前方所有敌人,造成200%攻击的伤害,20%几率眩晕敌人"}, - 6016:{uuid:6016,path:"6016",TargetType:1,TargetGroup:3,CdType:CdType.HeroPower,fname:"",flash:false,with:50,debuff:8,depb:50,debtime:1,derate:0,in:1,count:1,def:0,apup:0,ap:200,mhp:0,hp:0,cd:10,buff_cd:1,hited:0.3,shield:0,speed:300,sonsk:0,hero:0,name:"龙卷风",sp_name:"bwind",info:"召唤大火球攻击前方所有敌人,造成200%攻击的伤害,50%几率击退敌人"}, - 6017:{uuid:6017,path:"6017",TargetType:1,TargetGroup:2,CdType:CdType.HeroPower,fname:"buff_do",flash:true,with:50,debuff:0,depb:0,debtime:0,derate:0,in:5,count:1,def:0,apup:0,ap:100,mhp:0,hp:3,cd:10,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"生命之泉",sp_name:"heath",info:"5秒持续为全体友方恢复施法者最大生命值15%的生命"}, - 6018:{uuid:6018,path:"6018",TargetType:1,TargetGroup:0,CdType:CdType.HeroPower,fname:"",flash:false,with:50,debuff:0,depb:0,debtime:0,derate:0,in:0.8,count:1,def:0,apup:0,ap:100,mhp:0,hp:0,cd:10,buff_cd:1,hited:0.3,shield:30,speed:350,sonsk:0,hero:0,name:"神圣护盾",sp_name:"shield",info:"召唤圣盾保护自己,可以抵御3次攻击"}, - 6019:{uuid:6019,path:"6019",TargetType:1,TargetGroup:2,CdType:CdType.HeroPower,fname:"buff_do2",flash:true,with:50,debuff:0,depb:0,debtime:0,derate:0,in:1,count:1,def:0,apup:20,ap:100,mhp:0,hp:0,cd:10,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"战争咆哮",sp_name:"apup",info:"为全体友方增加施法者攻击力20%的攻击"}, - 6021:{uuid:6021,path:"6021",TargetType:2,TargetGroup:3,CdType:CdType.HeroPower,fname:"buff_do",flash:true,with:50,debuff:0,depb:0,debtime:0,derate:0,in:1,count:1,def:0,apup:0,ap:600,mhp:0,hp:0,cd:10,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"死亡射击",sp_name:"shoot2",info:"攻击最后方的敌人,造成600%攻击的伤害"}, - 6022:{uuid:6022,path:"6022",TargetType:1,TargetGroup:3,CdType:CdType.HeroPower,fname:"",flash:false,with:50,debuff:1,depb:50,debtime:2,derate:0,in:1,count:1,def:0,apup:0,ap:300,mhp:0,hp:0,cd:10,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"寒霜之矛",sp_name:"icez",info:"在最前方敌人位置,召唤冰刺攻击敌人,造成200%攻击的伤害,20%几率冰冻敌人"}, - 6023:{uuid:6023,path:"6023",TargetType:1,TargetGroup:3,CdType:CdType.HeroPower,fname:"",flash:false,with:50,debuff:8,depb:50,debtime:1,derate:0,in:1,count:1,def:0,apup:0,ap:400,mhp:0,hp:0,cd:10,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"冰墙",sp_name:"icet",info:"在最前方敌人位置,召唤冰墙攻击敌人,造成200%攻击的伤害,50%几率击退敌人"}, - 6024:{uuid:6024,path:"6024",TargetType:1,TargetGroup:3,CdType:CdType.HeroPower,fname:"",flash:false,with:50,debuff:8,depb:50,debtime:1,derate:0,in:2,count:1,def:0,apup:0,ap:80,mhp:0,hp:0,cd:10,buff_cd:0.5,hited:0.3,shield:0,speed:100,sonsk:0,hero:0,name:"旋风斩",sp_name:"fwind",info:"旋转武器对周围的敌人造成80%攻击,2秒内旋转4次"}, - 6025:{uuid:6025,path:"6025",TargetType:1,TargetGroup:3,CdType:CdType.HeroPower,fname:"",flash:false,with:50,debuff:8,depb:50,debtime:1,derate:0,in:3,count:1,def:0,apup:0,ap:500,mhp:0,hp:0,cd:10,buff_cd:1,hited:0.3,shield:0,speed:500,sonsk:0,hero:0,name:"火焰漩涡",sp_name:"fireball",info:"召唤一个能量球射向前方敌人,对遇到的第一个敌人造成500%攻击的伤害,并击退"}, - 6026:{uuid:6026,path:"6026",TargetType:1,TargetGroup:3,CdType:CdType.HeroPower,fname:"",flash:false,with:50,debuff:8,depb:50,debtime:2,derate:0,in:3,count:1,def:0,apup:0,ap:100,mhp:0,hp:0,cd:10,buff_cd:1,hited:0.3,shield:0,speed:500,sonsk:0,hero:0,name:"潮汐",sp_name:"watert",info:"在最前方敌人位置,召唤水柱攻击敌人,每秒造成100%攻击的伤害,50%几率击退敌人"}, - 6027:{uuid:6027,path:"6027",TargetType:1,TargetGroup:3,CdType:CdType.HeroPower,fname:"",flash:false,with:50,debuff:8,depb:100,debtime:2,derate:0,in:3,count:1,def:0,apup:2,ap:400,mhp:0,hp:0,cd:10,buff_cd:1,hited:0.3,shield:0,speed:500,sonsk:0,hero:0,name:"国王霸气",sp_name:"kingba",info:"释放霸气攻击周围敌人,造成400%伤害,并100%几率击退敌人"}, - 6028:{uuid:6028,path:"6028",TargetType:1,TargetGroup:2,CdType:CdType.HeroPower,fname:"buff_do",flash:true,with:50,debuff:0,depb:0,debtime:0,derate:0,in:2,count:1,def:0,apup:0,ap:100,mhp:0,hp:10,cd:10,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"自然庇佑",sp_name:"heath2",info:"为全体友方恢复施法者最大生命值10%的生命,和抵御1次攻击的护盾"}, - 6029:{uuid:6029,path:"6029",TargetType:1,TargetGroup:3,CdType:CdType.HeroPower,fname:"",flash:false,with:50,debuff:8,depb:50,debtime:2,derate:0,in:3,count:1,def:0,apup:0,ap:500,mhp:0,hp:0,cd:10,buff_cd:1,hited:0.3,shield:0,speed:500,sonsk:0,hero:0,name:"陨石术",sp_name:"fireys",info:"在最前方敌人位置,召唤陨石攻击敌人,造成500%攻击的伤害"}, - 6030:{uuid:6030,path:"6030",TargetType:1,TargetGroup:3,CdType:CdType.HeroPower,fname:"",flash:false,with:50,debuff:0,depb:0,debtime:0,derate:0,in:3,count:1,def:0,apup:0,ap:100,mhp:0,hp:0,cd:10,buff_cd:0.5,hited:0.3,shield:0,speed:100,sonsk:0,hero:0,name:"闪电呼吸",sp_name:"dianquan",info:"召唤闪电攻击前方敌人,造成200%攻击的伤害,烈焰维持3秒"}, - 6031:{uuid:6031,path:"6031",TargetType:1,TargetGroup:0,CdType:CdType.HeroPower,fname:"buff_do",flash:true,with:50,debuff:0,depb:0,debtime:0,derate:0,in:2,count:1,def:20,apup:0,ap:70,mhp:0,hp:70,cd:10,buff_cd:1,hited:0.3,shield:0,speed:120,sonsk:0,hero:5211,name:"召唤仆从",sp_name:"zhaohuan",info:"召唤一个与施法者等级相同的骷髅战士为我方而战"}, - 6032:{uuid:6032,path:"6032",TargetType:1,TargetGroup:0,CdType:CdType.HeroPower,fname:"",flash:false,with:50,debuff:0,depb:0,debtime:0,derate:0,in:2,count:1,def:0,apup:0,ap:100,mhp:0,hp:5,cd:10,buff_cd:1,hited:0.3,shield:0,speed:120,sonsk:0,hero:0,name:"自愈",sp_name:"heath_small",info:"主动:自己回复自身5%最大生命值的生命"}, - 6033:{uuid:6033,path:"6033",TargetType:1,TargetGroup:3,CdType:CdType.HeroPower,fname:"",flash:false,with:50,debuff:4,depb:100,debtime:1,derate:20,in:1,count:1,def:0,apup:0,ap:500,mhp:0,hp:0,cd:10,buff_cd:1,hited:0.3,shield:0,speed:500,sonsk:6035,hero:0,name:"震地裂击",sp_name:"cuida",info:"捶爆前方目标,造成300%攻击的伤害,震慑敌人,本局内全部敌方降低对方10%攻击力"}, - 6034:{uuid:6034,path:"6034",TargetType:1,TargetGroup:3,CdType:CdType.HeroPower,fname:"",flash:false,with:50,debuff:4,depb:100,debtime:1,derate:20,in:1,count:1,def:0,apup:0,ap:80,mhp:0,hp:0,cd:10,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"风暴之矢",sp_name:"bingyu",info:"射出能量暴风箭攻击最前方范围敌人,每波造成80%攻击的伤害"}, - 6035:{uuid:6035,path:"6035",TargetType:1,TargetGroup:3,CdType:CdType.HeroPower,fname:"",flash:false,with:50,debuff:0,depb:0,debtime:0,derate:0,in:1,count:1,def:0,apup:0,ap:500,mhp:0,hp:0,cd:10,buff_cd:1,hited:0.3,shield:0,speed:500,sonsk:0,hero:0,name:"召唤仆从",sp_name:"zhaohuan",info:"召唤一个与施法者等级相同的骷髅战士为我方而战"} + 6001:{uuid:6001,path:"6001",TargetType:1,TargetGroup:3,act:"atk",CdType:1,fname:"max",flash:false,with:50,debuff:0,depb:0,debtime:0,derate:0,in:0.8,count:1,def:0,apup:0,ap:100,mhp:0,hp:0,cd:5,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"凛冬之触",sp_name:"ball_blue",info:"向最前方敌人释放寒冰弹,造成100%攻击的伤害"}, + 6002:{uuid:6002,path:"6002",TargetType:1,TargetGroup:3,act:"atk",CdType:1,fname:"max",flash:false,with:50,debuff:0,depb:0,debtime:0,derate:0,in:0.8,count:1,def:0,apup:0,ap:100,mhp:0,hp:0,cd:5,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"烈焰之怒",sp_name:"ball_red",info:"向最前方敌人释放火焰弹,造成100%攻击的伤害"}, + 6003:{uuid:6003,path:"6003",TargetType:1,TargetGroup:3,act:"atk",CdType:1,fname:"max",flash:false,with:50,debuff:0,depb:0,debtime:0,derate:0,in:0.8,count:1,def:0,apup:0,ap:100,mhp:0,hp:0,cd:5,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"奥术冲击",sp_name:"ball_green",info:"向最前方敌人释放魔法弹,造成100%攻击的伤害"}, + 6004:{uuid:6004,path:"6004",TargetType:1,TargetGroup:3,act:"atk",CdType:1,fname:"max",flash:false,with:50,debuff:0,depb:0,debtime:0,derate:0,in:0.8,count:1,def:0,apup:0,ap:100,mhp:0,hp:0,cd:5,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"神圣裁决",sp_name:"ball_yellow",info:"向最前方敌人释放圣光弹,造成100%攻击的伤害"}, + 6005:{uuid:6005,path:"6005",TargetType:1,TargetGroup:3,act:"atk",CdType:1,fname:"max",flash:false,with:50,debuff:0,depb:0,debtime:0,derate:0,in:0.8,count:1,def:0,apup:0,ap:50,mhp:0,hp:0,cd:5,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"破空斩击",sp_name:"patk",info:"攻击前方直线100码内的敌人造成50%伤害"}, + 6006:{uuid:6006,path:"6006",TargetType:1,TargetGroup:3,act:"atk",CdType:1,fname:"max",flash:false,with:50,debuff:0,depb:0,debtime:0,derate:0,in:0.8,count:1,def:0,apup:0,ap:100,mhp:0,hp:0,cd:5,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"穿心箭矢",sp_name:"arrow",info:"向最前方敌人释放箭矢,造成100%攻击的伤害"}, + 6007:{uuid:6007,path:"6007",TargetType:1,TargetGroup:3,act:"atk",CdType:1,fname:"max",flash:false,with:50,debuff:0,depb:0,debtime:0,derate:0,in:0.8,count:1,def:0,apup:0,ap:100,mhp:0,hp:0,cd:5,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"铁斧打击",sp_name:"mon_ft",info:"向最前方敌人扔出铁斧,造成100%攻击的伤害"}, + 6008:{uuid:6008,path:"6008",TargetType:1,TargetGroup:3,act:"atk",CdType:1,fname:"max",flash:false,with:50,debuff:0,depb:0,debtime:0,derate:0,in:0.8,count:1,def:0,apup:0,ap:100,mhp:0,hp:0,cd:5,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"木棍打击",sp_name:"mon_ly",info:"向最前方敌人扔出木棍,造成100%攻击的伤害"}, + 6009:{uuid:6009,path:"6009",TargetType:1,TargetGroup:3,act:"atk",CdType:1,fname:"max",flash:false,with:50,debuff:0,depb:0,debtime:0,derate:0,in:0.8,count:1,def:0,apup:0,ap:100,mhp:0,hp:0,cd:5,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"飞刀打击",sp_name:"mon_xd",info:"向最前方敌人扔出飞刀,造成100%攻击的伤害"}, + 6010:{uuid:6010,path:"6010",TargetType:1,TargetGroup:3,act:"atk",CdType:1,fname:"max",flash:false,with:50,debuff:0,depb:0,debtime:0,derate:0,in:0.8,count:1,def:0,apup:0,ap:100,mhp:0,hp:0,cd:5,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"石斧打击",sp_name:"mon_sf",info:"向最前方敌人扔出石斧,造成100%攻击的伤害"}, + 6011:{uuid:6011,path:"6011",TargetType:1,TargetGroup:3,act:"max",CdType:2,fname:"max",flash:false,with:50,debuff:0,depb:0,debtime:0,derate:0,in:3,count:1,def:0,apup:0,ap:100,mhp:0,hp:0,cd:5,buff_cd:0.5,hited:0.3,shield:0,speed:100,sonsk:0,hero:0,name:"烈火呼吸",sp_name:"firequan",info:"召唤烈焰攻击前方敌人,造成200%攻击的伤害,烈焰维持3秒"}, + 6012:{uuid:6012,path:"6012",TargetType:1,TargetGroup:3,act:"max",CdType:2,fname:"max",flash:false,with:50,debuff:2,depb:20,debtime:2,derate:100,in:1,count:1,def:0,apup:0,ap:300,mhp:0,hp:0,cd:5,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"大火球",sp_name:"fire",info:"召唤大火球攻击前方所有敌人,造成300%攻击的伤害,有一定几率施加灼烧"}, + 6013:{uuid:6013,path:"6013",TargetType:1,TargetGroup:3,act:"max",CdType:2,fname:"max",flash:false,with:50,debuff:0,depb:0,debtime:0,derate:0,in:10,count:1,def:0,apup:0,ap:50,mhp:0,hp:0,cd:5,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"火墙",sp_name:"firewall",info:"在最前方敌人位置,召唤一堵火墙,持续10秒,每秒造成50%攻击伤害"}, + 6014:{uuid:6014,path:"6014",TargetType:1,TargetGroup:3,act:"max",CdType:2,fname:"max",flash:false,with:50,debuff:1,depb:20,debtime:2,derate:0,in:1,count:1,def:0,apup:0,ap:200,mhp:0,hp:0,cd:5,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"寒冰箭",sp_name:"arrow_blue",info:"召唤大火球攻击前方所有敌人,造成200%攻击的伤害,20%几率冰冻敌人"}, + 6015:{uuid:6015,path:"6015",TargetType:1,TargetGroup:3,act:"max",CdType:2,fname:"max",flash:false,with:50,debuff:3,depb:20,debtime:2,derate:0,in:1,count:1,def:0,apup:0,ap:200,mhp:0,hp:0,cd:5,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"烈焰射击",sp_name:"arrow_yellow",info:"召唤大火球攻击前方所有敌人,造成200%攻击的伤害,20%几率眩晕敌人"}, + 6016:{uuid:6016,path:"6016",TargetType:1,TargetGroup:3,act:"max",CdType:2,fname:"max",flash:false,with:50,debuff:8,depb:50,debtime:1,derate:0,in:1,count:1,def:0,apup:0,ap:200,mhp:0,hp:0,cd:5,buff_cd:1,hited:0.3,shield:0,speed:300,sonsk:0,hero:0,name:"龙卷风",sp_name:"bwind",info:"召唤大火球攻击前方所有敌人,造成200%攻击的伤害,50%几率击退敌人"}, + 6017:{uuid:6017,path:"6017",TargetType:1,TargetGroup:2,act:"max",CdType:2,fname:"max_blue",flash:true,with:50,debuff:0,depb:0,debtime:0,derate:0,in:5,count:1,def:0,apup:0,ap:100,mhp:0,hp:3,cd:5,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"生命之泉",sp_name:"heath",info:"5秒持续为全体友方恢复施法者最大生命值15%的生命"}, + 6018:{uuid:6018,path:"6018",TargetType:1,TargetGroup:0,act:"max",CdType:2,fname:"max",flash:false,with:50,debuff:0,depb:0,debtime:0,derate:0,in:0.8,count:1,def:0,apup:0,ap:100,mhp:0,hp:0,cd:5,buff_cd:1,hited:0.3,shield:30,speed:350,sonsk:0,hero:0,name:"神圣护盾",sp_name:"shield",info:"召唤圣盾保护自己,可以抵御3次攻击"}, + 6019:{uuid:6019,path:"6019",TargetType:1,TargetGroup:2,act:"max",CdType:2,fname:"max_red",flash:true,with:50,debuff:0,depb:0,debtime:0,derate:0,in:1,count:1,def:0,apup:20,ap:100,mhp:0,hp:0,cd:5,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"战争咆哮",sp_name:"apup",info:"为全体友方增加施法者攻击力20%的攻击"}, + 6021:{uuid:6021,path:"6021",TargetType:2,TargetGroup:3,act:"max",CdType:2,fname:"max_blue",flash:true,with:50,debuff:0,depb:0,debtime:0,derate:0,in:1,count:1,def:0,apup:0,ap:600,mhp:0,hp:0,cd:5,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"死亡射击",sp_name:"shoot2",info:"攻击最后方的敌人,造成600%攻击的伤害"}, + 6022:{uuid:6022,path:"6022",TargetType:1,TargetGroup:3,act:"max",CdType:2,fname:"max",flash:false,with:50,debuff:1,depb:50,debtime:2,derate:0,in:1,count:1,def:0,apup:0,ap:300,mhp:0,hp:0,cd:5,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"寒霜之矛",sp_name:"icez",info:"在最前方敌人位置,召唤冰刺攻击敌人,造成200%攻击的伤害,20%几率冰冻敌人"}, + 6023:{uuid:6023,path:"6023",TargetType:1,TargetGroup:3,act:"max",CdType:2,fname:"max",flash:false,with:50,debuff:8,depb:50,debtime:1,derate:0,in:1,count:1,def:0,apup:0,ap:400,mhp:0,hp:0,cd:5,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"冰墙",sp_name:"icet",info:"在最前方敌人位置,召唤冰墙攻击敌人,造成200%攻击的伤害,50%几率击退敌人"}, + 6024:{uuid:6024,path:"6024",TargetType:1,TargetGroup:3,act:"max",CdType:2,fname:"max_red",flash:false,with:50,debuff:8,depb:50,debtime:1,derate:0,in:2,count:1,def:0,apup:0,ap:80,mhp:0,hp:0,cd:5,buff_cd:0.5,hited:0.3,shield:0,speed:100,sonsk:0,hero:0,name:"旋风斩",sp_name:"fwind",info:"旋转武器对周围的敌人造成80%攻击,2秒内旋转4次"}, + 6025:{uuid:6025,path:"6025",TargetType:1,TargetGroup:3,act:"max",CdType:2,fname:"max",flash:false,with:50,debuff:8,depb:50,debtime:1,derate:0,in:3,count:1,def:0,apup:0,ap:500,mhp:0,hp:0,cd:5,buff_cd:1,hited:0.3,shield:0,speed:500,sonsk:0,hero:0,name:"火焰漩涡",sp_name:"fireball",info:"召唤一个能量球射向前方敌人,对遇到的第一个敌人造成500%攻击的伤害,并击退"}, + 6026:{uuid:6026,path:"6026",TargetType:1,TargetGroup:3,act:"max",CdType:2,fname:"max",flash:false,with:50,debuff:8,depb:50,debtime:2,derate:0,in:3,count:1,def:0,apup:0,ap:100,mhp:0,hp:0,cd:5,buff_cd:1,hited:0.3,shield:0,speed:500,sonsk:0,hero:0,name:"潮汐",sp_name:"watert",info:"在最前方敌人位置,召唤水柱攻击敌人,每秒造成100%攻击的伤害,50%几率击退敌人"}, + 6027:{uuid:6027,path:"6027",TargetType:1,TargetGroup:3,act:"max",CdType:2,fname:"max",flash:false,with:50,debuff:8,depb:100,debtime:2,derate:0,in:3,count:1,def:0,apup:2,ap:400,mhp:0,hp:0,cd:5,buff_cd:1,hited:0.3,shield:0,speed:500,sonsk:0,hero:0,name:"国王霸气",sp_name:"kingba",info:"释放霸气攻击周围敌人,造成400%伤害,并100%几率击退敌人"}, + 6028:{uuid:6028,path:"6028",TargetType:1,TargetGroup:2,act:"max",CdType:2,fname:"max_blue",flash:true,with:50,debuff:0,depb:0,debtime:0,derate:0,in:2,count:1,def:0,apup:0,ap:100,mhp:0,hp:10,cd:5,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"自然庇佑",sp_name:"heath2",info:"为全体友方恢复施法者最大生命值10%的生命,和抵御1次攻击的护盾"}, + 6029:{uuid:6029,path:"6029",TargetType:1,TargetGroup:3,act:"max",CdType:2,fname:"max",flash:false,with:50,debuff:8,depb:50,debtime:2,derate:0,in:3,count:1,def:0,apup:0,ap:500,mhp:0,hp:0,cd:5,buff_cd:1,hited:0.3,shield:0,speed:500,sonsk:0,hero:0,name:"陨石术",sp_name:"fireys",info:"在最前方敌人位置,召唤陨石攻击敌人,造成500%攻击的伤害"}, + 6030:{uuid:6030,path:"6030",TargetType:1,TargetGroup:3,act:"max",CdType:2,fname:"max",flash:false,with:50,debuff:0,depb:0,debtime:0,derate:0,in:3,count:1,def:0,apup:0,ap:100,mhp:0,hp:0,cd:5,buff_cd:0.5,hited:0.3,shield:0,speed:100,sonsk:0,hero:0,name:"闪电呼吸",sp_name:"dianquan",info:"召唤闪电攻击前方敌人,造成200%攻击的伤害,烈焰维持3秒"}, + 6031:{uuid:6031,path:"6031",TargetType:1,TargetGroup:0,act:"max",CdType:2,fname:"max_blue",flash:true,with:50,debuff:0,depb:0,debtime:0,derate:0,in:2,count:1,def:20,apup:0,ap:70,mhp:0,hp:70,cd:5,buff_cd:1,hited:0.3,shield:0,speed:120,sonsk:0,hero:5211,name:"召唤仆从",sp_name:"zhaohuan",info:"召唤一个与施法者等级相同的骷髅战士为我方而战"}, + 6032:{uuid:6032,path:"6032",TargetType:1,TargetGroup:0,act:"max",CdType:2,fname:"max",flash:false,with:50,debuff:0,depb:0,debtime:0,derate:0,in:2,count:1,def:0,apup:0,ap:100,mhp:0,hp:5,cd:5,buff_cd:1,hited:0.3,shield:0,speed:120,sonsk:0,hero:0,name:"自愈",sp_name:"heath_small",info:"主动:自己回复自身5%最大生命值的生命"}, + 6033:{uuid:6033,path:"6033",TargetType:1,TargetGroup:3,act:"max",CdType:2,fname:"max",flash:false,with:50,debuff:4,depb:100,debtime:1,derate:20,in:1,count:1,def:0,apup:0,ap:500,mhp:0,hp:0,cd:5,buff_cd:1,hited:0.3,shield:0,speed:500,sonsk:6035,hero:0,name:"震地裂击",sp_name:"cuida",info:"捶爆前方目标,造成300%攻击的伤害,震慑敌人,本局内全部敌方降低对方10%攻击力"}, + 6034:{uuid:6034,path:"6034",TargetType:1,TargetGroup:3,act:"max",CdType:2,fname:"max",flash:false,with:50,debuff:4,depb:100,debtime:1,derate:20,in:1,count:1,def:0,apup:0,ap:80,mhp:0,hp:0,cd:5,buff_cd:1,hited:0.3,shield:0,speed:350,sonsk:0,hero:0,name:"风暴之矢",sp_name:"bingyu",info:"射出能量暴风箭攻击最前方范围敌人,每波造成80%攻击的伤害"} }; \ No newline at end of file diff --git a/assets/script/game/damage/DamageComp.ts b/assets/script/game/damage/DamageComp.ts new file mode 100644 index 00000000..a2c8b23a --- /dev/null +++ b/assets/script/game/damage/DamageComp.ts @@ -0,0 +1,41 @@ +import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS"; + +export enum DamageType { + Physical = 1, + Magic = 2, + True = 3 +} + +/** 伤害请求组件 */ +@ecs.register('DamageRequest') +export class DamageRequest extends ecs.Comp { + source!: ecs.Entity; // 伤害来源 + target!: ecs.Entity; // 伤害目标 + baseValue!: number; // 基础伤害值 + damageType: number = 1; // 伤害类型 + canCrit: boolean = true; // 是否可暴击 + ignoreDefense: boolean = false; // 是否忽略防御 + + reset() { + this.source = null!; + this.target = null!; + this.baseValue = 0; + this.damageType = 1; + this.canCrit = true; + this.ignoreDefense = false; + } +} + +/** 伤害结果组件 */ +@ecs.register('DamageResult') +export class DamageResult extends ecs.Comp { + finalDamage: number = 0; + isCrit: boolean = false; + isDodged: boolean = false; + + reset(finalDamage: number = 0, isCrit: boolean = false, isDodged: boolean = false) { + this.finalDamage = finalDamage; + this.isCrit = isCrit; + this.isDodged = isDodged; + } +} \ No newline at end of file diff --git a/assets/script/game/damage/DamageSystem.ts b/assets/script/game/damage/DamageSystem.ts new file mode 100644 index 00000000..d1ba2b84 --- /dev/null +++ b/assets/script/game/damage/DamageSystem.ts @@ -0,0 +1,70 @@ +import { oops } from "db://oops-framework/core/Oops"; +import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS"; +import { HeroViewComp } from "../hero/HeroViewComp"; +import { DamageRequest, DamageResult } from "./DamageComp"; + +@ecs.register('DamageSystem') +export class DamageSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate { + filter(): ecs.IMatcher { + return ecs.allOf(DamageRequest); + } + + update(entity: ecs.Entity) { + const req = entity.get(DamageRequest); + const result = this.calculateDamage(req); + this.applyDamage(req.target, result); + entity.remove(DamageRequest); + } + + private calculateDamage(req: DamageRequest): DamageResult { + const targetView = req.target.get(HeroViewComp); + const sourceView = req.source.get(HeroViewComp); + let final = req.baseValue; + + // 闪避判定 + if (Math.random() < targetView.dodge) { + const result = new DamageResult(); + result.finalDamage = 0; + result.isDodged = true; + return result; + } + + // 护甲减伤 + if (!req.ignoreDefense) { + final -= targetView.def * 0.5; + } + + // 暴击判定 + let isCrit = false; + if (req.canCrit) { + const critRate = sourceView.crit; + if (Math.random() < critRate) { + final *= 1.5; + isCrit = true; + } + } + + const result = new DamageResult(); + result.finalDamage = Math.max(0, final); + result.isCrit = isCrit; + return result; + } + + private applyDamage(target: ecs.Entity, result: DamageResult) { + const view = target.get(HeroViewComp); + view.hp -= result.finalDamage; + + // 添加伤害结果组件 + const comp = target.add(DamageResult); + comp.finalDamage = result.finalDamage; + comp.isCrit = result.isCrit; + comp.isDodged = result.isDodged; + + // 触发伤害事件 + oops.message.dispatchEvent("OnDamage", { + target, + damage: result.finalDamage, + isCrit: result.isCrit + }); + } +} \ No newline at end of file diff --git a/assets/script/game/hero/BuffComp.ts b/assets/script/game/hero/BuffComp.ts index 3b50ef2e..807127f7 100644 --- a/assets/script/game/hero/BuffComp.ts +++ b/assets/script/game/hero/BuffComp.ts @@ -80,11 +80,11 @@ export class BuffComp extends Component { } - max_show(){ - // this.node.getChildByName("max").active=true - // this.scheduleOnce(()=>{ - // this.node.getChildByName("max").active=false - // },0.8) + max_show(name:string){ + var path = "game/skills/"+name; + var prefab: Prefab = oops.res.get(path, Prefab)!; + var node = instantiate(prefab); + node.parent = this.node; } show_do_buff(name:string){ var path = "game/skills/"+name; diff --git a/assets/script/game/hero/HeroSpine.ts b/assets/script/game/hero/HeroSpine.ts index 1b17e7d4..eebec45b 100644 --- a/assets/script/game/hero/HeroSpine.ts +++ b/assets/script/game/hero/HeroSpine.ts @@ -49,12 +49,30 @@ export class HeroSpine extends Component { // console.log("do max"); this.anm.max() } + play(name:string){ + switch(name){ + case "max": + this.max() + break + case "atk": + this.atk() + break + case "idle": + this.idle() + break + case "move": + this.move() + break + } + } + move(){ // console.log("doing move"); if(this.status=="move") return this.status="move" this.anm.move() } + atked() { // console.log("do atked"); this.anm.atked() diff --git a/assets/script/game/hero/HeroViewComp.ts b/assets/script/game/hero/HeroViewComp.ts index 5da6989d..8cdfdd6d 100644 --- a/assets/script/game/hero/HeroViewComp.ts +++ b/assets/script/game/hero/HeroViewComp.ts @@ -177,18 +177,39 @@ export class HeroViewComp extends CCComp { } //受伤判断 - check_uatk(skill:any){ + check_uatk(damage:number,is_crit:boolean){ if(this.check_dodge()) return this.in_atked(); - let l_hp=this.check_less(skill.ap,skill.is_crit,skill.crit_add) - this.check_debuff(skill,l_hp) + let l_hp=damage + // this.check_debuff(skill,l_hp) if(this.shield > 0){ - this.shield -=1 - if(this.shield == 0) this.BUFFCOMP.show_shield(false) - l_hp = 0 + this.shield -= damage + if(this.shield <= 0) { + l_hp = -this.shield + this.shield = 0 + this.BUFFCOMP.show_shield(false) + } + } + this.hp_less(l_hp,is_crit); + } + hp_less(hp: number,is_crit:boolean=false){ + if(this.is_dead) return + hp=Math.floor(hp) + this.hp -= hp + if(is_crit){ + this.BUFFCOMP.tooltip(4,hp.toFixed(0),250); + }else{ + this.BUFFCOMP.tooltip(1,hp.toFixed(0),250); + } + if(this.hp > this.hp_max){ + this.hp = this.hp_max; + } + if(this.hp <= 0){ + this.dead(); + this.to_grave() + this.is_dead = true; } - this.hp_less(l_hp,skill.is_crit); } check_less(ap:number,is_crit:boolean,crit_add:number=0){ let d=this.def/ap @@ -455,24 +476,7 @@ export class HeroViewComp extends CCComp { this.hp += Math.floor(hprate/100*this.hp_max) ; } - hp_less(hp: number,is_crit:boolean=false){ - if(this.is_dead) return - hp=Math.floor(hp) - this.hp -= hp - if(is_crit){ - this.BUFFCOMP.tooltip(4,hp.toFixed(0),250); - }else{ - this.BUFFCOMP.tooltip(1,hp.toFixed(0),250); - } - if(this.hp > this.hp_max){ - this.hp = this.hp_max; - } - if(this.hp <= 0){ - this.dead(); - this.to_grave() - this.is_dead = true; - } - } + /** 静止时间 */ in_stop (dt: number) { if(this.stop_cd > 0){ @@ -548,8 +552,18 @@ export class HeroViewComp extends CCComp { this.node.destroy(); } - playSkillEffect() { - this.as.max() + playSkillEffect(skill_id:number) { + let skill = SkillSet[skill_id] + switch(skill.act){ + case "max": + this.as.max() + this.BUFFCOMP.max_show(skill.fname) + this.BUFFCOMP.tooltip(3,skill.name,skill_id) + break + case "atk": + this.as.atk() + break + } } public revive() { diff --git a/assets/script/game/hero/Mon.ts b/assets/script/game/hero/Mon.ts index 94aaeccd..c449ff5f 100644 --- a/assets/script/game/hero/Mon.ts +++ b/assets/script/game/hero/Mon.ts @@ -19,18 +19,21 @@ import { HeroInfo } from "../common/config/heroSet"; import { Talents } from "../common/config/TalentSet"; import { MonModelComp } from "./MonModelComp"; import { BattleMoveComp } from "../common/ecs/position/BattleMoveComp"; +import { HeroSkillsComp } from "../skill/heroSkillsComp"; /** 角色实体 */ @ecs.register(`Monster`) export class Monster extends ecs.Entity { - // 数据层 - MonModelComp!: MonModelComp; - // 视图层 - HeroView!: HeroViewComp; - + HeroModel!: MonModelComp; + HeroView!: HeroViewComp; + BattleMove!: BattleMoveComp; + HeroSkills!: HeroSkillsComp; protected init() { - - + this.addComponents( + BattleMoveComp, + HeroSkillsComp, + MonModelComp + ); } destroy(): void { @@ -99,25 +102,42 @@ export class Monster extends ecs.Entity { hv.dexp=hero.dexp; this.add(hv); + // 初始化多个技能组件 + const skillsComp = this.get(HeroSkillsComp); + // 正确初始化已有技能 + hero.skills.forEach(skillId => { + this.addSkill(skillId); // 使用addSkill方法确保初始化 + }); + + // 初始化移动参数 + const move = this.get(BattleMoveComp); + move.direction = 1; // 向右移动 + move.targetX = 800; // 右边界 } - set_ratio(uuid:number){ - let ratio=1; - switch (HeroInfo[uuid].level) { - case 2: - ratio=1.05 - break; - case 3: - ratio=1.1 - break; - case 4: - ratio=1.15 - break; - case 5: - ratio=1.2 - break; - default: - ratio=1 + // 添加技能 + public addSkill(skillId: number) { + const comp = this.get(HeroSkillsComp); + if (comp.skills.indexOf(skillId) === -1) { + comp.skills.push(skillId); + comp.cooldowns.set(skillId, 0); + comp.counters.set(skillId, 0); + console.log(`技能${skillId}初始化完成`, + '当前cooldowns:', comp.cooldowns, + '当前counters:', comp.counters); } - return ratio; + } + + // 移除技能 + public removeSkill(skillId: number) { + const comp = this.get(HeroSkillsComp); + comp.skills = comp.skills.filter(id => id !== skillId); + } + + public levelUp() { + // ...升级逻辑... + const comp = this.get(HeroSkillsComp); + comp.skills.forEach(skillId => { + comp.resetCooldown(skillId); + }); } } \ No newline at end of file diff --git a/assets/script/game/map/HCardComp.ts b/assets/script/game/map/HCardComp.ts index 70ba41a8..4d2a6682 100644 --- a/assets/script/game/map/HCardComp.ts +++ b/assets/script/game/map/HCardComp.ts @@ -53,9 +53,9 @@ export class HCardComp extends CCComp { this.node.getChildByName("bg").getComponent(Sprite).grayscale=false this.is_dead=false } - this.hp.string=(this.heros[this.hi].HeroView.rhp_max).toFixed(0) + this.hp.string=(this.heros[this.hi].HeroView.hp_max).toFixed(0) this.ap.string=(this.heros[this.hi].HeroView.ap*(smc.vmdata.mission.ap+100)/100).toFixed(0) - this.life.progress=this.heros[this.hi].HeroView.hp/this.heros[this.hi].HeroView.rhp_max + this.life.progress=this.heros[this.hi].HeroView.hp/this.heros[this.hi].HeroView.hp_max this.pw.progress=this.heros[this.hi].HeroView.pw/this.heros[this.hi].HeroView.pwm diff --git a/assets/script/game/skill/HeroSkillSystem.ts b/assets/script/game/skill/HeroSkillSystem.ts index 07048bca..0f2c33d3 100644 --- a/assets/script/game/skill/HeroSkillSystem.ts +++ b/assets/script/game/skill/HeroSkillSystem.ts @@ -4,12 +4,13 @@ import { HeroViewComp } from "../hero/HeroViewComp"; import { HeroSkillsComp } from "./heroSkillsComp"; import { SkillSet, TargetGroup, TargetType } from "../common/config/SkillSet"; import { CdType } from "../common/config/SkillSet"; +import { DamageRequest, DamageType } from "../../game/damage/DamageComp"; /** 技能系统 */ @ecs.register('HeroSkillSystem') export class HeroSkillSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate { - private updateInterval: number = 0.2; // 每0.1秒更新一次 + private updateInterval: number = 0.1; // 每0.1秒更新一次 private accumulator: number = 0; filter(): ecs.IMatcher { @@ -64,13 +65,10 @@ export class HeroSkillSystem extends ecs.ComblockSystem implements ecs.ISystemUp const comp = entity.get(HeroSkillsComp); switch(config.CdType){ case CdType.SkillCD: - console.log("技能计时器",comp.cooldowns.get(config.uuid as number) ?? 0,config.cd) return (comp.cooldowns.get(config.uuid as number) ?? 0) <= 0; case CdType.HeroCD: - console.log("普攻计时器",view.at,view.cd) return view.at >= view.cd; case CdType.HeroPower: - console.log("能量计时器",view.pw,view.pwm) return view.pw >= view.pwm; } } @@ -81,26 +79,23 @@ export class HeroSkillSystem extends ecs.ComblockSystem implements ecs.ISystemUp private castSkill(caster: ecs.Entity, skillId: number, config: typeof SkillSet[keyof typeof SkillSet]) { const view = caster.get(HeroViewComp); const comp = caster.get(HeroSkillsComp); - console.log(view.hero_name+"施放技能",comp,view) + console.log(view.hero_name+"施放技能",config.uuid,comp,view) switch(config.CdType) { case CdType.SkillCD: view.as.max() - console.log("重置技能计时器",view.as,config.cd) comp.cooldowns.set(skillId, config.cd); // 重置冷却时间 break; case CdType.HeroCD: view.as.atk() - console.log("重置普攻计时器",view.at,view.cd) view.at = view.at-view.cd; // 重置普攻计时器 break; case CdType.HeroPower: view.as.max() - console.log("重置能量计时器",view.pw,view.pwm) - view.pw = view.pw-view.pwm; + view.pw = view.pw-view.pwm; // 重置能量计时器 break; } - + // 选择目标 const targets = this.selectTargets(caster, config); // 应用技能效果 @@ -205,24 +200,15 @@ export class HeroSkillSystem extends ecs.ComblockSystem implements ecs.ISystemUp /** 应用技能效果 */ private applySkillEffect(caster: ecs.Entity, target: ecs.Entity, config: typeof SkillSet[keyof typeof SkillSet]) { - const casterView = caster.get(HeroViewComp); - const targetView = target.get(HeroViewComp); + // 创建伤害请求实体 + const damageEntity = new ecs.Entity(); + const req = damageEntity.add(DamageRequest); + req.source = caster; + req.target = target; + req.baseValue = caster.get(HeroViewComp).ap * (config.ap / 100); - // 计算基础伤害 - const damage = casterView.ap * (config.ap / 100); - - // 应用伤害/治疗 - if (config.ap > 0) { - targetView.hp -= damage; - } - if (config.hp > 0) { - targetView.hp += casterView.hp_max * (config.hp / 100); - } - - // 应用debuff - if (config.debuff > 0) { - this.applyDebuff(target, config); - } + // 播放技能特效 + caster.get(HeroViewComp).playSkillEffect(config.uuid); } /** 应用负面状态 */