Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        public override int LabelNumber => 1074269; // prismatic crystal

        public override void OnDoubleClick(Mobile from)
        {
            if (!(from is PlayerMobile pm) || pm.Backpack == null)
            {
                return;
            }

            if (pm.InRange(GetWorldLocation(), 2))
            {
                if (MLQuestSystem.GetContext(pm)?.IsDoingQuest(typeof(UnfadingMemoriesPartOne)) == true &&
                    pm.Backpack.FindItemByType <PrismaticAmber>(false) == null)
                {
                    Item amber = new PrismaticAmber();

                    if (pm.PlaceInBackpack(amber))
                    {
                        MLQuestSystem.MarkQuestItem(pm, amber);
                        Delete();
                    }
                    else
                    {
                        pm.SendLocalizedMessage(502385); // Your pack cannot hold this item.
                        amber.Delete();
                    }
                }
                else
                {
                    pm.SendLocalizedMessage(1075464); // You already have as many of those as you need.
                }
            }
            else
            {
                pm.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
            }
        }
Esempio n. 3
0
    public override bool CanUse(Mobile from)
    {
      if (!(base.CanUse(from) && from is PlayerMobile pm))
        return false;

      MLQuestContext context = MLQuestSystem.GetContext(pm);

      if (context != null)
        foreach (MLQuestInstance instance in context.QuestInstances)
          foreach (BaseObjectiveInstance objective in instance.Objectives)
            if (!objective.Expired && objective is GainSkillObjectiveInstance objectiveInstance &&
                objectiveInstance.Handles(Skill))
            {
              from.SendMessage("You are already under the effect of an enhanced skillgain quest.");
              return false;
            }

      if (pm.AcceleratedStart > DateTime.UtcNow)
      {
        from.SendLocalizedMessage(1077951); // You are already under the effect of an accelerated skillgain scroll.
        return false;
      }

      return true;
    }
Esempio n. 4
0
        public QuestLogGump(PlayerMobile pm, bool closeGumps = true)
            : base(1046026) // Quest Log
        {
            m_Owner      = pm;
            m_CloseGumps = closeGumps;

            if (closeGumps)
            {
                pm.CloseGump <QuestLogGump>();
                pm.CloseGump <QuestLogDetailedGump>();
            }

            RegisterButton(ButtonPosition.Right, ButtonGraphic.Okay, 3);

            SetPageCount(1);

            BuildPage();

            int numberColor, stringColor;

            var context = MLQuestSystem.GetContext(pm);

            if (context != null)
            {
                var instances = context.QuestInstances;

                for (var i = 0; i < instances.Count; ++i)
                {
                    if (instances[i].Failed)
                    {
                        numberColor = 0x3C00;
                        stringColor = 0x7B0000;
                    }
                    else
                    {
                        numberColor = stringColor = 0xFFFFFF;
                    }

                    TextDefinition.AddHtmlText(
                        this,
                        98,
                        140 + 21 * i,
                        270,
                        21,
                        instances[i].Quest.Title,
                        false,
                        false,
                        numberColor,
                        stringColor
                        );
                    AddButton(368, 140 + 21 * i, 0x26B0, 0x26B1, 6 + i, GumpButtonType.Reply, 1);
                }
            }
        }
Esempio n. 5
0
        public override bool CheckCast()
        {
            if (!base.CheckCast())
            {
                return(false);
            }

            var caster = Caster;

            if (!CheckExpansion(caster))
            {
                caster.SendLocalizedMessage(
                    1072176
                    ); // You must upgrade to the Mondain's Legacy Expansion Pack before using that ability
                return(false);
            }

            if (caster is PlayerMobile mobile)
            {
                var context = MLQuestSystem.GetContext(mobile);

                if (context?.Spellweaving != true)
                {
                    mobile.SendLocalizedMessage(
                        1073220
                        ); // You must have completed the epic arcanist quest to use this ability.
                    return(false);
                }
            }

            var mana = ScaleMana(RequiredMana);

            if (caster.Mana < mana)
            {
                caster.SendLocalizedMessage(
                    1060174,
                    mana.ToString()
                    ); // You must have at least ~1_MANA_REQUIREMENT~ Mana to use this ability.
                return(false);
            }

            if (caster.Skills[CastSkill].Value < RequiredSkill)
            {
                caster.SendLocalizedMessage(
                    1063013,
                    $"{RequiredSkill:F1}\t{"#1044114"}"
                    ); // You need at least ~1_SKILL_REQUIREMENT~ ~2_SKILL_NAME~ skill to use that ability.
                return(false);
            }

            return(true);
        }
Esempio n. 6
0
        public override bool CanOffer(IQuestGiver quester, PlayerMobile pm, bool message)
        {
            if ((quester is BaseCreature && ((BaseCreature)quester).Controlled) || (quester is BaseEscortable && ((BaseEscortable)quester).IsBeingDeleted))
            {
                return(false);
            }

            MLQuestContext context = MLQuestSystem.GetContext(pm);

            if (context != null)
            {
                foreach (MLQuestInstance instance in context.QuestInstances)
                {
                    if (instance.Quest.IsEscort)
                    {
                        if (message)
                        {
                            MLQuestSystem.Tell(quester, pm, 500896);                               // I see you already have an escort.
                        }
                        return(false);
                    }
                }
            }

            DateTime nextEscort = pm.LastEscortTime + BaseEscortable.EscortDelay;

            if (nextEscort > DateTime.UtcNow)
            {
                if (message)
                {
                    int minutes = (int)Math.Ceiling((nextEscort - DateTime.UtcNow).TotalMinutes);

                    if (minutes == 1)
                    {
                        MLQuestSystem.Tell(quester, pm, "You must rest 1 minute before we set out on this journey.");
                    }
                    else
                    {
                        MLQuestSystem.Tell(quester, pm, 1071195, minutes.ToString());                           // You must rest ~1_minsleft~ minutes before we set out on this journey.
                    }
                }

                return(false);
            }

            return(true);
        }
Esempio n. 7
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. 8
0
        public override bool CheckSequence()
        {
            Mobile caster = Caster;

            // This is done after casting completes
            if (caster is PlayerMobile mobile)
            {
                MLQuestContext context = MLQuestSystem.GetContext(mobile);

                if (context?.SummonFiend != true)
                {
                    mobile.SendLocalizedMessage(1074564); // You haven't demonstrated mastery to summon a fiend.
                    return(false);
                }
            }

            return(base.CheckSequence());
        }
Esempio n. 9
0
        public override bool CheckSequence()
        {
            Mobile caster = Caster;

            // This is done after casting completes
            if (caster is PlayerMobile)
            {
                MLQuestContext context = MLQuestSystem.GetContext((PlayerMobile)caster);

                if (context == null || !context.SummonFey)
                {
                    caster.SendLocalizedMessage(1074563);                       // You haven't forged a friendship with the fey and are unable to summon their aid.
                    return(false);
                }
            }

            return(base.CheckSequence());
        }
Esempio n. 10
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. 11
0
        public override void OnDoubleClick(Mobile from)
        {
            if (!from.InRange(GetWorldLocation(), 2))
            {
                from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045);                   // I can't reach that.
                return;
            }

            MLQuestContext context;

            if (from is PlayerMobile && (context = MLQuestSystem.GetContext((PlayerMobile)from)) != null && context.BedlamAccess)
            {
                BaseCreature.TeleportPets(from, PointDest, MapDest);
                from.MoveToWorld(PointDest, MapDest);
            }
            else
            {
                from.SendLocalizedMessage(1074276);                   // You press and push on the iron maiden, but nothing happens.
            }
        }
Esempio n. 12
0
        public override bool CheckCast()
        {
            if (!base.CheckCast())
            {
                return(false);
            }

            Mobile caster = Caster;

            if (!CheckExpansion(caster))
            {
                caster.SendLocalizedMessage(1072176);                 // You must upgrade to the Mondain's Legacy Expansion Pack before using that ability
                return(false);
            }

            if (caster is PlayerMobile)
            {
                MLQuestContext context = MLQuestSystem.GetContext((PlayerMobile)caster);

                if (context == null || !context.Spellweaving)
                {
                    caster.SendLocalizedMessage(1073220);                     // You must have completed the epic arcanist quest to use this ability.
                    return(false);
                }
            }

            int mana = ScaleMana(RequiredMana);

            if (caster.Mana < mana)
            {
                caster.SendLocalizedMessage(1060174, mana.ToString());                 // You must have at least ~1_MANA_REQUIREMENT~ Mana to use this ability.
                return(false);
            }
            else if (caster.Skills[CastSkill].Value < RequiredSkill)
            {
                caster.SendLocalizedMessage(1063013, string.Format("{0}\t{1}", RequiredSkill.ToString("F1"), "#1044114"));                 // You need at least ~1_SKILL_REQUIREMENT~ ~2_SKILL_NAME~ skill to use that ability.
                return(false);
            }

            return(true);
        }
Esempio n. 13
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);
        }
Esempio n. 14
0
        public override void OnResponse(NetState sender, RelayInfo info)
        {
            if (info.ButtonID < 6)
            {
                return;
            }

            MLQuestContext context = MLQuestSystem.GetContext(m_Owner);

            if (context == null)
            {
                return;
            }

            List <MLQuestInstance> instances = context.QuestInstances;
            int index = info.ButtonID - 6;

            if (index >= instances.Count)
            {
                return;
            }

            sender.Mobile.SendGump(new QuestLogDetailedGump(instances[index], m_CloseGumps));
        }