コード例 #1
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;
    }
コード例 #2
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);
        }
コード例 #3
0
        public static void AwardTo(PlayerMobile pm)
        {
            if (pm == null)
            {
                return;
            }

            MLQuestContext context = MLQuestSystem.GetOrCreateContext(pm);

            if (!context.Spellweaving)
            {
                context.Spellweaving = true;

                Effects.SendLocationParticles(EffectItem.Create(pm.Location, pm.Map, EffectItem.DefaultDuration), 0, 0, 0, 0,
                                              0, 5060, 0);
                Effects.PlaySound(pm.Location, pm.Map, 0x243);

                Effects.SendMovingParticles(new Entity(Serial.Zero, new Point3D(pm.X - 6, pm.Y - 6, pm.Z + 15), pm.Map), pm,
                                            0x36D4, 7, 0, false, true, 0x497, 0, 9502, 1, 0, (EffectLayer)255, 0x100);
                Effects.SendMovingParticles(new Entity(Serial.Zero, new Point3D(pm.X - 4, pm.Y - 6, pm.Z + 15), pm.Map), pm,
                                            0x36D4, 7, 0, false, true, 0x497, 0, 9502, 1, 0, (EffectLayer)255, 0x100);
                Effects.SendMovingParticles(new Entity(Serial.Zero, new Point3D(pm.X - 6, pm.Y - 4, pm.Z + 15), pm.Map), pm,
                                            0x36D4, 7, 0, false, true, 0x497, 0, 9502, 1, 0, (EffectLayer)255, 0x100);

                Effects.SendTargetParticles(pm, 0x375A, 35, 90, 0x00, 0x00, 9502, (EffectLayer)255, 0x100);
            }
        }
コード例 #4
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);
        }
コード例 #5
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 mobile)
            {
                MLQuestContext 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);
                }
            }

            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);
            }

            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);
        }
コード例 #6
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);
                    }
                }
            }
        }
コード例 #7
0
ファイル: SummonFiend.cs プロジェクト: rafaelfcsouza/ModernUO
        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());
        }
コード例 #8
0
ファイル: SummonFey.cs プロジェクト: nogu3ira/runuo-1
        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());
        }
コード例 #9
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();
        }
コード例 #10
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;

            MLQuestContext context = MLQuestSystem.GetContext(pm);

            if (context != null)
            {
                List <MLQuestInstance> instances = context.QuestInstances;

                for (int 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);
                }
            }
        }
コード例 #11
0
		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadInt();
			int contexts = reader.ReadInt();

			for ( int i = 0; i < contexts; ++i )
			{
				MLQuestContext context = new MLQuestContext( reader, version );

				if ( context.Owner != null )
					MLQuestSystem.Contexts[context.Owner] = context;
			}

			int quests = reader.ReadInt();

			for ( int i = 0; i < quests; ++i )
				MLQuest.Deserialize( reader, version );
		}
コード例 #12
0
        public override void OnDoubleClick(Mobile from)
        {
            PlayerMobile pm = from as PlayerMobile;

            if (pm == null || pm.Backpack == null)
            {
                return;
            }

            if (pm.InRange(GetWorldLocation(), 2))
            {
                MLQuestContext context = MLQuestSystem.GetContext(pm);

                if (context != null && context.IsDoingQuest(typeof(UnfadingMemoriesPartOne)) && pm.Backpack.FindItemByType(typeof(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.
            }
        }
コード例 #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);
        }
コード例 #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));
        }
コード例 #15
0
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);

            int version  = reader.ReadInt();
            int contexts = reader.ReadInt();

            for (int i = 0; i < contexts; ++i)
            {
                MLQuestContext context = new MLQuestContext(reader, version);

                if (context.Owner != null)
                {
                    MLQuestSystem.Contexts[context.Owner] = context;
                }
            }

            int quests = reader.ReadInt();

            for (int i = 0; i < quests; ++i)
            {
                MLQuest.Deserialize(reader, version);
            }
        }