static void ReadHotfixData(Packet packet, List <HotfixRecord> records, params object[] indexes) { for (var i = 0; i < records.Count; ++i) { var record = records[i]; packet.AddValue("HotfixId", record.HotfixId, i, indexes, "HotfixRecord"); packet.AddValue("UniqueId", record.UniqueId, i, indexes, "HotfixRecord"); packet.AddValue("RecordId", record.RecordId, i, indexes, "HotfixRecord"); packet.AddValue("TableHash", record.Type, i, indexes, "HotfixRecord"); packet.AddValue("Status", record.Status, i, indexes, "HotfixRecord"); packet.AddValue("Size", record.HotfixDataSize, i, indexes, "HotfixRecord"); switch (record.Status) { case HotfixStatus.Valid: { packet.AddSniffData(StoreNameType.None, record.RecordId, record.Type.ToString()); var data = packet.ReadBytes(record.HotfixDataSize); using (var db2File = new Packet(data, packet.Opcode, packet.Time, packet.Direction, packet.Number, packet.Writer, packet.FileName)) { HotfixStoreMgr.AddRecord(record.Type, record.RecordId, db2File); if (HotfixStoreMgr.GetStore(record.Type) == null) { db2File.WriteLine($"(RecordID: {record.RecordId} TableHash: {record.Type}) has missing structure. HotfixBlob entry generated!"); db2File.AsHex(); var hotfixBlob = new HotfixBlob { TableHash = record.Type, RecordID = record.RecordId, Blob = new Blob(data) }; Storage.HotfixBlobs.Add(hotfixBlob); } else if (db2File.Position != db2File.Length) { HandleHotfixOptionalData(packet, record.Type, record.RecordId, db2File); } } break; } case HotfixStatus.Invalid: { packet.WriteLine($"Row {record.RecordId} is invalid."); break; } case HotfixStatus.RecordRemoved: { packet.WriteLine($"Row {record.RecordId} has been deleted."); HotfixStoreMgr.RemoveRecord(record.Type, record.RecordId); break; } default: { packet.WriteLine($"Row: {record.RecordId} TableHash: {record.Type} has unknown Status: {record.Status}"); break; } } var hotfixData = new HotfixData { ID = record.HotfixId, TableHash = record.Type, RecordID = record.RecordId, Status = record.Status }; Storage.HotfixDatas.Add(hotfixData); } }