mirror of
https://github.com/mangosfour/server.git
synced 2025-12-12 19:37:03 +00:00
[8474] Allow to delete BattleGround objects when any of invited players didn't click to enter battle.
Rename m_TeamScores500disadvantage to m_TeamScores500Disadvantage, and optimize its update. Patch is tested. Signed-off-by: Triply <triply@getmangos.com>
This commit is contained in:
parent
7db230df55
commit
56ddf40d62
7 changed files with 51 additions and 45 deletions
|
|
@ -231,9 +231,22 @@ BattleGround::~BattleGround()
|
|||
|
||||
void BattleGround::Update(uint32 diff)
|
||||
{
|
||||
if (!GetPlayersSize() && !GetReviveQueueSize())
|
||||
//BG is empty
|
||||
if (!GetPlayersSize())
|
||||
{
|
||||
// BG is empty
|
||||
// if there are no players invited, delete BG
|
||||
// this will delete arena or bg object, where any player entered
|
||||
// [[ but if you use battleground object again (more battles possible to be played on 1 instance)
|
||||
// then this condition should be removed and code:
|
||||
// if (!GetInvitedCount(HORDE) && !GetInvitedCount(ALLIANCE))
|
||||
// this->AddToFreeBGObjectsQueue(); // not yet implemented
|
||||
// should be used instead of current
|
||||
// ]]
|
||||
// BattleGround Template instance cannot be updated, because it would be deleted
|
||||
if (!GetInvitedCount(HORDE) && !GetInvitedCount(ALLIANCE))
|
||||
m_SetDeleteThis = true;
|
||||
return;
|
||||
}
|
||||
|
||||
// remove offline players from bg after 5 minutes
|
||||
if (!m_OfflineQueue.empty())
|
||||
|
|
@ -1028,7 +1041,12 @@ void BattleGround::RemovePlayerAtLeave(uint64 guid, bool Transport, bool SendPac
|
|||
DecreaseInvitedCount(team);
|
||||
//we should update battleground queue, but only if bg isn't ending
|
||||
if (isBattleGround() && GetStatus() < STATUS_WAIT_LEAVE)
|
||||
{
|
||||
// a player has left the battleground, so there are free slots -> add to queue
|
||||
AddToBGFreeSlotQueue();
|
||||
sBattleGroundMgr.m_BattleGroundQueues[bgQueueTypeId].Update(bgTypeId, GetQueueId());
|
||||
}
|
||||
|
||||
// Let others know
|
||||
WorldPacket data;
|
||||
sBattleGroundMgr.BuildPlayerLeftBattleGroundPacket(&data, guid);
|
||||
|
|
@ -1048,17 +1066,7 @@ void BattleGround::RemovePlayerAtLeave(uint64 guid, bool Transport, bool SendPac
|
|||
sLog.outDetail("BATTLEGROUND: Removed player %s from BattleGround.", plr->GetName());
|
||||
}
|
||||
|
||||
if (!GetPlayersSize() && !GetInvitedCount(HORDE) && !GetInvitedCount(ALLIANCE))
|
||||
{
|
||||
// if no players left AND no invitees left, set this bg to delete in next update
|
||||
// direct deletion could cause crashes
|
||||
m_SetDeleteThis = true;
|
||||
// return to prevent addition to freeslotqueue
|
||||
return;
|
||||
}
|
||||
|
||||
// a player exited the battleground, so there are free slots. add to queue
|
||||
this->AddToBGFreeSlotQueue();
|
||||
//battleground object will be deleted next BattleGround::Update() call
|
||||
}
|
||||
|
||||
// this method is called when no players remains in battleground
|
||||
|
|
@ -1091,10 +1099,16 @@ void BattleGround::Reset()
|
|||
|
||||
void BattleGround::StartBattleGround()
|
||||
{
|
||||
///this method should spawn spirit guides and so on
|
||||
SetStartTime(0);
|
||||
|
||||
SetLastResurrectTime(0);
|
||||
|
||||
// add BG to free slot queue
|
||||
AddToBGFreeSlotQueue();
|
||||
|
||||
// add bg to update list
|
||||
// This must be done here, because we need to have already invited some players when first BG::Update() method is executed
|
||||
// and it doesn't matter if we call StartBattleGround() more times, because m_BattleGrounds is a map and instance id never changes
|
||||
sBattleGroundMgr.AddBattleGround(GetInstanceID(), GetTypeID(), this);
|
||||
}
|
||||
|
||||
void BattleGround::AddPlayer(Player *plr)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue