refactor(config): 优化英雄和技能配置数据结构

- 删除《吸血鬼幸存者》英雄特性分析文档,清理无用参考资料
- 调整技能配置,统一攻击类型枚举命名以AtkedName代替AtkedType
- 新增DType枚举区分物理与魔法攻击类型,丰富技能攻击属性
- 更新基础攻击技能配置,添加攻击类型字段并修正部分技能数据
- 删除heroSet.ts中旧版英雄基础属性和计算逻辑,简化代码结构
- 精简英雄信息定义,修正英雄基础属性和技能配置,改进角色定位说明
- 重新整理怪物角色基础属性和技能,提升数值合理性与一致性
This commit is contained in:
2025-10-24 23:08:20 +08:00
parent 2cf554b124
commit 326ceaf3d1
8 changed files with 895 additions and 555 deletions

View File

@@ -0,0 +1,303 @@
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;
}