Core/Scripts: Implemented OnlyOnceAreaTriggerScript (#20288)

This commit is contained in:
Treeston
2017-09-15 03:53:02 +02:00
committed by Keader
parent 49daef4b77
commit 971ed856a4
26 changed files with 203 additions and 159 deletions

View File

@@ -2229,6 +2229,21 @@ AreaTriggerScript::AreaTriggerScript(char const* name)
ScriptRegistry<AreaTriggerScript>::Instance()->AddScript(this);
}
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);
}
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)
{

View File

@@ -448,6 +448,19 @@ class TC_GAME_API AreaTriggerScript : public ScriptObject
virtual bool OnTrigger(Player* /*player*/, AreaTriggerEntry const* /*trigger*/) { return false; }
};
class TC_GAME_API OnlyOnceAreaTriggerScript : public AreaTriggerScript
{
using AreaTriggerScript::AreaTriggerScript;
public:
bool OnTrigger(Player* /*player*/, AreaTriggerEntry const* /*trigger*/) override;
protected:
virtual bool _OnTrigger(Player* /*player*/, AreaTriggerEntry const* /*trigger*/) = 0;
void ResetAreaTriggerDone(InstanceScript* /*instance*/, uint32 /*triggerId*/);
void ResetAreaTriggerDone(Player const* /*player*/, AreaTriggerEntry const* /*trigger*/);
};
class TC_GAME_API BattlegroundScript : public ScriptObject
{
protected: