aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2025-02-09 21:08:35 +0100
committerShauren <shauren.trinity@gmail.com>2025-02-09 21:08:35 +0100
commit8565ba987668be1ebd435d4c4edd3874ee2261ec (patch)
tree50c6cd4ae8b21af89ee49f4ad1437db3ba4f87a1 /src/server/game/Entities
parentde9340ccec2d53d4b090bc6ebfadd67cc77d7f5a (diff)
Core/PacketIO: Converted BattlegroundPackets to classes
Diffstat (limited to 'src/server/game/Entities')
-rw-r--r--src/server/game/Entities/Object/Object.cpp13
-rw-r--r--src/server/game/Entities/Player/Player.cpp17
-rw-r--r--src/server/game/Entities/Player/Player.h2
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp16
-rw-r--r--src/server/game/Entities/Unit/Unit.h1
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();