aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.cpp1
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp21
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.cpp2
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.h11
4 files changed, 32 insertions, 3 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp
index 998f13a4540..671b114fccc 100644
--- a/src/server/game/AI/SmartScripts/SmartAI.cpp
+++ b/src/server/game/AI/SmartScripts/SmartAI.cpp
@@ -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;
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp
index f9be60063eb..dbc20112c47 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScript.cpp
@@ -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)
{
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
index a6a4ba9a23e..111805a1dba 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
@@ -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:
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
index 6d979c6d94f..885bdd42fd3 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
@@ -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