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:
parent
b3f4045aed
commit
675bf981db
|
|
@ -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()
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue