diff --git a/src/game/BattleGround.cpp b/src/game/BattleGround.cpp index 903485384..6a3b91382 100644 --- a/src/game/BattleGround.cpp +++ b/src/game/BattleGround.cpp @@ -519,11 +519,13 @@ void BattleGround::SendPacketToAll(WorldPacket *packet) { for(BattleGroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr) { + if (itr->second.OfflineRemoveTime) + continue; Player *plr = sObjectMgr.GetPlayer(itr->first); if (plr) plr->GetSession()->SendPacket(packet); else - sLog.outError("BattleGround: Player (GUID: %u) not found!", GUID_LOPART(itr->first)); + sLog.outError("BattleGround:SendPacketToAll: Player (GUID: %u) not found!", GUID_LOPART(itr->first)); } } @@ -531,11 +533,12 @@ void BattleGround::SendPacketToTeam(uint32 TeamID, WorldPacket *packet, Player * { for(BattleGroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr) { + if (itr->second.OfflineRemoveTime) + continue; Player *plr = sObjectMgr.GetPlayer(itr->first); - if (!plr) { - sLog.outError("BattleGround: Player (GUID: %u) not found!", GUID_LOPART(itr->first)); + sLog.outError("BattleGround:SendPacketToTeam: Player (GUID: %u) not found!", GUID_LOPART(itr->first)); continue; } @@ -563,11 +566,13 @@ void BattleGround::PlaySoundToTeam(uint32 SoundID, uint32 TeamID) for(BattleGroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr) { + if (itr->second.OfflineRemoveTime) + continue; Player *plr = sObjectMgr.GetPlayer(itr->first); if (!plr) { - sLog.outError("BattleGround: Player (GUID: %u) not found!", GUID_LOPART(itr->first)); + sLog.outError("BattleGround:PlaySoundToTeam: Player (GUID: %u) not found!", GUID_LOPART(itr->first)); continue; } @@ -586,11 +591,13 @@ void BattleGround::CastSpellOnTeam(uint32 SpellID, uint32 TeamID) { for(BattleGroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr) { + if (itr->second.OfflineRemoveTime) + continue; Player *plr = sObjectMgr.GetPlayer(itr->first); if (!plr) { - sLog.outError("BattleGround: Player (GUID: %u) not found!", GUID_LOPART(itr->first)); + sLog.outError("BattleGround:CastSpellOnTeam: Player (GUID: %u) not found!", GUID_LOPART(itr->first)); continue; } @@ -606,11 +613,13 @@ void BattleGround::RewardHonorToTeam(uint32 Honor, uint32 TeamID) { for(BattleGroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr) { + if (itr->second.OfflineRemoveTime) + continue; Player *plr = sObjectMgr.GetPlayer(itr->first); if (!plr) { - sLog.outError("BattleGround: Player (GUID: %u) not found!", GUID_LOPART(itr->first)); + sLog.outError("BattleGround:RewardHonorToTeam: Player (GUID: %u) not found!", GUID_LOPART(itr->first)); continue; } @@ -631,11 +640,13 @@ void BattleGround::RewardReputationToTeam(uint32 faction_id, uint32 Reputation, for(BattleGroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr) { + if (itr->second.OfflineRemoveTime) + continue; Player *plr = sObjectMgr.GetPlayer(itr->first); if (!plr) { - sLog.outError("BattleGround: Player (GUID: %u) not found!", GUID_LOPART(itr->first)); + sLog.outError("BattleGround:RewardReputationToTeam: Player (GUID: %u) not found!", GUID_LOPART(itr->first)); continue; } @@ -721,10 +732,9 @@ void BattleGround::EndBattleGround(uint32 winner) for(BattleGroundPlayerMap::iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr) { - Player *plr = sObjectMgr.GetPlayer(itr->first); uint32 team = itr->second.Team; - if (!plr) + if (itr->second.OfflineRemoveTime) { //if rated arena match - make member lost! if (isArena() && isRated() && winner_arena_team && loser_arena_team) @@ -734,9 +744,11 @@ void BattleGround::EndBattleGround(uint32 winner) else loser_arena_team->OfflineMemberLost(itr->first, winner_rating); } - sLog.outError("BattleGround: Player (GUID: %u) not found!", GUID_LOPART(itr->first)); continue; } + Player *plr = sObjectMgr.GetPlayer(itr->first); + if (!plr) + sLog.outError("BattleGround:EndBattleGround Player (GUID: %u) not found!", GUID_LOPART(itr->first)); // should remove spirit of redemption if (plr->HasAuraType(SPELL_AURA_SPIRIT_OF_REDEMPTION)) @@ -1285,14 +1297,13 @@ void BattleGround::EventPlayerLoggedOut(Player* player) m_Players[player->GetGUID()].OfflineRemoveTime = sWorld.GetGameTime() + MAX_OFFLINE_TIME; if (GetStatus() == STATUS_IN_PROGRESS) { - if (isBattleGround()) - EventPlayerDroppedFlag(player); - else - { - //1 player is logging out, if it is the last, then end arena! + // drop flag and handle other cleanups + RemovePlayer(player, player->GetGUID()); + + // 1 player is logging out, if it is the last, then end arena! + if (isArena()) if (GetAlivePlayersCountByTeam(player->GetTeam()) <= 1 && GetPlayersCountByTeam(GetOtherTeam(player->GetTeam()))) EndBattleGround(GetOtherTeam(player->GetTeam())); - } } } diff --git a/src/game/BattleGroundEY.cpp b/src/game/BattleGroundEY.cpp index 74f278c48..fa0b41679 100644 --- a/src/game/BattleGroundEY.cpp +++ b/src/game/BattleGroundEY.cpp @@ -134,7 +134,7 @@ void BattleGroundEY::CheckSomeoneJoinedPoint() Player *plr = sObjectMgr.GetPlayer(m_PlayersNearPoint[BG_EY_NODES_MAX][j]); if (!plr) { - sLog.outError("BattleGroundEY: Player (GUID: %u) not found!", GUID_LOPART(m_PlayersNearPoint[BG_EY_NODES_MAX][j])); + sLog.outError("BattleGroundEY:CheckSomeoneJoinedPoint: Player (GUID: %u) not found!", GUID_LOPART(m_PlayersNearPoint[BG_EY_NODES_MAX][j])); ++j; continue; } @@ -170,7 +170,7 @@ void BattleGroundEY::CheckSomeoneLeftPoint() Player *plr = sObjectMgr.GetPlayer(m_PlayersNearPoint[i][j]); if (!plr) { - sLog.outError("BattleGroundEY: Player (GUID: %u) not found!", GUID_LOPART(m_PlayersNearPoint[i][j])); + sLog.outError("BattleGroundEY:CheckSomeoneLeftPoint Player (GUID: %u) not found!", GUID_LOPART(m_PlayersNearPoint[i][j])); //move not existed player to "free space" - this will cause many error showing in log, but it is a very important bug m_PlayersNearPoint[BG_EY_NODES_MAX].push_back(m_PlayersNearPoint[i][j]); m_PlayersNearPoint[i].erase(m_PlayersNearPoint[i].begin() + j); diff --git a/src/game/BattleGroundHandler.cpp b/src/game/BattleGroundHandler.cpp index cb38b33cd..82fe63db0 100644 --- a/src/game/BattleGroundHandler.cpp +++ b/src/game/BattleGroundHandler.cpp @@ -366,7 +366,8 @@ void WorldSession::HandleBattleFieldPortOpcode( WorldPacket &recv_data ) //if player don't match battleground max level, then do not allow him to enter! (this might happen when player leveled up during his waiting in queue if (_player->getLevel() > bg->GetMaxLevel()) { - sLog.outError("Battleground: Player %s (%u) has level higher than maxlevel of battleground! Do not port him to battleground!", _player->GetName(), _player->GetGUIDLow()); + sLog.outError("Battleground: Player %s (%u) has level (%u) higher than maxlevel (%u) of battleground (%u)! Do not port him to battleground!", + _player->GetName(), _player->GetGUIDLow(), _player->getLevel(), bg->GetMaxLevel(), bg->GetTypeID()); action = 0; } } diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 4d34ff7f4..7d962bb3c 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -19123,7 +19123,7 @@ BGQueueIdBasedOnLevel Player::GetBattleGroundQueueIdFromLevel() const uint32 queue_id = ( getLevel() / 10) - 1; if( queue_id >= MAX_BATTLEGROUND_QUEUES ) { - sLog.outError("BattleGround: too high queue_id %u this shouldn't happen", queue_id); + sLog.outError("BattleGround: too high queue_id %u for player %u (acc: %u) with level %u", queue_id, GetGUIDLow(), GetSession()->GetAccountId(), getLevel()); return QUEUE_ID_MAX_LEVEL_80; } return BGQueueIdBasedOnLevel(queue_id); diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index bc8a17fca..77963641a 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "8925" + #define REVISION_NR "8926" #endif // __REVISION_NR_H__