Core/SAI: Implemented new event type SMART_EVENT_AREATRIGGER_EXIT (88)
Port From (https://github.com/TrinityCore/TrinityCore/commit/0d5242daae3fab31ffc73faafa21ad65e5cd9670)
This commit is contained in:
@@ -188,7 +188,7 @@ namespace Framework.Constants
|
||||
TransportRemovePlayer = 43, // None
|
||||
TransportRelocate = 44, // Pointid
|
||||
InstancePlayerEnter = 45, // Team (0 Any), Cooldownmin, Cooldownmax
|
||||
AreatriggerOntrigger = 46, // Triggerid(0 Any)
|
||||
AreatriggerEnter = 46, // None
|
||||
QuestAccepted = 47, // None
|
||||
QuestObjCompletion = 48, // None
|
||||
QuestCompletion = 49, // None
|
||||
@@ -230,6 +230,7 @@ namespace Framework.Constants
|
||||
OnSpellStart = 85, // SpellID, CooldownMin, CooldownMax
|
||||
OnDespawn = 86, // NONE
|
||||
SendEventTrigger = 87, // NONE
|
||||
AreatriggerExit = 88, // None
|
||||
|
||||
End
|
||||
}
|
||||
|
||||
@@ -1207,7 +1207,12 @@ namespace Game.AI
|
||||
|
||||
public override void OnUnitEnter(Unit unit)
|
||||
{
|
||||
GetScript().ProcessEventsFor(SmartEvents.AreatriggerOntrigger, unit);
|
||||
GetScript().ProcessEventsFor(SmartEvents.AreatriggerEnter, unit);
|
||||
}
|
||||
|
||||
public override void OnUnitExit(Unit unit)
|
||||
{
|
||||
GetScript().ProcessEventsFor(SmartEvents.AreatriggerExit, unit);
|
||||
}
|
||||
|
||||
public void SetTimedActionList(SmartScriptHolder e, uint entry, Unit invoker)
|
||||
|
||||
@@ -121,7 +121,7 @@ namespace Game.AI
|
||||
{
|
||||
if (Global.AreaTriggerDataStorage.GetAreaTriggerTemplate(new AreaTriggerId((uint)temp.EntryOrGuid, false)) == null)
|
||||
{
|
||||
Log.outError(LogFilter.Sql, $"SmartAIMgr.LoadFromDB: AreaTrigger entry ({temp.EntryOrGuid} IsServerSide false) does not exist, skipped loading.");
|
||||
Log.outError(LogFilter.Sql, $"SmartAIMgr.LoadFromDB: AreaTrigger entry ({temp.EntryOrGuid} IsCustom false) does not exist, skipped loading.");
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
@@ -371,7 +371,7 @@ namespace Game.AI
|
||||
case SmartEvents.FollowCompleted:
|
||||
case SmartEvents.OnSpellclick:
|
||||
case SmartEvents.GoLootStateChanged:
|
||||
case SmartEvents.AreatriggerOntrigger:
|
||||
case SmartEvents.AreatriggerEnter:
|
||||
case SmartEvents.IcLos:
|
||||
case SmartEvents.OocLos:
|
||||
case SmartEvents.DistanceCreature:
|
||||
@@ -395,6 +395,7 @@ namespace Game.AI
|
||||
case SmartEvents.SceneCancel:
|
||||
case SmartEvents.SceneComplete:
|
||||
case SmartEvents.SendEventTrigger:
|
||||
case SmartEvents.AreatriggerExit:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
@@ -585,7 +586,7 @@ namespace Game.AI
|
||||
SmartEvents.TransportRemovePlayer => 0,
|
||||
SmartEvents.TransportRelocate => Marshal.SizeOf(typeof(SmartEvent.TransportRelocate)),
|
||||
SmartEvents.InstancePlayerEnter => Marshal.SizeOf(typeof(SmartEvent.InstancePlayerEnter)),
|
||||
SmartEvents.AreatriggerOntrigger => Marshal.SizeOf(typeof(SmartEvent.Areatrigger)),
|
||||
SmartEvents.AreatriggerEnter => 0,
|
||||
SmartEvents.QuestAccepted => 0,
|
||||
SmartEvents.QuestObjCompletion => 0,
|
||||
SmartEvents.QuestCompletion => 0,
|
||||
@@ -625,6 +626,7 @@ namespace Game.AI
|
||||
SmartEvents.OnSpellStart => Marshal.SizeOf(typeof(SmartEvent.SpellCast)),
|
||||
SmartEvents.OnDespawn => 0,
|
||||
SmartEvents.SendEventTrigger => 0,
|
||||
SmartEvents.AreatriggerExit => 0,
|
||||
_ => Marshal.SizeOf(typeof(SmartEvent.Raw)),
|
||||
};
|
||||
|
||||
@@ -1173,18 +1175,6 @@ namespace Game.AI
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
case SmartEvents.AreatriggerOntrigger:
|
||||
{
|
||||
if (e.Event.areatrigger.id != 0 && (e.GetScriptType() == SmartScriptType.AreaTriggerEntity || e.GetScriptType() == SmartScriptType.AreaTriggerEntityCustom))
|
||||
{
|
||||
Log.outError(LogFilter.Sql, $"SmartAIMgr: Entry {e.EntryOrGuid} SourceType {e.GetScriptType()} Event {e.EventId} Action {e.GetActionType()} areatrigger param not supported for SMART_SCRIPT_TYPE_AREATRIGGER_ENTITY and SMART_SCRIPT_TYPE_AREATRIGGER_ENTITY_CUSTOM, skipped.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (e.Event.areatrigger.id != 0 && !IsAreaTriggerValid(e, e.Event.areatrigger.id))
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
case SmartEvents.TextOver:
|
||||
{
|
||||
if (!IsTextValid(e, e.Event.textOver.textGroupID))
|
||||
@@ -1339,6 +1329,8 @@ namespace Game.AI
|
||||
case SmartEvents.WaypointResumed:
|
||||
case SmartEvents.WaypointStopped:
|
||||
case SmartEvents.WaypointEnded:
|
||||
case SmartEvents.AreatriggerEnter:
|
||||
case SmartEvents.AreatriggerExit:
|
||||
case SmartEvents.GossipSelect:
|
||||
case SmartEvents.GossipHello:
|
||||
case SmartEvents.JustCreated:
|
||||
@@ -2382,15 +2374,6 @@ namespace Game.AI
|
||||
}
|
||||
return true;
|
||||
}
|
||||
static bool IsAreaTriggerValid(SmartScriptHolder e, uint entry)
|
||||
{
|
||||
if (!CliDB.AreaTriggerStorage.ContainsKey(entry))
|
||||
{
|
||||
Log.outError(LogFilter.ScriptsAi, $"SmartAIMgr: {e} uses non-existent AreaTrigger entry {entry}, skipped.");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
static bool IsSoundValid(SmartScriptHolder e, uint entry)
|
||||
{
|
||||
if (!CliDB.SoundKitStorage.ContainsKey(entry))
|
||||
@@ -2504,7 +2487,7 @@ namespace Game.AI
|
||||
SmartEvents.TransportRemovePlayer => SmartScriptTypeMaskId.Transport,
|
||||
SmartEvents.TransportRelocate => SmartScriptTypeMaskId.Transport,
|
||||
SmartEvents.InstancePlayerEnter => SmartScriptTypeMaskId.Instance,
|
||||
SmartEvents.AreatriggerOntrigger => SmartScriptTypeMaskId.Areatrigger + SmartScriptTypeMaskId.AreatrigggerEntity,
|
||||
SmartEvents.AreatriggerEnter => SmartScriptTypeMaskId.Areatrigger + SmartScriptTypeMaskId.AreatrigggerEntity,
|
||||
SmartEvents.QuestAccepted => SmartScriptTypeMaskId.Quest,
|
||||
SmartEvents.QuestObjCompletion => SmartScriptTypeMaskId.Quest,
|
||||
SmartEvents.QuestRewarded => SmartScriptTypeMaskId.Quest,
|
||||
@@ -2546,6 +2529,7 @@ namespace Game.AI
|
||||
SmartEvents.OnSpellStart => SmartScriptTypeMaskId.Creature,
|
||||
SmartEvents.OnDespawn => SmartScriptTypeMaskId.Creature,
|
||||
SmartEvents.SendEventTrigger => SmartScriptTypeMaskId.Event,
|
||||
SmartEvents.AreatriggerExit => SmartScriptTypeMaskId.Areatrigger + SmartScriptTypeMaskId.AreatrigggerEntity,
|
||||
_ => 0,
|
||||
};
|
||||
|
||||
@@ -2695,9 +2679,6 @@ namespace Game.AI
|
||||
[FieldOffset(16)]
|
||||
public InstancePlayerEnter instancePlayerEnter;
|
||||
|
||||
[FieldOffset(16)]
|
||||
public Areatrigger areatrigger;
|
||||
|
||||
[FieldOffset(16)]
|
||||
public TextOver textOver;
|
||||
|
||||
@@ -2867,10 +2848,6 @@ namespace Game.AI
|
||||
public uint cooldownMin;
|
||||
public uint cooldownMax;
|
||||
}
|
||||
public struct Areatrigger
|
||||
{
|
||||
public uint id;
|
||||
}
|
||||
public struct TextOver
|
||||
{
|
||||
public uint textGroupID;
|
||||
|
||||
@@ -3217,17 +3217,19 @@ namespace Game.AI
|
||||
case SmartEvents.Death:
|
||||
case SmartEvents.Evade:
|
||||
case SmartEvents.ReachedHome:
|
||||
case SmartEvents.Reset:
|
||||
case SmartEvents.CorpseRemoved:
|
||||
case SmartEvents.AiInit:
|
||||
case SmartEvents.TransportAddplayer:
|
||||
case SmartEvents.TransportRemovePlayer:
|
||||
case SmartEvents.AreatriggerEnter:
|
||||
case SmartEvents.JustSummoned:
|
||||
case SmartEvents.Reset:
|
||||
case SmartEvents.JustCreated:
|
||||
case SmartEvents.FollowCompleted:
|
||||
case SmartEvents.OnSpellclick:
|
||||
case SmartEvents.OnDespawn:
|
||||
case SmartEvents.SendEventTrigger:
|
||||
case SmartEvents.AreatriggerExit:
|
||||
ProcessAction(e, unit, var0, var1, bvar, spell, gob);
|
||||
break;
|
||||
case SmartEvents.GossipHello:
|
||||
@@ -3436,13 +3438,6 @@ namespace Game.AI
|
||||
ProcessAction(e, unit, var0);
|
||||
break;
|
||||
}
|
||||
case SmartEvents.AreatriggerOntrigger:
|
||||
{
|
||||
if (e.Event.areatrigger.id != 0 && var0 != e.Event.areatrigger.id)
|
||||
return;
|
||||
ProcessAction(e, unit, var0);
|
||||
break;
|
||||
}
|
||||
case SmartEvents.TextOver:
|
||||
{
|
||||
if (var0 != e.Event.textOver.textGroupID || (e.Event.textOver.creatureEntry != 0 && e.Event.textOver.creatureEntry != var1))
|
||||
|
||||
@@ -17,13 +17,19 @@ namespace Scripts.Smart
|
||||
|
||||
public override bool OnTrigger(Player player, AreaTriggerRecord trigger)
|
||||
{
|
||||
if (!player.IsAlive())
|
||||
return false;
|
||||
|
||||
Log.outDebug(LogFilter.ScriptsAi, "AreaTrigger {0} is using SmartTrigger script", trigger.Id);
|
||||
Log.outDebug(LogFilter.ScriptsAi, $"AreaTrigger {trigger.Id} is using SmartTrigger script");
|
||||
SmartScript script = new();
|
||||
script.OnInitialize(player, trigger);
|
||||
script.ProcessEventsFor(SmartEvents.AreatriggerOntrigger, player, trigger.Id);
|
||||
script.ProcessEventsFor(SmartEvents.AreatriggerEnter, player);
|
||||
return true;
|
||||
}
|
||||
|
||||
public override bool OnExit(Player player, AreaTriggerRecord trigger)
|
||||
{
|
||||
Log.outDebug(LogFilter.ScriptsAi, $"AreaTrigger {trigger.Id} exit is using SmartTrigger script");
|
||||
SmartScript script = new();
|
||||
script.OnInitialize(player, trigger);
|
||||
script.ProcessEventsFor(SmartEvents.AreatriggerExit, player);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user