aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGolrag <golrag.jeremy@gmail.com>2023-08-24 13:00:30 +0200
committerModoX <moardox@gmail.com>2023-08-24 16:15:32 +0200
commit5e618278141cce1a1fcfc2f1b0e8997367ca9848 (patch)
tree0f3a6119438896ff3476fde118ffb17d0c341284 /src
parent28c5d71b284a19657a602590cc6fcc2f1746b124 (diff)
Core/GameObject: Expose several NewFlag fields for future purposes
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp60
-rw-r--r--src/server/game/Entities/GameObject/GameObject.h3
2 files changed, 60 insertions, 3 deletions
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp
index 6f7a769d8d9..c926778dc66 100644
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -507,20 +507,32 @@ void SetTransportAutoCycleBetweenStopFrames::Execute(GameObjectTypeBase& type) c
class NewFlag : public GameObjectTypeBase
{
public:
- explicit NewFlag(GameObject& owner) : GameObjectTypeBase(owner), _state(FlagState::InBase), _respawnTime(0) { }
+ explicit NewFlag(GameObject& owner) : GameObjectTypeBase(owner), _state(FlagState::InBase), _respawnTime(0), _takenFromBaseTime(0){ }
void SetState(FlagState newState, Player* player)
{
FlagState oldState = _state;
_state = newState;
+
+ if (player && newState == FlagState::Taken)
+ _carrierGUID = player->GetGUID();
+ else
+ _carrierGUID = ObjectGuid::Empty;
+
+ if (newState == FlagState::Taken && oldState == FlagState::InBase)
+ _takenFromBaseTime = GameTime::GetGameTime();
+ else if (newState == FlagState::InBase || newState == FlagState::Respawning)
+ _takenFromBaseTime = 0;
+
_owner.UpdateObjectVisibility();
- if (ZoneScript* zoneScript = _owner.GetZoneScript())
- zoneScript->OnFlagStateChange(&_owner, oldState, _state, player);
if (newState == FlagState::Respawning)
_respawnTime = GameTime::GetGameTimeMS() + _owner.GetGOInfo()->newflag.RespawnTime;
else
_respawnTime = 0;
+
+ if (ZoneScript* zoneScript = _owner.GetZoneScript())
+ zoneScript->OnFlagStateChange(&_owner, oldState, _state, player);
}
void Update([[maybe_unused]] uint32 diff) override
@@ -534,9 +546,15 @@ public:
return _state != FlagState::InBase;
}
+ FlagState GetState() const { return _state; }
+ ObjectGuid const& GetCarrierGUID() const { return _carrierGUID; }
+ time_t GetTakenFromBaseTime() const { return _takenFromBaseTime; }
+
private:
FlagState _state;
time_t _respawnTime;
+ ObjectGuid _carrierGUID;
+ time_t _takenFromBaseTime;
};
SetNewFlagState::SetNewFlagState(FlagState state, Player* player) : _state(state), _player(player)
@@ -4054,6 +4072,42 @@ bool GameObject::CanInteractWithCapturePoint(Player const* target) const
|| m_goValue.CapturePoint.State == WorldPackets::Battleground::BattlegroundCapturePointState::HordeCaptured;
}
+FlagState GameObject::GetFlagState() const
+{
+ if (GetGoType() != GAMEOBJECT_TYPE_NEW_FLAG)
+ return FlagState(0);
+
+ GameObjectType::NewFlag const* newFlag = dynamic_cast<GameObjectType::NewFlag const*>(m_goTypeImpl.get());
+ if (!newFlag)
+ return FlagState(0);
+
+ return newFlag->GetState();
+}
+
+ObjectGuid const& GameObject::GetFlagCarrierGUID() const
+{
+ if (GetGoType() != GAMEOBJECT_TYPE_NEW_FLAG)
+ return ObjectGuid::Empty;
+
+ GameObjectType::NewFlag const* newFlag = dynamic_cast<GameObjectType::NewFlag const*>(m_goTypeImpl.get());
+ if (!newFlag)
+ return ObjectGuid::Empty;
+
+ return newFlag->GetCarrierGUID();
+}
+
+time_t GameObject::GetFlagTakenFromBaseTime() const
+{
+ if (GetGoType() != GAMEOBJECT_TYPE_NEW_FLAG)
+ return time_t(0);
+
+ GameObjectType::NewFlag const* newFlag = dynamic_cast<GameObjectType::NewFlag const*>(m_goTypeImpl.get());
+ if (!newFlag)
+ return time_t(0);
+
+ return newFlag->GetTakenFromBaseTime();
+}
+
bool GameObject::MeetsInteractCondition(Player const* user) const
{
if (!m_goInfo->GetConditionID1())
diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h
index 82868a33f52..bb6282e8fd0 100644
--- a/src/server/game/Entities/GameObject/GameObject.h
+++ b/src/server/game/Entities/GameObject/GameObject.h
@@ -409,6 +409,9 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject>
void AssaultCapturePoint(Player* player);
void UpdateCapturePoint();
bool CanInteractWithCapturePoint(Player const* target) const;
+ FlagState GetFlagState() const;
+ ObjectGuid const& GetFlagCarrierGUID() const;
+ time_t GetFlagTakenFromBaseTime() const;
bool MeetsInteractCondition(Player const* user) const;