mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-21 20:56:23 +00:00
fix(Core/Arena): allow crossfaction arena teams (#16823)
This commit is contained in:
@@ -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*/)
|
||||
|
||||
Reference in New Issue
Block a user