public virtual void OnTaunt(Unit taunter, byte lvl) { ulong maxHate = 0; if (_unit is Pet) { return; } AI.Debugger?.SendClientMessage("[MR]: Received taunt from " + taunter.Name + "."); if (!Combat.IsInCombat) { AI.ProcessCombatStart(taunter); } else { AggroInfo info; foreach (KeyValuePair <ushort, AggroInfo> kp in Aggros) { info = kp.Value; ulong hate = info.GetHate(); if (hate > maxHate) { maxHate = hate; } } uint newHatred = (uint)((300 + 1950 * ((lvl - 1) / 39.0f)) * taunter.StsInterface.GetStatPercentageModifier(Stats.HateCaused)); AddHatred(taunter, true, newHatred); } }
public override void OnAttacked(Unit attacker) { if (_petOwner.AIMode != (byte)PetCommand.Passive && !_petOwner.IsHeeling && !IgnoreDamageEvents && CurrentTarget == null) { switch (AIInterface.State) { case AiState.STANDING: AIInterface.ProcessCombatStart(attacker); break; case AiState.MOVING: AIInterface.ProcessCombatStart(attacker); break; } } RefreshCombatTimer(); _petOwner.Owner.CbtInterface.RefreshCombatTimer(); }
public override void OnDealDamage(Unit victim, uint damageCount) { if (_petOwner.AIMode != (byte)PetCommand.Passive && !_petOwner.IsHeeling && !IgnoreDamageEvents && CurrentTarget == null) { switch (AIInterface.State) { case AiState.STANDING: AIInterface.ProcessCombatStart(victim); break; case AiState.MOVING: AIInterface.ProcessCombatStart(victim); break; } _Owner.EvtInterface.Notify(EventName.OnDealDamage, victim, damageCount); } RefreshCombatTimer(); _petOwner.Owner.CbtInterface.RefreshCombatTimer(); }
public override void OnTakeDamage(Unit fighter, uint damage, float hatredMod, uint mitigation = 0) { if (_petOwner.AIMode != (byte)PetCommand.Passive && !_petOwner.IsHeeling && !IgnoreDamageEvents && CurrentTarget == null) { switch (AIInterface.State) { case AiState.STANDING: AIInterface.ProcessCombatStart(fighter); break; case AiState.MOVING: AIInterface.ProcessCombatStart(fighter); break; } _Owner.EvtInterface.Notify(EventName.OnReceiveDamage, fighter, null); } RefreshCombatTimer(); _petOwner.Owner.CbtInterface.RefreshCombatTimer(); }