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)
{