Scripts/AreaTrigger: Added CanCaptureFlag and CaptureFlag hooks (#29237)

* also added related areatrigger script
This commit is contained in:
Jeremy
2023-08-24 22:25:15 +02:00
committed by GitHub
parent a9d459962b
commit 30f57de184
2 changed files with 22 additions and 0 deletions

View File

@@ -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

View File

@@ -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);
}