using System.Collections.Generic;
|
using DG.DemiEditor;
|
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.IsNullOrEmpty())
|
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);
|
}
|
}
|
}
|