From e0b2fcf3e0b0d298be21cf0bc3ac9cd80f17626c Mon Sep 17 00:00:00 2001 From: SylvaniaCore deploy Date: Wed, 2 Sep 2026 08:43:25 +0200 Subject: [PATCH] Creatures volantes : aucun chemin vers une cible hors du maillage, evade et butin perdu _setTargetLocation ne passait pas CanFly() en forceDest a CalculatePath. Une creature volante dont la cible se tient sur un relief non navigable obtenait PATHFIND_NOPATH, se marquait injoignable, puis evadait au bout de cinq secondes (CREATURE_NOPATH_EVADE_TIME). Chaque evade passe par CreatureAI::_EnterEvadeMode, qui lache le proprietaire de butin et reinitialise m_PlayerDamageReq. A la mort, Unit::Kill force alors SetLootRecipient(NULL) : le corps est vide et ne rapporte aucune experience. Le symptome remonte comme un bug de table de butin alors que la table est saine. Signale sur le Proto-drake perdu dans le temps (32491) aux Pics Foudroyes, qui lachait l aggro tant que le joueur n etait pas sur une plateforme reliee au maillage, puis n a rien donne une fois tue. 3709 creatures volantes du monde etaient concernees. Aligne sur TrinityCore amont, identique en 3.3.5 et master : bool success = _path->CalculatePath(x, y, z, owner->CanFly()); Co-Authored-By: Claude Opus 5 --- .../MovementGenerators/TargetedMovementGenerator.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp index dc1c0dc..944f35b 100755 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp @@ -105,6 +105,13 @@ void TargetedMovementGeneratorMedium::_setTargetLocation(T* owner, bool up bool forceDest = (owner->GetTypeId() == TYPEID_UNIT && owner->ToCreature()->IsPet() && owner->HasUnitState(UNIT_STATE_FOLLOW)); + // Une creature volante n est pas tenue par le maillage de navigation. Sans + // ce raccourci elle ne trouve aucun chemin vers une cible posee sur un + // relief non navigable, se marque injoignable, puis evade au bout de + // CREATURE_NOPATH_EVADE_TIME en lachant son proprietaire de butin. + if (!forceDest && owner->GetTypeId() == TYPEID_UNIT && owner->ToCreature()->CanFly()) + forceDest = true; + if (!forceDest && owner->GetTypeId() == TYPEID_UNIT && !owner->IsPlayerBot() && !i_target->IsPlayerBot()) { //TC_LOG_ERROR("misc", "SPMOVE1 ");