diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Conditions/ConditionMgr.cpp | 12 | ||||
-rw-r--r-- | src/server/game/Conditions/ConditionMgr.h | 2 | ||||
-rw-r--r-- | src/server/game/Maps/PhaseMgr.cpp | 30 | ||||
-rw-r--r-- | src/server/game/Maps/PhaseMgr.h | 18 |
4 files changed, 35 insertions, 27 deletions
diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index 01d675a35c1..15fd5e02985 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -727,20 +727,20 @@ ConditionList ConditionMgr::GetConditionsForSmartEvent(int32 entryOrGuid, uint32 return cond; } -ConditionList ConditionMgr::GetConditionsForPhaseDefinition(uint32 zone, uint32 entry) +ConditionList const* ConditionMgr::GetConditionsForPhaseDefinition(uint32 zone, uint32 entry) { - ConditionList cond; PhaseDefinitionConditionContainer::const_iterator itr = PhaseDefinitionsConditionStore.find(zone); if (itr != PhaseDefinitionsConditionStore.end()) { - ConditionTypeContainer::const_iterator i = (*itr).second.find(entry); - if (i != (*itr).second.end()) + ConditionTypeContainer::const_iterator i = itr->second.find(entry); + if (i != itr->second.end()) { - cond = (*i).second; sLog->outDebug(LOG_FILTER_CONDITIONSYS, "GetConditionsForPhaseDefinition: found conditions for zone %u entry %u", zone, entry); + return &i->second; } } - return cond; + + return NULL; } ConditionList ConditionMgr::GetConditionsForNpcVendorEvent(uint32 creatureId, uint32 itemId) diff --git a/src/server/game/Conditions/ConditionMgr.h b/src/server/game/Conditions/ConditionMgr.h index 4db03d8f7df..2547e6bc8a8 100644 --- a/src/server/game/Conditions/ConditionMgr.h +++ b/src/server/game/Conditions/ConditionMgr.h @@ -254,7 +254,7 @@ class ConditionMgr ConditionList GetConditionsForSpellClickEvent(uint32 creatureId, uint32 spellId); ConditionList GetConditionsForSmartEvent(int32 entryOrGuid, uint32 eventId, uint32 sourceType); ConditionList GetConditionsForVehicleSpell(uint32 creatureId, uint32 spellId); - ConditionList GetConditionsForPhaseDefinition(uint32 zone, uint32 entry); + ConditionList const* GetConditionsForPhaseDefinition(uint32 zone, uint32 entry); ConditionList GetConditionsForNpcVendorEvent(uint32 creatureId, uint32 itemId); private: diff --git a/src/server/game/Maps/PhaseMgr.cpp b/src/server/game/Maps/PhaseMgr.cpp index 99eee8d7c08..a7393dfba7f 100644 --- a/src/server/game/Maps/PhaseMgr.cpp +++ b/src/server/game/Maps/PhaseMgr.cpp @@ -107,18 +107,26 @@ void PhaseMgr::Recalculate() inline bool PhaseMgr::CheckDefinition(PhaseDefinition const* phaseDefinition) { - return sConditionMgr->IsObjectMeetToConditions(player, sConditionMgr->GetConditionsForPhaseDefinition(phaseDefinition->zoneId, phaseDefinition->entry)); + ConditionList const* conditions = sConditionMgr->GetConditionsForPhaseDefinition(phaseDefinition->zoneId, phaseDefinition->entry); + if (!conditions) + return true; + + ConditionSourceInfo srcInfo(player); + return sConditionMgr->IsObjectMeetToConditions(srcInfo, *conditions); } -bool PhaseMgr::NeedsPhaseUpdateWithData(PhaseUpdateData const updateData) const +bool PhaseMgr::NeedsPhaseUpdateWithData(PhaseUpdateData const& updateData) const { PhaseDefinitionStore::const_iterator itr = _PhaseDefinitionStore->find(player->GetZoneId()); if (itr != _PhaseDefinitionStore->end()) { for (PhaseDefinitionContainer::const_iterator phase = itr->second.begin(); phase != itr->second.end(); ++phase) { - ConditionList conditionList = sConditionMgr->GetConditionsForPhaseDefinition(phase->zoneId, phase->entry); - for (ConditionList::const_iterator condition = conditionList.begin(); condition != conditionList.end(); ++condition) + ConditionList const* conditionList = sConditionMgr->GetConditionsForPhaseDefinition(phase->zoneId, phase->entry); + if (!conditionList) + continue; + + for (ConditionList::const_iterator condition = conditionList->begin(); condition != conditionList->end(); ++condition) if (updateData.IsConditionRelated(*condition)) return true; } @@ -203,7 +211,7 @@ void PhaseMgr::SendDebugReportToPlayer(Player* const debugger) ChatHandler(debugger->GetSession()).PSendSysMessage(LANG_PHASING_PHASEMASK, phaseData.GetPhaseMaskForSpawn(), player->GetPhaseMask()); } -void PhaseMgr::SetCustomPhase(uint32 const phaseMask) +void PhaseMgr::SetCustomPhase(uint32 phaseMask) { phaseData._CustomPhasemask = phaseMask; @@ -291,7 +299,7 @@ void PhaseData::AddPhaseDefinition(PhaseDefinition const* phaseDefinition) activePhaseDefinitions.push_back(phaseDefinition); } -void PhaseData::AddAuraInfo(uint32 const spellId, PhaseInfo phaseInfo) +void PhaseData::AddAuraInfo(uint32 spellId, PhaseInfo const& phaseInfo) { if (phaseInfo.phasemask) _PhasemaskThroughAuras |= phaseInfo.phasemask; @@ -299,7 +307,7 @@ void PhaseData::AddAuraInfo(uint32 const spellId, PhaseInfo phaseInfo) spellPhaseInfo[spellId] = phaseInfo; } -uint32 PhaseData::RemoveAuraInfo(uint32 const spellId) +uint32 PhaseData::RemoveAuraInfo(uint32 spellId) { PhaseInfoContainer::const_iterator rAura = spellPhaseInfo.find(spellId); if (rAura != spellPhaseInfo.end()) @@ -323,14 +331,14 @@ uint32 PhaseData::RemoveAuraInfo(uint32 const spellId) return updateflag; } - else - return 0; + + return 0; } ////////////////////////////////////////////////////////////////// // Phase Update Data -void PhaseUpdateData::AddQuestUpdate(uint32 const questId) +void PhaseUpdateData::AddQuestUpdate(uint32 questId) { AddConditionType(CONDITION_QUESTREWARDED); AddConditionType(CONDITION_QUESTTAKEN); @@ -354,7 +362,7 @@ bool PhaseUpdateData::IsConditionRelated(Condition const* condition) const } } -bool PhaseMgr::IsConditionTypeSupported(ConditionTypes const conditionType) +bool PhaseMgr::IsConditionTypeSupported(ConditionTypes conditionType) { switch (conditionType) { diff --git a/src/server/game/Maps/PhaseMgr.h b/src/server/game/Maps/PhaseMgr.h index bf3da7b4cb7..ec41146ded7 100644 --- a/src/server/game/Maps/PhaseMgr.h +++ b/src/server/game/Maps/PhaseMgr.h @@ -99,8 +99,8 @@ struct PhaseData void AddPhaseDefinition(PhaseDefinition const* phaseDefinition); bool HasActiveDefinitions() const { return !activePhaseDefinitions.empty(); } - void AddAuraInfo(uint32 const spellId, PhaseInfo phaseInfo); - uint32 RemoveAuraInfo(uint32 const spellId); + void AddAuraInfo(uint32 spellId, PhaseInfo const& phaseInfo); + uint32 RemoveAuraInfo(uint32 spellId); void SendPhaseMaskToPlayer(); void SendPhaseshiftToPlayer(); @@ -113,8 +113,8 @@ private: struct PhaseUpdateData { - void AddConditionType(ConditionTypes const conditionType) { _conditionTypeFlags |= (1 << conditionType); } - void AddQuestUpdate(uint32 const questId); + void AddConditionType(ConditionTypes conditionType) { _conditionTypeFlags |= (1 << conditionType); } + void AddQuestUpdate(uint32 questId); bool IsConditionRelated(Condition const* condition) const; @@ -143,23 +143,23 @@ public: void UnRegisterPhasingAuraEffect(AuraEffect const* auraEffect); // Update flags (delayed phasing) - void AddUpdateFlag(PhaseUpdateFlag const updateFlag) { _UpdateFlags |= updateFlag; } - void RemoveUpdateFlag(PhaseUpdateFlag const updateFlag); + void AddUpdateFlag(PhaseUpdateFlag updateFlag) { _UpdateFlags |= updateFlag; } + void RemoveUpdateFlag(PhaseUpdateFlag updateFlag); // Needed for modify phase command - void SetCustomPhase(uint32 const phaseMask); + void SetCustomPhase(uint32 phaseMask); // Debug void SendDebugReportToPlayer(Player* const debugger); - static bool IsConditionTypeSupported(ConditionTypes const conditionType); + static bool IsConditionTypeSupported(ConditionTypes conditionType); private: void Recalculate(); inline bool CheckDefinition(PhaseDefinition const* phaseDefinition); - bool NeedsPhaseUpdateWithData(PhaseUpdateData const updateData) const; + bool NeedsPhaseUpdateWithData(PhaseUpdateData const& updateData) const; inline bool IsUpdateInProgress() const { return (_UpdateFlags & PHASE_UPDATE_FLAG_ZONE_UPDATE) || (_UpdateFlags & PHASE_UPDATE_FLAG_AREA_UPDATE); } |