ModernUO/Scripts/Mobiles/Monsters/ML/Prism of Light/CrystalLatticeSeeker.cs
2018-09-14 08:41:38 -07:00

150 lines
3.6 KiB
C#

namespace Server.Mobiles
{
public class CrystalLatticeSeeker : BaseCreature
{
public override string CorpseName => "a Crystal Lattice Seeker corpse";
public override string DefaultName => "Crystal Lattice Seeker";
[Constructible]
public CrystalLatticeSeeker()
: base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Body = 0x7B;
Hue = 0x47E;
SetStr( 550, 850 );
SetDex( 190, 250 );
SetInt( 350, 450 );
SetHits( 350, 550 );
SetDamage( 13, 19 );
SetDamageType( ResistanceType.Physical, 100 );
SetResistance( ResistanceType.Physical, 80, 90 );
SetResistance( ResistanceType.Fire, 40, 50 );
SetResistance( ResistanceType.Cold, 40, 50 );
SetResistance( ResistanceType.Poison, 40, 50 );
SetResistance( ResistanceType.Energy, 40, 50 );
SetSkill( SkillName.Anatomy, 50.0, 75.0 );
SetSkill( SkillName.EvalInt, 90.0, 100.0 );
SetSkill( SkillName.Magery, 100.0, 100.0 );
SetSkill( SkillName.Meditation, 90.0, 100.0 );
SetSkill( SkillName.MagicResist, 90.0, 100.0 );
SetSkill( SkillName.Tactics, 90.0, 100.0 );
SetSkill( SkillName.Wrestling, 90.0, 100.0 );
Fame = 17000;
Karma = -17000;
PackArcaneScroll( 0, 2 );
}
public override void GenerateLoot()
{
AddLoot( LootPack.FilthyRich, 4 );
// TODO: uncomment once added
//AddLoot( LootPack.Parrot );
AddLoot( LootPack.Gems );
}
public override void OnGaveMeleeAttack( Mobile defender )
{
base.OnGaveMeleeAttack( defender );
if ( Utility.RandomDouble() < 0.1 )
Drain( defender );
}
public override void OnGotMeleeAttack( Mobile attacker )
{
base.OnGotMeleeAttack( attacker );
if ( Utility.RandomDouble() < 0.1 )
Drain( attacker );
}
public virtual void Drain( Mobile m )
{
int toDrain;
switch ( Utility.Random( 3 ) )
{
case 0:
{
Say( 1042156 ); // I can grant life, and I can sap it as easily.
PlaySound( 0x1E6 );
toDrain = Utility.RandomMinMax( 3, 6 );
Hits += toDrain;
m.Hits -= toDrain;
break;
}
case 1:
{
Say( 1042157 ); // You'll go nowhere, unless I deem it should be so.
PlaySound( 0x1DF );
toDrain = Utility.RandomMinMax( 10, 25 );
Stam += toDrain;
m.Stam -= toDrain;
break;
}
case 2:
{
Say( 1042155 ); // Your power is mine to use as I will.
PlaySound( 0x1F8 );
toDrain = Utility.RandomMinMax( 15, 25 );
Mana += toDrain;
m.Mana -= toDrain;
break;
}
}
}
/*
// TODO: uncomment once added
public override void OnDeath( Container c )
{
base.OnDeath( c );
if ( Utility.RandomDouble() < 0.75 )
c.DropItem( new CrystallineFragments() );
if ( Utility.RandomDouble() < 0.07 )
c.DropItem( new PiecesOfCrystal() );
}
*/
public override int Feathers => 100;
public override int TreasureMapLevel => 5;
public override int GetAttackSound() { return 0x2F6; }
public override int GetDeathSound() { return 0x2F7; }
public override int GetAngerSound() { return 0x2F8; }
public override int GetHurtSound() { return 0x2F9; }
public override int GetIdleSound() { return 0x2FA; }
public CrystalLatticeSeeker( Serial serial )
: base( serial )
{
}
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();
}
}
}