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:
@@ -146,14 +146,59 @@ weapons:
|
||||
name: "Wizard Staff"
|
||||
item_type: "weapon"
|
||||
description: "A staff attuned to magical energy"
|
||||
base_damage: 8
|
||||
base_damage: 4
|
||||
base_spell_power: 12
|
||||
base_value: 45
|
||||
damage_type: "physical"
|
||||
damage_type: "arcane"
|
||||
crit_chance: 0.05
|
||||
crit_multiplier: 2.0
|
||||
required_level: 3
|
||||
drop_weight: 0.8
|
||||
|
||||
arcane_staff:
|
||||
template_id: "arcane_staff"
|
||||
name: "Arcane Staff"
|
||||
item_type: "weapon"
|
||||
description: "A powerful staff pulsing with arcane power"
|
||||
base_damage: 6
|
||||
base_spell_power: 18
|
||||
base_value: 90
|
||||
damage_type: "arcane"
|
||||
crit_chance: 0.06
|
||||
crit_multiplier: 2.0
|
||||
required_level: 5
|
||||
drop_weight: 0.6
|
||||
min_rarity: "uncommon"
|
||||
|
||||
# ==================== WANDS ====================
|
||||
wand:
|
||||
template_id: "wand"
|
||||
name: "Wand"
|
||||
item_type: "weapon"
|
||||
description: "A simple magical focus"
|
||||
base_damage: 2
|
||||
base_spell_power: 8
|
||||
base_value: 30
|
||||
damage_type: "arcane"
|
||||
crit_chance: 0.06
|
||||
crit_multiplier: 2.0
|
||||
required_level: 1
|
||||
drop_weight: 1.0
|
||||
|
||||
crystal_wand:
|
||||
template_id: "crystal_wand"
|
||||
name: "Crystal Wand"
|
||||
item_type: "weapon"
|
||||
description: "A wand topped with a magical crystal"
|
||||
base_damage: 3
|
||||
base_spell_power: 14
|
||||
base_value: 60
|
||||
damage_type: "arcane"
|
||||
crit_chance: 0.07
|
||||
crit_multiplier: 2.2
|
||||
required_level: 4
|
||||
drop_weight: 0.8
|
||||
|
||||
# ==================== RANGED ====================
|
||||
shortbow:
|
||||
template_id: "shortbow"
|
||||
|
||||
Reference in New Issue
Block a user