/*
* This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see .
*/
#ifndef OUTDOOR_PVP_ZM_
#define OUTDOOR_PVP_ZM_
#include "OutdoorPvP.h"
enum DefenseMessages
{
TEXT_WEST_BEACON_TAKEN_ALLIANCE = 15541, // '|cffffff00The Alliance has taken control of the West Beacon!|r'
TEXT_WEST_BEACON_TAKEN_HORDE = 15543, // '|cffffff00The Horde has taken control of the West Beacon!|r'
TEXT_EAST_BEACON_TAKEN_ALLIANCE = 15546, // '|cffffff00The Alliance has taken control of the East Beacon!|r'
TEXT_EAST_BEACON_TAKEN_HORDE = 15545, // '|cffffff00The Horde has taken control of the East Beacon!|r'
TEXT_TWIN_SPIRE_RUINS_TAKEN_ALLIANCE = 15591, // '|cffffff00The Alliance has taken control of Twin Spire Ruins!|r'
TEXT_TWIN_SPIRE_RUINS_TAKEN_HORDE = 15590, // '|cffffff00The Horde has taken control of Twin Spire Ruins!|r'
TEXT_BOTH_BEACONS_TAKEN_ALLIANCE = 16284, // (NYI) '|cffffff00The Alliance has taken control of both beacons!|r'
TEXT_BOTH_BEACONS_TAKEN_HORDE = 16285, // (NYI) '|cffffff00The Horde has taken control of both beacons!|r'
TEXT_BATTLE_STANDARDS_ALLIANCE = 16287, // (NYI) '|cffffff00The Alliance Field Scout is now issuing battle standards.|r'
TEXT_BATTLE_STANDARDS_HORDE = 16288 // (NYI) '|cffffff00The Horde Field Scout is now issuing battle standards.|r'
};
enum OutdoorPvPZMSpells
{
// cast on the players of the controlling faction
ZM_CAPTURE_BUFF = 33779, // twin spire blessing
// spell that the field scout casts on the player to carry the flag
ZM_BATTLE_STANDARD_A = 32430,
// spell that the field scout casts on the player to carry the flag
ZM_BATTLE_STANDARD_H = 32431,
// token create spell
ZM_AlliancePlayerKillReward = 32155,
// token create spell
ZM_HordePlayerKillReward = 32158
};
enum ZMCreatureTypes
{
ZM_ALLIANCE_FIELD_SCOUT = 18581,
ZM_HORDE_FIELD_SCOUT = 18564,
};
enum ZM_BeaconType
{
ZM_BEACON_EAST = 0,
ZM_BEACON_WEST,
ZM_NUM_BEACONS
};
enum OutdoorPvPZMWorldStates
{
ZM_UI_TOWER_EAST_N = 2560,
ZM_UI_TOWER_EAST_H = 2559,
ZM_UI_TOWER_EAST_A = 2558,
ZM_UI_TOWER_WEST_N = 2557,
ZM_UI_TOWER_WEST_H = 2556,
ZM_UI_TOWER_WEST_A = 2555,
ZM_MAP_TOWER_EAST_N = 2652,
ZM_MAP_TOWER_EAST_H = 2651,
ZM_MAP_TOWER_EAST_A = 2650,
ZM_MAP_GRAVEYARD_H = 2649,
ZM_MAP_GRAVEYARD_A = 2648,
ZM_MAP_GRAVEYARD_N = 2647,
ZM_MAP_TOWER_WEST_N = 2646,
ZM_MAP_TOWER_WEST_H = 2645,
ZM_MAP_TOWER_WEST_A = 2644,
ZM_MAP_HORDE_FLAG_READY = 2658,
ZM_MAP_HORDE_FLAG_NOT_READY = 2657,
ZM_MAP_ALLIANCE_FLAG_NOT_READY = 2656,
ZM_MAP_ALLIANCE_FLAG_READY = 2655
};
enum ZM_TowerStateMask
{
ZM_TOWERSTATE_N = 1,
ZM_TOWERSTATE_A = 2,
ZM_TOWERSTATE_H = 4
};
enum ZM_WorldEvents
{
ZM_EVENT_BEACON_EAST_PROGRESS_HORDE = 11807,
ZM_EVENT_BEACON_EAST_PROGRESS_ALLIANCE = 11806,
ZM_EVENT_BEACON_EAST_NEUTRAL_HORDE = 11814,
ZM_EVENT_BEACON_EAST_NEUTRAL_ALLIANCE = 11815,
ZM_EVENT_BEACON_WEST_PROGRESS_HORDE = 11805,
ZM_EVENT_BEACON_WEST_PROGRESS_ALLIANCE = 11804,
ZM_EVENT_BEACON_WEST_NEUTRAL_HORDE = 11808,
ZM_EVENT_BEACON_WEST_NEUTRAL_ALLIANCE = 11809
};
enum ZM_GraveyardState
{
ZM_GRAVEYARD_N = 1,
ZM_GRAVEYARD_A = 2,
ZM_GRAVEYARD_H = 4
};
enum ZM_GameObjectEntries
{
ZM_GO_ENTRY_BEACON_WEST = 182522,
ZM_GO_ENTRY_BEACON_EAST = 182523
};
class OutdoorPvPZM;
class ZMControlZoneHandler : public OutdoorPvPControlZoneHandler
{
public:
ZMControlZoneHandler(OutdoorPvPZM* pvp, uint32 textBeaconTakenHorde, uint32 textBeaconTakenAlliance, uint32 worldstateNeutralUi, uint32 worldstateNeutralMap, uint32 worldstateHordeUi, uint32 worldstateHordeMap, uint32 worldstateAllianceUi, uint32 worldstateAllianceMap);
void HandleProgressEventHorde([[maybe_unused]] GameObject* controlZone) override;
void HandleProgressEventAlliance([[maybe_unused]] GameObject* controlZone) override;
void HandleNeutralEventHorde([[maybe_unused]] GameObject* controlZone) override;
void HandleNeutralEventAlliance([[maybe_unused]] GameObject* controlZone) override;
void HandleNeutralEvent([[maybe_unused]] GameObject* controlZone) override;
uint32 GetWorldStateNeutralUI() { return _worldstateNeutralUi; }
uint32 GetWorldStateNeutralMap() { return _worldstateNeutralMap; }
uint32 GetWorldStateHordeUI() { return _worldstateHordeUi; }
uint32 GetWorldStateHordeMap() { return _worldstateHordeMap; }
uint32 GetWorldStateAllianceUI() { return _worldstateAllianceUi; }
uint32 GetWorldStateAllianceMap() { return _worldstateAllianceMap; }
OutdoorPvPZM* GetOutdoorPvpZM();
private:
uint32 _textBeaconTakenHorde;
uint32 _textBeaconTakenAlliance;
uint32 _worldstateNeutralUi;
uint32 _worldstateNeutralMap;
uint32 _worldstateHordeUi;
uint32 _worldstateHordeMap;
uint32 _worldstateAllianceUi;
uint32 _worldstateAllianceMap;
};
class OPvPCapturePointZM_Graveyard : public OPvPCapturePoint
{
public:
OPvPCapturePointZM_Graveyard(OutdoorPvP* pvp);
void Update(uint32 diff) override;
void ChangeState() override { }
int32 HandleOpenGo(Player* player, GameObject* go) override;
bool HandleDropFlag(Player* player, uint32 spellId) override;
void UpdateTowerState();
void SetBeaconState(uint32 controlling_team); // not good atm
uint32 GetGraveyardState() const;
ObjectGuid GetFlagCarrierGUID() const { return m_FlagCarrierGUID; }
void SetFlagCarrierGUID(ObjectGuid guid) { m_FlagCarrierGUID = guid; }
protected:
uint32 m_BothControllingFaction;
ObjectGuid m_FlagCarrierGUID;
uint32 m_GraveyardState;
};
/// @todo flag carrier death/leave/mount/activitychange should give back the gossip options
class OutdoorPvPZM : public OutdoorPvP
{
public:
OutdoorPvPZM(Map* map);
bool SetupOutdoorPvP() override;
void HandlePlayerEnterZone(Player* player, uint32 zone) override;
void HandlePlayerLeaveZone(Player* player, uint32 zone) override;
void Update(uint32 diff) override;
void SendRemoveWorldStates(Player* player) override;
void HandleKillImpl(Player* player, Unit* killed) override;
uint32 GetAllianceTowersControlled() const;
void SetAllianceTowersControlled(uint32 count);
uint32 GetHordeTowersControlled() const;
void SetHordeTowersControlled(uint32 count);
OPvPCapturePointZM_Graveyard* GetGraveyard() { return m_Graveyard.get(); }
private:
std::unique_ptr m_Graveyard;
uint32 m_AllianceTowersControlled;
uint32 m_HordeTowersControlled;
};
#endif