diff options
Diffstat (limited to 'src/server/scripts')
-rw-r--r-- | src/server/scripts/World/areatrigger_scripts.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/server/scripts/World/areatrigger_scripts.cpp b/src/server/scripts/World/areatrigger_scripts.cpp index 71f1f89ae3e..8bf43d076ac 100644 --- a/src/server/scripts/World/areatrigger_scripts.cpp +++ b/src/server/scripts/World/areatrigger_scripts.cpp @@ -407,6 +407,40 @@ struct areatrigger_stormwind_teleport_unit : AreaTriggerAI } }; +void HandleBuffAreaTrigger(Player* player) +{ + if (GameObject* buffObject = player->FindNearestGameObjectWithOptions(4.0f, { .StringId = "bg_buff_object" })) + { + buffObject->ActivateObject(GameObjectActions::Disturb, 0, player); + buffObject->DespawnOrUnsummon(); + } +} + +struct areatrigger_battleground_buffs : AreaTriggerAI +{ + areatrigger_battleground_buffs(AreaTrigger* areatrigger) : AreaTriggerAI(areatrigger) { } + + void OnUnitEnter(Unit* unit) override + { + if (!unit->IsPlayer()) + return; + + HandleBuffAreaTrigger(unit->ToPlayer()); + } +}; + +class AreaTrigger_at_battleground_buffs : public AreaTriggerScript +{ +public: + AreaTrigger_at_battleground_buffs() : AreaTriggerScript("at_battleground_buffs") { } + + bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override + { + HandleBuffAreaTrigger(player); + return true; + } +}; + void AddSC_areatrigger_scripts() { new AreaTrigger_at_coilfang_waterfall(); @@ -418,4 +452,6 @@ void AddSC_areatrigger_scripts() new AreaTrigger_at_area_52_entrance(); new AreaTrigger_at_frostgrips_hollow(); RegisterAreaTriggerAI(areatrigger_stormwind_teleport_unit); + RegisterAreaTriggerAI(areatrigger_battleground_buffs); + new AreaTrigger_at_battleground_buffs(); } |