using System; using Server.Mobiles; namespace Server.Engines.Quests.Haven { public class UzeraanTurmoilQuest : QuestSystem { private static readonly Type[] m_TypeReferenceTable = { typeof(AcceptConversation), typeof(UzeraanTitheConversation), typeof(UzeraanFirstTaskConversation), typeof(UzeraanReportConversation), typeof(SchmendrickConversation), typeof(UzeraanScrollOfPowerConversation), typeof(DryadConversation), typeof(UzeraanFertileDirtConversation), typeof(UzeraanDaemonBloodConversation), typeof(UzeraanDaemonBoneConversation), typeof(BankerConversation), typeof(RadarConversation), typeof(LostScrollOfPowerConversation), typeof(LostFertileDirtConversation), typeof(DryadAppleConversation), typeof(LostDaemonBloodConversation), typeof(LostDaemonBoneConversation), typeof(FindUzeraanBeginObjective), typeof(TitheGoldObjective), typeof(FindUzeraanFirstTaskObjective), typeof(KillHordeMinionsObjective), typeof(FindUzeraanAboutReportObjective), typeof(FindSchmendrickObjective), typeof(FindApprenticeObjective), typeof(ReturnScrollOfPowerObjective), typeof(FindDryadObjective), typeof(ReturnFertileDirtObjective), typeof(GetDaemonBloodObjective), typeof(ReturnDaemonBloodObjective), typeof(GetDaemonBoneObjective), typeof(ReturnDaemonBoneObjective), typeof(CashBankCheckObjective), typeof(FewReagentsConversation) }; private bool m_HasLeftTheMansion; public UzeraanTurmoilQuest(PlayerMobile from) : base(from) { } // Serialization public UzeraanTurmoilQuest() { } public override Type[] TypeReferenceTable => m_TypeReferenceTable; public override object Name => 1049007; public override object OfferMessage => 1049008; public override TimeSpan RestartDelay => TimeSpan.MaxValue; public override bool IsTutorial => true; public override int Picture { get { return From.Profession switch { 1 => 0x15C9, // warrior 2 => 0x15C1, // magician _ => 0x15D3 }; } } public override void Slice() { if (!m_HasLeftTheMansion && (From.Map != Map.Underworld || From.X is < 3573 or > 3611 || From.Y is < 2568 or > 2606)) { m_HasLeftTheMansion = true; AddConversation(new RadarConversation()); } base.Slice(); } public override void Accept() { base.Accept(); AddConversation(new AcceptConversation()); } public override void ChildDeserialize(IGenericReader reader) { var version = reader.ReadEncodedInt(); m_HasLeftTheMansion = reader.ReadBool(); } public override void ChildSerialize(IGenericWriter writer) { writer.WriteEncodedInt(0); // version writer.Write(m_HasLeftTheMansion); } public static bool HasLostScrollOfPower(Mobile from) { if (from is not PlayerMobile pm) { return false; } var qs = pm.Quest; if (qs is UzeraanTurmoilQuest) { if (qs.IsObjectiveInProgress(typeof(ReturnScrollOfPowerObjective))) { return from.Backpack?.FindItemByType() == null; } } return false; } public static bool HasLostFertileDirt(Mobile from) { if (from is not PlayerMobile pm) { return false; } var qs = pm.Quest; if (qs is UzeraanTurmoilQuest) { if (qs.IsObjectiveInProgress(typeof(ReturnFertileDirtObjective))) { return from.Backpack?.FindItemByType() == null; } } return false; } public static bool HasLostDaemonBlood(Mobile from) { if (from is not PlayerMobile pm) { return false; } var qs = pm.Quest; if (qs is UzeraanTurmoilQuest) { if (qs.IsObjectiveInProgress(typeof(ReturnDaemonBloodObjective))) { return from.Backpack?.FindItemByType() == null; } } return false; } public static bool HasLostDaemonBone(Mobile from) { if (from is not PlayerMobile pm) { return false; } var qs = pm.Quest; if (qs is UzeraanTurmoilQuest) { if (qs.IsObjectiveInProgress(typeof(ReturnDaemonBoneObjective))) { return from.Backpack?.FindItemByType() == null; } } return false; } } }