From ceabc7dde8514ed6bcfadfb5fe9fb37c45cc370e Mon Sep 17 00:00:00 2001
From: lcy <1459594991@qq.com>
Date: 星期四, 22 一月 2026 20:43:06 +0800
Subject: [PATCH] 136 白骨盈野-客户端 重构红点逻辑
---
Main/System/Settlement/BoneBattleVictoryWin.cs | 2
Main/System/BoneField/BoneFieldManager.cs | 75 ++++++++++++++++++------
Main/Utility/EnumHelper.cs | 1
Main/System/BoneField/AdsManager.cs | 52 ++++++++++++++++
Main/System/BoneField/BoneFieldWin.cs | 16 +++--
Main/System/Settlement/BoneBattleFailWin.cs | 2
Main/System/ChallengeTab/BoneFieldTabHandler.cs | 2
Main/System/BoneField/BoneFieldChallengeButton.cs | 4
8 files changed, 121 insertions(+), 33 deletions(-)
diff --git a/Main/System/BoneField/AdsManager.cs b/Main/System/BoneField/AdsManager.cs
index 262527e..cdeecb9 100644
--- a/Main/System/BoneField/AdsManager.cs
+++ b/Main/System/BoneField/AdsManager.cs
@@ -10,6 +10,8 @@
{
DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin += OnBeforePlayerDataInitializeEvent;
DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent += UpdateRedpoint;
+ DungeonManager.Instance.UpdateFBInfoListEvent += OnUpdateFBInfoChangeEvent;
+ FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
var keys = ADAwardConfig.GetKeys();
for (int i = 0; i < keys.Count; i++)
@@ -27,11 +29,33 @@
{
DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin -= OnBeforePlayerDataInitializeEvent;
DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent -= UpdateRedpoint;
+ DungeonManager.Instance.UpdateFBInfoListEvent += OnUpdateFBInfoChangeEvent;
+ FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent;
+ }
+
+ private void OnFuncStateChangeEvent(int funcId)
+ {
+ switch (funcId)
+ {
+ case (int)FuncOpenEnum.BoneBattle:
+ UpdateBoneAdRedPoint();
+ break;
+ }
}
public void OnBeforePlayerDataInitializeEvent()
{
adsInfoDict.Clear();
+ }
+
+ private void OnUpdateFBInfoChangeEvent(int mapID)
+ {
+ switch (mapID)
+ {
+ case 30010:
+ UpdateBoneAdRedPoint();
+ break;
+ }
}
void SendGetReward(int ADID)
@@ -114,7 +138,7 @@
foreach (var key in redPointDict.Keys)
{
redPointDict[key].state = RedPointState.None;
-
+
var config = ADAwardConfig.Get(key);
if (!FuncOpen.Instance.IsFuncOpen(config.FuncID))
{
@@ -122,9 +146,33 @@
}
if (GetADCntByADID(key) < config.ADCntMax)
{
- redPointDict[key].state = RedPointState.Simple;
+ switch (key)
+ {
+ //鐧介
+ case 1:
+ UpdateBoneAdRedPoint();
+ break;
+ default:
+ redPointDict[key].state = RedPointState.Simple;
+ break;
+ }
}
}
}
+
+
+ private void UpdateBoneAdRedPoint()
+ {
+ int key = 1;
+ if (!ADAwardConfig.HasKey(key))
+ return;
+ var config = ADAwardConfig.Get(key);
+ if (!FuncOpen.Instance.IsFuncOpen(config.FuncID))
+ return;
+ if (redPointDict.IsNullOrEmpty() || !redPointDict.ContainsKey(key))
+ return;
+ bool isNoChallenge = BoneFieldManager.Instance.IsNoChallenge();
+ redPointDict[key].state = isNoChallenge ? RedPointState.None : RedPointState.Simple;
+ }
}
diff --git a/Main/System/BoneField/BoneFieldChallengeButton.cs b/Main/System/BoneField/BoneFieldChallengeButton.cs
index e3d552d..e7cb0dc 100644
--- a/Main/System/BoneField/BoneFieldChallengeButton.cs
+++ b/Main/System/BoneField/BoneFieldChallengeButton.cs
@@ -21,8 +21,8 @@
this.isHasNextLineID = isHasNextLineID;
this.lvLimitMin = lvLimitMin;
isLvOk = PlayerDatas.Instance.baseData.LV >= lvLimitMin;
- long myFightPower = PlayerDatas.Instance.baseData.FightPower;
- imgChallengeRed.SetActive(isLvOk && isHasNextLineID && myFightPower >= bossFightPower);
+ bool isShowRed = BoneFieldManager.Instance.IsShowChallengeRed();
+ imgChallengeRed.SetActive(isShowRed);
txtChallengeLv.SetActive(!isLvOk);
txtChallengeLv.text = Language.Get("BoneField07", lvLimitMin);
txtChallengeYes.SetActive(isLvOk && isHasNextLineID);
diff --git a/Main/System/BoneField/BoneFieldManager.cs b/Main/System/BoneField/BoneFieldManager.cs
index e915b7b..bfc1f3a 100644
--- a/Main/System/BoneField/BoneFieldManager.cs
+++ b/Main/System/BoneField/BoneFieldManager.cs
@@ -5,13 +5,13 @@
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()
{
DungeonManager.Instance.UpdateFBInfoListEvent += OnUpdateFBInfoChangeEvent;
AdsManager.Instance.OnAdsInfoListUpdateEvent += OnAdsInfoListUpdateEvent;
FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
+ PlayerDatas.Instance.playerDataRefreshEvent += OnPlayerDataRefresh;
TimeMgr.Instance.OnDayEvent += OnDayEvent;
}
@@ -20,12 +20,13 @@
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 != funcId)
+ if (obj != (int)FuncOpenEnum.BoneBattle)
return;
UpdateRedPoint();
}
@@ -51,39 +52,75 @@
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(funcId))
+ 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;
+ return false;
bool isHasNextLineID = IsHasNextLineID(fbInfo);
int nowPassLineID = GetNowPassLineID(fbInfo);
DungeonConfig.TryGetDungeonID(DataMapID, nowPassLineID, out int dungeonID);
if (!DungeonConfig.HasKey(dungeonID))
- return;
+ return false;
DungeonConfig dungeonConfig = DungeonConfig.Get(dungeonID);
bool isLvOk = PlayerDatas.Instance.baseData.LV >= dungeonConfig.LVLimitMin;
long myFightPower = PlayerDatas.Instance.baseData.FightPower;
- if (myFightPower >= dungeonConfig.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))
{
- if (isLvOk && isHasNextLineID)
+ bool isSweepCountOk = showrealRemainSweepCount > 0;
+ if (isSweepCountOk)
{
- parentRedpoint.state = RedPointState.Simple;
+ return true;
}
}
- else
- {
- if (TryGetShowSweepCount(out int showSweepMaxCount, out int showrealRemainSweepCount))
- {
- bool isSweepCountOk = showrealRemainSweepCount > 0;
- if (isSweepCountOk)
- {
- parentRedpoint.state = RedPointState.Simple;
- }
- }
- }
+ return false;
+ }
+
+ public bool IsNoChallenge()
+ {
+ if (!DungeonManager.Instance.TryGetFBInfoByMapID(DataMapID, out var fbInfo))
+ return true;
+ return fbInfo.PassLineID <= 0;
}
public bool IsHasNextLineID(FBInfo fBInfo)
diff --git a/Main/System/BoneField/BoneFieldWin.cs b/Main/System/BoneField/BoneFieldWin.cs
index c84dbc9..3c01fc2 100644
--- a/Main/System/BoneField/BoneFieldWin.cs
+++ b/Main/System/BoneField/BoneFieldWin.cs
@@ -165,8 +165,8 @@
DisplaySkillWordsList(lineupConfig);
DisplayItemCellList(challengeItemCells1, dungeonConfig.PassAwardList);
DisplayItemCellList(challengeItemCells2, dungeonConfig.PassAwardList);
-
- if (fbInfo.PassLineID > 0)
+ bool isNoChallenge = BoneFieldManager.Instance.IsNoChallenge();
+ if (!isNoChallenge)
{
DungeonConfig.TryGetDungeonID(dataMapID, (int)fbInfo.PassLineID, out int sweepDungeonID);
if (!DungeonConfig.HasKey(dungeonID))
@@ -189,8 +189,9 @@
public void DisplayChallengeButton(DungeonConfig dungeonConfig, FBInfo fBInfo)
{
- transNoChallenge.SetActive(fBInfo.PassLineID <= 0);
- transHasChallenge.SetActive(fBInfo.PassLineID > 0);
+ bool isNoChallenge = BoneFieldManager.Instance.IsNoChallenge();
+ transNoChallenge.SetActive(isNoChallenge);
+ transHasChallenge.SetActive(!isNoChallenge);
btnChallenge1.Display(dungeonConfig.LVLimitMin, isHasNextLineID, dungeonConfig.FightPower);
btnChallenge2.Display(dungeonConfig.LVLimitMin, isHasNextLineID, dungeonConfig.FightPower);
}
@@ -204,8 +205,9 @@
bool isSweepCountOk = showrealRemainSweepCount > 0;
btnSweep.interactable = isSweepCountOk;
imgSweep.gray = !isSweepCountOk;
- long myFightPower = PlayerDatas.Instance.baseData.FightPower;
- imgSweepRed.SetActive(isSweepCountOk && myFightPower < dungeonConfig.FightPower);
+ bool isShowChallengeRed = BoneFieldManager.Instance.IsShowChallengeRed();
+ bool isShowSweepRed = BoneFieldManager.Instance.IsShowSweepRed();
+ imgSweepRed.SetActive(!isShowChallengeRed && isShowSweepRed);
txtTodaySweepCount.SetActive(showSweepMaxCount > showrealRemainSweepCount);
txtTodaySweepCount.text = UIHelper.AppendColor(isSweepCountOk ? TextColType.LightGreen : TextColType.Red, Language.Get("BoneField08", showrealRemainSweepCount, showSweepMaxCount));
@@ -231,7 +233,7 @@
txtNeedMoneyCount.text = payMoneyValue.ToString();
}
}
- }
+ }
public void DisplayAdsButton(ADAwardConfig aDAwardConfig)
{
diff --git a/Main/System/ChallengeTab/BoneFieldTabHandler.cs b/Main/System/ChallengeTab/BoneFieldTabHandler.cs
index bb0c18c..d3f48a6 100644
--- a/Main/System/ChallengeTab/BoneFieldTabHandler.cs
+++ b/Main/System/ChallengeTab/BoneFieldTabHandler.cs
@@ -5,7 +5,7 @@
{
protected override int GetIndex() => 2;
protected override int GetOpenState() => 0; // 0=FuncID
- protected override int GetFuncId() => BoneFieldManager.Instance.funcId;
+ protected override int GetFuncId() => (int)FuncOpenEnum.BoneBattle;
protected override int GetRedpointId() => MainRedDot.BoneFieldRepoint;
protected override string GetCountInfo()
diff --git a/Main/System/Settlement/BoneBattleFailWin.cs b/Main/System/Settlement/BoneBattleFailWin.cs
index 6d410d6..9dabd6f 100644
--- a/Main/System/Settlement/BoneBattleFailWin.cs
+++ b/Main/System/Settlement/BoneBattleFailWin.cs
@@ -36,7 +36,7 @@
protected override void OnPreOpen()
{
- int funcId = BoneFieldManager.Instance.funcId;
+ int funcId = (int)FuncOpenEnum.BoneBattle;
txtFuncName.text = FuncOpenLVConfig.HasKey(funcId) ? FuncOpenLVConfig.Get(funcId).Name : string.Empty;
if (!FirstChargeManager.Instance.GetLocalFail())
{
diff --git a/Main/System/Settlement/BoneBattleVictoryWin.cs b/Main/System/Settlement/BoneBattleVictoryWin.cs
index 765321f..2cfb115 100644
--- a/Main/System/Settlement/BoneBattleVictoryWin.cs
+++ b/Main/System/Settlement/BoneBattleVictoryWin.cs
@@ -22,7 +22,7 @@
{
scroller.OnRefreshCell += OnRefreshCell;
CreateScroller();
- int funcId = BoneFieldManager.Instance.funcId;
+ int funcId = (int)FuncOpenEnum.BoneBattle;
txtFuncName.text = FuncOpenLVConfig.HasKey(funcId) ? FuncOpenLVConfig.Get(funcId).Name : string.Empty;
}
diff --git a/Main/Utility/EnumHelper.cs b/Main/Utility/EnumHelper.cs
index 22d3d9f..19a0e83 100644
--- a/Main/Utility/EnumHelper.cs
+++ b/Main/Utility/EnumHelper.cs
@@ -817,6 +817,7 @@
Official = 3,//鍐呮斂
BeautyMM = 7,//绾㈤
GoldRush = 8, //娣橀噾
+ BoneBattle = 9, //鐧介鐩堥噹
Realm = 10, //澧冪晫 瀹樿亴
Guild = 11,// 鍏細
BlessLV = 12, //绁濈绛夌骇
--
Gitblit v1.8.0