diff options
4 files changed, 9 insertions, 8 deletions
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 00000000000..6ad1b42cc68 --- /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; diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 36084e06989..68dfc5ed2e9 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -2851,13 +2851,13 @@ void SmartScript::GetTargets(ObjectVector& targets, SmartScriptHolder const& e, } break; } - case SMART_TARGET_VEHICLE_ACCESSORY: + case SMART_TARGET_VEHICLE_PASSENGER: { if (me && me->IsVehicle()) - { - if (Unit* target = me->GetVehicleKit()->GetPassenger(e.target.vehicle.seat)) - targets.push_back(target); - } + for (auto seatItr = me->GetVehicleKit()->Seats.begin(); seatItr != me->GetVehicleKit()->Seats.end(); ++seatItr) + if (!e.target.vehicle.seatMask || (e.target.vehicle.seatMask & (1 << seatItr->first))) + if (Unit* u = ObjectAccessor::GetUnit(*me, seatItr->second.Passenger.Guid)) + targets.push_back(u); break; } case SMART_TARGET_POSITION: diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index 17556730255..c5201c231e0 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -526,7 +526,7 @@ bool SmartAIMgr::IsTargetValid(SmartScriptHolder const& e) case SMART_TARGET_STORED: case SMART_TARGET_LOOT_RECIPIENTS: case SMART_TARGET_FARTHEST: - case SMART_TARGET_VEHICLE_ACCESSORY: + case SMART_TARGET_VEHICLE_PASSENGER: break; default: TC_LOG_ERROR("sql.sql", "SmartAIMgr: Not handled target_type(%u), Entry " SI64FMTD " SourceType %u Event %u Action %u, skipped.", e.GetTargetType(), e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType()); diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index 6c97f3cff4c..431a02f9b3f 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -1259,7 +1259,7 @@ enum SMARTAI_TARGETS SMART_TARGET_CLOSEST_FRIENDLY = 26, // maxDist, playerOnly SMART_TARGET_LOOT_RECIPIENTS = 27, // all players that have tagged this creature (for kill credit) SMART_TARGET_FARTHEST = 28, // maxDist, playerOnly, isInLos - SMART_TARGET_VEHICLE_ACCESSORY = 29, // seat number (vehicle can target it's own accessory) + SMART_TARGET_VEHICLE_PASSENGER = 29, // seatMask (0 - all seats) SMART_TARGET_END = 30 }; @@ -1387,7 +1387,7 @@ struct SmartTarget struct { - uint32 seat; + uint32 seatMask; } vehicle; }; }; |