C'est très bien, ça évite le bug use, mais le problème, c'est que depuis, le detaunt ne sert à rien d'autre qu'augmenter le bonus de défense (j'ai à maintes reprises repris l'aggro alors que je ne faisais que detaunt).
Je suis allé voir dans le code de DoL rev 700 et j'y ai vu ceci :
GameServer/spells/StyleTaunt.cs
Code: Select all
public override void OnDirectEffect(GameLiving target, double effectiveness)
{
if (target is GameNPC)
{
AttackData ad = Caster.TempProperties.getObjectProperty(GameLiving.LAST_ATTACK_DATA, null) as AttackData;
if (ad != null)
{
IAggressiveBrain aggroBrain = ((GameNPC)target).Brain as IAggressiveBrain;
if (aggroBrain != null)
{
int aggro = Convert.ToInt32(ad.Damage * this.Spell.Value * target.AttackSpeed(ad.Weapon) / 4000);
aggroBrain.AddToAggroList(Caster, aggro);//<------------------ C'est la procédure qui gère l'augmentation/diminution d'aggro.
//log.Info("Taunt amount: " + aggro.ToString());
}
}
}
}
Dans GameServer/ai/brain/StandardMobBrain.cs :
Code: Select all
public virtual void AddToAggroList(GameLiving living, int aggroamount)
{
(...)
if (m_aggroTable[living] != null)
{
long amount = (long)m_aggroTable[living];
amount += aggroamount;
if (amount <= 0)
{
m_aggroTable.Remove(living); // <---------------- On voit clairement qu'on est enlevé de la liste d'aggro.
}
else
{
m_aggroTable[living] = amount;
}
}
else
{
if (aggroamount > 0)
{
m_aggroTable[living] = (long)aggroamount;
}
}
Je pense que cela devrait régler le problème.
Le seul risque que je vois est qu'il devienne impossible de semer les mobs. J'ai vaguement regardé mais je n'ai pas l'impression que cela sera le cas. Le plus simple serait de tester.