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