mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/Scripts: Fixed ENSURE_AI assertion failures when used in Reset()/InitializeAI() hooks with hotswap
Updates #20727
(cherry picked from commit 2fd9dc2edb)
This commit is contained in:
@@ -811,7 +811,7 @@ bool Creature::AIM_Destroy()
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Creature::AIM_Initialize(CreatureAI* ai)
|
||||
bool Creature::AIM_Create(CreatureAI* ai /*= nullptr*/)
|
||||
{
|
||||
// make sure nothing can change the AI during AI update
|
||||
if (m_AI_locked)
|
||||
@@ -825,12 +825,23 @@ bool Creature::AIM_Initialize(CreatureAI* ai)
|
||||
Motion_Initialize();
|
||||
|
||||
i_AI = ai ? ai : FactorySelector::selectAI(this);
|
||||
}
|
||||
|
||||
void Creature::AI_InitializeAndEnable()
|
||||
{
|
||||
IsAIEnabled = true;
|
||||
i_AI->InitializeAI();
|
||||
// Initialize vehicle
|
||||
if (GetVehicleKit())
|
||||
GetVehicleKit()->Reset();
|
||||
}
|
||||
|
||||
bool Creature::AIM_Initialize(CreatureAI* ai)
|
||||
{
|
||||
if (!AIM_Create(ai))
|
||||
return false;
|
||||
|
||||
AI_InitializeAndEnable();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -131,7 +131,9 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma
|
||||
bool IsEvadingAttacks() const { return IsInEvadeMode() || CanNotReachTarget(); }
|
||||
|
||||
bool AIM_Destroy();
|
||||
bool AIM_Initialize(CreatureAI* ai = NULL);
|
||||
bool AIM_Create(CreatureAI* ai = nullptr);
|
||||
void AI_InitializeAndEnable();
|
||||
bool AIM_Initialize(CreatureAI* ai = nullptr);
|
||||
void Motion_Initialize();
|
||||
|
||||
CreatureAI* AI() const { return reinterpret_cast<CreatureAI*>(i_AI); }
|
||||
|
||||
@@ -453,7 +453,7 @@ class CreatureGameObjectAreaTriggerScriptRegistrySwapHooks
|
||||
if (creature->IsAlive())
|
||||
creature->ClearUnitState(UNIT_STATE_EVADE);
|
||||
|
||||
bool const created = creature->AIM_Initialize();
|
||||
bool const created = creature->AIM_Create();
|
||||
ASSERT(created,
|
||||
"Creating the AI should never fail here!");
|
||||
(void)created;
|
||||
@@ -464,6 +464,7 @@ class CreatureGameObjectAreaTriggerScriptRegistrySwapHooks
|
||||
if (!creature->IsAlive())
|
||||
return;
|
||||
|
||||
creature->AI_InitializeAndEnable();
|
||||
creature->AI()->EnterEvadeMode();
|
||||
|
||||
// Cast a dummy visual spell asynchronously here to signal
|
||||
|
||||
Reference in New Issue
Block a user