Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
BattlegroundDS.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 "BattlegroundDS.h"
7#include "Creature.h"
8#include "GameObject.h"
9#include "Language.h"
10#include "ObjectAccessor.h"
11#include "Player.h"
12#include "WorldPacket.h"
13
28
30
32{
34 return;
35
37 {
38 if (getPipeKnockBackTimer() < diff)
39 {
41 if (Creature* waterSpout = GetBgMap()->GetCreature(BgCreatures[i]))
42 waterSpout->CastSpell(waterSpout, BG_DS_SPELL_FLUSH, true);
43
46 }
47 else
49 }
50
51 if (getWaterFallStatus() == BG_DS_WATERFALL_STATUS_ON) // Repeat knockback while the waterfall still active
52 {
53 if (getWaterFallKnockbackTimer() < diff)
54 {
55 if (Creature* waterSpout = GetBgMap()->GetCreature(BgCreatures[BG_DS_NPC_WATERFALL_KNOCKBACK]))
56 waterSpout->CastSpell(waterSpout, BG_DS_SPELL_WATER_SPOUT, true);
57
59 }
60 else
62 }
63
64 if (getWaterFallTimer() < diff)
65 {
66 if (getWaterFallStatus() == BG_DS_WATERFALL_STATUS_OFF) // Add the water
67 {
71 }
72 else if (getWaterFallStatus() == BG_DS_WATERFALL_STATUS_WARNING) // Active collision and start knockback timer
73 {
74 if (GameObject* gob = GetBgMap()->GetGameObject(BgObjects[BG_DS_OBJECT_WATER_1]))
75 gob->SetGoState(GOState::GO_STATE_READY);
76
80 }
81 else //if (getWaterFallStatus() == BG_DS_WATERFALL_STATUS_ON) // Remove collision and water
82 {
83 // turn off collision
84 if (GameObject* gob = GetBgMap()->GetGameObject(BgObjects[BG_DS_OBJECT_WATER_1]))
85 gob->SetGoState(GOState::GO_STATE_ACTIVE);
86
90 }
91 }
92 else
94}
95
101
103{
105 DoorOpen(i);
106
108 SpawnBGObject(i, 60);
109
112
115
118
119 // Turn off collision
120 if (GameObject* gob = GetBgMap()->GetGameObject(BgObjects[BG_DS_OBJECT_WATER_1]))
121 gob->SetGoState(GOState::GO_STATE_ACTIVE);
122
123 // Remove effects of Demonic Circle Summon
124 for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
125 if (Player* player = ObjectAccessor::FindPlayer(itr->first))
126 if (player->HasAura(48018))
127 player->RemoveAurasDueToSpell(48018);
128}
129
136
137void BattlegroundDS::RemovePlayer(Player* /*player*/, uint64 /*guid*/, uint32 /*team*/)
138{
140 return;
141
144}
145
147{
149 return;
150
151 if (!killer)
152 {
153 SF_LOG_ERROR("bg.battleground", "BattlegroundDS: Killer player not found");
154 return;
155 }
156
157 Battleground::HandleKillPlayer(player, killer);
158
161}
162
164{
166 return;
167
168 switch (trigger)
169 {
170 case 5347:
171 case 5348:
172 // Remove effects of Demonic Circle Summon
173 if (player->HasAura(48018))
174 player->RemoveAurasDueToSpell(48018);
175
176 // Someone has get back into the pipes and the knockback has already been performed,
177 // so we reset the knockback count for kicking the player again into the arena.
180 break;
181 default:
182 Battleground::HandleAreaTrigger(player, trigger);
183 break;
184 }
185}
186
188{
189 builder.AppendState(3610, 1); // 9 show
191}
192
194{
195 //call parent's class reset
197}
198
200{
201 // gates
202 if (!AddObject(BG_DS_OBJECT_DOOR_1, BG_DS_OBJECT_TYPE_DOOR_1, 1350.95f, 817.2f, 20.8096f, 3.15f, 0, 0, 0.99627f, 0.0862864f, RESPAWN_IMMEDIATELY)
203 || !AddObject(BG_DS_OBJECT_DOOR_2, BG_DS_OBJECT_TYPE_DOOR_2, 1232.65f, 764.913f, 20.0729f, 6.3f, 0, 0, 0.0310211f, -0.999519f, RESPAWN_IMMEDIATELY)
204 // water
205 || !AddObject(BG_DS_OBJECT_WATER_1, BG_DS_OBJECT_TYPE_WATER_1, 1291.56f, 790.837f, 7.1f, 3.14238f, 0, 0, 0.694215f, -0.719768f, 120)
206 || !AddObject(BG_DS_OBJECT_WATER_2, BG_DS_OBJECT_TYPE_WATER_2, 1291.56f, 790.837f, 7.1f, 3.14238f, 0, 0, 0.694215f, -0.719768f, 120)
207 // buffs
208 || !AddObject(BG_DS_OBJECT_BUFF_1, BG_DS_OBJECT_TYPE_BUFF_1, 1291.7f, 813.424f, 7.11472f, 4.64562f, 0, 0, 0.730314f, -0.683111f, 120)
209 || !AddObject(BG_DS_OBJECT_BUFF_2, BG_DS_OBJECT_TYPE_BUFF_2, 1291.7f, 768.911f, 7.11472f, 1.55194f, 0, 0, 0.700409f, 0.713742f, 120)
210 // knockback creatures
211 || !AddCreature(BG_DS_NPC_TYPE_WATER_SPOUT, BG_DS_NPC_WATERFALL_KNOCKBACK, 0, 1292.587f, 790.2205f, 7.19796f, 3.054326f, RESPAWN_IMMEDIATELY)
212 || !AddCreature(BG_DS_NPC_TYPE_WATER_SPOUT, BG_DS_NPC_PIPE_KNOCKBACK_1, 0, 1369.977f, 817.2882f, 16.08718f, 3.106686f, RESPAWN_IMMEDIATELY)
213 || !AddCreature(BG_DS_NPC_TYPE_WATER_SPOUT, BG_DS_NPC_PIPE_KNOCKBACK_2, 0, 1212.833f, 765.3871f, 16.09484f, 0.0f, RESPAWN_IMMEDIATELY))
214 {
215 SF_LOG_ERROR("sql.sql", "BatteGroundDS: Failed to spawn some object!");
216 return false;
217 }
218
219 return true;
220}
@ 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_DS_NPC_TYPE_WATER_SPOUT
@ BG_DS_SPELL_FLUSH
@ BG_DS_SPELL_WATER_SPOUT
@ BG_DS_OBJECT_DOOR_2
@ BG_DS_OBJECT_WATER_2
@ BG_DS_OBJECT_MAX
@ BG_DS_OBJECT_DOOR_1
@ BG_DS_OBJECT_BUFF_1
@ BG_DS_OBJECT_BUFF_2
@ BG_DS_OBJECT_WATER_1
@ BG_DS_WATERFALL_WARNING_DURATION
@ BG_DS_WATERFALL_DURATION
@ BG_DS_WATERFALL_TIMER_MAX
@ BG_DS_WATERFALL_STATUS_ON
@ BG_DS_PIPE_KNOCKBACK_DELAY
@ BG_DS_WATERFALL_TIMER_MIN
@ BG_DS_WATERFALL_STATUS_OFF
@ BG_DS_WATERFALL_STATUS_WARNING
@ BG_DS_PIPE_KNOCKBACK_FIRST_DELAY
@ BG_DS_WATERFALL_KNOCKBACK_TIMER
@ BG_DS_PIPE_KNOCKBACK_TOTAL_COUNT
@ BG_DS_NPC_PIPE_KNOCKBACK_2
@ BG_DS_NPC_PIPE_KNOCKBACK_1
@ BG_DS_NPC_WATERFALL_KNOCKBACK
@ BG_DS_NPC_MAX
@ BG_DS_OBJECT_TYPE_BUFF_1
@ BG_DS_OBJECT_TYPE_DOOR_2
@ BG_DS_OBJECT_TYPE_DOOR_1
@ BG_DS_OBJECT_TYPE_WATER_2
@ BG_DS_OBJECT_TYPE_WATER_1
@ BG_DS_OBJECT_TYPE_BUFF_2
std::uint32_t uint32
Definition Define.h:77
std::uint64_t uint64
Definition Define.h:76
@ 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
void setWaterFallStatus(uint8 status)
void setPipeKnockBackTimer(uint32 timer)
void AddPlayer(Player *player) OVERRIDE
void PostUpdateImpl(uint32 diff) OVERRIDE
Post-update hook.
uint32 getWaterFallStatus() const
void FillInitialWorldStates(WorldStateBuilder &builder) OVERRIDE
void setPipeKnockBackCount(uint8 count)
bool SetupBattleground() OVERRIDE
uint32 getWaterFallKnockbackTimer() const
void RemovePlayer(Player *player, uint64 guid, uint32 team) OVERRIDE
void HandleKillPlayer(Player *player, Player *killer) OVERRIDE
void setWaterFallKnockbackTimer(uint32 timer)
void setWaterFallTimer(uint32 timer)
void HandleAreaTrigger(Player *Source, uint32 Trigger) OVERRIDE
uint32 getWaterFallTimer() const
void Reset() OVERRIDE
void StartingEventOpenDoors() OVERRIDE
uint8 getPipeKnockBackCount() const
uint32 getPipeKnockBackTimer() const
void StartingEventCloseDoors() OVERRIDE
virtual void AddPlayer(Player *player)
virtual void HandleKillPlayer(Player *player, Player *killer)
void DoorOpen(uint32 type)
void SpawnBGObject(uint32 type, uint32 respawntime)
virtual void Reset()
BattlegroundMap * GetBgMap() const
void CheckArenaWinConditions()
void DoorClose(uint32 type)
BGObjects BgObjects
BattlegroundStartTimeIntervals StartDelayTimes[BG_STARTING_EVENT_COUNT]
BattlegroundPlayerMap const & GetPlayers() const
BattlegroundScoreMap PlayerScores
BattlegroundStatus GetStatus() const
virtual void HandleAreaTrigger(Player *, uint32)
BGCreatures BgCreatures
void UpdateArenaWorldState()
Creature * AddCreature(uint32 entry, uint32 type, uint32 teamval, float x, float y, float z, float o, uint32 respawntime=0)
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]
static Player * FindPlayer(uint64)
uint64 GetGUID() const
Definition Object.h:119
void RemoveAurasDueToSpell(uint32 spellId, uint64 casterGUID=0, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
bool HasAura(uint32 spellId, uint64 casterGUID=0, uint64 itemCasterGUID=0, uint32 reqEffMask=0) const
void AppendState(uint32 worldstate, uint32 value)