diff options
author | Jeremy <Golrag@users.noreply.github.com> | 2023-08-15 21:33:59 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-15 21:33:59 +0200 |
commit | 1ab7050cb72544faa6a7fa17a0bf644e22538ff3 (patch) | |
tree | 85867b3e04fb8226c5cc20e7c0d9e96540dfe117 /src | |
parent | fefc7192631764245396cd2622aa11f649411946 (diff) |
Core/Scripts: Add ZoneScript hook for AreaTrigger creation/deletion (#29236)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/AreaTrigger/AreaTrigger.cpp | 11 | ||||
-rw-r--r-- | src/server/game/Maps/ZoneScript.h | 4 |
2 files changed, 15 insertions, 0 deletions
diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp index 82716129e28..cea910b24c4 100644 --- a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp +++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp @@ -39,6 +39,7 @@ #include "Transport.h" #include "Unit.h" #include "UpdateData.h" +#include "ZoneScript.h" #include "advstd.h" #include <bit> @@ -63,6 +64,9 @@ void AreaTrigger::AddToWorld() ///- Register the AreaTrigger for guid lookup and for caster if (!IsInWorld()) { + if (m_zoneScript) + m_zoneScript->OnAreaTriggerCreate(this); + GetMap()->GetObjectsStore().Insert<AreaTrigger>(GetGUID(), this); if (_spawnId) GetMap()->GetAreaTriggerBySpawnIdStore().insert(std::make_pair(_spawnId, this)); @@ -76,6 +80,9 @@ void AreaTrigger::RemoveFromWorld() ///- Remove the AreaTrigger from the accessor and from all lists of objects in world if (IsInWorld()) { + if (m_zoneScript) + m_zoneScript->OnAreaTriggerRemove(this); + _isRemoved = true; if (Unit* caster = GetCaster()) @@ -114,6 +121,8 @@ bool AreaTrigger::Create(uint32 areaTriggerCreatePropertiesId, Unit* caster, Uni return false; } + SetZoneScript(); + _areaTriggerTemplate = _areaTriggerCreateProperties->Template; Object::_Create(ObjectGuid::Create<HighGuid::AreaTrigger>(GetMapId(), GetTemplate() ? GetTemplate()->Id.Id : 0, caster->GetMap()->GenerateLowGuid<HighGuid::AreaTrigger>())); @@ -254,6 +263,8 @@ bool AreaTrigger::CreateServer(Map* map, AreaTriggerTemplate const* areaTriggerT return false; } + SetZoneScript(); + _areaTriggerTemplate = areaTriggerTemplate; Object::_Create(ObjectGuid::Create<HighGuid::AreaTrigger>(GetMapId(), areaTriggerTemplate->Id.Id, GetMap()->GenerateLowGuid<HighGuid::AreaTrigger>())); diff --git a/src/server/game/Maps/ZoneScript.h b/src/server/game/Maps/ZoneScript.h index 02da0e1261c..5364ccc7fb8 100644 --- a/src/server/game/Maps/ZoneScript.h +++ b/src/server/game/Maps/ZoneScript.h @@ -21,6 +21,7 @@ #include "Define.h" #include "ObjectGuid.h" +class AreaTrigger; class Creature; class GameObject; class Player; @@ -49,6 +50,9 @@ class TC_GAME_API ZoneScript 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(Unit*) { } //All-purpose data storage ObjectGuid |