diff options
| author | Meji <alvaro.megias@outlook.com> | 2024-03-24 17:27:13 +0100 |
|---|---|---|
| committer | funjoker <funjoker109@gmail.com> | 2024-03-28 20:23:28 +0100 |
| commit | 56f9e134fba6becdbb44f959aedb4e5db93d9974 (patch) | |
| tree | d9f53af948d3bf17a2c4420483af1f152a1ee9bf /src/server/game/Entities/GameObject | |
| parent | 18b7199a47ee1ebc767c631f2c91c8e1f680d39c (diff) | |
Core/GameObjects: Added dynamic highlight for GAMEOBJECT_TYPE_SPELL_FOCUS (#29825)
(cherry picked from commit 6a80bebcb533eb5780e5d98be84d813b5732992a)
Diffstat (limited to 'src/server/game/Entities/GameObject')
| -rw-r--r-- | src/server/game/Entities/GameObject/GameObject.cpp | 17 | ||||
| -rw-r--r-- | src/server/game/Entities/GameObject/GameObject.h | 1 | ||||
| -rw-r--r-- | src/server/game/Entities/GameObject/GameObjectData.h | 12 |
3 files changed, 30 insertions, 0 deletions
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index b751c0442a2..ebe046b1b7f 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -2223,6 +2223,17 @@ void GameObject::Respawn() } } +bool GameObject::CanActivateForPlayer(Player const* target) const +{ + if (!MeetsInteractCondition(target)) + return false; + + if (sObjectMgr->IsGameObjectForQuests(GetEntry()) && !ActivateToQuest(target)) + return false; + + return true; +} + bool GameObject::ActivateToQuest(Player const* target) const { if (target->HasQuestForGO(GetEntry())) @@ -2265,6 +2276,12 @@ bool GameObject::ActivateToQuest(Player const* target) const return true; break; } + case GAMEOBJECT_TYPE_SPELL_FOCUS: + { + if (target->GetQuestStatus(GetGOInfo()->spellFocus.questID) == QUEST_STATUS_INCOMPLETE) + return true; + break; + } case GAMEOBJECT_TYPE_GOOBER: { if (target->GetQuestStatus(GetGOInfo()->goober.questID) == QUEST_STATUS_INCOMPLETE) diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h index 9b8651f1133..81db669c0b0 100644 --- a/src/server/game/Entities/GameObject/GameObject.h +++ b/src/server/game/Entities/GameObject/GameObject.h @@ -338,6 +338,7 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject> bool hasQuest(uint32 quest_id) const override; bool hasInvolvedQuest(uint32 quest_id) const override; + bool CanActivateForPlayer(Player const* target) const; bool ActivateToQuest(Player const* target) const; void UseDoorOrButton(uint32 time_to_restore = 0, bool alternative = false, Unit* user = nullptr); // 0 = use `gameobject`.`spawntimesecs` diff --git a/src/server/game/Entities/GameObject/GameObjectData.h b/src/server/game/Entities/GameObject/GameObjectData.h index 1c05153c550..d9d6a904c6d 100644 --- a/src/server/game/Entities/GameObject/GameObjectData.h +++ b/src/server/game/Entities/GameObject/GameObjectData.h @@ -865,6 +865,18 @@ struct GameObjectTemplate } } + uint32 GetQuestID() const + { + switch (type) + { + case GAMEOBJECT_TYPE_CHEST: return chest.questID; + case GAMEOBJECT_TYPE_GENERIC: return generic.questID; + case GAMEOBJECT_TYPE_SPELL_FOCUS: return spellFocus.questID; + case GAMEOBJECT_TYPE_GOOBER: return goober.questID; + default: return 0; + } + } + uint32 GetConditionID1() const { switch (type) |
