aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Player
diff options
context:
space:
mode:
authorTreeston <treeston.mmoc@gmail.com>2019-08-04 12:22:57 +0200
committerGitHub <noreply@github.com>2019-08-04 12:22:57 +0200
commita5e73e41c0e813e674bb0a644e0052052435494e (patch)
treecabbeadc1e07635f1a8fc53599895613cbe61723 /src/server/game/Entities/Player
parent15e85f882fdb7b5d1d48302907e76c993ee4e923 (diff)
Core/Pooling: Quest pooling rewrite: (PR#23627)
- Split quest pooling from PoolMgr (into QuestPoolMgr) - Proper saving/restoring on server restart - No more hacking into sObjectMgr to insert/remove available quests
Diffstat (limited to 'src/server/game/Entities/Player')
-rw-r--r--src/server/game/Entities/Player/Player.cpp51
1 files changed, 22 insertions, 29 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 392514a2f93..85346522d2d 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -74,6 +74,7 @@
#include "PoolMgr.h"
#include "QueryHolder.h"
#include "QuestDef.h"
+#include "QuestPools.h"
#include "Realm.h"
#include "ReputationMgr.h"
#include "SkillDiscovery.h"
@@ -14486,15 +14487,15 @@ uint32 Player::GetDefaultGossipMenuForSource(WorldObject* source)
void Player::PrepareQuestMenu(ObjectGuid guid)
{
- QuestRelationBounds objectQR;
- QuestRelationBounds objectQIR;
+ QuestRelationResult objectQR;
+ QuestRelationResult objectQIR;
// pets also can have quests
Creature* creature = ObjectAccessor::GetCreatureOrPetOrVehicle(*this, guid);
if (creature)
{
- objectQR = sObjectMgr->GetCreatureQuestRelationBounds(creature->GetEntry());
- objectQIR = sObjectMgr->GetCreatureQuestInvolvedRelationBounds(creature->GetEntry());
+ objectQR = sObjectMgr->GetCreatureQuestRelations(creature->GetEntry());
+ objectQIR = sObjectMgr->GetCreatureQuestInvolvedRelations(creature->GetEntry());
}
else
{
@@ -14505,8 +14506,8 @@ void Player::PrepareQuestMenu(ObjectGuid guid)
GameObject* pGameObject = _map->GetGameObject(guid);
if (pGameObject)
{
- objectQR = sObjectMgr->GetGOQuestRelationBounds(pGameObject->GetEntry());
- objectQIR = sObjectMgr->GetGOQuestInvolvedRelationBounds(pGameObject->GetEntry());
+ objectQR = sObjectMgr->GetGOQuestRelations(pGameObject->GetEntry());
+ objectQIR = sObjectMgr->GetGOQuestInvolvedRelations(pGameObject->GetEntry());
}
else
return;
@@ -14515,9 +14516,8 @@ void Player::PrepareQuestMenu(ObjectGuid guid)
QuestMenu &qm = PlayerTalkClass->GetQuestMenu();
qm.ClearMenu();
- for (QuestRelations::const_iterator i = objectQIR.first; i != objectQIR.second; ++i)
+ for (uint32 quest_id : objectQIR)
{
- uint32 quest_id = i->second;
QuestStatus status = GetQuestStatus(quest_id);
if (status == QUEST_STATUS_COMPLETE)
qm.AddMenuItem(quest_id, 4);
@@ -14527,9 +14527,8 @@ void Player::PrepareQuestMenu(ObjectGuid guid)
// qm.AddMenuItem(quest_id, 2);
}
- for (QuestRelations::const_iterator i = objectQR.first; i != objectQR.second; ++i)
+ for (uint32 quest_id : objectQR)
{
- uint32 quest_id = i->second;
Quest const* quest = sObjectMgr->GetQuestTemplate(quest_id);
if (!quest)
continue;
@@ -14639,11 +14638,11 @@ bool Player::IsActiveQuest(uint32 quest_id) const
Quest const* Player::GetNextQuest(ObjectGuid guid, Quest const* quest) const
{
- QuestRelationBounds objectQR;
+ QuestRelationResult quests;
Creature* creature = ObjectAccessor::GetCreatureOrPetOrVehicle(*this, guid);
if (creature)
- objectQR = sObjectMgr->GetCreatureQuestRelationBounds(creature->GetEntry());
+ quests = sObjectMgr->GetCreatureQuestRelations(creature->GetEntry());
else
{
//we should obtain map pointer from GetMap() in 99% of cases. Special case
@@ -14652,17 +14651,14 @@ Quest const* Player::GetNextQuest(ObjectGuid guid, Quest const* quest) const
ASSERT(_map);
GameObject* pGameObject = _map->GetGameObject(guid);
if (pGameObject)
- objectQR = sObjectMgr->GetGOQuestRelationBounds(pGameObject->GetEntry());
+ quests = sObjectMgr->GetGOQuestRelations(pGameObject->GetEntry());
else
return nullptr;
}
- uint32 nextQuestID = quest->GetNextQuestInChain();
- for (QuestRelations::const_iterator itr = objectQR.first; itr != objectQR.second; ++itr)
- {
- if (itr->second == nextQuestID)
+ if (uint32 nextQuestID = quest->GetNextQuestInChain())
+ if (quests.HasQuest(nextQuestID))
return sObjectMgr->GetQuestTemplate(nextQuestID);
- }
return nullptr;
}
@@ -15891,7 +15887,7 @@ bool Player::CanShareQuest(uint32 quest_id) const
if (itr != m_QuestStatus.end())
{
// in pool and not currently available (wintergrasp weekly, dalaran weekly) - can't share
- if (sPoolMgr->IsPartOfAPool<Quest>(quest_id) && !sPoolMgr->IsSpawnedObject<Quest>(quest_id))
+ if (sQuestPoolMgr->IsQuestActive(quest_id))
{
SendPushToPartyResponse(this, QUEST_PARTY_MSG_CANT_BE_SHARED_TODAY);
return false;
@@ -15982,8 +15978,7 @@ void Player::SendQuestUpdate(uint32 questId)
QuestGiverStatus Player::GetQuestDialogStatus(Object* questgiver)
{
- QuestRelationBounds qr;
- QuestRelationBounds qir;
+ QuestRelationResult qr, qir;
switch (questgiver->GetTypeId())
{
@@ -15992,8 +15987,8 @@ QuestGiverStatus Player::GetQuestDialogStatus(Object* questgiver)
if (auto ai = questgiver->ToGameObject()->AI())
if (auto questStatus = ai->GetDialogStatus(this))
return *questStatus;
- qr = sObjectMgr->GetGOQuestRelationBounds(questgiver->GetEntry());
- qir = sObjectMgr->GetGOQuestInvolvedRelationBounds(questgiver->GetEntry());
+ qr = sObjectMgr->GetGOQuestRelations(questgiver->GetEntry());
+ qir = sObjectMgr->GetGOQuestInvolvedRelations(questgiver->GetEntry());
break;
}
case TYPEID_UNIT:
@@ -16001,8 +15996,8 @@ QuestGiverStatus Player::GetQuestDialogStatus(Object* questgiver)
if (auto ai = questgiver->ToCreature()->AI())
if (auto questStatus = ai->GetDialogStatus(this))
return *questStatus;
- qr = sObjectMgr->GetCreatureQuestRelationBounds(questgiver->GetEntry());
- qir = sObjectMgr->GetCreatureQuestInvolvedRelationBounds(questgiver->GetEntry());
+ qr = sObjectMgr->GetCreatureQuestRelations(questgiver->GetEntry());
+ qir = sObjectMgr->GetCreatureQuestInvolvedRelations(questgiver->GetEntry());
break;
}
default:
@@ -16013,10 +16008,9 @@ QuestGiverStatus Player::GetQuestDialogStatus(Object* questgiver)
QuestGiverStatus result = DIALOG_STATUS_NONE;
- for (QuestRelations::const_iterator i = qir.first; i != qir.second; ++i)
+ for (uint32 questId : qir)
{
QuestGiverStatus result2 = DIALOG_STATUS_NONE;
- uint32 questId = i->second;
Quest const* quest = sObjectMgr->GetQuestTemplate(questId);
if (!quest)
continue;
@@ -16034,10 +16028,9 @@ QuestGiverStatus Player::GetQuestDialogStatus(Object* questgiver)
result = result2;
}
- for (QuestRelations::const_iterator i = qr.first; i != qr.second; ++i)
+ for (uint32 questId : qr)
{
QuestGiverStatus result2 = DIALOG_STATUS_NONE;
- uint32 questId = i->second;
Quest const* quest = sObjectMgr->GetQuestTemplate(questId);
if (!quest)
continue;