feat: 调整怪物属性与波次生成逻辑,新增测试脚本
1. 全怪物基础属性翻倍调整,同步更新英雄配置表 2. 修改模板M1的最低生效等级为1 3. 调整首波生成预算计算方式,修复低预算利用率检查逻辑 4. 新增spawn测试脚本,调整UI预制体布局参数
This commit is contained in:
@@ -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:30 | HP:350 | skills[0].cd=2
|
||||
* 远程dps(lv:1) : SPEED:800 |AP:45 | HP:80 | skills[0].cd=1.5
|
||||
* 远程辅助(lv:1) : SPEED:800 |AP:20 | HP:80 | skills[0].cd=1
|
||||
* 精英 (lv:1) : SPEED:800 |AP:20 | HP:1500 | skills[0].cd=1
|
||||
* 基础近战型(lv:1) : SPEED:800 |AP:12 | HP:360 | skills[0].cd=0.65
|
||||
* 重型坦克型(lv:1) : SPEED:800 |AP:30 | HP:1050 | skills[0].cd=2
|
||||
* 远程dps(lv:1) : SPEED:800 |AP:45 | HP:240 | skills[0].cd=1.5
|
||||
* 远程辅助(lv:1) : SPEED:800 |AP:20 | HP:240 | 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:""},
|
||||
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:""},
|
||||
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:""},
|
||||
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:""},
|
||||
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:""},
|
||||
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:""},
|
||||
//============== 亡灵系列 ===============
|
||||
// 近战型
|
||||
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:""},
|
||||
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:""},
|
||||
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:""},
|
||||
// 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:""},
|
||||
// 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:""},
|
||||
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:""},
|
||||
|
||||
//============== 特殊类型 (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[] = [
|
||||
|
||||
@@ -221,16 +221,16 @@ export interface MonsterBaseStats {
|
||||
* @see MonsterBaseStats 字段说明
|
||||
*/
|
||||
export const MonsterStats: Record<MonType, MonsterBaseStats> = {
|
||||
[MonType.Melee]: { hp: 120, ap: 12, cost: 30, isBoss: false },
|
||||
[MonType.Heavy]: { hp: 350, ap: 30, cost: 50, isBoss: false },
|
||||
[MonType.Long]: { hp: 80, ap: 45, cost: 40, isBoss: false },
|
||||
[MonType.Support]: { hp: 80, ap: 20, cost: 50, isBoss: false },
|
||||
[MonType.Bomber]: { hp: 60, ap: 80, cost: 35, isBoss: false },
|
||||
[MonType.Summoner]: { hp: 100, ap: 15, cost: 60, isBoss: false },
|
||||
[MonType.Assassin]: { hp: 90, ap: 55, cost: 45, isBoss: false },
|
||||
[MonType.Splitter]: { hp: 150, ap: 20, cost: 55, isBoss: false },
|
||||
[MonType.MeleeBoss]: { hp: 1500, ap: 20, cost: 200, isBoss: true },
|
||||
[MonType.LongBoss]: { hp: 350, ap: 30, cost: 200, isBoss: true },
|
||||
[MonType.Melee]: { hp: 360, ap: 12, cost: 30, isBoss: false },
|
||||
[MonType.Heavy]: { hp: 1050, ap: 30, cost: 50, isBoss: false },
|
||||
[MonType.Long]: { hp: 240, ap: 45, cost: 40, isBoss: false },
|
||||
[MonType.Support]: { hp: 240, ap: 20, cost: 50, isBoss: false },
|
||||
[MonType.Bomber]: { hp: 180, ap: 80, cost: 35, isBoss: false },
|
||||
[MonType.Summoner]: { hp: 300, ap: 15, cost: 60, isBoss: false },
|
||||
[MonType.Assassin]: { hp: 270, ap: 55, cost: 45, isBoss: false },
|
||||
[MonType.Splitter]: { hp: 450, ap: 20, cost: 55, isBoss: false },
|
||||
[MonType.MeleeBoss]: { hp: 4500, ap: 20, cost: 200, isBoss: true },
|
||||
[MonType.LongBoss]: { hp: 1050, ap: 30, cost: 200, isBoss: true },
|
||||
}
|
||||
|
||||
// ======================== 阶梯(Tier)配置 ========================
|
||||
@@ -399,7 +399,7 @@ export const BlueprintTemplates: BlueprintTemplate[] = [
|
||||
] },
|
||||
|
||||
// ---- MIXED 类 ----
|
||||
{ id: "M1", type: TemplateType.MIXED, tierMin: 2, allowAffix: true,
|
||||
{ id: "M1", type: TemplateType.MIXED, tierMin: 1, allowAffix: true,
|
||||
slots: [
|
||||
{ typePool: [MonType.Melee, MonType.Heavy], countMin: 10, countMax: 15, weight: 0.4 },
|
||||
{ typePool: [MonType.Long], countMin: 5, countMax: 10, weight: 0.3 },
|
||||
@@ -624,7 +624,7 @@ export class RogueSpawningEngine {
|
||||
if (waveNumber === 1) {
|
||||
return this.spawnFromTemplate(
|
||||
BlueprintTemplates.find(t => t.id === "TUTORIAL")!,
|
||||
1, 1
|
||||
1, getTierConfig(1).budget * this.adaptiveFactor
|
||||
)
|
||||
}
|
||||
|
||||
@@ -878,7 +878,7 @@ export class RogueSpawningEngine {
|
||||
|
||||
// 预算利用率检查 (目标 >= 70%)
|
||||
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 type = MonType.Melee
|
||||
const stats = MonsterStats[type]
|
||||
|
||||
Reference in New Issue
Block a user