diff options
-rw-r--r-- | src/server/game/Maps/ZoneScript.h | 3 | ||||
-rw-r--r-- | src/server/scripts/World/areatrigger_scripts.cpp | 19 |
2 files changed, 22 insertions, 0 deletions
diff --git a/src/server/game/Maps/ZoneScript.h b/src/server/game/Maps/ZoneScript.h index 5364ccc7fb8..792989f6a61 100644 --- a/src/server/game/Maps/ZoneScript.h +++ b/src/server/game/Maps/ZoneScript.h @@ -71,6 +71,9 @@ class TC_GAME_API ZoneScript virtual void ProcessEvent(WorldObject* /*obj*/, uint32 /*eventId*/, WorldObject* /*invoker*/) { } 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) { } }; #endif diff --git a/src/server/scripts/World/areatrigger_scripts.cpp b/src/server/scripts/World/areatrigger_scripts.cpp index 8bf43d076ac..a46c5cc0f3f 100644 --- a/src/server/scripts/World/areatrigger_scripts.cpp +++ b/src/server/scripts/World/areatrigger_scripts.cpp @@ -16,6 +16,7 @@ */ #include "ScriptMgr.h" +#include "AreaTrigger.h" #include "AreaTriggerAI.h" #include "DB2Structure.h" #include "GameObject.h" @@ -26,6 +27,7 @@ #include "Player.h" #include "TemporarySummon.h" #include "World.h" +#include "ZoneScript.h" /*###### ## at_coilfang_waterfall @@ -441,6 +443,22 @@ public: } }; +struct areatrigger_action_capture_flag : AreaTriggerAI +{ + areatrigger_action_capture_flag(AreaTrigger* areatrigger) : AreaTriggerAI(areatrigger) { } + + void OnUnitEnter(Unit* unit) override + { + if (!unit->IsPlayer()) + return; + + Player* player = unit->ToPlayer(); + if (ZoneScript* zoneScript = at->GetZoneScript()) + if (zoneScript->CanCaptureFlag(at, player)) + zoneScript->OnCaptureFlag(at, player); + } +}; + void AddSC_areatrigger_scripts() { new AreaTrigger_at_coilfang_waterfall(); @@ -454,4 +472,5 @@ void AddSC_areatrigger_scripts() RegisterAreaTriggerAI(areatrigger_stormwind_teleport_unit); RegisterAreaTriggerAI(areatrigger_battleground_buffs); new AreaTrigger_at_battleground_buffs(); + RegisterAreaTriggerAI(areatrigger_action_capture_flag); } |