public override bool CanTeleport(Mobile m) { if (!base.CanTeleport(m)) { return(false); } if (m_QuestType != null) { PlayerMobile pm = m as PlayerMobile; if (pm == null) { return(false); } MLQuestContext context = MLQuestSystem.GetContext(pm); if (context == null || (!context.IsDoingQuest(m_QuestType) && !context.HasDoneQuest(m_QuestType))) { TextDefinition.SendMessageTo(m, m_Message); return(false); } } return(true); }
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); }