Show
Ignore:
Timestamp:
11/19/08 13:22:41 (17 years ago)
Author:
yumileroy
Message:

[svn] -enabled instantiated battlegrounds
-enabled arena matches
-rewritten battleground queuing to support joining as group
-removed queue announcements

Original author: w12x
Date: 2008-10-05 08:48:32-05:00

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/game/BattleGroundRL.cpp

    r2 r9  
    4848            m_Events |= 0x01; 
    4949 
     50            // setup here, only when at least one player has ported to the map 
     51            if(!SetupBattleGround()) 
     52            { 
     53                EndNow(); 
     54                return; 
     55            } 
     56 
    5057            for(uint32 i = BG_RL_OBJECT_DOOR_1; i <= BG_RL_OBJECT_DOOR_2; i++) 
    5158                SpawnBGObject(i, RESPAWN_IMMEDIATELY); 
     
    7380            for(uint32 i = BG_RL_OBJECT_DOOR_1; i <= BG_RL_OBJECT_DOOR_2; i++) 
    7481                DoorOpen(i); 
     82 
     83            for(uint32 i = BG_RL_OBJECT_BUFF_1; i <= BG_RL_OBJECT_BUFF_2; i++) 
     84                SpawnBGObject(i, 60); 
    7585 
    7686            SendMessageToAll(LANG_ARENA_BEGUN); 
     
    8191                if(Player *plr = objmgr.GetPlayer(itr->first)) 
    8292                    plr->RemoveAurasDueToSpell(SPELL_ARENA_PREPARATION); 
     93 
     94            if(!GetPlayersCountByTeam(ALLIANCE) && GetPlayersCountByTeam(HORDE)) 
     95                EndBattleGround(HORDE); 
     96            else if(GetPlayersCountByTeam(ALLIANCE) && !GetPlayersCountByTeam(HORDE)) 
     97                EndBattleGround(ALLIANCE); 
    8398        } 
    8499    } 
     
    97112 
    98113    m_PlayerScores[plr->GetGUID()] = sc; 
     114 
     115    UpdateWorldState(0xbb8, GetAlivePlayersCountByTeam(ALLIANCE)); 
     116    UpdateWorldState(0xbb9, GetAlivePlayersCountByTeam(HORDE)); 
    99117} 
    100118 
    101119void BattleGroundRL::RemovePlayer(Player *plr, uint64 guid) 
    102120{ 
    103  
     121    if(GetStatus() == STATUS_WAIT_LEAVE) 
     122        return; 
     123 
     124    UpdateWorldState(0xbb8, GetAlivePlayersCountByTeam(ALLIANCE)); 
     125    UpdateWorldState(0xbb9, GetAlivePlayersCountByTeam(HORDE)); 
     126 
     127    if(!GetAlivePlayersCountByTeam(ALLIANCE) && GetPlayersCountByTeam(HORDE)) 
     128        EndBattleGround(HORDE); 
     129    else if(GetPlayersCountByTeam(ALLIANCE) && !GetAlivePlayersCountByTeam(HORDE)) 
     130        EndBattleGround(ALLIANCE); 
    104131} 
    105132 
     
    115142    } 
    116143 
    117     BattleGround::HandleKillPlayer(player, killer); 
    118  
    119     uint32 killer_team_index = GetTeamIndexByTeamId(killer->GetTeam()); 
    120  
    121     ++m_TeamKills[killer_team_index];                       // add kills to killer's team 
    122  
    123     if(m_TeamKills[killer_team_index] >= GetPlayersCountByTeam(player->GetTeam())) 
     144    BattleGround::HandleKillPlayer(player,killer); 
     145 
     146    UpdateWorldState(0xbb8, GetAlivePlayersCountByTeam(ALLIANCE)); 
     147    UpdateWorldState(0xbb9, GetAlivePlayersCountByTeam(HORDE)); 
     148 
     149    if(!GetAlivePlayersCountByTeam(ALLIANCE)) 
    124150    { 
    125151        // all opponents killed 
    126         EndBattleGround(killer->GetTeam()); 
    127     } 
     152        EndBattleGround(HORDE); 
     153    } 
     154    else if(!GetAlivePlayersCountByTeam(HORDE)) 
     155    { 
     156        // all opponents killed 
     157        EndBattleGround(ALLIANCE); 
     158    } 
     159} 
     160 
     161bool BattleGroundRL::HandlePlayerUnderMap(Player *player) 
     162{ 
     163    player->TeleportTo(GetMapId(),1285.810547,1667.896851,39.957642,player->GetOrientation(),false); 
     164    return true; 
    128165} 
    129166 
     
    151188} 
    152189 
     190void BattleGroundRL::FillInitialWorldStates(WorldPacket &data) 
     191{ 
     192    data << uint32(0xbb8) << uint32(GetAlivePlayersCountByTeam(ALLIANCE));           // 7 
     193    data << uint32(0xbb9) << uint32(GetAlivePlayersCountByTeam(HORDE));           // 8 
     194    data << uint32(0xbba) << uint32(1);           // 9 
     195} 
     196 
    153197void BattleGroundRL::ResetBGSubclass() 
    154198{ 
    155     m_TeamKills[BG_TEAM_ALLIANCE] = 0; 
    156     m_TeamKills[BG_TEAM_HORDE]    = 0; 
     199 
    157200} 
    158201 
     
    160203{ 
    161204    // gates 
    162     if(    !AddObject(BG_RL_OBJECT_DOOR_1, BG_RL_OBJECT_TYPE_DOOR_1, 1293.561f, 1601.938f, 31.60557f, -1.457349f, 0, 0, -0.6658813f, 0.7460576f, RESPAWN_IMMEDIATELY) 
    163         || !AddObject(BG_RL_OBJECT_DOOR_2, BG_RL_OBJECT_TYPE_DOOR_2, 1278.648f, 1730.557f, 31.60557f, 1.684245f, 0, 0, 0.7460582f, 0.6658807f, RESPAWN_IMMEDIATELY)) 
     205    if(    !AddObject(BG_RL_OBJECT_DOOR_1, BG_RL_OBJECT_TYPE_DOOR_1, 1293.561, 1601.938, 31.60557, -1.457349, 0, 0, -0.6658813, 0.7460576, RESPAWN_IMMEDIATELY) 
     206        || !AddObject(BG_RL_OBJECT_DOOR_2, BG_RL_OBJECT_TYPE_DOOR_2, 1278.648, 1730.557, 31.60557, 1.684245, 0, 0, 0.7460582, 0.6658807, RESPAWN_IMMEDIATELY) 
     207    // buffs 
     208        || !AddObject(BG_RL_OBJECT_BUFF_1, BG_RL_OBJECT_TYPE_BUFF_1, 1328.719971, 1632.719971, 36.730400, -1.448624, 0, 0, 0.6626201, -0.7489557, 120) 
     209        || !AddObject(BG_RL_OBJECT_BUFF_2, BG_RL_OBJECT_TYPE_BUFF_2, 1243.300049, 1699.170044, 34.872601, -0.06981307, 0, 0, 0.03489945, -0.9993908, 120)) 
    164210    { 
    165211        sLog.outErrorDb("BatteGroundRL: Failed to spawn some object!");