- Implemented quest POI's. May be not perfect, but it works :P

This commit is contained in:
tomrus88 2009-11-14 19:56:01 +03:00
parent 2bdfb0d7bb
commit b09ee8e571
5 changed files with 199 additions and 3 deletions

View file

@ -489,9 +489,66 @@ void WorldSession::HandleQueryQuestsCompleted( WorldPacket & recv_data )
void WorldSession::HandleQuestPOIQuery(WorldPacket& recv_data)
{
recv_data.read_skip<uint64>();
uint32 count;
recv_data >> count; // quest count, max=25
WorldPacket data(SMSG_QUEST_POI_QUERY_RESPONSE, 4);
data << uint32(0); // count
if(count >= MAX_QUEST_LOG_SIZE)
return;
WorldPacket data(SMSG_QUEST_POI_QUERY_RESPONSE, 4+(4+4)*count);
data << uint32(count); // count
for(int i = 0; i < count; ++i)
{
uint32 questId;
recv_data >> questId; // quest id
bool questOk = false;
uint16 questSlot = _player->FindQuestSlot(questId);
if(questSlot != MAX_QUEST_LOG_SIZE)
questOk =_player->GetQuestSlotQuestId(questSlot) == questId;
if(questOk)
{
QuestPOIVector const *POI = sObjectMgr.GetQuestPOIVector(questId);
if(POI)
{
data << uint32(questId); // quest ID
data << uint32(POI->size()); // POI count
int index = 0;
for(QuestPOIVector::const_iterator itr = POI->begin(); itr != POI->end(); ++itr)
{
data << uint32(index); // POI index
data << int32(itr->ObjectiveIndex); // objective index
data << uint32(itr->MapId); // mapid
data << uint32(itr->Unk1); // unknown
data << uint32(itr->points.size()); // POI points count
for(std::vector<QuestPOIPoint>::const_iterator itr2 = itr->points.begin(); itr2 != itr->points.end(); ++itr2)
{
data << int32(itr2->x); // POI point x
data << int32(itr2->y); // POI point y
}
++index;
}
}
else
{
data << uint32(questId); // quest ID
data << uint32(0); // POI count
}
}
else
{
data << uint32(questId); // quest ID
data << uint32(0); // POI count
}
}
data.hexlike();
SendPacket(&data);
}