From d0f70b6cbf96d3c2c88c64df19dca62745b26e12 Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Mon, 25 Jul 2022 12:24:51 +0200 Subject: [PATCH] fix(DB/SAI): Fixed completing quest "Into The Realm of Shadows" (#12515) --- .../rev_1658645642391085500.sql | 2 + .../game/AI/SmartScripts/SmartScript.cpp | 40 ++++++++++++------- 2 files changed, 27 insertions(+), 15 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1658645642391085500.sql diff --git a/data/sql/updates/pending_db_world/rev_1658645642391085500.sql b/data/sql/updates/pending_db_world/rev_1658645642391085500.sql new file mode 100644 index 000000000..23d5a918e --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1658645642391085500.sql @@ -0,0 +1,2 @@ +-- +UPDATE `smart_scripts` SET `action_param1`=500 WHERE `entryorguid`=28788 AND `source_type`=0 AND `id`=5; diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 9df81a469..29cda5530 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -847,23 +847,33 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u } case SMART_ACTION_CALL_GROUPEVENTHAPPENS: { - if (!unit) - break; - - // If invoker was pet or charm - Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself(); - if (player && GetBaseObject()) + for (WorldObject* target : targets) { - player->GroupEventHappens(e.action.quest.quest, GetBaseObject()); - LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_CALL_GROUPEVENTHAPPENS: Player {}, group credit for quest {}", - unit->GetGUID().ToString(), e.action.quest.quest); - } + if (!IsUnit(target)) + continue; - // Special handling for vehicles - if (Vehicle* vehicle = unit->GetVehicleKit()) - for (auto & Seat : vehicle->Seats) - if (Player* player = ObjectAccessor::GetPlayer(*unit, Seat.second.Passenger.Guid)) - player->GroupEventHappens(e.action.quest.quest, GetBaseObject()); + Unit* unitTarget = target->ToUnit(); + // If invoker was pet or charm + Player* player = unitTarget->GetCharmerOrOwnerPlayerOrPlayerItself(); + if (player && GetBaseObject()) + { + player->GroupEventHappens(e.action.quest.quest, GetBaseObject()); + LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_CALL_GROUPEVENTHAPPENS: Player {}, group credit for quest {}", + unit->GetGUID().ToString(), e.action.quest.quest); + } + + // Special handling for vehicles + if (Vehicle* vehicle = unitTarget->GetVehicleKit()) + { + for (auto& Seat : vehicle->Seats) + { + if (Player* player = ObjectAccessor::GetPlayer(*unitTarget, Seat.second.Passenger.Guid)) + { + player->GroupEventHappens(e.action.quest.quest, GetBaseObject()); + } + } + } + } break; } case SMART_ACTION_REMOVEAURASFROMSPELL: