Core/SAI: Split set/remove unit_flags actions

Port From (https://github.com/TrinityCore/TrinityCore/commit/e80777cb39d5eb940348300aa2a6d42cede039a8)
This commit is contained in:
hondacrx
2022-05-29 23:06:21 -04:00
parent 6086ae63f3
commit ba7b2e42a3
2 changed files with 97 additions and 3 deletions
+55 -3
View File
@@ -824,9 +824,9 @@ namespace Game.AI
SmartActions.SetHover => Marshal.SizeOf(typeof(SmartAction.SetHover)),
SmartActions.SetHealthPct => Marshal.SizeOf(typeof(SmartAction.SetHealthPct)),
SmartActions.CreateConversation => Marshal.SizeOf(typeof(SmartAction.Conversation)),
//SmartActions.SetImmunePc => Marshal.SizeOf(typeof(SmartAction.Raw)),
//SmartActions.SetImmuneNpc => Marshal.SizeOf(typeof(SmartAction.Raw)),
//SmartActions.SetUninteractible => Marshal.SizeOf(typeof(SmartAction.Raw)),
SmartActions.SetImmunePC => Marshal.SizeOf(typeof(SmartAction.SetImmunePC)),
SmartActions.SetImmuneNPC => Marshal.SizeOf(typeof(SmartAction.SetImmuneNPC)),
SmartActions.SetUninteractible => Marshal.SizeOf(typeof(SmartAction.SetUninteractible)),
//SmartActions.ActivateGameobject => Marshal.SizeOf(typeof(SmartAction.Raw)),
SmartActions.AddToStoredTargetList => Marshal.SizeOf(typeof(SmartAction.AddToStoredTargets)),
SmartActions.BecomePersonalCloneForPlayer => Marshal.SizeOf(typeof(SmartAction.BecomePersonalClone)),
@@ -1370,6 +1370,7 @@ namespace Game.AI
case SmartEvents.FriendlyHealth:
case SmartEvents.TargetHealthPct:
case SmartEvents.IsBehindTarget:
case SmartEvents.TargetManaPct:
Log.outWarn(LogFilter.Sql, $"SmartAIMgr: Deprecated event_type({e.GetEventType()}), {e}, it might be removed in the future, loaded for now.");
break;
default:
@@ -2082,6 +2083,21 @@ namespace Game.AI
TC_SAI_IS_BOOLEAN_VALID(e, e.Action.setHealthRegen.regenHealth);
break;
}
case SmartActions.SetImmunePC:
{
TC_SAI_IS_BOOLEAN_VALID(e, e.Action.setImmunePC.immunePC);
break;
}
case SmartActions.SetImmuneNPC:
{
TC_SAI_IS_BOOLEAN_VALID(e, e.Action.setImmuneNPC.immuneNPC);
break;
}
case SmartActions.SetUninteractible:
{
TC_SAI_IS_BOOLEAN_VALID(e, e.Action.setUninteractible.uninteractible);
break;
}
case SmartActions.CreateConversation:
{
if (Global.ConversationDataStorage.GetConversationTemplate(e.Action.conversation.id) == null)
@@ -2171,6 +2187,21 @@ namespace Game.AI
return false;
}
// Additional check for deprecated
switch (e.GetActionType())
{
// Deprecated
case SmartActions.SetUnitFlag:
case SmartActions.RemoveUnitFlag:
case SmartActions.AddItem:
case SmartActions.AddDynamicFlag:
case SmartActions.RemoveDynamicFlag:
Log.outWarn(LogFilter.Sql, $"SmartAIMgr: Deprecated action_type: {e}, it might be removed in the future, loaded for now.");
break;
default:
break;
}
if (!CheckUnusedActionParams(e))
return false;
@@ -3204,6 +3235,15 @@ namespace Game.AI
[FieldOffset(4)]
public SetHealthPct setHealthPct;
[FieldOffset(4)]
public SetImmunePC setImmunePC;
[FieldOffset(4)]
public SetImmuneNPC setImmuneNPC;
[FieldOffset(4)]
public SetUninteractible setUninteractible;
[FieldOffset(4)]
public Conversation conversation;
@@ -3748,6 +3788,18 @@ namespace Game.AI
{
public uint percent;
}
public struct SetImmunePC
{
public uint immunePC;
}
public struct SetImmuneNPC
{
public uint immuneNPC;
}
public struct SetUninteractible
{
public uint uninteractible;
}
public struct Conversation
{
public uint id;
@@ -2458,6 +2458,48 @@ namespace Game.AI
break;
}
case SmartActions.SetImmunePC:
{
foreach (var target in targets)
{
if (IsUnit(target))
{
if (e.Action.setImmunePC.immunePC != 0)
target.ToUnit().AddUnitFlag(UnitFlags.ImmuneToPc);
else
target.ToUnit().RemoveUnitFlag(UnitFlags.ImmuneToPc);
}
}
break;
}
case SmartActions.SetImmuneNPC:
{
foreach (var target in targets)
{
if (IsUnit(target))
{
if (e.Action.setImmuneNPC.immuneNPC != 0)
target.ToUnit().AddUnitFlag(UnitFlags.ImmuneToNpc);
else
target.ToUnit().RemoveUnitFlag(UnitFlags.ImmuneToNpc);
}
}
break;
}
case SmartActions.SetUninteractible:
{
foreach (var target in targets)
{
if (IsUnit(target))
{
if (e.Action.setUninteractible.uninteractible != 0)
target.ToUnit().AddUnitFlag(UnitFlags.Uninteractible);
else
target.ToUnit().RemoveUnitFlag(UnitFlags.Uninteractible);
}
}
break;
}
case SmartActions.CreateConversation:
{
WorldObject baseObject = GetBaseObject();