From be2f4087b70aceb740754b0cfe397412cfe67c4c Mon Sep 17 00:00:00 2001 From: hondacrx Date: Tue, 22 Jun 2021 20:55:38 -0400 Subject: [PATCH] Core/SAI: Extended SMART_TARGET_VEHICLE_PASSENGER to allow specifying seat mask instead of single seat index (can now target all passengers) Port From (https://github.com/TrinityCore/TrinityCore/commit/172df39350391e4fa2e40515d288e7e4e6b9cc91) --- Source/Framework/Constants/SmartAIConst.cs | 2 +- Source/Game/AI/SmartScripts/SmartAIManager.cs | 4 ++-- Source/Game/AI/SmartScripts/SmartScript.cs | 14 ++++++++++---- .../2021_06_16_01_world_2018_01_16_00_world.sql | 1 + 4 files changed, 14 insertions(+), 7 deletions(-) create mode 100644 sql/updates/world/master/2021_06_16_01_world_2018_01_16_00_world.sql diff --git a/Source/Framework/Constants/SmartAIConst.cs b/Source/Framework/Constants/SmartAIConst.cs index 2d61a66d7..76a089065 100644 --- a/Source/Framework/Constants/SmartAIConst.cs +++ b/Source/Framework/Constants/SmartAIConst.cs @@ -426,7 +426,7 @@ namespace Framework.Constants ClosestFriendly = 26, // maxDist, playerOnly LootRecipients = 27, // all players that have tagged this creature (for kill credit) Farthest = 28, // maxDist, playerOnly, isInLos - VehicleAccessory = 29, // seat number (vehicle can target it's own accessory) + VehiclePassenger = 29, // seatMask (0 - all seats) SpellTarget = 30, End = 31 diff --git a/Source/Game/AI/SmartScripts/SmartAIManager.cs b/Source/Game/AI/SmartScripts/SmartAIManager.cs index 34947934a..41216e5a5 100644 --- a/Source/Game/AI/SmartScripts/SmartAIManager.cs +++ b/Source/Game/AI/SmartScripts/SmartAIManager.cs @@ -447,7 +447,7 @@ namespace Game.AI case SmartTargets.Stored: case SmartTargets.LootRecipients: case SmartTargets.Farthest: - case SmartTargets.VehicleAccessory: + case SmartTargets.VehiclePassenger: case SmartTargets.SpellTarget: break; default: @@ -3130,7 +3130,7 @@ namespace Game.AI } public struct Vehicle { - public uint seat; + public uint seatMask; } public struct Raw { diff --git a/Source/Game/AI/SmartScripts/SmartScript.cs b/Source/Game/AI/SmartScripts/SmartScript.cs index 333ecbdd9..90097ea67 100644 --- a/Source/Game/AI/SmartScripts/SmartScript.cs +++ b/Source/Game/AI/SmartScripts/SmartScript.cs @@ -2901,13 +2901,19 @@ namespace Game.AI } break; } - case SmartTargets.VehicleAccessory: + case SmartTargets.VehiclePassenger: { if (_me && _me.IsVehicle()) { - Unit target = _me.GetVehicleKit().GetPassenger((sbyte)e.Target.vehicle.seat); - if (target) - targets.Add(target); + foreach (var pair in _me.GetVehicleKit().Seats) + { + if (e.Target.vehicle.seatMask == 0 || (e.Target.vehicle.seatMask & (1 << pair.Key)) != 0) + { + Unit u = Global.ObjAccessor.GetUnit(_me, pair.Value.Passenger.Guid); + if (u != null) + targets.Add(u); + } + } } break; } diff --git a/sql/updates/world/master/2021_06_16_01_world_2018_01_16_00_world.sql b/sql/updates/world/master/2021_06_16_01_world_2018_01_16_00_world.sql new file mode 100644 index 000000000..6ad1b42cc --- /dev/null +++ b/sql/updates/world/master/2021_06_16_01_world_2018_01_16_00_world.sql @@ -0,0 +1 @@ +UPDATE `smart_scripts` SET `target_param1`=(1 << `target_param1`) WHERE `target_type`=29;