aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/GameObject
diff options
context:
space:
mode:
authorMeji <alvaro.megias@outlook.com>2024-03-24 17:27:13 +0100
committerfunjoker <funjoker109@gmail.com>2024-03-28 20:23:28 +0100
commit56f9e134fba6becdbb44f959aedb4e5db93d9974 (patch)
treed9f53af948d3bf17a2c4420483af1f152a1ee9bf /src/server/game/Entities/GameObject
parent18b7199a47ee1ebc767c631f2c91c8e1f680d39c (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.cpp17
-rw-r--r--src/server/game/Entities/GameObject/GameObject.h1
-rw-r--r--src/server/game/Entities/GameObject/GameObjectData.h12
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)