diff options
author | BandyscTC <b.andysc+tc@gmail.com> | 2025-07-24 09:25:13 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-07-24 10:25:13 +0200 |
commit | 9477209f10bd33611251f38633f28dc5f16103f5 (patch) | |
tree | 34ac112c1345f580b1144f9aa546469f59f75ef4 | |
parent | 8a00ab156149f34718c198085830978cd8e91cea (diff) |
Core/SAI: Add actions ENTER_VEHICLE, BOARD_PASSENGER and EXIT_VEHICLE (#31141)
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScript.cpp | 41 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.cpp | 14 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.h | 10 |
3 files changed, 64 insertions, 1 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 12243ac4aff..759f566d904 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -2603,6 +2603,47 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u Cell::VisitGridObjects(GetBaseObject(), worker, float(e.action.destroyConversation.range)); break; } + case SMART_ACTION_ENTER_VEHICLE: + { + if (!me) + break; + + for (WorldObject* target : targets) + { + if (Unit* unitTarget = target->ToUnit()) + { + me->EnterVehicle(unitTarget, (uint8)e.action.enterVehicle.seatId); + break; + } + } + break; + } + case SMART_ACTION_BOARD_PASSENGER: + { + if (!me) + break; + + for (WorldObject* target : targets) + { + if (Unit* unitTarget = target->ToUnit()) + { + unitTarget->EnterVehicle(me, (uint8)e.action.enterVehicle.seatId); + break; + } + } + break; + } + case SMART_ACTION_EXIT_VEHICLE: + { + for (WorldObject* target : targets) + { + if (Unit* unitTarget = target->ToUnit()) + { + unitTarget->ExitVehicle(); + } + } + break; + } default: TC_LOG_ERROR("sql.sql", "SmartScript::ProcessAction: Entry {} SourceType {}, Event {}, Unhandled Action type {}", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType()); break; diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index 471740a625e..3c69ddd193f 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -1030,6 +1030,9 @@ bool SmartAIMgr::CheckUnusedActionParams(SmartScriptHolder const& e) case SMART_ACTION_COMPLETE_QUEST: return sizeof(SmartAction::quest); case SMART_ACTION_CREDIT_QUEST_OBJECTIVE_TALK_TO: return NO_PARAMS; case SMART_ACTION_DESTROY_CONVERSATION: return sizeof(SmartAction::destroyConversation); + case SMART_ACTION_ENTER_VEHICLE: return sizeof(SmartAction::enterVehicle); + case SMART_ACTION_BOARD_PASSENGER: return sizeof(SmartAction::enterVehicle); + case SMART_ACTION_EXIT_VEHICLE: return NO_PARAMS; default: TC_LOG_WARN("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} is using an action with no unused params specified in SmartAIMgr::CheckUnusedActionParams(), please report this.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType()); @@ -2427,6 +2430,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) case SMART_ACTION_DESPAWN_SPAWNGROUP: case SMART_ACTION_ADD_TO_STORED_TARGET_LIST: case SMART_ACTION_DO_ACTION: + case SMART_ACTION_EXIT_VEHICLE: break; case SMART_ACTION_BECOME_PERSONAL_CLONE_FOR_PLAYER: { @@ -2479,6 +2483,16 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) TC_SAI_IS_BOOLEAN_VALID(e, e.action.destroyConversation.isPrivate); break; } + case SMART_ACTION_ENTER_VEHICLE: + case SMART_ACTION_BOARD_PASSENGER: + { + if (e.action.enterVehicle.seatId >= MAX_VEHICLE_SEATS) + { + TC_LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses incorrect seat id (out of range 0 - {}), skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), MAX_VEHICLE_SEATS - 1); + return false; + } + break; + } // Unused case SMART_ACTION_CALL_AREAEXPLOREDOREVENTHAPPENS: case SMART_ACTION_CALL_GROUPEVENTHAPPENS: diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index 577e2b23389..97dabdf1997 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -608,7 +608,10 @@ enum SMART_ACTION SMART_ACTION_COMPLETE_QUEST = 152, // QuestId. Regular quests with objectives can't be completed with this action (only quests with QUEST_FLAGS_COMPLETION_EVENT, QUEST_FLAGS_COMPLETION_AREA_TRIGGER or QUEST_FLAGS_TRACKING_EVENT) SMART_ACTION_CREDIT_QUEST_OBJECTIVE_TALK_TO = 153, SMART_ACTION_DESTROY_CONVERSATION = 154, // conversation_template.id, isPrivate, range - SMART_ACTION_END = 155 + SMART_ACTION_ENTER_VEHICLE = 155, // seat id + SMART_ACTION_BOARD_PASSENGER = 156, // seat id + SMART_ACTION_EXIT_VEHICLE = 157, + SMART_ACTION_END = 158 }; enum class SmartActionSummonCreatureFlags @@ -1245,6 +1248,11 @@ struct SmartAction struct { + uint32 seatId; + } enterVehicle; + + struct + { uint32 id; SAIBool isPrivate; uint32 range; |