private void ReloadCurrentPackets() { var lastIndex = PacketListView.SelectedIndex; PacketListItem[] array = new PacketListItem[PacketListView.Items.Count]; PacketListView.Items.CopyTo(array, 0); PacketListView.Items.Clear(); foreach (var item in array) { AddPacketToListView(item); } PacketListView.SelectedIndex = lastIndex; }
public static CaptureContainer Load(string path) { List <PacketListItem> output = new List <PacketListItem>(); bool usingSystemTime = false; int version = -1; XmlDocument doc = new XmlDocument(); doc.Load(path); XmlNode settings = doc.DocumentElement.SelectSingleNode("/Capture"); foreach (XmlNode node in settings.ChildNodes) { switch (node.Name) { case "UsingSystemTime": usingSystemTime = bool.Parse(node.InnerText); break; case "Version": version = int.Parse(node.InnerText); break; } } XmlNode packets = doc.DocumentElement.SelectSingleNode("/Capture/Packets"); foreach (XmlNode packet in packets.ChildNodes) { PacketListItem packetItem = new PacketListItem(); foreach (XmlNode entry in packet.ChildNodes) { switch (entry.Name) { case "Direction": packetItem.DirectionCol = entry.InnerText; break; case "Message": packetItem.MessageCol = entry.InnerText; break; case "Timestamp": packetItem.TimeStampCol = entry.InnerText; break; case "RouteID": packetItem.RouteIdCol = entry.InnerText; break; case "Data": packetItem.Data = Util.StringToByteArray(entry.InnerText); break; case "Set": packetItem.Set = int.Parse(entry.InnerText); break; case "PacketUnixTime": packetItem.PacketUnixTime = uint.Parse(entry.InnerText); break; case "SystemMsTime": packetItem.SystemMsTime = long.Parse(entry.InnerText); break; } } packetItem.IsVisible = true; output.Add(packetItem); } Debug.WriteLine($"Loaded Packets: {output.Count}"); return(new CaptureContainer { Packets = output.ToArray(), UsingSystemTime = usingSystemTime, Version = version }); }
public void AddPacketToListView(PacketListItem item) { if (item.DirectionCol == "S") { item.NameCol = _db.GetServerZoneOpName(int.Parse(item.MessageCol, NumberStyles.HexNumber)); item.CommentCol = _db.GetServerZoneOpComment(int.Parse(item.MessageCol, NumberStyles.HexNumber)); } else { item.NameCol = _db.GetClientZoneOpName(int.Parse(item.MessageCol, NumberStyles.HexNumber)); item.CommentCol = _db.GetClientZoneOpComment(int.Parse(item.MessageCol, NumberStyles.HexNumber)); } item.CategoryCol = item.Set.ToString(); if (item.MessageCol == "0142" || item.MessageCol == "0143" || item.MessageCol == "0144") { int cat = BitConverter.ToUInt16(item.Data, 0x20); item.ActorControl = cat; item.NameCol = _db.GetActorControlTypeName(cat); } if (_mainWindow.RunScriptsOnNewCheckBox.IsChecked) { try { PacketEventArgs args = null; var structText = _db.GetServerZoneStruct(int.Parse(item.MessageCol, NumberStyles.HexNumber)); if (structText != null) { if (structText.Length != 0) { var structProvider = new Struct(); var structEntries = structProvider.Parse(structText, item.Data); args = new PacketEventArgs(item, structEntries.Item2, _mainWindow.ScriptDebugView); } } else { args = new PacketEventArgs(item, null, _mainWindow.ScriptDebugView); } Scripting_RunOnPacket(args); } catch (Exception exc) { MessageBox.Show( $"[XivMonTab] Script error!\n\n{exc}", "Error", MessageBoxButton.OK, MessageBoxImage.Error); _mainWindow.RunScriptsOnNewCheckBox.IsChecked = false; return; } } if (_mainWindow.ExEnabledCheckbox.IsChecked && item.DirectionCol == "S") { try { var structText = _db.GetServerZoneStruct(int.Parse(item.MessageCol, NumberStyles.HexNumber)); if (structText != null) { if (structText.Length != 0) { switch (item.NameCol) { case "NpcSpawn": { Struct structProvider = new Struct(); dynamic obj = structProvider.Parse(structText, item.Data).Item2; item.CommentCol = $"Name: {_mainWindow.ExdProvider.GetBnpcName((int)obj.bNPCName)}({obj.bNPCName})"; } break; case "ActorCast": { Struct structProvider = new Struct(); dynamic obj = structProvider.Parse(structText, item.Data).Item2; item.CommentCol = $"Action: {_mainWindow.ExdProvider.GetActionName(obj.action_id)}({obj.action_id}) - Type {obj.skillType} - Cast Time: {obj.cast_time}"; } break; } if (item.NameCol.Contains("ActorControl")) { switch (item.ActorControl) { case 3: //CastStart { var ctrl = Util.FastParseActorControl(item.Data); item.CommentCol = $"Action: {_mainWindow.ExdProvider.GetActionName((int)ctrl.Param2)}({ctrl.Param2}) - Type {ctrl.Param1}"; } break; case 17: //ActionStart { var ctrl = Util.FastParseActorControl(item.Data); item.CommentCol = $"Action: {_mainWindow.ExdProvider.GetActionName((int)ctrl.Param2)}({ctrl.Param2}) - Type {ctrl.Param1}"; } break; } } } } } catch (Exception exc) { MessageBox.Show( $"[XivMonTab] EXD error for {item.MessageCol} - {item.NameCol}!\n\n{exc}", "Error", MessageBoxButton.OK, MessageBoxImage.Error); _mainWindow.ExEnabledCheckbox.IsChecked = false; } } PacketListView.Items.Add(item); UpdateInfoLabel(); }