using System.Collections; using System.Collections.Generic; using System; using UnityEngine; using ET; using ProtoBuf.Meta; namespace GFGGame { public class StoryDataManager { public static string priorId = "prior";//首次登录前置剧情id public static int currentChapterCfgId = 0; public static int currentLevelOrder = 0; //关卡配置表的id public static int currentLevelCfgId; //当前关卡序号,从1开始 public static int CurrentChapterOrder { get { var chapterCfg = StoryChapterCfgArray.Instance.GetCfg(currentChapterCfgId); if(chapterCfg != null) { return chapterCfg.order; } return 0; } } public static int currentScoreType; public static int currentCardId = 0; public static bool usedRecommend; //关卡最高分数记录 private static Dictionary _highestScoreDic = new Dictionary(); //关卡星数记录 private static Dictionary _starDic = new Dictionary(); //关卡宝箱状态记录 private static Dictionary _chapterBonusDic = new Dictionary(); public static void InitScoreList(List ks, List vs) { usedRecommend = false; _highestScoreDic.Clear(); for (var i = 0; i < ks.Count; ++i) { _highestScoreDic.Add(ks[i], vs[i]); } } public static void InitStarList(List ks, List vs) { _starDic.Clear(); for(var i = 0; i < ks.Count; ++i) { _starDic.Add(ks[i], vs[i]); } } public static void InitBoxBonusStates(List ks, List vs) { _chapterBonusDic.Clear(); for (var i = 0; i < ks.Count; ++i) { var states = new int[] { 0, 0, 0 }; var value = vs[i]; CalculateHelper.GenerateChapterBoxStates(states, value); _chapterBonusDic.Add(ks[i], states); } } public static void UpdateBoxBonusStates(int chapter, int stateInt) { if (!_chapterBonusDic.TryGetValue(chapter, out var states)) { states = new int[] { 0, 0, 0 }; _chapterBonusDic.Add(chapter, states); } CalculateHelper.GenerateChapterBoxStates(states, stateInt); } //检查更新最高分 public static void TryUpdateScore(int levelCfgId, int score) { _highestScoreDic.TryGetValue(levelCfgId, out var scoreHighest); if (score > scoreHighest) { _highestScoreDic[currentLevelCfgId] = score; } } //检查并更新关卡星数 public static void TryUpdateLevelStar(int levelCfgId, int star) { _starDic.TryGetValue(levelCfgId, out var OldStar); if(star > OldStar) { _starDic[levelCfgId] = star; } } //获取宝箱奖励状态 public static int GetChapterBonusStatus(int chapterID, int index) { if (_chapterBonusDic.ContainsKey(chapterID)) { var states = _chapterBonusDic[chapterID]; if (states != null) { return states[index]; } } return ConstBonusStatus.CAN_NOT_GET; } public static List GetChapterBonus(int chapterID, int index) { List bonusList = StoryBonusDataCache.GetChapterBonusList(chapterID, index); //foreach (ItemData itemData in bonusList) //{ // ItemDataManager.Add(itemData.id, itemData.num); //} //Dictionary statusDic = null; //if (_chapterBonusDic.ContainsKey(chapterID)) //{ // statusDic = _chapterBonusDic[chapterID]; //} //else //{ // statusDic = new Dictionary(); // _chapterBonusDic.Add(chapterID, statusDic); // statusDic[0] = ConstBonusStatus.CAN_NOT_GET; // statusDic[1] = ConstBonusStatus.CAN_NOT_GET; // statusDic[2] = ConstBonusStatus.CAN_NOT_GET; //} //statusDic[index] = ConstBonusStatus.GOT; //string boxStatus = GetBoxStatus(currentChapter); //int starCountChapter = GetChapterStarCount(currentChapter); //GameProxy.ReqUpdateStoryStar(currentChapter, starCountChapter, boxStatus); return bonusList; } public static bool CheckOpenMainUI() { return InstanceZonesDataManager.CheckLevelPass(10004) && GuideDataManager.GetGuideCountCopy(ConstGuideId.SINGLE_FIGHT) > 0; } //检查指定章节对应的普通章节是否通关 public static bool CheckNeedChapterPass(int chapterId, out int needChapterId) { StoryChapterCfg chapterCfg = StoryChapterCfgArray.Instance.GetCfg(chapterId); needChapterId = chapterCfg.needChapterId; if (chapterCfg.needChapterId > 0) { var preChapterCfg = StoryChapterCfgArray.Instance.GetCfg(chapterCfg.needChapterId); if (preChapterCfg != null) { return InstanceZonesDataManager.CheckChapterPass(preChapterCfg.type, preChapterCfg.subType, preChapterCfg.id, preChapterCfg.levelCount); } } return true; } public static bool CheckChapterUnlock(int chapterId) { StoryChapterCfg chapterCfg = StoryChapterCfgArray.Instance.GetCfg(chapterId); if (GameGlobal.myNumericComponent.GetAsInt(NumericType.Lvl) < chapterCfg.lvl) { return false; } //上一关卡 int preChapterId = chapterId - 1; var preChapterCfg = StoryChapterCfgArray.Instance.GetCfg(preChapterId); if(preChapterCfg != null) { return InstanceZonesDataManager.CheckChapterPass(preChapterCfg.type, preChapterCfg.subType, preChapterCfg.id, preChapterCfg.levelCount); } //前置关卡 return CheckNeedChapterPass(chapterId, out var needChapterId); } public static bool CheckLevelUnlock(int levelCfgId) { var levelCfg = StoryLevelCfgArray.Instance.GetCfg(levelCfgId); if (levelCfg != null) { if (!CheckChapterUnlock(levelCfg.chapterId)) { return false; } var passLevelOrder = InstanceZonesDataManager.GetPassLevelOrder(levelCfg.type, levelCfg.subType, levelCfg.chapterId); return levelCfg.order <= passLevelOrder + 1; } return false; } public static bool CheckCurrentLevelPass() { return InstanceZonesDataManager.CheckLevelPass(currentLevelCfgId); } public static int GetScoreHighest(int levelID) { if (_highestScoreDic.ContainsKey(levelID)) { return _highestScoreDic[levelID]; } return 0; } public static bool GetFightResult(int score, out int npcScore) { npcScore = 0; bool equipedNeeded = EquipDataCache.cacher.CheckEquipedFightNeeded(); if (!equipedNeeded) { PromptController.Instance.ShowFloatTextPrompt("未穿必需物品"); return false;//没穿必需品 } int starCount = StoryDataManager.GetResultStarCount(score); if (starCount <= 0) { return false;//低于一星 } StoryLevelCfg levelCfg = StoryLevelCfgArray.Instance.GetCfg(StoryDataManager.currentLevelCfgId); StoryFightCfg fightCfg = StoryFightCfgArray.Instance.GetCfg(levelCfg.fightID); bool hasFightTarget = fightCfg.targetName != null && fightCfg.targetName.Length > 0; if (hasFightTarget) { npcScore = EquipDataCache.cacher.npcTotalScore; if(score < npcScore) { return false;//分数低于对战对象 } } return true; } public static int GetResultStarCount(int score) { return CalculateHelper.GetStoryChapterStar(currentLevelCfgId, score); } public static int GetStarCountHistory(int levelID) { _starDic.TryGetValue(levelID, out var star); return star; } public static bool CheckCurrentScoreEnough(int score) { StoryLevelCfg levelCfg = StoryLevelCfgArray.Instance.GetCfg(currentLevelCfgId); StoryFightCfg fightCfg = StoryFightCfgArray.Instance.GetCfg(levelCfg.fightID); return (score > fightCfg.score1); } public static int GetChapterStarCount(int chapterID) { var star = 0; foreach(var item in _starDic) { CalculateHelper.GetStoryChapterLevel(item.Key, out var tempChapter, out var levelOrder); if(tempChapter == chapterID) { star += item.Value; } } return star; } public static int GetCanFightTime(int levelID) { StoryLevelCfg levelCfg = StoryLevelCfgArray.Instance.GetCfg(levelID); int times = (int)Math.Floor((float)GameGlobal.myNumericComponent.GetAsInt(NumericType.Power) / levelCfg.power); return times; } } }