fix(logs): update English patterns for actual game output format

- English loot uses parentheses: 'x (2)' not 'x 2'
- Add English damage pattern: 'You inflicted X points of damage'
- Support both Swedish and English damage dealt events
- Fix empty bracket pattern: [System] [] Message

Tested with real log output showing English client format.
This commit is contained in:
LemonNexus 2026-02-08 17:54:48 +00:00
parent c511ff2042
commit bd506e53c2
1 changed files with 27 additions and 8 deletions

View File

@ -41,10 +41,11 @@ class LogWatcher:
# LOOT PATTERNS
# English: "You received Shrapnel x 123 (Value: 1.23 PED)"
# Swedish: "Du fick Shrapnel x (4627) Värde: 0.4627 PED"
# English loot: "You received Animal Oil Residue x (2) Value: 0.0 PED"
PATTERN_LOOT_EN = re.compile(
r'^(\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2})\s+\[System\]\s+'
r'You\s+received\s+([\w\s]+?)\s+x\s*(\d+)\s*.*?'
r'(?:Value:\s+(\d+(?:\.\d+)?)\s+PED)?',
r'^(\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2})\s+\[System\]\s+\[?\]?\s*'
r'You\s+received\s+([\w\s]+?)\s+x\s*\((\d+)\)\s*'
r'Value:\s+(\d+(?:\.\d+)?)\s+PED',
re.IGNORECASE
)
@ -95,14 +96,21 @@ class LogWatcher:
re.IGNORECASE
)
# DAMAGE DEALT
# DAMAGE DEALT - Swedish & English
# Swedish: "Du orsakade 13.5 poäng skada"
# English: "You inflicted 4.4 points of damage"
PATTERN_DAMAGE_DEALT_SV = re.compile(
r'^(\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2})\s+\[System\]\s+'
r'^(\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2})\s+\[System\]\s+\[?\]?\s*'
r'Du\s+orsakade\s+(\d+(?:\.\d+)?)\s+poäng\s+skada',
re.IGNORECASE
)
PATTERN_DAMAGE_DEALT_EN = re.compile(
r'^(\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2})\s+\[System\]\s+\[?\]?\s*'
r'You\s+inflicted\s+(\d+(?:\.\d+)?)\s+points?\s+of\s+damage',
re.IGNORECASE
)
# CRITICAL HIT
# Swedish: "Kritisk träff - Extra skada! Du orsakade 44.4 poäng skada"
PATTERN_CRITICAL_SV = re.compile(
@ -173,7 +181,8 @@ class LogWatcher:
'hof': PATTERN_HOF_MARKER,
'skill_en': PATTERN_SKILL_EN,
'skill_sv': PATTERN_SKILL_SV,
'damage_dealt': PATTERN_DAMAGE_DEALT_SV,
'damage_dealt_sv': PATTERN_DAMAGE_DEALT_SV,
'damage_dealt_en': PATTERN_DAMAGE_DEALT_EN,
'critical_hit': PATTERN_CRITICAL_SV,
'damage_taken': PATTERN_DAMAGE_TAKEN_SV,
'heal': PATTERN_HEAL_SV,
@ -338,14 +347,24 @@ class LogWatcher:
}
)
# DAMAGE DEALT
# DAMAGE DEALT - Swedish
match = self.PATTERN_DAMAGE_DEALT_SV.match(line)
if match:
return LogEvent(
timestamp=self._parse_timestamp(match.group(1)),
event_type='damage_dealt',
raw_line=line,
data={'damage': Decimal(match.group(2))}
data={'damage': Decimal(match.group(2)), 'language': 'swedish'}
)
# DAMAGE DEALT - English
match = self.PATTERN_DAMAGE_DEALT_EN.match(line)
if match:
return LogEvent(
timestamp=self._parse_timestamp(match.group(1)),
event_type='damage_dealt',
raw_line=line,
data={'damage': Decimal(match.group(2)), 'language': 'english'}
)
# CRITICAL HIT