From 639964c1a93b3cac19c2744c6d59e006fa14565d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A3=AE2003?= <2384017988@qq.com> Date: Sat, 1 Aug 2026 13:42:35 +0800 Subject: [PATCH] 1 --- .../AssetGroups/LoginUIRes.asset | 5 ++ .../ChineseChess/UIChineseChessCreateRoom.cs | 2 +- .../ChineseChess/UIChineseChessSetCoin.cs | 1 + .../aa/UI/Game/GameMainPanel_FishBase.cs | 62 +++++++++++++++++++ 4 files changed, 69 insertions(+), 1 deletion(-) diff --git a/Assets/AddressableAssetsData/AssetGroups/LoginUIRes.asset b/Assets/AddressableAssetsData/AssetGroups/LoginUIRes.asset index 256aaf552..0c28d5650 100644 --- a/Assets/AddressableAssetsData/AssetGroups/LoginUIRes.asset +++ b/Assets/AddressableAssetsData/AssetGroups/LoginUIRes.asset @@ -41,6 +41,11 @@ MonoBehaviour: m_SerializedLabels: - MainUI FlaggedDuringContentUpdateRestriction: 0 + - m_GUID: ee1088bf4a1dfc54b9b571bf7560e723 + m_Address: Assets/MyGame/aa/UI/Login/LoginBG.renderTexture + m_ReadOnly: 0 + m_SerializedLabels: [] + FlaggedDuringContentUpdateRestriction: 0 m_ReadOnly: 0 m_Settings: {fileID: 11400000, guid: 3d7ea06370502a34e82011fabf822b45, type: 2} m_SchemaSet: diff --git a/Assets/MyGame/aa/UI/Game/ChineseChess/UIChineseChessCreateRoom.cs b/Assets/MyGame/aa/UI/Game/ChineseChess/UIChineseChessCreateRoom.cs index e9801b6bb..234304269 100644 --- a/Assets/MyGame/aa/UI/Game/ChineseChess/UIChineseChessCreateRoom.cs +++ b/Assets/MyGame/aa/UI/Game/ChineseChess/UIChineseChessCreateRoom.cs @@ -52,7 +52,7 @@ public class UIChineseChessCreateRoom : SubUIBase protected override void OnShow(object args = null) { base.OnShow(args); - + tMPInput_Password.text=""; if (args != null) { var v = (ChineseChessGameClassList.ChessGameRoom)args; diff --git a/Assets/MyGame/aa/UI/Game/ChineseChess/UIChineseChessSetCoin.cs b/Assets/MyGame/aa/UI/Game/ChineseChess/UIChineseChessSetCoin.cs index 378f57a0f..2357a4495 100644 --- a/Assets/MyGame/aa/UI/Game/ChineseChess/UIChineseChessSetCoin.cs +++ b/Assets/MyGame/aa/UI/Game/ChineseChess/UIChineseChessSetCoin.cs @@ -29,6 +29,7 @@ public class UIChineseChessSetCoin : SubUIBase public override void Show(object args = null) { base.Show(args); + tmpInput_Coin.text= ""; if (args != null) { roomData = (ChineseChessGameClassList.ChessGameRoom)args; diff --git a/Assets/MyGame/aa/UI/Game/GameMainPanel_FishBase.cs b/Assets/MyGame/aa/UI/Game/GameMainPanel_FishBase.cs index f0df3cd2e..c80bf9629 100644 --- a/Assets/MyGame/aa/UI/Game/GameMainPanel_FishBase.cs +++ b/Assets/MyGame/aa/UI/Game/GameMainPanel_FishBase.cs @@ -983,6 +983,9 @@ public class GameMainPanel_FishBase : GameMainPanel_Base if (!isChangingTurret) { + // ⭐ 本地金币校验:没钱不切换 Attack 状态,也不广播,避免无效请求 + if (!HasEnoughGoldToFire(toggle_Three.isOn)) + return; // 按下即进入 Attack:短按→射击,长按超过阈值后切回 Idle 弹扇形 currSitData.ChangeState(TurretState.Attack); SyncTurretState(TurretState.Attack); @@ -1353,6 +1356,11 @@ public class GameMainPanel_FishBase : GameMainPanel_Base clickTime += Time.deltaTime; if (clickTime < attackTime) return; + // ⭐ 本地金币校验:没钱直接返回,不发送开炮请求 + // clickTime 保持满,金币恢复后立即开火 + if (!HasEnoughGoldToFire(toggle_Three.isOn)) + return; + // ⭐ 子弹上限校验(先于扣费和状态切换) if (IsBulletLimitReached(currSitData.user)) { @@ -1510,6 +1518,11 @@ public class GameMainPanel_FishBase : GameMainPanel_Base autoFireTimer += Time.deltaTime; if (autoFireTimer < attackTime) return; + // ⭐ 本地金币校验:没钱直接返回,不切换攻击状态、不发送开炮请求 + // autoFireTimer 保持满,金币恢复后立即开火 + if (!HasEnoughGoldToFire(toggle_Three.isOn)) + return; + // ⭐ 子弹上限校验(先于状态切换和扣费) if (IsBulletLimitReached(currSitData.user)) { @@ -2112,6 +2125,55 @@ public class GameMainPanel_FishBase : GameMainPanel_Base return false; } + /// + /// 防止金币不足退出房间弹窗重复弹出(金币恢复后自动重置) + /// + private bool _isGoldInsufficientPanelShown = false; + + /// + /// 获取当前房间最小炮倍(paoBeiList 中的最小值) + /// + private long GetMinConsumeGold() + { + if (paoBeiList == null || paoBeiList.Count == 0) return 0; + return paoBeiList.Min(); + } + + /// + /// 开炮前本地金币校验:三射按 3 发,否则按 1 发计算所需金币。 + /// 金币不足则不切换攻击状态、不发送开炮请求,避免无效请求与服务端拒绝。 + /// ⭐ 当金币不足以发射最小炮倍时,弹窗询问是否退出房间: + /// 确认 → 走退出房间逻辑;X号 → 关闭面板。本地判断,不发送开炮请求。 + /// + private bool HasEnoughGoldToFire(bool isSanShe) + { + if (currSitData == null) return false; + int count = isSanShe ? 3 : 1; + long need = currSitData.consumeGoldNum * count; + if (currSitData.goldNum >= need) + { + // 金币足够:重置弹窗标志,允许下次不足时再次弹窗 + _isGoldInsufficientPanelShown = false; + return true; + } + + // 金币不足当前炮倍:进一步判断是否连最小炮倍都发射不起 + long minConsume = GetMinConsumeGold(); + if (minConsume > 0 && currSitData.goldNum < minConsume) + { + // ⭐ 金币不足以发射最小炮倍 → 弹窗询问是否退出房间(防重复) + if (!_isGoldInsufficientPanelShown) + { + _isGoldInsufficientPanelShown = true; + UIManager.Instance.ShowTiShi( + "金币不足,是否退出房间?", + () => RequestLeaveRoom(), + true); + } + } + return false; + } + private BullitMove CreateBullet(SitPosData sit, Vector2 pos, float angle, bool isDouble, bool isLock, string id, MonsterContral lockTarget = null, Transform lockHitPos = null, long fireConsumeGold = 0) {