fix: resolve type errors and global counting issues in HUD event handlers

- Fix float/Decimal type errors in damage event handlers
- Fix global counter counting other players' globals
- on_personal_global() only counts your globals, not on_global()
- on_global() now only logs but doesn't increment counter
- Add on_loot_event() and on_heal_event() handlers
- Convert damage values to Decimal in main_window callbacks
This commit is contained in:
LemonNexus 2026-02-10 13:29:05 +00:00
parent b3f4045aed
commit 675bf981db
2 changed files with 65 additions and 13 deletions

View File

@ -894,32 +894,81 @@ class HUDOverlay(QWidget):
# === Event Handlers for LogWatcher === # === 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.""" """Handle global event from LogWatcher."""
if self.session_active: if self.session_active:
self._stats.globals_count += 1 self._stats.globals_count += 1
self._refresh_display() 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.""" """Handle Hall of Fame event from LogWatcher."""
if self.session_active: if self.session_active:
self._stats.hofs_count += 1 self._stats.hofs_count += 1
self._refresh_display() 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.""" """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) self.update_damage(dealt=damage)
def on_damage_taken(self, damage: Decimal): def on_damage_taken(self, damage):
"""Handle damage taken event from LogWatcher.""" """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) 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).""" """Handle stats update from LogWatcher (legacy compatibility)."""
if self.session_active: if self.session_active:
# Update loot from stats # Update loot from stats
if 'loot_value' in 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 # Update other stats as needed
self._refresh_display() self._refresh_display()

View File

@ -1038,17 +1038,18 @@ class MainWindow(QMainWindow):
# We'll log this in _process_queued_events instead # We'll log this in _process_queued_events instead
def on_global(event): def on_global(event):
"""Handle global events.""" """Handle global events (other players)."""
value_ped = event.data.get('value_ped', Decimal('0.0')) value_ped = event.data.get('value_ped', Decimal('0.0'))
player = event.data.get('player_name', 'Unknown') 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!") self.log_info("Global", f"{player} found {value_ped} PED!")
def on_personal_global(event): 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')) value_ped = event.data.get('value_ped', Decimal('0.0'))
creature = event.data.get('creature', 'Unknown') 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!!!") self.log_info("Global", f"🎉 YOUR GLOBAL: {creature} for {value_ped} PED!!!")
def on_hof(event): def on_hof(event):
@ -1065,8 +1066,10 @@ class MainWindow(QMainWindow):
def on_damage_dealt(event): def on_damage_dealt(event):
"""Handle damage dealt - also track weapon cost and shots fired.""" """Handle damage dealt - also track weapon cost and shots fired."""
from decimal import Decimal
damage = event.data.get('damage', 0) 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) # Track shots fired (1 shot per damage event)
self.hud.update_stats({'shots_add': 1}) self.hud.update_stats({'shots_add': 1})
@ -1077,7 +1080,6 @@ class MainWindow(QMainWindow):
# Get decay per shot from weapon stats (in PEC) # Get decay per shot from weapon stats (in PEC)
decay = self._selected_weapon_stats.get('decay', 0) decay = self._selected_weapon_stats.get('decay', 0)
if decay: if decay:
from decimal import Decimal
# Convert PEC to PED # Convert PEC to PED
cost_ped = Decimal(str(decay)) / Decimal('100') cost_ped = Decimal(str(decay)) / Decimal('100')
self.hud.update_cost(cost_ped) self.hud.update_cost(cost_ped)
@ -1091,7 +1093,8 @@ class MainWindow(QMainWindow):
from decimal import Decimal from decimal import Decimal
damage = event.data.get('damage', 0) 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 # Calculate armor decay cost per hit
# Formula: cost_per_hit = armor_decay_pec / 100 (PED) # Formula: cost_per_hit = armor_decay_pec / 100 (PED)