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; }
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(); }
/// <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); } }
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); }
/// <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); } }
//等于返回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)); } }
/// <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(); }
/// <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; } } } }