aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMachiavelli <none@none>2010-03-20 21:26:29 +0100
committerMachiavelli <none@none>2010-03-20 21:26:29 +0100
commitf7ffd77123b5f6c943f7d280fbea5742e2c5d9b9 (patch)
treefbc2df239fcf5e41dcbbd412d4c8f95f7af44d18
parent830062779ebe78d3c7044b1185bc1eb965b1a2aa (diff)
Do not use hard coded index in SMSG_QUEST_POI_QUERY_RESPONSE. May be the resolution for some client crashes.
--HG-- branch : trunk
-rw-r--r--src/game/ObjectMgr.cpp2
-rw-r--r--src/game/ObjectMgr.h7
-rw-r--r--src/game/QueryHandler.cpp14
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