Example #1
0
        public void Reset()
        {
            m_ListeningStepDict.Clear();
            m_ForceStartStepDict.Clear();

            if (m_UpdateTimer != null)
            {
                m_UpdateTimer.Destroy();
                m_UpdateTimer = null;
            }

            if (m_DBGuide != null)
            {
                m_DBGuide.Reset();
                m_DBGuide = null;
            }

            if (m_DBGuideStep != null)
            {
                m_DBGuideStep.Reset();
                m_DBGuideStep = null;
            }

            m_FinishedBranchTask.Clear();
            m_TimelineStatus.Clear();
            m_Dirty = false;
            m_IsPlayingGuideStep = false;
            m_PlayingGuideStep   = null;
            mPlayingGuide        = null;
            m_ListenerStarted    = false;
        }
Example #2
0
        protected override void ParseData(SqliteDataReader reader)
        {
            if (reader == null || !reader.HasRows)
            {
                return;
            }

            while (reader.Read())
            {
                var guide = new GuideData();

                guide.Id              = DBTextResource.ParseUI(GetReaderString(reader, "guide_id"));
                guide.Priority        = DBTextResource.ParseUS(GetReaderString(reader, "priority"));
                guide.PreSys          = DBTextResource.ParseUI(GetReaderString(reader, "sys"));
                guide.MinLevel        = DBTextResource.ParseUI(GetReaderString(reader, "min_level"));
                guide.MaxLevel        = DBTextResource.ParseUI(GetReaderString(reader, "max_level"));
                guide.InstanceType    = DBTextResource.ParseI_s(GetReaderString(reader, "inst_type"), -1);
                guide.InstanceSubType = DBTextResource.ParseI_s(GetReaderString(reader, "inst_sub_type"), -1);
                guide.TriggerType     = (GuideData.GuideTrigger)Enum.Parse(typeof(GuideData.GuideTrigger), GetReaderString(reader, "trigger_type"));
                guide.TriggerParams   = new List <uint>();
                string[] param = TextHelper.GetListFromString(GetReaderString(reader, "trigger_params"));
                if (param != null)
                {
                    foreach (string s in param)
                    {
                        guide.TriggerParams.Add(DBTextResource.ParseUI_s(s, 0));
                    }
                }

                string rawStr = GetReaderString(reader, "auto_fight_when_finish");
                if (string.IsNullOrEmpty(rawStr) == true || rawStr.Equals("0") == true)
                {
                    guide.AutoFightWhenFinish = false;
                }
                else
                {
                    guide.AutoFightWhenFinish = true;
                }

                guide.TimelineWhenFinish = DBTextResource.ParseUI_s(GetReaderString(reader, "timeline_when_finish"), 0);

                rawStr = GetReaderString(reader, "guide_main_task_when_finish_and_return_main_wnd");
                if (string.IsNullOrEmpty(rawStr) == true || rawStr.Equals("0") == true)
                {
                    guide.GuideMainTaskWhenFinishAndReturnMainWnd = false;
                }
                else
                {
                    guide.GuideMainTaskWhenFinishAndReturnMainWnd = true;
                }

                guide.IsFinished = false;

                Guides.Add(guide.Id, guide);
                GuideList.Add(guide);
            }

            GuideList.Sort();
        }
Example #3
0
        /// <summary>
        /// 指定的新手引导是否已经完成
        /// </summary>
        /// <param name="guide_id"></param>
        /// <returns></returns>
        public bool IsGuideFinish(uint guide_id)
        {
            GuideData guide = null;

            if (Guides.TryGetValue(guide_id, out guide))
            {
                return(guide.IsFinished);
            }
            else
            {
                return(false);
            }
        }
Example #4
0
        private bool TryToStartGuideStep(Guide.Step guideStep)
        {
            if (guideStep == null || guideStep.TargetTrigger == null)
            {
                return(false);
            }

            m_IsPlayingGuideStep = guideStep.TryToStartup();
            if (m_IsPlayingGuideStep)
            {
                m_PlayingGuideStep             = guideStep;
                mPlayingGuide                  = m_DBGuide.GetGuideById(guideStep.GuideId);
                mPlayingGuide.StartPlayerLevel = LocalPlayerManager.Instance.LocalActorAttribute.Level;
                mPlayingGuide.StartTime        = Game.Instance.ServerTime;

                // 强制指引才停止寻路
                if (guideStep.IsForcible)
                {
                    TargetPathManager.Instance.StopPlayerAndReset();
                }

                // 暂停副本
                if (guideStep.IsPause)
                {
                    var local_player = Game.Instance.GetLocalPlayer();
                    if (local_player != null)
                    {
                        local_player.Stop();
                    }

                    C2SDungeonStopAi stop_ai = new C2SDungeonStopAi();
                    NetClient.GetBaseClient().SendData <C2SDungeonStopAi>(NetMsg.MSG_DUNGEON_STOP_AI, stop_ai);

                    InstanceHelper.PauseInstance();
                }

                ClientEventMgr.GetInstance().FireEvent((int)ClientEvent.CE_GUIDESTART, new CEventBaseArgs(guideStep.GuideId));

                // 为了防止新手配置问题导致引导一直卡住,在第一次播放引导时就标记为已完成

                /*if (guideStep.StepId == 1 && !guideStep.IsForcible)
                 * {
                 *  if (!TestGuide)
                 *  {
                 *      SendFinishGuide(guideStep.GuideId);
                 *  }
                 * }*/
            }
            return(m_IsPlayingGuideStep);
        }
Example #5
0
        /// <summary>
        /// 跳过指定的和剩下的引导步骤
        /// </summary>
        /// <param name="guide_step"></param>
        public void SkipGuideStep(Guide.Step guide_step)
        {
            if (guide_step == null)
            {
                return;
            }

            guide_step.IsFinished = true;

            uint guide_id = guide_step.GuideId;
            var  guide    = m_DBGuide.GetGuideById(guide_id);

            if (guide != null)
            {
                guide.IsFinished = true;

                // 完成后是否自动战斗
                if (guide.AutoFightWhenFinish == true)
                {
                    InstanceManager.Instance.IsAutoFighting = true;
                }

                // 完成后是否播放剧情
                if (guide.TimelineWhenFinish > 0)
                {
                    TimelineManager.Instance.Play(guide.TimelineWhenFinish);
                }
            }

            SendFinishGuide(guide_step.GuideId, guide_step, 0);

            m_ListeningStepDict.Remove(guide_id);
            m_ForceStartStepDict.Remove(guide_id);

            ClientEventMgr.GetInstance().FireEvent((int)ClientEvent.CE_GUIDEEND, new CEventBaseArgs(guide_id));

            m_Dirty = true;
            m_IsPlayingGuideStep = false;
            m_PlayingGuideStep   = null;
            mPlayingGuide        = null;

            if (mWaitFinishCB != null && mWaitFinishGuideId == guide_id)
            {
                var cb = mWaitFinishCB;
                mWaitFinishCB      = null;
                mWaitFinishGuideId = 0;
                cb(guide_id);
            }
        }
Example #6
0
        //等于返回0值,大于返回大于0的值,小于返回小于0的值。
        public int CompareTo(object obj)
        {
            if (obj == null)
            {
                return(-1);
            }

            GuideData guide = (GuideData)obj;
            int       ret   = Priority.CompareTo(guide.Priority);

            if (ret != 0)
            {
                return(ret);
            }
            else
            {
                return(Id.CompareTo(guide.Id));
            }
        }
Example #7
0
        /// <summary>
        /// 切换场景完毕
        /// </summary>
        /// <param name="evt"></param>
        private void OnSwitchSceneFinish(CEventBaseArgs evt)
        {
            Debug.Log("OnSwitchSceneFinish");

            // 切换场景时,指引窗口已经被销毁了,因此需要清除掉当前正在运行的指引
            if (m_IsPlayingGuideStep)
            {
                m_IsPlayingGuideStep = false;
                m_PlayingGuideStep   = null;
                mPlayingGuide        = null;
            }

            m_ForceStartStepDict.Clear();
            m_ListeningStepDict.Clear();
            m_TimelineStatus.Clear();

            m_Dirty = true;
            UIManager.Instance.CloseWindow("UIGuideWindow");
            UIManager.Instance.ShowWindow("UIGuideWindow");

            // 如果新手引导在断线重连等情况下被暂停了,需要恢复
            //if(mPause)
            //  Resume();
        }
Example #8
0
        /// <summary>
        /// 完成指定的GuideStep
        /// </summary>
        /// <param name="guide_step"></param>
        void FinishGuideStep(Guide.Step guide_step)
        {
            if (guide_step == null)
            {
                return;
            }

            guide_step.IsFinished = true;

            if (guide_step.IsCanFinish)
            {
                SendFinishGuide(guide_step.GuideId, guide_step, 1);
            }

            // 如果是最后一步,则完成指引序列
            if (m_DBGuideStep.IsLastGuidesStep(guide_step))
            {
                uint guide_id = guide_step.GuideId;
                var  guide    = m_DBGuide.GetGuideById(guide_id);
                if (guide != null)
                {
                    guide.IsFinished = true;

                    // 完成后是否自动战斗
                    if (guide.AutoFightWhenFinish == true)
                    {
                        InstanceManager.Instance.IsAutoFighting = true;
                    }

                    // 完成后是否播放剧情
                    if (guide.TimelineWhenFinish > 0)
                    {
                        TimelineManager.Instance.Play(guide.TimelineWhenFinish);
                    }
                }

                // 可能IsCanFinish都没有设置
                SendFinishGuide(guide_step.GuideId, guide_step, 1);

                m_ListeningStepDict.Remove(guide_id);
                m_ForceStartStepDict.Remove(guide_id);

                ClientEventMgr.GetInstance().FireEvent((int)ClientEvent.CE_GUIDEEND, new CEventBaseArgs(guide_id));
                m_Dirty = true;
                m_IsPlayingGuideStep = false;
                m_PlayingGuideStep   = null;
                mPlayingGuide        = null;

                if (mWaitFinishCB != null && mWaitFinishGuideId == guide_id)
                {
                    var cb = mWaitFinishCB;

                    mWaitFinishCB      = null;
                    mWaitFinishGuideId = 0;

                    cb(guide_id);
                }
            }
            else// 更新下一步的指引步骤
            {
                m_IsPlayingGuideStep = false;
                m_PlayingGuideStep   = null;

                var new_guide_step = m_DBGuideStep.GetCurrentStep(guide_step.GuideId);
                if (new_guide_step != null)
                {
                    uint       new_guide_id = new_guide_step.GuideId;
                    Guide.Step old_step;
                    if (m_ForceStartStepDict.TryGetValue(new_guide_id, out old_step))
                    {
                        m_ForceStartStepDict[new_guide_id] = new_guide_step;
                    }
                    else if (m_ListeningStepDict.TryGetValue(new_guide_id, out old_step))
                    {
                        m_ListeningStepDict[new_guide_id] = new_guide_step;
                    }
                }
            }
        }