public static void HandleGossipPoi(Packet packet) { PointsOfInterest gossipPOI = new PointsOfInterest(); gossipPOI.Flags = (uint)packet.ReadInt32E <UnknownFlags>("Flags"); Vector2 pos = packet.ReadVector2("Coordinates"); gossipPOI.PositionX = pos.X; gossipPOI.PositionY = pos.Y; gossipPOI.Icon = packet.ReadUInt32E <GossipPOIIcon>("Icon"); gossipPOI.Importance = packet.ReadUInt32("Importance"); gossipPOI.Name = packet.ReadCString("Name"); // DB PART STARTS HERE if (Settings.DBEnabled) { foreach (var poi in SQLDatabase.POIs) { if (gossipPOI.Name == poi.Name && (uint)gossipPOI.Icon == poi.Icon) { if (Math.Abs(pos.X - poi.PositionX) <= 0.99f && Math.Abs(pos.Y - poi.PositionY) <= 0.99f) { gossipPOI.ID = poi.ID; break; } } } if (gossipPOI.ID == null) { gossipPOI.ID = (SQLDatabase.POIs[SQLDatabase.POIs.Count - 1].ID + 1); // Add to list to prevent double data while parsing var poiData = new SQLDatabase.POIData() { ID = (uint)gossipPOI.ID, PositionX = (float)gossipPOI.PositionX, PositionY = (float)gossipPOI.PositionY, Icon = (uint)gossipPOI.Icon, Flags = (uint)gossipPOI.Flags, Importance = (uint)gossipPOI.Importance, Name = gossipPOI.Name }; SQLDatabase.POIs.Add(poiData); } } else { gossipPOI.ID = "@PID+" + LastGossipPOIEntry.ToString(); ++LastGossipPOIEntry; } Storage.GossipPOIs.Add(gossipPOI, packet.TimeSpan); if (TempGossipOptionPOI.HasSelection) { if ((packet.TimeSpan - TempGossipOptionPOI.TimeSpan).Duration() <= TimeSpan.FromMilliseconds(2500)) { if (TempGossipOptionPOI.ActionMenuId != null) { Storage.GossipMenuOptionActions.Add(new GossipMenuOptionAction { MenuId = TempGossipOptionPOI.MenuId, OptionIndex = TempGossipOptionPOI.OptionIndex, ActionMenuId = TempGossipOptionPOI.ActionMenuId, ActionPoiId = gossipPOI.ID }, packet.TimeSpan); //clear temp TempGossipOptionPOI.Reset(); } } else { LastGossipOption.Reset(); TempGossipOptionPOI.Reset(); } } }
public static void HandleGossipPoi(Packet packet) { var protoPoi = packet.Holder.GossipPoi = new(); PointsOfInterest gossipPOI = new PointsOfInterest(); gossipPOI.Flags = protoPoi.Flags = packet.ReadBits("Flags", 14); uint bit84 = packet.ReadBits(6); Vector2 pos = packet.ReadVector2("Coordinates"); protoPoi.Coordinates = pos; gossipPOI.PositionX = pos.X; gossipPOI.PositionY = pos.Y; gossipPOI.Icon = packet.ReadUInt32E <GossipPOIIcon>("Icon"); gossipPOI.Importance = protoPoi.Importance = packet.ReadUInt32("Importance"); gossipPOI.Name = protoPoi.Name = packet.ReadWoWString("Name", bit84); protoPoi.Icon = (uint)gossipPOI.Icon; // DB PART STARTS HERE if (Settings.DBEnabled) { foreach (var poi in SQLDatabase.POIs) { if (gossipPOI.Name == poi.Name && (uint)gossipPOI.Icon == poi.Icon) { if (Math.Abs(pos.X - poi.PositionX) <= 0.99f && Math.Abs(pos.Y - poi.PositionY) <= 0.99f) { gossipPOI.ID = poi.ID; break; } } } if (gossipPOI.ID == null) { gossipPOI.ID = (SQLDatabase.POIs[SQLDatabase.POIs.Count - 1].ID + 1); // Add to list to prevent double data while parsing var poiData = new SQLDatabase.POIData() { ID = (uint)gossipPOI.ID, PositionX = (float)gossipPOI.PositionX, PositionY = (float)gossipPOI.PositionY, Icon = (uint)gossipPOI.Icon, Flags = (uint)gossipPOI.Flags, Importance = (uint)gossipPOI.Importance, Name = gossipPOI.Name }; SQLDatabase.POIs.Add(poiData); } } else { gossipPOI.ID = "@PID+" + LastGossipPOIEntry.ToString(); ++LastGossipPOIEntry; } Storage.GossipPOIs.Add(gossipPOI, packet.TimeSpan); CoreParsers.NpcHandler.UpdateTempGossipOptionActionPOI(packet.TimeSpan, gossipPOI.ID); }
public static void HandleGossipPoi(Packet packet) { PointsOfInterest gossipPOI = new PointsOfInterest(); gossipPOI.Flags = packet.ReadBits("Flags", 14); uint bit84 = packet.ReadBits(6); Vector2 pos = packet.ReadVector2("Coordinates"); gossipPOI.PositionX = pos.X; gossipPOI.PositionY = pos.Y; gossipPOI.Icon = packet.ReadUInt32E <GossipPOIIcon>("Icon"); gossipPOI.Importance = packet.ReadUInt32("Importance"); gossipPOI.Name = packet.ReadWoWString("Name", bit84); var lastGossipOption = CoreParsers.NpcHandler.LastGossipOption; var tempGossipOptionPOI = CoreParsers.NpcHandler.TempGossipOptionPOI; // DB PART STARTS HERE if (Settings.DBEnabled) { foreach (var poi in SQLDatabase.POIs) { if (gossipPOI.Name == poi.Name && (uint)gossipPOI.Icon == poi.Icon && gossipPOI.Flags == poi.Flags) { if (Math.Abs(pos.X - poi.PositionX) <= 0.01f && Math.Abs(pos.Y - poi.PositionY) <= 0.01f) { gossipPOI.ID = poi.ID; break; } } } if (gossipPOI.ID == null) { gossipPOI.ID = (SQLDatabase.POIs[SQLDatabase.POIs.Count - 1].ID + 1); // Add to list to prevent double data while parsing var poiData = new SQLDatabase.POIData() { ID = (uint)gossipPOI.ID, PositionX = (float)gossipPOI.PositionX, PositionY = (float)gossipPOI.PositionY, Icon = (uint)gossipPOI.Icon, Flags = (uint)gossipPOI.Flags, Importance = (uint)gossipPOI.Importance, Name = gossipPOI.Name }; SQLDatabase.POIs.Add(poiData); } } else { gossipPOI.ID = "@PID+" + LastGossipPOIEntry.ToString(); ++LastGossipPOIEntry; } lastGossipOption.ActionPoiId = gossipPOI.ID; tempGossipOptionPOI.ActionPoiId = gossipPOI.ID; Storage.GossipPOIs.Add(gossipPOI, packet.TimeSpan); if (tempGossipOptionPOI.HasSelection) { if (tempGossipOptionPOI.ActionMenuId != null) { Storage.GossipMenuOptionActions.Add(new GossipMenuOptionAction { MenuId = tempGossipOptionPOI.MenuId, OptionIndex = tempGossipOptionPOI.OptionIndex, ActionMenuId = tempGossipOptionPOI.ActionMenuId, ActionPoiId = gossipPOI.ID }, packet.TimeSpan); //clear temp tempGossipOptionPOI.MenuId = null; tempGossipOptionPOI.OptionIndex = null; tempGossipOptionPOI.ActionMenuId = null; tempGossipOptionPOI.ActionPoiId = null; } } }