aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/QueryHandler.cpp
diff options
context:
space:
mode:
authorVincent-Michael <Vincent_Michael@gmx.de>2015-04-05 05:54:10 +0200
committerVincent-Michael <Vincent_Michael@gmx.de>2015-04-05 05:54:53 +0200
commit4359c4c75886ed227b8e14aadc0f37efc23d0341 (patch)
tree08128bec8c640a04d353993902b3e92e0a0fd383 /src/server/game/Handlers/QueryHandler.cpp
parentd1902b40957c4ce6eb0f20a48d6bb86822d96bd0 (diff)
Core/PacketIO: Updated and enabled CMSG_QUEST_POI_QUERY / SMSG_QUEST_POI_QUERY_RESPONSE
Diffstat (limited to 'src/server/game/Handlers/QueryHandler.cpp')
-rw-r--r--src/server/game/Handlers/QueryHandler.cpp89
1 files changed, 44 insertions, 45 deletions
diff --git a/src/server/game/Handlers/QueryHandler.cpp b/src/server/game/Handlers/QueryHandler.cpp
index 6c79b1e9632..a102123c349 100644
--- a/src/server/game/Handlers/QueryHandler.cpp
+++ b/src/server/game/Handlers/QueryHandler.cpp
@@ -324,77 +324,76 @@ void WorldSession::HandleQuestNPCQuery(WorldPacket& recvData)
SendPacket(&data);
}
-void WorldSession::HandleQuestPOIQuery(WorldPacket& recvData)
+void WorldSession::HandleQuestPOIQuery(WorldPackets::Query::QuestPOIQuery& packet)
{
- uint32 count;
- recvData >> count; // quest count, max=25
-
- if (count > MAX_QUEST_LOG_SIZE)
- {
- recvData.rfinish();
+ if (packet.MissingQuestCount > MAX_QUEST_LOG_SIZE)
return;
- }
// Read quest ids and add the in a unordered_set so we don't send POIs for the same quest multiple times
- std::unordered_set<uint32> questIds;
- for (uint32 i = 0; i < count; ++i)
- questIds.insert(recvData.read<uint32>()); // quest id
+ std::unordered_set<int32> questIds;
+ for (int32 i = 0; i < packet.MissingQuestCount; ++i)
+ questIds.insert(packet.MissingQuestPOIs[i]); // QuestID
- WorldPacket data(SMSG_QUEST_POI_QUERY_RESPONSE, 4 + (4 + 4)*questIds.size());
- data << uint32(questIds.size()); // count
+ WorldPackets::Query::QuestPOIQueryResponse response;
for (auto itr = questIds.begin(); itr != questIds.end(); ++itr)
{
- uint32 questId = *itr;
+ int32 QuestID = *itr;
bool questOk = false;
- uint16 questSlot = _player->FindQuestSlot(questId);
+ uint16 questSlot = _player->FindQuestSlot(QuestID);
if (questSlot != MAX_QUEST_LOG_SIZE)
- questOk =_player->GetQuestSlotQuestId(questSlot) == questId;
+ questOk = _player->GetQuestSlotQuestId(questSlot) == QuestID;
if (questOk)
{
- QuestPOIVector const* POI = sObjectMgr->GetQuestPOIVector(questId);
-
- if (POI)
+ QuestPOIVector const* poiData = sObjectMgr->GetQuestPOIVector(QuestID);
+ if (poiData)
{
- data << uint32(questId); // quest ID
- data << uint32(POI->size()); // POI count
+ WorldPackets::Query::QuestPOIData questPOIData;
- for (QuestPOIVector::const_iterator itr = POI->begin(); itr != POI->end(); ++itr)
+ questPOIData.QuestID = QuestID;
+
+ for (auto data = poiData->begin(); data != poiData->end(); ++data)
{
- data << uint32(itr->Id); // POI index
- data << int32(itr->ObjectiveIndex); // objective index
- data << uint32(itr->MapId); // mapid
- data << uint32(itr->AreaId); // areaid
- data << uint32(itr->FloorId); // floorid
- data << uint32(itr->Unk3); // unknown
- data << uint32(itr->Unk4); // unknown
- data << uint32(itr->points.size()); // POI points count
-
- for (std::vector<QuestPOIPoint>::const_iterator itr2 = itr->points.begin(); itr2 != itr->points.end(); ++itr2)
+ WorldPackets::Query::QuestPOIBlobData 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;
+
+ for (auto points = data->points.begin(); points != data->points.end(); ++points)
{
- data << int32(itr2->x); // POI point x
- data << int32(itr2->y); // POI point y
+ WorldPackets::Query::QuestPOIBlobPoint questPOIBlobPoint;
+
+ questPOIBlobPoint.X = points->X;
+ questPOIBlobPoint.Y = points->Y;
+
+ TC_LOG_ERROR("misc", "Quest: %i BlobIndex: %i X/Y: %i/%i", QuestID, data->BlobIndex, points->X, points->Y);
+
+ questPOIBlobData.QuestPOIBlobPointStats.push_back(questPOIBlobPoint);
}
+
+ questPOIData.QuestPOIBlobDataStats.push_back(questPOIBlobData);
}
- }
- else
- {
- data << uint32(questId); // quest ID
- data << uint32(0); // POI count
+
+ response.QuestPOIDataStats.push_back(questPOIData);
}
}
- else
- {
- data << uint32(questId); // quest ID
- data << uint32(0); // POI count
- }
}
- SendPacket(&data);
+ SendPacket(response.Write());
}
void WorldSession::HandleDBQueryBulk(WorldPackets::Query::DBQueryBulk& packet)