public SpellTriggerActivationInfo(Unit actor, Unit actionTarget, Spell spell, SpellTriggerFlags spellTriggerFlags, SpellDamageInfo spellDamageInfo, SpellHealInfo spellHealInfo) { Actor = actor; ActionTarget = actionTarget; Spell = spell; SpellDamageInfo = spellDamageInfo; SpellHealInfo = spellHealInfo; SpellTriggerFlags = spellTriggerFlags; }
public SpellProcInfo(Unit actor, Unit actionTarget, Unit procTarget, uint typeMask, uint spellTypeMask, uint spellPhaseMask, uint hitMask, Spell spell, SpellDamageInfo spellDamageInfo, SpellHealInfo spellHealInfo) { Actor = actor; ActionTarget = actionTarget; ProcTarget = procTarget; TypeMask = typeMask; SpellTypeMask = spellTypeMask; SpellPhaseMask = spellPhaseMask; HitMask = hitMask; Spell = spell; SpellDamageInfo = spellDamageInfo; SpellHealInfo = spellHealInfo; }
protected override void HandlePeriodic(Unit target, Unit caster) { if (target.IsDead || caster == null) { return; } if (target.HasState(UnitControlState.Isolated) || target.IsImmunedToDamage(Aura.SpellInfo, EffectInfo.SpellSchoolMask, Aura.Caster)) { SpellDamageInfo damageInfo = new SpellDamageInfo(caster, target, Aura.SpellInfo, SpellDamageType.Dot, HitType.Immune); EventHandler.ExecuteEvent(GameEvents.ServerDamageDone, damageInfo); } else { int originalDamage = EffectInfo.CalculateSpellDamage(caster); bool hasCrit = caster.Spells.IsSpellCrit(target, Aura.SpellInfo, EffectInfo.SpellSchoolMask); caster.Spells.DamageBySpell(new SpellDamageInfo(caster, target, Aura.SpellInfo, (uint)originalDamage, hasCrit, SpellDamageType.Dot)); } }
private void OnSpellDamageDone(SpellDamageInfo damageInfo) { if (damageInfo.Caster is Player player && World.IsControlledByHuman(player)) { SpellDamageDoneEvent spellDamageEvent = player.IsController ? SpellDamageDoneEvent.Create(GlobalTargets.OnlyServer, ReliabilityModes.ReliableOrdered) : SpellDamageDoneEvent.Create(player.BoltEntity.Controller, ReliabilityModes.ReliableOrdered); spellDamageEvent.Target = damageInfo.Target.BoltEntity.NetworkId; spellDamageEvent.DamageAmount = (int)damageInfo.Damage; spellDamageEvent.IsCrit = damageInfo.HasCrit; spellDamageEvent.Send(); } UnitSpellDamageEvent unitSpellDemageEvent = UnitSpellDamageEvent.Create(damageInfo.Target.BoltEntity, EntityTargets.Everyone); unitSpellDemageEvent.CasterId = damageInfo.Caster.BoltEntity.NetworkId; unitSpellDemageEvent.Damage = (int)damageInfo.Damage; unitSpellDemageEvent.IsCrit = damageInfo.HasCrit; unitSpellDemageEvent.Send(); }