aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2022-07-18 22:03:00 +0200
committerShauren <shauren.trinity@gmail.com>2022-07-18 22:03:00 +0200
commit1f853d068ff1b25ea51031d2e2f2a269d7998d47 (patch)
treeb27ae81dcf46822b1581a143276367245d9e381c
parentc42e52f1719f3d5a59d51e4a32e266852395cf7e (diff)
Core/OutdoorPvP: Move Zangarmarsh outdoorpvp spawns to db
-rw-r--r--sql/updates/world/master/2022_07_18_02_world.sql31
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp158
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPZM.h8
3 files changed, 115 insertions, 82 deletions
diff --git a/sql/updates/world/master/2022_07_18_02_world.sql b/sql/updates/world/master/2022_07_18_02_world.sql
new file mode 100644
index 00000000000..d20bcc7af7a
--- /dev/null
+++ b/sql/updates/world/master/2022_07_18_02_world.sql
@@ -0,0 +1,31 @@
+DELETE FROM `spawn_group_template` WHERE `groupId` BETWEEN 125 AND 127;
+INSERT INTO `spawn_group_template` (`groupId`,`groupName`,`groupFlags`) VALUES
+(125,'Zangarmarsh - Twinspire Graveyard',32),
+(126,'Zangarmarsh - Twinspire Graveyard - Alliance Controlled',32),
+(127,'Zangarmarsh - Twinspire Graveyard - Horde Controlled',32);
+
+DELETE FROM `creature` WHERE `guid` IN (12529,12530);
+INSERT INTO `creature` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnDifficulties`, `phaseUseFlags`, `PhaseId`, `PhaseGroup`, `terrainSwapMap`, `modelid`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `unit_flags2`, `unit_flags3`, `dynamicflags`, `ScriptName`, `VerifiedBuild`) VALUES
+(12529, 18564, 530, 0, 0, '0', 0, 0, 0, -1, 0, 0, 296.625, 7818.4, 42.6294, 5.18363, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0),
+(12530, 18581, 530, 0, 0, '0', 0, 0, 0, -1, 0, 0, 374.395, 6230.08, 22.8351, 0.593412, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0);
+
+DELETE FROM `gameobject` WHERE `guid`=22991 AND `id`=182527;
+DELETE FROM `gameobject` WHERE `guid` BETWEEN 23298 AND 23302;
+INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnDifficulties`, `phaseUseFlags`, `PhaseId`, `PhaseGroup`, `terrainSwapMap`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `ScriptName`, `VerifiedBuild`) VALUES
+(23298, 182529, 530, 0, 0, '0', 0, 0, 0, -1, 253.54, 7083.81, 36.7728, -0.017453, 0, 0, 0.008727, -0.999962, 0, 0, 1, '', 0),
+(23299, 182527, 530, 0, 0, '0', 0, 0, 0, -1, 253.54, 7083.81, 36.7728, -0.017453, 0, 0, 0.008727, -0.999962, 0, 0, 1, '', 0),
+(23300, 182528, 530, 0, 0, '0', 0, 0, 0, -1, 253.54, 7083.81, 36.7728, -0.017453, 0, 0, 0.008727, -0.999962, 0, 0, 1, '', 0),
+(23301, 182523, 530, 0, 0, '0', 0, 0, 0, -1, 303.243, 6841.36, 40.1245, -1.58825, 0, 0, 0.71325, -0.700909, 0, 0, 1, '', 0),
+(23302, 182522, 530, 0, 0, '0', 0, 0, 0, -1, 336.466, 7340.26, 41.4984, -1.58825, 0, 0, 0.71325, -0.700909, 0, 0, 1, '', 0);
+
+DELETE FROM `spawn_group` WHERE `spawnId` BETWEEN 23298 AND 23300 AND `spawnType`=1;
+INSERT INTO `spawn_group` (`groupId`,`spawnType`,`spawnId`) VALUES
+(125,1,23298),
+(126,1,23299),
+(127,1,23300);
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=33 AND `SourceEntry` BETWEEN 125 AND 127;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(33, 0, 125, 0, 0, 11, 0, 2647, 1, 0, 0, 0, 0, '', 'Zangarmarsh - Twinspire Graveyard neutral'),
+(33, 0, 126, 0, 0, 11, 0, 2648, 1, 0, 0, 0, 0, '', 'Zangarmarsh - Twinspire Graveyard - Alliance Controlled'),
+(33, 0, 127, 0, 0, 11, 0, 2649, 1, 0, 0, 0, 0, '', 'Zangarmarsh - Twinspire Graveyard - Horde Controlled');
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp
index 586236cf854..82698d807bb 100644
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp
@@ -17,6 +17,7 @@
#include "OutdoorPvPZM.h"
#include "Creature.h"
+#include "GameObject.h"
#include "GossipDef.h"
#include "MapManager.h"
#include "ObjectAccessor.h"
@@ -36,17 +37,6 @@ uint32 const ZM_GRAVEYARD_ZONE = 3521;
// linked when the central tower is controlled
uint32 const ZM_GRAVEYARD_ID = 969;
-// banners 182527, 182528, 182529, gotta check them ingame
-go_type const ZM_Banner_A = { 182527, 530, { 253.54f, 7083.81f, 36.7728f, -0.017453f }, { 0.0f, 0.0f, 0.008727f, -0.999962f } };
-go_type const ZM_Banner_H = { 182528, 530, { 253.54f, 7083.81f, 36.7728f, -0.017453f }, { 0.0f, 0.0f, 0.008727f, -0.999962f } };
-go_type const ZM_Banner_N = { 182529, 530, { 253.54f, 7083.81f, 36.7728f, -0.017453f }, { 0.0f, 0.0f, 0.008727f, -0.999962f } };
-
-// horde field scout spawn data
-creature_type const ZM_HordeFieldScout = { 18564, 530, { 296.625f, 7818.4f, 42.6294f, 5.18363f } };
-
-// alliance field scout spawn data
-creature_type const ZM_AllianceFieldScout = { 18581, 530, { 374.395f, 6230.08f, 22.8351f, 0.593412f } };
-
struct zm_beacon
{
int32 ui_tower_n;
@@ -77,15 +67,11 @@ uint32 const ZMBeaconCaptureH[ZM_NUM_BEACONS] =
TEXT_WEST_BEACON_TAKEN_HORDE
};
-go_type const ZMCapturePoints[ZM_NUM_BEACONS] =
-{
- { 182523, 530, { 303.243f, 6841.36f, 40.1245f, -1.58825f }, { 0.0f, 0.0f, 0.71325f, -0.700909f } },
- { 182522, 530, { 336.466f, 7340.26f, 41.4984f, -1.58825f }, { 0.0f, 0.0f, 0.71325f, -0.700909f } }
-};
-
-OPvPCapturePointZM_Beacon::OPvPCapturePointZM_Beacon(OutdoorPvP* pvp, ZM_BeaconType type) : OPvPCapturePoint(pvp), m_TowerType(type), m_TowerState(ZM_TOWERSTATE_N)
+OPvPCapturePointZM_Beacon::OPvPCapturePointZM_Beacon(OutdoorPvP* pvp, ZM_BeaconType type, GameObject* go) : OPvPCapturePoint(pvp), m_TowerType(type), m_TowerState(ZM_TOWERSTATE_N)
{
- SetCapturePointData(ZMCapturePoints[type].entry, ZMCapturePoints[type].map, ZMCapturePoints[type].pos, ZMCapturePoints[type].rot);
+ m_capturePointSpawnId = go->GetSpawnId();
+ m_capturePoint = go;
+ SetCapturePointData(go->GetEntry());
}
void OPvPCapturePointZM_Beacon::UpdateTowerState()
@@ -204,14 +190,29 @@ bool OutdoorPvPZM::SetupOutdoorPvP()
for (uint8 i = 0; i < OutdoorPvPZMBuffZonesNum; ++i)
RegisterZone(OutdoorPvPZMBuffZones[i]);
- AddCapturePoint(new OPvPCapturePointZM_Beacon(this, ZM_BEACON_WEST));
- AddCapturePoint(new OPvPCapturePointZM_Beacon(this, ZM_BEACON_EAST));
m_Graveyard = new OPvPCapturePointZM_Graveyard(this);
AddCapturePoint(m_Graveyard); // though the update function isn't used, the handleusego is!
return true;
}
+void OutdoorPvPZM::OnGameObjectCreate(GameObject* go)
+{
+ switch (go->GetEntry())
+ {
+ case 182523:
+ AddCapturePoint(new OPvPCapturePointZM_Beacon(this, ZM_BEACON_EAST, go));
+ break;
+ case 182522:
+ AddCapturePoint(new OPvPCapturePointZM_Beacon(this, ZM_BEACON_WEST, go));
+ break;
+ default:
+ break;
+ }
+
+ OutdoorPvP::OnGameObjectCreate(go);
+}
+
void OutdoorPvPZM::HandleKillImpl(Player* player, Unit* killed)
{
if (killed->GetTypeId() != TYPEID_PLAYER)
@@ -232,34 +233,34 @@ bool OPvPCapturePointZM_Graveyard::Update(uint32 /*diff*/)
int32 OPvPCapturePointZM_Graveyard::HandleOpenGo(Player* player, GameObject* go)
{
- int32 retval = OPvPCapturePoint::HandleOpenGo(player, go);
- if (retval >= 0)
+ switch (go->GetEntry())
{
- if (player->HasAura(ZM_BATTLE_STANDARD_A) && m_GraveyardState != ZM_GRAVEYARD_A)
- {
- m_GraveyardState = ZM_GRAVEYARD_A;
- DelObject(0); // only one gotype is used in the whole outdoor pvp, no need to call it a constant
- AddObject(0, ZM_Banner_A.entry, ZM_Banner_A.map, ZM_Banner_A.pos, ZM_Banner_A.rot);
- sObjectMgr->RemoveGraveyardLink(ZM_GRAVEYARD_ID, ZM_GRAVEYARD_ZONE, HORDE); // rem gy
- sObjectMgr->AddGraveyardLink(ZM_GRAVEYARD_ID, ZM_GRAVEYARD_ZONE, ALLIANCE, false); // add gy
- m_PvP->TeamApplyBuff(TEAM_ALLIANCE, ZM_CAPTURE_BUFF);
- player->RemoveAurasDueToSpell(ZM_BATTLE_STANDARD_A);
- m_PvP->SendDefenseMessage(ZM_GRAVEYARD_ZONE, TEXT_TWIN_SPIRE_RUINS_TAKEN_ALLIANCE);
- }
- else if (player->HasAura(ZM_BATTLE_STANDARD_H) && m_GraveyardState != ZM_GRAVEYARD_H)
- {
- m_GraveyardState = ZM_GRAVEYARD_H;
- DelObject(0); // only one gotype is used in the whole outdoor pvp, no need to call it a constant
- AddObject(0, ZM_Banner_H.entry, ZM_Banner_H.map, ZM_Banner_H.pos, ZM_Banner_H.rot);
- sObjectMgr->RemoveGraveyardLink(ZM_GRAVEYARD_ID, ZM_GRAVEYARD_ZONE, ALLIANCE); // rem gy
- sObjectMgr->AddGraveyardLink(ZM_GRAVEYARD_ID, ZM_GRAVEYARD_ZONE, HORDE, false); // add gy
- m_PvP->TeamApplyBuff(TEAM_HORDE, ZM_CAPTURE_BUFF);
- player->RemoveAurasDueToSpell(ZM_BATTLE_STANDARD_H);
- m_PvP->SendDefenseMessage(ZM_GRAVEYARD_ZONE, TEXT_TWIN_SPIRE_RUINS_TAKEN_HORDE);
- }
- UpdateTowerState();
+ case 182529:
+ case 182527:
+ case 182528:
+ if (player->HasAura(ZM_BATTLE_STANDARD_A) && m_GraveyardState != ZM_GRAVEYARD_A)
+ {
+ m_GraveyardState = ZM_GRAVEYARD_A;
+ sObjectMgr->RemoveGraveyardLink(ZM_GRAVEYARD_ID, ZM_GRAVEYARD_ZONE, HORDE); // rem gy
+ sObjectMgr->AddGraveyardLink(ZM_GRAVEYARD_ID, ZM_GRAVEYARD_ZONE, ALLIANCE, false); // add gy
+ m_PvP->TeamApplyBuff(TEAM_ALLIANCE, ZM_CAPTURE_BUFF);
+ player->RemoveAurasDueToSpell(ZM_BATTLE_STANDARD_A);
+ m_PvP->SendDefenseMessage(ZM_GRAVEYARD_ZONE, TEXT_TWIN_SPIRE_RUINS_TAKEN_ALLIANCE);
+ }
+ else if (player->HasAura(ZM_BATTLE_STANDARD_H) && m_GraveyardState != ZM_GRAVEYARD_H)
+ {
+ m_GraveyardState = ZM_GRAVEYARD_H;
+ sObjectMgr->RemoveGraveyardLink(ZM_GRAVEYARD_ID, ZM_GRAVEYARD_ZONE, ALLIANCE); // rem gy
+ sObjectMgr->AddGraveyardLink(ZM_GRAVEYARD_ID, ZM_GRAVEYARD_ZONE, HORDE, false); // add gy
+ m_PvP->TeamApplyBuff(TEAM_HORDE, ZM_CAPTURE_BUFF);
+ player->RemoveAurasDueToSpell(ZM_BATTLE_STANDARD_H);
+ m_PvP->SendDefenseMessage(ZM_GRAVEYARD_ZONE, TEXT_TWIN_SPIRE_RUINS_TAKEN_HORDE);
+ }
+ UpdateTowerState();
+ return 0;
+ default:
+ return OPvPCapturePoint::HandleOpenGo(player, go);
}
- return retval;
}
OPvPCapturePointZM_Graveyard::OPvPCapturePointZM_Graveyard(OutdoorPvP* pvp) : OPvPCapturePoint(pvp)
@@ -267,11 +268,6 @@ OPvPCapturePointZM_Graveyard::OPvPCapturePointZM_Graveyard(OutdoorPvP* pvp) : OP
m_BothControllingFaction = 0;
m_GraveyardState = ZM_GRAVEYARD_N;
m_FlagCarrierGUID.Clear();
- // add field scouts here
- AddCreature(ZM_ALLIANCE_FIELD_SCOUT, ZM_AllianceFieldScout.entry, ZM_AllianceFieldScout.map, ZM_AllianceFieldScout.pos);
- AddCreature(ZM_HORDE_FIELD_SCOUT, ZM_HordeFieldScout.entry, ZM_HordeFieldScout.map, ZM_HordeFieldScout.pos);
- // add neutral banner
- AddObject(0, ZM_Banner_N.entry, ZM_Banner_N.map, ZM_Banner_N.pos, ZM_Banner_N.rot);
}
void OPvPCapturePointZM_Graveyard::UpdateTowerState()
@@ -333,39 +329,45 @@ void OPvPCapturePointZM_Graveyard::SetBeaconState(uint32 controlling_faction)
bool OPvPCapturePointZM_Graveyard::CanTalkTo(Player* player, Creature* c, GossipMenuItems const& /*gso*/)
{
- std::map<ObjectGuid::LowType, uint32>::iterator itr = m_CreatureTypes.find(c->GetSpawnId());
- if (itr != m_CreatureTypes.end())
+ switch (c->GetEntry())
{
- if (itr->second == ZM_ALLIANCE_FIELD_SCOUT && player->GetTeam() == ALLIANCE && m_BothControllingFaction == ALLIANCE && !m_FlagCarrierGUID && m_GraveyardState != ZM_GRAVEYARD_A)
- return true;
- else if (itr->second == ZM_HORDE_FIELD_SCOUT && player->GetTeam() == HORDE && m_BothControllingFaction == HORDE && !m_FlagCarrierGUID && m_GraveyardState != ZM_GRAVEYARD_H)
- return true;
+ case ZM_ALLIANCE_FIELD_SCOUT:
+ return player->GetTeam() == ALLIANCE && m_BothControllingFaction == ALLIANCE && !m_FlagCarrierGUID && m_GraveyardState != ZM_GRAVEYARD_A;
+ case ZM_HORDE_FIELD_SCOUT:
+ return player->GetTeam() == HORDE && m_BothControllingFaction == HORDE && !m_FlagCarrierGUID && m_GraveyardState != ZM_GRAVEYARD_H;
+ default:
+ break;
}
+
return false;
}
bool OPvPCapturePointZM_Graveyard::HandleGossipOption(Player* player, Creature* creature, uint32 /*gossipid*/)
{
- std::map<ObjectGuid::LowType, uint32>::iterator itr = m_CreatureTypes.find(creature->GetSpawnId());
- if (itr != m_CreatureTypes.end())
+ switch (creature->GetEntry())
{
- // if the flag is already taken, then return
- if (!m_FlagCarrierGUID.IsEmpty())
- return true;
- if (itr->second == ZM_ALLIANCE_FIELD_SCOUT)
- {
+ case ZM_ALLIANCE_FIELD_SCOUT:
+ // if the flag is already taken, then return
+ if (!m_FlagCarrierGUID.IsEmpty())
+ return true;
creature->CastSpell(player, ZM_BATTLE_STANDARD_A, true);
m_FlagCarrierGUID = player->GetGUID();
- }
- else if (itr->second == ZM_HORDE_FIELD_SCOUT)
- {
+ UpdateTowerState();
+ player->PlayerTalkClass->SendCloseGossip();
+ return true;
+ case ZM_HORDE_FIELD_SCOUT:
+ // if the flag is already taken, then return
+ if (!m_FlagCarrierGUID.IsEmpty())
+ return true;
creature->CastSpell(player, ZM_BATTLE_STANDARD_H, true);
m_FlagCarrierGUID = player->GetGUID();
- }
- UpdateTowerState();
- player->PlayerTalkClass->SendCloseGossip();
- return true;
+ UpdateTowerState();
+ player->PlayerTalkClass->SendCloseGossip();
+ return true;
+ default:
+ break;
}
+
return false;
}
@@ -373,12 +375,12 @@ bool OPvPCapturePointZM_Graveyard::HandleDropFlag(Player* /*player*/, uint32 spe
{
switch (spellId)
{
- case ZM_BATTLE_STANDARD_A:
- m_FlagCarrierGUID.Clear();
- return true;
- case ZM_BATTLE_STANDARD_H:
- m_FlagCarrierGUID.Clear();
- return true;
+ case ZM_BATTLE_STANDARD_A:
+ case ZM_BATTLE_STANDARD_H:
+ m_FlagCarrierGUID.Clear();
+ return true;
+ default:
+ break;
}
return false;
}
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h
index 771bd0eacf4..84e4e81108b 100644
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h
@@ -50,9 +50,8 @@ enum OutdoorPvPZMSpells
enum ZMCreatureTypes
{
- ZM_ALLIANCE_FIELD_SCOUT = 0,
- ZM_HORDE_FIELD_SCOUT,
- ZM_CREATURE_NUM
+ ZM_ALLIANCE_FIELD_SCOUT = 18581,
+ ZM_HORDE_FIELD_SCOUT = 18564,
};
enum ZM_BeaconType
@@ -97,7 +96,7 @@ enum ZM_TowerStateMask
class OPvPCapturePointZM_Beacon : public OPvPCapturePoint
{
public:
- OPvPCapturePointZM_Beacon(OutdoorPvP* pvp, ZM_BeaconType type);
+ OPvPCapturePointZM_Beacon(OutdoorPvP* pvp, ZM_BeaconType type, GameObject* go);
void ChangeState() override;
@@ -144,6 +143,7 @@ class OutdoorPvPZM : public OutdoorPvP
OutdoorPvPZM();
bool SetupOutdoorPvP() override;
+ void OnGameObjectCreate(GameObject* go) override;
void HandlePlayerEnterZone(Player* player, uint32 zone) override;
void HandlePlayerLeaveZone(Player* player, uint32 zone) override;
bool Update(uint32 diff) override;