Core/SmartAI: AI change on charmed

Port From (https://github.com/TrinityCore/TrinityCore/commit/8a4d731d55af63210e660727dc0aea68c8ecce05)
This commit is contained in:
hondacrx
2022-05-25 13:46:41 -04:00
parent f2ebe247ba
commit a59b3b8075
2 changed files with 36 additions and 26 deletions
+3
View File
@@ -759,6 +759,9 @@ namespace Game.AI
} }
GetScript().ProcessEventsFor(SmartEvents.Charmed, null, 0, 0, charmed); GetScript().ProcessEventsFor(SmartEvents.Charmed, null, 0, 0, charmed);
if (!GetScript().HasAnyEventWithFlag(SmartEventFlags.WhileCharmed)) // we can change AI if there are no events with this flag
base.OnCharmed(isNew);
} }
public override void DoAction(int param) public override void DoAction(int param)
+11 -4
View File
@@ -67,6 +67,7 @@ namespace Game.AI
uint _currentPriority; uint _currentPriority;
bool _eventSortingRequired; bool _eventSortingRequired;
uint _nestedEventsCounter; uint _nestedEventsCounter;
SmartEventFlags _allEventFlags;
Dictionary<uint, ObjectGuidList> _storedTargets = new(); Dictionary<uint, ObjectGuidList> _storedTargets = new();
@@ -4075,11 +4076,14 @@ namespace Game.AI
{ {
if (holder.Event.event_flags.HasAnyFlag(SmartEventFlags.DifficultyAll))//if has instance flag add only if in it if (holder.Event.event_flags.HasAnyFlag(SmartEventFlags.DifficultyAll))//if has instance flag add only if in it
{ {
if (obj != null && obj.GetMap().IsDungeon()) if (!(obj != null && obj.GetMap().IsDungeon()))
{ continue;
// TODO: fix it for new maps and difficulties // TODO: fix it for new maps and difficulties
switch (obj.GetMap().GetDifficultyID()) switch (obj.GetMap().GetDifficultyID())
{ {
case Difficulty.Normal: case Difficulty.Normal:
case Difficulty.Raid10N: case Difficulty.Raid10N:
if (holder.Event.event_flags.HasAnyFlag(SmartEventFlags.Difficulty0)) if (holder.Event.event_flags.HasAnyFlag(SmartEventFlags.Difficulty0))
@@ -4100,10 +4104,11 @@ namespace Game.AI
break; break;
default: default:
break; break;
} }
} }
continue;
} _allEventFlags |= holder.Event.event_flags;
_events.Add(holder);//NOTE: 'world(0)' events still get processed in ANY instance mode _events.Add(holder);//NOTE: 'world(0)' events still get processed in ANY instance mode
} }
} }
@@ -4354,6 +4359,8 @@ namespace Game.AI
return _trigger != null ? _atPlayer : GetBaseObject(); return _trigger != null ? _atPlayer : GetBaseObject();
} }
public bool HasAnyEventWithFlag(SmartEventFlags flag) { return _allEventFlags.HasAnyFlag(flag); }
public bool IsUnit(WorldObject obj) { return obj != null && (obj.IsTypeId(TypeId.Unit) || obj.IsTypeId(TypeId.Player)); } public bool IsUnit(WorldObject obj) { return obj != null && (obj.IsTypeId(TypeId.Unit) || obj.IsTypeId(TypeId.Player)); }
public bool IsPlayer(WorldObject obj) { return obj != null && obj.IsTypeId(TypeId.Player); } public bool IsPlayer(WorldObject obj) { return obj != null && obj.IsTypeId(TypeId.Player); }
public bool IsCreature(WorldObject obj) { return obj != null && obj.IsTypeId(TypeId.Unit); } public bool IsCreature(WorldObject obj) { return obj != null && obj.IsTypeId(TypeId.Unit); }