From 73effb91adfae15d9d500c4dc6d5de1fa77123d8 Mon Sep 17 00:00:00 2001 From: Ovahlord <18347559+Ovahlord@users.noreply.github.com> Date: Sat, 23 Aug 2025 08:08:02 +0200 Subject: [PATCH] Core/Creatures: moved summon AI hooks to SummonInfo API --- .../game/Entities/Creature/Creature.cpp | 14 ++++---------- .../Creature/SummonInfo/SummonInfo.cpp | 19 ++++++++++++++++--- src/server/game/Entities/Unit/Unit.cpp | 3 --- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 64011dd6ed..4db91548ad 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -337,17 +337,11 @@ void Creature::RemoveFromWorld() // If the creature about to despawn, unregister it for the summoner if (SummonInfo* summonInfo = GetSummonInfo()) { - if (Unit* summoner = summonInfo->GetUnitSummoner()) - { - summoner->UnregisterSummon(summonInfo); + // Perform cleanup actions if needed + summonInfo->HandlePreUnsummonActions(); - if (summonInfo->GetControl() == SummonPropertiesControl::Pet) - { - summoner->SetPetGUID(ObjectGuid::Empty); - //if (Player* playerSummoner = summoner->ToPlayer()) - // playerSummoner->SendRemoveControlBar(); - } - } + if (Unit* summoner = summonInfo->GetUnitSummoner()) + summoner->UnregisterSummon(summonInfo); } if (GetZoneScript()) diff --git a/src/server/game/Entities/Creature/SummonInfo/SummonInfo.cpp b/src/server/game/Entities/Creature/SummonInfo/SummonInfo.cpp index 64e91769e3..693ff77aa8 100644 --- a/src/server/game/Entities/Creature/SummonInfo/SummonInfo.cpp +++ b/src/server/game/Entities/Creature/SummonInfo/SummonInfo.cpp @@ -19,6 +19,7 @@ #include "CharmInfo.h" #include "Creature.h" +#include "CreatureAI.h" #include "DBCEnums.h" #include "DBCStores.h" #include "Log.h" @@ -156,10 +157,12 @@ void SummonInfo::HandlePreSummonActions() void SummonInfo::HandlePostSummonActions() { - // Register Pet and enable its control - if (_control == SummonPropertiesControl::Pet) + Unit* summoner = GetUnitSummoner(); + + if (summoner) { - if (Unit* summoner = GetUnitSummoner()) + // Register Pet and enable its control + if (_control == SummonPropertiesControl::Pet) { _summonedCreature->SetOwnerGUID(summoner->GetGUID()); @@ -176,6 +179,13 @@ void SummonInfo::HandlePostSummonActions() } } } + + // Infoke JustSummoned and IsSummonedBy AI hooks + if (summoner->IsCreature() && summoner->IsAIEnabled()) + summoner->ToCreature()->AI()->JustSummoned(_summonedCreature); + + if (_summonedCreature->IsAIEnabled()) + _summonedCreature->AI()->IsSummonedBy(summoner); } } @@ -192,6 +202,9 @@ void SummonInfo::HandlePreUnsummonActions() if (Player* player = summoner->ToPlayer()) player->SendRemoveControlBar(); } + + if (summoner->IsCreature() && summoner->IsAIEnabled()) + summoner->ToCreature()->AI()->SummonedCreatureDespawn(_summonedCreature); } void SummonInfo::UpdateRemainingDuration(Milliseconds deltaTime) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 61f4457058..161cefd452 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -8863,9 +8863,6 @@ void Unit::UnregisterSummon(SummonInfo* summon) if (!summon) return; - // Perform cleanup actions if needed - summon->HandlePreUnsummonActions(); - SummonPropertiesSlot slot = summon->GetSummonSlot(); if (slot == SummonPropertiesSlot::None) {