mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-15 23:20:36 +01:00
118 lines
5.5 KiB
C++
118 lines
5.5 KiB
C++
/*
|
|
* 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 <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef ZONE_SCRIPT_H_
|
|
#define ZONE_SCRIPT_H_
|
|
|
|
#include "Define.h"
|
|
#include "ObjectGuid.h"
|
|
|
|
class AreaTrigger;
|
|
class Creature;
|
|
class CreatureGroup;
|
|
class GameObject;
|
|
class Player;
|
|
class Unit;
|
|
class WorldObject;
|
|
struct CreatureData;
|
|
|
|
enum class FlagState : uint8;
|
|
|
|
enum class EncounterType : uint8
|
|
{
|
|
DungeonEncounter,
|
|
Battleground,
|
|
MythicPlusRun
|
|
};
|
|
|
|
class TC_GAME_API ControlZoneHandler
|
|
{
|
|
public:
|
|
explicit ControlZoneHandler();
|
|
ControlZoneHandler(ControlZoneHandler const& right);
|
|
ControlZoneHandler(ControlZoneHandler&& right) noexcept;
|
|
ControlZoneHandler& operator=(ControlZoneHandler const& right);
|
|
ControlZoneHandler& operator=(ControlZoneHandler&& right) noexcept;
|
|
virtual ~ControlZoneHandler();
|
|
|
|
virtual void HandleCaptureEventHorde([[maybe_unused]] GameObject* controlZone) { }
|
|
virtual void HandleCaptureEventAlliance([[maybe_unused]] GameObject* controlZone) { }
|
|
virtual void HandleContestedEventHorde([[maybe_unused]] GameObject* controlZone) { }
|
|
virtual void HandleContestedEventAlliance([[maybe_unused]] GameObject* controlZone) { }
|
|
virtual void HandleProgressEventHorde([[maybe_unused]] GameObject* controlZone) { }
|
|
virtual void HandleProgressEventAlliance([[maybe_unused]] GameObject* controlZone) { }
|
|
virtual void HandleNeutralEventHorde([[maybe_unused]] GameObject* controlZone) { HandleNeutralEvent(controlZone); }
|
|
virtual void HandleNeutralEventAlliance([[maybe_unused]] GameObject* controlZone) { HandleNeutralEvent(controlZone); }
|
|
virtual void HandleNeutralEvent([[maybe_unused]] GameObject* controlZone) { }
|
|
};
|
|
|
|
class TC_GAME_API ZoneScript
|
|
{
|
|
public:
|
|
ZoneScript() noexcept;
|
|
ZoneScript(ZoneScript const& right);
|
|
ZoneScript(ZoneScript&& right) noexcept;
|
|
ZoneScript& operator=(ZoneScript const& right);
|
|
ZoneScript& operator=(ZoneScript&& right) noexcept;
|
|
virtual ~ZoneScript();
|
|
|
|
virtual uint32 GetCreatureEntry(ObjectGuid::LowType /*spawnId*/, CreatureData const* data);
|
|
virtual uint32 GetGameObjectEntry(ObjectGuid::LowType /*spawnId*/, uint32 entry) { return entry; }
|
|
|
|
virtual void OnCreatureCreate(Creature* ) { }
|
|
virtual void OnCreatureRemove(Creature* ) { }
|
|
|
|
virtual void OnGameObjectCreate(GameObject* ) { }
|
|
virtual void OnGameObjectRemove(GameObject* ) { }
|
|
|
|
virtual void OnAreaTriggerCreate([[maybe_unused]] AreaTrigger* areaTrigger) { }
|
|
virtual void OnAreaTriggerRemove([[maybe_unused]] AreaTrigger* areaTrigger) { }
|
|
|
|
virtual void OnUnitDeath([[maybe_unused]] Unit* unit) { }
|
|
|
|
// Triggers when the CreatureGroup no longer has any alive members (either last alive member dies or is removed from the group)
|
|
virtual void OnCreatureGroupDepleted([[maybe_unused]] CreatureGroup const* creatureGroup) { }
|
|
|
|
//All-purpose data storage ObjectGuid
|
|
virtual ObjectGuid GetGuidData(uint32 /*DataId*/) const { return ObjectGuid::Empty; }
|
|
virtual void SetGuidData(uint32 /*DataId*/, ObjectGuid /*Value*/) { }
|
|
|
|
//All-purpose data storage 64 bit
|
|
virtual uint64 GetData64(uint32 /*DataId*/) const { return 0; }
|
|
virtual void SetData64(uint32 /*DataId*/, uint64 /*Value*/) { }
|
|
|
|
//All-purpose data storage 32 bit
|
|
virtual uint32 GetData(uint32 /*DataId*/) const { return 0; }
|
|
virtual void SetData(uint32 /*DataId*/, uint32 /*Value*/) { }
|
|
|
|
virtual void TriggerGameEvent(uint32 gameEventId, WorldObject* source = nullptr, WorldObject* target = nullptr);
|
|
virtual void ProcessEvent([[maybe_unused]] WorldObject* obj, [[maybe_unused]] uint32 eventId, [[maybe_unused]] WorldObject* invoker) { }
|
|
virtual void DoAction([[maybe_unused]] uint32 actionId, [[maybe_unused]] WorldObject* source = nullptr, [[maybe_unused]] WorldObject* target = nullptr) { }
|
|
|
|
virtual void OnFlagStateChange([[maybe_unused]] GameObject* flagInBase, [[maybe_unused]] FlagState oldValue, [[maybe_unused]] FlagState newValue, [[maybe_unused]] Player* player) { }
|
|
|
|
virtual bool CanCaptureFlag([[maybe_unused]] AreaTrigger* areaTrigger, [[maybe_unused]] Player* player) { return false; }
|
|
virtual void OnCaptureFlag([[maybe_unused]] AreaTrigger* areaTrigger, [[maybe_unused]] Player* player) { }
|
|
|
|
// This hook is used with GAMEOBJECT_TYPE_FLAGSTAND. Newer gameobjects use GAMEOBJECT_TYPE_NEW_FLAG and should use `OnFlagStateChange`
|
|
virtual void OnFlagTaken([[maybe_unused]] GameObject* flag, [[maybe_unused]] Player* player) { }
|
|
// This hook is used with GAMEOBJECT_TYPE_FLAGSTAND. Newer gameobjects use GAMEOBJECT_TYPE_NEW_FLAG and should use `OnFlagStateChange`. The GameObject doesn't exist anymore, but the ObjectGuid does
|
|
virtual void OnFlagDropped([[maybe_unused]] ObjectGuid const& flagGuid, [[maybe_unused]] Player* player) { }
|
|
};
|
|
|
|
#endif
|