1436 lines
37 KiB
C#
1436 lines
37 KiB
C#
using System;
|
|
using Server.Gumps;
|
|
using Server.Items;
|
|
using Server.Mobiles;
|
|
|
|
namespace Server.Engines.Quests
|
|
{
|
|
public class EscortToYewQuest : BaseQuest
|
|
{
|
|
public EscortToYewQuest()
|
|
: base()
|
|
{
|
|
AddObjective(new EscortObjective("Yew"));
|
|
AddReward(new BaseReward(typeof(Gold), 500, 1062577));
|
|
}
|
|
|
|
/* An escort to Yew */
|
|
public override object Title
|
|
{
|
|
get
|
|
{
|
|
return 1072275;
|
|
}
|
|
}
|
|
/* I seek a worthy escort. I can offer some small pay to any able bodied adventurer who can assist me.
|
|
* It is imperative that I reach my destination. */
|
|
public override object Description
|
|
{
|
|
get
|
|
{
|
|
return 1072287;
|
|
}
|
|
}
|
|
/* I wish you would reconsider my offer. I'll be waiting right here for someone brave enough to assist me. */
|
|
public override object Refuse
|
|
{
|
|
get
|
|
{
|
|
return 1072288;
|
|
}
|
|
}
|
|
/* We have not yet arrived in Yew. Let's keep going. */
|
|
public override object Uncomplete
|
|
{
|
|
get
|
|
{
|
|
return 1072289;
|
|
}
|
|
}
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
|
|
writer.WriteEncodedInt(0); // version
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
|
|
int version = reader.ReadEncodedInt();
|
|
}
|
|
}
|
|
|
|
public class EscortToVesperQuest : BaseQuest
|
|
{
|
|
public EscortToVesperQuest()
|
|
: base()
|
|
{
|
|
AddObjective(new EscortObjective("Vesper"));
|
|
AddReward(new BaseReward(typeof(Gold), 500, 1062577));
|
|
}
|
|
|
|
/* An escort to Vesper */
|
|
public override object Title
|
|
{
|
|
get
|
|
{
|
|
return 1072276;
|
|
}
|
|
}
|
|
/* I seek a worthy escort. I can offer some small pay to any able bodied adventurer who can assist me.
|
|
* It is imperative that I reach my destination. */
|
|
public override object Description
|
|
{
|
|
get
|
|
{
|
|
return 1072287;
|
|
}
|
|
}
|
|
/* I wish you would reconsider my offer. I'll be waiting right here for someone brave enough to assist me. */
|
|
public override object Refuse
|
|
{
|
|
get
|
|
{
|
|
return 1072288;
|
|
}
|
|
}
|
|
/* We have not yet arrived in Vesper. Let's keep going. */
|
|
public override object Uncomplete
|
|
{
|
|
get
|
|
{
|
|
return 1072290;
|
|
}
|
|
}
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
|
|
writer.WriteEncodedInt(0); // version
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
|
|
int version = reader.ReadEncodedInt();
|
|
}
|
|
}
|
|
|
|
public class EscortToTrinsicQuest : BaseQuest
|
|
{
|
|
public EscortToTrinsicQuest()
|
|
: base()
|
|
{
|
|
AddObjective(new EscortObjective("Trinsic"));
|
|
AddReward(new BaseReward(typeof(Gold), 500, 1062577));
|
|
}
|
|
|
|
/* An escort to Trinsic */
|
|
public override object Title
|
|
{
|
|
get
|
|
{
|
|
return 1072277;
|
|
}
|
|
}
|
|
/* I seek a worthy escort. I can offer some small pay to any able bodied adventurer who can assist me.
|
|
* It is imperative that I reach my destination. */
|
|
public override object Description
|
|
{
|
|
get
|
|
{
|
|
return 1072287;
|
|
}
|
|
}
|
|
/* I wish you would reconsider my offer. I'll be waiting right here for someone brave enough to assist me. */
|
|
public override object Refuse
|
|
{
|
|
get
|
|
{
|
|
return 1072288;
|
|
}
|
|
}
|
|
/* We have not yet arrived in Trinsic. Let's keep going. */
|
|
public override object Uncomplete
|
|
{
|
|
get
|
|
{
|
|
return 1072291;
|
|
}
|
|
}
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
|
|
writer.WriteEncodedInt(0); // version
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
|
|
int version = reader.ReadEncodedInt();
|
|
}
|
|
}
|
|
|
|
public class EscortToSkaraQuest : BaseQuest
|
|
{
|
|
public EscortToSkaraQuest()
|
|
: base()
|
|
{
|
|
AddObjective(new EscortObjective("Skara Brae"));
|
|
AddReward(new BaseReward(typeof(Gold), 500, 1062577));
|
|
}
|
|
|
|
/* An escort to Skara */
|
|
public override object Title
|
|
{
|
|
get
|
|
{
|
|
return 1072278;
|
|
}
|
|
}
|
|
/* I seek a worthy escort. I can offer some small pay to any able bodied adventurer who can assist me.
|
|
* It is imperative that I reach my destination. */
|
|
public override object Description
|
|
{
|
|
get
|
|
{
|
|
return 1072287;
|
|
}
|
|
}
|
|
/* I wish you would reconsider my offer. I'll be waiting right here for someone brave enough to assist me. */
|
|
public override object Refuse
|
|
{
|
|
get
|
|
{
|
|
return 1072288;
|
|
}
|
|
}
|
|
/* We have not yet arrived in Skara. Let's keep going. */
|
|
public override object Uncomplete
|
|
{
|
|
get
|
|
{
|
|
return 1072292;
|
|
}
|
|
}
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
|
|
writer.WriteEncodedInt(0); // version
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
|
|
int version = reader.ReadEncodedInt();
|
|
}
|
|
}
|
|
|
|
public class EscortToSerpentsHoldQuest : BaseQuest
|
|
{
|
|
public EscortToSerpentsHoldQuest()
|
|
: base()
|
|
{
|
|
AddObjective(new EscortObjective("Serpent's Hold"));
|
|
AddReward(new BaseReward(typeof(Gold), 500, 1062577));
|
|
}
|
|
|
|
/* An escort to Serpent's Hold */
|
|
public override object Title
|
|
{
|
|
get
|
|
{
|
|
return 1072279;
|
|
}
|
|
}
|
|
/* I seek a worthy escort. I can offer some small pay to any able bodied adventurer who can assist me.
|
|
* It is imperative that I reach my destination. */
|
|
public override object Description
|
|
{
|
|
get
|
|
{
|
|
return 1072287;
|
|
}
|
|
}
|
|
/* I wish you would reconsider my offer. I'll be waiting right here for someone brave enough to assist me. */
|
|
public override object Refuse
|
|
{
|
|
get
|
|
{
|
|
return 1072288;
|
|
}
|
|
}
|
|
/* We have not yet arrived in Serpent's Hold. Let's keep going. */
|
|
public override object Uncomplete
|
|
{
|
|
get
|
|
{
|
|
return 1072293;
|
|
}
|
|
}
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
|
|
writer.WriteEncodedInt(0); // version
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
|
|
int version = reader.ReadEncodedInt();
|
|
}
|
|
}
|
|
|
|
public class EscortToNujelmQuest : BaseQuest
|
|
{
|
|
public EscortToNujelmQuest()
|
|
: base()
|
|
{
|
|
AddObjective(new EscortObjective("Nujel'm"));
|
|
AddReward(new BaseReward(typeof(Gold), 500, 1062577));
|
|
}
|
|
|
|
/* An escort to Nujel'm */
|
|
public override object Title
|
|
{
|
|
get
|
|
{
|
|
return 1072280;
|
|
}
|
|
}
|
|
/* I seek a worthy escort. I can offer some small pay to any able bodied adventurer who can assist me.
|
|
* It is imperative that I reach my destination. */
|
|
public override object Description
|
|
{
|
|
get
|
|
{
|
|
return 1072287;
|
|
}
|
|
}
|
|
/* I wish you would reconsider my offer. I'll be waiting right here for someone brave enough to assist me. */
|
|
public override object Refuse
|
|
{
|
|
get
|
|
{
|
|
return 1072288;
|
|
}
|
|
}
|
|
/* We have not yet arrived in Nujel'm. Let's keep going. */
|
|
public override object Uncomplete
|
|
{
|
|
get
|
|
{
|
|
return 1072294;
|
|
}
|
|
}
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
|
|
writer.WriteEncodedInt(0); // version
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
|
|
int version = reader.ReadEncodedInt();
|
|
}
|
|
}
|
|
|
|
public class EscortToMoonglowQuest : BaseQuest
|
|
{
|
|
public EscortToMoonglowQuest()
|
|
: base()
|
|
{
|
|
AddObjective(new EscortObjective("Moonglow"));
|
|
AddReward(new BaseReward(typeof(Gold), 500, 1062577));
|
|
}
|
|
|
|
/* An escort to Moonglow */
|
|
public override object Title
|
|
{
|
|
get
|
|
{
|
|
return 1072281;
|
|
}
|
|
}
|
|
/* I seek a worthy escort. I can offer some small pay to any able bodied adventurer who can assist me.
|
|
* It is imperative that I reach my destination. */
|
|
public override object Description
|
|
{
|
|
get
|
|
{
|
|
return 1072287;
|
|
}
|
|
}
|
|
/* I wish you would reconsider my offer. I'll be waiting right here for someone brave enough to assist me. */
|
|
public override object Refuse
|
|
{
|
|
get
|
|
{
|
|
return 1072288;
|
|
}
|
|
}
|
|
/* We have not yet arrived in Moonglow. Let's keep going. */
|
|
public override object Uncomplete
|
|
{
|
|
get
|
|
{
|
|
return 1072295;
|
|
}
|
|
}
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
|
|
writer.WriteEncodedInt(0); // version
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
|
|
int version = reader.ReadEncodedInt();
|
|
}
|
|
}
|
|
|
|
public class EscortToMinocQuest : BaseQuest
|
|
{
|
|
public EscortToMinocQuest()
|
|
: base()
|
|
{
|
|
AddObjective(new EscortObjective("Minoc"));
|
|
AddReward(new BaseReward(typeof(Gold), 500, 1062577));
|
|
}
|
|
|
|
/* An escort to Minoc */
|
|
public override object Title
|
|
{
|
|
get
|
|
{
|
|
return 1072282;
|
|
}
|
|
}
|
|
/* I seek a worthy escort. I can offer some small pay to any able bodied adventurer who can assist me.
|
|
* It is imperative that I reach my destination. */
|
|
public override object Description
|
|
{
|
|
get
|
|
{
|
|
return 1072287;
|
|
}
|
|
}
|
|
/* I wish you would reconsider my offer. I'll be waiting right here for someone brave enough to assist me. */
|
|
public override object Refuse
|
|
{
|
|
get
|
|
{
|
|
return 1072288;
|
|
}
|
|
}
|
|
/* We have not yet arrived in Minoc. Let's keep going. */
|
|
public override object Uncomplete
|
|
{
|
|
get
|
|
{
|
|
return 1072296;
|
|
}
|
|
}
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
|
|
writer.WriteEncodedInt(0); // version
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
|
|
int version = reader.ReadEncodedInt();
|
|
}
|
|
}
|
|
|
|
public class EscortToMaginciaQuest : BaseQuest
|
|
{
|
|
public EscortToMaginciaQuest()
|
|
: base()
|
|
{
|
|
AddObjective(new EscortObjective("Magincia"));
|
|
AddReward(new BaseReward(typeof(Gold), 500, 1062577));
|
|
}
|
|
|
|
/* An escort to Magincia */
|
|
public override object Title
|
|
{
|
|
get
|
|
{
|
|
return 1072283;
|
|
}
|
|
}
|
|
/* I seek a worthy escort. I can offer some small pay to any able bodied adventurer who can assist me.
|
|
* It is imperative that I reach my destination. */
|
|
public override object Description
|
|
{
|
|
get
|
|
{
|
|
return 1072287;
|
|
}
|
|
}
|
|
/* I wish you would reconsider my offer. I'll be waiting right here for someone brave enough to assist me. */
|
|
public override object Refuse
|
|
{
|
|
get
|
|
{
|
|
return 1072288;
|
|
}
|
|
}
|
|
/* We have not yet arrived in Magincia. Let's keep going. */
|
|
public override object Uncomplete
|
|
{
|
|
get
|
|
{
|
|
return 1072297;
|
|
}
|
|
}
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
|
|
writer.WriteEncodedInt(0); // version
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
|
|
int version = reader.ReadEncodedInt();
|
|
}
|
|
}
|
|
|
|
public class EscortToJhelomQuest : BaseQuest
|
|
{
|
|
public EscortToJhelomQuest()
|
|
: base()
|
|
{
|
|
AddObjective(new EscortObjective("Jhelom"));
|
|
AddReward(new BaseReward(typeof(Gold), 500, 1062577));
|
|
}
|
|
|
|
/* An escort to Jhelom */
|
|
public override object Title
|
|
{
|
|
get
|
|
{
|
|
return 1072284;
|
|
}
|
|
}
|
|
/* I seek a worthy escort. I can offer some small pay to any able bodied adventurer who can assist me.
|
|
* It is imperative that I reach my destination. */
|
|
public override object Description
|
|
{
|
|
get
|
|
{
|
|
return 1072287;
|
|
}
|
|
}
|
|
/* I wish you would reconsider my offer. I'll be waiting right here for someone brave enough to assist me. */
|
|
public override object Refuse
|
|
{
|
|
get
|
|
{
|
|
return 1072288;
|
|
}
|
|
}
|
|
/* We have not yet arrived in Jhelom. Let's keep going. */
|
|
public override object Uncomplete
|
|
{
|
|
get
|
|
{
|
|
return 1072298;
|
|
}
|
|
}
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
|
|
writer.WriteEncodedInt(0); // version
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
|
|
int version = reader.ReadEncodedInt();
|
|
}
|
|
}
|
|
|
|
public class EscortToCoveQuest : BaseQuest
|
|
{
|
|
public EscortToCoveQuest()
|
|
: base()
|
|
{
|
|
AddObjective(new EscortObjective("Cove"));
|
|
AddReward(new BaseReward(typeof(Gold), 500, 1062577));
|
|
}
|
|
|
|
/* An escort to Cove */
|
|
public override object Title
|
|
{
|
|
get
|
|
{
|
|
return 1072285;
|
|
}
|
|
}
|
|
/* I seek a worthy escort. I can offer some small pay to any able bodied adventurer who can assist me.
|
|
* It is imperative that I reach my destination. */
|
|
public override object Description
|
|
{
|
|
get
|
|
{
|
|
return 1072287;
|
|
}
|
|
}
|
|
/* I wish you would reconsider my offer. I'll be waiting right here for someone brave enough to assist me. */
|
|
public override object Refuse
|
|
{
|
|
get
|
|
{
|
|
return 1072288;
|
|
}
|
|
}
|
|
/* We have not yet arrived in Cove. Let's keep going. */
|
|
public override object Uncomplete
|
|
{
|
|
get
|
|
{
|
|
return 1072299;
|
|
}
|
|
}
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
|
|
writer.WriteEncodedInt(0); // version
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
|
|
int version = reader.ReadEncodedInt();
|
|
}
|
|
}
|
|
|
|
public class EscortToBritainQuest : BaseQuest
|
|
{
|
|
public EscortToBritainQuest()
|
|
: base()
|
|
{
|
|
AddObjective(new EscortObjective("Britain"));
|
|
AddReward(new BaseReward(typeof(Gold), 500, 1062577));
|
|
}
|
|
|
|
/* An escort to Britain */
|
|
public override object Title
|
|
{
|
|
get
|
|
{
|
|
return 1072286;
|
|
}
|
|
}
|
|
/* I seek a worthy escort. I can offer some small pay to any able bodied adventurer who can assist me.
|
|
* It is imperative that I reach my destination. */
|
|
public override object Description
|
|
{
|
|
get
|
|
{
|
|
return 1072287;
|
|
}
|
|
}
|
|
/* I wish you would reconsider my offer. I'll be waiting right here for someone brave enough to assist me. */
|
|
public override object Refuse
|
|
{
|
|
get
|
|
{
|
|
return 1072288;
|
|
}
|
|
}
|
|
/* We have not yet arrived in Britain. Let's keep going. */
|
|
public override object Uncomplete
|
|
{
|
|
get
|
|
{
|
|
return 1072300;
|
|
}
|
|
}
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
|
|
writer.WriteEncodedInt(0); // version
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
|
|
int version = reader.ReadEncodedInt();
|
|
}
|
|
}
|
|
|
|
public class TownEscortable : BaseEscort
|
|
{
|
|
private static readonly Type[] m_Quests = new Type[]
|
|
{
|
|
typeof(EscortToYewQuest),
|
|
typeof(EscortToVesperQuest),
|
|
typeof(EscortToTrinsicQuest),
|
|
typeof(EscortToSkaraQuest),
|
|
typeof(EscortToSerpentsHoldQuest),
|
|
typeof(EscortToNujelmQuest),
|
|
typeof(EscortToMoonglowQuest),
|
|
typeof(EscortToMinocQuest),
|
|
typeof(EscortToMaginciaQuest),
|
|
typeof(EscortToJhelomQuest),
|
|
typeof(EscortToCoveQuest),
|
|
typeof(EscortToBritainQuest)
|
|
};
|
|
|
|
private static readonly string[] m_Destinations = new string[]
|
|
{
|
|
"Yew",
|
|
"Vesper",
|
|
"Trinsic",
|
|
"Skara Brae",
|
|
"Serpent's Hold",
|
|
"Nujel'm",
|
|
"Moonglow",
|
|
"Minoc",
|
|
"Magincia",
|
|
"Jhelom",
|
|
"Cove",
|
|
"Britain"
|
|
};
|
|
|
|
private int m_Quest;
|
|
|
|
public TownEscortable()
|
|
: base()
|
|
{
|
|
m_Quest = Utility.Random(m_Quests.Length);
|
|
}
|
|
|
|
protected override void OnMapChange(Map oldMap)
|
|
{
|
|
base.OnMapChange(oldMap);
|
|
|
|
if (m_Destinations[m_Quest] == Region.Name)
|
|
{
|
|
m_Quest = RandomDestination();
|
|
}
|
|
}
|
|
|
|
private int RandomDestination()
|
|
{
|
|
int random;
|
|
|
|
do
|
|
{
|
|
random = Utility.Random(m_Destinations.Length);
|
|
}
|
|
while (m_Destinations[random] == Region.Find(Location, Map).Name);
|
|
|
|
return random;
|
|
}
|
|
|
|
public TownEscortable(Serial serial)
|
|
: base(serial)
|
|
{
|
|
}
|
|
|
|
public override Type[] Quests
|
|
{
|
|
get
|
|
{
|
|
return new Type[] { m_Quests[m_Quest] };
|
|
}
|
|
}
|
|
public override void Advertise()
|
|
{
|
|
Say(Utility.RandomMinMax(1072301, 1072303));
|
|
}
|
|
|
|
public override Region GetDestination()
|
|
{
|
|
return QuestHelper.FindRegion(m_Destinations[m_Quest]);
|
|
}
|
|
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
|
|
writer.WriteEncodedInt(1); // version
|
|
|
|
writer.Write(m_Quest);
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
|
|
int version = reader.ReadEncodedInt();
|
|
|
|
m_Quest = reader.ReadInt();
|
|
|
|
if (version == 0 && m_Destinations[m_Quest] == Region.Name)
|
|
{
|
|
m_Quest = RandomDestination();
|
|
Console.WriteLine("Adjusting escort destination.");
|
|
}
|
|
}
|
|
}
|
|
|
|
public class EscortableMerchant : TownEscortable
|
|
{
|
|
[Constructable]
|
|
public EscortableMerchant()
|
|
{
|
|
Title = "the merchant";
|
|
SetSkill(SkillName.ItemID, 55.0, 78.0);
|
|
SetSkill(SkillName.ArmsLore, 55, 78);
|
|
}
|
|
|
|
public EscortableMerchant(Serial serial)
|
|
: base(serial)
|
|
{
|
|
}
|
|
|
|
public override bool CanTeach
|
|
{
|
|
get
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
public override bool ClickTitle
|
|
{
|
|
get
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
public override void InitOutfit()
|
|
{
|
|
if (Female)
|
|
AddItem(new PlainDress());
|
|
else
|
|
AddItem(new Shirt(GetRandomHue()));
|
|
|
|
int lowHue = GetRandomHue();
|
|
|
|
AddItem(new ThighBoots());
|
|
|
|
AddItem(new LongPants(lowHue));
|
|
|
|
if (!Female)
|
|
AddItem(new BodySash(lowHue));
|
|
|
|
PackGold(200, 250);
|
|
}
|
|
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
|
|
writer.WriteEncodedInt((int)0); // version
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
|
|
int version = reader.ReadEncodedInt();
|
|
}
|
|
}
|
|
|
|
public class EscortableMage : TownEscortable
|
|
{
|
|
[Constructable]
|
|
public EscortableMage()
|
|
{
|
|
Title = "the mage";
|
|
|
|
SetSkill(SkillName.EvalInt, 80.0, 100.0);
|
|
SetSkill(SkillName.Inscribe, 80.0, 100.0);
|
|
SetSkill(SkillName.Magery, 80.0, 100.0);
|
|
SetSkill(SkillName.Meditation, 80.0, 100.0);
|
|
SetSkill(SkillName.MagicResist, 80.0, 100.0);
|
|
}
|
|
|
|
public EscortableMage(Serial serial)
|
|
: base(serial)
|
|
{
|
|
}
|
|
|
|
public override bool CanTeach
|
|
{
|
|
get
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
public override bool ClickTitle
|
|
{
|
|
get
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
public override void InitOutfit()
|
|
{
|
|
AddItem(new Robe(GetRandomHue()));
|
|
|
|
int lowHue = GetRandomHue();
|
|
|
|
AddItem(new ShortPants(lowHue));
|
|
|
|
if (Female)
|
|
AddItem(new ThighBoots(lowHue));
|
|
else
|
|
AddItem(new Boots(lowHue));
|
|
|
|
PackGold(200, 250);
|
|
}
|
|
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
|
|
writer.WriteEncodedInt((int)0); // version
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
|
|
int version = reader.ReadEncodedInt();
|
|
}
|
|
}
|
|
|
|
public class EscortableMessenger : TownEscortable
|
|
{
|
|
[Constructable]
|
|
public EscortableMessenger()
|
|
{
|
|
Title = "the messenger";
|
|
}
|
|
|
|
public EscortableMessenger(Serial serial)
|
|
: base(serial)
|
|
{
|
|
}
|
|
|
|
public override bool ClickTitle
|
|
{
|
|
get
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
public override void InitOutfit()
|
|
{
|
|
if (Female)
|
|
AddItem(new PlainDress());
|
|
else
|
|
AddItem(new Shirt(GetRandomHue()));
|
|
|
|
int lowHue = GetRandomHue();
|
|
|
|
AddItem(new ShortPants(lowHue));
|
|
|
|
if (Female)
|
|
AddItem(new Boots(lowHue));
|
|
else
|
|
AddItem(new Shoes(lowHue));
|
|
|
|
switch ( Utility.Random(4) )
|
|
{
|
|
case 0:
|
|
AddItem(new ShortHair(Utility.RandomHairHue()));
|
|
break;
|
|
case 1:
|
|
AddItem(new TwoPigTails(Utility.RandomHairHue()));
|
|
break;
|
|
case 2:
|
|
AddItem(new ReceedingHair(Utility.RandomHairHue()));
|
|
break;
|
|
case 3:
|
|
AddItem(new KrisnaHair(Utility.RandomHairHue()));
|
|
break;
|
|
}
|
|
|
|
PackGold(200, 250);
|
|
}
|
|
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
|
|
writer.WriteEncodedInt((int)0); // version
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
|
|
int version = reader.ReadEncodedInt();
|
|
}
|
|
}
|
|
|
|
public class EscortableSeekerOfAdventure : TownEscortable
|
|
{
|
|
[Constructable]
|
|
public EscortableSeekerOfAdventure()
|
|
{
|
|
Title = "the seeker of adventure";
|
|
}
|
|
|
|
public EscortableSeekerOfAdventure(Serial serial)
|
|
: base(serial)
|
|
{
|
|
}
|
|
|
|
public override bool ClickTitle
|
|
{
|
|
get
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
public override void InitOutfit()
|
|
{
|
|
if (Female)
|
|
AddItem(new FancyDress(GetRandomHue()));
|
|
else
|
|
AddItem(new FancyShirt(GetRandomHue()));
|
|
|
|
int lowHue = GetRandomHue();
|
|
|
|
AddItem(new ShortPants(lowHue));
|
|
|
|
if (Female)
|
|
AddItem(new ThighBoots(lowHue));
|
|
else
|
|
AddItem(new Boots(lowHue));
|
|
|
|
if (!Female)
|
|
AddItem(new BodySash(lowHue));
|
|
|
|
AddItem(new Cloak(GetRandomHue()));
|
|
|
|
AddItem(new Longsword());
|
|
|
|
PackGold(100, 150);
|
|
}
|
|
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
|
|
writer.WriteEncodedInt((int)0); // version
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
|
|
int version = reader.ReadEncodedInt();
|
|
}
|
|
}
|
|
|
|
public class EscortableNoble : TownEscortable
|
|
{
|
|
[Constructable]
|
|
public EscortableNoble()
|
|
{
|
|
Title = "the noble";
|
|
|
|
SetSkill(SkillName.Parry, 80.0, 100.0);
|
|
SetSkill(SkillName.Swords, 80.0, 100.0);
|
|
SetSkill(SkillName.Tactics, 80.0, 100.0);
|
|
}
|
|
|
|
public EscortableNoble(Serial serial)
|
|
: base(serial)
|
|
{
|
|
}
|
|
|
|
public override bool CanTeach
|
|
{
|
|
get
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
public override bool ClickTitle
|
|
{
|
|
get
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
public override void InitOutfit()
|
|
{
|
|
if (Female)
|
|
AddItem(new FancyDress());
|
|
else
|
|
AddItem(new FancyShirt(GetRandomHue()));
|
|
|
|
int lowHue = GetRandomHue();
|
|
|
|
AddItem(new ShortPants(lowHue));
|
|
|
|
if (Female)
|
|
AddItem(new ThighBoots(lowHue));
|
|
else
|
|
AddItem(new Boots(lowHue));
|
|
|
|
if (!Female)
|
|
AddItem(new BodySash(lowHue));
|
|
|
|
AddItem(new Cloak(GetRandomHue()));
|
|
|
|
if (!Female)
|
|
AddItem(new Longsword());
|
|
|
|
PackGold(200, 250);
|
|
}
|
|
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
|
|
writer.WriteEncodedInt((int)0); // version
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
|
|
int version = reader.ReadEncodedInt();
|
|
}
|
|
}
|
|
|
|
public class EscortableBrideGroom : TownEscortable
|
|
{
|
|
[Constructable]
|
|
public EscortableBrideGroom()
|
|
{
|
|
if (Female)
|
|
Title = "the bride";
|
|
else
|
|
Title = "the groom";
|
|
}
|
|
|
|
public EscortableBrideGroom(Serial serial)
|
|
: base(serial)
|
|
{
|
|
}
|
|
|
|
public override bool ClickTitle
|
|
{
|
|
get
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
public override void InitOutfit()
|
|
{
|
|
if (Female)
|
|
AddItem(new FancyDress());
|
|
else
|
|
AddItem(new FancyShirt());
|
|
|
|
int lowHue = GetRandomHue();
|
|
|
|
AddItem(new LongPants(lowHue));
|
|
|
|
if (Female)
|
|
AddItem(new Shoes(lowHue));
|
|
else
|
|
AddItem(new Boots(lowHue));
|
|
|
|
if (Utility.RandomBool())
|
|
HairItemID = 0x203B;
|
|
else
|
|
HairItemID = 0x203C;
|
|
|
|
HairHue = Race.RandomHairHue();
|
|
|
|
PackGold(200, 250);
|
|
}
|
|
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
|
|
writer.WriteEncodedInt((int)0); // version
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
|
|
int version = reader.ReadEncodedInt();
|
|
}
|
|
}
|
|
|
|
public class EscortablePeasant : NewHavenEscortable
|
|
{
|
|
[Constructable]
|
|
public EscortablePeasant()
|
|
{
|
|
Title = "the peasant";
|
|
}
|
|
|
|
public EscortablePeasant(Serial serial)
|
|
: base(serial)
|
|
{
|
|
}
|
|
|
|
public override bool ClickTitle
|
|
{
|
|
get
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
public override void InitOutfit()
|
|
{
|
|
if (Female)
|
|
AddItem(new PlainDress());
|
|
else
|
|
AddItem(new Shirt(GetRandomHue()));
|
|
|
|
int lowHue = GetRandomHue();
|
|
|
|
AddItem(new ShortPants(lowHue));
|
|
|
|
if (Female)
|
|
AddItem(new Boots(lowHue));
|
|
else
|
|
AddItem(new Shoes(lowHue));
|
|
|
|
Utility.AssignRandomHair(this);
|
|
|
|
PackGold(200, 250);
|
|
}
|
|
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
|
|
writer.WriteEncodedInt((int)0); // version
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
|
|
int version = reader.ReadEncodedInt();
|
|
}
|
|
}
|
|
|
|
public class EscortableHealer : TownEscortable
|
|
{
|
|
private static readonly TimeSpan ResurrectDelay = TimeSpan.FromSeconds(2.0);
|
|
private DateTime m_NextResurrect;
|
|
[Constructable]
|
|
public EscortableHealer()
|
|
: base()
|
|
{
|
|
Title = "the wandering healer";
|
|
|
|
AI = AIType.AI_Mage;
|
|
ActiveSpeed = 0.2;
|
|
PassiveSpeed = 0.8;
|
|
RangePerception = BaseCreature.DefaultRangePerception;
|
|
FightMode = FightMode.Aggressor;
|
|
|
|
SpeechHue = 0;
|
|
|
|
SetStr(304, 400);
|
|
SetDex(102, 150);
|
|
SetInt(204, 300);
|
|
|
|
SetDamage(10, 23);
|
|
|
|
SetDamageType(ResistanceType.Physical, 100);
|
|
|
|
SetResistance(ResistanceType.Physical, 40, 50);
|
|
SetResistance(ResistanceType.Fire, 40, 50);
|
|
SetResistance(ResistanceType.Cold, 40, 50);
|
|
SetResistance(ResistanceType.Poison, 40, 50);
|
|
SetResistance(ResistanceType.Energy, 40, 50);
|
|
|
|
SetSkill(SkillName.Anatomy, 75.0, 97.5);
|
|
SetSkill(SkillName.EvalInt, 82.0, 100.0);
|
|
SetSkill(SkillName.Healing, 75.0, 97.5);
|
|
SetSkill(SkillName.Magery, 82.0, 100.0);
|
|
SetSkill(SkillName.MagicResist, 82.0, 100.0);
|
|
SetSkill(SkillName.Tactics, 82.0, 100.0);
|
|
SetSkill(SkillName.Camping, 80.0, 100.0);
|
|
SetSkill(SkillName.Forensics, 80.0, 100.0);
|
|
SetSkill(SkillName.SpiritSpeak, 80.0, 100.0);
|
|
|
|
Fame = 1000;
|
|
Karma = 10000;
|
|
|
|
PackItem(new Bandage(Utility.RandomMinMax(5, 10)));
|
|
PackItem(new HealPotion());
|
|
PackItem(new CurePotion());
|
|
}
|
|
|
|
public EscortableHealer(Serial serial)
|
|
: base(serial)
|
|
{
|
|
}
|
|
|
|
public override bool ClickTitle
|
|
{
|
|
get
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
public override bool CanTeach
|
|
{
|
|
get
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
public virtual bool HealsYoungPlayers
|
|
{
|
|
get
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
public override bool CheckTeach(SkillName skill, Mobile from)
|
|
{
|
|
if (!base.CheckTeach(skill, from))
|
|
return false;
|
|
|
|
return (skill == SkillName.Anatomy) ||
|
|
(skill == SkillName.Camping) ||
|
|
(skill == SkillName.Forensics) ||
|
|
(skill == SkillName.Healing) ||
|
|
(skill == SkillName.SpiritSpeak);
|
|
}
|
|
|
|
public override void InitOutfit()
|
|
{
|
|
AddItem(new Sandals(GetShoeHue()));
|
|
AddItem(new Robe(Utility.RandomYellowHue()));
|
|
AddItem(new GnarledStaff());
|
|
}
|
|
|
|
public virtual bool CheckResurrect(Mobile m)
|
|
{
|
|
if (m.Criminal)
|
|
{
|
|
Say(501222); // Thou art a criminal. I shall not resurrect thee.
|
|
return false;
|
|
}
|
|
else if (m.Murderer)
|
|
{
|
|
Say(501223); // Thou'rt not a decent and good person. I shall not resurrect thee.
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public virtual void OfferResurrection(Mobile m)
|
|
{
|
|
Direction = GetDirectionTo(m);
|
|
Say(501224); // Thou hast strayed from the path of virtue, but thou still deservest a second chance.
|
|
|
|
m.PlaySound(0x214);
|
|
m.FixedEffect(0x376A, 10, 16);
|
|
|
|
m.CloseGump(typeof(ResurrectGump));
|
|
m.SendGump(new ResurrectGump(m, ResurrectMessage.Healer));
|
|
}
|
|
|
|
public virtual void OfferHeal(PlayerMobile m)
|
|
{
|
|
Direction = GetDirectionTo(m);
|
|
|
|
if (m.CheckYoungHealTime())
|
|
{
|
|
Say(501229); // You look like you need some healing my child.
|
|
|
|
m.PlaySound(0x1F2);
|
|
m.FixedEffect(0x376A, 9, 32);
|
|
|
|
m.Hits = m.HitsMax;
|
|
}
|
|
else
|
|
{
|
|
Say(501228); // I can do no more for you at this time.
|
|
}
|
|
}
|
|
|
|
public override void OnMovement(Mobile m, Point3D oldLocation)
|
|
{
|
|
if (!m.Frozen && DateTime.UtcNow >= m_NextResurrect && InRange(m, 4) && !InRange(oldLocation, 4) && InLOS(m))
|
|
{
|
|
if (!m.Alive)
|
|
{
|
|
m_NextResurrect = DateTime.UtcNow + ResurrectDelay;
|
|
|
|
if (m.Map == null || !m.Map.CanFit(m.Location, 16, false, false))
|
|
{
|
|
m.SendLocalizedMessage(502391); // Thou can not be resurrected there!
|
|
}
|
|
else if (CheckResurrect(m))
|
|
{
|
|
OfferResurrection(m);
|
|
}
|
|
}
|
|
else if (HealsYoungPlayers && m.Hits < m.HitsMax && m is PlayerMobile && ((PlayerMobile)m).Young)
|
|
{
|
|
OfferHeal((PlayerMobile)m);
|
|
}
|
|
}
|
|
}
|
|
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
|
|
writer.WriteEncodedInt((int)0); // version
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
|
|
int version = reader.ReadEncodedInt();
|
|
}
|
|
}
|
|
}
|