diff options
| author | Shauren <shauren.trinity@gmail.com> | 2025-02-09 21:08:35 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2025-02-09 21:08:35 +0100 |
| commit | 8565ba987668be1ebd435d4c4edd3874ee2261ec (patch) | |
| tree | 50c6cd4ae8b21af89ee49f4ad1437db3ba4f87a1 /src/server/game/Entities | |
| parent | de9340ccec2d53d4b090bc6ebfadd67cc77d7f5a (diff) | |
Core/PacketIO: Converted BattlegroundPackets to classes
Diffstat (limited to 'src/server/game/Entities')
| -rw-r--r-- | src/server/game/Entities/Object/Object.cpp | 13 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 17 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.h | 2 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 16 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 1 |
5 files changed, 32 insertions, 17 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index df73ba3c1d7..060f3e25e61 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -233,19 +233,6 @@ void Object::DestroyForPlayer(Player* target, bool onDeath) const { ASSERT(target); - if (IsUnit()) - { - if (Battleground* bg = target->GetBattleground()) - { - if (bg->isArena()) - { - WorldPacket data(SMSG_ARENA_UNIT_DESTROYED, 8); - data << uint64(GetGUID()); - target->SendDirectMessage(&data); - } - } - } - WorldPacket data(SMSG_DESTROY_OBJECT, 8 + 1); data << uint64(GetGUID()); //! If the following bool is true, the client will call "void CGUnit_C::OnDeath()" for this object. diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 7892f4e0ae5..497c803a8be 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -25,6 +25,7 @@ #include "BattlefieldMgr.h" #include "Battleground.h" #include "BattlegroundMgr.h" +#include "BattlegroundPackets.h" #include "BattlegroundScore.h" #include "CellImpl.h" #include "Channel.h" @@ -14369,7 +14370,7 @@ void Player::OnGossipSelect(WorldObject* source, uint32 gossipListId, uint32 men return; } - GetSession()->SendBattleGroundList(guid, bgTypeId); + sBattlegroundMgr->SendBattlegroundList(this, guid, bgTypeId); break; } } @@ -22191,23 +22192,33 @@ bool Player::CanReportAfkDueToLimit() ///This player has been blamed to be inactive in a battleground void Player::ReportedAfkBy(Player* reporter) { + WorldPackets::Battleground::ReportPvPPlayerAFKResult reportAfkResult; + reportAfkResult.Offender = GetGUID(); Battleground* bg = GetBattleground(); // Battleground also must be in progress! if (!bg || bg != reporter->GetBattleground() || GetTeam() != reporter->GetTeam() || bg->GetStatus() != STATUS_IN_PROGRESS) + { + reporter->SendDirectMessage(reportAfkResult.Write()); return; + } // check if player has 'Idle' or 'Inactive' debuff - if (m_bgData.bgAfkReporter.find(reporter->GetGUID().GetCounter()) == m_bgData.bgAfkReporter.end() && !HasAura(43680) && !HasAura(43681) && reporter->CanReportAfkDueToLimit()) + if (m_bgData.bgAfkReporter.find(reporter->GetGUID()) == m_bgData.bgAfkReporter.end() && !HasAura(43680) && !HasAura(43681) && reporter->CanReportAfkDueToLimit()) { - m_bgData.bgAfkReporter.insert(reporter->GetGUID().GetCounter()); + m_bgData.bgAfkReporter.insert(reporter->GetGUID()); // by default 3 players have to complain to apply debuff if (m_bgData.bgAfkReporter.size() >= sWorld->getIntConfig(CONFIG_BATTLEGROUND_REPORT_AFK)) { // cast 'Idle' spell CastSpell(this, 43680, true); m_bgData.bgAfkReporter.clear(); + reportAfkResult.NumBlackMarksOnOffender = m_bgData.bgAfkReporter.size(); + reportAfkResult.NumPlayersIHaveReported = reporter->m_bgData.bgAfkReportedCount; + reportAfkResult.Result = WorldPackets::Battleground::ReportPvPPlayerAFKResult::PVP_REPORT_AFK_SUCCESS; } } + + reporter->SendDirectMessage(reportAfkResult.Write()); } WorldLocation Player::GetStartPosition() const diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 23915ad87cf..cc4df35f6a9 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -831,7 +831,7 @@ struct BGData /// when player is teleported to BG - (it is battleground's GUID) BattlegroundTypeId bgTypeID; - std::set<uint32> bgAfkReporter; + GuidSet bgAfkReporter; uint8 bgAfkReportedCount; time_t bgAfkReportedTimer; diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 715b79f477d..bac4222cf4d 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -20,6 +20,7 @@ #include "Battlefield.h" #include "BattlefieldMgr.h" #include "Battleground.h" +#include "BattlegroundPackets.h" #include "BattlegroundScore.h" #include "CellImpl.h" #include "CharacterCache.h" @@ -13584,6 +13585,21 @@ void Unit::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player const* t data->append(fieldBuffer); } +void Unit::DestroyForPlayer(Player* target, bool onDeath) const +{ + if (Battleground* bg = target->GetBattleground()) + { + if (bg->isArena()) + { + WorldPackets::Battleground::DestroyArenaUnit destroyArenaUnit; + destroyArenaUnit.Guid = GetGUID(); + target->GetSession()->SendPacket(destroyArenaUnit.Write()); + } + } + + WorldObject::DestroyForPlayer(target, onDeath); +} + int32 Unit::GetHighestExclusiveSameEffectSpellGroupValue(AuraEffect const* aurEff, AuraType auraType, bool checkMiscValue /*= false*/, int32 miscValue /*= 0*/) const { int32 val = 0; diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index e5495134252..5991b268b87 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1833,6 +1833,7 @@ class TC_GAME_API Unit : public WorldObject explicit Unit (bool isWorldObject); void BuildValuesUpdate(uint8 updatetype, ByteBuffer* data, Player const* target) const override; + void DestroyForPlayer(Player* target, bool onDeath) const override; void _UpdateSpells(uint32 time); void _DeleteRemovedAuras(); |
