using System.Text.RegularExpressions; namespace AutoTrackR2.LogEventHandlers; public struct VehicleDestructionData { public string Vehicle { get; set; } public string VehicleZone { get; set; } public float PosX { get; set; } public float PosY { get; set; } public float PosZ { get; set; } public string Driver { get; set; } public int DestroyLevelFrom { get; set; } public int DestroyLevelTo { get; set; } public string CausedBy { get; set; } public string DamageType { get; set; } } public class VehicleDestructionEvent : ILogEventHandler { public Regex Pattern { get; } public VehicleDestructionEvent() { Pattern = new Regex(""" "<(?<timestamp>[^>]+)> \[Notice\] <Vehicle Destruction> CVehicle::OnAdvanceDestroyLevel: " + "Vehicle '(?<vehicle>[^']+)' \[\d+\] in zone '(?<vehicle_zone>[^']+)' " + "\[pos x: (?<pos_x>[-\d\.]+), y: (?<pos_y>[-\d\.]+), z: (?<pos_z>[-\d\.]+) " + "vel x: [^,]+, y: [^,]+, z: [^\]]+\] driven by '(?<driver>[^']+)' \[\d+\] " + "advanced from destroy level (?<destroy_level_from>\d+) to (?<destroy_level_to>\d+) " + "caused by '(?<caused_by>[^']+)' \[\d+\] with '(?<damage_type>[^']+)'" """); } public void Handle(LogEntry entry) { if (entry.Message == null) { return; } var match = Pattern.Match(entry.Message); if (!match.Success) { return; } var data = new VehicleDestructionData { Vehicle = match.Groups["vehicle"].Value, VehicleZone = match.Groups["vehicle_zone"].Value, PosX = float.Parse(match.Groups["pos_x"].Value), PosY = float.Parse(match.Groups["pos_y"].Value), PosZ = float.Parse(match.Groups["pos_z"].Value), Driver = match.Groups["driver"].Value, DestroyLevelFrom = int.Parse(match.Groups["destroy_level_from"].Value), DestroyLevelTo = int.Parse(match.Groups["destroy_level_to"].Value), CausedBy = match.Groups["caused_by"].Value, DamageType = match.Groups["damage_type"].Value, }; TrackREventDispatcher.OnVehicleDestructionEvent(data); } }