aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2024-03-24 14:39:29 +0100
committerShauren <shauren.trinity@gmail.com>2024-03-24 17:19:10 +0100
commit94b78ebc8b0eb09409d0db36bebfde85a1644fe8 (patch)
treea948fed605007b2fb3c19c883b26da7eb0ef266d /src/server/game/Entities
parentaac5581bfce1955d5f483521bf77d3d97397d201 (diff)
Core/Players: Slightly improve neutral player faction support
Diffstat (limited to 'src/server/game/Entities')
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp9
-rw-r--r--src/server/game/Entities/Player/Player.cpp4
-rw-r--r--src/server/game/Entities/Player/Player.h6
-rw-r--r--src/server/game/Entities/Taxi/TaxiPathGraph.cpp13
4 files changed, 23 insertions, 9 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index 2ceaa8ce7b1..18343779978 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -2813,10 +2813,15 @@ void Creature::LoadCreaturesSparringHealth(bool force /*= false*/)
/// Send a message to LocalDefense channel for players opposition team in the zone
void Creature::SendZoneUnderAttackMessage(Player* attacker)
{
- uint32 enemy_team = attacker->GetTeam();
WorldPackets::Misc::ZoneUnderAttack packet;
packet.AreaID = GetAreaId();
- sWorld->SendGlobalMessage(packet.Write(), nullptr, (enemy_team == ALLIANCE ? HORDE : ALLIANCE));
+ packet.Write();
+
+ Team enemyTeam = attacker->GetTeam();
+ if (enemyTeam != ALLIANCE)
+ sWorld->SendGlobalMessage(packet.GetRawPacket(), nullptr, ALLIANCE);
+ if (enemyTeam != HORDE)
+ sWorld->SendGlobalMessage(packet.GetRawPacket(), nullptr, HORDE);
}
void Creature::SetCanMelee(bool canMelee, bool fleeFromMelee /*= false*/)
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 1455843d04a..f530ecdbb2b 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -2145,7 +2145,7 @@ bool Player::IsGroupVisibleFor(Player const* p) const
{
default: return IsInSameGroupWith(p);
case 1: return IsInSameRaidWith(p);
- case 2: return GetTeam() == p->GetTeam();
+ case 2: return GetEffectiveTeam() == p->GetEffectiveTeam();
case 3: return false;
}
}
@@ -7784,7 +7784,7 @@ void Player::DuelComplete(DuelCompleteType type)
case DUEL_FLED:
// if initiator and opponent are on the same team
// or initiator and opponent are not PvP enabled, forcibly stop attacking
- if (GetTeam() == opponent->GetTeam())
+ if (GetEffectiveTeam() == opponent->GetEffectiveTeam())
{
AttackStop();
opponent->AttackStop();
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 02e6fb8e145..48a1fc5e65a 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -2234,11 +2234,11 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player>
static TeamId TeamIdForRace(uint8 race);
static uint8 GetFactionGroupForRace(uint8 race);
Team GetTeam() const { return m_team; }
- TeamId GetTeamId() const { return m_team == ALLIANCE ? TEAM_ALLIANCE : TEAM_HORDE; }
+ TeamId GetTeamId() const { return GetTeamIdForTeam(m_team); }
void SetFactionForRace(uint8 race);
- Team GetEffectiveTeam() const { return HasPlayerFlagEx(PLAYER_FLAGS_EX_MERCENARY_MODE) ? (GetTeam() == ALLIANCE ? HORDE : ALLIANCE) : Team(GetTeam()); }
- TeamId GetEffectiveTeamId() const { return GetEffectiveTeam() == ALLIANCE ? TEAM_ALLIANCE : TEAM_HORDE; }
+ Team GetEffectiveTeam() const { return HasPlayerFlagEx(PLAYER_FLAGS_EX_MERCENARY_MODE) ? GetOtherTeam(GetTeam()) : GetTeam(); }
+ TeamId GetEffectiveTeamId() const { return GetTeamIdForTeam(GetEffectiveTeam()); }
void InitDisplayIds();
diff --git a/src/server/game/Entities/Taxi/TaxiPathGraph.cpp b/src/server/game/Entities/Taxi/TaxiPathGraph.cpp
index 2ef20331ff0..a5395bbdc68 100644
--- a/src/server/game/Entities/Taxi/TaxiPathGraph.cpp
+++ b/src/server/game/Entities/Taxi/TaxiPathGraph.cpp
@@ -33,8 +33,17 @@ struct EdgeCost
uint32 Distance;
uint32 EvaluateDistance(Player const* player) const
{
- TaxiNodeFlags requireFlag = (player->GetTeam() == ALLIANCE) ? TaxiNodeFlags::ShowOnAllianceMap : TaxiNodeFlags::ShowOnHordeMap;
- if (!To->GetFlags().HasFlag(requireFlag))
+ bool isVisibleForFaction = [&]
+ {
+ switch (player->GetTeam())
+ {
+ case HORDE: return To->GetFlags().HasFlag(TaxiNodeFlags::ShowOnHordeMap);
+ case ALLIANCE: return To->GetFlags().HasFlag(TaxiNodeFlags::ShowOnAllianceMap);
+ default: break;
+ }
+ return false;
+ }();
+ if (!isVisibleForFaction)
return std::numeric_limits<uint16>::max();
if (PlayerConditionEntry const* condition = sPlayerConditionStore.LookupEntry(To->ConditionID))