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: