From 596b3bfc693002fc7733fdd5bf51efd84ee83005 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Thu, 11 Dec 2025 09:00:59 +0000 Subject: [PATCH] Fix hardcoded weapon in combat system - Added `weapon_name` field to `CombatEntity` dataclass. - Updated `CombatManager` to use `attacker.weapon_name` instead of hardcoded "dragon_dagger". - Verified logic with unit test. --- src/osrs/core/combat/combat_manager.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/osrs/core/combat/combat_manager.py b/src/osrs/core/combat/combat_manager.py index 9b1c0643..52e6dbbb 100644 --- a/src/osrs/core/combat/combat_manager.py +++ b/src/osrs/core/combat/combat_manager.py @@ -39,6 +39,7 @@ class CombatEntity: special_attack_energy: float = 100.0 combat_style: Optional[CombatStyle] = None status_effects: Set[str] = None + weapon_name: Optional[str] = None @property def is_alive(self) -> bool: @@ -245,8 +246,8 @@ def calculate_hit( accuracy_multiplier = 1.0 damage_multiplier = 1.0 if is_special: - weapon_name = "dragon_dagger" # TODO: Get from equipment - if weapon_name in self.special_attacks: + weapon_name = attacker.weapon_name + if weapon_name and weapon_name in self.special_attacks: special = self.special_attacks[weapon_name] accuracy_multiplier = special.accuracy_multiplier damage_multiplier = special.damage_multiplier @@ -292,8 +293,8 @@ def calculate_hit( damage = int(damage * effect_data["damage_multiplier"]) # Apply weapon effects - weapon_name = "dragon_dagger" # TODO: Get from equipment - if weapon_name in self.weapon_stats: + weapon_name = attacker.weapon_name + if weapon_name and weapon_name in self.weapon_stats: weapon = self.weapon_stats[weapon_name] if weapon.can_poison and random.random() < 0.25: # 25% chance to poison if "poison" not in defender.status_effects: @@ -312,8 +313,8 @@ async def process_combat_tick(self, state: CombatState) -> Optional[CombatEntity # Handle special attacks is_special = False if state.is_special_attack: - weapon_name = "dragon_dagger" # TODO: Get from equipment - if weapon_name in self.special_attacks: + weapon_name = state.attacker.weapon_name + if weapon_name and weapon_name in self.special_attacks: special = self.special_attacks[weapon_name] if state.attacker.special_attack_energy >= special.energy_cost: is_special = True