aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Scripting
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Scripting')
-rw-r--r--src/server/game/Scripting/ScriptMgr.cpp16
-rw-r--r--src/server/game/Scripting/ScriptMgr.h7
2 files changed, 12 insertions, 11 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