diff --git a/ui/hud_overlay_clean.py b/ui/hud_overlay_clean.py index 29edcaa..ffd9ef2 100644 --- a/ui/hud_overlay_clean.py +++ b/ui/hud_overlay_clean.py @@ -894,32 +894,81 @@ class HUDOverlay(QWidget): # === Event Handlers for LogWatcher === - def on_global(self, value_ped: Decimal = Decimal('0.0')): + def on_global(self, value_ped=Decimal('0.0')): """Handle global event from LogWatcher.""" if self.session_active: self._stats.globals_count += 1 self._refresh_display() - def on_hof(self, value_ped: Decimal = Decimal('0.0')): + def on_hof(self, value_ped=Decimal('0.0')): """Handle Hall of Fame event from LogWatcher.""" if self.session_active: self._stats.hofs_count += 1 self._refresh_display() - def on_damage_dealt(self, damage: Decimal): + def on_personal_global(self, value_ped=Decimal('0.0')): + """Handle personal global event from LogWatcher.""" + # Only count personal globals, not all globals + if self.session_active: + self._stats.globals_count += 1 + self._refresh_display() + + def on_damage_dealt(self, damage): """Handle damage dealt event from LogWatcher.""" + # Convert float to Decimal if needed + if isinstance(damage, float): + damage = Decimal(str(damage)) + elif not isinstance(damage, Decimal): + damage = Decimal(damage) self.update_damage(dealt=damage) - def on_damage_taken(self, damage: Decimal): + def on_damage_taken(self, damage): """Handle damage taken event from LogWatcher.""" + # Convert float to Decimal if needed + if isinstance(damage, float): + damage = Decimal(str(damage)) + elif not isinstance(damage, Decimal): + damage = Decimal(damage) self.update_damage(taken=damage) - def update_stats(self, stats: dict): + def on_loot_event(self, event): + """Handle loot event from LogWatcher.""" + if self.session_active: + # Extract loot value from event + value = event.get('value_ped', Decimal('0')) + if isinstance(value, float): + value = Decimal(str(value)) + elif not isinstance(value, Decimal): + value = Decimal(value) + + # Check if shrapnel + item_name = event.get('item_name', '') + is_shrap = 'shrapnel' in item_name.lower() + + self.update_loot(value, is_shrapnel=is_shrap) + + def on_heal_event(self, event): + """Handle heal event from LogWatcher.""" + if self.session_active: + heal_amount = event.get('heal_amount', Decimal('0')) + if isinstance(heal_amount, float): + heal_amount = Decimal(str(heal_amount)) + elif not isinstance(heal_amount, Decimal): + heal_amount = Decimal(heal_amount) + + # Update healing done + self._stats.healing_done += heal_amount + self._refresh_display() + + def update_stats(self, stats): """Handle stats update from LogWatcher (legacy compatibility).""" if self.session_active: # Update loot from stats if 'loot_value' in stats: - self.update_loot(Decimal(str(stats['loot_value']))) + value = stats['loot_value'] + if isinstance(value, float): + value = Decimal(str(value)) + self.update_loot(value) # Update other stats as needed self._refresh_display() diff --git a/ui/main_window.py b/ui/main_window.py index 6c0f46c..95edede 100644 --- a/ui/main_window.py +++ b/ui/main_window.py @@ -1038,17 +1038,18 @@ class MainWindow(QMainWindow): # We'll log this in _process_queued_events instead def on_global(event): - """Handle global events.""" + """Handle global events (other players).""" value_ped = event.data.get('value_ped', Decimal('0.0')) player = event.data.get('player_name', 'Unknown') - self.hud.on_global(value_ped) + # Don't count other players' globals in HUD self.log_info("Global", f"{player} found {value_ped} PED!") def on_personal_global(event): - """Handle personal global events.""" + """Handle personal global events (only your globals).""" value_ped = event.data.get('value_ped', Decimal('0.0')) creature = event.data.get('creature', 'Unknown') - self.hud.on_global(value_ped) + # Only count personal globals in HUD stats + self.hud.on_personal_global(value_ped) self.log_info("Global", f"🎉 YOUR GLOBAL: {creature} for {value_ped} PED!!!") def on_hof(event): @@ -1065,8 +1066,10 @@ class MainWindow(QMainWindow): def on_damage_dealt(event): """Handle damage dealt - also track weapon cost and shots fired.""" + from decimal import Decimal damage = event.data.get('damage', 0) - self.hud.on_damage_dealt(float(damage)) + # Pass as Decimal to avoid type errors + self.hud.on_damage_dealt(Decimal(str(damage))) # Track shots fired (1 shot per damage event) self.hud.update_stats({'shots_add': 1}) @@ -1077,7 +1080,6 @@ class MainWindow(QMainWindow): # Get decay per shot from weapon stats (in PEC) decay = self._selected_weapon_stats.get('decay', 0) if decay: - from decimal import Decimal # Convert PEC to PED cost_ped = Decimal(str(decay)) / Decimal('100') self.hud.update_cost(cost_ped) @@ -1091,7 +1093,8 @@ class MainWindow(QMainWindow): from decimal import Decimal damage = event.data.get('damage', 0) - self.hud.on_damage_taken(float(damage)) + # Pass as Decimal to avoid type errors + self.hud.on_damage_taken(Decimal(str(damage))) # Calculate armor decay cost per hit # Formula: cost_per_hit = armor_decay_pec / 100 (PED)