protected override List <MLQuest> ConstructQuestList() { if (m_MLQuest == null) { Region reg = Region; Type[] list = reg.IsPartOf("Haven Island") ? m_MLQuestTypesNH : m_MLQuestTypes; int randomIdx = Utility.Random(list.Length); for (int i = 0; i < list.Length; ++i) { Type questType = list[randomIdx]; MLQuest quest = MLQuestSystem.FindQuest(questType); if (quest != null) { bool okay = true; foreach (BaseObjective obj in quest.Objectives) { if (obj is EscortObjective && ((EscortObjective)obj).Destination.Contains(reg)) { okay = false; // We're already there! break; } } if (okay) { m_MLQuest = quest; break; } } else if (MLQuestSystem.Debug) { Console.WriteLine("Warning: Escortable cannot be assigned quest type '{0}', it is not registered", questType.Name); } randomIdx = (randomIdx + 1) % list.Length; } if (m_MLQuest == null) { if (MLQuestSystem.Debug) { Console.WriteLine("Warning: No suitable quest found for escort {0}", Serial); } return(null); } } List <MLQuest> result = new List <MLQuest> { m_MLQuest }; return(result); }
public static void AwardTo(PlayerMobile pm) { MLQuestSystem.GetOrCreateContext(pm).SetDoneQuest(MLQuestSystem.FindQuest(typeof(HumanInNeed))); pm.SendLocalizedMessage( 1074949, "", 0x2A ); // You have demonstrated your compassion! Your kind actions have been noted. }
public void ConsumeNeeded(PlayerMobile pm) { MLQuestContext context = MLQuestSystem.GetContext(pm); if (context != null) { foreach (Type type in Needed) { MLQuest quest = MLQuestSystem.FindQuest(type); if (quest != null) { context.RemoveDoneQuest(quest); } } } }
public void TalkTo(PlayerMobile pm) { if (pm == null || m_Timer?.Running == true) { return; } int completed = CompletedCount(pm); if (completed == Needed.Length) { m_Timer = new InternalTimer(this, pm, Complete, true); } else if (completed == 0) { m_Timer = new InternalTimer(this, pm, Offer, false); } else { List <TextDefinition> conversation = new List <TextDefinition>(); conversation.AddRange(Incomplete); MLQuestContext context = MLQuestSystem.GetContext(pm); if (context != null) { foreach (Type type in Needed) { MLQuest quest = MLQuestSystem.FindQuest(type); if (quest == null || context.HasDoneQuest(quest)) { continue; } conversation.Add(quest.Title); } } m_Timer = new InternalTimer(this, pm, conversation, false); } m_Timer.Start(); }
private int CompletedCount(PlayerMobile pm) { MLQuestContext context = MLQuestSystem.GetContext(pm); if (context == null) { return(0); } int result = 0; foreach (Type type in Needed) { MLQuest quest = MLQuestSystem.FindQuest(type); if (quest == null || context.HasDoneQuest(quest)) { ++result; } } return(result); }