From d94dda9d93a07be907636f45bcca823261ed0c79 Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Thu, 12 Dec 2024 02:11:42 -0300 Subject: [PATCH] feat(Core/SAI): Implement SMART_ACTION_DISMOUNT (206) (#20899) --- .../updates/pending_db_world/rev_1733966897261929100.sql | 9 +++++++++ src/server/game/AI/SmartScripts/SmartScript.cpp | 7 +++++++ src/server/game/AI/SmartScripts/SmartScriptMgr.cpp | 1 + src/server/game/AI/SmartScripts/SmartScriptMgr.h | 2 +- 4 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 data/sql/updates/pending_db_world/rev_1733966897261929100.sql diff --git a/data/sql/updates/pending_db_world/rev_1733966897261929100.sql b/data/sql/updates/pending_db_world/rev_1733966897261929100.sql new file mode 100644 index 000000000..b897531e8 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1733966897261929100.sql @@ -0,0 +1,9 @@ +-- +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 23580); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(23580, 0, 0, 1, 2, 0, 100, 1, 30, 30, 0, 0, 0, 0, 11, 43274, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Amani\'shi Warbringer - Between 30-30% Health - Cast \'Dismount Bear\' (No Repeat)'), +(23580, 0, 1, 2, 61, 0, 100, 512, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Amani\'shi Warbringer - Between 0-19% Health - Set Flag Standstate Stand Up (No Repeat)'), +(23580, 0, 2, 3, 61, 0, 100, 3, 0, 0, 0, 0, 0, 0, 11, 40743, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Amani\'shi Warbringer - Between 0-30% Health - Cast \'Frenzy\' (No Repeat)'), +(23580, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 206, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Amani\'shi Warbringer - Between 30-30% Health - Dismount'), +(23580, 0, 4, 0, 0, 0, 100, 2, 0, 0, 12000, 12000, 0, 0, 11, 43273, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Amani\'shi Warbringer - In Combat - Cast \'Cleave\' (No Repeat)'), +(23580, 0, 5, 0, 0, 0, 100, 2, 5000, 5000, 20000, 20000, 0, 0, 11, 42496, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Amani\'shi Warbringer - In Combat - Cast \'Furious Roar\' (No Repeat)'); diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 7f4b8e996..e5d77ca4f 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -2605,6 +2605,13 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u ProcessEventsFor((SMART_EVENT)SMART_EVENT_TIMED_EVENT_TRIGGERED, nullptr, eventId); break; } + case SMART_ACTION_DISMOUNT: + { + for (WorldObject* const target : targets) + if (IsUnit(target)) + target->ToUnit()->Dismount(); + break; + } case SMART_ACTION_SET_HOVER: { for (WorldObject* target : targets) diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index 4544f73c8..ab81002ea 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -2015,6 +2015,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) case SMART_ACTION_FLEE: case SMART_ACTION_ADD_THREAT: case SMART_ACTION_TRIGGER_RANDOM_TIMED_EVENT: + case SMART_ACTION_DISMOUNT: case SMART_ACTION_SET_HOVER: case SMART_ACTION_ADD_IMMUNITY: case SMART_ACTION_REMOVE_IMMUNITY: diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index 3a31acbcf..7ca18d2f6 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -705,7 +705,7 @@ enum SMART_ACTION SMART_ACTION_EXIT_VEHICLE = 203, // none SMART_ACTION_SET_UNIT_MOVEMENT_FLAGS = 204, // flags SMART_ACTION_SET_COMBAT_DISTANCE = 205, // combatDistance - // UNUSED = 206, + SMART_ACTION_DISMOUNT = 206, SMART_ACTION_SET_HOVER = 207, // 0/1 SMART_ACTION_ADD_IMMUNITY = 208, // type, id, value SMART_ACTION_REMOVE_IMMUNITY = 209, // type, id, value