@@ -274,21 +274,18 @@ void CFBG::ValidatePlayerForBG(Battleground* bg, Player* player)
274274
275275 BalanceTeamsOnEntry (bg, player);
276276
277- TeamId teamId{ player->GetBgTeamId () } ;
277+ TeamId const assigned = player->GetBgTeamId ();
278278
279- if (player->GetTeamId (true ) == teamId)
280- return ;
281-
282- BGData& bgdata = player->GetBGData ();
283-
284- if (bgdata.bgTeamId != teamId)
285- bgdata.bgTeamId = teamId;
279+ // Keep bgTeamId authoritative (also covers the TEAM_NEUTRAL bootstrap where GetBgTeamId() falls back to m_team)
280+ player->GetBGData ().bgTeamId = assigned;
286281
287- SetFakeRaceAndMorph (player);
282+ EnforceBGTeamConsistency (player);
288283
289- if (bg->GetMapId () == MapAlteracValley)
284+ // AV forced reactions apply only to a cross-faction (faked) player;
285+ // a native player already holds the correct Frostwolf/Stormpike standings.
286+ if (!IsPlayingNative (player) && bg->GetMapId () == MapAlteracValley)
290287 {
291- if (teamId == TEAM_HORDE )
288+ if (assigned == TEAM_HORDE )
292289 {
293290 player->GetReputationMgr ().ApplyForceReaction (FACTION_FROSTWOLF_CLAN , REP_FRIENDLY , true );
294291 player->GetReputationMgr ().ApplyForceReaction (FACTION_STORMPIKE_GUARD , REP_HOSTILE , true );
@@ -303,6 +300,38 @@ void CFBG::ValidatePlayerForBG(Battleground* bg, Player* player)
303300 }
304301}
305302
303+ void CFBG::EnforceBGTeamConsistency (Player* player)
304+ {
305+ if (!player || !player->InBattleground ())
306+ return ;
307+
308+ Battleground* bg = player->GetBattleground ();
309+ if (!bg || bg->isArena ())
310+ return ;
311+
312+ TeamId const assigned = player->GetBgTeamId ();
313+
314+ // Native: must not carry a fake.
315+ if (player->GetTeamId (true ) == assigned)
316+ {
317+ if (IsPlayerFake (player))
318+ ClearFakePlayer (player);
319+ return ;
320+ }
321+
322+ // Cross-faction: must be faked to `assigned`.
323+ FakePlayer const * info = GetFakePlayer (player);
324+ if (!info)
325+ SetFakeRaceAndMorph (player); // not faked yet -> apply
326+ else if (info->FakeTeamID != assigned)
327+ {
328+ ClearFakePlayer (player); // stale wrong-team fake -> redo
329+ SetFakeRaceAndMorph (player);
330+ }
331+ else
332+ ReapplyFakePlayer (player); // correct side -> re-push reset values
333+ }
334+
306335void CFBG::BalanceTeamsOnEntry (Battleground* bg, Player* player)
307336{
308337 // The invite-time team was chosen using level/ilvl, but declined invites can
0 commit comments