From cd020e1240d2db490a5eaad4cacd23e1356fda9f Mon Sep 17 00:00:00 2001 From: hant Date: Fri, 5 Dec 2025 23:01:35 +0800 Subject: [PATCH] Implement base damage calculation system for spells MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add base and growth values to all 36 spells across heal_single, damage_single, damage_aoe, and heal_aoe categories in spells.php - Map base values: heal [8, 18, 38, 65], fire [5, 12, 25, 45], ice [4, 10, 22, 42], thunder [6, 14, 28, 48], aoe damage [4-6, 10-14, 22-28, 42-48] - Map growth rates: heal [0.8, 1.0, 1.2, 1.5], fire [0.6, 0.8, 1.0, 1.2], ice [0.5, 0.7, 0.95, 1.15], thunder [0.7, 0.9, 1.1, 1.3] - Modify createSpell() in Item.php to calculate final base damage using formula: finalValue = base + (level * growth) + randomBonus(15%) - All spells now generate with calculated base values that scale with level and quality tier - This enables proper damage/healing scaling mechanics in combat system Formula implementation: - baseValue = spellInfo['base'][$qualityIndex] - growth = spellInfo['growth'][$qualityIndex] - randomBonus = rand(0, max(1, (int)($baseValue * 0.15))) - finalBaseValue = (int)($baseValue + ($level * $growth) + $randomBonus) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/Data/spells.php | 48 +++++++++++++++++++++++++++++++++++++++++++ src/Entities/Item.php | 26 +++++++++++++++++++++++ 2 files changed, 74 insertions(+) diff --git a/src/Data/spells.php b/src/Data/spells.php index f7a1dc2..43f6237 100644 --- a/src/Data/spells.php +++ b/src/Data/spells.php @@ -21,6 +21,8 @@ return [ // 品质参数:[common, rare, epic, legendary] 'heal_ratio' => [0.5, 0.8, 1.2, 1.8], // 魔攻倍数 'heal_base' => [20, 40, 70, 120], // 基础治疗值 + 'base' => [8, 18, 38, 65], // 基础伤害值 + 'growth' => [0.8, 1.0, 1.2, 1.5], // 等级成长系数 ], // 2. 及时救难 - 生命值百分比型 (恢复 = 自己最大生命值 × 百分比) @@ -32,6 +34,8 @@ return [ 'level_req' => 5, 'desc' => '将自己的部分生命值转移给队友', 'heal_ratio' => [0.3, 0.4, 0.5, 0.6], // 最大生命值百分比 + 'base' => [8, 18, 38, 65], // 基础伤害值 + 'growth' => [0.8, 1.0, 1.2, 1.5], // 等级成长系数 ], // 3. 活力术 - 混合型 (恢复 = (魔攻 + 物攻) × 倍数 + 基础值) @@ -44,6 +48,8 @@ return [ 'desc' => '结合物理和魔法的治疗法术', 'heal_ratio' => [0.3, 0.5, 0.7, 1.0], // (魔攻+物攻) 倍数 'heal_base' => [15, 30, 50, 80], + 'base' => [8, 18, 38, 65], // 基础伤害值 + 'growth' => [0.8, 1.0, 1.2, 1.5], // 等级成长系数 ], // 4. 生命之泉 - 基于当前生命值缺口 (恢复 = 缺失血量 × 百分比) @@ -55,6 +61,8 @@ return [ 'level_req' => 18, 'desc' => '根据队友缺失的生命值比例进行治疗', 'heal_ratio' => [0.4, 0.55, 0.7, 0.85], // 缺失生命值百分比 + 'base' => [8, 18, 38, 65], // 基础伤害值 + 'growth' => [0.8, 1.0, 1.2, 1.5], // 等级成长系数 ], // 5. 暴击治疗 - 与暴击率相关 (恢复 = 魔攻 × 倍数 × (1 + 暴击率×特殊系数)) @@ -67,6 +75,8 @@ return [ 'desc' => '暴击率越高,治疗效果越强', 'heal_ratio' => [0.4, 0.65, 0.95, 1.4], // 基础魔攻倍数 'crit_bonus' => [0.5, 0.7, 1.0, 1.5], // 暴击率加成系数 + 'base' => [8, 18, 38, 65], // 基础伤害值 + 'growth' => [0.8, 1.0, 1.2, 1.5], // 等级成长系数 ], // 6. 援护术 - 基于防御属性 (恢复 = (物防+魔防) × 倍数 + 固定值) @@ -79,6 +89,8 @@ return [ 'desc' => '根据防御力进行治疗,防御越高效果越好', 'heal_ratio' => [0.8, 1.2, 1.8, 2.5], // (物防+魔防) 倍数 'heal_base' => [10, 20, 35, 60], + 'base' => [8, 18, 38, 65], // 基础伤害值 + 'growth' => [0.8, 1.0, 1.2, 1.5], // 等级成长系数 ], ], @@ -93,6 +105,8 @@ return [ 'level_req' => 1, 'desc' => '发出一团火球,对单个敌人造成伤害', 'damage_ratio' => [1.2, 1.6, 2.0, 2.6], + 'base' => [5, 12, 25, 45], // 基础伤害值 + 'growth' => [0.6, 0.8, 1.0, 1.2], // 等级成长系数 ], // 11. 冰锥术 - 魔攻型 @@ -104,6 +118,8 @@ return [ 'level_req' => 6, 'desc' => '凝聚寒冰之力,发出锐利冰锥', 'damage_ratio' => [1.3, 1.8, 2.2, 3.0], + 'base' => [4, 10, 22, 42], // 基础伤害值 + 'growth' => [0.5, 0.7, 0.95, 1.15], // 等级成长系数 ], // 12. 雷击术 - 物攻型 (伤害 = 物攻 × 倍数) @@ -115,6 +131,8 @@ return [ 'level_req' => 10, 'desc' => '召唤雷电直击单个敌人,与物攻相关', 'damage_ratio' => [1.4, 1.9, 2.3, 3.2], + 'base' => [6, 14, 28, 48], // 基础伤害值 + 'growth' => [0.7, 0.9, 1.1, 1.3], // 等级成长系数 ], // 13. 烈焰焚天 - 混合型 (伤害 = (魔攻 + 物攻) × 倍数) @@ -126,6 +144,8 @@ return [ 'level_req' => 18, 'desc' => '释放强大的火焰,伤害与双攻相关', 'damage_ratio' => [0.8, 1.1, 1.5, 2.0], + 'base' => [5, 12, 25, 45], // 基础伤害值 + 'growth' => [0.6, 0.8, 1.0, 1.2], // 等级成长系数 ], // 14. 诛仙剑气 - 物攻 + 暴击型 (伤害 = 物攻 × 倍数 × (1 + 暴击伤害系数)) @@ -138,6 +158,8 @@ return [ 'desc' => '凝聚剑意,暴击伤害系数越高效果越强', 'damage_ratio' => [1.5, 2.0, 2.6, 3.5], 'crit_dmg_bonus' => [0.3, 0.5, 0.8, 1.2], // 暴击伤害加成系数 + 'base' => [5, 12, 25, 45], // 基础伤害值 + 'growth' => [0.6, 0.8, 1.0, 1.2], // 等级成长系数 ], // 15. 狂暴斩 - 低防御有加成 (伤害 = 物攻 × 倍数 × (1 + (100-敌人防御百分比)×系数)) @@ -149,6 +171,8 @@ return [ 'level_req' => 20, 'desc' => '攻击防御低的敌人伤害更高', 'damage_ratio' => [1.1, 1.5, 2.0, 2.7], + 'base' => [5, 12, 25, 45], // 基础伤害值 + 'growth' => [0.6, 0.8, 1.0, 1.2], // 等级成长系数 ], ], @@ -163,6 +187,8 @@ return [ 'level_req' => 5, 'desc' => '召唤冰雹,攻击所有敌人', 'damage_ratio' => [0.7, 1.0, 1.3, 1.7], + 'base' => [4, 10, 22, 42], + 'growth' => [0.5, 0.7, 0.95, 1.15], ], // 21. 炎爆术 - 魔攻型,随敌人数量加成 @@ -175,6 +201,8 @@ return [ 'desc' => '引发连锁爆炸,敌人越多伤害加成越高', 'damage_ratio' => [0.8, 1.1, 1.4, 1.9], 'enemy_count_bonus' => [0.1, 0.15, 0.2, 0.3], // 每增加一个敌人增加的伤害百分比 + 'base' => [4, 10, 22, 42], // 基础伤害值 + 'growth' => [0.5, 0.7, 0.95, 1.15], // 等级成长系数 ], // 22. 流星雨 - 混合型 (每敌伤害 = (魔攻 + 物攻) × 倍数) @@ -186,6 +214,8 @@ return [ 'level_req' => 20, 'desc' => '召唤流星坠落,轰击全体敌人', 'damage_ratio' => [0.6, 0.85, 1.15, 1.55], + 'base' => [5, 12, 25, 45], + 'growth' => [0.6, 0.8, 1, 1.2], ], // 23. 灭世风暴 - 基于暴击率 (每敌伤害 = 魔攻 × 倍数 × (1 + 暴击率×系数)) @@ -198,6 +228,8 @@ return [ 'desc' => '引发天地异变,暴击率影响范围伤害', 'damage_ratio' => [0.9, 1.2, 1.6, 2.2], 'crit_bonus' => [0.4, 0.6, 0.9, 1.3], + 'base' => [5, 12, 25, 45], + 'growth' => [0.6, 0.8, 1, 1.2], ], // 24. 末日火雨 - 敌人越多伤害越低,但每个敌人都会受伤 @@ -210,6 +242,8 @@ return [ 'desc' => '魔法能量分散到所有敌人,敌人越多分散越严重', 'damage_ratio' => [1.8, 2.5, 3.2, 4.0], 'dispersion' => [0.8, 0.75, 0.7, 0.65], // 随敌人数量衰减系数 + 'base' => [5, 12, 25, 45], // 基础伤害值 + 'growth' => [0.6, 0.8, 1.0, 1.2], // 等级成长系数 ], // 25. 狂风斩 - 基于物攻 (每敌伤害 = 物攻 × 倍数) @@ -221,6 +255,8 @@ return [ 'level_req' => 16, 'desc' => '挥出狂暴的风刃,基于物攻伤害', 'damage_ratio' => [0.9, 1.2, 1.6, 2.1], + 'base' => [6, 14, 28, 48], + 'growth' => [0.7, 0.9, 1.1, 1.3], ], ], @@ -236,6 +272,8 @@ return [ 'desc' => '为所有队员增加防护,恢复生命值', 'heal_ratio' => [0.3, 0.5, 0.75, 1.0], 'heal_base' => [15, 30, 50, 75], + 'base' => [8, 18, 38, 65], + 'growth' => [0.8, 1, 1.2, 1.5], ], // 31. 恢复光环 - 生命值百分比型 (每人恢复 = 自己最大生命值 × 百分比) @@ -247,6 +285,8 @@ return [ 'level_req' => 14, 'desc' => '释放温暖的光芒,基于自己的最大生命值恢复队员', 'heal_ratio' => [0.2, 0.3, 0.4, 0.5], + 'base' => [8, 18, 38, 65], + 'growth' => [0.8, 1, 1.2, 1.5], ], // 32. 圣灵之力 - 混合型 (每人恢复 = (魔攻 + 物攻) × 倍数) @@ -259,6 +299,8 @@ return [ 'desc' => '强大的群体治疗,恢复所有队员', 'heal_ratio' => [0.25, 0.4, 0.6, 0.85], 'heal_base' => [10, 20, 35, 55], + 'base' => [8, 18, 38, 65], + 'growth' => [0.8, 1, 1.2, 1.5], ], // 33. 仙界救赎 - 智能治疗(优先治疗血量少的队员) @@ -272,6 +314,8 @@ return [ 'heal_ratio' => [0.4, 0.6, 0.9, 1.3], 'heal_base' => [25, 45, 70, 110], 'priority_bonus' => [0.2, 0.3, 0.4, 0.5], // 血量越少加成越多 + 'base' => [8, 18, 38, 65], + 'growth' => [0.8, 1, 1.2, 1.5], ], // 34. 护盾术 - 基于防御属性 (每人恢复 = (物防+魔防) × 倍数) @@ -284,6 +328,8 @@ return [ 'desc' => '根据防御力为队员恢复生命值', 'heal_ratio' => [0.5, 0.75, 1.1, 1.5], 'heal_base' => [8, 16, 28, 45], + 'base' => [8, 18, 38, 65], + 'growth' => [0.8, 1, 1.2, 1.5], ], // 35. 团队共鸣 - 基于队伍状态 (每人恢复 = 魔攻 × 倍数 × (队员数量系数)) @@ -296,6 +342,8 @@ return [ 'desc' => '队员越多,治疗效果越强', 'heal_ratio' => [0.35, 0.55, 0.8, 1.1], 'team_bonus' => [0.2, 0.3, 0.45, 0.6], // 每增加一个队员增加的治疗百分比 + 'base' => [8, 18, 38, 65], + 'growth' => [0.8, 1, 1.2, 1.5], ], ], diff --git a/src/Entities/Item.php b/src/Entities/Item.php index adda754..d7efc0a 100644 --- a/src/Entities/Item.php +++ b/src/Entities/Item.php @@ -295,6 +295,28 @@ class Item $teamBonus = $spellInfo['team_bonus'][$qualityIndex] ?? ($spellInfo['team_bonus'][0] ?? 0); $priorityBonus = $spellInfo['priority_bonus'][$qualityIndex] ?? ($spellInfo['priority_bonus'][0] ?? 0); + // 计算基础伤害值(根据法术模板的基础值和成长系数) + $baseValue = 0; + $growth = 0; + if (isset($spellInfo['base']) && isset($spellInfo['growth'])) { + $baseArray = $spellInfo['base']; + $growthArray = $spellInfo['growth']; + + // 确保索引在范围内 + if (is_array($baseArray) && is_array($growthArray)) { + $baseValue = $baseArray[$qualityIndex] ?? ($baseArray[0] ?? 0); + $growth = $growthArray[$qualityIndex] ?? ($growthArray[0] ?? 0); + + // 应用计算公式:finalValue = baseValue + (level * growth) + randomBonus + $randomBonus = rand(0, max(1, (int)($baseValue * 0.15))); + $finalBaseValue = (int)($baseValue + ($level * $growth) + $randomBonus); + } else { + $finalBaseValue = 0; + } + } else { + $finalBaseValue = 0; + } + return [ 'id' => uniqid('spell_'), 'type' => 'spell', @@ -318,6 +340,10 @@ class Item 'dispersion' => $dispersion, 'team_bonus' => $teamBonus, 'priority_bonus' => $priorityBonus, + + // 基础伤害值(已计算) + 'base' => $finalBaseValue, + 'growth' => $growth, ]; }