diff options
author | Machiavelli <none@none> | 2010-03-20 21:26:29 +0100 |
---|---|---|
committer | Machiavelli <none@none> | 2010-03-20 21:26:29 +0100 |
commit | f7ffd77123b5f6c943f7d280fbea5742e2c5d9b9 (patch) | |
tree | fbc2df239fcf5e41dcbbd412d4c8f95f7af44d18 /src | |
parent | 830062779ebe78d3c7044b1185bc1eb965b1a2aa (diff) |
Do not use hard coded index in SMSG_QUEST_POI_QUERY_RESPONSE. May be the resolution for some client crashes.
--HG--
branch : trunk
Diffstat (limited to 'src')
-rw-r--r-- | src/game/ObjectMgr.cpp | 2 | ||||
-rw-r--r-- | src/game/ObjectMgr.h | 7 | ||||
-rw-r--r-- | src/game/QueryHandler.cpp | 14 |
3 files changed, 11 insertions, 12 deletions
diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index f9f00d57120..754a0f16ef1 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -6779,7 +6779,7 @@ void ObjectMgr::LoadQuestPOI() uint32 unk3 = fields[6].GetUInt32(); uint32 unk4 = fields[7].GetUInt32(); - QuestPOI POI(objIndex, mapId, WorldMapAreaId, FloorId, unk3, unk4); + QuestPOI POI(id, objIndex, mapId, WorldMapAreaId, FloorId, unk3, unk4); QueryResult_AutoPtr points = WorldDatabase.PQuery("SELECT x, y FROM quest_poi_points WHERE questId='%u' AND id='%i'", questId, id); diff --git a/src/game/ObjectMgr.h b/src/game/ObjectMgr.h index 5df66a923f1..1f061618ced 100644 --- a/src/game/ObjectMgr.h +++ b/src/game/ObjectMgr.h @@ -261,16 +261,17 @@ struct QuestPOIPoint struct QuestPOI { + uint32 Id; int32 ObjectiveIndex; uint32 MapId; - uint32 Unk1; + uint32 AreaId; uint32 Unk2; uint32 Unk3; uint32 Unk4; std::vector<QuestPOIPoint> points; - QuestPOI() : ObjectiveIndex(0), MapId(0), Unk1(0), Unk2(0), Unk3(0), Unk4(0) {} - QuestPOI(int32 objIndex, uint32 mapId, uint32 unk1, uint32 unk2, uint32 unk3, uint32 unk4) : ObjectiveIndex(objIndex), MapId(mapId), Unk1(unk1), Unk2(unk2), Unk3(unk3), Unk4(unk4) {} + QuestPOI() : Id(0), ObjectiveIndex(0), MapId(0), AreaId(0), Unk2(0), Unk3(0), Unk4(0) {} + QuestPOI(uint32 id, int32 objIndex, uint32 mapId, uint32 areaId, uint32 unk2, uint32 unk3, uint32 unk4) : Id(id), ObjectiveIndex(objIndex), MapId(mapId), AreaId(areaId), Unk2(unk2), Unk3(unk3), Unk4(unk4) {} }; typedef std::vector<QuestPOI> QuestPOIVector; diff --git a/src/game/QueryHandler.cpp b/src/game/QueryHandler.cpp index 5d7de476d4b..e6647fce9ac 100644 --- a/src/game/QueryHandler.cpp +++ b/src/game/QueryHandler.cpp @@ -503,25 +503,23 @@ void WorldSession::HandleQuestPOIQuery(WorldPacket& recv_data) { 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->Id); // POI index + data << int32(itr->ObjectiveIndex); // objective index + data << uint32(itr->MapId); // mapid + data << uint32(itr->AreaId); // areaid data << uint32(itr->Unk2); // unknown data << uint32(itr->Unk3); // unknown data << uint32(itr->Unk4); // unknown - data << uint32(itr->points.size()); // POI points count + 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 |