Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- I want you to read this very carefully, as it is a nice long process. I will be as specific as I can be with this, so bare with me here. Don't blame me if I miss something. :P
- [INDENT][SIZE=3][COLOR="#0066ff"]#1. Configuration Option[/COLOR][/SIZE][/INDENT]
- [INDENT]
- Go into World.h and add: CONFIG_CROSSFACTIONBG inside of:
- [CODE]
- enum WorldBoolConfigs
- [/CODE]
- Now head into your World.cpp and add:
- [CODE]
- m_bool_configs[CONFIG_CROSSFACTIONBG] = ConfigMgr::GetBoolDefault("MixedBGs", true);
- [/CODE]
- Around line [URL="https://github.com/TrinityCore/TrinityCore/blob/master/src/server/game/World/World.cpp#L1191"]#1191[/URL] where all the other options are loading.
- [/INDENT]
- [INDENT][SIZE=3][COLOR="#0066ff"]#2. Player source & header file[/COLOR][/SIZE][/INDENT]
- [INDENT]We will be doing the Player files. To start, open up Player.h and Player.cpp. Once you have those opened;
- Go on line [URL="https://github.com/TrinityCore/TrinityCore/blob/master/src/server/game/Entities/Player/Player.h#L1061"]#1061[/URL] and above line [URL="https://github.com/TrinityCore/TrinityCore/blob/master/src/server/game/Entities/Player/Player.h#L1066"]#1066[/URL] add:
- [CODE]
- //CROSSFACION BG START
- private:
- bool m_ForgetBGPlayers;
- bool m_ForgetInListPlayers;
- public:
- typedef std::vector<uint64> FakePlayers;
- void FitPlayerInTeam(bool action);
- void DoForgetPlayersInList();
- void DoForgetPlayersInBG(Battleground* pBattleGround);
- uint8 GetFakeRaceOrRace();
- void SetForgetBGPlayers(bool tralse) { m_ForgetBGPlayers = tralse; }
- bool ShouldForgetBGPlayers() { return m_ForgetBGPlayers; }
- void SetForgetInListPlayers(bool tralse) { m_ForgetInListPlayers = tralse; }
- bool ShouldForgetInListPlayers() { return m_ForgetInListPlayers; }
- bool SendBattleGroundChat(uint32 msgtype, std::string message);
- void MorphFit(bool value);
- bool TeamIsBGTeam() { return GetBGTeam() == GetTeam(); }
- FakePlayers m_FakePlayers;
- //CROSSFACION BG END
- [/CODE]
- Now go to line [URL="https://github.com/TrinityCore/TrinityCore/blob/master/src/server/game/Entities/Player/Player.h#L1887"]#1887[/URL] and above that add:
- [CODE]
- TeamId GetBGTeamId() const { return GetBGTeam() == ALLIANCE ? TEAM_ALLIANCE : TEAM_HORDE; }
- [/CODE]
- That should be all of Player.h. [COLOR="#FF8C00"]Go to Player.cpp..[/COLOR]
- I guess on any line under a function of your choice add: (In Player.cpp)
- [CODE]
- /*####################################################################################
- ###############################CROSSFACTION BATTLEGROUNDS#############################
- ####################################################################################*/
- void Player::FitPlayerInTeam(bool action)
- {
- ChrRacesEntry const* rEntry = sChrRacesStore.LookupEntry(GetFakeRaceOrRace());
- if(rEntry && !TeamIsBGTeam() && action)
- setFaction(rEntry->FactionID);
- else
- setFactionForRace(getRace());
- if (action)
- SetForgetBGPlayers(true);
- else
- SetForgetInListPlayers(true);
- MorphFit(action);
- if (GetBattleground() && action)
- ChatHandler(GetSession()).PSendSysMessage("%sYou are playing for the %s%s in this %s", MSG_COLOR_WHITE, GetBGTeam() == ALLIANCE ? MSG_COLOR_DARKBLUE"alliance" : MSG_COLOR_RED"horde", MSG_COLOR_WHITE, GetBattleground()->GetName());
- }
- uint8 Player::GetFakeRaceOrRace()
- {
- if(!TeamIsBGTeam())
- return GetBGTeam() == ALLIANCE ? RACE_HUMAN : RACE_BLOODELF;
- else
- return getRace();
- }
- void Player::DoForgetPlayersInList()
- {
- // m_FakePlayers is filled from a vector within the battleground
- // they were in previously so all players that have been in that BG will be invalidated.
- for (FakePlayers::const_iterator itr = m_FakePlayers.begin(); itr != m_FakePlayers.end(); ++itr)
- {
- WorldPacket data(SMSG_INVALIDATE_PLAYER, 8);
- data << *itr;
- GetSession()->SendPacket(&data);
- if (Player* pPlayer = ObjectAccessor::FindPlayer(*itr))
- GetSession()->SendNameQueryOpcode(*itr);
- }
- m_FakePlayers.clear();
- }
- void Player::DoForgetPlayersInBG(Battleground* pBattleGround)
- {
- if (!pBattleGround || pBattleGround->isArena())
- return;
- for (Battleground::BattlegroundPlayerMap::const_iterator itr = pBattleGround->GetPlayers().begin(); itr != pBattleGround->GetPlayers().end(); ++itr)
- {
- // Here we invalidate players in the bg to the added player
- WorldPacket data1(SMSG_INVALIDATE_PLAYER, 8);
- data1 << itr->first;
- GetSession()->SendPacket(&data1);
- GetSession()->SendNameQueryOpcode(itr->first);
- if (Player* pPlayer = ObjectAccessor::FindPlayer(itr->first))
- {
- // Here we invalidate the player added to players in the bg
- WorldPacket data2(SMSG_INVALIDATE_PLAYER, 8);
- data2 << GetGUID();
- pPlayer->GetSession()->SendPacket(&data2);
- pPlayer->GetSession()->SendNameQueryOpcode(GetGUID());
- }
- }
- }
- bool BattlegroundQueue::CheckCrossFactionMatch(BattlegroundBracketId bracket_id, Battleground* bg)
- {
- sLog->outDebug(LOG_FILTER_GENERAL, "BattleGroundQueue::CheckCrossFactionMatch");
- if (bg->isArena())
- return false; // Only do this if crossbg's are enabled.
- // Here we will add all players to selectionpool, later we check if there are enough and launch a bg.
- FillXPlayersToBG(bracket_id, bg, true);
- uint8 MPT = bg->GetMinPlayersPerTeam();
- if (m_SelectionPools[TEAM_ALLIANCE].GetPlayerCount() < MPT || m_SelectionPools[TEAM_HORDE].GetPlayerCount() < MPT)
- {
- sLog->outDebug(LOG_FILTER_GENERAL, "Not enough players. Has: %u Need: %u", m_SelectionPools[TEAM_ALLIANCE].GetPlayerCount() + m_SelectionPools[TEAM_HORDE].GetPlayerCount(), MPT * 2);
- return false;
- }
- return true;
- }
- // This function will invite players in the least populated faction, which makes battleground queues much faster.
- // This function will return true if cross faction battlegrounds are enabled, otherwise return false,
- // which is useful in FillPlayersToBG. Because then we can interrupt the regular invitation if cross faction bg's are enabled.
- bool BattlegroundQueue::FillXPlayersToBG(BattlegroundBracketId bracket_id, Battleground* bg, bool start)
- {
- if (sWorld->getBoolConfig(CONFIG_CROSSFACTIONBG))
- {
- int32 aliFree = start ? bg->GetMinPlayersPerTeam() : bg->GetFreeSlotsForTeam(ALLIANCE);
- int32 hordeFree = start ? bg->GetMinPlayersPerTeam() : bg->GetFreeSlotsForTeam(HORDE);
- // Empty selection pools. They will be refilled from queued groups.
- m_SelectionPools[TEAM_ALLIANCE].Init();
- m_SelectionPools[TEAM_HORDE].Init();
- int32 valiFree = aliFree;
- int32 vhordeFree = hordeFree;
- int32 diff = 0;
- sLog->outDebug(LOG_FILTER_GENERAL, "valiFree: %u vhordeFree: %u", valiFree, vhordeFree);
- for (GroupsQueueType::iterator itr = m_QueuedGroups[bracket_id][BG_QUEUE_MIXED].begin(); itr != m_QueuedGroups[bracket_id][BG_QUEUE_MIXED].end(); ++itr)
- {
- if ((*itr)->IsInvitedToBGInstanceGUID)
- continue;
- diff = abs(valiFree - vhordeFree);
- bool moreAli = valiFree < vhordeFree;
- sLog->outDebug(LOG_FILTER_GENERAL, "moreAli: %s", moreAli ? "true" : "false");
- sLog->outDebug(LOG_FILTER_GENERAL, "diff: %u", diff);
- if (diff > 0)
- (*itr)->Team = moreAli ? HORDE : ALLIANCE;
- bool alliance = (*itr)->Team == ALLIANCE;
- sLog->outDebug(LOG_FILTER_GENERAL, "Team: %s", alliance ? "ali" : "horde");
- if (m_SelectionPools[alliance ? TEAM_ALLIANCE : TEAM_HORDE].AddGroup((*itr), alliance ? aliFree : hordeFree))
- {
- uint8 GSize = (*itr)->Players.size();
- sLog->outDebug(LOG_FILTER_GENERAL, "Size: %u", GSize);
- alliance ? valiFree -= GSize : vhordeFree -= GSize;
- }
- }
- return true;
- }
- return false;
- }
- bool Player::SendBattleGroundChat(uint32 msgtype, std::string message)
- {
- float distance = msgtype == CHAT_MSG_SAY ? sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY) : sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_YELL);
- if (Battleground* pBattleGround = GetBattleground())
- {
- for (Battleground::BattlegroundPlayerMap::const_iterator itr = pBattleGround->GetPlayers().begin(); itr != pBattleGround->GetPlayers().end(); ++itr)
- {
- if (Player* pPlayer = ObjectAccessor::FindPlayer(itr->first))
- {
- if (GetDistance2d(pPlayer->GetPositionX(), pPlayer->GetPositionY()) <= distance)
- {
- if (GetBGTeam() == pPlayer->GetBGTeam())
- {
- WorldPacket data(SMSG_MESSAGECHAT, 200);
- BuildPlayerChat(&data, msgtype, message, LANG_UNIVERSAL);
- pPlayer->GetSession()->SendPacket(&data);
- }
- else if (msgtype != CHAT_MSG_EMOTE)
- {
- WorldPacket data(SMSG_MESSAGECHAT, 200);
- BuildPlayerChat(&data, msgtype, message, pPlayer->GetTeam() == ALLIANCE ? LANG_ORCISH : LANG_COMMON);
- pPlayer->GetSession()->SendPacket(&data);
- }
- }
- }
- }
- return true;
- }
- else
- return false;
- }
- void Player::MorphFit(bool value)
- {
- if (!TeamIsBGTeam() && value)
- {
- if (GetBGTeam() == ALLIANCE)
- {
- if (getGender() == GENDER_MALE)
- {
- SetDisplayId(19723);
- SetNativeDisplayId(19723);
- }
- else
- {
- SetDisplayId(19724);
- SetNativeDisplayId(19724);
- }
- }
- else
- {
- if (getGender() == GENDER_MALE)
- {
- SetDisplayId(20578);
- SetNativeDisplayId(20578);
- }
- else
- {
- SetDisplayId(20579);
- SetNativeDisplayId(20579);
- }
- }
- }
- else
- InitDisplayIds();
- }
- [/CODE]
- [/INDENT]
- [INDENT][SIZE=3][COLOR="#0066ff"]#3. Unit.cpp & [URL="https://github.com/TrinityCore/TrinityCore/tree/master/src/server/game/Handlers"]Handlers[/URL][/COLOR][/SIZE][/INDENT]
- [INDENT]
- [COLOR="#FF8C00"][B]QueryHandler.cpp[/B][/COLOR]
- In QueryHandler.cpp under [URL="https://github.com/TrinityCore/TrinityCore/blob/master/src/server/game/Handlers/QueryHandler.cpp#L34"]SendNameQueryOpcode(uint64 guid)[/URL], change:
- (On line [URL="https://github.com/TrinityCore/TrinityCore/blob/master/src/server/game/Handlers/QueryHandler.cpp#L51"]#51[/URL])
- [CODE]data << uint8(nameData->m_race);[/CODE]
- to:
- [CODE]data << uint8(player ? player->GetFakeRaceOrRace() : nameData->m_race);[/CODE]
- [COLOR="#FF8C00"][B]MiscHandler.cpp[/B][/COLOR]
- Under [URL="https://github.com/TrinityCore/TrinityCore/blob/master/src/server/game/Handlers/MiscHandler.cpp#L1416"]void WorldSession::HandleTimeSyncResp(WorldPacket& recvData)[/URL] add:
- [CODE]
- Battleground* bg = _player->GetBattleground();
- if (bg)
- {
- if (_player->ShouldForgetBGPlayers())
- {
- _player->DoForgetPlayersInBG(bg);
- _player->SetForgetBGPlayers(false);
- }
- }
- else if (_player->ShouldForgetInListPlayers())
- {
- _player->DoForgetPlayersInList();
- _player->SetForgetInListPlayers(false);
- }
- [/CODE]
- Above or below line: [URL="https://github.com/TrinityCore/TrinityCore/blob/master/src/server/game/Handlers/MiscHandler.cpp#L1418"]#1418[/URL]
- [COLOR="#FF8C00"][B]ChatHandler.cpp[/B][/COLOR]
- Inside of [URL="https://github.com/TrinityCore/TrinityCore/blob/master/src/server/game/Handlers/ChatHandler.cpp#L43"]void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData)[/URL] add:
- [CODE]
- if (!GetPlayer()->isGameMaster())
- if (GetPlayer()->SendBattleGroundChat(type, msg))
- return;
- [/CODE]
- Above line [URL="https://github.com/TrinityCore/TrinityCore/blob/master/src/server/game/Handlers/ChatHandler.cpp#L251"]#251[/URL]
- [COLOR="#FF8C00"][B]CharacterHandler.cpp[/B][/COLOR]
- Inside of [URL="https://github.com/TrinityCore/TrinityCore/blob/master/src/server/game/Handlers/CharacterHandler.cpp#L798"]void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder)[/URL]
- Under line [URL="https://github.com/TrinityCore/TrinityCore/blob/master/src/server/game/Handlers/CharacterHandler.cpp#L1031"]#1031[/URL] add:
- [CODE]
- if (sWorld->getBoolConfig(CONFIG_CROSSFACTIONBG))
- {
- float x = pCurrChar->GetPositionX();
- float y = pCurrChar->GetPositionY();
- float z = pCurrChar->GetPositionZ();
- uint32 hm = pCurrChar->m_homebindMapId;
- float hx = pCurrChar->m_homebindX;
- float hy = pCurrChar->m_homebindX;
- float hz = pCurrChar->m_homebindX;
- if (z+1 < pCurrChar->GetMap()->GetHeight(x, y, MAX_HEIGHT) && pCurrChar->GetMap()->IsOutdoors(x, y, z))
- pCurrChar->TeleportTo(hm, hx, hy, hz, 0);
- }
- if (pCurrChar->GetBattleground() && !pCurrChar->GetBattleground()->isArena())
- pCurrChar->FitPlayerInTeam(true);
- else
- pCurrChar->FitPlayerInTeam(false);
- [/CODE]
- [COLOR="Lime"][B]Unit.cpp[/B][/COLOR]
- Inside of [URL="https://github.com/TrinityCore/TrinityCore/blob/master/src/server/game/Entities/Unit/Unit.cpp#L15918"]void Unit::RestoreFaction()[/URL]
- On line [URL="https://github.com/TrinityCore/TrinityCore/blob/master/src/server/game/Entities/Unit/Unit.cpp#L15921"]#15921[/URL], replace:
- [CODE]ToPlayer()->setFactionForRace(getRace());[/CODE]
- with
- [CODE]ToPlayer()->setFactionForRace(ToPlayer()->GetFakeRaceOrRace());[/CODE]
- [/INDENT]
- [INDENT][SIZE=3][COLOR="#0066ff"]#4. BattlegroundQueue.cpp & BattlegroundQueue.h[/COLOR][/SIZE][/INDENT]
- [INDENT]
- Open BattlegroundQueue.h..
- Inside of [URL="https://github.com/TrinityCore/TrinityCore/blob/master/src/server/game/Battlegrounds/BattlegroundQueue.h#L58"]enum BattlegroundQueueGroupTypes[/URL] under [URL="https://github.com/TrinityCore/TrinityCore/blob/master/src/server/game/Battlegrounds/BattlegroundQueue.h#L63"]BG_QUEUE_NORMAL_HORDE = 3[/URL], add:
- [CODE]BG_QUEUE_MIXED = 4[/CODE]
- It should look like this now:
- [CODE]
- enum BattlegroundQueueGroupTypes
- {
- BG_QUEUE_PREMADE_ALLIANCE = 0,
- BG_QUEUE_PREMADE_HORDE = 1,
- BG_QUEUE_NORMAL_ALLIANCE = 2,
- BG_QUEUE_NORMAL_HORDE = 3,
- BG_QUEUE_MIXED = 4
- };
- [/CODE]
- On line [URL="https://github.com/TrinityCore/TrinityCore/blob/master/src/server/game/Battlegrounds/BattlegroundQueue.h#L65"]#65[/URL] replace #define [URL="https://github.com/TrinityCore/TrinityCore/blob/master/src/server/game/Battlegrounds/BattlegroundQueue.h#L65"]BG_QUEUE_GROUP_TYPES_COUNT 4[/URL] with:
- (Just change the 4 to a 5)
- [CODE]
- #define BG_QUEUE_GROUP_TYPES_COUNT 5
- [/CODE]
- Now, under line [URL="https://github.com/TrinityCore/TrinityCore/blob/master/src/server/game/Battlegrounds/BattlegroundQueue.h#L75"]#75[/URL] add:
- [CODE]
- bool FillXPlayersToBG(BattlegroundBracketId bracket_id, Battleground* bg, bool start = false);
- bool CheckCrossFactionMatch(BattlegroundBracketId bracket_id, Battleground* bg);
- [/CODE]
- You're done with BattlegroundQueue.h. [COLOR="#FF8C00"]Open up and go to BattlegroundQueue.cpp..[/COLOR]
- On line [URL="https://github.com/TrinityCore/TrinityCore/blob/master/src/server/game/Battlegrounds/BattlegroundQueue.cpp#L840"]#840[/URL], replace:
- [CODE]
- if (CheckNormalMatch(bg_template, bracket_id, MinPlayersPerTeam, MaxPlayersPerTeam)
- || (bg_template->isArena() && CheckSkirmishForSameFaction(bracket_id, MinPlayersPerTeam)))
- [/CODE]
- with:
- [CODE]
- if (CheckNormalMatch(bg_template, bracket_id, MinPlayersPerTeam, MaxPlayersPerTeam)
- || (bg_template->isArena() && CheckSkirmishForSameFaction(bracket_id, MinPlayersPerTeam))
- || CheckCrossFactionMatch(bracket_id, bg_template))
- [/CODE]
- On line [URL="https://github.com/TrinityCore/TrinityCore/blob/master/src/server/game/Battlegrounds/BattlegroundQueue.cpp#L747"]#747[/URL], replace:
- [CODE]
- if (m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_ALLIANCE].empty() &&
- m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_HORDE].empty() &&
- m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_ALLIANCE].empty() &&
- m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_HORDE].empty())
- return;
- [/CODE]
- with:
- [CODE]
- if (m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_ALLIANCE].empty() &&
- m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_HORDE].empty() &&
- m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_ALLIANCE].empty() &&
- m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_HORDE].empty() &&
- m_QueuedGroups[bracket_id][BG_QUEUE_MIXED].empty())
- return;
- [/CODE]
- On line [URL="https://github.com/TrinityCore/TrinityCore/blob/master/src/server/game/Battlegrounds/BattlegroundQueue.cpp#L501"]#501[/URL] add:
- [CODE]
- if (!bg->isArena())
- if (FillXPlayersToBG(bracket_id, bg, false))
- return;
- [/CODE]
- On line [URL="https://github.com/TrinityCore/TrinityCore/blob/master/src/server/game/Battlegrounds/BattlegroundQueue.cpp#L313"]#313[/URL], replace:
- [CODE]
- for (uint32 j = index; j < BG_QUEUE_GROUP_TYPES_COUNT; j += BG_TEAMS_COUNT)
- [/CODE]
- with:
- [CODE]
- for (uint32 j = 0; j < BG_QUEUE_GROUP_TYPES_COUNT; ++j)
- [/CODE]
- On line [URL="https://github.com/TrinityCore/TrinityCore/blob/master/src/server/game/Battlegrounds/BattlegroundQueue.cpp#L298"]#298[/URL], replace:
- [CODE]
- TC_LOG_ERROR("bg.battleground", "BattlegroundQueue: couldn't find player %s (GUID: %u)", playerName.c_str(), GUID_LOPART(guid));
- [/CODE]
- with:
- [CODE]
- TC_LOG_DEBUG("bg.battleground", "BattlegroundQueue: couldn't find player %s (GUID: %u)", playerName.c_str(), GUID_LOPART(guid));
- [/CODE]
- [COLOR="#00FF00"]READ CAREFULLY:[/COLOR]
- Inside of [URL="https://github.com/TrinityCore/TrinityCore/blob/master/src/server/game/Battlegrounds/BattlegroundQueue.cpp#L130"]GroupQueueInfo* BattlegroundQueue::AddGroup(Player* leader, Group* grp, BattlegroundTypeId BgTypeId, PvPDifficultyEntry const* bracketEntry, uint8 ArenaType, bool isRated, bool isPremade, uint32 ArenaRating, uint32 MatchmakerRating, uint32 arenateamid)[/URL]
- On line [URL="https://github.com/TrinityCore/TrinityCore/blob/master/src/server/game/Battlegrounds/BattlegroundQueue.cpp#L143"]#143[/URL] replace:
- [CODE] ginfo->Team = leader->GetTeam();[/CODE]
- with:
- [CODE]ginfo->Team = leader->GetBGTeam();[/CODE]
- Above line [URL="https://github.com/TrinityCore/TrinityCore/blob/master/src/server/game/Battlegrounds/BattlegroundQueue.cpp#L157"]#157[/URL] add:
- [CODE]
- if (sWorld->getBoolConfig(CONFIG_CROSSFACTIONBG) && ArenaType == 0)
- index = BG_QUEUE_MIXED;
- [/CODE]
- ON LINE [URL="https://github.com/TrinityCore/TrinityCore/blob/master/src/server/game/Battlegrounds/BattlegroundQueue.cpp#L200"]#200[/URL] replace:
- [CODE]
- if (Battleground* bg = sBattlegroundMgr->GetBattlegroundTemplate(ginfo->BgTypeId))
- {
- char const* bgName = bg->GetName();
- uint32 MinPlayers = bg->GetMinPlayersPerTeam();
- uint32 qHorde = 0;
- uint32 qAlliance = 0;
- uint32 q_min_level = bracketEntry->minLevel;
- uint32 q_max_level = bracketEntry->maxLevel;
- GroupsQueueType::const_iterator itr;
- for (itr = m_QueuedGroups[bracketId][BG_QUEUE_NORMAL_ALLIANCE].begin(); itr != m_QueuedGroups[bracketId][BG_QUEUE_NORMAL_ALLIANCE].end(); ++itr)
- if (!(*itr)->IsInvitedToBGInstanceGUID)
- qAlliance += (*itr)->Players.size();
- for (itr = m_QueuedGroups[bracketId][BG_QUEUE_NORMAL_HORDE].begin(); itr != m_QueuedGroups[bracketId][BG_QUEUE_NORMAL_HORDE].end(); ++itr)
- if (!(*itr)->IsInvitedToBGInstanceGUID)
- qHorde += (*itr)->Players.size();
- // Show queue status to player only (when joining queue)
- if (sWorld->getBoolConfig(CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_PLAYERONLY))
- {
- ChatHandler(leader->GetSession()).PSendSysMessage(LANG_BG_QUEUE_ANNOUNCE_SELF, bgName, q_min_level, q_max_level,
- qAlliance, (MinPlayers > qAlliance) ? MinPlayers - qAlliance : (uint32)0, qHorde, (MinPlayers > qHorde) ? MinPlayers - qHorde : (uint32)0);
- }
- // System message
- else
- {
- sWorld->SendWorldText(LANG_BG_QUEUE_ANNOUNCE_WORLD, bgName, q_min_level, q_max_level,
- qAlliance, (MinPlayers > qAlliance) ? MinPlayers - qAlliance : (uint32)0, qHorde, (MinPlayers > qHorde) ? MinPlayers - qHorde : (uint32)0);
- }
- }
- [/CODE]
- with:
- [CODE]
- if (Battleground* bg = sBattlegroundMgr->GetBattlegroundTemplate(ginfo->BgTypeId))
- {
- if (sWorld->getBoolConfig(CONFIG_CROSSFACTIONBG))
- {
- char const* bgName = bg->GetName();
- uint32 MinPlayers = bg->GetMinPlayersPerTeam()*2;
- uint32 qPlayers = 0;
- uint32 q_min_level = bracketEntry->minLevel;
- uint32 q_max_level = bracketEntry->maxLevel;
- for (GroupsQueueType::const_iterator itr = m_QueuedGroups[bracketId][BG_QUEUE_MIXED].begin(); itr != m_QueuedGroups[bracketId][BG_QUEUE_MIXED].end(); ++itr)
- if (!(*itr)->IsInvitedToBGInstanceGUID)
- qPlayers += (*itr)->Players.size();
- if (sWorld->getBoolConfig(CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_PLAYERONLY))
- {
- ChatHandler(leader->GetSession()).PSendSysMessage("Queue status for %s (Lvl: %u to %u) Queued players: %u (Need at least %u more)", bgName, q_min_level, q_max_level, qPlayers, MinPlayers - qPlayers);
- }
- else
- {
- std::ostringstream ss;
- ss << "|cffff0000[BG Queue Announcer]:|r " << bgName << " -- [" << q_min_level << "-" << q_max_level << "]" << qPlayers << "/" << MinPlayers;
- sWorld->SendGlobalText(ss.str().c_str(), NULL);
- }
- }
- else
- {
- char const* bgName = bg->GetName();
- uint32 MinPlayers = bg->GetMinPlayersPerTeam();
- uint32 qHorde = 0;
- uint32 qAlliance = 0;
- uint32 q_min_level = bracketEntry->minLevel;
- uint32 q_max_level = bracketEntry->maxLevel;
- GroupsQueueType::const_iterator itr;
- for (itr = m_QueuedGroups[bracketId][BG_QUEUE_NORMAL_ALLIANCE].begin(); itr != m_QueuedGroups[bracketId][BG_QUEUE_NORMAL_ALLIANCE].end(); ++itr)
- if (!(*itr)->IsInvitedToBGInstanceGUID)
- qAlliance += (*itr)->Players.size();
- for (itr = m_QueuedGroups[bracketId][BG_QUEUE_NORMAL_HORDE].begin(); itr != m_QueuedGroups[bracketId][BG_QUEUE_NORMAL_HORDE].end(); ++itr)
- if (!(*itr)->IsInvitedToBGInstanceGUID)
- qHorde += (*itr)->Players.size();
- // Show queue status to player only (when joining queue)
- if (sWorld->getBoolConfig(CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_PLAYERONLY))
- {
- ChatHandler(leader->GetSession()).PSendSysMessage(LANG_BG_QUEUE_ANNOUNCE_SELF, bgName, q_min_level, q_max_level,
- qAlliance, (MinPlayers > qAlliance) ? MinPlayers - qAlliance : (uint32)0, qHorde, (MinPlayers > qHorde) ? MinPlayers - qHorde : (uint32)0);
- }
- // System message
- else
- {
- sWorld->SendWorldText(LANG_BG_QUEUE_ANNOUNCE_WORLD, bgName, q_min_level, q_max_level,
- qAlliance, (MinPlayers > qAlliance) ? MinPlayers - qAlliance : (uint32)0, qHorde, (MinPlayers > qHorde) ? MinPlayers - qHorde : (uint32)0);
- }
- }
- }
- [/CODE]
- [/INDENT]
- And that should be it! Enjoy. :)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement