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 <noreply@anthropic.com>
This commit is contained in:
@@ -105,6 +105,13 @@ void TargetedMovementGeneratorMedium<T, D>::_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 ");
|
||||
|
||||
Reference in New Issue
Block a user