aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorModoX <moardox@gmail.com>2021-10-26 22:58:49 +0200
committerShauren <shauren.trinity@gmail.com>2024-01-26 22:31:08 +0100
commit7e28ee442156880f388800639b8fbdbbb7bba491 (patch)
treef16968ec4ac65b2b63e1565ca03d705f6725ee55
parent420cbd7396ca59497328d372ed028d976f23b150 (diff)
Core/Conditions: Added conditions for AreaTriggers (AreaTrigger.dbc) (#27174)
Cherry-picked from 6ebd592
-rw-r--r--src/server/game/Conditions/ConditionMgr.cpp9
-rw-r--r--src/server/game/Conditions/ConditionMgr.h2
-rw-r--r--src/server/game/Handlers/MiscHandler.cpp3
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;