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); } }
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); }
public static int GetFocusLevel(Mobile from) { ArcaneFocus focus = FindArcaneFocus(from); if (focus == null || focus.Deleted) { return(0); } return(focus.StrengthBonus); }
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); }
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); } }
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()); }
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()); } }