From 8c072b93af3a4efcbde21cc85fedcf7fa48fa7b4 Mon Sep 17 00:00:00 2001 From: Shauren Date: Mon, 20 Nov 2023 13:02:56 +0100 Subject: Core/Scripts: Add start/fail asset values from criteria to valid game event ids Closes #29447 --- src/server/game/Achievements/CriteriaHandler.cpp | 10 ++++++++ src/server/game/Achievements/CriteriaHandler.h | 2 ++ src/server/game/DataStores/DB2Stores.h | 1 + src/server/game/Globals/ObjectMgr.cpp | 32 ++++++++++++------------ 4 files changed, 29 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/server/game/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp index 2f4d7d1a356..2ce1485fcbf 100644 --- a/src/server/game/Achievements/CriteriaHandler.cpp +++ b/src/server/game/Achievements/CriteriaHandler.cpp @@ -4539,11 +4539,21 @@ CriteriaList const& CriteriaMgr::GetScenarioCriteriaByTypeAndScenario(CriteriaTy return EmptyCriteriaList; } +std::unordered_map const& CriteriaMgr::GetCriteriaByStartEvent(CriteriaStartEvent startEvent) const +{ + return _criteriasByStartEvent[size_t(startEvent)]; +} + CriteriaList const* CriteriaMgr::GetCriteriaByStartEvent(CriteriaStartEvent startEvent, int32 asset) const { return Trinity::Containers::MapGetValuePtr(_criteriasByStartEvent[size_t(startEvent)], asset); } +std::unordered_map const& CriteriaMgr::GetCriteriaByFailEvent(CriteriaFailEvent failEvent) const +{ + return _criteriasByFailEvent[size_t(failEvent)]; +} + CriteriaList const* CriteriaMgr::GetCriteriaByFailEvent(CriteriaFailEvent failEvent, int32 asset) const { return Trinity::Containers::MapGetValuePtr(_criteriasByFailEvent[size_t(failEvent)], asset); diff --git a/src/server/game/Achievements/CriteriaHandler.h b/src/server/game/Achievements/CriteriaHandler.h index 0205130cdc0..cfcf8a614c1 100644 --- a/src/server/game/Achievements/CriteriaHandler.h +++ b/src/server/game/Achievements/CriteriaHandler.h @@ -349,8 +349,10 @@ public: return itr != _criteriaTreeByCriteria.end() ? &itr->second : nullptr; } + std::unordered_map const& GetCriteriaByStartEvent(CriteriaStartEvent startEvent) const; CriteriaList const* GetCriteriaByStartEvent(CriteriaStartEvent startEvent, int32 asset) const; + std::unordered_map const& GetCriteriaByFailEvent(CriteriaFailEvent failEvent) const; CriteriaList const* GetCriteriaByFailEvent(CriteriaFailEvent failEvent, int32 asset) const; CriteriaDataSet const* GetCriteriaDataSet(Criteria const* Criteria) const diff --git a/src/server/game/DataStores/DB2Stores.h b/src/server/game/DataStores/DB2Stores.h index a8f40b74d48..f7f693002d2 100644 --- a/src/server/game/DataStores/DB2Stores.h +++ b/src/server/game/DataStores/DB2Stores.h @@ -259,6 +259,7 @@ TC_GAME_API extern DB2Storage sSummonPrope TC_GAME_API extern DB2Storage sTalentStore; TC_GAME_API extern DB2Storage sTaxiNodesStore; TC_GAME_API extern DB2Storage sTaxiPathStore; +TC_GAME_API extern DB2Storage sTaxiPathNodeStore; TC_GAME_API extern DB2Storage sTraitCondStore; TC_GAME_API extern DB2Storage sTraitCostStore; TC_GAME_API extern DB2Storage sTraitCurrencyStore; diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index e882198834a..2f4573c7ee0 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -5873,26 +5873,18 @@ void ObjectMgr::LoadEventSet() } // Load all possible event ids from spells - for (SpellNameEntry const* spellNameEntry : sSpellNameStore) - if (SpellInfo const* spell = sSpellMgr->GetSpellInfo(spellNameEntry->ID, DIFFICULTY_NONE)) - for (SpellEffectInfo const& spellEffectInfo : spell->GetEffects()) - if (spellEffectInfo.IsEffect(SPELL_EFFECT_SEND_EVENT)) - if (spellEffectInfo.MiscValue) - _eventStore.insert(spellEffectInfo.MiscValue); + for (SpellEffectEntry const* spellEffect : sSpellEffectStore) + if (spellEffect->Effect == SPELL_EFFECT_SEND_EVENT && spellEffect->EffectMiscValue[0]) + _eventStore.insert(spellEffect->EffectMiscValue[0]); // Load all possible event ids from taxi path nodes - for (size_t path_idx = 0; path_idx < sTaxiPathNodesByPath.size(); ++path_idx) + for (TaxiPathNodeEntry const* node : sTaxiPathNodeStore) { - for (size_t node_idx = 0; node_idx < sTaxiPathNodesByPath[path_idx].size(); ++node_idx) - { - TaxiPathNodeEntry const* node = sTaxiPathNodesByPath[path_idx][node_idx]; - - if (node->ArrivalEventID) - _eventStore.insert(node->ArrivalEventID); + if (node->ArrivalEventID) + _eventStore.insert(node->ArrivalEventID); - if (node->DepartureEventID) - _eventStore.insert(node->DepartureEventID); - } + if (node->DepartureEventID) + _eventStore.insert(node->DepartureEventID); } // Load all possible event ids from criterias @@ -5914,6 +5906,14 @@ void ObjectMgr::LoadEventSet() for (ScenarioEntry const* scenario : sScenarioStore) for (CriteriaType criteriaType : eventCriteriaTypes) addCriteriaEventsToStore(sCriteriaMgr->GetScenarioCriteriaByTypeAndScenario(criteriaType, scenario->ID)); + + for (auto const& [gameEventId, _] : sCriteriaMgr->GetCriteriaByStartEvent(CriteriaStartEvent::SendEvent)) + if (gameEventId) + _eventStore.insert(gameEventId); + + for (auto const& [gameEventId, _] : sCriteriaMgr->GetCriteriaByFailEvent(CriteriaFailEvent::SendEvent)) + if (gameEventId) + _eventStore.insert(gameEventId); } void ObjectMgr::LoadEventScripts() -- cgit v1.2.3