Files
heros/assets/script/game/common/config/HeroAttrs.ts
walkpan 326ceaf3d1 refactor(config): 优化英雄和技能配置数据结构
- 删除《吸血鬼幸存者》英雄特性分析文档,清理无用参考资料
- 调整技能配置,统一攻击类型枚举命名以AtkedName代替AtkedType
- 新增DType枚举区分物理与魔法攻击类型,丰富技能攻击属性
- 更新基础攻击技能配置,添加攻击类型字段并修正部分技能数据
- 删除heroSet.ts中旧版英雄基础属性和计算逻辑,简化代码结构
- 精简英雄信息定义,修正英雄基础属性和技能配置,改进角色定位说明
- 重新整理怪物角色基础属性和技能,提升数值合理性与一致性
2025-10-24 23:08:20 +08:00

304 lines
12 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { Attrs } from "./SkillSet";
import { HType } from "./heroSet";
/**
* 职业属性增长系数配置
* 定义不同职业类型下,基础属性对战斗属性的差异化转化比例
*/
/**
* 基础属性增长映射接口
*/
export interface BaseAttrGrowthRate {
[targetAttr: number]: number; // 目标属性 -> 增长系数
}
/**
* 职业属性增长配置接口
*/
export interface HeroTypeAttrGrowth {
[baseAttr: number]: BaseAttrGrowthRate; // 基础属性 -> 目标属性增长配置
}
/**
* 职业属性增长配置表
* 体现不同职业的成长特色
*/
export const HeroTypeGrowthConfig: Record<HType, HeroTypeAttrGrowth> = {
// ========== 战士 (Warrior) ==========
// 特点:高生命、高物理攻击、高物理防御
[HType.warrior]: {
[Attrs.STRENGTH]: {
[Attrs.HP_MAX]: 3, // 力量 -> 生命值 (战士系数更高)
[Attrs.AP]: 1.5, // 力量 -> 攻击力 (战士系数更高)
[Attrs.DEF]: 0.8, // 力量 -> 物理防御
},
[Attrs.INTELLIGENCE]: {
[Attrs.MP_MAX]: 0.5, // 智力 -> 魔法值 (战士系数较低)
[Attrs.MAP]: 0.3, // 智力 -> 魔法攻击 (战士不擅长)
},
[Attrs.AGILITY]: {
[Attrs.CRITICAL]: 0.3, // 敏捷 -> 暴击率
[Attrs.DODGE]: 0.2, // 敏捷 -> 闪避 (战士较低)
[Attrs.AS]: 0.2, // 敏捷 -> 攻击速度
},
[Attrs.SPIRIT]: {
[Attrs.MP_MAX]: 0.5, // 精神 -> 魔法值
[Attrs.LIFESTEAL]: 0.4, // 精神 -> 吸血 (战士较高)
[Attrs.MDEF]: 0.3, // 精神 -> 魔法防御
},
[Attrs.LUCK]: {
[Attrs.CRITICAL]: 0.8, // 幸运 -> 暴击率
[Attrs.CRITICAL_DMG]: 0.4, // 幸运 -> 暴击伤害
},
},
// ========== 远程 (Remote) ==========
// 特点:高敏捷、高攻速、高暴击
[HType.remote]: {
[Attrs.STRENGTH]: {
[Attrs.HP_MAX]: 1.5, // 力量 -> 生命值 (远程较低)
[Attrs.AP]: 1.2, // 力量 -> 攻击力
[Attrs.DEF]: 0.4, // 力量 -> 物理防御 (远程较低)
},
[Attrs.INTELLIGENCE]: {
[Attrs.MP_MAX]: 0.8, // 智力 -> 魔法值
[Attrs.MAP]: 0.5, // 智力 -> 魔法攻击
},
[Attrs.AGILITY]: {
[Attrs.CRITICAL]: 0.8, // 敏捷 -> 暴击率 (远程很高)
[Attrs.DODGE]: 0.6, // 敏捷 -> 闪避 (远程较高)
[Attrs.AS]: 0.5, // 敏捷 -> 攻击速度 (远程很高)
[Attrs.SPEED]: 0.3, // 敏捷 -> 移动速度
},
[Attrs.SPIRIT]: {
[Attrs.MP_MAX]: 0.6, // 精神 -> 魔法值
[Attrs.HIT]: 0.5, // 精神 -> 命中 (远程需要精准)
[Attrs.MDEF]: 0.3, // 精神 -> 魔法防御
},
[Attrs.LUCK]: {
[Attrs.CRITICAL]: 1.2, // 幸运 -> 暴击率 (远程最高)
[Attrs.CRITICAL_DMG]: 0.8, // 幸运 -> 暴击伤害 (远程很高)
[Attrs.HIT]: 0.4, // 幸运 -> 命中
},
},
// ========== 法师 (Mage) ==========
// 特点:高魔法攻击、高魔法值、高魔法防御
[HType.mage]: {
[Attrs.STRENGTH]: {
[Attrs.HP_MAX]: 1.2, // 力量 -> 生命值 (法师很低)
[Attrs.AP]: 0.3, // 力量 -> 攻击力 (法师不需要)
},
[Attrs.INTELLIGENCE]: {
[Attrs.MP_MAX]: 2, // 智力 -> 魔法值 (法师最高)
[Attrs.MAP]: 1.8, // 智力 -> 魔法攻击 (法师最高)
[Attrs.MDEF]: 0.8, // 智力 -> 魔法防御
},
[Attrs.AGILITY]: {
[Attrs.CRITICAL]: 0.4, // 敏捷 -> 暴击率
[Attrs.DODGE]: 0.3, // 敏捷 -> 闪避
[Attrs.AS]: 0.3, // 敏捷 -> 攻击速度
},
[Attrs.SPIRIT]: {
[Attrs.MP_MAX]: 1.5, // 精神 -> 魔法值 (法师较高)
[Attrs.MDEF]: 0.8, // 精神 -> 魔法防御 (法师较高)
[Attrs.CON_RES]: 0.3, // 精神 -> 控制抗性
},
[Attrs.LUCK]: {
[Attrs.CRITICAL]: 0.6, // 幸运 -> 暴击率
[Attrs.CRITICAL_DMG]: 0.5, // 幸运 -> 暴击伤害
},
},
// ========== 辅助 (Support) ==========
// 特点:高生命、高魔法值、高抗性、高辅助效果
[HType.support]: {
[Attrs.STRENGTH]: {
[Attrs.HP_MAX]: 2.5, // 力量 -> 生命值 (辅助较高)
[Attrs.AP]: 0.5, // 力量 -> 攻击力 (辅助较低)
[Attrs.DEF]: 0.6, // 力量 -> 物理防御
},
[Attrs.INTELLIGENCE]: {
[Attrs.MP_MAX]: 1.5, // 智力 -> 魔法值 (辅助需要)
[Attrs.MAP]: 0.8, // 智力 -> 魔法攻击
[Attrs.MDEF]: 0.6, // 智力 -> 魔法防御
},
[Attrs.AGILITY]: {
[Attrs.DODGE]: 0.4, // 敏捷 -> 闪避
[Attrs.AS]: 0.3, // 敏捷 -> 攻击速度
[Attrs.SPEED]: 0.4, // 敏捷 -> 移动速度
},
[Attrs.SPIRIT]: {
[Attrs.MP_MAX]: 2, // 精神 -> 魔法值 (辅助很高)
[Attrs.LIFESTEAL]: 0.5, // 精神 -> 吸血
[Attrs.MDEF]: 0.8, // 精神 -> 魔法防御 (辅助较高)
[Attrs.CON_RES]: 0.5, // 精神 -> 控制抗性 (辅助较高)
[Attrs.BUFF_UP]: 0.6, // 精神 -> Buff效果提升 (辅助特色)
},
[Attrs.LUCK]: {
[Attrs.CRITICAL]: 0.5, // 幸运 -> 暴击率
[Attrs.SHIELD_UP]: 0.8, // 幸运 -> 护盾效果提升 (辅助特色)
},
},
// ========== 刺客 (Assassin) ==========
// 特点:超高暴击、高敏捷、高爆发、低防御
[HType.assassin]: {
[Attrs.STRENGTH]: {
[Attrs.HP_MAX]: 1.8, // 力量 -> 生命值 (刺客较低)
[Attrs.AP]: 1.3, // 力量 -> 攻击力
[Attrs.DEF]: 0.3, // 力量 -> 物理防御 (刺客很低)
},
[Attrs.INTELLIGENCE]: {
[Attrs.MP_MAX]: 0.6, // 智力 -> 魔法值
[Attrs.MAP]: 0.4, // 智力 -> 魔法攻击
},
[Attrs.AGILITY]: {
[Attrs.CRITICAL]: 1, // 敏捷 -> 暴击率 (刺客超高)
[Attrs.DODGE]: 0.8, // 敏捷 -> 闪避 (刺客很高)
[Attrs.AS]: 0.6, // 敏捷 -> 攻击速度 (刺客很高)
[Attrs.SPEED]: 0.5, // 敏捷 -> 移动速度 (刺客很高)
},
[Attrs.SPIRIT]: {
[Attrs.MP_MAX]: 0.5, // 精神 -> 魔法值
[Attrs.LIFESTEAL]: 0.6, // 精神 -> 吸血 (刺客较高)
[Attrs.MDEF]: 0.2, // 精神 -> 魔法防御 (刺客很低)
},
[Attrs.LUCK]: {
[Attrs.CRITICAL]: 1.5, // 幸运 -> 暴击率 (刺客超高)
[Attrs.CRITICAL_DMG]: 1, // 幸运 -> 暴击伤害 (刺客超高)
[Attrs.HIT]: 0.3, // 幸运 -> 命中
},
},
};
/**
* 根据职业类型和基础属性,计算其他属性的增长值
* @param heroType 职业类型
* @param baseAttrType 基础属性类型STRENGTH, INTELLIGENCE, AGILITY, SPIRIT, LUCK
* @param baseAttrValue 基础属性点数
* @returns 其他属性的增长值映射表
*
* @example
* // 计算战士职业10点力量的属性增长
* const gains = calculateAttributeGains(HType.warrior, Attrs.STRENGTH, 10);
* // 返回:{ [Attrs.HP_MAX]: 30, [Attrs.AP]: 15, [Attrs.DEF]: 8 }
*/
export function calculateAttributeGains(
heroType: HType,
baseAttrType: Attrs,
baseAttrValue: number
): Partial<Record<Attrs, number>> {
const heroGrowthConfig = HeroTypeGrowthConfig[heroType];
if (!heroGrowthConfig) {
console.warn(`未找到职业类型 ${heroType} 的增长配置`);
return {};
}
const baseAttrGrowth = heroGrowthConfig[baseAttrType];
if (!baseAttrGrowth) {
console.warn(`职业 ${heroType} 不具有基础属性 ${baseAttrType} 的增长配置`);
return {};
}
const result: Partial<Record<Attrs, number>> = {};
for (const targetAttrStr in baseAttrGrowth) {
const targetAttr = Number(targetAttrStr) as Attrs;
const growthRate = baseAttrGrowth[targetAttr];
result[targetAttr] = baseAttrValue * growthRate;
}
return result;
}
/**
* 快捷方法:计算力量属性增长
* @param heroType 职业类型
* @param strengthPoints 力量点数
* @returns 其他属性的增长值
*/
export function addStrength(heroType: HType, strengthPoints: number): Partial<Record<Attrs, number>> {
return calculateAttributeGains(heroType, Attrs.STRENGTH, strengthPoints);
}
/**
* 快捷方法:计算智力属性增长
* @param heroType 职业类型
* @param intelligencePoints 智力点数
* @returns 其他属性的增长值
*/
export function addIntelligence(heroType: HType, intelligencePoints: number): Partial<Record<Attrs, number>> {
return calculateAttributeGains(heroType, Attrs.INTELLIGENCE, intelligencePoints);
}
/**
* 快捷方法:计算敏捷属性增长
* @param heroType 职业类型
* @param agilityPoints 敏捷点数
* @returns 其他属性的增长值
*/
export function addAgility(heroType: HType, agilityPoints: number): Partial<Record<Attrs, number>> {
return calculateAttributeGains(heroType, Attrs.AGILITY, agilityPoints);
}
/**
* 快捷方法:计算精神属性增长
* @param heroType 职业类型
* @param spiritPoints 精神点数
* @returns 其他属性的增长值
*/
export function addSpirit(heroType: HType, spiritPoints: number): Partial<Record<Attrs, number>> {
return calculateAttributeGains(heroType, Attrs.SPIRIT, spiritPoints);
}
/**
* 快捷方法:计算幸运属性增长
* @param heroType 职业类型
* @param luckPoints 幸运点数
* @returns 其他属性的增长值
*/
export function addLuck(heroType: HType, luckPoints: number): Partial<Record<Attrs, number>> {
return calculateAttributeGains(heroType, Attrs.LUCK, luckPoints);
}
/**
* 计算多个基础属性的总增长
* @param heroType 职业类型
* @param baseAttrs 基础属性映射表 { 属性ID: 属性值 }
* @returns 总增长值
*
* @example
* // 计算战士职业的总属性增长
* const totalGains = calculateTotalAttributeGains(HType.warrior, {
* [Attrs.STRENGTH]: 10,
* [Attrs.AGILITY]: 5,
* [Attrs.SPIRIT]: 3
* });
*/
export function calculateTotalAttributeGains(
heroType: HType,
baseAttrs: Partial<Record<Attrs, number>>
): Partial<Record<Attrs, number>> {
const totalGains: Partial<Record<Attrs, number>> = {};
for (const baseAttrStr in baseAttrs) {
const baseAttr = Number(baseAttrStr) as Attrs;
const baseAttrValue = baseAttrs[baseAttr];
if (baseAttrValue === undefined || baseAttrValue <= 0) continue;
const gains = calculateAttributeGains(heroType, baseAttr, baseAttrValue);
for (const targetAttrStr in gains) {
const targetAttr = Number(targetAttrStr) as Attrs;
const gainValue = gains[targetAttr];
if (gainValue !== undefined) {
totalGains[targetAttr] = (totalGains[targetAttr] || 0) + gainValue;
}
}
}
return totalGains;
}