aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMoein <tje3d@yahoo.com>2018-01-16 23:58:41 +0330
committerShauren <shauren.trinity@gmail.com>2018-01-16 21:28:41 +0100
commit891bca934e1522fe33b00e27eef5d4f07bb83fa8 (patch)
treee930d433d15323b720108fb34f4939a3e9d2535b /src
parent3d7166c1c78e0e0011af840b76f3f5a8ccccaaa0 (diff)
Core/SAI: Extended SMART_TARGET_VEHICLE_PASSENGER to allow specifying seat mask instead of single seat index (can now target all passengers) (#21245)
Diffstat (limited to 'src')
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp10
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.cpp2
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.h4
3 files changed, 8 insertions, 8 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp
index 6e6da6f6ca1..3b99529853f 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScript.cpp
@@ -2687,13 +2687,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 d521ca2ac84..e90c696d777 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
@@ -484,7 +484,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 8b180e40f1c..7a82840c8d4 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
@@ -1187,7 +1187,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
};
@@ -1315,7 +1315,7 @@ struct SmartTarget
struct
{
- uint32 seat;
+ uint32 seatMask;
} vehicle;
};
};