aboutsummaryrefslogtreecommitdiff
path: root/src/game/BattleGroundDS.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/BattleGroundDS.cpp')
-rw-r--r--src/game/BattleGroundDS.cpp105
1 files changed, 103 insertions, 2 deletions
diff --git a/src/game/BattleGroundDS.cpp b/src/game/BattleGroundDS.cpp
index 0be870be175..9036ef83f93 100644
--- a/src/game/BattleGroundDS.cpp
+++ b/src/game/BattleGroundDS.cpp
@@ -20,9 +20,13 @@
#include "BattleGroundDS.h"
#include "Language.h"
#include "Player.h"
+#include "Object.h"
+#include "ObjectMgr.h"
+#include "WorldPacket.h"
BattleGroundDS::BattleGroundDS()
{
+ m_BgObjects.resize(BG_DS_OBJECT_MAX);
m_StartDelayTimes[BG_STARTING_EVENT_FIRST] = BG_START_DELAY_1M;
m_StartDelayTimes[BG_STARTING_EVENT_SECOND] = BG_START_DELAY_30S;
@@ -43,14 +47,46 @@ BattleGroundDS::~BattleGroundDS()
void BattleGroundDS::Update(uint32 diff)
{
BattleGround::Update(diff);
+ if (getWaterFallTimer() < diff)
+ {
+ if (isWaterFallActive())
+ {
+ setWaterFallTimer(urand(BG_DS_WATERFALL_TIMER_MIN, BG_DS_WATERFALL_TIMER_MAX));
+ for (uint32 i = BG_DS_OBJECT_WATER_1; i <= BG_DS_OBJECT_WATER_2; ++i)
+ SpawnBGObject(i, getWaterFallTimer());
+ setWaterFallActive(false);
+ }
+ else
+ {
+ setWaterFallTimer(BG_DS_WATERFALL_DURATION);
+ for (uint32 i = BG_DS_OBJECT_WATER_1; i <= BG_DS_OBJECT_WATER_2; ++i)
+ SpawnBGObject(i, RESPAWN_IMMEDIATELY);
+ setWaterFallActive(true);
+ }
+ }
+ else
+ setWaterFallTimer(getWaterFallTimer() - diff);
}
void BattleGroundDS::StartingEventCloseDoors()
{
+ for (uint32 i = BG_DS_OBJECT_DOOR_1; i <= BG_DS_OBJECT_DOOR_2; ++i)
+ SpawnBGObject(i, RESPAWN_IMMEDIATELY);
}
void BattleGroundDS::StartingEventOpenDoors()
{
+ for (uint32 i = BG_DS_OBJECT_DOOR_1; i <= BG_DS_OBJECT_DOOR_2; ++i)
+ DoorOpen(i);
+
+ for (uint32 i = BG_DS_OBJECT_BUFF_1; i <= BG_DS_OBJECT_BUFF_2; ++i)
+ SpawnBGObject(i, 60);
+
+ setWaterFallTimer(urand(BG_DS_WATERFALL_TIMER_MIN, BG_DS_WATERFALL_TIMER_MAX));
+ setWaterFallActive(false);
+
+ for (uint32 i = BG_DS_OBJECT_WATER_1; i <= BG_DS_OBJECT_WATER_2; ++i)
+ SpawnBGObject(i, getWaterFallTimer());
}
void BattleGroundDS::AddPlayer(Player *plr)
@@ -60,22 +96,87 @@ void BattleGroundDS::AddPlayer(Player *plr)
BattleGroundDSScore* sc = new BattleGroundDSScore;
m_PlayerScores[plr->GetGUID()] = sc;
+
+ UpdateArenaWorldState();
}
void BattleGroundDS::RemovePlayer(Player * /*plr*/, uint64 /*guid*/)
{
+ if (GetStatus() == STATUS_WAIT_LEAVE)
+ return;
+
+ UpdateArenaWorldState();
+ CheckArenaWinConditions();
}
void BattleGroundDS::HandleKillPlayer(Player* player, Player* killer)
{
- BattleGround::HandleKillPlayer(player, killer);
+ if (GetStatus() != STATUS_IN_PROGRESS)
+ return;
+
+ if (!killer)
+ {
+ sLog.outError("BattleGroundDS: Killer player not found");
+ return;
+ }
+
+ BattleGround::HandleKillPlayer(player,killer);
+
+ UpdateArenaWorldState();
+ CheckArenaWinConditions();
}
-void BattleGroundDS::HandleAreaTrigger(Player * /*Source*/, uint32 /*Trigger*/)
+void BattleGroundDS::HandleAreaTrigger(Player *Source, uint32 Trigger)
{
+ if (GetStatus() != STATUS_IN_PROGRESS)
+ return;
+
+ switch(Trigger)
+ {
+ case 5347:
+ case 5348:
+ break;
+ default:
+ sLog.outError("WARNING: Unhandled AreaTrigger in Battleground: %u", Trigger);
+ Source->GetSession()->SendAreaTriggerMessage("Warning: Unhandled AreaTrigger in Battleground: %u", Trigger);
+ break;
+ }
}
+bool BattleGroundDS::HandlePlayerUnderMap(Player *player)
+{
+ player->TeleportTo(GetMapId(), 1299.046, 784.825, 9.338, 2.422, false);
+ return true;
+}
+
+void BattleGroundDS::FillInitialWorldStates(WorldPacket &data)
+{
+ data << uint32(3610) << uint32(1); // 9 show
+ UpdateArenaWorldState();
+}
+
+void BattleGroundDS::Reset()
+{
+ //call parent's class reset
+ BattleGround::Reset();
+}
+
+
bool BattleGroundDS::SetupBattleGround()
{
+ // gates
+ if (!AddObject(BG_DS_OBJECT_DOOR_1, BG_DS_OBJECT_TYPE_DOOR_1, 1350.95, 817.2, 20.8096, 3.15, 0, 0, 0.99627, 0.0862864, RESPAWN_IMMEDIATELY)
+ || !AddObject(BG_DS_OBJECT_DOOR_2, BG_DS_OBJECT_TYPE_DOOR_2, 1232.65, 764.913, 20.0729, 6.3, 0, 0, 0.0310211, -0.999519, RESPAWN_IMMEDIATELY)
+ // water
+ || !AddObject(BG_DS_OBJECT_WATER_1, BG_DS_OBJECT_TYPE_WATER_1, 1291.56, 790.837, 7.1, 3.14238, 0, 0, 0.694215, -0.719768, 120)
+ || !AddObject(BG_DS_OBJECT_WATER_2, BG_DS_OBJECT_TYPE_WATER_2, 1291.56, 790.837, 7.1, 3.14238, 0, 0, 0.694215, -0.719768, 120)
+ // buffs
+ || !AddObject(BG_DS_OBJECT_BUFF_1, BG_DS_OBJECT_TYPE_BUFF_1, 1291.7, 813.424, 7.11472, 4.64562, 0, 0, 0.730314, -0.683111, 120)
+ || !AddObject(BG_DS_OBJECT_BUFF_2, BG_DS_OBJECT_TYPE_BUFF_2, 1291.7, 768.911, 7.11472, 1.55194, 0, 0, 0.700409, 0.713742, 120))
+ {
+ sLog.outErrorDb("BatteGroundDS: Failed to spawn some object!");
+ return false;
+ }
+
return true;
}