Core/Scripts: Implemented OnlyOnceAreaTriggerScript

Port From (https://github.com/TrinityCore/TrinityCore/commit/fe938b99f843df3f6c120695db38f327bd55ea94)
This commit is contained in:
hondacrx
2020-09-03 11:53:58 -04:00
parent cbd3904e02
commit 98cc0484ce
4 changed files with 69 additions and 5 deletions
+33
View File
@@ -366,6 +366,39 @@ namespace Game.Scripting
public virtual bool OnTrigger(Player player, AreaTriggerRecord trigger, bool entered) { return false; }
}
public class OnlyOnceAreaTriggerScript : AreaTriggerScript
{
public OnlyOnceAreaTriggerScript(string name) : base(name) { }
public override bool OnTrigger(Player player, AreaTriggerRecord trigger, bool entered)
{
uint triggerId = trigger.Id;
InstanceScript instance = player.GetInstanceScript();
if (instance != null)
{
if (instance.IsAreaTriggerDone(triggerId))
return true;
else
instance.MarkAreaTriggerDone(triggerId);
}
return _OnTrigger(player, trigger, entered);
}
void ResetAreaTriggerDone(InstanceScript script, uint triggerId)
{
script.ResetAreaTriggerDone(triggerId);
}
void ResetAreaTriggerDone(Player player, AreaTriggerRecord trigger)
{
InstanceScript instance = player.GetInstanceScript();
if (instance != null)
ResetAreaTriggerDone(instance, trigger.Id);
}
public virtual bool _OnTrigger(Player player, AreaTriggerRecord trigger, bool entered) { return false; }
}
public class BattlegroundScript : ScriptObject
{
public BattlegroundScript(string name) : base(name)