using System.Collections; using System.Collections.Generic; using System; using UnityEngine; namespace GFGGame { public class StoryDataManager { public static int currentChapter = 0; public static int currentLevel = 0; public static string currentLevelID; public static int currentScoreType; public static int currentCardId; public static bool usedRecommend; public static int _passChapter = 0; public static int _passLevel = 0; private static int _passChapterJY = 10000; private static int _passLevelJY = 0; private static int _recommendCount = 0; public static int recommendDay = -1; public static int recommendCount { get { return _recommendCount; } } private static Dictionary _highestScoreDic = new Dictionary(); private static Dictionary _chapterStarCountDic = new Dictionary(); private static Dictionary> _chapterBonusDic = new Dictionary>(); public static void InitServerData(RoleInfo roleInfo) { usedRecommend = false; if (roleInfo != null) { _passChapter = roleInfo.chapter; _passLevel = roleInfo.chapterLvl; _passChapterJY = roleInfo.chapterJY; _passLevelJY = roleInfo.chapterLvlJY; _recommendCount = roleInfo.recommendCount; recommendDay = roleInfo.recommendDay; } else { _passChapter = 0; _passLevel = 0; _passChapterJY = ConstStoryType.START_ID_OF_HARD; _passLevelJY = 0; recommendDay = -1; ResetDailyData(); } } public static void InitScoreList(List list) { _highestScoreDic.Clear(); if (list != null) { foreach (StoryScore value in list) { _highestScoreDic[value.lvlId] = value.score; } } } public static void InitStarList(List list) { _chapterStarCountDic.Clear(); _chapterBonusDic.Clear(); if (list != null) { foreach (StoryStar value in list) { int chapterID = value.chapterId; _chapterStarCountDic[chapterID] = value.star; if (value.boxStatus != null && value.boxStatus.Length > 0) { Dictionary statusDic = null; if (_chapterBonusDic.ContainsKey(chapterID)) { statusDic = _chapterBonusDic[chapterID]; } else { statusDic = new Dictionary(); _chapterBonusDic.Add(chapterID, statusDic); } string[] statusStrs = value.boxStatus.Split(';'); for (int i = 0; i < statusStrs.Length; i++) { string statusStr = statusStrs[i]; int status = int.Parse(statusStr); statusDic[i] = status; } } } } } public static void ResetDailyData() { _recommendCount = GameConst.MAX_COUNT_RECOMMEND; int day = ServerDataManager.CurrentDay; recommendDay = day; GameProxy.ReqUpdateRecommendCount(_recommendCount); } public static void SetPassData(int chapter, int chapterLvl) { if (StoryUtil.CheckChapterIsHard(chapter)) { _passChapterJY = chapter; _passLevelJY = chapterLvl; } else { _passChapter = chapter; _passLevel = chapterLvl; } } public static int GetChapterBonusStatus(int chapterID, int index) { if (_chapterBonusDic.ContainsKey(chapterID)) { Dictionary statusDic = _chapterBonusDic[chapterID]; if (statusDic != null) { if (statusDic.ContainsKey(index)) { return statusDic[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 void UpdateChapterBonusStatus(int chapterID, int starCount) { StoryChapterCfg storyChapterCfg = StoryChapterCfgArray.Instance.GetCfg(chapterID); if (starCount >= storyChapterCfg.bonusStar1) { 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; } if (statusDic[0] == ConstBonusStatus.CAN_NOT_GET) { statusDic[0] = ConstBonusStatus.CAN_GET; } if (starCount >= storyChapterCfg.bonusStar2 && statusDic[1] == ConstBonusStatus.CAN_NOT_GET) { statusDic[1] = ConstBonusStatus.CAN_GET; } if (starCount >= storyChapterCfg.bonusStar3 && statusDic[2] == ConstBonusStatus.CAN_NOT_GET) { statusDic[2] = ConstBonusStatus.CAN_GET; } } } public static bool CheckOpenMainUI() { return CheckLevelPass(1, 4) && GuideDataManager.GetGuideCount(ConstGuideId.SINGLE_FIGHT_GUIDE) > 0; } //检查指定章节对应的普通章节是否通关 public static bool CheckNormalChapterPass(int chapterId) { int normalChapterId = StoryUtil.GetNormalChapterId(chapterId); return normalChapterId <= _passChapter; } public static bool CheckChapterUnlock(int chapterId) { StoryChapterCfg chapterCfg = StoryChapterCfgArray.Instance.GetCfg(chapterId); if (RoleDataManager.lvl < chapterCfg.lvl) { return false; } if (StoryUtil.CheckChapterIsHard(chapterId)) { //对应普通剧情的章需要开启 if (!CheckNormalChapterPass(chapterId)) { return false; } //前一精英章需要通关 if (chapterId - 1 > _passChapterJY) { return false; } } else { if (chapterId - 1 > _passChapter) { return false; } } return true; } public static bool CheckLevelPass(int chapterId, int level) { int passChapter = GetPassChapter(chapterId); int passLevel = GetPassLevel(chapterId); if (chapterId <= passChapter) { return true; } if (chapterId == passChapter + 1 && level <= passLevel) { return true; } return false; } public static bool CheckLevelUnlock(int chapterId, int level) { int passChapter = GetPassChapter(chapterId); int passLevel = GetPassLevel(chapterId); if (chapterId <= passChapter) { return true; } if (chapterId == passChapter + 1 && level <= passLevel + 1) { return true; } return false; } public static bool CheckCurrentLevelPass() { return CheckLevelPass(currentChapter, currentLevel); } public static int GetScoreHighest(string levelID) { if (_highestScoreDic.ContainsKey(levelID)) { return _highestScoreDic[levelID]; } return 0; } public static void GetStoryId(string levelIdStr, out int chapterIdP, out int levelIdP) { string[] ids = levelIdStr.Split('_'); chapterIdP = int.Parse(ids[0]); levelIdP = int.Parse(ids[1]); } public static int GetResultStarCount(int score) { if (!EquipDataCache.cacher.CheckEquipedFightNeeded()) { return 0; } return GetStarCount(currentLevelID, score); } public static int GetStarCountHistory(string levelID, int score) { int chapterIdT = 0; int levelIdT = 0; GetStoryId(levelID, out chapterIdT, out levelIdT); if (!CheckLevelPass(chapterIdT, levelIdT)) { return 0; } return GetStarCount(levelID, score); } public static int GetStarCount(string levelID, int score) { StoryLevelCfg levelCfg = StoryLevelCfgArray.Instance.GetCfg(levelID); StoryFightCfg fightCfg = StoryFightCfgArray.Instance.GetCfg(levelCfg.fightID); int starCount = 0; if (score > fightCfg.score1) { if (score > fightCfg.score3) { starCount = 3; } else if (score > fightCfg.score2) { starCount = 2; } else { starCount = 1; } } return starCount; } public static bool CheckCurrentScoreEnough(int score) { StoryLevelCfg levelCfg = StoryLevelCfgArray.Instance.GetCfg(currentLevelID); StoryFightCfg fightCfg = StoryFightCfgArray.Instance.GetCfg(levelCfg.fightID); return (score > fightCfg.score1); } public static void SetScore(int score, int starCount) { int scoreHighest = 0; if (_highestScoreDic.ContainsKey(currentLevelID)) { scoreHighest = _highestScoreDic[currentLevelID]; } if (score > scoreHighest) { _highestScoreDic[currentLevelID] = score; GameProxy.ReqUpdateStoryScore(currentLevelID, score); int starCountSaved = GetStarCountHistory(currentLevelID, scoreHighest); int starCountChapter = 0; if (_chapterStarCountDic.ContainsKey(currentChapter)) { starCountChapter = _chapterStarCountDic[currentChapter]; } if (starCount > starCountSaved) { starCountChapter = starCountChapter + starCount - starCountSaved; _chapterStarCountDic[currentChapter] = starCountChapter; UpdateChapterBonusStatus(currentChapter, starCountChapter); string boxStatus = GetBoxStatus(currentChapter); GameProxy.ReqUpdateStoryStar(currentChapter, starCountChapter, boxStatus); } } } public static int GetPassChapter(int fromChapter) { if (StoryUtil.CheckChapterIsHard(fromChapter)) { return _passChapterJY; } return _passChapter; } public static int GetPassLevel(int fromChapter) { if (StoryUtil.CheckChapterIsHard(fromChapter)) { return _passLevelJY; } return _passLevel; } public static List PassCurrentLevel(out bool fistPassLastLvl, out bool curLvfirstPass) { fistPassLastLvl = false; curLvfirstPass = false; List currentBonusList = new List(); if (!CheckCurrentLevelPass()) { curLvfirstPass = true; int tempPassLevel = currentLevel; int tempPassChapter = GetPassChapter(currentChapter); int nextLevel = currentLevel + 1; string nextLevelID = currentChapter + "_" + nextLevel; StoryLevelCfg nextLevelCfg = StoryLevelCfgArray.Instance.GetCfg(nextLevelID); if (nextLevelCfg == null) { tempPassChapter = currentChapter; tempPassLevel = 0; fistPassLastLvl = true; } SetPassData(tempPassChapter, tempPassLevel); // FunctionOpenDataManager.Instance.CheckHasChapterFunOpen(_passChapter + 1, _passLevel);//首次通过要检查是否有功能开启 GameProxy.ReqUpdateStoryProgress(_passChapter, _passLevel, _passChapterJY, _passLevelJY); currentBonusList = StoryBonusDataCache.GetBonusList(currentLevelID, true, true); } else { currentBonusList = StoryBonusDataCache.GetBonusList(currentLevelID, false, true); } StoryLevelCfg levelCfg = StoryLevelCfgArray.Instance.GetCfg(StoryDataManager.currentLevelID); //消耗体力 if (currentBonusList != null && currentBonusList.Count > 0) { if (RoleDataManager.power >= levelCfg.power) { RoleDataManager.power -= levelCfg.power; } else { RoleDataManager.power = 0; } } //消耗推荐次数 if (usedRecommend) { usedRecommend = false; _recommendCount--; GameProxy.ReqUpdateRecommendCount(_recommendCount); } //经验奖励 if (levelCfg.fightID != null && levelCfg.fightID.Length > 0) { StoryFightCfg fightCfg = StoryFightCfgArray.Instance.GetCfg(levelCfg.fightID); RoleDataManager.exp += fightCfg.exp; } foreach (ItemData itemData in currentBonusList) { ItemDataManager.Add(itemData.id, itemData.num); } return currentBonusList; } public static int GetChapterStarCount(int chapterID) { if (_chapterStarCountDic.ContainsKey(chapterID)) { return _chapterStarCountDic[chapterID]; } return 0; } public static int GetCanFightTime(string levelID) { StoryLevelCfg levelCfg = StoryLevelCfgArray.Instance.GetCfg(levelID); int time = (int)Math.Floor((float)RoleDataManager.power / levelCfg.power); return time; } private static string GetBoxStatus(int chapterId) { string boxStatus = "0;0;0"; if (_chapterBonusDic.ContainsKey(chapterId)) { boxStatus = "{0};{1};{2}"; Dictionary tempDic = _chapterBonusDic[chapterId]; int value0 = GetChapterBonusStatus(chapterId, 0); int value1 = GetChapterBonusStatus(chapterId, 1); int value2 = GetChapterBonusStatus(chapterId, 2); boxStatus = string.Format(boxStatus, value0, value1, value2); } return boxStatus; } } }