context: using Server;
  using System;
  using System.Linq;
  using System.Collections.Generic;
  using Server.Items;
  using Server.Mobiles;
  using Server.Engines.Harvest;
  using Server.Network;
  using Server.Gumps;
  
  namespace Server.Engines.Quests
  {
  	public class TimeIsOfTheEssenceQuest : BaseQuest
  	{        
  		public override QuestChain ChainID{ get{ return QuestChain.ValleyOfOne; } }
  		public override Type NextQuest{ get{ return typeof( UnitingTheTribesQuest ); } }
         
  		public override object Title{ get{ return 1156512; } } 			/*The Valley of One*/
  		
  		public override object Description{ get{ return 1156458; } }	/*Hawkwind: I'm afraid I have foreseen a most unfortunate timeline of events...
  																		<br><br>Blackthorn: Tell me, what is it that troubles you?<br><br>Hawkwind: I 
  																		brought the Britannians to Shadowguard to aid in the battle against Minax, in 
  																		doing so I fear I may have placed the native peoples in grave peril. The 
  																		Britannians are a curious and brave people, I fear that curiosity has put the 
  																		Valley of Eodon at risk. Britannians seek to take advantage of the natural 
  																		resources in Eodon.<br><br>Blackthorn: Such is the nature of all humans. Surely 
  																		you knew of this risk?<br><br>Hawkwind: Indeed, for every action there is an 
  																		equal and opposite reaction. Cause and effect are linked at the most fundamental
  																		levels.<br><br>Blackthorn: And so what is the effect of the Britannian's 
  																		adventurism?<br><br>Hawkwind: Scores of Dragon Turtles lay dead, tiger carcasses 
  																		litter the jungle floor. Native tribes people have been murdered at the hands of 
  																		what they only know as foreign invaders.<br><br>Blackthorn: *Blackthorn looks down 
  																		solemnly* One must ask whether the ends justify the means...<br><br>Hawkwind: We 
  																		could not allow Minax to take hold in Eodon.  As any other threat, I am certain the 
  																		Britannians will answer the call.<br><br>Blackthorn: Tis the very nature of my Kingdom 
  																		and its peoples to rise in a time of need.<br><br>Hawkwind: With so much death the 
  																		Myrmidex have grown increasingly bold. The abundance of carrion has lured them from 
  																		their dark pits to feed and bolster their numbers. The Barrab Tribe has seen this as 
  																		an omen and increased the fervor of their zealotism. If the Myrmidex are not held in 
  																		check, I fear the entire Valley will be overrun.<br><br>Blackthorn: Is there no way to
  																		stop the invasion?<br><br>Hawkwind: There is always another path on the Time Line. 
  																		We must unite the Tribes of Eodon against the Barrab. Only then can they stop the 
  																		Myrmidex invasion.<br><br>Blackthorn: *King Blackthorn smiles at you* Well then!  
  																		Take these orders to Sir Geoffrey at his camp near the Barrab Tribe in the Valley of 
  																		Eodon.  Godspeed!*/
  																		
  		public override object Refuse{ get{ return 1156460; } }			/* Tis unfortunate, in this time of great need we must look to our inner courage... */
  		
  		public override object Uncomplete{ get{ return 1156461; } }		/*There is little time to delay. Deliver the orders to Sir Geoffrey at his camp near 
  																		the Barrab Tribe in the Valley of Eodon.*/
  																		
  		public override object Complete{ get{ return 1156462; } }		/* Ahh, King Blackthorn sent you did he? */
  			
  		public TimeIsOfTheEssenceQuest() : base()
  		{                
  			AddObjective( new DeliverObjective( typeof(KingBlackthornOrders), "Orders from King Blackthorn to Sir Geoffrey", 1, typeof(SirGeoffery), "Sir Geoffery", 360 ) );        
  			
  			AddReward( new BaseReward( 1156459 ) ); // A step closer to quelling the Myrmidex threat...
  		}
  
          public override bool RenderObjective(MondainQuestGump g, bool offer)
          {
              if (offer)
                  g.AddHtmlLocalized(130, 45, 270, 16, 1049010, 0xFFFFFF, false, false); // Quest Offer
              else
                  g.AddHtmlLocalized(130, 45, 270, 16, 1046026, 0xFFFFFF, false, false); // Quest Log
  
              g.AddButton(130, 430, 0x2EEF, 0x2EF1, (int)Buttons.PreviousPage, GumpButtonType.Reply, 0);
              g.AddButton(275, 430, 0x2EE9, 0x2EEB, (int)Buttons.NextPage, GumpButtonType.Reply, 0);
  
              g.AddHtmlObject(160, 70, 330, 16, Title, BaseQuestGump.DarkGreen, false, false);
              g.AddHtmlLocalized(98, 140, 312, 16, 1049073, 0x2710, false, false); // Objective:
              g.AddHtmlLocalized(98, 156, 312, 16, 1072208, 0x2710, false, false); // All of the following	
              g.AddHtmlLocalized(98, 1, 40, 16, 1072207, 0x15F90, false, false); // Deliver
              g.AddHtmlLocalized(143, 172, 300, 16, 1156516, 0xFFFF, false, false); // Orders from King Blackthorn to Sir Geoffrey
  
              return true;
          }
         
  		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 UnitingTheTribesQuest : BaseQuest
  	{        
  		public override QuestChain ChainID{ get{ return QuestChain.ValleyOfOne; } }
         
  		public override object Title{ get{ return 1156463; } } 			/* Uniting the Tribes */
  		
  		public override object Description{ get{ return 1156464; } }	/* *Sir Geoffrey looks up at you* What's this? Ah! Here to join the effort then?
  																		We've been trying for weeks to push through to the Barrab and get them to give 
  																		us the secrets to entering the Myrmidex pits, but alas we have had little luck.  
  																		King Blackthorn seems to think our only hope is to pressure the Barrab via the 
  																		other Eodonian tribes.  We tried to approach them initially but were met with 
  																		aggression.  It wasn't until Professor Rafkin arrived that we were able to peacefully 
  																		communicate with them.  In order for them to join our cause you'll need to gain their 
  																		trust.  The Sakkhra worship these overgrown Lizardmen, "Di-no-saur" is the word they 
  																		use, bunch of rubbish if you ask me, but you should find their High Chief in the 
  																		Sakkhra walled village to the North beyond the rivers.  The Urali worship the 
  																		Dragon Turtle, shucks, to be honest I thought such a creature was myth until one 
  																		came crashing up on a beach during one of our early expeditions.  You can find the 
  																		Urali just north of the beach lined streams that are home to the Dragon Turtles.  The 
  																		Jukari worship the great Volcano.  Nasty bunch too, took out a company of my men with 
  																		pickaxes to the skull.  In any case, they can be found at the base of the Volcano to 
  																		the Southeast.  The Kurak are lightning fast and worship the jungle cats they call 
  																		"Ti-gers"  Cute little things until one rips you apart and drags you back to its den 
  																		*chuckles a bit*  Their tribe is in the lowlands to the Southwest.  The Barako live 
  																		high up in the trees and worship the gorillas that populate that region.  Professor 
  																		Rafkin says something about a mythical giant ape, bunch of baloney if you ask me.  
  																		Their tribe sits in the forest canopy to the East.  Bring me back proof that the 
  																		tribes have agreed to join our cause and you'll be rewarded handsomely.  Or this jungle 
  																		will tear you apart, whichever happens first.  Good luck!*/
  		
  		public override object Refuse{ get{ return 1156472; } }			/* Well then stop wasting my bloody time! Haven't you see we've got a war to win?! */
  		
  		public override object Uncomplete{ get{ return 1156518; } }		/* These tribes aren't going to unite themselves, best get on with it and visit the Sakkhra, 
  																		Urali, Jukari, Kurak, and Barako tribes!  We've got a war to win! */
  		
  		public override object Complete{ get{ return 1156519; } }		/*Well done! I don't know how you managed to pull it off but this is the break we've 
  																		been waiting for! With the support of the other tribes we can begin to plan an offensive
  																		to quell the Myrmidex threat!  It will likely take some time before our troops and the
  																		Tribes are ready.  I will send word when the time to attack comes!*/
             
  		public UnitingTheTribesQuest() : base()
  		{
              AddObjective(new ObtainObjective(typeof(MosaicOfHeluzz), "Trust of the Sakkhra Tribe", 1));
              AddObjective(new ObtainObjective(typeof(TotemOfFabozz), "Trust of the Urali Tribe", 1));
              AddObjective(new ObtainObjective(typeof(FiresOfKukuzz), "Trust of the Jukari Tribe", 1));
              AddObjective(new ObtainObjective(typeof(SkullOfMotazz), "Trust of the Kurak Tribe", 1));
              AddObjective(new ObtainObjective(typeof(SkullOfAphazz), "Trust of the Barako Tribe", 1));
  
              AddReward(new BaseReward(typeof(UniqueTreasureBag), 1, 1156581)); // A bag with a unique treasure
  		}
  
  		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 TheGreatHuntQuest : BaseQuest
  	{        
  		public override object Title{ get{ return 1156521; } } 			/* The Great Hunt */
  		
  		public override object Description{ get{ return 1156522; } }	/* *The Sakkhra High Chieftess looks at you apprehensively, 
  																		as the greeting Professor Rafkin's book taught you rolls from your tongue The 
  																		High Chief smiles and warms to you*  Rafkin say you can help Sakkhra.  Sakkhra 
  																		do not trust you.  You want Sakkhra trust, then you fight biggest of all dinosaur, 
  																		T Rex!  You survive the T Rex hunt, then Sakkhra trust you.  *The Chief motions you
  																		west to the nearby dinosaur plains* */
  																		
  		public override object Refuse{ get{ return 1156550; } }			/* *The Chieftess looks at you...* */
  		
  		public override object Uncomplete{ get{ return 1156531; } }		/* You not kill giant dino yet? Sakkhra will not help until you kill big dino! */
  		
  		public override object Complete{ get{ return 1156557; } }		/* Ahh-Ooo! Ahh-Ooo!  Britainnian kill big dino! Show courage and strength!  Sakkrah trust you now! */
             
  		public TheGreatHuntQuest() : base()
  		{                
              AddObjective(new SlayObjective(typeof(TRex), "Slay the Tyrannosaurus Rex", 1));
  			AddReward( new BaseReward( typeof(MosaicOfHeluzz), 1, 1156551  ) ); // Trust of the Sakkhra Tribe
  		}
  
          public override bool RenderObjective(MondainQuestGump g, bool offer)
          {
              if (offer)
                  g.AddHtmlLocalized(130, 45, 270, 16, 1049010, 0xFFFFFF, false, false); // Quest Offer
              else
                  g.AddHtmlLocalized(130, 45, 270, 16, 1046026, 0xFFFFFF, false, false); // Quest Log
  
              g.AddButton(130, 430, 0x2EEF, 0x2EF1, (int)Buttons.PreviousPage, GumpButtonType.Reply, 0);
              g.AddButton(275, 430, 0x2EE9, 0x2EEB, (int)Buttons.NextPage, GumpButtonType.Reply, 0);
  
              g.AddHtmlObject(160, 70, 330, 16, Title, BaseQuestGump.DarkGreen, false, false);
              g.AddHtmlLocalized(98, 140, 312, 16, 1049073, 0x2710, false, false); // Objective:
              g.AddHtmlLocalized(98, 156, 312, 16, 1072208, 0x2710, false, false); // All of the following	
              g.AddHtmlLocalized(98, 172, 300, 16, 1156533, 0xFFFF, false, false); // Slay the Tyrannosaurus Rex
  
              return true;
          }
  
  		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 EmptyNestQuest : BaseQuest
  	{        
  		public override object Title{ get{ return 1156523; } } 			/* Empty Nest */
  		
  		public override object Description{ get{ return 1156524; } }	/* *The Urali High Chieftess looks at you apprehensively, as the greeting Professor 
  																		Rafkin's book taught you rolls from your tongue The Chieftess smiles and warms to you*  
  																		Rafkin say you can help Urali.  Urali do not trust you.  You want Urali trust, then you
  																		stop them taking Dragon Turtle Egg.  You stop Dragon Turtle Egg theft, then Urali trust you.  
  																		*The Chieftess motions you south towards the nearby nesting beach* */
  		
  		
  		public override object Refuse{ get{ return 1156550; } }			/* *The Chieftess looks at you...* */
  		
  		public override object Uncomplete{ get{ return 1156536; } } 	/* You not save Dragon Turtle Hatchlings yet? Urali will not help until you save Dragon Turtle Hatchlings! */
  		
  		public override object Complete{ get{ return 1156537; } } 		/* Ahhh-OOO! Ahhh-OOO!  Dragon Turtle dig-dig and swim-swim! You good to Urali! Urali trust you! */
             
  		public EmptyNestQuest() : base()
  		{                
  			AddObjective( new InternalObjective());        
  			AddReward( new BaseReward( typeof(TotemOfFabozz), 1, 1156552  ) ); // Trust of the Urali Tribe
  		}
  
          public override bool RenderObjective(MondainQuestGump g, bool offer)
          {
              if (offer)
                  g.AddHtmlLocalized(130, 45, 270, 16, 1049010, 0xFFFFFF, false, false); // Quest Offer
              else
                  g.AddHtmlLocalized(130, 45, 270, 16, 1046026, 0xFFFFFF, false, false); // Quest Log
  
              g.AddButton(130, 430, 0x2EEF, 0x2EF1, (int)Buttons.PreviousPage, GumpButtonType.Reply, 0);
              g.AddButton(275, 430, 0x2EE9, 0x2EEB, (int)Buttons.NextPage, GumpButtonType.Reply, 0);
  
              g.AddHtmlObject(160, 70, 330, 16, Title, BaseQuestGump.DarkGreen, false, false);
              g.AddHtmlLocalized(98, 140, 312, 16, 1049073, 0x2710, false, false); // Objective:
              g.AddHtmlLocalized(98, 156, 312, 16, 1072208, 0x2710, false, false); // All of the following
              g.AddHtmlLocalized(98, 172, 300, 16, 1156534, 0xFFFF, false, false); // Rescue 5 Dragon Turtle Hatchlings from poachers
  
              return true;
          }
  
          public void Update(object o)
          {
              foreach (BaseObjective obj in Objectives)
              {
                  obj.Update(o);
  
                  if (!Completed)
                  {
                      Owner.PlaySound(UpdateSound);
                      Owner.SendLocalizedMessage(1156535, String.Format("{0}\t{1}", obj.CurProgress.ToString(), obj.MaxProgress.ToString())); // You have rescued ~1_count~ of ~2_max~ Dragon Turtle Hatchlings.
                  }
                  else
                  {
                      OnCompleted();
                  }
              }
          }
  
          public override void OnCompleted()
          {
              Owner.SendLocalizedMessage(1046258, null, 0x23); // Your quest is complete.												
              Owner.PlaySound(CompleteSound);
          }
  
          public class InternalObjective : BaseObjective
          {
              public InternalObjective() : base(5)
              {
              }
  
              public override bool Update(object o)
              {
                  CurProgress++;
                  return true;
              }
  
              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 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 TheGreatVolcanoQuest : BaseQuest
  	{        
  		public override object Title{ get{ return 1156525; } } 		 	/* The Great Volcano */
  		
  		public override object Description{ get{ return 1156526; } }	/* *The Jukari High Chief looks at you apprehensively, as the greeting Professor 
  																		Rafkin's book taught you rolls from your tongue The Chief smiles and warms to you* 
  																		Rafkin say you can help Jukari. Jukari do not trust you. You want Jukari trust, then 
  																		you mine Jukari Lavastone from Volcano.  Volcano no eat you, then Jukari trust you. 
  																		*The chief motions you east toward the Volcano* */
  		
  		
  		public override object Refuse{ get{ return 1156532; } }			/* *The Chief looks at you...* */
  		
  		public override object Uncomplete{ get{ return 1156540; } }  	/* You afraid of Great Volcano? Ha Ha! Britannian afraid! */
  		
  		public override object Complete{ get{ return 1156541; } } 		/* OOO!  You bring Jukari lava rock, mean Volcano no like your taste HA HA! Jukari help you! */
             
  		public TheGreatVolcanoQuest() : base()
  		{                        
  			//AddObjective( new ObtainObjective( typeof(LavaStone), "Recover 5 lava rocks from the Caldera of the Great Volcano", 5 ) );
              AddObjective(new InternalObjective());
  			AddReward( new BaseReward( typeof(FiresOfKukuzz), 1, 1156553  ) ); // Trust of the Jukari Tribe
  		}
  		
  		public static Rectangle2D VolcanoMineBounds = new Rectangle2D(879, 1568, 95, 95);
  		
  		public static bool OnHarvest(Mobile m, Item tool)
  		{
              if (!(m is PlayerMobile) || m.Map != Map.TerMur)
                  return false;
  
              PlayerMobile pm = m as PlayerMobile;
  
              if ((pm.ToggleMiningStone || pm.ToggleStoneOnly) && VolcanoMineBounds.Contains(m.Location))
  			{
                  object locked = tool;
  
                  if (!m.BeginAction(locked))
                      return false;
  
                  m.Animate(AnimationType.Attack, 3);
  
                  Timer.DelayCall(Mining.System.OreAndStone.EffectSoundDelay, () =>
                  {
                      m.PlaySound(Utility.RandomList(Mining.System.OreAndStone.EffectSounds));
                  });
  
                  Timer.DelayCall(Mining.System.OreAndStone.EffectDelay, () =>
                      {
                          TheGreatVolcanoQuest quest = QuestHelper.GetQuest(pm, typeof(TheGreatVolcanoQuest)) as TheGreatVolcanoQuest;
  
                          if (quest != null && !quest.Completed && 0.05 > Utility.RandomDouble())
                          {
                              if (m.CheckSkill(SkillName.Mining, 90, 100))
                              {
                                  double chance = Utility.RandomDouble();
  
                                  if (0.08 > chance)
                                  {
                                      BaseCreature spawn = new VolcanoElemental();
                                      Point3D p = m.Location;
  
                                      for (int i = 0; i < 10; i++)
                                      {
                                          int x = Utility.RandomMinMax(p.X - 1, p.X + 1);
                                          int y = Utility.RandomMinMax(p.Y - 1, p.Y + 1);
                                          int z = Map.TerMur.GetAverageZ(x, y);
  
                                          if (Map.TerMur.CanSpawnMobile(x, y, z))
                                          {
                                              p = new Point3D(x, y, z);
                                              break;
                                          }
                                      }
  
  									spawn.OnBeforeSpawn(p, Map.TerMur);
                                      spawn.MoveToWorld(p, Map.TerMur);
  									spawn.OnAfterSpawn();
  
                                      spawn.Combatant = m;
  
                                      m.SendLocalizedMessage(1156508);  // Uh oh...that doesn't look like a lava rock!
                                  }
                                  else if (0.55 > chance)
                                  {
                                      m.PrivateOverheadMessage(Server.Network.MessageType.Regular, 1154, 1156507, m.NetState); // *You uncover a lava rock and carefully store it for later!*
                                      quest.Update(m);
                                  }
                                  else
                                      m.LocalOverheadMessage(Server.Network.MessageType.Regular, 0x3B2, 1156509); // You loosen some dirt but fail to find anything.
                              }
                              else
                                  m.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1156509); // You loosen some dirt but fail to find anything.
                          }
                          else
                              m.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1156509); // You loosen some dirt but fail to find anything.
  
                          if (tool is IUsesRemaining)
                          {
                              ((IUsesRemaining)tool).UsesRemaining--;
  
                              if (((IUsesRemaining)tool).UsesRemaining <= 0)
                              {
                                  m.SendLocalizedMessage(1044038); // You have worn out your tool!
                                  tool.Delete();
                              }
                          }
  
                          m.EndAction(locked);
                      });
  
                  return true;
  			}
  
              return false;
  		}
  
          public bool Update(object o)
          {
              foreach (BaseObjective obj in Objectives)
              {
                  obj.Update(o);
  
                  if (!Completed)
                  {
                      Owner.PlaySound(UpdateSound);
                      Owner.SendLocalizedMessage(1156539, String.Format("{0}\t{1}", obj.CurProgress.ToString(), obj.MaxProgress.ToString())); // You have recovered ~1_count~ of ~2_max~ Lava Rocks.
                  }
                  else
                  {
                      OnCompleted();
                  }
              }
  
              return true;
          }
  
          private class InternalObjective : BaseObjective
          {
              public override object ObjectiveDescription
              {
                  get { return 1156538; } // Recover 5 lava rocks from the Caldera of the Great Volcano
              }
  
              public InternalObjective()
                  : base(5)
              {
              }
  
              public override bool Update(object o)
              {
                  CurProgress++;
                  return true;
              }
  
              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 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 PrideOfTheAmbushQuest : BaseQuest
  	{        
  		public override object Title{ get{ return 1156527; } } 			/* The Pride of the Ambush */
  		
  		public override object Description{ get{ return 1156528; } }	/* *The Kurak High Chief looks at you apprehensively, as the greeting Professor 
  																		Rafkin's book taught you rolls from your tongue The Chieftess smiles and warms 
  																		to you*  Rafkin say you can help Kurak.  Kurak do not trust you.  You want Kurak
  																		trust, then you free cubs from trappers.  You free cubs from trappers, then 
  																		Kurak trust you. *The chieftess motions you south to the lowlands* */
  		
  		
  		public override object Refuse{ get{ return 1156532; } }			/* *The Chief looks at you...* */
  		
  		public override object Uncomplete{ get{ return 1156545; } } 	/* You save tiger cubs! They little and helpless! Kurak will not help until you save tiger cubs! */
  		
  		public override object Complete{ get{ return 1156546; } }		/* You save tiger cubs! Kurak thank you and help you! */
             
  		public PrideOfTheAmbushQuest() : base()
  		{                
  			AddObjective( new InternalObjective( ) );        
  			AddReward( new BaseReward( typeof(SkullOfMotazz), 1, 1156554 ) );  // Trust of the Kurak Tribe
  		}
  
          public override bool RenderObjective(MondainQuestGump g, bool offer)
          {
              if (offer)
                  g.AddHtmlLocalized(130, 45, 270, 16, 1049010, 0xFFFFFF, false, false); // Quest Offer
              else
                  g.AddHtmlLocalized(130, 45, 270, 16, 1046026, 0xFFFFFF, false, false); // Quest Log
  
              g.AddButton(130, 430, 0x2EEF, 0x2EF1, (int)Buttons.PreviousPage, GumpButtonType.Reply, 0);
              g.AddButton(275, 430, 0x2EE9, 0x2EEB, (int)Buttons.NextPage, GumpButtonType.Reply, 0);
  
              g.AddHtmlObject(160, 70, 330, 16, Title, BaseQuestGump.DarkGreen, false, false);
              g.AddHtmlLocalized(98, 140, 312, 16, 1049073, 0x2710, false, false); // Objective:
              g.AddHtmlLocalized(98, 156, 312, 16, 1072208, 0x2710, false, false); // All of the following	
              g.AddHtmlLocalized(98, 172, 300, 16, 1156544, 0xFFFF, false, false); // Rescue 5 tiger cubs from the trapper enclosures.
  
              return true;
          }
  
          public bool Update(object o)
          {
              foreach (BaseObjective obj in Objectives)
              {
                  obj.Update(o);
  
                  if (!Completed)
                  {
                      Owner.PlaySound(UpdateSound);	
                      Owner.SendLocalizedMessage(1156543, String.Format("{0}\t{1}", obj.CurProgress.ToString(), obj.MaxProgress.ToString())); // You have rescued ~1_count~ of ~2_max~ tiger cubs.
                  }
                  else
                  {
                      OnCompleted();
                  }
              }
  
              return true;
          }
  
          public override void OnCompleted()
          {
              Owner.SendLocalizedMessage(1046258, null, 0x23); // Your quest is complete.												
              Owner.PlaySound(CompleteSound);
          }
  
          public class InternalObjective : BaseObjective
          {
              public InternalObjective()
                  : base(5)
              {
              }
  
              public override bool Update(object o)
              {
                  CurProgress++;
                  return true;
              }
  
              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 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 TheGreatApeQuest : BaseQuest
  	{        
  		public override object Title{ get{ return 1156529; } } 			/* The Great Ape */	
  		
  		public override object Description{ get{ return 1156530; } }	/* *The Barako High Chief looks at you apprehensively, as the greeting 
  																		Professor Rafkin's book taught you rolls from your tongue The Chief smiles 
  																		and warms to you*  Rafkin say you can help Barako.  Barako do not trust you.
  																		You want Barako trust, then you battle Great Ape.  You go to banana cave and
  																		ape no eat you, then Barako trust you.  *The Chief motions you northeast toward
  
gt: 																		the nearby banana cave* */