diff options
| author | Meji <alvaro.megias@outlook.com> | 2024-03-24 17:27:13 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-03-24 17:27:13 +0100 |
| commit | 6a80bebcb533eb5780e5d98be84d813b5732992a (patch) | |
| tree | 93c5a5246b431e521f4fc88c3b38504b6e0190ba /src/server/game/Entities/GameObject | |
| parent | 94b78ebc8b0eb09409d0db36bebfde85a1644fe8 (diff) | |
Core/GameObjects: Added dynamic highlight for GAMEOBJECT_TYPE_SPELL_FOCUS (#29825)
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 dacdb902d30..32b0bc706ad 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -2225,6 +2225,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())) @@ -2267,6 +2278,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) |
