root/trunk/src/game/BattleGroundRL.cpp @ 2

Revision 2, 5.5 kB (checked in by yumileroy, 17 years ago)

[svn] * Proper SVN structure

Original author: Neo2003
Date: 2008-10-02 16:23:55-05:00

Line 
1/*
2 * Copyright (C) 2005-2008 MaNGOS <http://www.mangosproject.org/>
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17 */
18
19#include "Object.h"
20#include "Player.h"
21#include "BattleGround.h"
22#include "BattleGroundRL.h"
23#include "Creature.h"
24#include "ObjectMgr.h"
25#include "MapManager.h"
26#include "Language.h"
27
28BattleGroundRL::BattleGroundRL()
29{
30    m_BgObjects.resize(BG_RL_OBJECT_MAX);
31}
32
33BattleGroundRL::~BattleGroundRL()
34{
35
36}
37
38void BattleGroundRL::Update(time_t diff)
39{
40    BattleGround::Update(diff);
41
42    if (GetStatus() == STATUS_WAIT_JOIN && GetPlayersSize())
43    {
44        ModifyStartDelayTime(diff);
45
46        if (!(m_Events & 0x01))
47        {
48            m_Events |= 0x01;
49
50            for(uint32 i = BG_RL_OBJECT_DOOR_1; i <= BG_RL_OBJECT_DOOR_2; i++)
51                SpawnBGObject(i, RESPAWN_IMMEDIATELY);
52
53            SetStartDelayTime(START_DELAY1);
54            SendMessageToAll(LANG_ARENA_ONE_MINUTE);
55        }
56        // After 30 seconds, warning is signalled
57        else if (GetStartDelayTime() <= START_DELAY2 && !(m_Events & 0x04))
58        {
59            m_Events |= 0x04;
60            SendMessageToAll(LANG_ARENA_THIRTY_SECONDS);
61        }
62        // After 15 seconds, warning is signalled
63        else if (GetStartDelayTime() <= START_DELAY3 && !(m_Events & 0x08))
64        {
65            m_Events |= 0x08;
66            SendMessageToAll(LANG_ARENA_FIFTEEN_SECONDS);
67        }
68        // delay expired (1 minute)
69        else if (GetStartDelayTime() <= 0 && !(m_Events & 0x10))
70        {
71            m_Events |= 0x10;
72
73            for(uint32 i = BG_RL_OBJECT_DOOR_1; i <= BG_RL_OBJECT_DOOR_2; i++)
74                DoorOpen(i);
75
76            SendMessageToAll(LANG_ARENA_BEGUN);
77            SetStatus(STATUS_IN_PROGRESS);
78            SetStartDelayTime(0);
79
80            for(BattleGroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
81                if(Player *plr = objmgr.GetPlayer(itr->first))
82                    plr->RemoveAurasDueToSpell(SPELL_ARENA_PREPARATION);
83        }
84    }
85
86    /*if(GetStatus() == STATUS_IN_PROGRESS)
87    {
88        // update something
89    }*/
90}
91
92void BattleGroundRL::AddPlayer(Player *plr)
93{
94    BattleGround::AddPlayer(plr);
95    //create score and add it to map, default values are set in constructor
96    BattleGroundRLScore* sc = new BattleGroundRLScore;
97
98    m_PlayerScores[plr->GetGUID()] = sc;
99}
100
101void BattleGroundRL::RemovePlayer(Player *plr, uint64 guid)
102{
103
104}
105
106void BattleGroundRL::HandleKillPlayer(Player *player, Player *killer)
107{
108    if(GetStatus() != STATUS_IN_PROGRESS)
109        return;
110
111    if(!killer)
112    {
113        sLog.outError("Killer player not found");
114        return;
115    }
116
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()))
124    {
125        // all opponents killed
126        EndBattleGround(killer->GetTeam());
127    }
128}
129
130void BattleGroundRL::HandleAreaTrigger(Player *Source, uint32 Trigger)
131{
132    // this is wrong way to implement these things. On official it done by gameobject spell cast.
133    if(GetStatus() != STATUS_IN_PROGRESS)
134        return;
135
136    //uint32 SpellId = 0;
137    //uint64 buff_guid = 0;
138    switch(Trigger)
139    {
140        case 4696:                                          // buff trigger?
141        case 4697:                                          // buff trigger?
142            break;
143        default:
144            sLog.outError("WARNING: Unhandled AreaTrigger in Battleground: %u", Trigger);
145            Source->GetSession()->SendAreaTriggerMessage("Warning: Unhandled AreaTrigger in Battleground: %u", Trigger);
146            break;
147    }
148
149    //if(buff_guid)
150    //    HandleTriggerBuff(buff_guid,Source);
151}
152
153void BattleGroundRL::ResetBGSubclass()
154{
155    m_TeamKills[BG_TEAM_ALLIANCE] = 0;
156    m_TeamKills[BG_TEAM_HORDE]    = 0;
157}
158
159bool BattleGroundRL::SetupBattleGround()
160{
161    // 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))
164    {
165        sLog.outErrorDb("BatteGroundRL: Failed to spawn some object!");
166        return false;
167    }
168
169    return true;
170}
171
172/*
173Packet S->C, id 600, SMSG_INIT_WORLD_STATES (706), len 86
1740000: 3C 02 00 00 80 0F 00 00 00 00 00 00 09 00 BA 0B | <...............
1750010: 00 00 01 00 00 00 B9 0B 00 00 02 00 00 00 B8 0B | ................
1760020: 00 00 00 00 00 00 D8 08 00 00 00 00 00 00 D7 08 | ................
1770030: 00 00 00 00 00 00 D6 08 00 00 00 00 00 00 D5 08 | ................
1780040: 00 00 00 00 00 00 D3 08 00 00 00 00 00 00 D4 08 | ................
1790050: 00 00 00 00 00 00                               | ......
180*/
Note: See TracBrowser for help on using the browser.