Core/Scripts: Implemented OnlyOnceAreaTriggerScript (#20288)

(cherry picked from commit 971ed856a4)
This commit is contained in:
Treeston
2017-09-15 03:53:02 +02:00
committed by Shauren
parent 77d13a7b97
commit fe938b99f8
26 changed files with 210 additions and 165 deletions

View File

@@ -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);