Core/SmartAI: added new target type (invoker's vehicle)

-added new action: ENTER_VEHICLE (79), param1: seatID

--HG--
branch : trunk
This commit is contained in:
Rat
2010-10-31 14:21:35 +01:00
parent b6c8158f88
commit 75c065637c
4 changed files with 32 additions and 3 deletions

View File

@@ -466,7 +466,6 @@ void SmartAI::MoveInLineOfSight(Unit* who)
{
if (!who) return;
GetScript()->OnMoveInLineOfSight(who);
//HasEscortState(SMART_ESCORT_ESCORTING) ||
if (me->HasReactState(REACT_PASSIVE) || AssistPlayerInCombat(who))
return;

View File

@@ -910,6 +910,21 @@ void SmartScript::ProcessAction(SmartScriptHolder &e, Unit* unit, uint32 var0, u
case SMART_ACTION_CALL_SCRIPT_RESET:
OnReset();
break;
case SMART_ACTION_ENTER_VEHICLE:
{
if (!me) return;
ObjectList* targets = GetTargets(e, unit);
if (!targets) return;
for (ObjectList::iterator itr = targets->begin(); itr != targets->end(); itr++)
{
if (IsUnit(*itr) && (*itr)->ToUnit()->GetVehicleKit())
{
me->EnterVehicle((*itr)->ToUnit()->GetVehicleKit(), e.action.enterVehicle.seat);
return;
}
}
break;
}
default:
sLog.outErrorDb("SmartScript::ProcessAction: Unhandled Action type %u", e.GetActionType());
break;
@@ -1062,6 +1077,12 @@ ObjectList* SmartScript::GetTargets(SmartScriptHolder e, Unit* invoker)
l->push_back(invoker);
}
break;
case SMART_TARGET_ACTION_INVOKER_VEHICLE:
if (invoker && invoker->GetVehicle() && invoker->GetVehicle()->GetBase())
{
l->push_back(invoker->GetVehicle()->GetBase());
}
break;
case SMART_TARGET_INVOKER_PARTY:
if (invoker)
{

View File

@@ -275,6 +275,7 @@ bool SmartAIMgr::IsTargetValid(SmartScriptHolder e)
case SMART_TARGET_CLOSEST_CREATURE:
case SMART_TARGET_CLOSEST_GAMEOBJECT:
case SMART_TARGET_CLOSEST_PLAYER:
case SMART_TARGET_ACTION_INVOKER_VEHICLE:
break;
default:
sLog.outErrorDb("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());
@@ -738,6 +739,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder e)
case SMART_ACTION_RESET_SCRIPT_BASE_OBJECT:
case SMART_ACTION_ACTIVATE_GOBJECT:
case SMART_ACTION_CALL_SCRIPT_RESET:
case SMART_ACTION_ENTER_VEHICLE:
case SMART_ACTION_NONE:
break;
default:

View File

@@ -424,7 +424,8 @@ enum SMART_ACTION
SMART_ACTION_OVERRIDE_SCRIPT_BASE_OBJECT = 76, //1 // target(first found used), WARNING: CAN CRASH CORE, do not use if you dont know what you are doing
SMART_ACTION_RESET_SCRIPT_BASE_OBJECT = 77, //1 // none
SMART_ACTION_CALL_SCRIPT_RESET = 78, //1 // none
SMART_ACTION_END = 79,
SMART_ACTION_ENTER_VEHICLE = 79, //1 // seatID, first vehicle target is used
SMART_ACTION_END = 80,
};
struct SmartAction
@@ -763,6 +764,11 @@ struct SmartAction
{
uint32 flag;
} unitFlag;
struct
{
uint32 seat;
} enterVehicle;
struct
{
@@ -811,7 +817,8 @@ enum SMARTAI_TARGETS
SMART_TARGET_CLOSEST_CREATURE = 19, // CreatureEntry(0any)
SMART_TARGET_CLOSEST_GAMEOBJECT = 20, // entry(0any)
SMART_TARGET_CLOSEST_PLAYER = 21, // none
SMART_TARGET_END = 22,
SMART_TARGET_ACTION_INVOKER_VEHICLE = 22, // Unit's vehicle who caused this Event to occur
SMART_TARGET_END = 23,
};
struct SmartTarget