using System;
using Server;
using Server.Items;
using Server.Mobiles;

namespace Server.Engines.Quests
{	
	public class EvilEyeQuest : BaseQuest
	{				
		/* Evil Eye */
		public override object Title{ get{ return 1073084; } }
		
		/* Kind traveler, hear my plea. You know of the evil orbs? The wrathful eyes? Some call 
		them gazers? They must be a nest nearby, for they are tormenting us poor folk. We need 
		to drive back their numbers. But we are not strong enough to face such horrors ourselves, 
		we need a true hero. */	
		public override object Description{ get{ return 1073574; } }
		
		/* I hope you'll reconsider. Until then, farwell. */
		public override object Refuse{ get{ return 1073580; } }
		
		/* Have you annihilated a dozen Gazers yet, kind traveler? */
		public override object Uncomplete{ get{ return 1073594; } }
	
		public EvilEyeQuest() : base()
		{			
			AddObjective( new SlayObjective( typeof( Gazer ), "gazers", 12 ) );
			
			AddReward( new BaseReward( typeof( TreasureBag ), 1072583 ) );
		}
		
		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();
		}		
	}
	
	public class ImpishDelightsQuest : BaseQuest
	{				
		/* Impish Delights */
		public override object Title{ get{ return 1073077; } }
		
		/* Imps! Do you hear me? Imps! They're everywhere! They're in everything! Oh, don't be fooled 
		by their size - they vicious little devils! Half-sized evil incarnate, they are! Somebody 
		needs to send them back to where they came from, if you know what I mean. */	
		public override object Description{ get{ return 1073567; } }
		
		/* I hope you'll reconsider. Until then, farwell. */
		public override object Refuse{ get{ return 1073580; } }
		
		/* Don't let the little devils scare you! You  kill 12 imps - then we'll talk reward. */
		public override object Uncomplete{ get{ return 1073587; } }
	
		public ImpishDelightsQuest() : base()
		{			
			AddObjective( new SlayObjective( typeof( Imp ), "imps", 12 ) );
			
			AddReward( new BaseReward( typeof( TreasureBag ), 1072583 ) );
		}
		
		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();
		}		
	}
	
	public class StirringTheNestQuest : BaseQuest
	{				
		public override bool AllObjectives{ get{ return false; } }
	
		/* Stirring the Nest */
		public override object Title{ get{ return 1073087; } }
		
		/* Were you the sort of child that enjoyed knocking over anthills? Well, perhaps you'd like 
		to try something a little bigger? There's a Solen nest nearby and I bet if you killed a queen 
		or two, it would be quite the sight to behold.  I'd even pay to see that - what do you say? */	
		public override object Description{ get{ return 1073577; } }
		
		/* I hope you'll reconsider. Until then, farwell. */
		public override object Refuse{ get{ return 1073580; } }
		
		/* Dead Solen Queens isn't too much to ask, is it? */
		public override object Uncomplete{ get{ return 1073597; } }
	
		public StirringTheNestQuest() : base()
		{			
			AddObjective( new SlayObjective( typeof( RedSolenQueen ), "red solen queens", 3 ) );
			AddObjective( new SlayObjective( typeof( BlackSolenQueen ), "black solen queens", 3 ) );
			
			AddReward( new BaseReward( typeof( TreasureBag ), 1072583 ) );
		}
		
		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();
		}		
	}
	
	public class UndeadMagesQuest : BaseQuest
	{				
		public override bool AllObjectives{ get{ return false; } }
	
		/* Undead Mages */
		public override object Title{ get{ return 1073080; } }
		
		/* Why must the dead plague the living? With their foul necromancy and dark sorceries, the undead 
		menace the countryside. I fear what will happen if no one is strong enough to face these nightmare 
		sorcerers and thin their numbers. */	
		public override object Description{ get{ return 1073570; } }
		
		/* I hope you'll reconsider. Until then, farwell. */
		public override object Refuse{ get{ return 1073580; } }
		
		/* Surely, a brave soul like yourself can kill 10 Bone Magi and Skeletal Mages? */
		public override object Uncomplete{ get{ return 1073590; } }
	
		public UndeadMagesQuest() : base()
		{			
			AddObjective( new SlayObjective( typeof( BoneMagi ), "bone mages", 10 ) );
			AddObjective( new SlayObjective( typeof( SkeletalMage ), "skeletal mages", 10 ) );
			
			AddReward( new BaseReward( typeof( TreasureBag ), 1072583 ) );
		}
		
		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();
		}		
	}
	
	public class TheAfterlifeQuest : BaseQuest
	{					
		/* The Afterlife */
		public override object Title{ get{ return 1073073; } }
		
		/* Nobody told me about the Mummy's Curse. How was I supposed to know you shouldn't disturb the tombs? 
		Oh, sure, now all I hear about is the curse of the vengeful dead. I'll tell you what - make a few of 
		these mummies go away and we'll keep this between you and me. */	
		public override object Description{ get{ return 1073563; } }
		
		/* I hope you'll reconsider. Until then, farwell. */
		public override object Refuse{ get{ return 1073580; } }
		
		/* Uh, I don't think you're quite done killing Mummies yet. */
		public override object Uncomplete{ get{ return 1073583; } }
	
		public TheAfterlifeQuest() : base()
		{			
			AddObjective( new SlayObjective( typeof( Mummy ), "mummies", 15 ) );
			
			AddReward( new BaseReward( typeof( TreasureBag ), 1072583 ) );
		}
		
		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();
		}		
	}
	
	public class FriendlyNeighborhoodSpiderkillerQuest : BaseQuest
	{					
		/* Friendly Neighborhood Spider-killer */
		public override object Title{ get{ return 1073662; } }
		
		/* They aren't called Dread Spiders because they're fluffy and cuddly now, are they? No, there's nothing 
		appealing about those wretches so I sure wouldn't lose any sleep if you were to exterminate a few. I'd 
		even part with a generous amount of gold, I would. */
		public override object Description{ get{ return 1073701; } }
		
		/* Perhaps you'll change your mind and return at some point. */
		public override object Refuse{ get{ return 1073733; } }
		
		/* Dread Spiders? I say keep exterminating the arachnid vermin. */
		public override object Uncomplete{ get{ return 1073742; } }
	
		public FriendlyNeighborhoodSpiderkillerQuest() : base()
		{			
			AddObjective( new SlayObjective( typeof( DreadSpider ), "dread spiders", 8 ) );
			
			AddReward( new BaseReward( typeof( LargeTreasureBag ), 1072706 ) );
		}
		
		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();
		}		
	}
	
	public class GargoylesWrathQuest : BaseQuest
	{					
		/* Gargoyle's Wrath */
		public override object Title{ get{ return 1073658; } }
		
		/* It is regretable that the Gargoyles insist upon warring with us. Their Enforcers attack men on sight, despite 
		all efforts at reason. To help maintain order in this region, I have been authorized to encourage bounty hunters 
		to reduce their numbers. Eradicate their number and I will reward you handsomely. */
		public override object Description{ get{ return 1073697; } }
		
		/* Perhaps you'll change your mind and return at some point. */
		public override object Refuse{ get{ return 1073733; } }
		
		/* I won't be able to pay you until you've gotten enough Gargoyle Enforcers. */
		public override object Uncomplete{ get{ return 1073738; } }
	
		public GargoylesWrathQuest() : base()
		{			
			AddObjective( new SlayObjective( typeof( GargoyleEnforcer ), "gargoyle enforcers", 6 ) );
			
			AddReward( new BaseReward( typeof( LargeTreasureBag ), 1072706 ) );
		}
		
		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();
		}		
	}
	
	public class ThreeWishesQuest : BaseQuest
	{					
		/* Three Wishes */
		public override object Title{ get{ return 1073660; } }
		
		/* If I had but one wish, it would be to rid myself of these dread Efreet! Fire and ash, they are cunning and 
		deadly! You look a brave soul - would you be interested in earning a rich reward for slaughtering a few of the 
		smoky devils? */
		public override object Description{ get{ return 1073699; } }
		
		/* Perhaps you'll change your mind and return at some point. */
		public override object Refuse{ get{ return 1073733; } }
		
		/* Those smoky devils, the Efreets, are still about. */
		public override object Uncomplete{ get{ return 1073740; } }
	
		public ThreeWishesQuest() : base()
		{			
			AddObjective( new SlayObjective( typeof( Efreet ), "efreets", 8 ) );
			
			AddReward( new BaseReward( typeof( LargeTreasureBag ), 1072706 ) );
		}
		
		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();
		}		
	}
	
	public class ForkedTongueQuest : BaseQuest
	{					
		public override bool AllObjectives{ get{ return false; } }
		
		/* Forked Tongue */
		public override object Title{ get{ return 1073655; } }
		
		/* I must implore you, brave traveler, to do battle with the vile reptiles which haunt these parts. Those hideous 
		abominations, the Ophidians, are a blight across the land. If you were able to put down a host of the scaly 
		warriors, the Knights or the Avengers, I would forever be in your debt. */
		public override object Description{ get{ return 1073694; } }
		
		/* Perhaps you'll change your mind and return at some point. */
		public override object Refuse{ get{ return 1073733; } }
		
		/* Have you killed the Ophidian Knights or Avengers? */
		public override object Uncomplete{ get{ return 1073735; } }
	
		public ForkedTongueQuest() : base()
		{			
			AddObjective( new SlayObjective( typeof( OphidianKnight ), "ophidian knight-errants", 10 ) );
			AddObjective( new SlayObjective( typeof( OphidianMage ), "ophidian mages", 10 ) );
			
			AddReward( new BaseReward( typeof( LargeTreasureBag ), 1072706 ) );
		}
		
		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();
		}		
	}
	
	public class MongbatMenaceQuest : BaseQuest
	{							
		/* Mongbat Menace! */
		public override object Title{ get{ return 1073003; } }
		
		/* I imagine you don't know about the mongbats.  Well, you may think you do, but I know more than just about anyone.  
		You see they come in two varieties ... the stronger and the weaker.  Either way, they're a menace.  Exterminate ten 
		of the weaker ones and four of the stronger and I'll pay you an honest wage. */
		public override object Description{ get{ return 1073033; } }
		
		/* Well, okay. But if you decide you are up for it after all, c'mon back and see me. */
		public override object Refuse{ get{ return 1072270; } }
		
		/* You're not quite done yet.  Get back to work! */
		public override object Uncomplete{ get{ return 1072271; } }
	
		public MongbatMenaceQuest() : base()
		{			
			AddObjective( new SlayObjective( typeof( Mongbat ), "mongbats", 10 ) );
			AddObjective( new SlayObjective( typeof( StrongMongbat ), "greater mongbats", 4 ) );
			
			AddReward( new BaseReward( typeof( TrinketBag ), 1072341 ) );
		}
		
		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();
		}		
	}

	public class Brinnae : MondainQuester
	{		
		public override Type[] Quests
		{ 
			get{ return new Type[] 
			{ 
				typeof( EvilEyeQuest ),
				typeof( ImpishDelightsQuest ),
				typeof( StirringTheNestQuest ),
				typeof( UndeadMagesQuest ),
				typeof( TheAfterlifeQuest ),
				typeof( FriendlyNeighborhoodSpiderkillerQuest ),
				typeof( GargoylesWrathQuest ),
				typeof( ThreeWishesQuest ),
				typeof( ForkedTongueQuest ),
				typeof( CircleOfLifeQuest ),
				typeof( MongbatMenaceQuest )
			};} 
		}
		
		[Constructable]
		public Brinnae() : base( "Brinnae", "the wise" )
		{			
			SetSkill( SkillName.Focus, 60.0, 83.0 );
		}
		
		public Brinnae( Serial serial ) : base( serial )
		{
		}
		
		public override void InitBody()
		{
			InitStats( 100, 100, 25 );
			
			Female = true;
			Race = Race.Elf;
			
			Hue = 0x8382;
			HairItemID = 0x2FD0;
			HairHue = 0x852;
		}
		
		public override void InitOutfit()
		{
			AddItem( new ElvenBoots( 0x1BB ) );
			AddItem( new LeafArms() );
			AddItem( new FemaleLeafChest() );
			AddItem( new HidePants() );
			AddItem( new ElvenCompositeLongbow() );
		}
		
		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();
		}
	}
}