TrinityCore
BattlegroundRV.cpp
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#include "BattlegroundRV.h"
19#include "GameObject.h"
20#include "Log.h"
21#include "ObjectAccessor.h"
22#include "Player.h"
23
24BattlegroundRV::BattlegroundRV(BattlegroundTemplate const* battlegroundTemplate) : Arena(battlegroundTemplate)
25{
27
28 _timer = 0;
29 _state = 0;
30 _pillarCollision = false;
31}
32
34{
36 return;
37
38 if (_timer < diff)
39 {
40 switch (_state)
41 {
43 // Open fire (only at game start)
45 DoorOpen(i);
48 break;
51 DoorClose(i);
52 // Fire got closed after five seconds, leaves twenty seconds before toggling pillars
55 break;
59 break;
60 }
61 }
62 else
63 _timer -= diff;
64}
65
67{
68 // Buff respawn
71 // Elevators
74
77
78 // Should be false at first, TogglePillarCollision will do it.
79 _pillarCollision = true;
81}
82
84{
85 // elevators
86 if (!AddObject(BG_RV_OBJECT_ELEVATOR_1, BG_RV_OBJECT_TYPE_ELEVATOR_1, 763.536377f, -294.535767f, 0.505383f, 3.141593f, 0, 0, 0, RESPAWN_IMMEDIATELY)
87 || !AddObject(BG_RV_OBJECT_ELEVATOR_2, BG_RV_OBJECT_TYPE_ELEVATOR_2, 763.506348f, -273.873352f, 0.505383f, 0.000000f, 0, 0, 0, RESPAWN_IMMEDIATELY)
88 // buffs
89 || !AddObject(BG_RV_OBJECT_BUFF_1, BG_RV_OBJECT_TYPE_BUFF_1, 735.551819f, -284.794678f, 28.276682f, 0.034906f, 0, 0, 0, RESPAWN_IMMEDIATELY)
90 || !AddObject(BG_RV_OBJECT_BUFF_2, BG_RV_OBJECT_TYPE_BUFF_2, 791.224487f, -284.794464f, 28.276682f, 2.600535f, 0, 0, 0, RESPAWN_IMMEDIATELY)
91 // fire
92 || !AddObject(BG_RV_OBJECT_FIRE_1, BG_RV_OBJECT_TYPE_FIRE_1, 743.543457f, -283.799469f, 28.286655f, 3.141593f, 0, 0, 0, RESPAWN_IMMEDIATELY)
93 || !AddObject(BG_RV_OBJECT_FIRE_2, BG_RV_OBJECT_TYPE_FIRE_2, 782.971802f, -283.799469f, 28.286655f, 3.141593f, 0, 0, 0, RESPAWN_IMMEDIATELY)
94 || !AddObject(BG_RV_OBJECT_FIREDOOR_1, BG_RV_OBJECT_TYPE_FIREDOOR_1, 743.711060f, -284.099609f, 27.542587f, 3.141593f, 0, 0, 0, RESPAWN_IMMEDIATELY)
95 || !AddObject(BG_RV_OBJECT_FIREDOOR_2, BG_RV_OBJECT_TYPE_FIREDOOR_2, 783.221252f, -284.133362f, 27.535686f, 0.000000f, 0, 0, 0, RESPAWN_IMMEDIATELY)
96 // Gear
97 || !AddObject(BG_RV_OBJECT_GEAR_1, BG_RV_OBJECT_TYPE_GEAR_1, 763.664551f, -261.872986f, 26.686588f, 0.000000f, 0, 0, 0, RESPAWN_IMMEDIATELY)
98 || !AddObject(BG_RV_OBJECT_GEAR_2, BG_RV_OBJECT_TYPE_GEAR_2, 763.578979f, -306.146149f, 26.665222f, 3.141593f, 0, 0, 0, RESPAWN_IMMEDIATELY)
99 // Pulley
100 || !AddObject(BG_RV_OBJECT_PULLEY_1, BG_RV_OBJECT_TYPE_PULLEY_1, 700.722290f, -283.990662f, 39.517582f, 3.141593f, 0, 0, 0, RESPAWN_IMMEDIATELY)
101 || !AddObject(BG_RV_OBJECT_PULLEY_2, BG_RV_OBJECT_TYPE_PULLEY_2, 826.303833f, -283.996429f, 39.517582f, 0.000000f, 0, 0, 0, RESPAWN_IMMEDIATELY)
102 // Pilars
103 || !AddObject(BG_RV_OBJECT_PILAR_1, BG_RV_OBJECT_TYPE_PILAR_1, 763.632385f, -306.162384f, 25.909504f, 3.141593f, 0, 0, 0, RESPAWN_IMMEDIATELY)
104 || !AddObject(BG_RV_OBJECT_PILAR_2, BG_RV_OBJECT_TYPE_PILAR_2, 723.644287f, -284.493256f, 24.648525f, 3.141593f, 0, 0, 0, RESPAWN_IMMEDIATELY)
105 || !AddObject(BG_RV_OBJECT_PILAR_3, BG_RV_OBJECT_TYPE_PILAR_3, 763.611145f, -261.856750f, 25.909504f, 0.000000f, 0, 0, 0, RESPAWN_IMMEDIATELY)
106 || !AddObject(BG_RV_OBJECT_PILAR_4, BG_RV_OBJECT_TYPE_PILAR_4, 802.211609f, -284.493256f, 24.648525f, 0.000000f, 0, 0, 0, RESPAWN_IMMEDIATELY)
107
108 // Pilars Collision
109 || !AddObject(BG_RV_OBJECT_PILAR_COLLISION_1, BG_RV_OBJECT_TYPE_PILAR_COLLISION_1, 763.632385f, -306.162384f, 30.639660f, 3.141593f, 0, 0, 0, RESPAWN_IMMEDIATELY)
110 || !AddObject(BG_RV_OBJECT_PILAR_COLLISION_2, BG_RV_OBJECT_TYPE_PILAR_COLLISION_2, 723.644287f, -284.493256f, 32.382710f, 0.000000f, 0, 0, 0, RESPAWN_IMMEDIATELY)
111 || !AddObject(BG_RV_OBJECT_PILAR_COLLISION_3, BG_RV_OBJECT_TYPE_PILAR_COLLISION_3, 763.611145f, -261.856750f, 30.639660f, 0.000000f, 0, 0, 0, RESPAWN_IMMEDIATELY)
112 || !AddObject(BG_RV_OBJECT_PILAR_COLLISION_4, BG_RV_OBJECT_TYPE_PILAR_COLLISION_4, 802.211609f, -284.493256f, 32.382710f, 3.141593f, 0, 0, 0, RESPAWN_IMMEDIATELY))
113 {
114 TC_LOG_ERROR("sql.sql", "BatteGroundRV: Failed to spawn some object!");
115 return false;
116 }
117 return true;
118}
119
121{
122 // Toggle visual pillars, pulley, gear, and collision based on previous state
125
128
130 {
131 if (GameObject* go = GetBGObject(i))
132 {
134 {
135 GOState state = ((go->GetGOInfo()->door.startOpen != 0) == _pillarCollision) ? GO_STATE_ACTIVE : GO_STATE_READY;
136 go->SetGoState(state);
137 }
138
139 for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
140 if (Player* player = ObjectAccessor::FindPlayer(itr->first))
141 go->SendUpdateToPlayer(player);
142 }
143 }
144
146}
@ BG_RV_OBJECT_PILAR_1
@ BG_RV_OBJECT_PULLEY_2
@ BG_RV_OBJECT_PILAR_COLLISION_1
@ BG_RV_OBJECT_PILAR_4
@ BG_RV_OBJECT_ELEVATOR_1
@ BG_RV_OBJECT_MAX
@ BG_RV_OBJECT_PILAR_COLLISION_3
@ BG_RV_OBJECT_FIRE_2
@ BG_RV_OBJECT_GEAR_1
@ BG_RV_OBJECT_ELEVATOR_2
@ BG_RV_OBJECT_FIREDOOR_2
@ BG_RV_OBJECT_FIREDOOR_1
@ BG_RV_OBJECT_PILAR_COLLISION_4
@ BG_RV_OBJECT_PULLEY_1
@ BG_RV_OBJECT_GEAR_2
@ BG_RV_OBJECT_PILAR_2
@ BG_RV_OBJECT_PILAR_COLLISION_2
@ BG_RV_OBJECT_BUFF_1
@ BG_RV_OBJECT_BUFF_2
@ BG_RV_OBJECT_FIRE_1
@ BG_RV_OBJECT_PILAR_3
@ BG_RV_OBJECT_TYPE_PILAR_2
@ BG_RV_OBJECT_TYPE_PILAR_1
@ BG_RV_OBJECT_TYPE_PILAR_4
@ BG_RV_OBJECT_TYPE_ELEVATOR_1
@ BG_RV_OBJECT_TYPE_BUFF_1
@ BG_RV_OBJECT_TYPE_BUFF_2
@ BG_RV_OBJECT_TYPE_PULLEY_2
@ BG_RV_OBJECT_TYPE_PILAR_COLLISION_2
@ BG_RV_OBJECT_TYPE_GEAR_2
@ BG_RV_OBJECT_TYPE_PILAR_COLLISION_3
@ BG_RV_OBJECT_TYPE_FIREDOOR_2
@ BG_RV_OBJECT_TYPE_PILAR_COLLISION_4
@ BG_RV_OBJECT_TYPE_PILAR_COLLISION_1
@ BG_RV_OBJECT_TYPE_PILAR_3
@ BG_RV_OBJECT_TYPE_FIREDOOR_1
@ BG_RV_OBJECT_TYPE_FIRE_2
@ BG_RV_OBJECT_TYPE_ELEVATOR_2
@ BG_RV_OBJECT_TYPE_GEAR_1
@ BG_RV_OBJECT_TYPE_PULLEY_1
@ BG_RV_OBJECT_TYPE_FIRE_1
@ BG_RV_PILLAR_SWITCH_TIMER
@ BG_RV_CLOSE_FIRE_TIMER
@ BG_RV_FIRST_TIMER
@ BG_RV_FIRE_TO_PILLAR_TIMER
@ BG_RV_STATE_SWITCH_PILLARS
@ BG_RV_STATE_CLOSE_FIRE
@ BG_RV_STATE_OPEN_FENCES
@ RESPAWN_IMMEDIATELY
Definition: Battleground.h:137
@ STATUS_IN_PROGRESS
Definition: Battleground.h:167
uint8_t uint8
Definition: Define.h:144
uint32_t uint32
Definition: Define.h:142
#define TC_LOG_ERROR(filterType__,...)
Definition: Log.h:165
GOState
@ GO_STATE_READY
@ GO_STATE_ACTIVE
Definition: Arena.h:57
void StartingEventOpenDoors() override
void TogglePillarCollision()
BattlegroundRV(BattlegroundTemplate const *battlegroundTemplate)
void PostUpdateImpl(uint32 diff) override
Post-update hook.
bool SetupBattleground() override
void DoorOpen(uint32 type)
void SpawnBGObject(uint32 type, uint32 respawntime)
virtual bool AddObject(uint32 type, uint32 entry, float x, float y, float z, float o, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime=0, GOState goState=GO_STATE_READY)
GuidVector BgObjects
Definition: Battleground.h:443
void DoorClose(uint32 type)
BattlegroundPlayerMap const & GetPlayers() const
Definition: Battleground.h:334
BattlegroundStatus GetStatus() const
Definition: Battleground.h:284
GameObject * GetBGObject(uint32 type, bool logError=true)
TC_GAME_API Player * FindPlayer(ObjectGuid const &)