public static MLQuestInstance Deserialize(GenericReader reader, int version, PlayerMobile pm) { MLQuest quest = MLQuestSystem.ReadQuestRef(reader); // TODO: Serialize quester TYPE too, the quest giver reference then becomes optional (only for escorts) IQuestGiver quester = World.FindEntity(reader.ReadInt()) as IQuestGiver; bool claimReward = reader.ReadBool(); int objectives = reader.ReadInt(); MLQuestInstance instance; if (quest != null && quester != null && pm != null) { instance = quest.CreateInstance(quester, pm); instance.ClaimReward = claimReward; } else { instance = null; } for (int i = 0; i < objectives; ++i) { BaseObjectiveInstance.Deserialize(reader, version, (instance != null && i < instance.Objectives.Length) ? instance.Objectives[i] : null); } if (instance != null) { instance.Slice(); } return(instance); }
public MLQuestInstance(MLQuest quest, IQuestGiver quester, PlayerMobile player) { Quest = quest; m_Quester = quester; QuesterType = quester?.GetType(); Player = player; Accepted = DateTime.UtcNow; m_Flags = MLQuestInstanceFlags.None; Objectives = new BaseObjectiveInstance[quest.Objectives.Count]; BaseObjectiveInstance obj; var timed = false; for (var i = 0; i < quest.Objectives.Count; ++i) { Objectives[i] = obj = quest.Objectives[i].CreateInstance(this); if (obj.IsTimed) { timed = true; } } Register(); if (timed) { m_Timer = Timer.DelayCall(TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(5), Slice); } }
public void AddObjectives(MLQuest quest) { AddHtmlLocalized(98, 140, 312, 16, 1049073, 0x2710); // Objective: AddHtmlLocalized( 98, 156, 312, 16, quest.ObjectiveType == ObjectiveType.All ? 1072208 : 1072209, 0x2710 ); // All of the following / Only one of the following var y = 172; foreach (var objective in quest.Objectives) { objective.WriteToGump(this, ref y); if (objective.IsTimed) { if (objective is CollectObjective) { y -= 16; } BaseObjectiveInstance.WriteTimeRemaining(this, ref y, objective.Duration); } } }