/* * 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_HP_ #define OUTDOOR_PVP_HP_ #include "OutdoorPvP.h" #include enum DefenseMessages { TEXT_OVERLOOK_TAKEN_ALLIANCE = 14841, // '|cffffff00The Overlook has been taken by the Alliance!|r' TEXT_OVERLOOK_TAKEN_HORDE = 14842, // '|cffffff00The Overlook has been taken by the Horde!|r' TEXT_STADIUM_TAKEN_ALLIANCE = 14843, // '|cffffff00The Stadium has been taken by the Alliance!|r' TEXT_STADIUM_TAKEN_HORDE = 14844, // '|cffffff00The Stadium has been taken by the Horde!|r' TEXT_BROKEN_HILL_TAKEN_ALLIANCE = 14845, // '|cffffff00Broken Hill has been taken by the Alliance!|r' TEXT_BROKEN_HILL_TAKEN_HORDE = 14846, // '|cffffff00Broken Hill has been taken by the Horde!|r' }; enum OutdoorPvPHPSpells { AlliancePlayerKillReward = 32155, HordePlayerKillReward = 32158, AllianceBuff = 32071, HordeBuff = 32049 }; enum OutdoorPvPHPTowerType { HP_TOWER_BROKEN_HILL = 0, HP_TOWER_OVERLOOK = 1, HP_TOWER_STADIUM = 2, HP_TOWER_NUM = 3 }; enum OutdoorPvPHPWorldStates { HP_UI_TOWER_DISPLAY_A = 0x9ba, HP_UI_TOWER_DISPLAY_H = 0x9b9, HP_UI_TOWER_COUNT_H = 0x9ae, HP_UI_TOWER_COUNT_A = 0x9ac, HP_UI_TOWER_S_A = 2483, HP_UI_TOWER_S_H = 2484, HP_UI_TOWER_S_N = 2485, HP_UI_TOWER_N_A = 2480, HP_UI_TOWER_N_H = 2481, HP_UI_TOWER_N_N = 2482, HP_UI_TOWER_W_A = 2471, HP_UI_TOWER_W_H = 2470, HP_UI_TOWER_W_N = 2472 }; enum OutdoorPvPHPEvents { HP_EVENT_TOWER_W_PROGRESS_HORDE = 11383, HP_EVENT_TOWER_W_PROGRESS_ALLIANCE = 11387, HP_EVENT_TOWER_W_NEUTRAL_HORDE = 11386, HP_EVENT_TOWER_W_NEUTRAL_ALLIANCE = 11385, HP_EVENT_TOWER_N_PROGRESS_HORDE = 11396, HP_EVENT_TOWER_N_PROGRESS_ALLIANCE = 11395, HP_EVENT_TOWER_N_NEUTRAL_HORDE = 11394, HP_EVENT_TOWER_N_NEUTRAL_ALLIANCE = 11393, HP_EVENT_TOWER_S_PROGRESS_HORDE = 11404, HP_EVENT_TOWER_S_PROGRESS_ALLIANCE = 11403, HP_EVENT_TOWER_S_NEUTRAL_HORDE = 11402, HP_EVENT_TOWER_S_NEUTRAL_ALLIANCE = 11401 }; enum OutdoorPvPHPGameObjectEntries { HP_GO_ENTRY_TOWER_W = 182173, HP_GO_ENTRY_TOWER_N = 182174, HP_GO_ENTRY_TOWER_S = 182175 }; enum OutdoorPvPHPCredit { HP_KILL_CREDIT_TOWER_S = 19032, HP_KILL_CREDIT_TOWER_N = 19028, HP_KILL_CREDIT_TOWER_W = 19029 }; class OutdoorPvPHP; class HPControlZoneHandler : public OutdoorPvPControlZoneHandler { public: explicit HPControlZoneHandler(OutdoorPvPHP* pvp); void SetFlagGuid(ObjectGuid const& guid) { _flagGuid = guid; } void SetTextCaptureHorde(uint32 text) { _textCaptureHorde = text; } void SetTextCaptureAlliance(uint32 text) { _textCaptureAlliance = text; } void SetFlagArtKitNeutral(uint32 artKit) { _flagArtKitNeutral = artKit; } void SetFlagArtKitHorde(uint32 artKit) { _flagArtKitHorde = artKit; } void SetFlagArtKitAlliance(uint32 artKit) { _flagArtKitAlliance = artKit; } void SetWorldstateNeutral(uint32 id) { _worldstateNeutral = id; } void SetWorldstateHorde(uint32 id) { _worldstateHorde = id; } void SetWorldstateAlliance(uint32 id) { _worldstateAlliance = id; } void SetKillCredit(uint32 credit) { _killCredit = credit; } 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 GetWorldStateNeutral() { return _worldstateNeutral; } uint32 GetWorldStateHorde() { return _worldstateHorde; } uint32 GetWorldStateAlliance() { return _worldstateAlliance; } OutdoorPvPHP* GetOutdoorPvPHP() const; private: ObjectGuid _flagGuid; uint32 _textCaptureAlliance; uint32 _textCaptureHorde; uint32 _flagArtKitNeutral; uint32 _flagArtKitHorde; uint32 _flagArtKitAlliance; uint32 _worldstateNeutral; uint32 _worldstateHorde; uint32 _worldstateAlliance; uint32 _killCredit; }; class OutdoorPvPHP : public OutdoorPvP { public: OutdoorPvPHP(Map* map); bool SetupOutdoorPvP() override; void OnGameObjectCreate(GameObject* go) 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); private: uint32 m_AllianceTowersControlled; // how many towers are controlled uint32 m_HordeTowersControlled; GuidUnorderedSet _controlZoneGUIDs; HPControlZoneHandler& GetControlZoneTowerNorthHandler() { return *static_cast(ControlZoneHandlers[HP_GO_ENTRY_TOWER_N].get()); } HPControlZoneHandler& GetControlZoneTowerSouthHandler() { return *static_cast(ControlZoneHandlers[HP_GO_ENTRY_TOWER_S].get()); } HPControlZoneHandler& GetControlZoneTowerWestHandler() { return *static_cast(ControlZoneHandlers[HP_GO_ENTRY_TOWER_W].get()); } }; #endif