diff options
author | DDuarte <dnpd.dd@gmail.com> | 2014-09-01 19:06:28 +0100 |
---|---|---|
committer | DDuarte <dnpd.dd@gmail.com> | 2014-09-01 19:06:28 +0100 |
commit | 5ca5a75d21ba6f79c9c83d1e1b6a84da88f65dc0 (patch) | |
tree | 49ac196a924095ded40248fa4c726355adc8d574 | |
parent | e85f73c8162a4fdc7d7a8fe2667b6f867cb7c721 (diff) |
Core/Quests: Add methods to get a list of npcs/GOs that end (involved relation) a given a quest
-rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 14 | ||||
-rw-r--r-- | src/server/game/Globals/ObjectMgr.h | 18 |
2 files changed, 25 insertions, 7 deletions
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 0bc5c29ab11..7ab843943f8 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -7329,7 +7329,7 @@ void ObjectMgr::DeleteCorpseCellData(uint32 mapid, uint32 cellid, uint32 player_ cell_guids.corpses.erase(player_guid); } -void ObjectMgr::LoadQuestRelationsHelper(QuestRelations& map, std::string const& table, bool starter, bool go) +void ObjectMgr::LoadQuestRelationsHelper(QuestRelations& map, QuestRelationsReverse* reverseMap, std::string const& table, bool starter, bool go) { uint32 oldMSTime = getMSTime(); @@ -7362,7 +7362,11 @@ void ObjectMgr::LoadQuestRelationsHelper(QuestRelations& map, std::string const& } if (!poolId || !starter) + { map.insert(QuestRelations::value_type(id, quest)); + if (reverseMap) + reverseMap->insert(QuestRelationsReverse::value_type(quest, id)); + } else if (starter) poolRelationMap->insert(PooledQuestRelation::value_type(quest, id)); @@ -7374,7 +7378,7 @@ void ObjectMgr::LoadQuestRelationsHelper(QuestRelations& map, std::string const& void ObjectMgr::LoadGameobjectQuestStarters() { - LoadQuestRelationsHelper(_goQuestRelations, "gameobject_queststarter", true, true); + LoadQuestRelationsHelper(_goQuestRelations, nullptr, "gameobject_queststarter", true, true); for (QuestRelations::iterator itr = _goQuestRelations.begin(); itr != _goQuestRelations.end(); ++itr) { @@ -7388,7 +7392,7 @@ void ObjectMgr::LoadGameobjectQuestStarters() void ObjectMgr::LoadGameobjectQuestEnders() { - LoadQuestRelationsHelper(_goQuestInvolvedRelations, "gameobject_questender", false, true); + LoadQuestRelationsHelper(_goQuestInvolvedRelations, &_goQuestInvolvedRelationsReverse, "gameobject_questender", false, true); for (QuestRelations::iterator itr = _goQuestInvolvedRelations.begin(); itr != _goQuestInvolvedRelations.end(); ++itr) { @@ -7402,7 +7406,7 @@ void ObjectMgr::LoadGameobjectQuestEnders() void ObjectMgr::LoadCreatureQuestStarters() { - LoadQuestRelationsHelper(_creatureQuestRelations, "creature_queststarter", true, false); + LoadQuestRelationsHelper(_creatureQuestRelations, nullptr, "creature_queststarter", true, false); for (QuestRelations::iterator itr = _creatureQuestRelations.begin(); itr != _creatureQuestRelations.end(); ++itr) { @@ -7416,7 +7420,7 @@ void ObjectMgr::LoadCreatureQuestStarters() void ObjectMgr::LoadCreatureQuestEnders() { - LoadQuestRelationsHelper(_creatureQuestInvolvedRelations, "creature_questender", false, false); + LoadQuestRelationsHelper(_creatureQuestInvolvedRelations, &_creatureQuestInvolvedRelationsReverse, "creature_questender", false, false); for (QuestRelations::iterator itr = _creatureQuestInvolvedRelations.begin(); itr != _creatureQuestInvolvedRelations.end(); ++itr) { diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index 56ae4a4c6d1..dc9196dd0df 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -492,8 +492,10 @@ typedef std::unordered_map<int32, TrinityStringLocale> TrinityStringLocaleContai typedef std::unordered_map<uint32, GossipMenuItemsLocale> GossipMenuItemsLocaleContainer; typedef std::unordered_map<uint32, PointOfInterestLocale> PointOfInterestLocaleContainer; -typedef std::multimap<uint32, uint32> QuestRelations; +typedef std::multimap<uint32, uint32> QuestRelations; // unit/go -> quest +typedef std::multimap<uint32, uint32> QuestRelationsReverse; // quest -> unit/go typedef std::pair<QuestRelations::const_iterator, QuestRelations::const_iterator> QuestRelationBounds; +typedef std::pair<QuestRelationsReverse::const_iterator, QuestRelationsReverse::const_iterator> QuestRelationReverseBounds; struct PetLevelInfo { @@ -930,6 +932,11 @@ class ObjectMgr return _goQuestInvolvedRelations.equal_range(go_entry); } + QuestRelationReverseBounds GetGOQuestInvolvedRelationReverseBounds(uint32 questId) + { + return _goQuestInvolvedRelationsReverse.equal_range(questId); + } + QuestRelations* GetCreatureQuestRelationMap() { return &_creatureQuestRelations; @@ -945,6 +952,11 @@ class ObjectMgr return _creatureQuestInvolvedRelations.equal_range(creature_entry); } + QuestRelationReverseBounds GetCreatureQuestInvolvedRelationReverseBounds(uint32 questId) + { + return _creatureQuestInvolvedRelationsReverse.equal_range(questId); + } + void LoadEventScripts(); void LoadSpellScripts(); void LoadWaypointScripts(); @@ -1347,8 +1359,10 @@ class ObjectMgr QuestRelations _goQuestRelations; QuestRelations _goQuestInvolvedRelations; + QuestRelationsReverse _goQuestInvolvedRelationsReverse; QuestRelations _creatureQuestRelations; QuestRelations _creatureQuestInvolvedRelations; + QuestRelationsReverse _creatureQuestInvolvedRelationsReverse; //character reserved names typedef std::set<std::wstring> ReservedNamesContainer; @@ -1373,7 +1387,7 @@ class ObjectMgr private: void LoadScripts(ScriptsType type); void CheckScripts(ScriptsType type, std::set<int32>& ids); - void LoadQuestRelationsHelper(QuestRelations& map, std::string const& table, bool starter, bool go); + void LoadQuestRelationsHelper(QuestRelations& map, QuestRelationsReverse* reverseMap, std::string const& table, bool starter, bool go); void PlayerCreateInfoAddItemHelper(uint32 race_, uint32 class_, uint32 itemId, int32 count); MailLevelRewardContainer _mailLevelRewardStore; |