diff --git a/.trae/documents/塔防1-20级四选一成长系统设计.md b/.trae/documents/塔防1-20级四选一成长系统设计.md index c2d48f5a..cc5ff795 100644 --- a/.trae/documents/塔防1-20级四选一成长系统设计.md +++ b/.trae/documents/塔防1-20级四选一成长系统设计.md @@ -49,7 +49,7 @@ export const TD_OPTION_CONFIG: Record = { // 控制与特效 (统一配置) [Attrs.STUN_CHANCE]: { base: 1.5, grow: 0.05, desc: "眩晕概率 +{val}%", totalNote: "+40%" }, // ... 其他控制类同上 - [Attrs.PIERCE]: { base: 1, grow: 0, desc: "穿透 +{val}", totalNote: "+20" }, + [Attrs.PUNCTURE]: { base: 1, grow: 0, desc: "穿透 +{val}", totalNote: "+20" }, }; // 辅助函数 diff --git a/.trae/documents/超休闲塔防属性精简与落地方案.md b/.trae/documents/超休闲塔防属性精简与落地方案.md index 3cae63d1..34d7fefa 100644 --- a/.trae/documents/超休闲塔防属性精简与落地方案.md +++ b/.trae/documents/超休闲塔防属性精简与落地方案.md @@ -30,7 +30,7 @@ export const TD_ENABLED_ATTRS: ReadonlySet = new Set([ Attrs.AP, Attrs.AS, Attrs.DIS, - Attrs.PIERCE, + Attrs.PUNCTURE, Attrs.CRITICAL, Attrs.CRITICAL_DMG, Attrs.HP_MAX, @@ -44,7 +44,7 @@ export const TD_OPTIONAL_ATTRS: ReadonlySet = new Set([ ]); export const TD_ATTR_GROUPS = { - towerCore: [Attrs.AP, Attrs.AS, Attrs.DIS, Attrs.PIERCE], + towerCore: [Attrs.AP, Attrs.AS, Attrs.DIS, Attrs.PUNCTURE], towerBonus: [Attrs.CRITICAL, Attrs.CRITICAL_DMG], enemyCore: [Attrs.HP_MAX, Attrs.DEF], optional: [Attrs.SLOW_CHANCE, Attrs.GOLD_GAIN, Attrs.DMG_RED], diff --git a/assets/script/Design.md b/assets/script/Design.md index 54194c92..06bcd308 100644 --- a/assets/script/Design.md +++ b/assets/script/Design.md @@ -54,7 +54,7 @@ | 妨害状态 | 冻结(FREEZE_CHANCE) +6% | 中毒(POISON_CHANCE) +8% | 燃烧(BURN_CHANCE) +8% | +6–8% | 中期 | 面向清杂、溃散,触发期望受控 | | 蓝量循环 | 蓝上限(MP_MAX) +10% | 蓝回复(MP_REGEN) +15% | 吸蓝(MANASTEAL) +6% | +10–15% | 早中期 | 技能密度稳定来源,支撑法系 | | 续航强化 | 吸血(LIFESTEAL) +6% | 治疗效果(HEAL_EFFECT) +12% | 护盾效果(SHIELD_UP) +12% | +6–12% | 中后期 | 对应不同生存风格,数值递减避免堆满 | -| 稳定系 | 命中(HIT) +10% | 控抗(CON_RES) +10% | 暴抗(CRITICAL_RESIST) +10% | +8–10% | 中后期 | 降低波动,克制高暴击/高控敌群 | +| 稳定系 | 命中(HIT) +10% | 控抗(CON_RES) +10% | 暴抗(CRITICAL_RES) +10% | +8–10% | 中后期 | 降低波动,克制高暴击/高控敌群 | | 经济成长 | 经验(EXP_GAIN) +10% | 金币(GOLD_GAIN) +10% | 掉落(DROP_CHANCE) +8% | +8–10% | 转场期 | 低战力节点给经济,避免战斗失衡 | | 复活保障 | 复活次数(REVIVE_COUNT) +1 | 无敌时间(INVINCIBLE_TIME) +1s | 复活时间(REVIVE_TIME) -10% | +1 / +1s / -10% | 后期 | 高压波次救命,不与关键天赋冲突 | | 元素对抗 | 物抗(PHYS_RES) +10% | 魔抗(MAGIC_RES) +10% | 物伤加成(PHYS_POWER) +8% | +8–10% | 中后期 | 根据敌群构成动态出现 | diff --git a/assets/script/Design4.md.meta b/assets/script/Design4.csv.meta similarity index 72% rename from assets/script/Design4.md.meta rename to assets/script/Design4.csv.meta index 8137ba38..a9cd65db 100644 --- a/assets/script/Design4.md.meta +++ b/assets/script/Design4.csv.meta @@ -2,7 +2,7 @@ "ver": "1.0.1", "importer": "text", "imported": true, - "uuid": "e59e8d19-308d-42c8-9fae-7faaa767d57b", + "uuid": "cbe20048-4b53-4d88-a84d-f856214e902d", "files": [ ".json" ], diff --git a/assets/script/Design4_monsters.md.meta b/assets/script/Design4_monsters.md.meta new file mode 100644 index 00000000..e395bb71 --- /dev/null +++ b/assets/script/Design4_monsters.md.meta @@ -0,0 +1,11 @@ +{ + "ver": "1.0.1", + "importer": "text", + "imported": true, + "uuid": "2eccd2f0-0d28-44bd-b2c0-603ffe1f4dce", + "files": [ + ".json" + ], + "subMetas": {}, + "userData": {} +} diff --git a/assets/script/game/common/SingletonModuleComp.ts b/assets/script/game/common/SingletonModuleComp.ts index 462fb45c..a0b9d056 100644 --- a/assets/script/game/common/SingletonModuleComp.ts +++ b/assets/script/game/common/SingletonModuleComp.ts @@ -4,7 +4,6 @@ import { Initialize } from "../initialize/Initialize"; import { GameMap } from "../map/GameMap"; import { oops } from "../../../../extensions/oops-plugin-framework/assets/core/Oops"; import { WxCloudApi } from "../wx_clound_client_api/WxCloudApi"; -import { Test } from "./Test"; import { GameEvent } from "./config/GameEvent"; /** * 用远程数据覆盖本地数据(统一方法) diff --git a/assets/script/game/common/config/HeroAttrs.ts b/assets/script/game/common/config/HeroAttrs.ts index bc717cc8..b4ce41ad 100644 --- a/assets/script/game/common/config/HeroAttrs.ts +++ b/assets/script/game/common/config/HeroAttrs.ts @@ -1,5 +1,3 @@ -import * as exp from "constants"; -import { HType } from "./heroSet"; /** * Buff类型枚举 @@ -31,45 +29,27 @@ export enum Attrs { SHIELD_MAX = 2, // 最大护盾值 HP_REGEN = 3, // 生命回复 MP_REGEN = 4, // 魔法回复 - HEAL_EFFECT = 5, // 治疗效果 // ========== 攻击属性 (10-19) ========== AP = 10, // 攻击力 - MAP = 11, // 魔法攻击力 DIS = 12, // 攻击距离 AS = 13, // 攻击速度(减少技能skills[0]CD) SS = 14, // 技能速度 (减少skills[0] 以外的cd) SKILL_DURATION = 15, // 技能持续时间 AREA_OF_EFFECT = 16, // 作用范围 - PIERCE = 17, // 穿透次数 // ========== 防御属性 (20-29) ========== - DEF = 20, // 物理防御 - MDEF = 21, // 魔法防御 + DEF = 20, // 防御 伤害减免 DODGE = 22, // 闪避率 - BLOCK = 23, // 格挡率 - DMG_RED = 24, // 伤害减免 THORNS = 25, // 反伤 - CRITICAL_RESIST = 26, // 暴击抗性 + CRITICAL_RES = 26, // 暴击抗性 CON_RES = 27, // 控制抗性 // ========== 暴击与命中属性 (30-39) ========== CRITICAL = 30, // 暴击率 CRITICAL_DMG = 31, // 暴击伤害 HIT = 32, // 命中率 - - // ========== 元素属性 (40-49) ========== - ICE_RES = 40, // 冰冻抗性 - FIRE_RES = 41, // 火焰抗性 - WIND_RES = 42, // 自然抗性 - PHYS_RES = 43, // 物理抗性 - MAGIC_RES = 44, // 魔法抗性 - ICE_POWER = 45, // 冰冻伤害加成 - FIRE_POWER = 46, // 火焰伤害加成 - WIND_POWER = 47, // 自然伤害加成 - PHYS_POWER = 48, // 物理伤害加成 - MAGIC_POWER= 49, - + // ========== 特殊效果属性 (50-59) ========== LIFESTEAL = 50, // 吸血比率 @@ -105,10 +85,6 @@ export enum Attrs { // ========== 负面状态相关 (80-89) ========== DMG_INVUL = 80, //易伤 // ========== 基础属性(影响其他属性) (90-99)========== - STRENGTH = 90, // 力量(影响物理相关) - INTELLIGENCE = 91, // 智力(影响魔法相关) - AGILITY = 92, // 敏捷(影响速度和闪避) - SPIRIT = 93, // 精神(影响抗性和特殊效果) LUCK = 94, // 幸运(影响暴击和特殊概率) } @@ -154,45 +130,29 @@ export const AttrsType: Record = { [Attrs.SHIELD_MAX]: BType.VALUE, // 最大护盾值 - 数值型 [Attrs.HP_REGEN]: BType.VALUE, // 生命回复 - 数值型 [Attrs.MP_REGEN]: BType.VALUE, // 魔法回复 - 数值型 - [Attrs.HEAL_EFFECT]: BType.RATIO, // 治疗效果 - 百分比型 // ========== 攻击属性(数值型) ========== [Attrs.AP]: BType.VALUE, // 攻击力 - 数值型 - [Attrs.MAP]: BType.VALUE, // 魔法攻击力 - 数值型 [Attrs.DIS]: BType.VALUE, // 攻击距离 - 数值型 [Attrs.AS]: BType.RATIO, // 攻击速度 - 百分比型 [Attrs.SS]: BType.RATIO, // 技能速度 - 百分比型 [Attrs.SKILL_DURATION]: BType.RATIO, // 技能持续时间 - 百分比型 [Attrs.AREA_OF_EFFECT]: BType.VALUE, // 作用范围 - 数值型 - [Attrs.PIERCE]: BType.VALUE, // 穿透次数 - 数值型 // ========== 防御属性(混合类型) ========== [Attrs.DEF]: BType.VALUE, // 物理防御 - 数值型 - [Attrs.MDEF]: BType.VALUE, // 魔法防御 - 数值型 [Attrs.DODGE]: BType.RATIO, // 闪避率 - 百分比型 - [Attrs.BLOCK]: BType.RATIO, // 格挡率 - 百分比型 - [Attrs.DMG_RED]: BType.RATIO, // 伤害减免 - 百分比型 [Attrs.THORNS]: BType.RATIO, // 反伤 - 百分比型 // ========== 暴击与命中属性(百分比型) ========== [Attrs.CRITICAL]: BType.RATIO, // 暴击率 - 百分比型 [Attrs.CRITICAL_DMG]: BType.RATIO, // 暴击伤害 - 百分比型 [Attrs.HIT]: BType.RATIO, // 命中率 - 百分比型 - [Attrs.CRITICAL_RESIST]: BType.RATIO, // 暴击抗性 - 百分比型 + [Attrs.CRITICAL_RES]: BType.RATIO, // 暴击抗性 - 百分比型 [Attrs.CON_RES]: BType.RATIO, // 控制抗性 - 百分比型 - // ========== 元素属性(百分比型) ========== - [Attrs.ICE_RES]: BType.RATIO, // 冰冻抗性 - 百分比型 - [Attrs.FIRE_RES]: BType.RATIO, // 火焰抗性 - 百分比型 - [Attrs.WIND_RES]: BType.RATIO, // 风抗性 - 百分比型 - [Attrs.PHYS_RES]: BType.RATIO, // 物理抗性 - 百分比型 - [Attrs.MAGIC_RES]:BType.RATIO, - [Attrs.ICE_POWER]: BType.RATIO, // 冰冻伤害加成 - 百分比型 - [Attrs.FIRE_POWER]: BType.RATIO, // 火焰伤害加成 - 百分比型 - [Attrs.WIND_POWER]: BType.RATIO, // 风伤害加成 - 百分比型 - [Attrs.PHYS_POWER]: BType.RATIO, // 物理伤害加成 - 百分比型 - [Attrs.MAGIC_POWER]: BType.RATIO, // 物理伤害加成 - 百分比型 + // ========== 特殊效果属性(百分比型) ========== [Attrs.LIFESTEAL]: BType.RATIO, // 吸血比率 - 百分比型 @@ -230,10 +190,6 @@ export const AttrsType: Record = { [Attrs.DMG_INVUL]: BType.RATIO, //易伤 // ========== 基础属性(数值型) ========== - [Attrs.STRENGTH]: BType.VALUE, // 力量 - 数值型 - [Attrs.INTELLIGENCE]: BType.VALUE, // 智力 - 数值型 - [Attrs.AGILITY]: BType.VALUE, // 敏捷 - 数值型 - [Attrs.SPIRIT]: BType.VALUE, // 精神 - 数值型 [Attrs.LUCK]: BType.VALUE, // 幸运 - 数值型 }; @@ -246,306 +202,4 @@ export const isRatioAttr = (attrType: Attrs): boolean => { return AttrsType[attrType] === BType.RATIO; }; -/** - * 职业属性增长系数配置 - * 定义不同职业类型下,基础属性对战斗属性的差异化转化比例 - */ -/** - * 基础属性增长映射接口 - */ -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.HP_REGEN]: 0.2, // 精神 -> 生命回复 - [Attrs.MP_REGEN]: 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.AREA_OF_EFFECT]: 0.3, // 智力 -> 作用范围 - }, - [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; -} diff --git a/assets/script/game/common/config/SkillSet.ts b/assets/script/game/common/config/SkillSet.ts index e327a57c..57d8e5d1 100644 --- a/assets/script/game/common/config/SkillSet.ts +++ b/assets/script/game/common/config/SkillSet.ts @@ -153,57 +153,57 @@ interface IEndAnm { // 技能配置接口 - 按照6001格式排列 export interface SkillConfig { uuid:number,name:string,sp_name:string,icon:string,TGroup:TGroup,SType:SType,act:string,DTType:DTType,DType:DType, - ap:number,map:number,cd:number,t_num:number,hit_num:number,hit:number,hitcd:number,speed:number,cost:number,with:number,dis:Number,ready:number,EAnm:number,DAnm:number,RType:RType,EType:EType, + ap:number,cd:number,t_num:number,hit_num:number,hit:number,hitcd:number,speed:number,cost:number,with:number,dis:Number,ready:number,EAnm:number,DAnm:number,RType:RType,EType:EType, buffs:BuffConf[],neAttrs:NeAttrsConf[],info:string,hero?:number , } export const SkillSet: Record = { 5000:{uuid:5000,name:"反伤",sp_name:"thorns",icon:"3036",TGroup:TGroup.Enemy,SType:SType.damage,act:"atk",DTType:DTType.single,DType:DType.ATK, - ap:0,map:0,cd:60,t_num:1,hit_num:1,hit:1,hitcd:0.2,speed:720,cost:0,with:0,dis:80, + ap:0,cd:60,t_num:1,hit_num:1,hit:1,hitcd:0.2,speed:720,cost:0,with:0,dis:80, ready:0,EAnm:0,DAnm:9001,RType:RType.fixed,EType:EType.animationEnd, buffs:[],neAttrs:[],info:"反伤", }, // ========== 基础攻击 ========== 6001-6099 6001: { uuid:6001,name:"挥击",sp_name:"atk_s1",icon:"3036",TGroup:TGroup.Enemy,SType:SType.damage,act:"atk",DTType:DTType.single,DType:DType.ATK, - ap:100,map:0,cd:1,t_num:1,hit_num:1,hit:1,hitcd:0.2,speed:720,cost:10,with:0,dis:80, + ap:100,cd:1,t_num:1,hit_num:1,hit:1,hitcd:0.2,speed:720,cost:10,with:0,dis:80, ready:0,EAnm:0,DAnm:9001,RType:RType.fixed,EType:EType.animationEnd, buffs:[],neAttrs:[],info:"向最前方敌人扔出石斧,造成100%攻击的伤害", }, 6002: { uuid:6002,name:"挥砍",sp_name:"atk_s4",icon:"3036",TGroup:TGroup.Enemy,SType:SType.damage,act:"atk",DTType:DTType.single,DType:DType.ATK, - ap:100,map:0,cd:1,t_num:1,hit_num:1,hit:1,hitcd:0.2,speed:720,cost:10,with:0,dis:80, + ap:100,cd:1,t_num:1,hit_num:1,hit:1,hitcd:0.2,speed:720,cost:10,with:0,dis:80, ready:0,EAnm:0,DAnm:9001,RType:RType.fixed,EType:EType.animationEnd, buffs:[],neAttrs:[],info:"向最前方敌人扔出石斧,造成100%攻击的伤害", }, 6005: { uuid:6005,name:"水球",sp_name:"m_water_ball_1",icon:"3039",TGroup:TGroup.Enemy,SType:SType.damage,act:"atk",DTType:DTType.single,DType:DType.ICE, - ap:100,map:0,cd:5,t_num:1,hit_num:1,hit:2,hitcd:0.3,speed:720,cost:0,with:90,dis:360, + ap:100,cd:5,t_num:1,hit_num:1,hit:2,hitcd:0.3,speed:720,cost:0,with:90,dis:360, ready:8001,EAnm:0,DAnm:9001,RType:RType.linear,EType:EType.collision, buffs:[],neAttrs:[],info:"召唤水球攻击前方敌人,造成100%魔法攻击的伤害", }, // ========== 基础buff ========== 6100-6199 6100: { uuid:6100,name:"治疗",sp_name:"buff_wind",icon:"3036",TGroup:TGroup.Self,SType:SType.heal,act:"atk",DTType:DTType.single,DType:DType.ATK, - ap:30,map:0,cd:5,t_num:1,hit_num:1,hit:1,hitcd:0.2,speed:720,cost:10,with:0,dis:720, + ap:30,cd:5,t_num:1,hit_num:1,hit:1,hitcd:0.2,speed:720,cost:10,with:0,dis:720, ready:0,EAnm:0,DAnm:9001,RType:RType.fixed,EType:EType.animationEnd, buffs:[],neAttrs:[],info:"治疗自己,回复30%最大生命值", }, 6101:{ uuid:6101,name:"魔法盾",sp_name:"buff_wind",icon:"3036",TGroup:TGroup.Self,SType:SType.shield,act:"atk",DTType:DTType.single,DType:DType.WIND, - ap:30,map:0,cd:7,t_num:1,hit_num:1,hit:1,hitcd:0.2,speed:720,cost:10,with:0,dis:720, + ap:30,cd:7,t_num:1,hit_num:1,hit:1,hitcd:0.2,speed:720,cost:10,with:0,dis:720, ready:0,EAnm:0,DAnm:9001,RType:RType.fixed,EType:EType.animationEnd, buffs:[],neAttrs:[],info:"获得30%最大生命值的护盾,持续60秒", }, 6102:{ uuid:6102,name:"强壮",sp_name:"buff_wind",icon:"3036",TGroup:TGroup.Team,SType:SType.buff,act:"atk",DTType:DTType.single,DType:DType.WIND, - ap:30,map:0,cd:10,t_num:1,hit_num:1,hit:1,hitcd:0.2,speed:720,cost:10,with:0,dis:720, + ap:30,cd:10,t_num:1,hit_num:1,hit:1,hitcd:0.2,speed:720,cost:10,with:0,dis:720, ready:0,EAnm:0,DAnm:9001,RType:RType.fixed,EType:EType.animationEnd, buffs:[{buff:Attrs.AP,BType:BType.VALUE,value:10,time:30,chance:1}],neAttrs:[],info:"增加目标10%攻击力,持续30秒", }, 6103:{ uuid:6103,name:"群体强壮",sp_name:"buff_wind",icon:"3036",TGroup:TGroup.Team,SType:SType.buff,act:"atk",DTType:DTType.range,DType:DType.WIND, - ap:30,map:0,cd:10,t_num:3,hit_num:1,hit:1,hitcd:0.2,speed:720,cost:10,with:0,dis:720, + ap:30,cd:10,t_num:3,hit_num:1,hit:1,hitcd:0.2,speed:720,cost:10,with:0,dis:720, ready:0,EAnm:0,DAnm:9001,RType:RType.fixed,EType:EType.animationEnd, buffs:[{buff:Attrs.AP,BType:BType.RATIO,value:10,time:30,chance:1}],neAttrs:[],info:"增加目标10%攻击力,持续30秒", }, @@ -211,7 +211,7 @@ export const SkillSet: Record = { 6201: { uuid:6201, name:"怪物近战", sp_name:"atk_s1", icon:"3036", TGroup:TGroup.Enemy, SType:SType.damage, act:"atk", DTType:DTType.single, DType:DType.ATK, - ap:100, map:0, cd:1, t_num:1, hit_num:1, hit:1, hitcd:0.2, speed:0, cost:0, with:0, + ap:100, cd:1, t_num:1, hit_num:1, hit:1, hitcd:0.2, speed:0, cost:0, with:0, dis:50, // 近战距离 ready:0, EAnm:0, DAnm:9001, RType:RType.fixed, EType:EType.animationEnd, buffs:[], neAttrs:[], info:"怪物基础近战攻击", @@ -219,7 +219,7 @@ export const SkillSet: Record = { 6203: { uuid:6203, name:"怪物射击", sp_name:"arrow_1", icon:"3039", TGroup:TGroup.Enemy, SType:SType.damage, act:"atk", DTType:DTType.single, DType:DType.ATK, - ap:80, map:0, cd:2, t_num:1, hit_num:1, hit:1, hitcd:0.2, speed:800, cost:0, with:0, + ap:80, cd:2, t_num:1, hit_num:1, hit:1, hitcd:0.2, speed:800, cost:0, with:0, dis:600, // 远程距离 ready:0, EAnm:0, DAnm:9001, RType:RType.linear, EType:EType.collision, buffs:[], neAttrs:[], info:"怪物基础远程攻击", diff --git a/assets/script/game/common/config/TDEnabledAttrs.ts b/assets/script/game/common/config/TDEnabledAttrs.ts index d4fff57b..9a8c6c20 100644 --- a/assets/script/game/common/config/TDEnabledAttrs.ts +++ b/assets/script/game/common/config/TDEnabledAttrs.ts @@ -4,7 +4,6 @@ export const TD_ENABLED_ATTRS: ReadonlySet = new Set([ Attrs.AP, Attrs.AS, Attrs.DIS, - Attrs.PIERCE, Attrs.CRITICAL, Attrs.CRITICAL_DMG, Attrs.HP_MAX, @@ -20,14 +19,13 @@ export const TD_ENABLED_ATTRS: ReadonlySet = new Set([ export const TD_OPTIONAL_ATTRS: ReadonlySet = new Set([ Attrs.GOLD_GAIN, - Attrs.DMG_RED, ]); export const TD_ATTR_GROUPS = { - towerCore: [Attrs.AP, Attrs.AS, Attrs.DIS, Attrs.PIERCE], + towerCore: [Attrs.AP, Attrs.AS, Attrs.DIS], towerBonus: [Attrs.CRITICAL, Attrs.CRITICAL_DMG], enemyCore: [Attrs.HP_MAX, Attrs.DEF], - optional: [Attrs.GOLD_GAIN, Attrs.DMG_RED], + optional: [Attrs.GOLD_GAIN], control: [Attrs.FREEZE_CHANCE, Attrs.BURN_CHANCE, Attrs.STUN_CHANCE, Attrs.BACK_CHANCE, Attrs.SLOW_CHANCE], sustain: [Attrs.LIFESTEAL, Attrs.MANASTEAL], } as const; diff --git a/assets/script/game/common/config/TDLevelOptions.ts b/assets/script/game/common/config/TDLevelOptions.ts index de4f116a..7c5afb07 100644 --- a/assets/script/game/common/config/TDLevelOptions.ts +++ b/assets/script/game/common/config/TDLevelOptions.ts @@ -26,7 +26,7 @@ export const LEVEL_OPTIONS_TABLE: Record = { { attr: Attrs.AS, value: 5.25, showValue: 5.25, weight: 100, desc: "攻击速度 +5.25%", isSpecial: false, note: "常规强化" }, ], 3: [ - { attr: Attrs.PIERCE, value: 1, showValue: 1, weight: 50, desc: "穿透数量 +1", isSpecial: true, note: "上限5层" }, + { attr: Attrs.PUNCTURE, value: 1, showValue: 1, weight: 50, desc: "穿透数量 +1", isSpecial: true, note: "上限5层" }, { attr: Attrs.CRITICAL, value: 14, showValue: 14, weight: 50, desc: "暴击率 +14%", isSpecial: true, note: "上限70%" }, { attr: Attrs.CRITICAL_DMG, value: 40, showValue: 40, weight: 50, desc: "暴击伤害 +40%", isSpecial: true, note: "上限200%" }, { attr: Attrs.STUN_CHANCE, value: 10, showValue: 10, weight: 30, desc: "眩晕概率 +10%", isSpecial: true, note: "上限50%" }, @@ -47,7 +47,7 @@ export const LEVEL_OPTIONS_TABLE: Record = { // 无强化等级 ], 6: [ - { attr: Attrs.PIERCE, value: 1, showValue: 1, weight: 50, desc: "穿透数量 +1", isSpecial: true, note: "上限5层" }, + { attr: Attrs.PUNCTURE, value: 1, showValue: 1, weight: 50, desc: "穿透数量 +1", isSpecial: true, note: "上限5层" }, { attr: Attrs.CRITICAL, value: 14, showValue: 14, weight: 50, desc: "暴击率 +14%", isSpecial: true, note: "上限70%" }, { attr: Attrs.CRITICAL_DMG, value: 40, showValue: 40, weight: 50, desc: "暴击伤害 +40%", isSpecial: true, note: "上限200%" }, { attr: Attrs.STUN_CHANCE, value: 10, showValue: 10, weight: 30, desc: "眩晕概率 +10%", isSpecial: true, note: "上限50%" }, @@ -71,7 +71,7 @@ export const LEVEL_OPTIONS_TABLE: Record = { { attr: Attrs.AS, value: 6.75, showValue: 6.75, weight: 100, desc: "攻击速度 +6.75%", isSpecial: false, note: "常规强化" }, ], 9: [ - { attr: Attrs.PIERCE, value: 1, showValue: 1, weight: 50, desc: "穿透数量 +1", isSpecial: true, note: "上限5层" }, + { attr: Attrs.PUNCTURE, value: 1, showValue: 1, weight: 50, desc: "穿透数量 +1", isSpecial: true, note: "上限5层" }, { attr: Attrs.CRITICAL, value: 14, showValue: 14, weight: 50, desc: "暴击率 +14%", isSpecial: true, note: "上限70%" }, { attr: Attrs.CRITICAL_DMG, value: 40, showValue: 40, weight: 50, desc: "暴击伤害 +40%", isSpecial: true, note: "上限200%" }, { attr: Attrs.STUN_CHANCE, value: 10, showValue: 10, weight: 30, desc: "眩晕概率 +10%", isSpecial: true, note: "上限50%" }, @@ -92,7 +92,7 @@ export const LEVEL_OPTIONS_TABLE: Record = { { attr: Attrs.AS, value: 7.5, showValue: 7.5, weight: 100, desc: "攻击速度 +7.5%", isSpecial: false, note: "常规强化" }, ], 12: [ - { attr: Attrs.PIERCE, value: 1, showValue: 1, weight: 50, desc: "穿透数量 +1", isSpecial: true, note: "上限5层" }, + { attr: Attrs.PUNCTURE, value: 1, showValue: 1, weight: 50, desc: "穿透数量 +1", isSpecial: true, note: "上限5层" }, { attr: Attrs.CRITICAL, value: 14, showValue: 14, weight: 50, desc: "暴击率 +14%", isSpecial: true, note: "上限70%" }, { attr: Attrs.CRITICAL_DMG, value: 40, showValue: 40, weight: 50, desc: "暴击伤害 +40%", isSpecial: true, note: "上限200%" }, { attr: Attrs.STUN_CHANCE, value: 10, showValue: 10, weight: 30, desc: "眩晕概率 +10%", isSpecial: true, note: "上限50%" }, @@ -131,7 +131,7 @@ export const LEVEL_OPTIONS_TABLE: Record = { { attr: Attrs.AS, value: 9, showValue: 9, weight: 100, desc: "攻击速度 +9%", isSpecial: false, note: "常规强化" }, ], 18: [ - { attr: Attrs.PIERCE, value: 1, showValue: 1, weight: 50, desc: "穿透数量 +1", isSpecial: true, note: "上限5层" }, + { attr: Attrs.PUNCTURE, value: 1, showValue: 1, weight: 50, desc: "穿透数量 +1", isSpecial: true, note: "上限5层" }, { attr: Attrs.CRITICAL, value: 14, showValue: 14, weight: 50, desc: "暴击率 +14%", isSpecial: true, note: "上限70%" }, { attr: Attrs.CRITICAL_DMG, value: 40, showValue: 40, weight: 50, desc: "暴击伤害 +40%", isSpecial: true, note: "上限200%" }, { attr: Attrs.STUN_CHANCE, value: 10, showValue: 10, weight: 30, desc: "眩晕概率 +10%", isSpecial: true, note: "上限50%" }, diff --git a/assets/script/game/common/config/TalSet.ts b/assets/script/game/common/config/TalSet.ts index c2f8a882..d3ae199b 100644 --- a/assets/script/game/common/config/TalSet.ts +++ b/assets/script/game/common/config/TalSet.ts @@ -21,7 +21,7 @@ export enum TriType { export enum TalEffet { ATK_DMG=1, // 伤害 次数+伤害加成,如额外5次 伤害+20% SKILL_DMG=2, // 技能伤害 次数+伤害加成,如额外5次 伤害+20% - DMG_RED=10, // 减伤 次数+减伤加成,如额外5次 伤害-20% + DEF=10, // 减伤 次数+减伤加成,如额外5次 伤害-20% THORNS=14, //反伤 百分比 次数+反伤加成,如额外5次 反伤-20% /////////////////////////////////////////////////////////////////////// HP=3, // 回血 百分比 直接触发,回血20% @@ -52,7 +52,6 @@ export enum TalAttrs { SILENCE_CHANCE=Attrs.SILENCE_CHANCE, // 沉默概率 CRITICAL=Attrs.CRITICAL, // 暴击率 AP=Attrs.AP, // 攻击力 - MP=Attrs.MAP, // 魔法攻击力 } /** * 天赋配置接口 @@ -116,7 +115,7 @@ export const talConf: Record = { desc:"被攻击3次后, 给于目标50%的伤害"}, 7102:{uuid:7102,name:"护盾",triType:TriType.DMG,Trigger:3,count:1,target:TalTarget.SELF,effet:TalEffet.SHIELD,vType:BType.RATIO, value:20,attrs:TalAttrs.NON, desc:"被攻击3次后, 获得20%的生命值护盾"}, - 7103:{uuid:7103,name:"减伤",triType:TriType.DMG,Trigger:3,count:1,target:TalTarget.ENEMY,effet:TalEffet.DMG_RED,vType:BType.RATIO, value:50,attrs:TalAttrs.NON, + 7103:{uuid:7103,name:"减伤",triType:TriType.DMG,Trigger:3,count:1,target:TalTarget.ENEMY,effet:TalEffet.DEF,vType:BType.RATIO, value:50,attrs:TalAttrs.NON, desc:"被攻击3次后, 下1次伤害减50%"}, diff --git a/assets/script/game/common/config/heroSet.ts b/assets/script/game/common/config/heroSet.ts index 18dbdd02..b291f54c 100644 --- a/assets/script/game/common/config/heroSet.ts +++ b/assets/script/game/common/config/heroSet.ts @@ -77,18 +77,14 @@ export enum HeroConf{ MAX_HP=200, MAX_MP=200, MAX_AP=20, - MAX_MAP=20, MAX_DEF=20, - MAX_MDEF=20, } export const getPreAttr = (uuid:number)=>{ let hp=HeroInfo[uuid].hp/HeroConf.MAX_HP let mp=HeroInfo[uuid].mp/HeroConf.MAX_MP let ap=HeroInfo[uuid].ap/HeroConf.MAX_AP - let map=HeroInfo[uuid].map/HeroConf.MAX_MAP let def=HeroInfo[uuid].def/HeroConf.MAX_DEF - let mdef=HeroInfo[uuid].mdef/HeroConf.MAX_MDEF - return {hp:hp,mp:mp,ap:ap,map:map,def:def,mdef:mdef} + return {hp:hp,mp:mp,ap:ap,def:def} } export enum HeroUpSet { MP=5, @@ -101,7 +97,7 @@ export enum HeroUpSet { export interface heroInfo{ uuid:number, name:string, path:string,fac:FacSet,kind:number,type:HType, as:number, - hp:number,mp:number, ap:number,map:number, def:number,mdef:number,dis:number, speed:number,lv:number,skills:number[], + hp:number,mp:number, ap:number, def:number,dis:number, speed:number,lv:number,skills:number[], buff:BuffConf[], tal:number[], info:string } @@ -110,37 +106,37 @@ export const HeroInfo: Record = { // 刘邦 - 领导型战士(善于用人,知人善任) 5001:{uuid:5001,name:"刘邦",path:"hk1", fac:FacSet.HERO, kind:1,as:1.5, - type:HType.warrior,lv:1,hp:200,mp:200,map:0,def:9,mdef:0,ap:15,dis:100,speed:120,skills:[6001,6100,6101,6102], + type:HType.warrior,lv:1,hp:200,mp:200,def:9,ap:15,dis:100,speed:120,skills:[6001,6100,6101,6102], buff:[],tal:[7101,7201,7301],info:"楚汉争霸领袖,领导统御型战士"}, // 荆轲 - 刺客(敏捷型,高速度和暴击率) 5002:{uuid:5002,name:"荆轲",path:"hc1", fac:FacSet.HERO, kind:1,as:1.5, - type:HType.assassin,lv:1,hp:80,mp:60,map:0,def:3,mdef:0,ap:22,dis:120,speed:180,skills:[6002,6001], + type:HType.assassin,lv:1,hp:80,mp:60,def:3,ap:22,dis:120,speed:180,skills:[6002,6001], buff:[],tal:[7201],info:"战国刺客,刺杀专精敏捷型刺客"}, // 赵武灵王 - 远程射手(胡服骑射,机动型高移动速度和远程攻击) 5005:{uuid:5005,name:"赵武灵王",path:"ha1", fac:FacSet.HERO, kind:2,as:1.5, - type:HType.remote,lv:1,hp:100,mp:80,map:0,def:6,mdef:0,ap:18,dis:450,speed:140,skills:[6002,6001], + type:HType.remote,lv:1,hp:100,mp:80,def:6,ap:18,dis:450,speed:140,skills:[6002,6001], buff:[],tal:[7002],info:"胡服骑射改革者,机动型高远程输出"}, // 张良 - 智谋法师(运筹帷幄,智谋型法师) 5007:{uuid:5007,name:"张良",path:"hh1", fac:FacSet.HERO, kind:2,as:1.5, - type:HType.mage,lv:1,hp:88,mp:135,map:0,def:5,mdef:0,ap:15,dis:350,speed:100,skills:[6002,6001], + type:HType.mage,lv:1,hp:88,mp:135,def:5,ap:15,dis:350,speed:100,skills:[6002,6001], buff:[],tal:[7004],info:"运筹帷幄谋士,智谋型法师"}, // 屈原 - 元素法师(离骚诗韵,元素型高魔法输出) 5008:{uuid:5008,name:"屈原",path:"hm1", fac:FacSet.HERO, kind:2,as:1.5, - type:HType.mage,lv:1,hp:85,mp:140,map:0,def:4,mdef:0,ap:16,dis:400,speed:90,skills:[6002,6001], + type:HType.mage,lv:1,hp:85,mp:140,def:4,ap:16,dis:400,speed:90,skills:[6002,6001], buff:[],tal:[7101],info:"离骚诗韵,元素型高魔法输出"}, // 孙膑 - 谋略法师(兵法谋略,谋略型法师) 5009:{uuid:5009,name:"孙膑",path:"hm2", fac:FacSet.HERO, kind:2,as:1.5, - type:HType.mage,lv:1,hp:92,mp:135,map:0,def:6,mdef:0,ap:14,dis:420,speed:95,skills:[6002,6001], + type:HType.mage,lv:1,hp:92,mp:135,def:6,ap:14,dis:420,speed:95,skills:[6002,6001], buff:[],tal:[7202],info:"兵法谋略,谋略型法师"}, // 萧何 - 后勤辅助(后勤保障,后勤型辅助) 5010:{uuid:5010,name:"萧何",path:"hz1", fac:FacSet.HERO, kind:2,as:1.5, - type:HType.support,lv:1,hp:115,mp:145,map:0,def:10,mdef:0,ap:8,dis:380,speed:105,skills:[6002,6001], + type:HType.support,lv:1,hp:115,mp:145,def:10,ap:8,dis:380,speed:105,skills:[6002,6001], buff:[],tal:[7006],info:"后勤保障,后勤型辅助"}, @@ -149,79 +145,78 @@ export const HeroInfo: Record = { //怪物 5201:{uuid:5201,name:"兽人战士",path:"mo1", fac:FacSet.MON, kind:1,as:3, - type:HType.warrior,lv:1,hp:30,mp:100,map:0,def:5,mdef:0,ap:5,dis:90,speed:100,skills:[6005], + type:HType.warrior,lv:1,hp:30,mp:100,def:5,ap:5,dis:90,speed:100,skills:[6005], buff:[],tal:[],info:"普通怪物-战士型"}, 5202:{uuid:5202,name:"兽人刺客",path:"mo1", fac:FacSet.MON, kind:1,as:3, - type:HType.remote,lv:1,hp:20,mp:100,map:0,def:5,mdef:0,ap:5,dis:90,speed:150,skills:[6005], + type:HType.remote,lv:1,hp:20,mp:100,def:5,ap:5,dis:90,speed:150,skills:[6005], buff:[],tal:[],info:"普通怪物-战士型"}, 5203:{uuid:5203,name:"兽人护卫",path:"mo1", fac:FacSet.MON, kind:1,as:3, - type:HType.warrior,lv:1,hp:60,mp:100,map:0,def:5,mdef:0,ap:5,dis:90,speed:100,skills:[6005], + type:HType.warrior,lv:1,hp:60,mp:100,def:5,ap:5,dis:90,speed:100,skills:[6005], buff:[],tal:[],info:"普通怪物-战士型"}, // 1. 基础近战型 5204:{uuid:5204,name:"蝙蝠",path:"mo1", fac:FacSet.MON, kind:1,as:3, - type:HType.warrior,lv:1,hp:15,mp:100,map:0,def:0,mdef:0,ap:5,dis:50,speed:200,skills:[6201], + type:HType.warrior,lv:1,hp:15,mp:100,def:0,ap:5,dis:50,speed:200,skills:[6201], buff:[],tal:[],info:"高速飞行单位,血量极低,快速接近"}, 5205:{uuid:5205,name:"骷髅",path:"mo1", fac:FacSet.MON, kind:1,as:3, - type:HType.warrior,lv:1,hp:40,mp:100,map:0,def:3,mdef:0,ap:7,dis:50,speed:100,skills:[6201], + type:HType.warrior,lv:1,hp:40,mp:100,def:3,ap:7,dis:50,speed:100,skills:[6201], buff:[],tal:[],info:"标准近战单位,基准数值"}, // 2. 快速突击型 5206:{uuid:5206,name:"石像鬼",path:"mo1", fac:FacSet.MON, kind:1,as:3, - type:HType.assassin,lv:1,hp:25,mp:100,map:0,def:3,mdef:0,ap:8,dis:50,speed:250,skills:[6201], + type:HType.assassin,lv:1,hp:25,mp:100,def:3,ap:8,dis:50,speed:250,skills:[6201], buff:[],tal:[],info:"速度极快,快速切入,给玩家压迫感"}, 5207:{uuid:5207,name:"快速骷髅",path:"mo1", fac:FacSet.MON, kind:1,as:3, - type:HType.assassin,lv:1,hp:22,mp:100,map:0,def:2,mdef:0,ap:7,dis:80,speed:200,skills:[6005], + type:HType.assassin,lv:1,hp:22,mp:100,def:2,ap:7,dis:80,speed:200,skills:[6005], buff:[],tal:[],info:"快速突击型:高速直线冲锋,接触伤害;高速、低血、成群出现"}, // 3. 重型坦克型 5208:{uuid:5208,name:"大型骷髅",path:"mo1", fac:FacSet.MON, kind:1,as:3, - type:HType.warrior,lv:1,hp:300,mp:100,map:0,def:10,mdef:0,ap:15,dis:50,speed:60,skills:[6201], + type:HType.warrior,lv:1,hp:300,mp:100,def:10,ap:15,dis:50,speed:60,skills:[6201], buff:[],tal:[],info:"重装单位,移动缓慢但极难被击杀"}, 5209:{uuid:5209,name:"树人",path:"mo1", fac:FacSet.MON, kind:1,as:3, - type:HType.warrior,lv:1,hp:160,mp:100,map:0,def:12,mdef:0,ap:12,dis:90,speed:80,skills:[6005], + type:HType.warrior,lv:1,hp:160,mp:100,def:12,ap:12,dis:90,speed:80,skills:[6005], buff:[],tal:[],info:"重型坦克型:缓慢逼近,高血量,中等伤害"}, // 4. 远程骚扰型 5210:{uuid:5210,name:"骷髅弓手",path:"mo1", fac:FacSet.MON, kind:1,as:3, - type:HType.remote,lv:1,hp:35,mp:100,map:0,def:2,mdef:0,ap:10,dis:600,speed:80,skills:[6203], + type:HType.remote,lv:1,hp:35,mp:100,def:2,ap:10,dis:600,speed:80,skills:[6203], buff:[],tal:[],info:"远程单位,在远处进行骚扰攻击"}, 5211:{uuid:5211,name:"法师骷髅",path:"mo1", fac:FacSet.MON, kind:1,as:3, - type:HType.mage,lv:1,hp:55,mp:100,map:25,def:4,mdef:5,ap:10,dis:80,speed:105,skills:[6005], + type:HType.mage,lv:1,hp:55,mp:100,def:4,ap:10,dis:80,speed:105,skills:[6005], buff:[],tal:[],info:"远程骚扰型:保持距离释放法术弹幕,逼迫玩家走位"}, // 5. 特殊机制型 5212:{uuid:5212,name:"炸弹骷髅",path:"mo1", fac:FacSet.MON, kind:1,as:3, - type:HType.assassin,lv:1,hp:30,mp:100,map:0,def:3,mdef:0,ap:25,dis:50,speed:130,skills:[6201], + type:HType.assassin,lv:1,hp:30,mp:100,def:3,ap:25,dis:50,speed:130,skills:[6201], buff:[],tal:[],info:"特殊机制:接近玩家后造成高额伤害,需优先击杀"}, // 6. 精英/BOSS型 5213:{uuid:5213,name:"亡灵领主(精英)",path:"mo1", fac:FacSet.MON, kind:1,as:3, - type:HType.warrior,lv:3,hp:200,mp:100,map:0,def:10,mdef:5,ap:20,dis:100,speed:110,skills:[6005], + type:HType.warrior,lv:3,hp:200,mp:100,def:10,ap:20,dis:100,speed:110,skills:[6005], buff:[],tal:[],info:"精英/BOSS:高血量与独特机制,波次高潮与重要经验来源"}, // 5. 特殊机制扩展 // 召唤师:持续召唤小怪(后续可在技能系统中实现 SType.zhaohuan) 5214:{uuid:5214,name:"死灵法师(召唤师)",path:"mo1", fac:FacSet.MON, kind:1,as:3, - type:HType.mage,lv:1,hp:90,mp:160,map:0,def:4,mdef:6,ap:8,dis:380,speed:100,skills:[6005], + type:HType.mage,lv:1,hp:90,mp:160,def:4,ap:8,dis:380,speed:100,skills:[6005], buff:[],tal:[],info:"特殊机制:持续召唤小怪,需优先击杀"}, // 治疗者:为周围怪物回血(此处以提升治疗效果和生命回复为基础被动) - // Attrs.HEAL_EFFECT=5 (RATIO=1),Attrs.HP_REGEN=3 (VALUE=0) 5215:{uuid:5215,name:"祭司(治疗者)",path:"mo1", fac:FacSet.MON, kind:1,as:3, - type:HType.support,lv:1,hp:100,mp:160,map:0,def:5,mdef:8,ap:6,dis:90,speed:105,skills:[6005], + type:HType.support,lv:1,hp:100,mp:160,def:5,ap:6,dis:90,speed:105,skills:[6005], buff:[],tal:[],info:"特殊机制:为周围怪物提供治疗增益与持续回复"}, // 光环怪:为周围怪物提供增益(此处以Buff效果提升与移动速度提升为基础被动) // Attrs.BUFF_UP=60 (RATIO=1),Attrs.SPEED=63 (RATIO=1) 5216:{uuid:5216,name:"光环幽灵(光环怪)",path:"mo1", fac:FacSet.MON, kind:1,as:3, - type:HType.support,lv:1,hp:85,mp:140,map:0,def:4,mdef:7,ap:7,dis:90,speed:110,skills:[6005], + type:HType.support,lv:1,hp:85,mp:140,def:4,ap:7,dis:90,speed:110,skills:[6005], buff:[],tal:[],info:"特殊机制:为周围怪物提供增益光环,加速与增益效果强化"}, }; \ No newline at end of file diff --git a/assets/script/game/hero/HeroAtkSystem.ts b/assets/script/game/hero/HeroAtkSystem.ts index fa0800d8..37549c85 100644 --- a/assets/script/game/hero/HeroAtkSystem.ts +++ b/assets/script/game/hero/HeroAtkSystem.ts @@ -100,7 +100,7 @@ export class HeroAtkSystem extends ecs.ComblockSystem implements ecs.ISystemUpd * - CRITICAL_DMG: 暴击伤害加成 * - BACK_CHANCE: 击退概率 * - HIT: 命中率(用于闪避计算) - * - AP/MAP: 攻击力(基础伤害计算) + * - AP 攻击力(基础伤害计算) * * ✅ 正确使用被攻击者属性(TAttrsComp - 实时): * - DODGE: 闪避率(用于闪避计算) @@ -147,8 +147,8 @@ export class HeroAtkSystem extends ecs.ComblockSystem implements ecs.ISystemUpd return reDate; } // 暴击判定 - // 使用施法者的暴击率属性(damageEvent.Attrs 快照),- 被攻击者的暴击抗性属性TAttrsComp.Attrs[Attrs.CRITICAL_RESIST] - const isCrit = this.checkChance(damageEvent.Attrs[Attrs.CRITICAL]-TAttrsComp.Attrs[Attrs.CRITICAL_RESIST]); + // 使用施法者的暴击率属性(damageEvent.Attrs 快照),- 被攻击者的暴击抗性属性TAttrsComp.Attrs[Attrs.CRITICAL_RES] + const isCrit = this.checkChance(damageEvent.Attrs[Attrs.CRITICAL]-TAttrsComp.Attrs[Attrs.CRITICAL_RES]); // 计算基础伤害 let damage = this.dmgCount(damageEvent,TAttrsComp); if (this.debugMode) console.log("[HeroAtkSystem] dmgCount",damage) @@ -237,18 +237,12 @@ export class HeroAtkSystem extends ecs.ComblockSystem implements ecs.ISystemUpd /** * 详细伤害计算核心方法 * - * 这是整个战斗系统中最核心的伤害计算方法,负责根据施法者属性、目标属性和技能配置 - * 计算最终的基础伤害值。该方法采用多阶段的伤害计算公式,综合考虑了物理和魔法伤害 - * 以及各种属性加成和抗性减免。 - * + * 计算流程: * 1. 获取技能配置 - * 2. 计算原始物理伤害和魔法伤害 - * 3. 应用防御减免 - * 4. 应用物理/魔法攻击力和抗性修正 - * 5. 应用元素属性加成和抗性修正 - * 6. 应用最终伤害减免 - * 7. 确保伤害值非负 + * 2. 计算原始物理伤害 + * 3. 应用最终伤害减免 + * 4. 确保伤害值非负 * * @param CAttrs 施法者属性快照对象,包含所有攻击力、属性加成等战斗属性 * @param TAttrs 目标属性对象,包含所有防御力、抗性等防御属性 @@ -256,9 +250,7 @@ export class HeroAtkSystem extends ecs.ComblockSystem implements ecs.ISystemUpd * @returns 经过完整计算后的最终伤害值(未考虑暴击) * * @important 注意事项: - * - 此方法计算的是基础伤害,暴击计算在外部处理 - * - 所有除法和乘法计算后都进行取整操作,确保游戏中的伤害值为整数 - * - 元素伤害只应用于魔法伤害部分 + */ private dmgCount(damageEvent:DamageEvent,TAttrsComp:HeroAttrsComp){ // 1. 获取技能配置 - 如果技能不存在,直接返回0伤害 @@ -270,58 +262,15 @@ export class HeroAtkSystem extends ecs.ComblockSystem implements ecs.ISystemUpd // 2. 计算原始物理伤害和魔法伤害 // 物理伤害基础值 = 技能物理倍率 * (施法者物理攻击力 + 额外伤害) / 100 * 额外伤害比例 let apBase = (sConf.ap||0)*(CAttrs[Attrs.AP]+damageEvent.ext_dmg)/100*damageEvent.dmg_ratio; - // 魔法伤害基础值 = 技能魔法倍率 * (施法者魔法攻击力 + 额外伤害) / 100 * 额外伤害比例 - let mapBase = (sConf.map||0)*(CAttrs[Attrs.MAP]+damageEvent.ext_dmg)/100*damageEvent.dmg_ratio; - if (this.debugMode) console.log(`[HeroAtkSystem] 物理伤害基础值: ${apBase}, 技能ap=${sConf.ap},施法者物理攻击力: ${CAttrs[Attrs.AP]}, 魔法伤害基础值: ${mapBase}技能map=${sConf.map} + if (this.debugMode) console.log(`[HeroAtkSystem] 物理伤害基础值: ${apBase}, 技能ap=${sConf.ap},施法者物理攻击力: ${CAttrs[Attrs.AP]},} 额外伤害:${damageEvent.ext_dmg}, 额外伤害比例:${damageEvent.dmg_ratio}`); - - // 3. 获取目标防御属性 - const def = (TAttrs[Attrs.DEF]||0); // 目标物理防御 - const mdef = (TAttrs[Attrs.MDEF]||0); // 目标魔法防御 - - // 4. 计算防御减免系数(采用公式:防御/(防御+常数),确保防御值不会导致伤害减到0) - const apRed = def / (def + FightSet.DEF_C); // 物理防御减免系数 - const mapRed = mdef / (mdef + FightSet.MDEF_C); // 魔法防御减免系数 - - // 5. 应用防御减免到基础伤害,向下取整 - let apAfter = Math.floor(apBase * (1 - apRed)); // 物理伤害 - 防御减免 - let mapAfter = Math.floor(mapBase * (1 - mapRed)); // 魔法伤害 - 防御减免 - - if (this.debugMode) console.log(`[HeroAtkSystem] 物理伤害基础值: ${apBase}, 物理伤害 - 防御减免: ${apAfter} 魔法伤害基础值: ${mapBase}, 魔法伤害 - 防御减免: ${mapAfter}`); - - // 6. 应用物理/魔法攻击力和抗性修正 - // 物理伤害修正:基础伤害 * (1 + 物理攻击力加成%) * (1 - 目标物理抗性%) - apAfter = this.applyPR(apAfter, CAttrs[Attrs.PHYS_POWER]||0, TAttrs[Attrs.PHYS_RES]||0); - // 魔法伤害修正:基础伤害 * (1 + 魔法攻击力加成%) * (1 - 目标魔法抗性%) - mapAfter = this.applyPR(mapAfter, CAttrs[Attrs.MAGIC_POWER]||0, TAttrs[Attrs.MAGIC_RES]||0); - if (this.debugMode) console.log(`[HeroAtkSystem] 物理伤害修正后: ${apAfter} 魔法伤害修正后: ${mapAfter} `); - - // 7. 根据技能元素类型,应用元素属性加成和抗性修正 - switch (sConf.DType) { - case DType.ICE: - // 冰系伤害修正:魔法伤害 * (1 + 冰系攻击力加成%) * (1 - 目标冰系抗性%) - mapAfter = this.applyPR(mapAfter, CAttrs[Attrs.ICE_POWER]||0, TAttrs[Attrs.ICE_RES]||0); - break; - case DType.FIRE: - // 火系伤害修正:魔法伤害 * (1 + 火系攻击力加成%) * (1 - 目标火系抗性%) - mapAfter = this.applyPR(mapAfter, CAttrs[Attrs.FIRE_POWER]||0, TAttrs[Attrs.FIRE_RES]||0); - break; - case DType.WIND: - // 风系伤害修正:魔法伤害 * (1 + 风系攻击力加成%) * (1 - 目标风系抗性%) - mapAfter = this.applyPR(mapAfter, CAttrs[Attrs.WIND_POWER]||0, TAttrs[Attrs.WIND_RES]||0); - break; - } - if (this.debugMode) console.log(`[HeroAtkSystem] 物理伤害修正后: ${apAfter} 元素伤害修正后: ${mapAfter}`); - - // 8. 计算最终总伤害(物理伤害 + 魔法伤害) - let total = apAfter + mapAfter; - //9.1 易伤 + //3.1 易伤 let DMG_INVUL = TAttrs[Attrs.DMG_INVUL]||0 - //9.2 免伤 属性免伤+天赋免伤 - let DMG_RED =TAttrs[Attrs.DMG_RED]||0+TAttrsComp.useCountValTal(Attrs.DMG_RED); - // 10. 确保伤害值非负,返回最终伤害 - total = Math.max(0,total); - //11. 易伤减免 免伤属性免伤+天赋免伤 + //3.2 免伤 属性免伤+天赋免伤 + let DMG_RED =TAttrs[Attrs.DEF]||0+TAttrsComp.useCountValTal(Attrs.DEF); + //4. 确保伤害值非负,返回最终伤害 + let total = Math.max(0,apBase); + //5. 易伤减免 免伤属性免伤+天赋免伤 total = Math.floor(total * (1 + ((DMG_INVUL-DMG_RED)/100))); if (this.debugMode) console.log(`[HeroAtkSystem] 易伤减免后: ${total}`); return Math.max(0,total); diff --git a/assets/script/game/hero/HeroAttrsComp.ts b/assets/script/game/hero/HeroAttrsComp.ts index aad13dd9..3edae113 100644 --- a/assets/script/game/hero/HeroAttrsComp.ts +++ b/assets/script/game/hero/HeroAttrsComp.ts @@ -305,7 +305,6 @@ export class HeroAttrsComp extends ecs.Comp { break; case Attrs.DEF: case Attrs.AP: - case Attrs.MAP: this.Attrs[attrIndex] = Math.max(1, this.Attrs[attrIndex]); break; case Attrs.CRITICAL: diff --git a/assets/script/game/hero/Mon.ts b/assets/script/game/hero/Mon.ts index c35d3898..6fc00e2e 100644 --- a/assets/script/game/hero/Mon.ts +++ b/assets/script/game/hero/Mon.ts @@ -71,7 +71,7 @@ export class Monster extends ecs.Entity { model.is_kalami = true; } // 根据等级和类型获取怪物属性 - const {hp, mp, ap, map, def, mdef} = getMonAttr(lv, uuid, monType); + const {hp, mp, ap,def} = getMonAttr(lv, uuid, monType); // 初始化属性数组 model.Attrs = getAttrs(); model.hp = model.Attrs[Attrs.HP_MAX] = hp; diff --git a/assets/script/game/hero/TalComp.ts b/assets/script/game/hero/TalComp.ts index 9c1faf26..efa34872 100644 --- a/assets/script/game/hero/TalComp.ts +++ b/assets/script/game/hero/TalComp.ts @@ -208,8 +208,8 @@ export class TalComp extends ecs.Comp { case TalEffet.SKILL_DMG: heroAttrs.addCountTal(TalEffet.SKILL_DMG, talent.value + talent.value_add); break; - case TalEffet.DMG_RED: - heroAttrs.addCountTal(TalEffet.DMG_RED, talent.value + talent.value_add); + case TalEffet.DEF: + heroAttrs.addCountTal(TalEffet.DEF, talent.value + talent.value_add); break; case TalEffet.HP: heroAttrs.add_hp(talent.value + talent.value_add,talent.vType == BType.VALUE); diff --git a/assets/script/game/map/RogueConfig.ts b/assets/script/game/map/RogueConfig.ts index 2e23b5e8..9a04bdc9 100644 --- a/assets/script/game/map/RogueConfig.ts +++ b/assets/script/game/map/RogueConfig.ts @@ -68,9 +68,9 @@ interface IMonsConfig { } export const MonAttrSet={ - [MonType.NORMAL]:{ HP_MAX:1.1, AP:1.05, MP:1.1, DEF:1.05, MDEF:1.05, MAP:1.05,}, - [MonType.ELITE]: { HP_MAX:2, AP:1.1, MP:1.1, DEF:1.1, MDEF:1.1, MAP:1.1,}, - [MonType.BOSS]: { HP_MAX:5, AP:2, MP:5, DEF:2, MDEF:2, MAP:2,}, + [MonType.NORMAL]:{ HP_MAX:1.1, AP:1.05, MP:1.1, DEF:1.05,}, + [MonType.ELITE]: { HP_MAX:2, AP:1.1, MP:1.1, DEF:1.1,}, + [MonType.BOSS]: { HP_MAX:5, AP:2, MP:5, DEF:2,}, } export const MonBuffSet={ @@ -82,10 +82,8 @@ export const getMonAttr=(lv:number,uuid:number,MonType:MonType)=>{ let hp=mon.hp*lv*MonAttrSet[MonType].HP_MAX let mp=mon.mp*lv*MonAttrSet[MonType].MP let ap=mon.ap*lv*MonAttrSet[MonType].AP - let map=mon.map*lv*MonAttrSet[MonType].MAP let def=mon.def*lv*MonAttrSet[MonType].DEF - let mdef=mon.mdef*lv*MonAttrSet[MonType].MDEF - return {hp:hp,mp:mp,ap:ap,map:map,def:def,mdef:mdef} + return {hp:hp,mp:mp,ap:ap,def:def} } /**