Пример #1
0
        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);
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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);
                }
            }
        }