diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index c55af0698..3ef0e2071 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -713,6 +713,13 @@ void Creature::Update(uint32 diff) m_vehicleKit->Reset(); } + if (_triggerVehicleKitInit) + { + _triggerVehicleKitInit = false; + if (m_vehicleKit) + m_vehicleKit->Reset(); + } + switch (m_deathState) { case DeathState::JustRespawned: @@ -1113,9 +1120,10 @@ bool Creature::AIM_Initialize(CreatureAI* ai) IsAIEnabled = true; i_AI->InitializeAI(); - // Xinef: Initialize vehicle if it is not summoned! - if (GetVehicleKit() && m_spawnId) - GetVehicleKit()->Reset(); + // Defer vehicle kit init to the next Creature::Update tick so accessories + // install after visibility sync. + if (GetVehicleKit()) + _triggerVehicleKitInit = true; return true; } diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index c0eb2a753..147435a7d 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -536,6 +536,9 @@ private: // Formation variable CreatureGroup* m_formation; bool TriggerJustRespawned; + // Deferred vehicle init: set in AIM_Initialize, consumed on the next + // Creature::Update tick so accessories install after visibility sync. + bool _triggerVehicleKitInit = false; // Shared timer between mobs who assist another. // Damaging one extends leash range on all of them. diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 57b18d5f4..d75b89a11 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -346,11 +346,6 @@ bool Map::AddToMap(T* obj, bool checkTransport) //also, trigger needs to cast spell, if not update, cannot see visual obj->UpdateObjectVisibility(true); - // Xinef: little hack for vehicles, accessories have to be added after visibility update so they wont fall off the vehicle, moved from Creature::AIM_Initialize - // Initialize vehicle, this is done only for summoned npcs, DB creatures are handled by grid loaders - if (obj->IsCreature()) - if (Vehicle* vehicle = obj->ToCreature()->GetVehicleKit()) - vehicle->Reset(); return true; }