From 834d2fa2708446c10458d4f2a07bb17217434234 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Sat, 13 Feb 2021 20:57:06 -0500 Subject: [PATCH] Core/SAI: Added new Flags argument for SMART_ACTION_SUMMON_CREATURE Port From (https://github.com/TrinityCore/TrinityCore/commit/e0278f05379ed470be8264d3f362360a52b3454d) --- Source/Framework/Constants/SmartAIConst.cs | 11 ++++++++++- Source/Game/AI/SmartScripts/SmartAIManager.cs | 1 + Source/Game/AI/SmartScripts/SmartScript.cs | 18 +++++++++++------- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/Source/Framework/Constants/SmartAIConst.cs b/Source/Framework/Constants/SmartAIConst.cs index 7bc5740d1..df65ade51 100644 --- a/Source/Framework/Constants/SmartAIConst.cs +++ b/Source/Framework/Constants/SmartAIConst.cs @@ -151,6 +151,15 @@ namespace Framework.Constants CombatMove = 0x40 //Prevents combat movement if cast successful. Allows movement on range, OOM, LOS } + public enum SmartActionSummonCreatureFlags + { + None = 0, + PersonalSpawn = 1, + PreferUnit = 2, + + All = PersonalSpawn | PreferUnit, + } + public enum SmartEvents { UpdateIc = 0, // Initialmin, Initialmax, Repeatmin, Repeatmax @@ -257,7 +266,7 @@ namespace Framework.Constants ActivateGobject = 9, // RandomEmote = 10, // Emoteid1, Emoteid2, Emoteid3... Cast = 11, // Spellid, Castflags, TriggeredFlags - SummonCreature = 12, // Creatureid, Summontype, Duration In Ms, Storageid, Attackinvoker, + SummonCreature = 12, // Creatureid, Summontype, Duration In Ms, Storageid, Attackinvoker, flags(SmartActionSummonCreatureFlags) ThreatSinglePct = 13, // Threat% ThreatAllPct = 14, // Threat% CallAreaexploredoreventhappens = 15, // Questid diff --git a/Source/Game/AI/SmartScripts/SmartAIManager.cs b/Source/Game/AI/SmartScripts/SmartAIManager.cs index fff69fe49..68a565300 100644 --- a/Source/Game/AI/SmartScripts/SmartAIManager.cs +++ b/Source/Game/AI/SmartScripts/SmartAIManager.cs @@ -2492,6 +2492,7 @@ namespace Game.AI public uint duration; public uint storageID; public uint attackInvoker; + public uint flags; // SmartActionSummonCreatureFlags } public struct ThreatPCT { diff --git a/Source/Game/AI/SmartScripts/SmartScript.cs b/Source/Game/AI/SmartScripts/SmartScript.cs index 0e4a2c88e..b887b5d5f 100644 --- a/Source/Game/AI/SmartScripts/SmartScript.cs +++ b/Source/Game/AI/SmartScripts/SmartScript.cs @@ -678,10 +678,10 @@ namespace Game.AI break; // If invoker was pet or charm - Player player = unit.GetCharmerOrOwnerPlayerOrPlayerItself(); - if (player && GetBaseObject() != null) + Player playerCharmed = unit.GetCharmerOrOwnerPlayerOrPlayerItself(); + if (playerCharmed && GetBaseObject() != null) { - player.GroupEventHappens(e.Action.quest.questId, GetBaseObject()); + playerCharmed.GroupEventHappens(e.Action.quest.questId, GetBaseObject()); Log.outDebug(LogFilter.ScriptsAi, "SmartScript.ProcessAction: SMART_ACTION_CALL_GROUPEVENTHAPPENS: Player {0}, group credit for quest {1}", unit.GetGUID().ToString(), e.Action.quest.questId); } @@ -1086,10 +1086,14 @@ namespace Game.AI } case SmartActions.SummonCreature: { - WorldObject summoner = GetBaseObjectOrUnit(unit); + SmartActionSummonCreatureFlags flags = (SmartActionSummonCreatureFlags)e.Action.summonCreature.flags; + bool preferUnit = flags.HasAnyFlag(SmartActionSummonCreatureFlags.PreferUnit); + WorldObject summoner = preferUnit ? unit : GetBaseObjectOrUnit(unit); if (summoner == null) break; - + + bool personalSpawn = flags.HasAnyFlag(SmartActionSummonCreatureFlags.PersonalSpawn); + float x, y, z, o; foreach (var target in targets) { @@ -1098,7 +1102,7 @@ namespace Game.AI y += e.Target.y; z += e.Target.z; o += e.Target.o; - Creature summon = summoner.SummonCreature(e.Action.summonCreature.creature, x, y, z, o, (TempSummonType)e.Action.summonCreature.type, e.Action.summonCreature.duration); + Creature summon = summoner.SummonCreature(e.Action.summonCreature.creature, x, y, z, o, (TempSummonType)e.Action.summonCreature.type, e.Action.summonCreature.duration, personalSpawn); if (summon != null) if (e.Action.summonCreature.attackInvoker != 0) summon.GetAI().AttackStart(target.ToUnit()); @@ -1107,7 +1111,7 @@ namespace Game.AI if (e.GetTargetType() != SmartTargets.Position) break; - Creature summon1 = summoner.SummonCreature(e.Action.summonCreature.creature, e.Target.x, e.Target.y, e.Target.z, e.Target.o, (TempSummonType)e.Action.summonCreature.type, e.Action.summonCreature.duration); + Creature summon1 = summoner.SummonCreature(e.Action.summonCreature.creature, e.Target.x, e.Target.y, e.Target.z, e.Target.o, (TempSummonType)e.Action.summonCreature.type, e.Action.summonCreature.duration, personalSpawn); if (summon1 != null) if (unit != null && e.Action.summonCreature.attackInvoker != 0) summon1.GetAI().AttackStart(unit);