using System.Collections.Generic; using LitJson; public class BoneFieldManager : GameSystemManager { public readonly int DataMapID = 30010; // 白骨盈野(战锤秘境) public readonly int MinStartLineID = 1; // funcLineID从1开始 public Redpoint parentRedpoint = new Redpoint(MainRedDot.MainChallengeRedpoint, MainRedDot.BoneFieldRepoint); public override void Init() { DungeonManager.Instance.UpdateFBInfoListEvent += OnUpdateFBInfoChangeEvent; AdsManager.Instance.OnAdsInfoListUpdateEvent += OnAdsInfoListUpdateEvent; FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent; PlayerDatas.Instance.playerDataRefreshEvent += OnPlayerDataRefresh; TimeMgr.Instance.OnDayEvent += OnDayEvent; } public override void Release() { DungeonManager.Instance.UpdateFBInfoListEvent -= OnUpdateFBInfoChangeEvent; AdsManager.Instance.OnAdsInfoListUpdateEvent -= OnAdsInfoListUpdateEvent; FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent; PlayerDatas.Instance.playerDataRefreshEvent -= OnPlayerDataRefresh; TimeMgr.Instance.OnDayEvent -= OnDayEvent; } private void OnFuncStateChangeEvent(int obj) { if (obj != (int)FuncOpenEnum.BoneBattle) return; UpdateRedPoint(); } private void OnDayEvent() { UpdateRedPoint(); } private void OnUpdateFBInfoChangeEvent(int mapID) { int dataMapID = DataMapID; if (mapID != dataMapID) return; UpdateRedPoint(); } private void OnAdsInfoListUpdateEvent(int id, int type, int mapId) { if (mapId != DataMapID) return; UpdateRedPoint(); } private void OnPlayerDataRefresh(PlayerDataType type) { if (type == PlayerDataType.FightPower) { UpdateRedPoint(); } else if (type == PlayerDataType.LV) { UpdateRedPoint(); } } public void UpdateRedPoint() { parentRedpoint.state = RedPointState.None; if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.BoneBattle)) return; bool isShowChallengeRed = IsShowChallengeRed(); if (isShowChallengeRed) { parentRedpoint.state = RedPointState.Simple; return; } bool isShowSweepRed = IsShowSweepRed(); if (isShowSweepRed) { parentRedpoint.state = RedPointState.Simple; return; } } public bool IsShowChallengeRed() { if (!DungeonManager.Instance.TryGetFBInfoByMapID(DataMapID, out var fbInfo)) return false; bool isHasNextLineID = IsHasNextLineID(fbInfo); int nowPassLineID = GetNowPassLineID(fbInfo); DungeonConfig.TryGetDungeonID(DataMapID, nowPassLineID, out int dungeonID); if (!DungeonConfig.HasKey(dungeonID)) return false; DungeonConfig dungeonConfig = DungeonConfig.Get(dungeonID); bool isLvOk = PlayerDatas.Instance.baseData.LV >= dungeonConfig.LVLimitMin; long myFightPower = PlayerDatas.Instance.baseData.FightPower; return isLvOk && isHasNextLineID && myFightPower >= dungeonConfig.FightPower; } public bool IsShowSweepRed() { bool isNoChallenge = IsNoChallenge(); if (isNoChallenge) return false; if (TryGetShowSweepCount(out int showSweepMaxCount, out int showrealRemainSweepCount)) { bool isSweepCountOk = showrealRemainSweepCount > 0; if (isSweepCountOk) { return true; } } return false; } public bool IsNoChallenge() { if (!DungeonManager.Instance.TryGetFBInfoByMapID(DataMapID, out var fbInfo)) return true; return fbInfo.PassLineID <= 0; } 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) { if (!DungeonManager.Instance.TryGetDungeonCount(DataMapID, out showSweepMaxCount, out showrealRemainSweepCount)) return false; return true; } 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, _useType: item.BeautyEx != 0 ? 2 : 0); showItems.Add(tempItem); } ItemLogicUtility.Instance.ShowGetItem(showItems, isMergeItem: false); } public class ItemInfo { public int ItemID { get; set; } public int Count { get; set; } public int BeautyEx { 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); } } }