import { Attrs } from "./SkillSet"; import { HType } from "./heroSet"; /** * 职业属性增长系数配置 * 定义不同职业类型下,基础属性对战斗属性的差异化转化比例 */ /** * 基础属性增长映射接口 */ export interface BaseAttrGrowthRate { [targetAttr: number]: number; // 目标属性 -> 增长系数 } /** * 职业属性增长配置接口 */ export interface HeroTypeAttrGrowth { [baseAttr: number]: BaseAttrGrowthRate; // 基础属性 -> 目标属性增长配置 } /** * 职业属性增长配置表 * 体现不同职业的成长特色 */ export const HeroTypeGrowthConfig: Record = { // ========== 战士 (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> { const heroGrowthConfig = HeroTypeGrowthConfig[heroType]; if (!heroGrowthConfig) { console.warn(`未找到职业类型 ${heroType} 的增长配置`); return {}; } const baseAttrGrowth = heroGrowthConfig[baseAttrType]; if (!baseAttrGrowth) { console.warn(`职业 ${heroType} 不具有基础属性 ${baseAttrType} 的增长配置`); return {}; } const result: Partial> = {}; 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> { return calculateAttributeGains(heroType, Attrs.STRENGTH, strengthPoints); } /** * 快捷方法:计算智力属性增长 * @param heroType 职业类型 * @param intelligencePoints 智力点数 * @returns 其他属性的增长值 */ export function addIntelligence(heroType: HType, intelligencePoints: number): Partial> { return calculateAttributeGains(heroType, Attrs.INTELLIGENCE, intelligencePoints); } /** * 快捷方法:计算敏捷属性增长 * @param heroType 职业类型 * @param agilityPoints 敏捷点数 * @returns 其他属性的增长值 */ export function addAgility(heroType: HType, agilityPoints: number): Partial> { return calculateAttributeGains(heroType, Attrs.AGILITY, agilityPoints); } /** * 快捷方法:计算精神属性增长 * @param heroType 职业类型 * @param spiritPoints 精神点数 * @returns 其他属性的增长值 */ export function addSpirit(heroType: HType, spiritPoints: number): Partial> { return calculateAttributeGains(heroType, Attrs.SPIRIT, spiritPoints); } /** * 快捷方法:计算幸运属性增长 * @param heroType 职业类型 * @param luckPoints 幸运点数 * @returns 其他属性的增长值 */ export function addLuck(heroType: HType, luckPoints: number): Partial> { 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> ): Partial> { const totalGains: Partial> = {}; 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; }