From fe4899202decddbba30e902825486f375020e343 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Mon, 17 Jan 2022 06:05:32 -0300 Subject: [PATCH] feat(Core/Conditions): Implement CONDITION_SOURCE_CREATURE_VISIBILITY (#10208) --- src/server/game/Conditions/ConditionMgr.h | 3 ++- src/server/game/Entities/Object/Object.cpp | 18 ++++++++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/server/game/Conditions/ConditionMgr.h b/src/server/game/Conditions/ConditionMgr.h index 75b9453e9..2c619f623 100644 --- a/src/server/game/Conditions/ConditionMgr.h +++ b/src/server/game/Conditions/ConditionMgr.h @@ -149,7 +149,8 @@ enum ConditionSourceType CONDITION_SOURCE_TYPE_GRAVEYARD = 27, // don't use on 3.3.5a CONDITION_SOURCE_TYPE_PLAYER_LOOT_TEMPLATE = 28, CONDITION_SOURCE_TYPE_CREATURE_RESPAWN = 29, - CONDITION_SOURCE_TYPE_MAX = 30 // placeholder + CONDITION_SOURCE_TYPE_CREATURE_VISIBILITY = 30, + CONDITION_SOURCE_TYPE_MAX = 31 // placeholder }; enum RelationType diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 72bb2d164..863466aae 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -1908,8 +1908,22 @@ bool WorldObject::CanSeeOrDetect(WorldObject const* obj, bool ignoreStealth, boo // Creature scripts if (Creature const* cObj = obj->ToCreature()) - if (cObj->IsAIEnabled && this->ToPlayer() && !cObj->AI()->CanBeSeen(this->ToPlayer())) - return false; + { + if (Player const* player = this->ToPlayer()) + { + if (cObj->IsAIEnabled && !cObj->AI()->CanBeSeen(player)) + { + return false; + } + + ConditionList conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_CREATURE_VISIBILITY, cObj->GetEntry()); + + if (!sConditionMgr->IsObjectMeetToConditions((WorldObject*)this, conditions)) + { + return false; + } + } + } // Gameobject scripts if (GameObject const* goObj = obj->ToGameObject())