public bool AlreadyExistInList(CampfireSpawnTemplate template, List <CampfireSpawnTemplate> list) { if (list == null) { return(false); } foreach (var st in list) { if (st.Position.DistanceTo(template.Position) < 100) { return(true); } } return(false); }
private void Run(object sender, RoutedEventArgs e) { short spCampfireOpCode = Packet.GetPacketOpcode(MainWindow, "SpCampfire"); short spBindOpCode = Packet.GetPacketOpcode(MainWindow, "SpCharacterBind"); Dictionary <int, List <CampfireSpawnTemplate> > templates = new Dictionary <int, List <CampfireSpawnTemplate> >(); int mapId = 0; if (File.Exists("data/campfires.bin")) { using (FileStream fs = File.OpenRead("data/campfires.bin")) { templates = Serializer.Deserialize <Dictionary <int, List <CampfireSpawnTemplate> > >(fs); } } int count = 0; foreach (Packet packet in MainWindow.Packets) { if (packet.OpCode == spBindOpCode) { mapId = BitConverter.ToInt32(packet.Data, 4); if (!templates.ContainsKey(mapId)) { templates.Add(mapId, new List <CampfireSpawnTemplate>()); } continue; } if (packet.OpCode != spCampfireOpCode) { continue; } CampfireSpawnTemplate template = new CampfireSpawnTemplate { Position = new WorldPosition { MapId = mapId, X = BitConverter.ToSingle(packet.Data, 20), Y = BitConverter.ToSingle(packet.Data, 24), Z = BitConverter.ToSingle(packet.Data, 28), }, }; if (AlreadyExistInList(template, templates[mapId])) { continue; } templates[mapId].Add(template); count++; } if (!Directory.Exists("data")) { Directory.CreateDirectory("data"); } using (FileStream fs = File.Create("data/campfires.bin")) { Serializer.Serialize(fs, templates); } MainWindow.SetText("Finded " + count + " new campfires!"); }