/// <summary>
        /// Inserts a new quests into the questlist.
        /// </summary>
        public static void InsertQuest(uint cid, uint QID)
        {
            Character value;

            if (LifeCycle.TryGetById(cid, out value))
            {
                #region Check Quest

                QuestBase myquest = null;
                bool      result  = false;

                if (Singleton.Quests.TryFindQuests(QID, out value.client.scenarioquest))
                {
                    if (value.client.scenarioquest.OnStart(value.id) > -1)
                    {
                        myquest         = value.client.scenarioquest;
                        myquest.QuestId = QID;
                        result          = true;
                    }
                }

                #endregion Check Quest

                #region Add to Quest List

                if (result == false)
                {
                    return;
                }

                SMSG_INITIALIZESCENARIO spkt = new SMSG_INITIALIZESCENARIO();
                spkt.StepStatus = 1;
                spkt.Scenario1  = myquest.QuestId;
                spkt.Scenario2  = GetCurrentStep(cid, QID);
                value.client.Send((byte[])spkt);

                #endregion Add to Quest List

                #region Check Quest

                //value.client.scenarioquest.CheckQuest(cid);

                #endregion Check Quest
            }
        }
示例#2
0
        public static void StartQuest(uint cid, uint questid)
        {
            Character value;
            uint      currentScenarioQuest = 0;


            if (LifeCycle.TryGetById(cid, out value))
            {
                QuestBase scenarioQuest = value.QuestObjectives.Quests[3];
                currentScenarioQuest = (scenarioQuest != null) ?  scenarioQuest.QuestId : 0;
                if (currentScenarioQuest != questid)
                {
                    QuestBase newQuest;
                    if (Singleton.Quests.TryFindScenarioQuest(questid, out newQuest))
                    {
                        value.QuestObjectives.Quests[3] = newQuest;
                        newQuest.isnew = true;
                        newQuest.OnStart(value.id);
                        uint quest = (value.QuestObjectives.Quests[3] != null) ? value.QuestObjectives.Quests[3].QuestId : 0;
                        bool isnew = (value.QuestObjectives.Quests[3] != null) ? value.QuestObjectives.Quests[3].isnew : false;
                        if (quest > 0 && isnew)
                        {
                            SMSG_INITIALIZESCENARIO spkt = new SMSG_INITIALIZESCENARIO();
                            spkt.Scenario1 = quest;
                            List <Saga.Quests.Objectives.ObjectiveList.StepInfo> list;
                            if (value.QuestObjectives.ScenarioSteps.TryGetValue(quest, out list))
                            {
                                if (list.Count > 0)
                                {
                                    spkt.Scenario2  = list[0].StepId;
                                    spkt.StepStatus = 1;
                                    spkt.Enabled    = 0;
                                }
                            }
                            spkt.SessionId = value.id;
                            value.client.Send((byte[])spkt);
                            value.QuestObjectives.Quests[3].isnew = true;
                        }

                        newQuest.OnCheckQuest(value.id);
                    }
                }
            }
        }