From 6ebd5926fb61a5457d7048504d2f92bc3c9318ab Mon Sep 17 00:00:00 2001 From: ModoX Date: Tue, 26 Oct 2021 22:58:49 +0200 Subject: Core/Conditions: Added conditions for old areatrigger system (AreaTrigger.db2) (#27174) --- src/server/game/Conditions/ConditionMgr.cpp | 7 +++++++ src/server/game/Conditions/ConditionMgr.h | 3 ++- src/server/game/Handlers/MiscHandler.cpp | 3 +++ 3 files changed, 12 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index 9a8abba5482..93ee5c2625c 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -1924,6 +1924,13 @@ bool ConditionMgr::isSourceTypeValid(Condition* cond) const return false; } 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.db2, 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; diff --git a/src/server/game/Conditions/ConditionMgr.h b/src/server/game/Conditions/ConditionMgr.h index 3ce9b8564e2..496bd43974a 100644 --- a/src/server/game/Conditions/ConditionMgr.h +++ b/src/server/game/Conditions/ConditionMgr.h @@ -170,7 +170,8 @@ enum ConditionSourceType CONDITION_SOURCE_TYPE_GRAVEYARD = 27, CONDITION_SOURCE_TYPE_AREATRIGGER = 28, CONDITION_SOURCE_TYPE_CONVERSATION_LINE = 29, - CONDITION_SOURCE_TYPE_MAX = 30 // MAX + CONDITION_SOURCE_TYPE_AREATRIGGER_CLIENT_TRIGGERED = 30, + CONDITION_SOURCE_TYPE_MAX = 31 // MAX }; enum RelationType diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index e7431a92e9a..bad9721eb72 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -485,6 +485,9 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPackets::AreaTrigger::AreaTrigge if (player->isDebugAreaTriggers) ChatHandler(player->GetSession()).PSendSysMessage(packet.Entered ? LANG_DEBUG_AREATRIGGER_ENTERED : LANG_DEBUG_AREATRIGGER_LEFT, packet.AreaTriggerID); + if (!sConditionMgr->IsObjectMeetingNotGroupedConditions(CONDITION_SOURCE_TYPE_AREATRIGGER_CLIENT_TRIGGERED, atEntry->ID, player)) + return; + if (sScriptMgr->OnAreaTrigger(player, atEntry, packet.Entered)) return; -- cgit v1.2.3