feat: 调整怪物属性与波次生成逻辑,新增测试脚本

1.  全怪物基础属性翻倍调整,同步更新英雄配置表
2.  修改模板M1的最低生效等级为1
3.  调整首波生成预算计算方式,修复低预算利用率检查逻辑
4.  新增spawn测试脚本,调整UI预制体布局参数
This commit is contained in:
walkpan
2026-05-15 20:42:24 +08:00
parent 9687adb559
commit e5e379aecc
6 changed files with 123 additions and 285 deletions

View File

@@ -99,7 +99,7 @@
"_lpos": { "_lpos": {
"__type__": "cc.Vec3", "__type__": "cc.Vec3",
"x": 200, "x": 200,
"y": 177.92700000000002, "y": 177,
"z": 0 "z": 0
}, },
"_lrot": { "_lrot": {
@@ -266,8 +266,8 @@
}, },
"_lpos": { "_lpos": {
"__type__": "cc.Vec3", "__type__": "cc.Vec3",
"x": 100, "x": 91.434,
"y": 177.92700000000002, "y": 99.82,
"z": 0 "z": 0
}, },
"_lrot": { "_lrot": {
@@ -434,8 +434,8 @@
}, },
"_lpos": { "_lpos": {
"__type__": "cc.Vec3", "__type__": "cc.Vec3",
"x": 0, "x": 110.644,
"y": 177.92700000000002, "y": 234.75,
"z": 0 "z": 0
}, },
"_lrot": { "_lrot": {
@@ -602,8 +602,8 @@
}, },
"_lpos": { "_lpos": {
"__type__": "cc.Vec3", "__type__": "cc.Vec3",
"x": -100, "x": -47.56,
"y": 177.92700000000002, "y": 261.112,
"z": 0 "z": 0
}, },
"_lrot": { "_lrot": {
@@ -770,8 +770,8 @@
}, },
"_lpos": { "_lpos": {
"__type__": "cc.Vec3", "__type__": "cc.Vec3",
"x": -200, "x": -30.737,
"y": 177.92700000000002, "y": 68.374,
"z": 0 "z": 0
}, },
"_lrot": { "_lrot": {

View File

@@ -22,26 +22,26 @@
"__id__": 2 "__id__": 2
}, },
{ {
"__id__": 286 "__id__": 272
}, },
{ {
"__id__": 295 "__id__": 281
} }
], ],
"_active": true, "_active": true,
"_components": [ "_components": [
{ {
"__id__": 307 "__id__": 293
}, },
{ {
"__id__": 309 "__id__": 295
}, },
{ {
"__id__": 311 "__id__": 297
} }
], ],
"_prefab": { "_prefab": {
"__id__": 313 "__id__": 299
}, },
"_lpos": { "_lpos": {
"__type__": "cc.Vec3", "__type__": "cc.Vec3",
@@ -94,17 +94,17 @@
"_active": true, "_active": true,
"_components": [ "_components": [
{ {
"__id__": 279 "__id__": 265
}, },
{ {
"__id__": 281 "__id__": 267
}, },
{ {
"__id__": 283 "__id__": 269
} }
], ],
"_prefab": { "_prefab": {
"__id__": 285 "__id__": 271
}, },
"_lpos": { "_lpos": {
"__type__": "cc.Vec3", "__type__": "cc.Vec3",
@@ -6090,108 +6090,32 @@
}, },
{ {
"__type__": "cc.PrefabInstance", "__type__": "cc.PrefabInstance",
"fileId": "c8OWze/z9IMpmg5hcYAPwM", "fileId": "87n/wcZ7tIPbu7m1+Q/KV3",
"prefabRootNode": { "prefabRootNode": {
"__id__": 1 "__id__": 1
}, },
"mountedChildren": [], "mountedChildren": [],
"mountedComponents": [ "mountedComponents": [],
{
"__id__": 260
}
],
"propertyOverrides": [ "propertyOverrides": [
{
"__id__": 260
},
{
"__id__": 262
},
{
"__id__": 263
},
{ {
"__id__": 264 "__id__": 264
},
{
"__id__": 266
},
{
"__id__": 267
},
{
"__id__": 268
},
{
"__id__": 269
},
{
"__id__": 271
},
{
"__id__": 273
},
{
"__id__": 275
},
{
"__id__": 277
} }
], ],
"removedComponents": [] "removedComponents": []
}, },
{
"__type__": "cc.MountedComponentsInfo",
"targetInfo": {
"__id__": 261
},
"components": [
{
"__id__": 262
}
]
},
{
"__type__": "cc.TargetInfo",
"localID": [
"f1ya2LoYBB547vP13Ydezp"
]
},
{
"__type__": "cc.Widget",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {
"mountedRoot": {
"__id__": 257
}
},
"node": {
"__id__": 257
},
"_enabled": true,
"__prefab": {
"__id__": 263
},
"_alignFlags": 18,
"_target": null,
"_left": 0,
"_right": 0,
"_top": 0,
"_bottom": 0,
"_horizontalCenter": -76.841,
"_verticalCenter": 200,
"_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": "3eiYz0maFGj5G3KaylC3ro"
},
{ {
"__type__": "CCPropertyOverrideInfo", "__type__": "CCPropertyOverrideInfo",
"targetInfo": { "targetInfo": {
"__id__": 265 "__id__": 261
}, },
"propertyPath": [ "propertyPath": [
"_name" "_name"
@@ -6207,22 +6131,22 @@
{ {
"__type__": "CCPropertyOverrideInfo", "__type__": "CCPropertyOverrideInfo",
"targetInfo": { "targetInfo": {
"__id__": 265 "__id__": 261
}, },
"propertyPath": [ "propertyPath": [
"_lpos" "_lpos"
], ],
"value": { "value": {
"__type__": "cc.Vec3", "__type__": "cc.Vec3",
"x": -76.841, "x": -143.895,
"y": 840, "y": 622.066,
"z": 0 "z": 0
} }
}, },
{ {
"__type__": "CCPropertyOverrideInfo", "__type__": "CCPropertyOverrideInfo",
"targetInfo": { "targetInfo": {
"__id__": 265 "__id__": 261
}, },
"propertyPath": [ "propertyPath": [
"_lrot" "_lrot"
@@ -6238,7 +6162,7 @@
{ {
"__type__": "CCPropertyOverrideInfo", "__type__": "CCPropertyOverrideInfo",
"targetInfo": { "targetInfo": {
"__id__": 265 "__id__": 261
}, },
"propertyPath": [ "propertyPath": [
"_euler" "_euler"
@@ -6250,111 +6174,6 @@
"z": 0 "z": 0
} }
}, },
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 270
},
"propertyPath": [
"_lpos"
],
"value": {
"__type__": "cc.Vec3",
"x": 200,
"y": 0,
"z": 0
}
},
{
"__type__": "cc.TargetInfo",
"localID": [
"bdA9GHaYtL34EFtEibL2hR"
]
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 272
},
"propertyPath": [
"_lpos"
],
"value": {
"__type__": "cc.Vec3",
"x": 100,
"y": 0,
"z": 0
}
},
{
"__type__": "cc.TargetInfo",
"localID": [
"adFmHHJ5BBAY0CazvLDgGw"
]
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 274
},
"propertyPath": [
"_lpos"
],
"value": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
}
},
{
"__type__": "cc.TargetInfo",
"localID": [
"96QFNOz55OyZEByIPMUwVi"
]
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 276
},
"propertyPath": [
"_lpos"
],
"value": {
"__type__": "cc.Vec3",
"x": -100,
"y": 0,
"z": 0
}
},
{
"__type__": "cc.TargetInfo",
"localID": [
"82phyYrMBJLLQftj0f4fIS"
]
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 278
},
"propertyPath": [
"_lpos"
],
"value": {
"__type__": "cc.Vec3",
"x": -200,
"y": 0,
"z": 0
}
},
{
"__type__": "cc.TargetInfo",
"localID": [
"aenGhipwJAKZ3DgYqvrUgU"
]
},
{ {
"__type__": "cc.UITransform", "__type__": "cc.UITransform",
"_name": "", "_name": "",
@@ -6365,7 +6184,7 @@
}, },
"_enabled": true, "_enabled": true,
"__prefab": { "__prefab": {
"__id__": 280 "__id__": 266
}, },
"_contentSize": { "_contentSize": {
"__type__": "cc.Size", "__type__": "cc.Size",
@@ -6393,7 +6212,7 @@
}, },
"_enabled": true, "_enabled": true,
"__prefab": { "__prefab": {
"__id__": 282 "__id__": 268
}, },
"_alignFlags": 21, "_alignFlags": 21,
"_target": null, "_target": null,
@@ -6429,7 +6248,7 @@
}, },
"_enabled": true, "_enabled": true,
"__prefab": { "__prefab": {
"__id__": 284 "__id__": 270
}, },
"home_btn": { "home_btn": {
"__id__": 45 "__id__": 45
@@ -6466,14 +6285,14 @@
"__id__": 1 "__id__": 1
}, },
"_prefab": { "_prefab": {
"__id__": 287 "__id__": 273
}, },
"__editorExtras__": {} "__editorExtras__": {}
}, },
{ {
"__type__": "cc.PrefabInfo", "__type__": "cc.PrefabInfo",
"root": { "root": {
"__id__": 286 "__id__": 272
}, },
"asset": { "asset": {
"__uuid__": "26bff847-cd29-48a5-bbfa-c3e2dbda688d", "__uuid__": "26bff847-cd29-48a5-bbfa-c3e2dbda688d",
@@ -6481,7 +6300,7 @@
}, },
"fileId": "5a9CMsVQhKP5Y+UJfTKPbx", "fileId": "5a9CMsVQhKP5Y+UJfTKPbx",
"instance": { "instance": {
"__id__": 288 "__id__": 274
}, },
"targetOverrides": null "targetOverrides": null
}, },
@@ -6495,19 +6314,19 @@
"mountedComponents": [], "mountedComponents": [],
"propertyOverrides": [ "propertyOverrides": [
{ {
"__id__": 289 "__id__": 275
}, },
{ {
"__id__": 291 "__id__": 277
}, },
{ {
"__id__": 292 "__id__": 278
}, },
{ {
"__id__": 293 "__id__": 279
}, },
{ {
"__id__": 294 "__id__": 280
} }
], ],
"removedComponents": [] "removedComponents": []
@@ -6515,7 +6334,7 @@
{ {
"__type__": "CCPropertyOverrideInfo", "__type__": "CCPropertyOverrideInfo",
"targetInfo": { "targetInfo": {
"__id__": 290 "__id__": 276
}, },
"propertyPath": [ "propertyPath": [
"_name" "_name"
@@ -6531,7 +6350,7 @@
{ {
"__type__": "CCPropertyOverrideInfo", "__type__": "CCPropertyOverrideInfo",
"targetInfo": { "targetInfo": {
"__id__": 290 "__id__": 276
}, },
"propertyPath": [ "propertyPath": [
"_lpos" "_lpos"
@@ -6546,7 +6365,7 @@
{ {
"__type__": "CCPropertyOverrideInfo", "__type__": "CCPropertyOverrideInfo",
"targetInfo": { "targetInfo": {
"__id__": 290 "__id__": 276
}, },
"propertyPath": [ "propertyPath": [
"_lrot" "_lrot"
@@ -6562,7 +6381,7 @@
{ {
"__type__": "CCPropertyOverrideInfo", "__type__": "CCPropertyOverrideInfo",
"targetInfo": { "targetInfo": {
"__id__": 290 "__id__": 276
}, },
"propertyPath": [ "propertyPath": [
"_euler" "_euler"
@@ -6577,7 +6396,7 @@
{ {
"__type__": "CCPropertyOverrideInfo", "__type__": "CCPropertyOverrideInfo",
"targetInfo": { "targetInfo": {
"__id__": 290 "__id__": 276
}, },
"propertyPath": [ "propertyPath": [
"_active" "_active"
@@ -6591,14 +6410,14 @@
"__id__": 1 "__id__": 1
}, },
"_prefab": { "_prefab": {
"__id__": 296 "__id__": 282
}, },
"__editorExtras__": {} "__editorExtras__": {}
}, },
{ {
"__type__": "cc.PrefabInfo", "__type__": "cc.PrefabInfo",
"root": { "root": {
"__id__": 295 "__id__": 281
}, },
"asset": { "asset": {
"__uuid__": "56aee962-4a5e-45ae-a779-999444d06d18", "__uuid__": "56aee962-4a5e-45ae-a779-999444d06d18",
@@ -6606,7 +6425,7 @@
}, },
"fileId": "cboM54s0hM07XCtrpFp0/b", "fileId": "cboM54s0hM07XCtrpFp0/b",
"instance": { "instance": {
"__id__": 297 "__id__": 283
}, },
"targetOverrides": null "targetOverrides": null
}, },
@@ -6620,25 +6439,25 @@
"mountedComponents": [], "mountedComponents": [],
"propertyOverrides": [ "propertyOverrides": [
{ {
"__id__": 298 "__id__": 284
}, },
{ {
"__id__": 300 "__id__": 286
}, },
{ {
"__id__": 301 "__id__": 287
}, },
{ {
"__id__": 302 "__id__": 288
}, },
{ {
"__id__": 303 "__id__": 289
}, },
{ {
"__id__": 305 "__id__": 291
}, },
{ {
"__id__": 306 "__id__": 292
} }
], ],
"removedComponents": [] "removedComponents": []
@@ -6646,7 +6465,7 @@
{ {
"__type__": "CCPropertyOverrideInfo", "__type__": "CCPropertyOverrideInfo",
"targetInfo": { "targetInfo": {
"__id__": 299 "__id__": 285
}, },
"propertyPath": [ "propertyPath": [
"_name" "_name"
@@ -6662,7 +6481,7 @@
{ {
"__type__": "CCPropertyOverrideInfo", "__type__": "CCPropertyOverrideInfo",
"targetInfo": { "targetInfo": {
"__id__": 299 "__id__": 285
}, },
"propertyPath": [ "propertyPath": [
"_lpos" "_lpos"
@@ -6677,7 +6496,7 @@
{ {
"__type__": "CCPropertyOverrideInfo", "__type__": "CCPropertyOverrideInfo",
"targetInfo": { "targetInfo": {
"__id__": 299 "__id__": 285
}, },
"propertyPath": [ "propertyPath": [
"_lrot" "_lrot"
@@ -6693,7 +6512,7 @@
{ {
"__type__": "CCPropertyOverrideInfo", "__type__": "CCPropertyOverrideInfo",
"targetInfo": { "targetInfo": {
"__id__": 299 "__id__": 285
}, },
"propertyPath": [ "propertyPath": [
"_euler" "_euler"
@@ -6708,7 +6527,7 @@
{ {
"__type__": "CCPropertyOverrideInfo", "__type__": "CCPropertyOverrideInfo",
"targetInfo": { "targetInfo": {
"__id__": 304 "__id__": 290
}, },
"propertyPath": [ "propertyPath": [
"_top" "_top"
@@ -6724,7 +6543,7 @@
{ {
"__type__": "CCPropertyOverrideInfo", "__type__": "CCPropertyOverrideInfo",
"targetInfo": { "targetInfo": {
"__id__": 304 "__id__": 290
}, },
"propertyPath": [ "propertyPath": [
"_alignFlags" "_alignFlags"
@@ -6734,7 +6553,7 @@
{ {
"__type__": "CCPropertyOverrideInfo", "__type__": "CCPropertyOverrideInfo",
"targetInfo": { "targetInfo": {
"__id__": 304 "__id__": 290
}, },
"propertyPath": [ "propertyPath": [
"_bottom" "_bottom"
@@ -6751,7 +6570,7 @@
}, },
"_enabled": true, "_enabled": true,
"__prefab": { "__prefab": {
"__id__": 308 "__id__": 294
}, },
"_contentSize": { "_contentSize": {
"__type__": "cc.Size", "__type__": "cc.Size",
@@ -6779,7 +6598,7 @@
}, },
"_enabled": true, "_enabled": true,
"__prefab": { "__prefab": {
"__id__": 310 "__id__": 296
}, },
"_alignFlags": 45, "_alignFlags": 45,
"_target": null, "_target": null,
@@ -6815,7 +6634,7 @@
}, },
"_enabled": true, "_enabled": true,
"__prefab": { "__prefab": {
"__id__": 312 "__id__": 298
}, },
"debugMode": false, "debugMode": false,
"_id": "" "_id": ""
@@ -6837,10 +6656,10 @@
"targetOverrides": null, "targetOverrides": null,
"nestedPrefabInstanceRoots": [ "nestedPrefabInstanceRoots": [
{ {
"__id__": 295 "__id__": 281
}, },
{ {
"__id__": 286 "__id__": 272
}, },
{ {
"__id__": 257 "__id__": 257

View File

@@ -176,43 +176,54 @@ export const HeroInfo: Record<number, heroInfo> = {
/* /*
*=============怪物配置列表================ *=============怪物配置列表================
* 基础近战型(lv:1) SPEED:800 |AP:12 | HP:120 | skills[0].cd=0.65 * 基础近战型(lv:1) SPEED:800 |AP:12 | HP:360 | skills[0].cd=0.65
* 重型坦克型(lv:1) SPEED:800 |AP:30 | HP:350 | skills[0].cd=2 * 重型坦克型(lv:1) SPEED:800 |AP:30 | HP:1050 | skills[0].cd=2
* 远程dps(lv:1) SPEED:800 |AP:45 | HP:80 | skills[0].cd=1.5 * 远程dps(lv:1) SPEED:800 |AP:45 | HP:240 | skills[0].cd=1.5
* 远程辅助(lv:1) SPEED:800 |AP:20 | HP:80 | skills[0].cd=1 * 远程辅助(lv:1) SPEED:800 |AP:20 | HP:240 | skills[0].cd=1
* 精英 (lv:1) SPEED:800 |AP:20 | HP:1500 | skills[0].cd=1 * 精英 (lv:1) SPEED:800 |AP:20 | HP:4500 | skills[0].cd=1
*/ */
//============== 兽人系列 =============== //============== 兽人系列 ===============
// 近战型 // 近战型
6001:{uuid:6001,name:"兽人战士",path:"mo1", fac:FacSet.MON,cards_lv:1,lv:1,type:HType.Melee,hp:120,ap:12,speed:100, 6001:{uuid:6001,name:"兽人战士",path:"mo1", fac:FacSet.MON,cards_lv:1,lv:1,type:HType.Melee,hp:360,ap:12,speed:100,
skills:{6001:{uuid:6001,lv:1,cd:0.65,ccd:0}},info:""}, skills:{6001:{uuid:6001,lv:1,cd:0.65,ccd:0}},info:""},
6002:{uuid:6002,name:"兽人斥候",path:"mo3", fac:FacSet.MON,cards_lv:1,lv:1,type:HType.Melee,hp:120,ap:12,speed:100, 6002:{uuid:6002,name:"兽人斥候",path:"mo3", fac:FacSet.MON,cards_lv:1,lv:1,type:HType.Melee,hp:360,ap:12,speed:100,
skills:{6001:{uuid:6001,lv:1,cd:0.65,ccd:0}},info:""}, skills:{6001:{uuid:6001,lv:1,cd:0.65,ccd:0}},info:""},
6003:{uuid:6003,name:"兽人卫士",path:"mo4", fac:FacSet.MON,cards_lv:1,lv:1,type:HType.Melee,hp:350,ap:30,speed:100, 6003:{uuid:6003,name:"兽人卫士",path:"mo4", fac:FacSet.MON,cards_lv:1,lv:1,type:HType.Melee,hp:1050,ap:30,speed:100,
skills:{6001:{uuid:6001,lv:1,cd:2,ccd:0}},info:""}, skills:{6001:{uuid:6001,lv:1,cd:2,ccd:0}},info:""},
6004:{uuid:6004,name:"兽人射手",path:"mo2", fac:FacSet.MON,cards_lv:1,lv:1,type:HType.Long,hp:80,ap:45,speed:100, 6004:{uuid:6004,name:"兽人射手",path:"mo2", fac:FacSet.MON,cards_lv:1,lv:1,type:HType.Long,hp:240,ap:45,speed:100,
skills:{6001:{uuid:6101,lv:1,cd:1.5,ccd:0}},info:""}, skills:{6001:{uuid:6101,lv:1,cd:1.5,ccd:0}},info:""},
6005:{uuid:6005,name:"兽人法师",path:"mo5", fac:FacSet.MON,cards_lv:1,lv:1,type:HType.Long,hp:80,ap:20,speed:100, 6005:{uuid:6005,name:"兽人法师",path:"mo5", fac:FacSet.MON,cards_lv:1,lv:1,type:HType.Long,hp:240,ap:20,speed:100,
skills:{6001:{uuid:6203,lv:1,cd:1.5,ccd:0}},info:""}, skills:{6001:{uuid:6203,lv:1,cd:1.5,ccd:0}},info:""},
6006:{uuid:6006,name:"兽人首领",path:"mo6", fac:FacSet.MON,cards_lv:1,lv:1,type:HType.Melee,hp:1500,ap:20,speed:100, 6006:{uuid:6006,name:"兽人首领",path:"mo6", fac:FacSet.MON,cards_lv:1,lv:1,type:HType.Melee,hp:4500,ap:20,speed:100,
skills:{6002:{uuid:6002,lv:1,cd:2,ccd:0}},info:""}, skills:{6002:{uuid:6002,lv:1,cd:2,ccd:0}},info:""},
//============== 亡灵系列 =============== //============== 亡灵系列 ===============
// 近战型 // 近战型
6101:{uuid:6101,name:"亡灵战士",path:"mud1", fac:FacSet.MON,cards_lv:1,lv:1,type:HType.Melee,hp:120,ap:12,speed:100, 6101:{uuid:6101,name:"亡灵战士",path:"mud1", fac:FacSet.MON,cards_lv:1,lv:1,type:HType.Melee,hp:360,ap:12,speed:100,
skills:{6001:{uuid:6001,lv:1,cd:0.65,ccd:0}},info:""}, skills:{6001:{uuid:6001,lv:1,cd:0.65,ccd:0}},info:""},
6103:{uuid:6103,name:"亡灵斥候",path:"mud3", fac:FacSet.MON,cards_lv:1,lv:1,type:HType.Melee,hp:120,ap:12,speed:100, 6103:{uuid:6103,name:"亡灵斥候",path:"mud3", fac:FacSet.MON,cards_lv:1,lv:1,type:HType.Melee,hp:360,ap:12,speed:100,
skills:{6001:{uuid:6001,lv:1,cd:0.65,ccd:0}},info:""}, skills:{6001:{uuid:6001,lv:1,cd:0.65,ccd:0}},info:""},
6102:{uuid:6102,name:"亡灵射手",path:"mud2", fac:FacSet.MON,cards_lv:1,lv:1,type:HType.Long,hp:80,ap:45,speed:100, 6102:{uuid:6102,name:"亡灵射手",path:"mud2", fac:FacSet.MON,cards_lv:1,lv:1,type:HType.Long,hp:240,ap:45,speed:100,
skills:{6001:{uuid:6101,lv:1,cd:1.5,ccd:0}},info:""}, skills:{6001:{uuid:6101,lv:1,cd:1.5,ccd:0}},info:""},
// 6105:{uuid:6105,name:"兽人法师",path:"mud5", fac:FacSet.MON,cards_lv:1,lv:1,type:HType.Melee,hp:80,ap:20,speed:100, // 6105:{uuid:6105,name:"兽人法师",path:"mud5", fac:FacSet.MON,cards_lv:1,lv:1,type:HType.Melee,hp:240,ap:20,speed:100,
// skills:{6001:{uuid:6001,lv:1,cd:1,ccd:0},6003:{uuid:6003,lv:1,cd:10,ccd:0}},info:""}, // skills:{6001:{uuid:6001,lv:1,cd:1,ccd:0},6003:{uuid:6003,lv:1,cd:10,ccd:0}},info:""},
// 6. 精英/BOSS型 // 6. 精英/BOSS型
6104:{uuid:6104,name:"亡灵法师",path:"mud4", fac:FacSet.MON,cards_lv:1,lv:1,type:HType.Long,hp:350,ap:30,speed:100, 6104:{uuid:6104,name:"亡灵法师",path:"mud4", fac:FacSet.MON,cards_lv:1,lv:1,type:HType.Long,hp:1050,ap:30,speed:100,
skills:{6204:{uuid:6204,lv:1,cd:2,ccd:0},6206:{uuid:6206,lv:1,cd:10,ccd:0}},info:""}, skills:{6204:{uuid:6204,lv:1,cd:2,ccd:0},6206:{uuid:6206,lv:1,cd:10,ccd:0}},info:""},
6105:{uuid:6105,name:"亡灵首领",path:"mud5", fac:FacSet.MON,cards_lv:1,lv:1,type:HType.Melee,hp:1500,ap:20,speed:100, 6105:{uuid:6105,name:"亡灵首领",path:"mud5", fac:FacSet.MON,cards_lv:1,lv:1,type:HType.Melee,hp:4500,ap:20,speed:100,
skills:{6002:{uuid:6002,lv:1,cd:2,ccd:0},6005:{uuid:6005,lv:1,cd:10,ccd:0}},info:""}, skills:{6002:{uuid:6002,lv:1,cd:2,ccd:0},6005:{uuid:6005,lv:1,cd:10,ccd:0}},info:""},
//============== 特殊类型 (Bomber, Summoner, Assassin, Splitter) ===============
6201:{uuid:6201,name:"哥布林自爆兵",path:"mo2", fac:FacSet.MON,cards_lv:1,lv:1,type:HType.Melee,hp:180,ap:80,speed:150,
skills:{6001:{uuid:6001,lv:1,cd:1,ccd:0}},info:"自爆兵"},
6202:{uuid:6202,name:"骷髅自爆兵",path:"mud2", fac:FacSet.MON,cards_lv:1,lv:1,type:HType.Melee,hp:180,ap:80,speed:150,
skills:{6001:{uuid:6001,lv:1,cd:1,ccd:0}},info:"自爆兵"},
6203:{uuid:6203,name:"深渊召唤师",path:"hm2", fac:FacSet.MON,cards_lv:1,lv:1,type:HType.Long,hp:300,ap:15,speed:80,
skills:{6001:{uuid:6203,lv:1,cd:2,ccd:0}},info:"召唤师"},
6204:{uuid:6204,name:"暗影刺客",path:"hc1", fac:FacSet.MON,cards_lv:1,lv:1,type:HType.Melee,hp:270,ap:55,speed:200,
skills:{6001:{uuid:6001,lv:1,cd:0.5,ccd:0}},info:"刺客"},
6205:{uuid:6205,name:"分裂软泥",path:"mo1", fac:FacSet.MON,cards_lv:1,lv:1,type:HType.Melee,hp:450,ap:20,speed:90,
skills:{6001:{uuid:6001,lv:1,cd:1,ccd:0}},info:"分裂怪"},
}; };
export const HeroList: number[] = [ export const HeroList: number[] = [

View File

@@ -221,16 +221,16 @@ export interface MonsterBaseStats {
* @see MonsterBaseStats 字段说明 * @see MonsterBaseStats 字段说明
*/ */
export const MonsterStats: Record<MonType, MonsterBaseStats> = { export const MonsterStats: Record<MonType, MonsterBaseStats> = {
[MonType.Melee]: { hp: 120, ap: 12, cost: 30, isBoss: false }, [MonType.Melee]: { hp: 360, ap: 12, cost: 30, isBoss: false },
[MonType.Heavy]: { hp: 350, ap: 30, cost: 50, isBoss: false }, [MonType.Heavy]: { hp: 1050, ap: 30, cost: 50, isBoss: false },
[MonType.Long]: { hp: 80, ap: 45, cost: 40, isBoss: false }, [MonType.Long]: { hp: 240, ap: 45, cost: 40, isBoss: false },
[MonType.Support]: { hp: 80, ap: 20, cost: 50, isBoss: false }, [MonType.Support]: { hp: 240, ap: 20, cost: 50, isBoss: false },
[MonType.Bomber]: { hp: 60, ap: 80, cost: 35, isBoss: false }, [MonType.Bomber]: { hp: 180, ap: 80, cost: 35, isBoss: false },
[MonType.Summoner]: { hp: 100, ap: 15, cost: 60, isBoss: false }, [MonType.Summoner]: { hp: 300, ap: 15, cost: 60, isBoss: false },
[MonType.Assassin]: { hp: 90, ap: 55, cost: 45, isBoss: false }, [MonType.Assassin]: { hp: 270, ap: 55, cost: 45, isBoss: false },
[MonType.Splitter]: { hp: 150, ap: 20, cost: 55, isBoss: false }, [MonType.Splitter]: { hp: 450, ap: 20, cost: 55, isBoss: false },
[MonType.MeleeBoss]: { hp: 1500, ap: 20, cost: 200, isBoss: true }, [MonType.MeleeBoss]: { hp: 4500, ap: 20, cost: 200, isBoss: true },
[MonType.LongBoss]: { hp: 350, ap: 30, cost: 200, isBoss: true }, [MonType.LongBoss]: { hp: 1050, ap: 30, cost: 200, isBoss: true },
} }
// ======================== 阶梯Tier配置 ======================== // ======================== 阶梯Tier配置 ========================
@@ -399,7 +399,7 @@ export const BlueprintTemplates: BlueprintTemplate[] = [
] }, ] },
// ---- MIXED 类 ---- // ---- MIXED 类 ----
{ id: "M1", type: TemplateType.MIXED, tierMin: 2, allowAffix: true, { id: "M1", type: TemplateType.MIXED, tierMin: 1, allowAffix: true,
slots: [ slots: [
{ typePool: [MonType.Melee, MonType.Heavy], countMin: 10, countMax: 15, weight: 0.4 }, { typePool: [MonType.Melee, MonType.Heavy], countMin: 10, countMax: 15, weight: 0.4 },
{ typePool: [MonType.Long], countMin: 5, countMax: 10, weight: 0.3 }, { typePool: [MonType.Long], countMin: 5, countMax: 10, weight: 0.3 },
@@ -624,7 +624,7 @@ export class RogueSpawningEngine {
if (waveNumber === 1) { if (waveNumber === 1) {
return this.spawnFromTemplate( return this.spawnFromTemplate(
BlueprintTemplates.find(t => t.id === "TUTORIAL")!, BlueprintTemplates.find(t => t.id === "TUTORIAL")!,
1, 1 1, getTierConfig(1).budget * this.adaptiveFactor
) )
} }
@@ -878,7 +878,7 @@ export class RogueSpawningEngine {
// 预算利用率检查 (目标 >= 70%) // 预算利用率检查 (目标 >= 70%)
let totalCost = budget - remainingBudget let totalCost = budget - remainingBudget
if (budget > 0 && totalCost / budget < 0.7) { if (budget > 0 && totalCost / budget < 0.7 && template.id !== "TUTORIAL") {
const tierConfig = getTierConfig(tier) const tierConfig = getTierConfig(tier)
const type = MonType.Melee const type = MonType.Melee
const stats = MonsterStats[type] const stats = MonsterStats[type]

4
test_spawn.js Normal file
View File

@@ -0,0 +1,4 @@
import { spawningEngine } from "./assets/script/game/map/RogueConfig.js";
console.log("Wave 1:", spawningEngine.generateWave(1).length);
console.log("Wave 2:", spawningEngine.generateWave(2).length);
console.log("Wave 3:", spawningEngine.generateWave(3).length);

4
test_spawn.ts Normal file
View File

@@ -0,0 +1,4 @@
import { spawningEngine } from "./assets/script/game/map/RogueConfig";
console.log("Wave 1:", spawningEngine.generateWave(1).length);
console.log("Wave 2:", spawningEngine.generateWave(2).length);
console.log("Wave 3:", spawningEngine.generateWave(3).length);