Ejemplo n.º 1
0
        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;
        }
Ejemplo n.º 2
0
        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();
        }