Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
BattlegroundRV.cpp
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#include "Battleground.h"
7#include "BattlegroundRV.h"
8#include "GameObject.h"
9#include "Language.h"
10#include "ObjectAccessor.h"
11#include "Player.h"
12#include "WorldPacket.h"
13
27
29
31{
33 return;
34
35 if (getTimer() < diff)
36 {
37 switch (getState())
38 {
40 // Open fire (only at game start)
42 DoorOpen(i);
45 break;
48 DoorClose(i);
49 // Fire got closed after five seconds, leaves twenty seconds before toggling pillars
52 break;
56 break;
57 }
58 }
59 else
60 setTimer(getTimer() - diff);
61}
62
64
66{
67 // Buff respawn
70 // Elevators
73
76
77 // Should be false at first, TogglePillarCollision will do it.
80}
81
90
101
103{
105 return;
106
107 if (!killer)
108 {
109 SF_LOG_ERROR("bg.battleground", "BattlegroundRV: Killer player not found");
110 return;
111 }
112
113 Battleground::HandleKillPlayer(player, killer);
114
117
119}
120
122{
124 return;
125
126 switch (trigger)
127 {
128 case 5224:
129 case 5226:
130 // fire was removed in 3.2.0
131 case 5473:
132 case 5474:
133 break;
134 default:
135 Battleground::HandleAreaTrigger(player, trigger);
136 break;
137 }
138}
139
146
148{
149 //call parent's class reset
151}
152
154{
155 // elevators
156 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)
157 || !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)
158 // buffs
159 || !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)
160 || !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)
161 // fire
162 || !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)
163 || !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)
164 || !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)
165 || !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)
166 // Gear
167 || !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)
168 || !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)
169 // Pulley
170 || !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)
171 || !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)
172 // Pilars
173 || !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)
174 || !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)
175 || !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)
176 || !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)
177
178 // Pilars Collision
179 || !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)
180 || !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)
181 || !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)
182 || !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)
183
184 )
185 {
186 SF_LOG_ERROR("sql.sql", "BatteGroundRV: Failed to spawn some object!");
187 return false;
188 }
189 return true;
190}
191
192
194{
195 bool apply = GetPillarCollision();
196
197 // Toggle visual pillars, pulley, gear, and collision based on previous state
199 apply ? DoorOpen(i) : DoorClose(i);
200
202 apply ? DoorClose(i) : DoorOpen(i);
203
205 {
206 if (GameObject* gob = GetBgMap()->GetGameObject(BgObjects[i]))
207 {
209 {
211 if (gob->GetGOInfo()->door.startOpen)
213 gob->SetGoState(apply ? _state : GOState::GO_STATE_ACTIVE);
214
215 if (gob->GetGOInfo()->door.startOpen)
216 gob->EnableCollision(!apply); // Forced collision toggle
217 }
218
219 for (BattlegroundPlayerMap::iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)
220 if (Player* player = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(itr->first, 0, HIGHGUID_PLAYER)))
221 gob->SendUpdateToPlayer(player);
222 }
223 }
224
225 SetPillarCollision(!apply);
226}
@ RESPAWN_IMMEDIATELY
@ BG_START_DELAY_1M
@ BG_START_DELAY_30S
@ BG_START_DELAY_NONE
@ BG_START_DELAY_15S
@ STATUS_WAIT_LEAVE
@ STATUS_IN_PROGRESS
@ BG_STARTING_EVENT_THIRD
@ BG_STARTING_EVENT_SECOND
@ BG_STARTING_EVENT_FIRST
@ BG_STARTING_EVENT_FOURTH
@ 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_PILLAR_SWITCH_TIMER
@ BG_RV_CLOSE_FIRE_TIMER
@ BG_RV_WORLD_STATE_H
@ BG_RV_FIRST_TIMER
@ BG_RV_FIRE_TO_PILLAR_TIMER
@ BG_RV_STATE_SWITCH_PILLARS
@ BG_RV_STATE_CLOSE_FIRE
@ BG_RV_WORLD_STATE_A
@ BG_RV_WORLD_STATE
@ BG_RV_STATE_OPEN_FENCES
@ 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
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
std::uint64_t uint64
Definition Define.h:76
GOState
Definition GameObject.h:575
@ GO_STATE_ACTIVE
Definition GameObject.h:576
@ GO_STATE_READY
Definition GameObject.h:577
@ LANG_ARENA_FIFTEEN_SECONDS
Definition Language.h:681
@ LANG_ARENA_HAS_BEGUN
Definition Language.h:682
@ LANG_ARENA_THIRTY_SECONDS
Definition Language.h:680
@ LANG_ARENA_ONE_MINUTE
Definition Language.h:679
#define SF_LOG_ERROR(filterType__,...)
Definition Log.h:143
@ HIGHGUID_PLAYER
uint64 MAKE_NEW_GUID(uint32 l, uint32 e, uint32 h)
@ ALLIANCE
@ HORDE
virtual void AddPlayer(Player *player)
uint32 GetAlivePlayersCountByTeam(uint32 Team) const
virtual void HandleKillPlayer(Player *player, Player *killer)
void DoorOpen(uint32 type)
BattlegroundPlayerMap m_Players
void SpawnBGObject(uint32 type, uint32 respawntime)
virtual void Reset()
BattlegroundMap * GetBgMap() const
void CheckArenaWinConditions()
void DoorClose(uint32 type)
BGObjects BgObjects
void UpdateWorldState(uint32 Field, uint32 Value)
BattlegroundStartTimeIntervals StartDelayTimes[BG_STARTING_EVENT_COUNT]
BattlegroundScoreMap PlayerScores
BattlegroundStatus GetStatus() const
virtual void HandleAreaTrigger(Player *, uint32)
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)
uint32 StartMessageIds[BG_STARTING_EVENT_COUNT]
void setState(uint32 state)
bool SetupBattleground() OVERRIDE
void PostUpdateImpl(uint32 diff) OVERRIDE
Post-update hook.
void StartingEventOpenDoors() OVERRIDE
void HandleKillPlayer(Player *player, Player *killer) OVERRIDE
uint32 getTimer() const
bool GetPillarCollision() const
void FillInitialWorldStates(WorldStateBuilder &builder) OVERRIDE
void Reset() OVERRIDE
void RemovePlayer(Player *player, uint64 guid, uint32 team) OVERRIDE
void AddPlayer(Player *player) OVERRIDE
void StartingEventCloseDoors() OVERRIDE
void SetPillarCollision(bool apply)
void setTimer(uint32 timer)
uint32 getState() const
void HandleAreaTrigger(Player *Source, uint32 Trigger) OVERRIDE
static Player * FindPlayer(uint64)
uint64 GetGUID() const
Definition Object.h:119
void AppendState(uint32 worldstate, uint32 value)