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