示例#1
0
        public void FinalPrep(Mobile from)
        {
            if (!from.Alive)
            {
                from.Resurrect();
            }

            from.CurePoison(from);
            from.Blessed = false;
            from.Frozen  = false;

            from.StatMods.Clear();
            from.Hits = from.HitsMax;
            from.Mana = from.ManaMax;
            from.Stam = from.StamMax;

            Targeting.Target.Cancel(from);
            from.MagicDamageAbsorb = 0;
            from.MeleeDamageAbsorb = 0;
            ProtectionSpell.Registry.Remove(from);
            DefensiveSpell.Nullify(from);
            from.Combatant = null;

            from.Delta(MobileDelta.Noto);               //Update notoriety
        }
示例#2
0
        public override int AbsorbDamage(Mobile attacker, Mobile defender, int damage)
        {
            damage = base.AbsorbDamage(attacker, defender, damage);

            int absorb = defender.MeleeDamageAbsorb;

            if (absorb > 0)
            {
                if (absorb > damage)
                {
                    int react = damage / 5;

                    if (react <= 0)
                    {
                        react = 1;
                    }

                    defender.MeleeDamageAbsorb -= damage;
                    damage = 0;

                    defender.Damage(react, attacker);

                    attacker.PlaySound(0x1F1);
                    attacker.FixedEffect(0x374A, 10, 16);
                }
                else
                {
                    defender.MeleeDamageAbsorb = 0;
                    defender.SendLocalizedMessage(1005556);                       // Your reactive armor spell has been nullified.
                    DefensiveSpell.Nullify(defender);
                }
            }

            return(damage);
        }
示例#3
0
 protected override void OnTick()
 {
     if (!m_Registry.ContainsKey(m_Mobile))
     {
         if (m_Item.Uses > 0 && m_Item.Parent == m_Mobile)
         {
             m_Item.RedoProtection(m_Mobile, m_Item);
         }
         else
         {
             m_Registry.Remove(m_Mobile);
             DefensiveSpell.Nullify(m_Mobile);
         }
     }
     else
     {
         if (m_Item.Parent == m_Mobile)
         {
             m_Item.RedoProtection(m_Mobile, m_Item);
         }
         else
         {
             m_Registry.Remove(m_Mobile);
             DefensiveSpell.Nullify(m_Mobile);
         }
     }
 }
示例#4
0
 protected override void OnTarget(Mobile from, object o)
 {
     if (o is Item)
     {
         m_Owner.Target((Item)o);
     }
     else
     {
         if (o != null && o == m_Owner.Caster)
         {
             //remove RA or Magic Reflect
             if (m_Owner.Caster.MagicDamageAbsorb > 0)
             {
                 m_Owner.Caster.MagicDamageAbsorb = 0;
                 m_Owner.Caster.SendMessage("You let your magic reflection dissipate.");
                 DefensiveSpell.Nullify(m_Owner.Caster);
             }
             else if (m_Owner.Caster.MeleeDamageAbsorb > 0)
             {
                 m_Owner.Caster.MeleeDamageAbsorb = 0;
                 m_Owner.Caster.SendMessage("You let your reactive armor dissipate.");
                 DefensiveSpell.Nullify(m_Owner.Caster);
             }
             else
             {
                 m_Owner.Caster.SendLocalizedMessage(1005049); // That cannot be dispelled.
             }
         }
         else
         {
             m_Owner.Caster.SendLocalizedMessage(1005049); // That cannot be dispelled.
         }
     }
 }
        private void CleanPlayer(Mobile pm)
        {
            pm.CurePoison(pm);
            pm.Hits = pm.HitsMax;
            pm.Mana = pm.ManaMax;
            pm.Stam = pm.StamMax;

            Targeting.Target.Cancel(pm);
            pm.MagicDamageAbsorb = 0;
            pm.MeleeDamageAbsorb = 0;

            Spells.Second.ProtectionSpell.Registry.Remove(pm);
            Spells.Fourth.CurseSpell.RemoveEffect(pm);
            Server.Spells.Necromancy.CorpseSkinSpell.RemoveCurse(pm);
            Server.Spells.Necromancy.BloodOathSpell.RemoveCurse(pm);
            Server.Spells.Necromancy.StrangleSpell.RemoveCurse(pm);

            pm.Blessed   = false;
            pm.Paralyzed = false;
            pm.Hidden    = false;

            DefensiveSpell.Nullify(pm);
            pm.Combatant = null;
            pm.Warmode   = false;
            pm.Criminal  = false;
            pm.Blessed   = false;
            pm.Aggressed.Clear();
            pm.Aggressors.Clear();
            pm.Delta(MobileDelta.Noto);
            pm.InvalidateProperties();
        }
示例#6
0
        private void PrepFighter(Mobile from)
        {
            if (!from.Alive)
            {
                from.Resurrect();
            }

            if (from.Mount != null)
            {
                from.Mount.Rider = null;
            }

            from.CurePoison(from);
            from.Blessed = true;
            from.Frozen  = true;

            from.StatMods.Clear();
            from.Hits = from.HitsMax;
            from.Mana = from.ManaMax;
            from.Stam = from.StamMax;

            Targeting.Target.Cancel(from);
            from.MagicDamageAbsorb = 0;
            from.MeleeDamageAbsorb = 0;
            ProtectionSpell.Registry.Remove(from);
            DefensiveSpell.Nullify(from);
            from.Combatant = null;

            from.Delta(MobileDelta.Noto);               //Update notoriety

            from.SendMessage("The fight will begin in ten seconds.");
        }
示例#7
0
 public void nocheat(Mobile who)
 {
     Targeting.Target.Cancel(who);
     who.MagicDamageAbsorb = 0;
     who.MeleeDamageAbsorb = 0;
     ProtectionSpell.Registry.Remove(who);
     DefensiveSpell.Nullify(who);
 }
示例#8
0
        private void HandleMatchEnd(Mobile from, bool kick)
        {
            if (!from.Alive)
            {
                from.Resurrect();

                if (from.Corpse != null && from.Corpse is Corpse)
                {
                    Corpse c = (Corpse)from.Corpse;

                    for (int i = 0; i < c.Items.Count; ++i)
                    {
                        Item item = c.Items[i];

                        c.SetRestoreInfo(item, item.Location);
                    }

                    c.Open(from, true);
                    c.Delete();
                }
            }

            from.Criminal = false;
            from.Blessed  = false;
            from.Frozen   = false;

            from.CurePoison(from);
            from.StatMods.Clear();
            from.Hits = from.HitsMax;
            from.Mana = from.ManaMax;
            from.Stam = from.StamMax;

            Targeting.Target.Cancel(from);
            from.MagicDamageAbsorb = 0;
            from.MeleeDamageAbsorb = 0;
            ProtectionSpell.Registry.Remove(from);
            DefensiveSpell.Nullify(from);
            from.Combatant = null;

            from.Delta(MobileDelta.Noto);               //Update notoriety

            from.Location = m_SpectatorDest;

            if (kick && from.NetState == null)
            {
                Match m = FindMatch(from);

                if (m.Attackers.Contains(from))
                {
                    m.Attackers.Remove(from);
                }
                else if (m.Defenders.Contains(from))
                {
                    m.Defenders.Remove(from);
                }
            }
        }
示例#9
0
        public static void CheckReflect(int circle, ref Mobile caster, ref Mobile target)
        {
            if (target.MagicDamageAbsorb > 0)
            {
                ++circle;

                target.MagicDamageAbsorb -= circle;

                // This order isn't very intuitive, but you have to nullify reflect before target gets switched

                bool reflect = (target.MagicDamageAbsorb >= 0);

                if (target is BaseCreature)
                {
                    ((BaseCreature)target).CheckReflect(caster, ref reflect);
                }

                if (target.MagicDamageAbsorb <= 0)
                {
                    target.MagicDamageAbsorb = 0;
                    DefensiveSpell.Nullify(target);
                }

                if (reflect)
                {
                    target.MagicDamageAbsorb = 0;
                    DefensiveSpell.Nullify(target);

                    target.FixedEffect(0x37B9, 10, 5);

                    Mobile temp = caster;
                    caster = target;
                    target = temp;
                }
            }
            else if (target is BaseCreature)
            {
                bool reflect = false;

                ((BaseCreature)target).CheckReflect(caster, ref reflect);

                if (reflect)
                {
                    target.MagicDamageAbsorb = 0;
                    DefensiveSpell.Nullify(target);

                    target.FixedEffect(0x37B9, 10, 5);

                    Mobile temp = caster;
                    caster = target;
                    target = temp;
                }
            }
        }
示例#10
0
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////CLEAN PLAYERS FOR EVENT/////////////////////////////////////////////////////////////////////////////////////////////////////////

        public void CleanPlayer(Mobile pm)
        {
            //Cure Poison
            pm.CurePoison(pm);
            //Reset Hit Points
            pm.Hits = pm.HitsMax;
            //Rest Mana
            pm.Mana = pm.ManaMax;
            //Reset Stam
            pm.Stam = pm.StamMax;
            //Cancel any targeting
            Targeting.Target.Cancel(pm);
            //remove abosorption for magic
            pm.MagicDamageAbsorb = 0;
            //remove absorption for melee
            pm.MeleeDamageAbsorb = 0;
            //clear protection spell
            Spells.Second.ProtectionSpell.Registry.Remove(pm);
            //clear curse effect
            Spells.Fourth.CurseSpell.RemoveEffect(pm);
            //clear corpseskin
            Server.Spells.Necromancy.CorpseSkinSpell.RemoveCurse(pm);
            //clear blodd oath
            Server.Spells.Necromancy.BloodOathSpell.RemoveCurse(pm);
            //clear evil omen
            //Server.Spells.Necromancy.EvilOmenSpell.RemoveCurse(pm);
            //remove strangle
            Server.Spells.Necromancy.StrangleSpell.RemoveCurse(pm);
            //clear Paralyzed
            pm.Paralyzed = false;
            //clear defensive spell
            DefensiveSpell.Nullify(pm);
            //remove any combatant
            pm.Combatant = null;
            //remove war mode
            pm.Warmode = false;
            //remove criminal
            pm.Criminal = false;
            //clear agressed list
            pm.Aggressed.Clear();
            //clear agressor list
            pm.Aggressors.Clear();
            //clear delta notoriety
            pm.Delta(MobileDelta.Noto);
            //invalidate any properties due to the previous changes
            pm.InvalidateProperties();
        }
示例#11
0
        public static void CheckReflect(int circle, ref Mobile caster, ref Mobile target)
        {
            if (target.MagicDamageAbsorb > 0)
            {
                bool reflect = true;


                if (target is BaseCreature)
                {
                    ((BaseCreature)target).CheckReflect(caster, ref reflect);
                }

                target.MagicDamageAbsorb = 0;
                DefensiveSpell.Nullify(target);


                if (reflect)
                {
                    target.FixedParticles(0x373A, 10, 15, 5016, EffectLayer.Waist);
                    //target.FixedEffect( 0x37B9, 10, 5 );

                    Mobile temp = caster;
                    caster = target;
                    target = temp;
                }
            }
            else if (target is BaseCreature)
            {
                bool reflect = false;

                ((BaseCreature)target).CheckReflect(caster, ref reflect);

                if (reflect)
                {
                    target.FixedEffect(0x37B9, 10, 5);

                    Mobile temp = caster;
                    caster = target;
                    target = temp;
                }
            }
        }
示例#12
0
        public virtual void RefreshPlayer(Mobile from)
        {
            if (from == null)
            {
                return;
            }

            if (!from.Alive)
            {
                from.Resurrect();
            }

            Container pack    = from.Backpack;
            Item      holding = from.Holding;

            if (holding != null && pack != null)
            {
                pack.DropItem(holding);
            }

            from.RevealingAction();

            from.Poison = null;
            from.StatMods.Clear();

            Factions.Faction.ClearSkillLoss(from);

            from.Hits = from.HitsMax;
            from.Mana = from.ManaMax;
            from.Stam = from.StamMax;

            Targeting.Target.Cancel(from);
            from.MagicDamageAbsorb = 0;
            from.MeleeDamageAbsorb = 0;
            Spells.Second.ProtectionSpell.Registry.Remove(from);
            DefensiveSpell.Nullify(from);
            from.Combatant = null;

            from.Delta(MobileDelta.Noto);               //Update notoriety
        }
 protected override void OnTick()
 {
     ProtectionSpell.Registry.Remove(m_Caster);
     DefensiveSpell.Nullify(m_Caster);
 }
示例#14
0
        public static void CheckReflect(int circle, ref Mobile caster, ref Mobile target)
        {
            if (target.FindItemOnLayer(Layer.OuterTorso) is RobeOfReflection && (caster != target) && target.CheckSkill(SkillName.Magery, caster.Skills.Magery.Value * 0.5, caster.Skills.Magery.Value * 1.5))
            {
                RobeOfReflection ror = (RobeOfReflection)target.FindItemOnLayer(Layer.OuterTorso);

                if (ror.IsArcane && ror.CurArcaneCharges >= 0)
                {
                    target.FixedEffect(0x37B9, 10, 5);

                    Mobile temp = caster;
                    caster = target;
                    target = temp;

                    ror.CurArcaneCharges--;

                    return;
                }
            }

            if (target.MagicDamageAbsorb > 0)
            {
                ++circle;

                target.MagicDamageAbsorb -= circle;

                // This order isn't very intuitive, but you have to nullify reflect before target gets switched

                bool reflect = (target.MagicDamageAbsorb >= 0);

                if (target is BaseCreature)
                {
                    ((BaseCreature)target).CheckReflect(caster, ref reflect);
                }

                if (target.MagicDamageAbsorb <= 0)
                {
                    target.MagicDamageAbsorb = 0;
                    DefensiveSpell.Nullify(target);
                }

                if (reflect)
                {
                    target.FixedEffect(0x37B9, 10, 5);

                    Mobile temp = caster;
                    caster = target;
                    target = temp;
                }
            }
            else if (target is BaseCreature)
            {
                bool reflect = false;

                ((BaseCreature)target).CheckReflect(caster, ref reflect);

                if (reflect)
                {
                    target.FixedEffect(0x37B9, 10, 5);

                    Mobile temp = caster;
                    caster = target;
                    target = temp;
                }
            }
        }
示例#15
0
        public static void PrepareFighter(Mobile from, Duel duel)
        {
            if (!from.Alive)
            {
                from.Resurrect();
            }

            Container pack    = from.Backpack;
            BankBox   bank    = from.BankBox;
            Item      holding = from.Holding;

            if (holding != null && pack != null)
            {
                pack.DropItem(holding);
            }

            from.CurePoison(from);
            from.StatMods.Clear();

            from.Hits = from.HitsMax;
            from.Mana = from.ManaMax;
            from.Stam = from.StamMax;

            Targeting.Target.Cancel(from);
            from.MagicDamageAbsorb = 0;
            from.MeleeDamageAbsorb = 0;
            Spells.Second.ProtectionSpell.Registry.Remove(from);
            DefensiveSpell.Nullify(from);
            from.Combatant = null;

            from.Delta(MobileDelta.Noto);             //Update notoriety

            List <Item> items = new List <Item>();

            if (pack != null)
            {
                if (!duel.MagicWeapons)
                {
                    for (int i = 0; i < EquipmentLayers.Length; ++i)
                    {
                        Item item = from.FindItemOnLayer(EquipmentLayers[i]);

                        if (item != null && item is BaseWeapon)
                        {
                            BaseWeapon weapon = (BaseWeapon)item;

                            if (weapon.AccuracyLevel > 0 ||
                                weapon.DamageLevel > 0 ||
                                weapon.DurabilityLevel > 0)
                            {
                                items.Add(item);
                            }
                        }
                    }
                }

                if (!duel.MagicArmor)
                {
                    for (int i = 0; i < EquipmentLayers.Length; ++i)
                    {
                        Item item = from.FindItemOnLayer(EquipmentLayers[i]);

                        if (item != null && item is BaseArmor)
                        {
                            BaseArmor armor = (BaseArmor)item;

                            if (armor.Durability > 0 ||
                                armor.ProtectionLevel > 0)
                            {
                                items.Add(item);
                            }
                        }
                    }
                }

                for (int i = 0; i < pack.Items.Count; ++i)
                {
                    Item item = pack.Items[i];

                    if (item != null)
                    {
                        if (!duel.MagicWeapons && item is BaseWeapon)
                        {
                            BaseWeapon weapon = (BaseWeapon)item;

                            if (weapon.AccuracyLevel > 0 ||
                                weapon.DamageLevel > 0 ||
                                weapon.DurabilityLevel > 0)
                            {
                                items.Add(item);
                            }
                        }

                        else if (!duel.MagicArmor && item is BaseArmor)
                        {
                            BaseArmor armor = (BaseArmor)item;

                            if (armor.Durability > 0 ||
                                armor.ProtectionLevel > 0)
                            {
                                items.Add(item);
                            }
                        }
                        //else if ( !duel.Potions && item is BasePotion )
                        //items.Add( item );
                        else if (!duel.Bandages && item is Bandage)
                        {
                            items.Add(item);
                        }
                    }
                }
            }

            if (!duel.Mounts)
            {
                if (from.Mount != null)
                {
                    IMount mount = from.Mount;
                    mount.Rider = null;

                    if (mount is BaseCreature)
                    {
                        ((BaseCreature)mount).ControlOrder = OrderType.Stay;
                    }
                }
            }

            if (items.Count > 0)
            {
                foreach (Item item in items)
                {
                    bank.DropItem(item);
                }

                from.SendMessage("Some equipment has been moved to your bankbox due to restrictions on this duel.");
            }
        }
示例#16
0
        public void Target(Mobile m)
        {
            Type t           = m.GetType();
            bool dispellable = false;

            if (m is BaseCreature)
            {
                dispellable = ((BaseCreature)m).Summoned && !((BaseCreature)m).IsAnimatedDead;
            }
            else if (m == Caster)
            {
                dispellable = true;
            }

            if (!Caster.CanSee(m))
            {
                Caster.SendLocalizedMessage(500237); // Target can not be seen.
            }
            else if (!dispellable)
            {
                Caster.SendLocalizedMessage(1005049); // That cannot be dispelled.
            }
            else if (CheckHSequence(m))
            {
                if (m == Caster)
                {
                    //2010.05.24 - Pix - New functionality - if caster casts dispel on himself, void all
                    // magic effects.

                    //Protection
                    if (ProtectionSpell.Registry.Contains(Caster))
                    {
                        ProtectionSpell.Registry.Remove(Caster);
                    }
                    //Reactive Armor
                    Caster.MeleeDamageAbsorb = 0;
                    //Reflect
                    Caster.MagicDamageAbsorb = 0;

                    //restart defensivespell "timer"
                    DefensiveSpell.Nullify(Caster);

                    //NightSight
                    if (!Caster.CanBeginAction(typeof(LightCycle)))
                    {
                        Caster.EndAction(typeof(LightCycle));
                        Caster.LightLevel = 0;
                    }

                    //Strength
                    string  name = String.Format("[Magic] {0} Offset", StatType.Str);
                    StatMod mod  = Caster.GetStatMod(name);
                    if (mod != null /*&& mod.Offset > 0*/)
                    {
                        Caster.RemoveStatMod(name);
                    }
                    //Agility
                    name = String.Format("[Magic] {0} Offset", StatType.Dex);
                    mod  = Caster.GetStatMod(name);
                    if (mod != null /*&& mod.Offset > 0*/)
                    {
                        Caster.RemoveStatMod(name);
                    }
                    //Cunning
                    name = String.Format("[Magic] {0} Offset", StatType.Int);
                    mod  = Caster.GetStatMod(name);
                    if (mod != null /*&& mod.Offset > 0*/)
                    {
                        Caster.RemoveStatMod(name);
                    }
                    //Bless - handled by above three

                    //Incognito
                    if (!Caster.CanBeginAction(typeof(IncognitoSpell)))
                    {
                        if (Caster is PlayerMobile)
                        {
                            ((PlayerMobile)Caster).SetHairMods(-1, -1);
                        }

                        Caster.BodyMod = 0;
                        Caster.HueMod  = -1;
                        Caster.NameMod = null;
                        Caster.EndAction(typeof(IncognitoSpell));

                        BaseArmor.ValidateMobile(Caster);
                    }

                    //ArchProtection
                    if (!Caster.CanBeginAction(typeof(ArchProtectionSpell)))
                    {
                        Caster.VirtualArmorMod = 0;
                        Caster.EndAction(typeof(ArchProtectionSpell));
                    }

                    //Polymorph
                    if (!Caster.CanBeginAction(typeof(PolymorphSpell)))
                    {
                        Caster.BodyMod = 0;
                        Caster.HueMod  = -1;
                        Caster.EndAction(typeof(PolymorphSpell));

                        BaseArmor.ValidateMobile(Caster);
                    }

                    //Invisibility (shouldn't ever happen, but what the f**k, might as well put it in!)
                    if (Caster.AccessLevel <= AccessLevel.Player) //make sure if we're staff, don't reveal
                    {
                        Caster.Hidden = false;
                    }

                    Effects.SendLocationParticles(EffectItem.Create(m.Location, m.Map, EffectItem.DefaultDuration), 0x3728, 8, 20, 5042);
                    Effects.PlaySound(m, m.Map, 0x201);

                    Caster.SendMessage("All beneficial magic effects have been stripped from you.");
                }
                else //Normal dispel dispellable creature stuff:
                {
                    SpellHelper.Turn(Caster, m);

                    BaseCreature bc = m as BaseCreature;

                    double dispelChance = 0;

                    if (bc != null)
                    {
                        // players don't have trouble dispelling the summons of a summoner (magery+spirit speak)
                        if (Caster is PlayerMobile || bc.ControlMaster == null)
                        {
                            dispelChance = (50.0 + ((100 * (Caster.Skills.Magery.Value - bc.DispelDifficulty)) / (bc.DispelFocus * 2))) / 100;
                        }
                        else
                        {
                            double difficulty = bc.DispelDifficulty + bc.ControlMaster.Skills.SpiritSpeak.Value / 2.0;
                            if (difficulty > 125)
                            {
                                difficulty = 125;
                            }
                            dispelChance = (50.0 + ((100 * (Caster.Skills.Magery.Value - difficulty)) / (bc.DispelFocus * 2))) / 100;
                        }
                    }

                    if (dispelChance > Utility.RandomDouble())
                    {
                        Effects.SendLocationParticles(EffectItem.Create(m.Location, m.Map, EffectItem.DefaultDuration), 0x3728, 8, 20, 5042);
                        Effects.PlaySound(m, m.Map, 0x201);
                        bc.OnBeforeDispel(Caster);
                        m.Delete();
                    }
                    else
                    {
                        m.FixedEffect(0x3779, 10, 20);
                        Caster.SendLocalizedMessage(1010084); // The creature resisted the attempt to dispel it!
                    }
                }
            }

            FinishSequence();
        }
示例#17
0
        public static void Damage(Spell spell, TimeSpan delay, Mobile target, Mobile from, double damage, int phys, int fire, int cold, int pois, int nrgy, DFAlgorithm dfa)
        {
            int iDamage = (int)damage;

            #region Taran: Spell damage is based on armor difference

            /*
             * double newDamage = damage;
             *
             * if (target is PlayerMobile && from is PlayerMobile)
             * {
             *  World.Broadcast(25, true, "Old damage is: " + iDamage);
             *
             *  double defar = ((PlayerMobile) target).BaseArmorRatingSpells;
             *  double attar = ((PlayerMobile) from).BaseArmorRatingSpells;
             *
             *  double diff = defar - attar;
             *
             *  World.Broadcast(50, true, "Difference in armor rating is: " + diff);
             *
             *  if (defar - attar > 0)
             *      newDamage = iDamage*(1.00 - ((diff * 1.6) / 100));
             *
             *  if (newDamage / iDamage < 0.6) //Don't deal less than 60% damage
             *      newDamage = iDamage*0.6;
             *
             *  iDamage = (int) newDamage;
             *
             *  World.Broadcast(25, true, "New damage is: " + iDamage);
             * }
             */
            #endregion

            //Maka);
            if (target == from && from.MagicDamageAbsorb > 0)
            {
                from.FixedEffect(0x37B9, 10, 5);
                from.MagicDamageAbsorb = 0;
                iDamage = 0;
                DefensiveSpell.Nullify(from);
            }

            if (Evasion.CheckSpellEvasion(target))
            {
                iDamage = 0;
            }

            if (delay == TimeSpan.Zero)
            {
                if (from is BaseCreature)
                {
                    ((BaseCreature)from).AlterSpellDamageTo(target, ref iDamage);
                }

                if (target is BaseCreature)
                {
                    ((BaseCreature)target).AlterSpellDamageFrom(from, ref iDamage);
                }

                //WeightOverloading.DFA = dfa;

                int damageGiven = AOS.Damage(target, from, iDamage, phys, fire, cold, pois, nrgy);
                DoLeech(damageGiven, from, target);

                //WeightOverloading.DFA = DFAlgorithm.Standard;
            }
            else
            {
                new SpellDamageTimerAOS(spell, target, from, iDamage, phys, fire, cold, pois, nrgy, delay, dfa).Start();
            }

            if (target is BaseCreature && from != null && delay == TimeSpan.Zero)
            {
                BaseCreature c = (BaseCreature)target;

                c.OnHarmfulSpell(from);
                c.OnDamagedBySpell(from);
            }
        }