protected virtual PlayerElimination ParseElimination(FArchive archive, EventInfo info) { try { var elim = new PlayerElimination { Info = info, }; if (archive.EngineNetworkVersion >= EngineNetworkVersionHistory.HISTORY_FAST_ARRAY_DELTA_STRUCT && Major >= 9) { archive.SkipBytes(85); elim.Eliminated = ParsePlayer(archive); elim.Eliminator = ParsePlayer(archive); } else { if (Major <= 4 && Minor < 2) { archive.SkipBytes(12); } else if (Major == 4 && Minor <= 2) { archive.SkipBytes(40); } else { archive.SkipBytes(45); } elim.Eliminated = archive.ReadFString(); elim.Eliminator = archive.ReadFString(); } elim.GunType = archive.ReadByte(); elim.Knocked = archive.ReadUInt32AsBoolean(); elim.Time = info?.StartTime.MillisecondsToTimeStamp(); return(elim); } catch (Exception ex) { _logger?.LogError($"Error while parsing PlayerElimination at timestamp {info.StartTime}"); throw new PlayerEliminationException($"Error while parsing PlayerElimination at timestamp {info.StartTime}", ex); } }
protected virtual PlayerElimination ParseElimination(FArchive archive, EventInfo info) { try { var elim = new PlayerElimination { Info = info, }; if (archive.EngineNetworkVersion >= EngineNetworkVersionHistory.HISTORY_FAST_ARRAY_DELTA_STRUCT && Major >= 9) { archive.SkipBytes(9); elim.EliminatedInfo = new PlayerEliminationInfo { Unknown1 = new FVector(archive.ReadSingle(), archive.ReadSingle(), archive.ReadSingle()), Location = new FVector(archive.ReadSingle(), archive.ReadSingle(), archive.ReadSingle()), Unknown2 = new FVector(archive.ReadSingle(), archive.ReadSingle(), archive.ReadSingle()), }; archive.ReadSingle(); //? elim.EliminatorInfo = new PlayerEliminationInfo { Unknown1 = new FVector(archive.ReadSingle(), archive.ReadSingle(), archive.ReadSingle()), Location = new FVector(archive.ReadSingle(), archive.ReadSingle(), archive.ReadSingle()), Unknown2 = new FVector(archive.ReadSingle(), archive.ReadSingle(), archive.ReadSingle()), }; ParsePlayer(archive, elim.EliminatedInfo); ParsePlayer(archive, elim.EliminatorInfo); } else { if (Major <= 4 && Minor < 2) { archive.SkipBytes(12); } else if (Major == 4 && Minor <= 2) { archive.SkipBytes(40); } else { archive.SkipBytes(45); } elim.EliminatedInfo = new PlayerEliminationInfo { Id = archive.ReadFString() }; elim.EliminatorInfo = new PlayerEliminationInfo { Id = archive.ReadFString() }; } elim.GunType = archive.ReadByte(); elim.Knocked = archive.ReadUInt32AsBoolean(); elim.Timestamp = info.StartTime; return(elim); } catch (Exception ex) { _logger?.LogError($"Error while parsing PlayerElimination at timestamp {info.StartTime}"); throw new PlayerEliminationException($"Error while parsing PlayerElimination at timestamp {info.StartTime}", ex); } }