Core/SmartAI: Add actions SMART_ACTION_LEAVE_VEHICLE and SMART_ACTION_REMOVE_PASSENGERS.

Fix maxdist for SMART_TARGET_CLOSEST_PLAYER.
This commit is contained in:
kaelima
2011-10-25 23:50:00 +01:00
parent 6ca1487c48
commit f958fdf246
3 changed files with 55 additions and 4 deletions
@@ -1470,9 +1470,56 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
for (ObjectList::iterator itr = targets->begin(); itr != targets->end(); ++itr)
{
if (IsUnit(*itr) && (*itr)->ToUnit()->GetVehicleKit())
if (Unit* target = (*itr)->ToUnit())
{
me->EnterVehicle((*itr)->ToUnit(), e.action.enterVehicle.seat);
if (target->GetVehicleKit())
{
me->EnterVehicle(target, e.action.enterVehicle.seat);
delete targets;
return;
}
}
}
delete targets;
break;
}
case SMART_ACTION_LEAVE_VEHICLE:
{
ObjectList* targets = GetTargets(e, unit);
if (!targets)
return;
for (ObjectList::iterator itr = targets->begin(); itr != targets->end(); ++itr)
{
if (Unit* target = (*itr)->ToUnit())
{
if (!target->GetVehicle())
continue;
target->ExitVehicle();
delete targets;
return;
}
}
delete targets;
break;
}
case SMART_ACTION_REMOVE_PASSENGERS:
{
ObjectList* targets = GetTargets(e, unit);
if (!targets)
return;
for (ObjectList::iterator itr = targets->begin(); itr != targets->end(); ++itr)
{
if (!IsUnit(*itr))
continue;
if (Vehicle* veh = (*itr)->ToUnit()->GetVehicle())
{
veh->RemoveAllPassengers();
delete targets;
return;
}
@@ -2155,7 +2202,7 @@ ObjectList* SmartScript::GetTargets(SmartScriptHolder const& e, Unit* invoker /*
{
if (me)
{
Player* target = me->SelectNearestPlayer((float)(e.target.closest.dist ? e.target.closest.dist : 100));
Player* target = me->SelectNearestPlayer((float)e.target.playerDistance.dist);
if (target)
l->push_back(target);
}