diff options
author | Meji <alvaro.megias@outlook.com> | 2023-10-15 21:26:28 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-15 21:26:28 +0200 |
commit | 71bac3bc2dd5ceacc698f5eaf2a975e0ee95a26a (patch) | |
tree | a58211c9f99ac2e6ffefb3e3418219860d484b7b | |
parent | 10b06ff50f77cc0516c5f17adffef8eb75f1d555 (diff) |
Core/Achievements: Fix CriteriaTypes related to GameEvents (#29368)
-rw-r--r-- | src/server/game/Achievements/CriteriaHandler.cpp | 5 | ||||
-rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 25 |
2 files changed, 28 insertions, 2 deletions
diff --git a/src/server/game/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp index 9718600ccc7..b98b10992cb 100644 --- a/src/server/game/Achievements/CriteriaHandler.cpp +++ b/src/server/game/Achievements/CriteriaHandler.cpp @@ -1643,6 +1643,11 @@ bool CriteriaHandler::RequirementsSatisfied(Criteria const* criteria, uint64 mis if (!miscValue1 || miscValue1 != uint32(criteria->Entry->Asset.ZoneID)) return false; break; + case CriteriaType::PlayerTriggerGameEvent: + case CriteriaType::AnyoneTriggerGameEventScenario: + if (!miscValue1 || miscValue1 != uint32(criteria->Entry->Asset.EventID)) + return false; + break; default: break; } diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index c33c494954a..3f448b6ff7d 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -24,6 +24,7 @@ #include "Chat.h" #include "Containers.h" #include "CreatureAIFactory.h" +#include "CriteriaHandler.h" #include "DatabaseEnv.h" #include "DB2Stores.h" #include "DisableMgr.h" @@ -5880,6 +5881,26 @@ void ObjectMgr::LoadEventSet() _eventStore.insert(node->DepartureEventID); } } + + // Load all possible event ids from criterias + auto addCriteriaEventsToStore = [&](CriteriaList const& criteriaList) + { + for (Criteria const* criteria : criteriaList) + if (criteria->Entry->Asset.EventID) + _eventStore.insert(criteria->Entry->Asset.EventID); + }; + + std::array<CriteriaType, 2> eventCriteriaTypes = { CriteriaType::PlayerTriggerGameEvent, CriteriaType::AnyoneTriggerGameEventScenario }; + for (CriteriaType criteriaType : eventCriteriaTypes) + { + addCriteriaEventsToStore(sCriteriaMgr->GetPlayerCriteriaByType(criteriaType, 0)); + addCriteriaEventsToStore(sCriteriaMgr->GetGuildCriteriaByType(criteriaType)); + addCriteriaEventsToStore(sCriteriaMgr->GetQuestObjectiveCriteriaByType(criteriaType)); + } + + for (ScenarioEntry const* scenario : sScenarioStore) + for (CriteriaType criteriaType : eventCriteriaTypes) + addCriteriaEventsToStore(sCriteriaMgr->GetScenarioCriteriaByTypeAndScenario(criteriaType, scenario->ID)); } void ObjectMgr::LoadEventScripts() @@ -5894,7 +5915,7 @@ void ObjectMgr::LoadEventScripts() for (ScriptMapMap::const_iterator itr = sEventScripts.begin(); itr != sEventScripts.end(); ++itr) { if (!IsValidEvent(itr->first)) - TC_LOG_ERROR("sql.sql", "Table `event_scripts` has script (Id: {}) not referring to any gameobject_template (data field referencing GameEvent), any taxi path node or any spell effect {}", + TC_LOG_ERROR("sql.sql", "Table `event_scripts` has script (Id: {}) not referring to any gameobject_template (data field referencing GameEvent), any taxi path node, any criteria asset or any spell effect {}", itr->first, SPELL_EFFECT_SEND_EVENT); } @@ -5918,7 +5939,7 @@ void ObjectMgr::LoadEventScripts() if (!IsValidEvent(eventId)) { - TC_LOG_ERROR("sql.sql", "Event (ID: {}) not referring to any gameobject_template (data field referencing GameEvent), any taxi path node or any spell effect {}", + TC_LOG_ERROR("sql.sql", "Event (ID: {}) not referring to any gameobject_template (data field referencing GameEvent), any taxi path node, any criteria asset or any spell effect {}", eventId, SPELL_EFFECT_SEND_EVENT); continue; } |