diff options
| author | Shauren <shauren.trinity@gmail.com> | 2024-03-24 14:39:29 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2024-03-24 17:19:10 +0100 |
| commit | 94b78ebc8b0eb09409d0db36bebfde85a1644fe8 (patch) | |
| tree | a948fed605007b2fb3c19c883b26da7eb0ef266d /src/server/game/Entities | |
| parent | aac5581bfce1955d5f483521bf77d3d97397d201 (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.cpp | 9 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 4 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.h | 6 | ||||
| -rw-r--r-- | src/server/game/Entities/Taxi/TaxiPathGraph.cpp | 13 |
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)) |
