diff --git a/Source/Game/Scripting/CoreScripts.cs b/Source/Game/Scripting/CoreScripts.cs index fad0cde3d..f415fd79b 100644 --- a/Source/Game/Scripting/CoreScripts.cs +++ b/Source/Game/Scripting/CoreScripts.cs @@ -396,14 +396,17 @@ namespace Game.Scripting public override bool IsDatabaseBound() { return true; } // Called when the area trigger is activated by a player. - public virtual bool OnTrigger(Player player, AreaTriggerRecord trigger, bool entered) { return false; } + public virtual bool OnTrigger(Player player, AreaTriggerRecord trigger) { return false; } + + // Called when the area trigger is left by a player. + public virtual bool OnExit(Player player, AreaTriggerRecord trigger) { return false; } } public class OnlyOnceAreaTriggerScript : AreaTriggerScript { public OnlyOnceAreaTriggerScript(string name) : base(name) { } - public override bool OnTrigger(Player player, AreaTriggerRecord trigger, bool entered) + public override bool OnTrigger(Player player, AreaTriggerRecord trigger) { uint triggerId = trigger.Id; InstanceScript instance = player.GetInstanceScript(); @@ -414,7 +417,7 @@ namespace Game.Scripting else instance.MarkAreaTriggerDone(triggerId); } - return _OnTrigger(player, trigger, entered); + return _OnTrigger(player, trigger); } void ResetAreaTriggerDone(InstanceScript script, uint triggerId) @@ -429,7 +432,7 @@ namespace Game.Scripting ResetAreaTriggerDone(instance, trigger.Id); } - public virtual bool _OnTrigger(Player player, AreaTriggerRecord trigger, bool entered) { return false; } + public virtual bool _OnTrigger(Player player, AreaTriggerRecord trigger) { return false; } } public class BattlegroundScript : ScriptObject diff --git a/Source/Game/Scripting/ScriptManager.cs b/Source/Game/Scripting/ScriptManager.cs index fa025d51e..c33c94e42 100644 --- a/Source/Game/Scripting/ScriptManager.cs +++ b/Source/Game/Scripting/ScriptManager.cs @@ -706,7 +706,7 @@ namespace Game.Scripting Cypher.Assert(player != null); Cypher.Assert(trigger != null); - return RunScriptRet(p => p.OnTrigger(player, trigger, entered), Global.ObjectMgr.GetAreaTriggerScriptId(trigger.Id)); + return RunScriptRet(p => entered ? p.OnTrigger(player, trigger) : p.OnExit(player, trigger), Global.ObjectMgr.GetAreaTriggerScriptId(trigger.Id)); } //BattlegroundScript diff --git a/Source/Scripts/Smart/SmartAI.cs b/Source/Scripts/Smart/SmartAI.cs index 17616c46a..28364b711 100644 --- a/Source/Scripts/Smart/SmartAI.cs +++ b/Source/Scripts/Smart/SmartAI.cs @@ -29,7 +29,7 @@ namespace Scripts.Smart { public SmartTrigger() : base("SmartTrigger") { } - public override bool OnTrigger(Player player, AreaTriggerRecord trigger, bool entered) + public override bool OnTrigger(Player player, AreaTriggerRecord trigger) { if (!player.IsAlive()) return false; diff --git a/Source/Scripts/World/AreaTrigger.cs b/Source/Scripts/World/AreaTrigger.cs index 0b2dec181..c91cb6713 100644 --- a/Source/Scripts/World/AreaTrigger.cs +++ b/Source/Scripts/World/AreaTrigger.cs @@ -148,7 +148,7 @@ namespace Scripts.World.Areatriggers { public AreaTrigger_at_coilfang_waterfall() : base("at_coilfang_waterfall") { } - public override bool OnTrigger(Player player, AreaTriggerRecord areaTrigger, bool entered) + public override bool OnTrigger(Player player, AreaTriggerRecord areaTrigger) { GameObject go = player.FindNearestGameObject(GameObjectIds.CoilfangWaterfall, 35.0f); if (go) @@ -164,7 +164,7 @@ namespace Scripts.World.Areatriggers { public AreaTrigger_at_legion_teleporter() : base("at_legion_teleporter") { } - public override bool OnTrigger(Player player, AreaTriggerRecord areaTrigger, bool entered) + public override bool OnTrigger(Player player, AreaTriggerRecord areaTrigger) { if (player.IsAlive() && !player.IsInCombat()) { @@ -191,7 +191,7 @@ namespace Scripts.World.Areatriggers { public AreaTrigger_at_stormwright_shelf() : base("at_stormwright_shelf") { } - public override bool OnTrigger(Player player, AreaTriggerRecord areaTrigger, bool entered) + public override bool OnTrigger(Player player, AreaTriggerRecord areaTrigger) { if (!player.IsDead() && player.GetQuestStatus(QuestIds.StrengthOfTheTempest) == QuestStatus.Incomplete) player.CastSpell(player, SpellIds.CreateTruePowerOfTheTempest, false); @@ -205,7 +205,7 @@ namespace Scripts.World.Areatriggers { public AreaTrigger_at_scent_larkorwi() : base("at_scent_larkorwi") { } - public override bool OnTrigger(Player player, AreaTriggerRecord areaTrigger, bool entered) + public override bool OnTrigger(Player player, AreaTriggerRecord areaTrigger) { if (!player.IsDead() && player.GetQuestStatus(QuestIds.ScentOfLarkorwi) == QuestStatus.Incomplete) { @@ -222,7 +222,7 @@ namespace Scripts.World.Areatriggers { public AreaTrigger_at_sholazar_waygate() : base("at_sholazar_waygate") { } - public override bool OnTrigger(Player player, AreaTriggerRecord areaTrigger, bool entered) + public override bool OnTrigger(Player player, AreaTriggerRecord areaTrigger) { if (!player.IsDead() && (player.GetQuestStatus(QuestIds.MeetingAGreatOne) != QuestStatus.None || (player.GetQuestStatus(QuestIds.TheMakersOverlook) == QuestStatus.Rewarded && player.GetQuestStatus(QuestIds.TheMakersPerch) == QuestStatus.Rewarded))) @@ -248,7 +248,7 @@ namespace Scripts.World.Areatriggers { public AreaTrigger_at_nats_landing() : base("at_nats_landing") { } - public override bool OnTrigger(Player player, AreaTriggerRecord areaTrigger, bool entered) + public override bool OnTrigger(Player player, AreaTriggerRecord areaTrigger) { if (!player.IsAlive() || !player.HasAura(SpellIds.FishPaste)) return false; @@ -283,7 +283,7 @@ namespace Scripts.World.Areatriggers }; } - public override bool OnTrigger(Player player, AreaTriggerRecord areaTrigger, bool entered) + public override bool OnTrigger(Player player, AreaTriggerRecord areaTrigger) { uint triggerId = areaTrigger.Id; // Second trigger happened too early after first, skip for now @@ -327,7 +327,7 @@ namespace Scripts.World.Areatriggers }; } - public override bool OnTrigger(Player player, AreaTriggerRecord areaTrigger, bool entered) + public override bool OnTrigger(Player player, AreaTriggerRecord areaTrigger) { float x = 0.0f, y = 0.0f, z = 0.0f; @@ -380,7 +380,7 @@ namespace Scripts.World.Areatriggers stormforgedEradictorGUID.Clear(); } - public override bool OnTrigger(Player player, AreaTriggerRecord areaTrigger, bool entered) + public override bool OnTrigger(Player player, AreaTriggerRecord areaTrigger) { if (player.GetQuestStatus(QuestIds.TheLonesomeWatcher) != QuestStatus.Incomplete) return false;