diff options
author | w12x <none@none> | 2008-10-05 08:48:32 -0500 |
---|---|---|
committer | w12x <none@none> | 2008-10-05 08:48:32 -0500 |
commit | 6f0c3469a63c97eef57f36f1a39fed0b281b7cc9 (patch) | |
tree | 7089d31e4493160bed067ac9da519841704b230a /src/game/MovementHandler.cpp | |
parent | 8b3fcc37c624c3ee4808d63160f563c070950cb4 (diff) |
[svn] -enabled instantiated battlegrounds
-enabled arena matches
-rewritten battleground queuing to support joining as group
-removed queue announcements
--HG--
branch : trunk
Diffstat (limited to 'src/game/MovementHandler.cpp')
-rw-r--r-- | src/game/MovementHandler.cpp | 45 |
1 files changed, 30 insertions, 15 deletions
diff --git a/src/game/MovementHandler.cpp b/src/game/MovementHandler.cpp index 1efd4e3c3e7..9853e339350 100644 --- a/src/game/MovementHandler.cpp +++ b/src/game/MovementHandler.cpp @@ -130,22 +130,28 @@ void WorldSession::HandleMoveWorldportAckOpcode() _player->RemoveSpellsCausingAura(SPELL_AURA_MOUNTED); // battleground state preper - if(_player->InBattleGround()) + // only add to bg group and object, if the player was invited (else he entered through command) + if(_player->InBattleGround() && _player->IsInvitedForBattleGroundInstance(_player->GetBattleGroundId())) { BattleGround *bg = _player->GetBattleGround(); if(bg) { + bg->AddPlayer(_player); if(bg->GetMapId() == _player->GetMapId()) // we teleported to bg { - if(!bg->GetBgRaid(_player->GetTeam())) // first player joined + // get the team this way, because arenas might 'override' the teams. + uint32 team = bg->GetPlayerTeam(_player->GetGUID()); + if(!team) + team = _player->GetTeam(); + if(!bg->GetBgRaid(team)) // first player joined { Group *group = new Group; - bg->SetBgRaid(_player->GetTeam(), group); + bg->SetBgRaid(team, group); group->Create(_player->GetGUIDLow(), _player->GetName()); } else // raid already exist { - bg->GetBgRaid(_player->GetTeam())->AddMember(_player->GetGUID(), _player->GetName()); + bg->GetBgRaid(team)->AddMember(_player->GetGUID(), _player->GetName()); } } } @@ -365,20 +371,29 @@ void WorldSession::HandleMovementOpcodes( WorldPacket & recv_data ) if(movementInfo.z < -500.0f) { - // NOTE: this is actually called many times while falling - // even after the player has been teleported away - // TODO: discard movement packets after the player is rooted - if(GetPlayer()->isAlive()) + if(GetPlayer()->InBattleGround() + && GetPlayer()->GetBattleGround() + && GetPlayer()->GetBattleGround()->HandlePlayerUnderMap(_player)) { - GetPlayer()->EnvironmentalDamage(GetPlayer()->GetGUID(),DAMAGE_FALL_TO_VOID, GetPlayer()->GetMaxHealth()); - // change the death state to CORPSE to prevent the death timer from - // starting in the next player update - GetPlayer()->KillPlayer(); - GetPlayer()->BuildPlayerRepop(); + // do nothing, the handle already did if returned true } + else + { + // NOTE: this is actually called many times while falling + // even after the player has been teleported away + // TODO: discard movement packets after the player is rooted + if(GetPlayer()->isAlive()) + { + GetPlayer()->EnvironmentalDamage(GetPlayer()->GetGUID(),DAMAGE_FALL_TO_VOID, GetPlayer()->GetMaxHealth()); + // change the death state to CORPSE to prevent the death timer from + // starting in the next player update + GetPlayer()->KillPlayer(); + GetPlayer()->BuildPlayerRepop(); + } - // cancel the death timer here if started - GetPlayer()->RepopAtGraveyard(); + // cancel the death timer here if started + GetPlayer()->RepopAtGraveyard(); + } } } |