fix(Core/Arena): allow crossfaction arena teams (#16823)

This commit is contained in:
Axel Cocat
2023-07-27 13:37:20 +02:00
committed by GitHub
parent c24ebcbd9d
commit 642bd1936b
6 changed files with 78 additions and 21 deletions

View File

@@ -17,6 +17,7 @@
#include "Arena.h"
#include "ArenaTeamMgr.h"
#include "GroupMgr.h"
#include "Log.h"
#include "ObjectAccessor.h"
#include "Player.h"
@@ -93,6 +94,47 @@ void Arena::AddPlayer(Player* player)
}
UpdateArenaWorldState();
Group* group = player->GetGroup();
if (group)
{
// Hackfix for crossfaction arenas, recreate group when joining
// Without this, players in a crossfaction arena group would not be able to cast beneficial spells on their teammates
std::vector<Player*> members;
bool isCrossfaction = false;
for (Group::member_citerator mitr = group->GetMemberSlots().begin(); mitr != group->GetMemberSlots().end(); ++mitr)
{
Player* member = ObjectAccessor::FindPlayer(mitr->guid);
if (!member || member->GetGUID() == player->GetGUID())
{
continue;
}
members.push_back(member);
if (member->GetTeamId(true) != player->GetTeamId(true))
{
isCrossfaction = true;
}
}
if (isCrossfaction)
{
for (Player* member : members)
{
member->RemoveFromGroup();
}
group->Disband();
group = new Group();
SetBgRaid(player->GetBgTeamId(), group);
group->Create(player);
sGroupMgr->AddGroup(group);
for (Player* member : members)
{
group->AddMember(member);
}
}
}
}
void Arena::RemovePlayer(Player* /*player*/)