mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/Achievements: Fix CriteriaTypes related to GameEvents (#29368)
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user