Esempio n. 1
0
        private void GiveArcaneFocus(Mobile to, TimeSpan duration, int strengthBonus)
        {
            if (to == null) //Sanity
            {
                return;
            }

            ArcaneFocus focus = FindArcaneFocus(to);

            if (focus == null)
            {
                ArcaneFocus f = new ArcaneFocus(duration, strengthBonus);
                if (to.PlaceInBackpack(f))
                {
                    f.SendTimeRemainingMessage(to);
                    to.SendLocalizedMessage(1072740); // An arcane focus appears in your backpack.
                }
                else
                {
                    f.Delete();
                }
            }
            else                                  //OSI renewal rules: the new one will override the old one, always.
            {
                to.SendLocalizedMessage(1072828); // Your arcane focus is renewed.
                focus.LifeSpan      = duration;
                focus.CreationTime  = DateTime.UtcNow;
                focus.StrengthBonus = strengthBonus;
                focus.InvalidateProperties();
                focus.SendTimeRemainingMessage(to);
            }
        }
Esempio n. 2
0
        public SummonedReaper(Mobile caster, SummonReaperSpell spell)
            : base(AIType.AI_Spellweaving, FightMode.Closest, 10, 1, 0.2, 0.4)
        {
            Name        = "a reaper";
            Body        = 47;
            BaseSoundID = 442;

            double scale = 1.0 + ((caster.Skills[spell.CastSkill].Value + spell.GetMasteryLevel() * 40 + ArcanistSpell.GetFocusLevel(caster) * 20)) / 1000.0;

            SetStr((int)(450 * scale), (int)(500 * scale));
            SetDex((int)(130 * scale));
            SetInt((int)(247 * scale));

            SetHits((int)(450 * scale));

            SetDamage(16, 20);

            SetDamageType(ResistanceType.Physical, 80);
            SetDamageType(ResistanceType.Poison, 20);

            SetResistance(ResistanceType.Physical, 70);
            SetResistance(ResistanceType.Fire, 15);
            SetResistance(ResistanceType.Cold, 18);
            SetResistance(ResistanceType.Poison, 100);
            SetResistance(ResistanceType.Energy, 69);

            SetSkill(SkillName.Spellweaving, Math.Max(100, 75 * scale));
            SetSkill(SkillName.Anatomy, Math.Max(100, 75 * scale));
            SetSkill(SkillName.MagicResist, Math.Max(100, 75 * scale));
            SetSkill(SkillName.Tactics, Math.Max(100, 75 * scale));
            SetSkill(SkillName.Wrestling, Math.Max(100, 75 * scale));

            ControlSlots = 5;

            Timer.DelayCall(TimeSpan.FromSeconds(1), () =>
            {
                ArcaneFocus casterFocus = ArcanistSpell.FindArcaneFocus(caster);

                if (casterFocus != null)
                {
                    ArcaneFocus f = new ArcaneFocus(casterFocus.LifeSpan, casterFocus.StrengthBonus)
                    {
                        CreationTime = casterFocus.CreationTime,
                        Movable      = false
                    };

                    PackItem(f);
                }
            });

            m_DispelDifficulty = 91 + (int)((caster.Skills[SkillName.Spellweaving].Base * 83) / 5.2);

            _NextAura = Core.TickCount + 3000;
            SetWeaponAbility(WeaponAbility.WhirlwindAttack);
        }
Esempio n. 3
0
        public static int GetFocusLevel(Mobile from)
        {
            ArcaneFocus focus = FindArcaneFocus(from);

            if (focus == null || focus.Deleted)
            {
                return(0);
            }

            return(focus.StrengthBonus);
        }
Esempio n. 4
0
        public SummonedReaper(Mobile caster, SummonReaperSpell spell)
            : base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4)
        {
            Name        = "a reaper";
            Body        = 47;
            BaseSoundID = 442;

            double scale = 1.0 + ((caster.Skills[spell.CastSkill].Value + (double)(spell.GetMasteryLevel() * 40) + (double)(ArcanistSpell.GetFocusLevel(caster) * 20))) / 1000.0;

            SetStr((int)(450 * scale), (int)(500 * scale));
            SetDex((int)(130 * scale));
            SetInt((int)(247 * scale));

            SetHits((int)(450 * scale));

            SetDamage(16, 20);

            SetDamageType(ResistanceType.Physical, 80);
            SetDamageType(ResistanceType.Poison, 20);

            SetResistance(ResistanceType.Physical, 70);
            SetResistance(ResistanceType.Fire, 15);
            SetResistance(ResistanceType.Cold, 18);
            SetResistance(ResistanceType.Poison, 100);
            SetResistance(ResistanceType.Energy, 69);

            SetSkill(SkillName.Spellweaving, Math.Max(100, 75 * scale));
            SetSkill(SkillName.Anatomy, Math.Max(100, 75 * scale));
            SetSkill(SkillName.MagicResist, Math.Max(100, 75 * scale));
            SetSkill(SkillName.Tactics, Math.Max(100, 75 * scale));
            SetSkill(SkillName.Wrestling, Math.Max(100, 75 * scale));

            ControlSlots = 5;

            Timer.DelayCall(TimeSpan.FromSeconds(1), () =>
            {
                ArcaneFocus casterFocus = ArcanistSpell.FindArcaneFocus(caster);

                if (casterFocus != null)
                {
                    ArcaneFocus f  = new ArcaneFocus(casterFocus.LifeSpan, casterFocus.StrengthBonus);
                    f.CreationTime = casterFocus.CreationTime;
                    f.Movable      = false;

                    PackItem(f);
                }
            });

            _StartTime = DateTime.UtcNow + TimeSpan.FromSeconds(3);
        }
Esempio n. 5
0
        private void GiveArcaneFocus(Mobile to, TimeSpan duration, int strengthBonus)
        {
            if (to == null)	//Sanity
                return;

            ArcaneFocus focus = FindArcaneFocus(to);

            if (focus == null)
            {
                ArcaneFocus f = new ArcaneFocus(duration, strengthBonus);
                if (to.PlaceInBackpack(f))
                {
                    to.AddStatMod(new StatMod(StatType.Str, "[ArcaneFocus]", strengthBonus, duration));

                    f.SendTimeRemainingMessage(to);
                    to.SendLocalizedMessage(1072740); // An arcane focus appears in your backpack.
                }
                else
                {
                    f.Delete();
                }
            }
            else //OSI renewal rules: the new one will override the old one, always.
            {
                to.SendLocalizedMessage(1072828); // Your arcane focus is renewed.
                focus.LifeSpan = duration;
                focus.CreationTime = DateTime.Now;
                focus.StrengthBonus = strengthBonus;
                focus.InvalidateProperties();
                focus.SendTimeRemainingMessage(to);
            }
        }
Esempio n. 6
0
        public void CheckFocus()
        {
            ArcaneFocus focus = ArcanistSpell.FindArcaneFocus(this.m_Mobile);

            if (focus != null)
                return;

            if (this.m_Mobile.Debug)
                this.m_Mobile.Say(1436, "I have no Arcane Focus");

            BaseCreature bc = null;
            int power = 1;

            foreach (Mobile m in this.m_Mobile.GetMobilesInRange(10))
            {
                if (m == null)
                    continue;
                else if (m == this.m_Mobile)
                    continue;
                else if (!(m is BaseCreature))
                    continue;

                bc = (BaseCreature)m;

                if (bc.Skills[SkillName.Spellweaving].Value > 50.0)
                    if (this.m_Mobile.Controlled == bc.Controlled && this.m_Mobile.Summoned == bc.Summoned)
                        power++;
            }

            if (power > 6)
                power = 6;
            else if (power < 2) // No spellweavers found, setting to min required.
                power = 2;

            ArcaneFocus f = new ArcaneFocus(TimeSpan.FromHours(1), power);

            Container pack = this.m_Mobile.Backpack;

            if (pack == null)
            {
                this.m_Mobile.EquipItem(new Backpack());
                pack = this.m_Mobile.Backpack;
            }

            pack.DropItem(f);

            if (this.m_Mobile.Debug)
                this.m_Mobile.Say(1436, "I created an Arcane Focus, it's level is: " + power.ToString());
        }
Esempio n. 7
0
        public void CheckFocus()
        {
            ArcaneFocus focus = ArcanistSpell.FindArcaneFocus(this.m_Mobile);

            if (focus != null)
            {
                return;
            }

            if (this.m_Mobile.Debug)
            {
                this.m_Mobile.Say(1436, "I have no Arcane Focus");
            }

            BaseCreature bc    = null;
            int          power = 1;

            foreach (Mobile m in this.m_Mobile.GetMobilesInRange(10))
            {
                if (m == null)
                {
                    continue;
                }
                else if (m == this.m_Mobile)
                {
                    continue;
                }
                else if (!(m is BaseCreature))
                {
                    continue;
                }

                bc = (BaseCreature)m;

                if (bc.Skills[SkillName.Spellweaving].Value > 50.0)
                {
                    if (this.m_Mobile.Controlled == bc.Controlled && this.m_Mobile.Summoned == bc.Summoned)
                    {
                        power++;
                    }
                }
            }

            if (power > 6)
            {
                power = 6;
            }
            else if (power < 2) // No spellweavers found, setting to min required.
            {
                power = 2;
            }

            ArcaneFocus f = new ArcaneFocus(TimeSpan.FromHours(1), power);

            Container pack = this.m_Mobile.Backpack;

            if (pack == null)
            {
                this.m_Mobile.EquipItem(new Backpack());
                pack = this.m_Mobile.Backpack;
            }

            pack.DropItem(f);

            if (this.m_Mobile.Debug)
            {
                this.m_Mobile.Say(1436, "I created an Arcane Focus, it's level is: " + power.ToString());
            }
        }