using System.Collections.Generic; using LitJson; public class BoneFieldManager : GameSystemManager { 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 showItems = new List(); 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 { 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(json); } } }