using System.Collections; using System.Collections.Generic; using UnityEngine; using System; using LitJson; public class DungeonManager : GameSystemManager { private Dictionary fbInfoDict = new Dictionary(); public event Action UpdateFBInfoListEvent;//int mapID Dictionary dungeonRecords = new Dictionary(); public event Action updateDungeonBuyCnt; public override void Init() { DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitializeEvent; } public override void Release() { DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitializeEvent; } public void OnBeforePlayerDataInitializeEvent() { fbInfoDict.Clear(); } public bool TryGetFBInfoByMapID(int mapID, out FBInfo info) { return fbInfoDict.TryGetValue(mapID, out info); } //获得副本的最大次数和剩余可用次数 //maxCount 最大次数:可能会因各个副本展示规则不同而不同 // 默认为从功能操作归属出发购买次数属于每日上限次数 每日次数 + 可最大购买次数 + 特权次数 //useCount 剩余可用次数:今日总的可用次数 - 今日已进入次数 // 今日总的可用次数:每日次数 + 可购总买次数 + 广告次数 + 道具次数 + 特权次数 // 默认为从功能操作归属出发购买次数属于可用次数内 public bool TryGetDungeonCount(int dataMapID, out int maxCount, out int useCount) { maxCount = 0; useCount = 0; if (!TryGetFBInfoByMapID(dataMapID, out FBInfo fbInfo)) return false; DungeonOpenTimeConfig dungeonOpenTimeConfig = DungeonOpenTimeConfig.Get(dataMapID); if (dungeonOpenTimeConfig == null) { return false; } //总的可用次数:每日次数 + 可购总买次数 + 广告次数 + 道具次数 + 特权次数 int totalCount = dungeonOpenTimeConfig.DayTimes + dungeonOpenTimeConfig.PayCntMax + InvestModel.Instance.GetAddFBBuyCount(dataMapID) + fbInfo.ADAddCnt + fbInfo.ItemAddCnt; maxCount = dungeonOpenTimeConfig.DayTimes + dungeonOpenTimeConfig.PayCntMax + InvestModel.Instance.GetAddFBBuyCount(dataMapID); useCount = totalCount - fbInfo.EnterCnt; return true; } public void UpdateFBInfoList(HA320_tagSCFBInfoList vNetData) { if (vNetData == null || vNetData.FBDataList.IsNullOrEmpty()) return; bool isADAddCntChange = false; bool isBuyAddCntChange = false; bool isItemAddCntChange = false; foreach (var item in vNetData.FBDataList) { if (!fbInfoDict.ContainsKey((int)item.MapID)) fbInfoDict[(int)item.MapID] = new FBInfo(); int mapID = (int)item.MapID; fbInfoDict[mapID].MapID = item.MapID; fbInfoDict[mapID].EnterCnt = item.EnterCnt; isADAddCntChange = fbInfoDict[mapID].ADAddCnt != item.ADAddCnt; fbInfoDict[mapID].ADAddCnt = item.ADAddCnt; isBuyAddCntChange = fbInfoDict[mapID].BuyAddCnt != item.BuyAddCnt; fbInfoDict[mapID].BuyAddCnt = item.BuyAddCnt; isItemAddCntChange = fbInfoDict[mapID].ItemAddCnt != item.ItemAddCnt; fbInfoDict[mapID].ItemAddCnt = item.ItemAddCnt; fbInfoDict[mapID].PassLineID = item.PassLineID; fbInfoDict[mapID].PassGradeCnt = item.PassGradeCnt; fbInfoDict[mapID].PassGrade = item.PassGrade; UpdateFBInfoListEvent?.Invoke(mapID); } } public void UpdateRecords(HA3BD_tagMCBuyEnterInfo.tagMCBuyInfo[] vNetDatas) { for (int i = 0; i < vNetDatas.Length; i++) { var info = vNetDatas[i]; var dungeonId = (int)info.FBID; if (dungeonRecords.ContainsKey(dungeonId)) { dungeonRecords[dungeonId].UpdateRecord(info); } else { dungeonRecords[dungeonId] = new DungeonRecord(info); } } if (updateDungeonBuyCnt != null) { updateDungeonBuyCnt(); } } } public class FBInfo { public uint MapID; public ushort EnterCnt; //今日累计进入次数 public byte ADAddCnt; //广告增加次数 public byte BuyAddCnt; //购买增加次数 public ushort ItemAddCnt; //物品增加次数 public uint PassLineID; //已过关到的lineID public byte PassGradeCnt; //星级值对应个数, 每个key存9个lineID public uint[] PassGrade; //副本线路对应星级值列表 }