diff options
author | Treeston <treeston.mmoc@gmail.com> | 2017-09-15 03:53:02 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2020-08-29 00:41:22 +0200 |
commit | fe938b99f843df3f6c120695db38f327bd55ea94 (patch) | |
tree | b6e47409a22c4262ac6657272842c1205f986f0c /src/server/game/Scripting/ScriptMgr.cpp | |
parent | 77d13a7b97d4b9d243ce753ca02ae94d9e10b17e (diff) |
Core/Scripts: Implemented OnlyOnceAreaTriggerScript (#20288)
(cherry picked from commit 971ed856a49dc56ea33d9a0779b1386eea5cd3ca)
Diffstat (limited to 'src/server/game/Scripting/ScriptMgr.cpp')
-rw-r--r-- | src/server/game/Scripting/ScriptMgr.cpp | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index f6f26e457f2..b70994a3ed2 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -26,6 +26,7 @@ #include "Errors.h" #include "GameObject.h" #include "GossipDef.h" +#include "InstanceScript.h" #include "Item.h" #include "LFGScripts.h" #include "Log.h" @@ -2353,7 +2354,22 @@ AreaTriggerScript::AreaTriggerScript(const char* name) ScriptRegistry<AreaTriggerScript>::Instance()->AddScript(this); } -BattlegroundScript::BattlegroundScript(const char* name) +bool OnlyOnceAreaTriggerScript::OnTrigger(Player* player, AreaTriggerEntry const* trigger, bool entered) +{ + uint32 const triggerId = trigger->ID; + if (InstanceScript* instance = player->GetInstanceScript()) + { + if (instance->IsAreaTriggerDone(triggerId)) + return true; + else + instance->MarkAreaTriggerDone(triggerId); + } + return _OnTrigger(player, trigger, entered); +} +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); } + +BattlegroundScript::BattlegroundScript(char const* name) : ScriptObject(name) { ScriptRegistry<BattlegroundScript>::Instance()->AddScript(this); |