diff --git a/src/server/game/Instances/InstanceScript.cpp b/src/server/game/Instances/InstanceScript.cpp index 58736904a..bb510cf12 100644 --- a/src/server/game/Instances/InstanceScript.cpp +++ b/src/server/game/Instances/InstanceScript.cpp @@ -57,23 +57,7 @@ void InstanceScript::SaveToDB() void InstanceScript::OnPlayerEnter(Player* player) { - if (!IsTwoFactionInstance()) - return; - - if (GetTeamIdInInstance() == TEAM_NEUTRAL) - { - if (Group* group = player->GetGroup()) - { - if (Player* leader = ObjectAccessor::FindConnectedPlayer(group->GetLeaderGUID())) - _teamIdInInstance = leader->GetTeamId(); - else - _teamIdInInstance = player->GetTeamId(); - } - else - _teamIdInInstance = player->GetTeamId(); - } - - if (sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP)) + if (sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP) && IsTwoFactionInstance()) player->SetFaction((_teamIdInInstance == TEAM_HORDE) ? 1610 /*FACTION_HORDE*/ : 1 /*FACTION_ALLIANCE*/); } diff --git a/src/server/game/Instances/InstanceScript.h b/src/server/game/Instances/InstanceScript.h index 640242fee..89246ed96 100644 --- a/src/server/game/Instances/InstanceScript.h +++ b/src/server/game/Instances/InstanceScript.h @@ -285,6 +285,10 @@ public: [[nodiscard]] bool AllBossesDone() const; [[nodiscard]] bool AllBossesDone(std::initializer_list bossIds) const; + TeamId GetTeamIdInInstance() const { return _teamIdInInstance; } + void SetTeamIdInInstance(TeamId teamId) { _teamIdInInstance = teamId; } + bool IsTwoFactionInstance() const; + TaskScheduler scheduler; protected: void SetHeaders(std::string const& dataHeaders); @@ -325,9 +329,6 @@ protected: void WritePersistentData(std::ostringstream& data); virtual void WriteSaveDataMore(std::ostringstream& /*data*/) { } - TeamId GetTeamIdInInstance() const { return _teamIdInInstance; } - bool IsTwoFactionInstance() const; - private: static void LoadObjectData(ObjectData const* creatureData, ObjectInfoMap& objectInfo); diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index ded8c0c6f..6436f0bda 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -3020,6 +3020,15 @@ bool InstanceMap::AddPlayerToMap(Player* player) m_resetAfterUnload = false; m_unloadWhenEmpty = false; + if (instance_data && instance_data->IsTwoFactionInstance() + && instance_data->GetTeamIdInInstance() == TEAM_NEUTRAL) + { + instance_data->SetTeamIdInInstance(player->GetTeamId()); + if (Group* group = player->GetGroup()) + if (Player* leader = ObjectAccessor::FindConnectedPlayer(group->GetLeaderGUID())) + instance_data->SetTeamIdInInstance(leader->GetTeamId()); + } + // this will acquire the same mutex so it cannot be in the previous block Map::AddPlayerToMap(player);