diff options
Diffstat (limited to 'src')
9 files changed, 19 insertions, 18 deletions
diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index 709018a98ed..0943147095d 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -2439,14 +2439,14 @@ AreaTriggerScript::AreaTriggerScript(char const* name) bool OnlyOnceAreaTriggerScript::OnTrigger(Player* player, AreaTriggerEntry const* trigger) { uint32 const triggerId = trigger->ID; - if (InstanceScript* instance = player->GetInstanceScript()) - { - if (instance->IsAreaTriggerDone(triggerId)) - return true; - else - instance->MarkAreaTriggerDone(triggerId); - } - return _OnTrigger(player, trigger); + InstanceScript* instance = player->GetInstanceScript(); + if (instance && instance->IsAreaTriggerDone(triggerId)) + return true; + + if (TryHandleOnce(player, trigger) && instance) + instance->MarkAreaTriggerDone(triggerId); + + return true; } void OnlyOnceAreaTriggerScript::ResetAreaTriggerDone(InstanceScript* script, uint32 triggerId) { script->ResetAreaTriggerDone(triggerId); } void OnlyOnceAreaTriggerScript::ResetAreaTriggerDone(Player const* player, AreaTriggerEntry const* trigger) { if (InstanceScript* instance = player->GetInstanceScript()) ResetAreaTriggerDone(instance, trigger->ID); } diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 3941d450575..3c343d32650 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -469,9 +469,10 @@ class TC_GAME_API OnlyOnceAreaTriggerScript : public AreaTriggerScript bool OnTrigger(Player* player, AreaTriggerEntry const* trigger) final; protected: - virtual bool _OnTrigger(Player* player, AreaTriggerEntry const* trigger) = 0; - void ResetAreaTriggerDone(InstanceScript* instance, uint32 triggerId); - void ResetAreaTriggerDone(Player const* player, AreaTriggerEntry const* trigger); + // returns true if the trigger was successfully handled, false if we should try again next time + virtual bool TryHandleOnce(Player* /*player*/, AreaTriggerEntry const* /*trigger*/) = 0; + void ResetAreaTriggerDone(InstanceScript* /*instance*/, uint32 /*triggerId*/); + void ResetAreaTriggerDone(Player const* /*player*/, AreaTriggerEntry const* /*trigger*/); }; class TC_GAME_API BattlefieldScript : public ScriptObject diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp index c1e0a9f9ff1..9e14a09ed3c 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp @@ -159,7 +159,7 @@ class at_baltharus_plateau : public OnlyOnceAreaTriggerScript public: at_baltharus_plateau() : OnlyOnceAreaTriggerScript("at_baltharus_plateau") { } - bool _OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override + bool TryHandleOnce(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override { // Only trigger once if (InstanceScript* instance = player->GetInstanceScript()) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp index 91e5208be6c..6816185539b 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp @@ -1007,7 +1007,7 @@ class at_lady_deathwhisper_entrance : public OnlyOnceAreaTriggerScript public: at_lady_deathwhisper_entrance() : OnlyOnceAreaTriggerScript("at_lady_deathwhisper_entrance") { } - bool _OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override + bool TryHandleOnce(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override { if (InstanceScript* instance = player->GetInstanceScript()) if (instance->GetBossState(DATA_LADY_DEATHWHISPER) != DONE) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp index 4a41097adb5..7caff89ce37 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp @@ -773,7 +773,7 @@ class at_lord_marrowgar_entrance : public OnlyOnceAreaTriggerScript public: at_lord_marrowgar_entrance() : OnlyOnceAreaTriggerScript("at_lord_marrowgar_entrance") { } - bool _OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override + bool TryHandleOnce(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override { if (InstanceScript* instance = player->GetInstanceScript()) if (Creature* lordMarrowgar = ObjectAccessor::GetCreature(*player, instance->GetGuidData(DATA_LORD_MARROWGAR))) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp index 465bfaffa40..47d9ad5ea97 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp @@ -246,7 +246,7 @@ class at_anubrekhan_entrance : public OnlyOnceAreaTriggerScript public: at_anubrekhan_entrance() : OnlyOnceAreaTriggerScript("at_anubrekhan_entrance") { } - bool _OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override + bool TryHandleOnce(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override { InstanceScript* instance = player->GetInstanceScript(); if (!instance || instance->GetBossState(BOSS_ANUBREKHAN) != NOT_STARTED) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp b/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp index 7ff87390263..e0ce4254498 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp @@ -269,7 +269,7 @@ class at_faerlina_entrance : public OnlyOnceAreaTriggerScript public: at_faerlina_entrance() : OnlyOnceAreaTriggerScript("at_faerlina_entrance") { } - bool _OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override + bool TryHandleOnce(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override { InstanceScript* instance = player->GetInstanceScript(); if (!instance || instance->GetBossState(BOSS_FAERLINA) != NOT_STARTED) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp index a29cfda09ea..0baebfb12da 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp @@ -1218,7 +1218,7 @@ class at_thaddius_entrance : public OnlyOnceAreaTriggerScript public: at_thaddius_entrance() : OnlyOnceAreaTriggerScript("at_thaddius_entrance") { } - bool _OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override + bool TryHandleOnce(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override { InstanceScript* instance = player->GetInstanceScript(); if (!instance || instance->GetBossState(BOSS_THADDIUS) == DONE) diff --git a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp index bc7f5cbd66d..b65a29d8106 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp @@ -432,7 +432,7 @@ class at_teron_gorefiend_entrance : public OnlyOnceAreaTriggerScript public: at_teron_gorefiend_entrance() : OnlyOnceAreaTriggerScript("at_teron_gorefiend_entrance") { } - bool _OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override + bool TryHandleOnce(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override { if (InstanceScript* instance = player->GetInstanceScript()) if (Creature* teron = instance->GetCreature(DATA_TERON_GOREFIEND)) |