using System; namespace Server.Mobiles { public class Silvani : BaseCreature { [Constructable] public Silvani() : base(AIType.AI_Mage, FightMode.Evil, 18, 1, 0.1, 0.2) { this.Name = "Silvani"; this.Body = 176; this.BaseSoundID = 0x467; this.SetStr(253, 400); this.SetDex(157, 850); this.SetInt(503, 800); this.SetHits(600); this.SetDamage(27, 38); this.SetDamageType(ResistanceType.Physical, 75); this.SetDamageType(ResistanceType.Cold, 25); this.SetResistance(ResistanceType.Physical, 45, 55); this.SetResistance(ResistanceType.Fire, 30, 40); this.SetResistance(ResistanceType.Cold, 30, 40); this.SetResistance(ResistanceType.Poison, 40, 50); this.SetResistance(ResistanceType.Energy, 40, 50); this.SetSkill(SkillName.EvalInt, 100.0); this.SetSkill(SkillName.Magery, 97.6, 107.5); this.SetSkill(SkillName.Meditation, 100.0); this.SetSkill(SkillName.MagicResist, 100.5, 150.0); this.SetSkill(SkillName.Tactics, 97.6, 100.0); this.SetSkill(SkillName.Wrestling, 97.6, 100.0); this.Fame = 20000; this.Karma = 20000; this.VirtualArmor = 50; } public Silvani(Serial serial) : base(serial) { } public override TribeType Tribe { get { return TribeType.Fey; } } public override OppositionGroup OppositionGroup { get { return OppositionGroup.FeyAndUndead; } } public override bool CanFly { get { return true; } } public override bool Unprovokable { get { return true; } } public override Poison PoisonImmune { get { return Poison.Regular; } } public override int TreasureMapLevel { get { return 5; } } public override void GenerateLoot() { this.AddLoot(LootPack.UltraRich, 2); } public void SpawnPixies(Mobile target) { Map map = this.Map; if (map == null) return; int newPixies = Utility.RandomMinMax(3, 6); for (int i = 0; i < newPixies; ++i) { Pixie pixie = new Pixie(); pixie.Team = this.Team; pixie.FightMode = FightMode.Closest; bool validLocation = false; Point3D loc = this.Location; for (int j = 0; !validLocation && j < 10; ++j) { int x = this.X + Utility.Random(3) - 1; int y = this.Y + Utility.Random(3) - 1; int z = map.GetAverageZ(x, y); if (validLocation = map.CanFit(x, y, this.Z, 16, false, false)) loc = new Point3D(x, y, this.Z); else if (validLocation = map.CanFit(x, y, z, 16, false, false)) loc = new Point3D(x, y, z); } pixie.MoveToWorld(loc, map); pixie.Combatant = target; } } public override void AlterDamageScalarFrom(Mobile caster, ref double scalar) { if (0.1 >= Utility.RandomDouble()) this.SpawnPixies(caster); } public override void OnGaveMeleeAttack(Mobile defender) { base.OnGaveMeleeAttack(defender); defender.Damage(Utility.Random(20, 10), this); defender.Stam -= Utility.Random(20, 10); defender.Mana -= Utility.Random(20, 10); } public override void OnGotMeleeAttack(Mobile attacker) { base.OnGotMeleeAttack(attacker); if (0.1 >= Utility.RandomDouble()) this.SpawnPixies(attacker); } public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write((int)0); // version } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); } } }