diff --git a/sql/updates/world/3.3.5/2018_01_16_00_world.sql b/sql/updates/world/3.3.5/2018_01_16_00_world.sql new file mode 100644 index 00000000000..81d9eb5ec7d --- /dev/null +++ b/sql/updates/world/3.3.5/2018_01_16_00_world.sql @@ -0,0 +1,3 @@ +-- +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 866efa6c96f..412fb638afc 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -3135,13 +3135,13 @@ ObjectList* SmartScript::GetTargets(SmartScriptHolder const& e, Unit* invoker /* } 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)) - l->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)) + l->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 f4da44901ff..988c12403fc 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -454,7 +454,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 %d 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 9778f824f67..756449a72a5 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -1217,7 +1217,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 }; @@ -1345,7 +1345,7 @@ struct SmartTarget struct { - uint32 seat; + uint32 seatMask; } vehicle; }; };