diff options
author | Golrag <golrag.jeremy@gmail.com> | 2023-08-24 13:00:30 +0200 |
---|---|---|
committer | ModoX <moardox@gmail.com> | 2023-08-24 16:15:32 +0200 |
commit | 5e618278141cce1a1fcfc2f1b0e8997367ca9848 (patch) | |
tree | 0f3a6119438896ff3476fde118ffb17d0c341284 /src | |
parent | 28c5d71b284a19657a602590cc6fcc2f1746b124 (diff) |
Core/GameObject: Expose several NewFlag fields for future purposes
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/GameObject/GameObject.cpp | 60 | ||||
-rw-r--r-- | src/server/game/Entities/GameObject/GameObject.h | 3 |
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; |