aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2022-07-18 20:21:58 +0200
committerShauren <shauren.trinity@gmail.com>2022-07-18 20:21:58 +0200
commitc42e52f1719f3d5a59d51e4a32e266852395cf7e (patch)
tree44d133818817f7cfb838b015c6851a93929799da /src/server/scripts
parentcd4e0c592933295fe224d1fb3db2cb5cda83f21f (diff)
Core/OutdoorPvP: Move Halaa spawns to db using worldstate conditions
Diffstat (limited to 'src/server/scripts')
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp419
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPNA.h47
2 files changed, 121 insertions, 345 deletions
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp
index a0602de0fb0..a719a60e84c 100644
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp
@@ -16,8 +16,10 @@
*/
#include "OutdoorPvPNA.h"
+#include "CellImpl.h"
#include "Creature.h"
#include "GameObject.h"
+#include "GridNotifiersImpl.h"
#include "Map.h"
#include "ObjectMgr.h"
#include "Player.h"
@@ -35,98 +37,25 @@ uint32 const FLIGHT_NODES_NUM = 4;
uint32 const FlightPathStartNodes[FLIGHT_NODES_NUM] = { 103, 105, 107, 109 };
uint32 const FlightPathEndNodes[FLIGHT_NODES_NUM] = { 104, 106, 108, 110 };
-// spawned when the alliance is attacking, horde is in control
-go_type const HordeControlGOs[NA_CONTROL_GO_NUM] =
-{
- { 182267, 530, { -1815.8000f, 8036.5100f, -26.2354f, -2.897250f }, { 0.0f, 0.0f, 0.992546f, -0.121869f } }, //ALLY_ROOST_SOUTH
- { 182280, 530, { -1507.9500f, 8132.1000f, -19.5585f, -1.343900f }, { 0.0f, 0.0f, 0.622515f, -0.782608f } }, //ALLY_ROOST_WEST
- { 182281, 530, { -1384.5200f, 7779.3300f, -11.1663f, -0.575959f }, { 0.0f, 0.0f, 0.284015f, -0.958820f } }, //ALLY_ROOST_NORTH
- { 182282, 530, { -1650.1100f, 7732.5600f, -15.4505f, -2.809980f }, { 0.0f, 0.0f, 0.986286f, -0.165048f } }, //ALLY_ROOST_EAST
-
- { 182222, 530, { -1825.4022f, 8039.2602f, -26.0800f, -2.897250f }, { 0.0f, 0.0f, 0.992546f, -0.121869f } }, //HORDE_BOMB_WAGON_SOUTH
- { 182272, 530, { -1515.3700f, 8136.9100f, -20.4200f, -1.343900f }, { 0.0f, 0.0f, 0.622515f, -0.782608f } }, //HORDE_BOMB_WAGON_WEST
- { 182273, 530, { -1377.9500f, 7773.4400f, -10.3100f, -0.575959f }, { 0.0f, 0.0f, 0.284015f, -0.958820f } }, //HORDE_BOMB_WAGON_NORTH
- { 182274, 530, { -1659.8700f, 7733.1500f, -15.7500f, -2.809980f }, { 0.0f, 0.0f, 0.986286f, -0.165048f } }, //HORDE_BOMB_WAGON_EAST
-
- { 182266, 530, { -1815.8000f, 8036.5100f, -26.2354f, -2.897250f }, { 0.0f, 0.0f, 0.992546f, -0.121869f } }, //DESTROYED_ALLY_ROOST_SOUTH
- { 182275, 530, { -1507.9500f, 8132.1000f, -19.5585f, -1.343900f }, { 0.0f, 0.0f, 0.622515f, -0.782608f } }, //DESTROYED_ALLY_ROOST_WEST
- { 182276, 530, { -1384.5200f, 7779.3300f, -11.1663f, -0.575959f }, { 0.0f, 0.0f, 0.284015f, -0.958820f } }, //DESTROYED_ALLY_ROOST_NORTH
- { 182277, 530, { -1650.1100f, 7732.5600f, -15.4505f, -2.809980f }, { 0.0f, 0.0f, 0.986286f, -0.165048f } } //DESTROYED_ALLY_ROOST_EAST
-};
-
-// spawned when the horde is attacking, alliance is in control
-go_type const AllianceControlGOs[NA_CONTROL_GO_NUM] =
-{
- { 182301, 530, { -1815.8000f, 8036.5100f, -26.2354f, -2.897250f }, { 0.0f, 0.0f, 0.992546f, -0.121869f } }, //HORDE_ROOST_SOUTH
- { 182302, 530, { -1507.9500f, 8132.1000f, -19.5585f, -1.343900f }, { 0.0f, 0.0f, 0.622515f, -0.782608f } }, //HORDE_ROOST_WEST
- { 182303, 530, { -1384.5200f, 7779.3300f, -11.1663f, -0.575959f }, { 0.0f, 0.0f, 0.284015f, -0.958820f } }, //HORDE_ROOST_NORTH
- { 182304, 530, { -1650.1100f, 7732.5600f, -15.4505f, -2.809980f }, { 0.0f, 0.0f, 0.986286f, -0.165048f } }, //HORDE_ROOST_EAST
-
- { 182305, 530, { -1825.4022f, 8039.2602f, -26.0800f, -2.897250f }, { 0.0f, 0.0f, 0.992546f, -0.121869f } }, //ALLY_BOMB_WAGON_SOUTH
- { 182306, 530, { -1515.3700f, 8136.9100f, -20.4200f, -1.343900f }, { 0.0f, 0.0f, 0.622515f, -0.782608f } }, //ALLY_BOMB_WAGON_WEST
- { 182307, 530, { -1377.9500f, 7773.4400f, -10.3100f, -0.575959f }, { 0.0f, 0.0f, 0.284015f, -0.958820f } }, //ALLY_BOMB_WAGON_NORTH
- { 182308, 530, { -1659.8700f, 7733.1500f, -15.7500f, -2.809980f }, { 0.0f, 0.0f, 0.986286f, -0.165048f } }, //ALLY_BOMB_WAGON_EAST
-
- { 182297, 530, { -1815.8000f, 8036.5100f, -26.2354f, -2.897250f }, { 0.0f, 0.0f, 0.992546f, -0.121869f } }, //DESTROYED_HORDE_ROOST_SOUTH
- { 182298, 530, { -1507.9500f, 8132.1000f, -19.5585f, -1.343900f }, { 0.0f, 0.0f, 0.622515f, -0.782608f } }, //DESTROYED_HORDE_ROOST_WEST
- { 182299, 530, { -1384.5200f, 7779.3300f, -11.1663f, -0.575959f }, { 0.0f, 0.0f, 0.284015f, -0.958820f } }, //DESTROYED_HORDE_ROOST_NORTH
- { 182300, 530, { -1650.1100f, 7732.5600f, -15.4505f, -2.809980f }, { 0.0f, 0.0f, 0.986286f, -0.165048f } } //DESTROYED_HORDE_ROOST_EAST
-};
-
-creature_type const HordeControlNPCs[NA_CONTROL_NPC_NUM] =
-{
- { 18816, 530, { -1523.92f, 7951.76f, -17.6942f, 3.51172f } },
- { 18821, 530, { -1527.75f, 7952.46f, -17.6948f, 3.99317f } },
- { 21474, 530, { -1520.14f, 7927.11f, -20.2527f, 3.39389f } },
- { 21484, 530, { -1524.84f, 7930.34f, -20.1820f, 3.64050f } },
- { 21483, 530, { -1570.01f, 7993.80f, -22.4505f, 5.02655f } },
- { 18192, 530, { -1654.06f, 8000.46f, -26.5900f, 3.37000f } },
- { 18192, 530, { -1487.18f, 7899.10f, -19.5300f, 0.95400f } },
- { 18192, 530, { -1480.88f, 7908.79f, -19.1900f, 4.48500f } },
- { 18192, 530, { -1540.56f, 7995.44f, -20.4500f, 0.94700f } },
- { 18192, 530, { -1546.95f, 8000.85f, -20.7200f, 6.03500f } },
- { 18192, 530, { -1595.31f, 7860.53f, -21.5100f, 3.74700f } },
- { 18192, 530, { -1642.31f, 7995.59f, -25.8000f, 3.31700f } },
- { 18192, 530, { -1545.46f, 7995.35f, -20.6300f, 1.09400f } },
- { 18192, 530, { -1487.58f, 7907.99f, -19.2700f, 5.56700f } },
- { 18192, 530, { -1651.54f, 7988.56f, -26.5289f, 2.98451f } },
- { 18192, 530, { -1602.46f, 7866.43f, -22.1177f, 4.74729f } },
- { 18192, 530, { -1591.22f, 7875.29f, -22.3536f, 4.34587f } },
- { 18192, 530, { -1550.60f, 7944.45f, -21.6300f, 3.55900f } },
- { 18192, 530, { -1545.57f, 7935.83f, -21.1300f, 3.44800f } },
- { 18192, 530, { -1550.86f, 7937.56f, -21.7000f, 3.80100f } }
-};
-
-creature_type const AllianceControlNPCs[NA_CONTROL_NPC_NUM] =
-{
- { 18817, 530, { -1591.18f, 8020.39f, -22.2042f, 4.59022f } },
- { 18822, 530, { -1588.00f, 8019.00f, -22.2042f, 4.06662f } },
- { 21485, 530, { -1521.93f, 7927.37f, -20.2299f, 3.24631f } },
- { 21487, 530, { -1540.33f, 7971.95f, -20.7186f, 3.07178f } },
- { 21488, 530, { -1570.01f, 7993.80f, -22.4505f, 5.02655f } },
- { 18256, 530, { -1654.06f, 8000.46f, -26.5900f, 3.37000f } },
- { 18256, 530, { -1487.18f, 7899.10f, -19.5300f, 0.95400f } },
- { 18256, 530, { -1480.88f, 7908.79f, -19.1900f, 4.48500f } },
- { 18256, 530, { -1540.56f, 7995.44f, -20.4500f, 0.94700f } },
- { 18256, 530, { -1546.95f, 8000.85f, -20.7200f, 6.03500f } },
- { 18256, 530, { -1595.31f, 7860.53f, -21.5100f, 3.74700f } },
- { 18256, 530, { -1642.31f, 7995.59f, -25.8000f, 3.31700f } },
- { 18256, 530, { -1545.46f, 7995.35f, -20.6300f, 1.09400f } },
- { 18256, 530, { -1487.58f, 7907.99f, -19.2700f, 5.56700f } },
- { 18256, 530, { -1651.54f, 7988.56f, -26.5289f, 2.98451f } },
- { 18256, 530, { -1602.46f, 7866.43f, -22.1177f, 4.74729f } },
- { 18256, 530, { -1591.22f, 7875.29f, -22.3536f, 4.34587f } },
- { 18256, 530, { -1603.75f, 8000.36f, -24.1800f, 4.51600f } },
- { 18256, 530, { -1585.73f, 7994.68f, -23.2900f, 4.43900f } },
- { 18256, 530, { -1595.50f, 7991.27f, -23.5300f, 4.73800f } }
-};
-
OutdoorPvPNA::OutdoorPvPNA()
{
m_TypeId = OUTDOOR_PVP_NA;
m_obj = nullptr;
}
+void OutdoorPvPNA::OnGameObjectCreate(GameObject* go)
+{
+ switch (go->GetEntry())
+ {
+ case 182210:
+ m_obj->m_capturePointSpawnId = go->GetSpawnId();
+ AddCapturePoint(m_obj);
+ break;
+ }
+
+ OutdoorPvP::OnGameObjectCreate(go);
+}
+
void OutdoorPvPNA::HandleKillImpl(Player* player, Unit* killed)
{
if (killed->GetTypeId() == TYPEID_PLAYER && player->GetTeam() != killed->ToPlayer()->GetTeam())
@@ -139,95 +68,21 @@ void OutdoorPvPNA::HandleKillImpl(Player* player, Unit* killed)
}
}
-uint32 OPvPCapturePointNA::GetAliveGuardsCount()
+uint32 OPvPCapturePointNA::GetAliveGuardsCount() const
{
- uint32 cnt = 0;
- for (std::map<uint32, ObjectGuid::LowType>::iterator itr = m_Creatures.begin(); itr != m_Creatures.end(); ++itr)
- {
- switch (itr->first)
- {
- case NA_NPC_GUARD_01:
- case NA_NPC_GUARD_02:
- case NA_NPC_GUARD_03:
- case NA_NPC_GUARD_04:
- case NA_NPC_GUARD_05:
- case NA_NPC_GUARD_06:
- case NA_NPC_GUARD_07:
- case NA_NPC_GUARD_08:
- case NA_NPC_GUARD_09:
- case NA_NPC_GUARD_10:
- case NA_NPC_GUARD_11:
- case NA_NPC_GUARD_12:
- case NA_NPC_GUARD_13:
- case NA_NPC_GUARD_14:
- case NA_NPC_GUARD_15:
- {
- auto bounds = m_PvP->GetMap()->GetCreatureBySpawnIdStore().equal_range(itr->second);
- for (auto itr2 = bounds.first; itr2 != bounds.second; ++itr2)
- if (itr2->second->IsAlive())
- ++cnt;
- break;
- }
- default:
- break;
- }
- }
- return cnt;
-}
-
-uint32 OPvPCapturePointNA::GetControllingFaction() const
-{
- return m_ControllingFaction;
-}
-
-void OPvPCapturePointNA::SpawnNPCsForTeam(uint32 team)
-{
- creature_type const* creatures = nullptr;
- if (team == ALLIANCE)
- creatures = AllianceControlNPCs;
- else if (team == HORDE)
- creatures = HordeControlNPCs;
- else
- return;
- for (int i = 0; i < NA_CONTROL_NPC_NUM; ++i)
- AddCreature(i, creatures[i].entry, creatures[i].map, creatures[i].pos, OutdoorPvP::GetTeamIdByTeam(team), 1000000);
-}
+ Position searchCenter = { -1572.57f, 7945.3f, -22.475f, 2.05949f };
-void OPvPCapturePointNA::DeSpawnNPCs()
-{
- for (int i = 0; i < NA_CONTROL_NPC_NUM; ++i)
- DelCreature(i);
-}
+ std::vector<WorldObject*> guards;
+ Trinity::ObjectEntryAndPrivateOwnerIfExistsCheck check(ObjectGuid::Empty, GetControllingFaction() == HORDE ? 18192 : 18256);
+ Trinity::WorldObjectListSearcher<Trinity::ObjectEntryAndPrivateOwnerIfExistsCheck> searcher(nullptr, guards, check, GRID_MAP_TYPE_MASK_CREATURE);
+ Cell::VisitGridObjects(searchCenter.GetPositionX(), searchCenter.GetPositionY(), m_PvP->GetMap(), searcher, SIZE_OF_GRIDS);
-void OPvPCapturePointNA::SpawnGOsForTeam(uint32 team)
-{
- go_type const* gos = nullptr;
- if (team == ALLIANCE)
- gos = AllianceControlGOs;
- else if (team == HORDE)
- gos = HordeControlGOs;
- else
- return;
-
- // roosts and bomb wagons are spawned when someone uses the matching destroyed roost
- static ControlGOTypes const GoTypes[] =
- {
- NA_DESTROYED_ROOST_S,
- NA_DESTROYED_ROOST_W,
- NA_DESTROYED_ROOST_N,
- NA_DESTROYED_ROOST_E
- };
-
- for (ControlGOTypes goType : GoTypes)
- AddObject(goType, gos[goType].entry, gos[goType].map, gos[goType].pos, gos[goType].rot);
+ return std::count_if(guards.begin(), guards.end(), [](WorldObject* guard) { return guard->IsUnit() && guard->ToUnit()->IsAlive(); });
}
-void OPvPCapturePointNA::DeSpawnGOs()
+uint32 OPvPCapturePointNA::GetControllingFaction() const
{
- for (int i = 0; i < NA_CONTROL_GO_NUM; ++i)
- {
- DelObject(i);
- }
+ return m_ControllingFaction;
}
void OPvPCapturePointNA::FactionTakeOver(uint32 team)
@@ -238,13 +93,10 @@ void OPvPCapturePointNA::FactionTakeOver(uint32 team)
m_ControllingFaction = team;
if (m_ControllingFaction)
sObjectMgr->AddGraveyardLink(NA_HALAA_GRAVEYARD, NA_HALAA_GRAVEYARD_ZONE, m_ControllingFaction, false);
- DeSpawnGOs();
- DeSpawnNPCs();
- SpawnGOsForTeam(team);
- SpawnNPCsForTeam(team);
+
m_GuardsAlive = NA_GUARDS_MAX;
m_capturable = false;
- this->UpdateHalaaWorldState();
+ UpdateHalaaWorldState();
if (team == ALLIANCE)
{
m_WyvernStateSouth = WYVERN_NEU_HORDE;
@@ -278,7 +130,7 @@ void OPvPCapturePointNA::FactionTakeOver(uint32 team)
OPvPCapturePointNA::OPvPCapturePointNA(OutdoorPvP* pvp) : OPvPCapturePoint(pvp), m_capturable(true), m_GuardsAlive(0), m_ControllingFaction(0), m_WyvernStateNorth(0), m_WyvernStateSouth(0), m_WyvernStateEast(0),
m_WyvernStateWest(0), m_HalaaState(HALAA_N), m_RespawnTimer(NA_RESPAWN_TIME), m_GuardCheckTimer(NA_GUARD_CHECK_TIME)
{
- SetCapturePointData(182210, 530, { -1572.57f, 7945.3f, -22.475f, 2.05949f }, { 0.0f, 0.0f, 0.857167f, 0.515038f });
+ SetCapturePointData(182210);
}
bool OutdoorPvPNA::SetupOutdoorPvP()
@@ -291,7 +143,6 @@ bool OutdoorPvPNA::SetupOutdoorPvP()
// halaa
m_obj = new OPvPCapturePointNA(this);
- AddCapturePoint(m_obj);
return true;
}
@@ -426,124 +277,77 @@ bool OPvPCapturePointNA::HandleCustomSpell(Player* player, uint32 spellId, GameO
int32 OPvPCapturePointNA::HandleOpenGo(Player* player, GameObject* go)
{
- int32 retval = OPvPCapturePoint::HandleOpenGo(player, go);
- if (retval >= 0)
+ switch (go->GetEntry())
{
- go_type const* gos = nullptr;
- if (m_ControllingFaction == ALLIANCE)
- gos = AllianceControlGOs;
- else if (m_ControllingFaction == HORDE)
- gos = HordeControlGOs;
- else
- return -1;
-
- int32 del = -1;
- int32 del2 = -1;
- int32 add = -1;
- int32 add2 = -1;
-
- switch (retval)
- {
- case NA_DESTROYED_ROOST_S:
- del = NA_DESTROYED_ROOST_S;
- add = NA_ROOST_S;
- add2 = NA_BOMB_WAGON_S;
- if (m_ControllingFaction == HORDE)
- m_WyvernStateSouth = WYVERN_ALLIANCE;
- else
- m_WyvernStateSouth = WYVERN_HORDE;
- UpdateWyvernRoostWorldState(NA_ROOST_S);
- break;
- case NA_DESTROYED_ROOST_N:
- del = NA_DESTROYED_ROOST_N;
- add = NA_ROOST_N;
- add2 = NA_BOMB_WAGON_N;
- if (m_ControllingFaction == HORDE)
- m_WyvernStateNorth = WYVERN_ALLIANCE;
- else
- m_WyvernStateNorth = WYVERN_HORDE;
- UpdateWyvernRoostWorldState(NA_ROOST_N);
- break;
- case NA_DESTROYED_ROOST_W:
- del = NA_DESTROYED_ROOST_W;
- add = NA_ROOST_W;
- add2 = NA_BOMB_WAGON_W;
- if (m_ControllingFaction == HORDE)
- m_WyvernStateWest = WYVERN_ALLIANCE;
- else
- m_WyvernStateWest = WYVERN_HORDE;
- UpdateWyvernRoostWorldState(NA_ROOST_W);
- break;
- case NA_DESTROYED_ROOST_E:
- del = NA_DESTROYED_ROOST_E;
- add = NA_ROOST_E;
- add2 = NA_BOMB_WAGON_E;
- if (m_ControllingFaction == HORDE)
- m_WyvernStateEast = WYVERN_ALLIANCE;
- else
- m_WyvernStateEast = WYVERN_HORDE;
- UpdateWyvernRoostWorldState(NA_ROOST_E);
- break;
- case NA_BOMB_WAGON_S:
- del = NA_BOMB_WAGON_S;
- del2 = NA_ROOST_S;
- add = NA_DESTROYED_ROOST_S;
- if (m_ControllingFaction == HORDE)
- m_WyvernStateSouth = WYVERN_NEU_ALLIANCE;
- else
- m_WyvernStateSouth = WYVERN_NEU_HORDE;
- UpdateWyvernRoostWorldState(NA_ROOST_S);
- break;
- case NA_BOMB_WAGON_N:
- del = NA_BOMB_WAGON_N;
- del2 = NA_ROOST_N;
- add = NA_DESTROYED_ROOST_N;
- if (m_ControllingFaction == HORDE)
- m_WyvernStateNorth = WYVERN_NEU_ALLIANCE;
- else
- m_WyvernStateNorth = WYVERN_NEU_HORDE;
- UpdateWyvernRoostWorldState(NA_ROOST_N);
- break;
- case NA_BOMB_WAGON_W:
- del = NA_BOMB_WAGON_W;
- del2 = NA_ROOST_W;
- add = NA_DESTROYED_ROOST_W;
- if (m_ControllingFaction == HORDE)
- m_WyvernStateWest = WYVERN_NEU_ALLIANCE;
- else
- m_WyvernStateWest = WYVERN_NEU_HORDE;
- UpdateWyvernRoostWorldState(NA_ROOST_W);
- break;
- case NA_BOMB_WAGON_E:
- del = NA_BOMB_WAGON_E;
- del2 = NA_ROOST_E;
- add = NA_DESTROYED_ROOST_E;
- if (m_ControllingFaction == HORDE)
- m_WyvernStateEast = WYVERN_NEU_ALLIANCE;
- else
- m_WyvernStateEast = WYVERN_NEU_HORDE;
- UpdateWyvernRoostWorldState(NA_ROOST_E);
- break;
- default:
- return -1;
- break;
- }
-
- if (del > -1)
- DelObject(del);
-
- if (del2 > -1)
- DelObject(del2);
-
- if (add > -1)
- AddObject(add, gos[add].entry, gos[add].map, gos[add].pos, gos[add].rot);
-
- if (add2 > -1)
- AddObject(add2, gos[add2].entry, gos[add2].map, gos[add2].pos, gos[add2].rot);
-
- return retval;
+ case 182222:
+ m_WyvernStateSouth = WYVERN_NEU_ALLIANCE;
+ UpdateWyvernRoostWorldState(NA_ROOST_S);
+ break;
+ case 182272:
+ m_WyvernStateWest = WYVERN_NEU_ALLIANCE;
+ UpdateWyvernRoostWorldState(NA_ROOST_W);
+ break;
+ case 182273:
+ m_WyvernStateNorth = WYVERN_NEU_ALLIANCE;
+ UpdateWyvernRoostWorldState(NA_ROOST_N);
+ break;
+ case 182274:
+ m_WyvernStateEast = WYVERN_NEU_ALLIANCE;
+ UpdateWyvernRoostWorldState(NA_ROOST_E);
+ break;
+ case 182266:
+ m_WyvernStateSouth = WYVERN_ALLIANCE;
+ UpdateWyvernRoostWorldState(NA_ROOST_S);
+ break;
+ case 182275:
+ m_WyvernStateWest = WYVERN_ALLIANCE;
+ UpdateWyvernRoostWorldState(NA_ROOST_W);
+ break;
+ case 182276:
+ m_WyvernStateNorth = WYVERN_ALLIANCE;
+ UpdateWyvernRoostWorldState(NA_ROOST_N);
+ break;
+ case 182277:
+ m_WyvernStateEast = WYVERN_ALLIANCE;
+ UpdateWyvernRoostWorldState(NA_ROOST_E);
+ break;
+ case 182305:
+ m_WyvernStateSouth = WYVERN_NEU_HORDE;
+ UpdateWyvernRoostWorldState(NA_ROOST_S);
+ break;
+ case 182306:
+ m_WyvernStateWest = WYVERN_NEU_HORDE;
+ UpdateWyvernRoostWorldState(NA_ROOST_W);
+ break;
+ case 182307:
+ m_WyvernStateNorth = WYVERN_NEU_HORDE;
+ UpdateWyvernRoostWorldState(NA_ROOST_N);
+ break;
+ case 182308:
+ m_WyvernStateEast = WYVERN_NEU_HORDE;
+ UpdateWyvernRoostWorldState(NA_ROOST_E);
+ break;
+ case 182297:
+ m_WyvernStateSouth = WYVERN_HORDE;
+ UpdateWyvernRoostWorldState(NA_ROOST_S);
+ break;
+ case 182298:
+ m_WyvernStateWest = WYVERN_HORDE;
+ UpdateWyvernRoostWorldState(NA_ROOST_W);
+ break;
+ case 182299:
+ m_WyvernStateNorth = WYVERN_HORDE;
+ UpdateWyvernRoostWorldState(NA_ROOST_N);
+ break;
+ case 182300:
+ m_WyvernStateEast = WYVERN_HORDE;
+ UpdateWyvernRoostWorldState(NA_ROOST_E);
+ break;
+ default:
+ return OPvPCapturePoint::HandleOpenGo(player, go);
}
- return -1;
+
+ return 0;
}
bool OPvPCapturePointNA::Update(uint32 diff)
@@ -558,30 +362,37 @@ bool OPvPCapturePointNA::Update(uint32 diff)
if (m_GuardCheckTimer < diff)
{
m_GuardCheckTimer = NA_GUARD_CHECK_TIME;
- uint32 cnt = GetAliveGuardsCount();
- if (cnt != m_GuardsAlive)
+ m_GuardsAlive = GetAliveGuardsCount();
+ if (m_GuardsAlive == 0)
{
- m_GuardsAlive = cnt;
- if (m_GuardsAlive == 0)
- m_capturable = true;
- // update the guard count for the players in zone
- m_PvP->SetWorldState(NA_UI_GUARDS_LEFT, m_GuardsAlive);
+ m_capturable = true;
+ m_RespawnTimer = NA_RESPAWN_TIME;
}
- } else m_GuardCheckTimer -= diff;
+ // update the guard count for the players in zone
+ m_PvP->SetWorldState(NA_UI_GUARDS_LEFT, m_GuardsAlive);
+ }
+ else
+ m_GuardCheckTimer -= diff;
- if (m_capturable || capturable)
+ if (m_capturable)
{
if (m_RespawnTimer < diff)
{
// if the guards have been killed, then the challenger has one hour to take over halaa.
// in case they fail to do it, the guards are respawned, and they have to start again.
if (m_ControllingFaction)
+ {
FactionTakeOver(m_ControllingFaction);
- m_RespawnTimer = NA_RESPAWN_TIME;
- } else m_RespawnTimer -= diff;
+ m_PvP->GetMap()->SpawnGroupSpawn(m_ControllingFaction == HORDE ? SPAWN_GROUP_HORDE_GUARDS : SPAWN_GROUP_ALLIANCE_GUARDS, true);
+ }
+ }
+ else
+ m_RespawnTimer -= diff;
+ }
+ if (m_capturable || capturable)
return OPvPCapturePoint::Update(diff);
- }
+
return false;
}
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h
index 56eb18ce696..211cf5014ea 100644
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h
@@ -80,18 +80,6 @@ enum ControlGOTypes
NA_ROOST_W = 1,
NA_ROOST_N = 2,
NA_ROOST_E = 3,
-
- NA_BOMB_WAGON_S = 4,
- NA_BOMB_WAGON_W = 5,
- NA_BOMB_WAGON_N = 6,
- NA_BOMB_WAGON_E = 7,
-
- NA_DESTROYED_ROOST_S = 8,
- NA_DESTROYED_ROOST_W = 9,
- NA_DESTROYED_ROOST_N = 10,
- NA_DESTROYED_ROOST_E = 11,
-
- NA_CONTROL_GO_NUM = 12
};
enum FlightSpellsNA
@@ -102,31 +90,10 @@ enum FlightSpellsNA
NA_SPELL_FLY_EAST = 32081
};
-enum ControlNPCTypes
+enum HalaaSpawnGroupIds
{
- NA_NPC_RESEARCHER = 0,
- NA_NPC_QUARTERMASTER,
- NA_NPC_BLADE_MERCHANT,
- NA_NPC_FOOD_MERCHANT,
- NA_NPC_AMMO,
-
- NA_NPC_GUARD_01,
- NA_NPC_GUARD_02,
- NA_NPC_GUARD_03,
- NA_NPC_GUARD_04,
- NA_NPC_GUARD_05,
- NA_NPC_GUARD_06,
- NA_NPC_GUARD_07,
- NA_NPC_GUARD_08,
- NA_NPC_GUARD_09,
- NA_NPC_GUARD_10,
- NA_NPC_GUARD_11,
- NA_NPC_GUARD_12,
- NA_NPC_GUARD_13,
- NA_NPC_GUARD_14,
- NA_NPC_GUARD_15,
-
- NA_CONTROL_NPC_NUM
+ SPAWN_GROUP_HORDE_GUARDS = 123,
+ SPAWN_GROUP_ALLIANCE_GUARDS = 124,
};
enum WyvernStates
@@ -159,13 +126,9 @@ class OPvPCapturePointNA : public OPvPCapturePoint
bool HandleCustomSpell(Player* player, uint32 spellId, GameObject* go) override;
int32 HandleOpenGo(Player* player, GameObject* go) override;
- uint32 GetAliveGuardsCount();
+ uint32 GetAliveGuardsCount() const;
uint32 GetControllingFaction() const;
void FactionTakeOver(uint32 team); // called when a faction takes control
- void DeSpawnNPCs();
- void DeSpawnGOs();
- void SpawnNPCsForTeam(uint32 team);
- void SpawnGOsForTeam(uint32 team);
void UpdateWyvernRoostWorldState(uint32 roost);
void UpdateHalaaWorldState();
@@ -187,6 +150,8 @@ class OutdoorPvPNA : public OutdoorPvP
public:
OutdoorPvPNA();
+ void OnGameObjectCreate(GameObject* go) override;
+
bool SetupOutdoorPvP() override;
void HandlePlayerEnterZone(Player* player, uint32 zone) override;
void HandlePlayerLeaveZone(Player* player, uint32 zone) override;