feat(api): integrate equipment stats into combat damage system
Equipment-Combat Integration: - Update Stats damage formula from STR//2 to int(STR*0.75) for better scaling - Add spell_power system for magical weapons (staves, wands) - Add spell_power_bonus field to Stats model with spell_power property - Add spell_power field to Item model with is_magical_weapon() method - Update Character.get_effective_stats() to populate spell_power_bonus Combatant Model Updates: - Add weapon property fields (crit_chance, crit_multiplier, damage_type) - Add elemental weapon support (elemental_damage_type, physical_ratio, elemental_ratio) - Update serialization to handle new weapon properties DamageCalculator Refactoring: - Remove weapon_damage parameter from calculate_physical_damage() - Use attacker_stats.damage directly (includes weapon bonus) - Use attacker_stats.spell_power for magical damage calculations Combat Service Updates: - Extract weapon properties in _create_combatant_from_character() - Use stats.damage_bonus for enemy combatants from templates - Remove hardcoded _get_weapon_damage() method - Handle elemental weapons with split damage in _execute_attack() Item Generation Updates: - Add base_spell_power to BaseItemTemplate dataclass - Add ARCANE damage type to DamageType enum - Add magical weapon templates (wizard_staff, arcane_staff, wand, crystal_wand) Test Updates: - Update test_stats.py for new damage formula (0.75 scaling) - Update test_character.py for equipment bonus calculations - Update test_damage_calculator.py for new API signatures - Update test_combat_service.py mock fixture for equipped attribute Tests: 174 passing
This commit is contained in:
@@ -317,6 +317,7 @@ class ItemGenerator:
|
||||
|
||||
# Base values from template
|
||||
damage = base_template.base_damage + combined_stats["damage_bonus"]
|
||||
spell_power = base_template.base_spell_power # Magical weapon damage
|
||||
defense = base_template.base_defense + combined_stats["defense_bonus"]
|
||||
resistance = base_template.base_resistance + combined_stats["resistance_bonus"]
|
||||
crit_chance = base_template.crit_chance + combined_stats["crit_chance_bonus"]
|
||||
@@ -353,6 +354,7 @@ class ItemGenerator:
|
||||
stat_bonuses=combined_stats["stat_bonuses"],
|
||||
effects_on_use=[], # Not a consumable
|
||||
damage=damage,
|
||||
spell_power=spell_power, # Magical weapon damage bonus
|
||||
damage_type=DamageType(base_template.damage_type) if damage > 0 else None,
|
||||
crit_chance=crit_chance,
|
||||
crit_multiplier=crit_multiplier,
|
||||
|
||||
Reference in New Issue
Block a user