diff options
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartAI.cpp | 1 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScript.cpp | 21 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.cpp | 2 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.h | 11 |
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 |