diff options
author | ModoX <moardox@gmail.com> | 2021-10-26 22:58:49 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2024-01-26 22:31:08 +0100 |
commit | 7e28ee442156880f388800639b8fbdbbb7bba491 (patch) | |
tree | f16968ec4ac65b2b63e1565ca03d705f6725ee55 | |
parent | 420cbd7396ca59497328d372ed028d976f23b150 (diff) |
Core/Conditions: Added conditions for AreaTriggers (AreaTrigger.dbc) (#27174)
Cherry-picked from 6ebd592
-rw-r--r-- | src/server/game/Conditions/ConditionMgr.cpp | 9 | ||||
-rw-r--r-- | src/server/game/Conditions/ConditionMgr.h | 2 | ||||
-rw-r--r-- | src/server/game/Handlers/MiscHandler.cpp | 3 |
3 files changed, 13 insertions, 1 deletions
diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index 993ad2e02ad..7ab68c1bb39 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -1818,6 +1818,15 @@ bool ConditionMgr::isSourceTypeValid(Condition* cond) const } break; } + case CONDITION_SOURCE_TYPE_AREATRIGGER_CLIENT_TRIGGERED: + { + if (!sAreaTriggerStore.LookupEntry(cond->SourceEntry)) + { + TC_LOG_ERROR("sql.sql", "%s SourceEntry in `condition` table, does not exists in AreaTrigger.dbc, ignoring.", cond->ToString().c_str()); + return false; + } + break; + } case CONDITION_SOURCE_TYPE_TERRAIN_SWAP: { TC_LOG_ERROR("sql.sql", "CONDITION_SOURCE_TYPE_TERRAIN_SWAP: is only for master branch, skipped"); diff --git a/src/server/game/Conditions/ConditionMgr.h b/src/server/game/Conditions/ConditionMgr.h index b31ebb9f4bb..ff4ccf61559 100644 --- a/src/server/game/Conditions/ConditionMgr.h +++ b/src/server/game/Conditions/ConditionMgr.h @@ -154,7 +154,7 @@ enum ConditionSourceType CONDITION_SOURCE_TYPE_GRAVEYARD = 27, // only master CONDITION_SOURCE_TYPE_AREATRIGGER = 28, // only master (this refers to dynamically spawned areatriggers, not the ones from AreaTrigger.dbc/db2) CONDITION_SOURCE_TYPE_CONVERSATION_LINE = 29, // only master - CONDITION_SOURCE_TYPE_AREATRIGGER_CLIENT_TRIGGERED = 30, // only master (TODO: cherry-pick) + CONDITION_SOURCE_TYPE_AREATRIGGER_CLIENT_TRIGGERED = 30, CONDITION_SOURCE_TYPE_TRAINER_SPELL = 31, // only master (TODO: cherry-pick) CONDITION_SOURCE_TYPE_OBJECT_ID_VISIBILITY = 32, // only master (TODO: cherry-pick) CONDITION_SOURCE_TYPE_SPAWN_GROUP = 33, // only master (TODO: cherry-pick) diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index 8ed5fab016e..eda9900a26e 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -621,6 +621,9 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPacket& recvData) if (player->isDebugAreaTriggers) ChatHandler(player->GetSession()).PSendSysMessage(LANG_DEBUG_AREATRIGGER_REACHED, triggerId); + if (!sConditionMgr->IsObjectMeetingNotGroupedConditions(CONDITION_SOURCE_TYPE_AREATRIGGER_CLIENT_TRIGGERED, atEntry->ID, player)) + return; + if (sScriptMgr->OnAreaTrigger(player, atEntry)) return; |