From e90a7f82d4417400ff2db4c9da0f324190fa4e27 Mon Sep 17 00:00:00 2001 From: jackpoz Date: Sun, 15 Dec 2013 21:14:47 +0100 Subject: Core/AI: Fix CreatureAI left uninitialized Fix CreatureAI left uninitialized for 1 server tick for Creatures with DeathState:DEAD . This is a workaround required after c9cf2f059f8f33c3fcb58ad472871515e59df7c3 changes . Valgrind log: Conditional jump or move depends on uninitialised value(s) at : npc_draenei_survivor::npc_draenei_survivorAI::MoveInLineOfSight(Unit*) (zone_azuremyst_isle.cpp:104) by : CreatureAI::MoveInLineOfSight_Safe(Unit*) (CreatureAI.cpp:123) by : CreatureUnitRelocationWorker(Creature*, Unit*) (GridNotifiers.cpp:134) by : Trinity::AIRelocationNotifier::Visit(GridRefManager&) (GridNotifiers.cpp:252) Uninitialised value was created by a heap allocation at : operator new(unsigned long) (vg_replace_malloc.c:319) by : npc_draenei_survivor::GetAI(Creature*) const (zone_azuremyst_isle.cpp:66) by : ScriptMgr::GetCreatureAI(Creature*) (ScriptMgr.cpp:792) by : FactorySelector::selectAI(Creature*) (CreatureAISelector.cpp:41) by : Creature::AIM_Initialize(CreatureAI*) (Creature.cpp:716) by : Creature::AddToWorld() (Creature.cpp:190) --- src/server/game/Entities/Creature/Creature.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/server') diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index dfc35bcce56..d039ee385ec 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -1533,7 +1533,11 @@ void Creature::Respawn(bool force) //Call AI respawn virtual function if (IsAIEnabled) + { + //reset the AI to be sure no dirty or uninitialized values will be used till next tick + AI()->Reset(); TriggerJustRespawned = true;//delay event to next tick so all creatures are created on the map before processing + } uint32 poolid = GetDBTableGUIDLow() ? sPoolMgr->IsPartOfAPool(GetDBTableGUIDLow()) : 0; if (poolid) -- cgit v1.2.3