void HandleQuestPOIQuery(QuestPOIQuery packet) { if (packet.MissingQuestCount >= SharedConst.MaxQuestLogSize) { return; } // Read quest ids and add the in a unordered_set so we don't send POIs for the same quest multiple times HashSet <uint> questIds = new HashSet <uint>(); for (int i = 0; i < packet.MissingQuestCount; ++i) { questIds.Add(packet.MissingQuestPOIs[i]); // QuestID } QuestPOIQueryResponse response = new QuestPOIQueryResponse(); foreach (uint questId in questIds) { if (_player.FindQuestSlot(questId) != SharedConst.MaxQuestLogSize) { QuestPOIData poiData = Global.ObjectMgr.GetQuestPOIData(questId); if (poiData != null) { response.QuestPOIDataStats.Add(poiData); } } } SendPacket(response); }
void HandleQuestPOIQuery(QuestPOIQuery packet) { if (packet.MissingQuestCount >= SharedConst.MaxQuestLogSize) { return; } // Read quest ids and add the in a unordered_set so we don't send POIs for the same quest multiple times HashSet <uint> questIds = new HashSet <uint>(); for (int i = 0; i < packet.MissingQuestCount; ++i) { questIds.Add(packet.MissingQuestPOIs[i]); // QuestID } QuestPOIQueryResponse response = new QuestPOIQueryResponse(); foreach (var QuestID in questIds) { bool questOk = false; ushort questSlot = GetPlayer().FindQuestSlot(QuestID); if (questSlot != SharedConst.MaxQuestLogSize) { questOk = GetPlayer().GetQuestSlotQuestId(questSlot) == QuestID; } if (questOk) { var poiData = Global.ObjectMgr.GetQuestPOIList(QuestID); if (poiData != null) { QuestPOIData questPOIData = new QuestPOIData(); questPOIData.QuestID = QuestID; foreach (var data in poiData) { QuestPOIBlobData questPOIBlobData = new QuestPOIBlobData(); questPOIBlobData.BlobIndex = data.BlobIndex; questPOIBlobData.ObjectiveIndex = data.ObjectiveIndex; questPOIBlobData.QuestObjectiveID = data.QuestObjectiveID; questPOIBlobData.QuestObjectID = data.QuestObjectID; questPOIBlobData.MapID = data.MapID; questPOIBlobData.WorldMapAreaID = data.WorldMapAreaID; questPOIBlobData.Floor = data.Floor; questPOIBlobData.Priority = data.Priority; questPOIBlobData.Flags = data.Flags; questPOIBlobData.WorldEffectID = data.WorldEffectID; questPOIBlobData.PlayerConditionID = data.PlayerConditionID; questPOIBlobData.UnkWoD1 = data.UnkWoD1; questPOIBlobData.AlwaysAllowMergingBlobs = data.AlwaysAllowMergingBlobs; foreach (var point in data.points) { questPOIBlobData.QuestPOIBlobPointStats.Add(new QuestPOIBlobPoint(point.X, point.Y)); } questPOIData.QuestPOIBlobDataStats.Add(questPOIBlobData); } response.QuestPOIDataStats.Add(questPOIData); } } } SendPacket(response); }