Esempio n. 1
0
        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);
        }
Esempio n. 2
0
 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.
 }
Esempio n. 3
0
        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);
                    }
                }
            }
        }
Esempio n. 4
0
        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();
        }
Esempio n. 5
0
        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);
        }