| using System.Collections.Generic; | 
| using LitJson; | 
| public class BoneFieldManager : GameSystemManager<BoneFieldManager> | 
| { | 
|   | 
|     public readonly int DataMapID = 30010;  // 白骨盈野(战锤秘境) | 
|     public readonly int MinStartLineID = 1;    // funcLineID从1开始 | 
|     public readonly int funcId = 9;  //功能ID  | 
|     public Redpoint parentRedpoint = new Redpoint(MainRedDot.MainChallengeRedpoint, MainRedDot.BoneFieldRepoint); | 
|     public override void Init() | 
|     { | 
|         DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitializeEvent; | 
|         DungeonManager.Instance.UpdateFBInfoChangeEvent += OnUpdateFBInfoChangeEvent; | 
|         AdsManager.Instance.OnAdsInfoListUpdateEvent += OnAdsInfoListUpdateEvent; | 
|         FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent; | 
|         TimeMgr.Instance.OnDayEvent += OnDayEvent; | 
|     } | 
|   | 
|     public override void Release() | 
|     { | 
|         DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitializeEvent; | 
|         DungeonManager.Instance.UpdateFBInfoChangeEvent -= OnUpdateFBInfoChangeEvent; | 
|         AdsManager.Instance.OnAdsInfoListUpdateEvent -= OnAdsInfoListUpdateEvent; | 
|         FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent; | 
|         TimeMgr.Instance.OnDayEvent -= OnDayEvent; | 
|     } | 
|   | 
|     private void OnFuncStateChangeEvent(int obj) | 
|     { | 
|         if (obj != funcId) | 
|             return; | 
|         UpdateRedPoint(); | 
|     } | 
|   | 
|     private void OnDayEvent() | 
|     { | 
|         UpdateRedPoint(); | 
|     } | 
|   | 
|     private void OnUpdateFBInfoChangeEvent(int mapID, bool isADAddCntChange, bool isBuyAddCntChange, bool isItemAddCntChange) | 
|     { | 
|         int dataMapID = DataMapID; | 
|         if (mapID != dataMapID) | 
|             return; | 
|         if (isADAddCntChange) | 
|             return; | 
|         UpdateRedPoint(); | 
|     } | 
|   | 
|     private void OnAdsInfoListUpdateEvent(int id, int mapId) | 
|     { | 
|         if (mapId != DataMapID) | 
|             return; | 
|         UpdateRedPoint(); | 
|     } | 
|   | 
|     public void OnBeforePlayerDataInitializeEvent() | 
|     { | 
|         //mailDataDict.Clear(); | 
|     } | 
|   | 
|     public void UpdateRedPoint() | 
|     { | 
|         parentRedpoint.state = RedPointState.None; | 
|         if (!FuncOpen.Instance.IsFuncOpen(funcId)) | 
|             return; | 
|         if (!DungeonManager.Instance.TryGetFBInfoByMapID(DataMapID, out var fbInfo)) | 
|             return; | 
|         bool isHasNextLineID = IsHasNextLineID(fbInfo); | 
|         int nowPassLineID = GetNowPassLineID(fbInfo); | 
|         DungeonConfig.TryGetDungeonID(DataMapID, nowPassLineID, out int dungeonID); | 
|         if (!DungeonConfig.HasKey(dungeonID)) | 
|             return; | 
|         DungeonConfig dungeonConfig = DungeonConfig.Get(dungeonID); | 
|         bool isLvOk = PlayerDatas.Instance.baseData.LV >= dungeonConfig.LVLimitMin; | 
|         long myFightPower = PlayerDatas.Instance.baseData.FightPower; | 
|         if (myFightPower >= dungeonConfig.FightPower) | 
|         { | 
|             if (isLvOk && isHasNextLineID) | 
|             { | 
|                 parentRedpoint.state = RedPointState.Simple; | 
|             } | 
|         } | 
|         else | 
|         { | 
|             if (TryGetShowSweepCount(out int showSweepMaxCount, out int showrealRemainSweepCount)) | 
|             { | 
|                 bool isSweepCountOk = showrealRemainSweepCount > 0; | 
|                 if (isSweepCountOk) | 
|                 { | 
|                     parentRedpoint.state = RedPointState.Simple; | 
|                 } | 
|             } | 
|         } | 
|     } | 
|   | 
|     public bool IsHasNextLineID(FBInfo fBInfo) | 
|     { | 
|         int passLineID = (int)fBInfo.PassLineID; | 
|         int nextPassLineID = passLineID + 1; | 
|         return DungeonConfig.TryGetDungeonID(DataMapID, nextPassLineID, out int dungeonID); | 
|     } | 
|   | 
|     public int GetNowPassLineID(FBInfo fBInfo) | 
|     { | 
|         int passLineID = (int)fBInfo.PassLineID; | 
|         if (passLineID < MinStartLineID) | 
|             return MinStartLineID; | 
|         int nextPassLineID = passLineID + 1; | 
|         if (!DungeonConfig.TryGetDungeonID(DataMapID, nextPassLineID, out int nextDungeonID)) | 
|             return passLineID; | 
|         return nextPassLineID; | 
|     } | 
|   | 
|     public bool TryGetShowSweepCount(out int showSweepMaxCount, out int showrealRemainSweepCount) | 
|     { | 
|         showSweepMaxCount = 0; | 
|         showrealRemainSweepCount = 0; | 
|         int dataMapID = BoneFieldManager.Instance.DataMapID; | 
|         if (!DungeonOpenTimeConfig.HasKey(dataMapID)) | 
|             return false; | 
|         if (!DungeonManager.Instance.TryGetFBInfoByMapID(dataMapID, out FBInfo fbInfo)) | 
|             return false; | 
|         DungeonOpenTimeConfig dungeonOpenTimeConfig = DungeonOpenTimeConfig.Get(dataMapID); | 
|   | 
|         int baseCount = dungeonOpenTimeConfig.DayTimes + dungeonOpenTimeConfig.PayCntMax; | 
|         int realMaxCount = baseCount + fbInfo.ADAddCnt + fbInfo.BuyAddCnt + fbInfo.ItemAddCnt; | 
|         int realRemainSweepCount = realMaxCount - fbInfo.EnterCnt; | 
|   | 
|         showSweepMaxCount = realMaxCount - fbInfo.ADAddCnt - fbInfo.BuyAddCnt; | 
|         showrealRemainSweepCount = realRemainSweepCount - fbInfo.BuyAddCnt; | 
|         return true; | 
|     } | 
|   | 
|     public void SendTurnFight(int mapID, int funcLineID) | 
|     { | 
|         CB410_tagCMTurnFight pack = new CB410_tagCMTurnFight(); | 
|         pack.MapID = (uint)mapID; | 
|         pack.FuncLineID = (uint)funcLineID; | 
|         GameNetSystem.Instance.SendInfo(pack); | 
|     } | 
|   | 
|     public void SendBBeginFBWipeOut(int mapID, int lineID) | 
|     { | 
|         CA505_tagCMBeginFBWipeOut pack = new CA505_tagCMBeginFBWipeOut(); | 
|         pack.MapID = (uint)mapID; | 
|         pack.LineID = (ushort)lineID; | 
|         pack.Cnt = 1; | 
|         GameNetSystem.Instance.SendInfo(pack); | 
|     } | 
|   | 
|   | 
|   | 
|     public void SendBuyEnterCount(int FBID) | 
|     { | 
|         var pack = new CA575_tagCMBuyEnterCount(); | 
|         pack.FBID = (uint)FBID;       // 副本ID | 
|         GameNetSystem.Instance.SendInfo(pack); | 
|     } | 
|   | 
|     public void UpdateFBEnd(H0320_tagFBEnd vNetData) | 
|     { | 
|         if (vNetData.Msg == null) | 
|             return; | 
|         ChallengeResultData result = ChallengeResultData.FromJson(vNetData.Msg); | 
|         if (result == null || result.itemInfo.IsNullOrEmpty()) | 
|             return; | 
|         if (result.dataMapID != DataMapID) | 
|             return; | 
|         List<Item> showItems = new List<Item>(); | 
|         foreach (var item in result.itemInfo) | 
|         { | 
|             Item tempItem = new Item(item.ItemID, item.Count); | 
|             showItems.Add(tempItem); | 
|         } | 
|         ItemLogicUtility.Instance.ShowGetItem(showItems); | 
|     } | 
|   | 
|     public class ItemInfo | 
|     { | 
|         public int ItemID { get; set; } | 
|         public int Count { get; set; } | 
|     } | 
|   | 
|     public class ChallengeResultData | 
|     { | 
|         public int dataMapID { get; set; } | 
|         public List<ItemInfo> itemInfo { get; set; } | 
|         public int lineID { get; set; } | 
|         public int isPass { get; set; } | 
|         public int isSweep { get; set; } | 
|   | 
|         public static ChallengeResultData FromJson(string json) | 
|         { | 
|             return JsonMapper.ToObject<ChallengeResultData>(json); | 
|         } | 
|     } | 
| } |