diff options
author | ModoX <moardox@gmail.com> | 2021-10-06 10:22:41 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-06 10:22:41 +0200 |
commit | 3548467c93a3859f7df72c456d600300539dc6b2 (patch) | |
tree | 32f098a4a6af3a767ac3c02265e111a5d0920b14 /src/server/game/Conditions/ConditionMgr.cpp | |
parent | f602a83bb46d485b1c6adeac53384348b7a1102f (diff) |
Core/Conditions: Implemented conditions for areatriggers (#27021)
* also added example fix for Death's Power Grows quest
Diffstat (limited to 'src/server/game/Conditions/ConditionMgr.cpp')
-rw-r--r-- | src/server/game/Conditions/ConditionMgr.cpp | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index 6a6e936bba4..88f0336ce4e 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -17,6 +17,8 @@ #include "ConditionMgr.h" #include "AchievementMgr.h" +#include "AreaTrigger.h" +#include "AreaTriggerDataStore.h" #include "Containers.h" #include "DatabaseEnv.h" #include "DB2Stores.h" @@ -74,7 +76,9 @@ char const* const ConditionMgr::StaticSourceTypeData[CONDITION_SOURCE_TYPE_MAX] "Npc Vendor", "Spell Proc", "Terrain Swap", - "Phase" + "Phase", + "Graveyard", + "AreaTrigger", }; ConditionMgr::ConditionTypeInfo const ConditionMgr::StaticConditionTypeData[CONDITION_MAX] = @@ -931,7 +935,8 @@ bool ConditionMgr::CanHaveSourceGroupSet(ConditionSourceType sourceType) sourceType == CONDITION_SOURCE_TYPE_SPELL_CLICK_EVENT || sourceType == CONDITION_SOURCE_TYPE_SMART_EVENT || sourceType == CONDITION_SOURCE_TYPE_NPC_VENDOR || - sourceType == CONDITION_SOURCE_TYPE_PHASE); + sourceType == CONDITION_SOURCE_TYPE_PHASE || + sourceType == CONDITION_SOURCE_TYPE_AREATRIGGER); } bool ConditionMgr::CanHaveSourceIdSet(ConditionSourceType sourceType) @@ -1048,6 +1053,11 @@ bool ConditionMgr::IsObjectMeetingVendorItemConditions(uint32 creatureId, uint32 return true; } +ConditionContainer const* ConditionMgr::GetConditionsForAreaTrigger(uint32 areaTriggerId, bool isServerSide) const +{ + return Trinity::Containers::MapGetValuePtr(AreaTriggerConditionContainerStore, { areaTriggerId, isServerSide }); +} + ConditionMgr* ConditionMgr::instance() { static ConditionMgr instance; @@ -1284,6 +1294,13 @@ void ConditionMgr::LoadConditions(bool isReload) case CONDITION_SOURCE_TYPE_PHASE: valid = addToPhases(cond); break; + case CONDITION_SOURCE_TYPE_AREATRIGGER: + { + AreaTriggerConditionContainerStore[{ cond->SourceGroup, cond->SourceEntry }].push_back(cond); + valid = true; + ++count; + continue; + } default: break; } @@ -1886,6 +1903,18 @@ bool ConditionMgr::isSourceTypeValid(Condition* cond) const return false; } break; + case CONDITION_SOURCE_TYPE_AREATRIGGER: + if (cond->SourceEntry != 0 && cond->SourceEntry != 1) + { + TC_LOG_ERROR("sql.sql", "%s in `condition` table, unexpected SourceEntry value (expected 0 or 1), ignoring.", cond->ToString().c_str()); + return false; + } + if (!sAreaTriggerDataStore->GetAreaTriggerTemplate({ uint32(cond->SourceGroup), bool(cond->SourceEntry) })) + { + TC_LOG_ERROR("sql.sql", "%s in `condition` table, does not exist in `areatrigger_template`, ignoring.", cond->ToString().c_str()); + return false; + } + break; default: TC_LOG_ERROR("sql.sql", "%s Invalid ConditionSourceType in `condition` table, ignoring.", cond->ToString().c_str()); return false; |