refactor(rogue配置): 调整全局词条、等级和蓝图配置
下调多数词条的最低解锁等级,调整各等级预算与生成权重,优化前期游戏节奏
This commit is contained in:
@@ -82,47 +82,47 @@ export interface AffixConfig {
|
||||
export const AffixConfigs: Record<AffixType, AffixConfig> = {
|
||||
[AffixType.Elite]: {
|
||||
name: "精英", hpMultiplier: 1.5, apMultiplier: 1.3,
|
||||
cost: 20, tierMin: 3, description: "+50% HP, +30% AP",
|
||||
cost: 20, tierMin: 2, description: "+50% HP, +30% AP",
|
||||
},
|
||||
[AffixType.Berserk]: {
|
||||
name: "狂暴", hpMultiplier: 1.0, apMultiplier: 1.0,
|
||||
cost: 15, tierMin: 3, description: "攻速 ×1.5 (行为层实现)",
|
||||
cost: 15, tierMin: 2, description: "攻速 ×1.5 (行为层实现)",
|
||||
},
|
||||
[AffixType.Shield]: {
|
||||
name: "护盾", hpMultiplier: 1.0, apMultiplier: 1.0,
|
||||
cost: 25, tierMin: 3, description: "开局带 抵御2次 伤害吸收盾",
|
||||
cost: 25, tierMin: 2, description: "开局带 抵御2次 伤害吸收盾",
|
||||
},
|
||||
[AffixType.Regen]: {
|
||||
name: "再生", hpMultiplier: 1.0, apMultiplier: 1.0,
|
||||
cost: 20, tierMin: 4, description: "每秒回复 2% HP",
|
||||
cost: 20, tierMin: 3, description: "每秒回复 2% HP",
|
||||
},
|
||||
[AffixType.Swift]: {
|
||||
name: "疾速", hpMultiplier: 1.0, apMultiplier: 1.0,
|
||||
cost: 10, tierMin: 4, description: "移速 ×2",
|
||||
cost: 10, tierMin: 3, description: "移速 ×2",
|
||||
},
|
||||
[AffixType.Giant]: {
|
||||
name: "巨型", hpMultiplier: 2.0, apMultiplier: 1.5,
|
||||
cost: 30, tierMin: 4, description: "×2 体型, +100% HP, +50% AP",
|
||||
cost: 30, tierMin: 3, description: "×2 体型, +100% HP, +50% AP",
|
||||
},
|
||||
[AffixType.Chain]: {
|
||||
name: "连锁", hpMultiplier: 1.0, apMultiplier: 1.0,
|
||||
cost: 20, tierMin: 5, description: "攻击附带 50% 溅射伤害",
|
||||
cost: 20, tierMin: 4, description: "攻击附带 50% 溅射伤害",
|
||||
},
|
||||
[AffixType.SummonerA]: {
|
||||
name: "召唤", hpMultiplier: 1.0, apMultiplier: 1.0,
|
||||
cost: 25, tierMin: 5, description: "每 8 秒召唤 1 个小怪",
|
||||
cost: 25, tierMin: 4, description: "每 8 秒召唤 1 个小怪",
|
||||
},
|
||||
[AffixType.CritRes]: {
|
||||
name: "坚韧", hpMultiplier: 1.0, apMultiplier: 1.0,
|
||||
cost: 15, tierMin: 3, description: "+暴击抗性",
|
||||
cost: 15, tierMin: 2, description: "+暴击抗性",
|
||||
},
|
||||
[AffixType.FreezeRes]: {
|
||||
name: "防寒", hpMultiplier: 1.0, apMultiplier: 1.0,
|
||||
cost: 15, tierMin: 3, description: "+冰冻抗性",
|
||||
cost: 15, tierMin: 2, description: "+冰冻抗性",
|
||||
},
|
||||
[AffixType.KnockbackRes]: {
|
||||
name: "稳固", hpMultiplier: 1.0, apMultiplier: 1.0,
|
||||
cost: 15, tierMin: 3, description: "+击退抗性",
|
||||
cost: 15, tierMin: 2, description: "+击退抗性",
|
||||
},
|
||||
}
|
||||
|
||||
@@ -252,11 +252,11 @@ const MAJOR_BOSS_TIERS = new Set([3, 5])
|
||||
* 主线 15 波映射:wave 1-3 → T1, wave 4-6 → T2, ..., wave 13-15 → T5
|
||||
*/
|
||||
export const TierConfigs: Record<number, TierConfig> = {
|
||||
1: { multiplier: 1.0, budget: 300, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long], isBossTier: false },
|
||||
2: { multiplier: 2.0, budget: 800, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long, MonType.Support], isBossTier: true },
|
||||
3: { multiplier: 3.5, budget: 1800, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long, MonType.Support, MonType.Assassin], isBossTier: true },
|
||||
4: { multiplier: 5.5, budget: 3200, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long, MonType.Support, MonType.Assassin, MonType.Summoner], isBossTier: true },
|
||||
5: { multiplier: 8.5, budget: 5200, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long, MonType.Support, MonType.Assassin, MonType.Summoner], isBossTier: true },
|
||||
1: { multiplier: 1.0, budget: 200, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long], isBossTier: false },
|
||||
2: { multiplier: 2.0, budget: 500, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long, MonType.Support], isBossTier: true },
|
||||
3: { multiplier: 3.5, budget: 1100, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long, MonType.Support, MonType.Assassin], isBossTier: true },
|
||||
4: { multiplier: 5.5, budget: 2000, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long, MonType.Support, MonType.Assassin, MonType.Summoner], isBossTier: true },
|
||||
5: { multiplier: 8.5, budget: 3200, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long, MonType.Support, MonType.Assassin, MonType.Summoner], isBossTier: true },
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -293,7 +293,7 @@ export function getTierConfig(tier: number): TierConfig {
|
||||
* 最终概率 = baseAffixChance × roleMultiplier
|
||||
*/
|
||||
export const BaseAffixChance: Record<number, number> = {
|
||||
1: 0, 2: 0, 3: 0.15, 4: 0.30, 5: 0.50,
|
||||
1: 0, 2: 0.10, 3: 0.25, 4: 0.40, 5: 0.60,
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -362,96 +362,96 @@ export interface BlueprintTemplate {
|
||||
*/
|
||||
export const BlueprintTemplates: BlueprintTemplate[] = [
|
||||
{ id: "R1", type: TemplateType.REST, tierMin: 1, allowAffix: false,
|
||||
slots: [{ typePool: [MonType.Melee], countMin: 3, countMax: 5, weight: 1.0 }] },
|
||||
slots: [{ typePool: [MonType.Melee], countMin: 2, countMax: 3, weight: 1.0 }] },
|
||||
{ id: "R2", type: TemplateType.REST, tierMin: 2, allowAffix: false,
|
||||
slots: [{ typePool: [MonType.Melee, MonType.Heavy], countMin: 4, countMax: 6, weight: 1.0 }] },
|
||||
slots: [{ typePool: [MonType.Melee, MonType.Heavy], countMin: 2, countMax: 4, weight: 1.0 }] },
|
||||
{ id: "R3", type: TemplateType.REST, tierMin: 3, allowAffix: false,
|
||||
slots: [{ typePool: [MonType.Melee, MonType.Long], countMin: 5, countMax: 8, weight: 1.0 }] },
|
||||
slots: [{ typePool: [MonType.Melee, MonType.Long], countMin: 3, countMax: 5, weight: 1.0 }] },
|
||||
|
||||
{ id: "N1", type: TemplateType.NORMAL, tierMin: 1, allowAffix: false,
|
||||
slots: [{ typePool: [MonType.Melee], countMin: 3, countMax: 5, weight: 1.0 }] },
|
||||
{ id: "N2", type: TemplateType.NORMAL, tierMin: 1, allowAffix: false,
|
||||
slots: [{ typePool: [MonType.Melee], countMin: 2, countMax: 3, weight: 1.0 }] },
|
||||
{ id: "N2", type: TemplateType.NORMAL, tierMin: 1, allowAffix: true,
|
||||
slots: [
|
||||
{ typePool: [MonType.Melee], countMin: 2, countMax: 4, weight: 0.6 },
|
||||
{ typePool: [MonType.Long], countMin: 1, countMax: 3, weight: 0.4 },
|
||||
{ typePool: [MonType.Melee], countMin: 1, countMax: 3, weight: 0.6 },
|
||||
{ typePool: [MonType.Long], countMin: 1, countMax: 2, weight: 0.4 },
|
||||
] },
|
||||
{ id: "N3", type: TemplateType.NORMAL, tierMin: 2, allowAffix: true,
|
||||
slots: [
|
||||
{ typePool: [MonType.Melee, MonType.Heavy], countMin: 3, countMax: 7, weight: 0.5 },
|
||||
{ typePool: [MonType.Long], countMin: 2, countMax: 5, weight: 0.3 },
|
||||
{ typePool: [MonType.Support], countMin: 1, countMax: 3, weight: 0.2 },
|
||||
{ typePool: [MonType.Melee, MonType.Heavy], countMin: 2, countMax: 4, weight: 0.5 },
|
||||
{ typePool: [MonType.Long], countMin: 1, countMax: 3, weight: 0.3 },
|
||||
{ typePool: [MonType.Support], countMin: 1, countMax: 2, weight: 0.2 },
|
||||
] },
|
||||
{ id: "N4", type: TemplateType.NORMAL, tierMin: 3, allowAffix: true,
|
||||
slots: [
|
||||
{ typePool: [MonType.Melee, MonType.Heavy], countMin: 4, countMax: 8, weight: 0.4 },
|
||||
{ typePool: [MonType.Long, MonType.Assassin], countMin: 3, countMax: 6, weight: 0.3 },
|
||||
{ typePool: [MonType.Support], countMin: 2, countMax: 4, weight: 0.3 },
|
||||
{ typePool: [MonType.Melee, MonType.Heavy], countMin: 3, countMax: 5, weight: 0.4 },
|
||||
{ typePool: [MonType.Long, MonType.Assassin], countMin: 2, countMax: 4, weight: 0.3 },
|
||||
{ typePool: [MonType.Support], countMin: 1, countMax: 2, weight: 0.3 },
|
||||
] },
|
||||
|
||||
{ id: "M1", type: TemplateType.MIXED, tierMin: 1, allowAffix: true,
|
||||
slots: [
|
||||
{ typePool: [MonType.Melee, MonType.Heavy], countMin: 3, countMax: 5, weight: 0.4 },
|
||||
{ typePool: [MonType.Long], countMin: 2, countMax: 3, weight: 0.3 },
|
||||
{ typePool: [MonType.Support], countMin: 1, countMax: 2, weight: 0.3 },
|
||||
{ typePool: [MonType.Melee, MonType.Heavy], countMin: 2, countMax: 3, weight: 0.4 },
|
||||
{ typePool: [MonType.Long], countMin: 1, countMax: 2, weight: 0.3 },
|
||||
{ typePool: [MonType.Support], countMin: 1, countMax: 1, weight: 0.3 },
|
||||
] },
|
||||
{ id: "M2", type: TemplateType.MIXED, tierMin: 3, allowAffix: true,
|
||||
{ id: "M2", type: TemplateType.MIXED, tierMin: 2, allowAffix: true,
|
||||
slots: [
|
||||
{ typePool: [MonType.Melee, MonType.Heavy], countMin: 5, countMax: 8, weight: 0.3 },
|
||||
{ typePool: [MonType.Long, MonType.Assassin], countMin: 3, countMax: 6, weight: 0.3 },
|
||||
{ typePool: [MonType.Support], countMin: 2, countMax: 4, weight: 0.4 },
|
||||
{ typePool: [MonType.Melee, MonType.Heavy], countMin: 3, countMax: 5, weight: 0.3 },
|
||||
{ typePool: [MonType.Long, MonType.Assassin], countMin: 2, countMax: 4, weight: 0.3 },
|
||||
{ typePool: [MonType.Support], countMin: 1, countMax: 2, weight: 0.4 },
|
||||
] },
|
||||
{ id: "M3", type: TemplateType.MIXED, tierMin: 4, allowAffix: true,
|
||||
{ id: "M3", type: TemplateType.MIXED, tierMin: 3, allowAffix: true,
|
||||
slots: [
|
||||
{ typePool: [MonType.Melee, MonType.Heavy], countMin: 6, countMax: 10, weight: 0.3 },
|
||||
{ typePool: [MonType.Long, MonType.Assassin], countMin: 4, countMax: 7, weight: 0.3 },
|
||||
{ typePool: [MonType.Summoner], countMin: 2, countMax: 3, weight: 0.2 },
|
||||
{ typePool: [MonType.Support], countMin: 2, countMax: 4, weight: 0.2 },
|
||||
{ typePool: [MonType.Melee, MonType.Heavy], countMin: 3, countMax: 6, weight: 0.3 },
|
||||
{ typePool: [MonType.Long, MonType.Assassin], countMin: 2, countMax: 4, weight: 0.3 },
|
||||
{ typePool: [MonType.Summoner], countMin: 1, countMax: 2, weight: 0.2 },
|
||||
{ typePool: [MonType.Support], countMin: 1, countMax: 2, weight: 0.2 },
|
||||
] },
|
||||
|
||||
{ id: "E1", type: TemplateType.ELITE, tierMin: 3, allowAffix: true,
|
||||
{ id: "E1", type: TemplateType.ELITE, tierMin: 2, allowAffix: true,
|
||||
slots: [
|
||||
{ typePool: [MonType.Heavy], countMin: 2, countMax: 4, weight: 0.5, forceAffix: true },
|
||||
{ typePool: [MonType.Long, MonType.Assassin], countMin: 2, countMax: 5, weight: 0.5, forceAffix: true },
|
||||
{ typePool: [MonType.Heavy], countMin: 1, countMax: 3, weight: 0.5, forceAffix: true },
|
||||
{ typePool: [MonType.Long, MonType.Assassin], countMin: 1, countMax: 3, weight: 0.5, forceAffix: true },
|
||||
] },
|
||||
{ id: "E2", type: TemplateType.ELITE, tierMin: 4, allowAffix: true,
|
||||
{ id: "E2", type: TemplateType.ELITE, tierMin: 3, allowAffix: true,
|
||||
slots: [
|
||||
{ typePool: [MonType.Heavy], countMin: 2, countMax: 4, weight: 0.3, forceAffix: true },
|
||||
{ typePool: [MonType.Assassin], countMin: 3, countMax: 5, weight: 0.4, forceAffix: true },
|
||||
{ typePool: [MonType.Support], countMin: 2, countMax: 3, weight: 0.3, forceAffix: true },
|
||||
{ typePool: [MonType.Heavy], countMin: 1, countMax: 3, weight: 0.3, forceAffix: true },
|
||||
{ typePool: [MonType.Assassin], countMin: 2, countMax: 3, weight: 0.4, forceAffix: true },
|
||||
{ typePool: [MonType.Support], countMin: 1, countMax: 2, weight: 0.3, forceAffix: true },
|
||||
] },
|
||||
|
||||
{ id: "B1", type: TemplateType.BOSS, tierMin: 2, allowAffix: true,
|
||||
slots: [
|
||||
{ typePool: [MonType.MeleeBoss], countMin: 1, countMax: 1, weight: 1.0 },
|
||||
{ typePool: [MonType.Melee], countMin: 4, countMax: 6, weight: 0.5 },
|
||||
{ typePool: [MonType.Long], countMin: 2, countMax: 4, weight: 0.3 },
|
||||
{ typePool: [MonType.Support], countMin: 1, countMax: 2, weight: 0.2 },
|
||||
{ typePool: [MonType.Melee], countMin: 2, countMax: 4, weight: 0.5 },
|
||||
{ typePool: [MonType.Long], countMin: 1, countMax: 2, weight: 0.3 },
|
||||
{ typePool: [MonType.Support], countMin: 1, countMax: 1, weight: 0.2 },
|
||||
] },
|
||||
{ id: "B2", type: TemplateType.BOSS, tierMin: 2, allowAffix: true,
|
||||
slots: [
|
||||
{ typePool: [MonType.MeleeBoss], countMin: 1, countMax: 1, weight: 1.0 },
|
||||
{ typePool: [MonType.Melee, MonType.Heavy], countMin: 5, countMax: 8, weight: 0.5 },
|
||||
{ typePool: [MonType.Long, MonType.Support], countMin: 3, countMax: 5, weight: 0.3 },
|
||||
{ typePool: [MonType.Assassin], countMin: 1, countMax: 3, weight: 0.2 },
|
||||
{ typePool: [MonType.Melee, MonType.Heavy], countMin: 3, countMax: 5, weight: 0.5 },
|
||||
{ typePool: [MonType.Long, MonType.Support], countMin: 1, countMax: 3, weight: 0.3 },
|
||||
{ typePool: [MonType.Assassin], countMin: 1, countMax: 2, weight: 0.2 },
|
||||
] },
|
||||
{ id: "B3", type: TemplateType.BOSS, tierMin: 3, allowAffix: true,
|
||||
slots: [
|
||||
{ typePool: [MonType.MeleeBoss, MonType.LongBoss], countMin: 1, countMax: 1, weight: 1.0 },
|
||||
{ typePool: [MonType.Melee, MonType.Heavy], countMin: 5, countMax: 8, weight: 0.35 },
|
||||
{ typePool: [MonType.Long, MonType.Assassin], countMin: 3, countMax: 6, weight: 0.35 },
|
||||
{ typePool: [MonType.Support], countMin: 2, countMax: 4, weight: 0.3 },
|
||||
{ typePool: [MonType.Melee, MonType.Heavy], countMin: 3, countMax: 5, weight: 0.35 },
|
||||
{ typePool: [MonType.Long, MonType.Assassin], countMin: 2, countMax: 4, weight: 0.35 },
|
||||
{ typePool: [MonType.Support], countMin: 1, countMax: 2, weight: 0.3 },
|
||||
] },
|
||||
{ id: "B4", type: TemplateType.BOSS, tierMin: 4, allowAffix: true,
|
||||
slots: [
|
||||
{ typePool: [MonType.MeleeBoss, MonType.LongBoss], countMin: 1, countMax: 1, weight: 1.0 },
|
||||
{ typePool: [MonType.Heavy], countMin: 4, countMax: 7, weight: 0.35 },
|
||||
{ typePool: [MonType.Assassin], countMin: 3, countMax: 5, weight: 0.3 },
|
||||
{ typePool: [MonType.Summoner, MonType.Support], countMin: 2, countMax: 5, weight: 0.2 },
|
||||
{ typePool: [MonType.Melee], countMin: 3, countMax: 6, weight: 0.15 },
|
||||
{ typePool: [MonType.Heavy], countMin: 2, countMax: 4, weight: 0.35 },
|
||||
{ typePool: [MonType.Assassin], countMin: 2, countMax: 3, weight: 0.3 },
|
||||
{ typePool: [MonType.Summoner, MonType.Support], countMin: 1, countMax: 3, weight: 0.2 },
|
||||
{ typePool: [MonType.Melee], countMin: 2, countMax: 4, weight: 0.15 },
|
||||
] },
|
||||
|
||||
{ id: "TUTORIAL", type: TemplateType.NORMAL, tierMin: 1, allowAffix: false,
|
||||
slots: [{ typePool: [MonType.Melee], countMin: 3, countMax: 3, weight: 1.0 }] },
|
||||
slots: [{ typePool: [MonType.Melee], countMin: 2, countMax: 2, weight: 1.0 }] },
|
||||
]
|
||||
|
||||
// ======================== 自适应难度配置 ========================
|
||||
|
||||
Reference in New Issue
Block a user