This commit is contained in:
2026-07-30 22:09:55 +08:00
parent 9ad6650b77
commit fafc5c8bb7
32 changed files with 1269 additions and 171 deletions
@@ -1563,6 +1563,28 @@ public class CreateFishManager : MonoSingleton<CreateFishManager>
// Boss 鱼:显示浮动分数文本
var bossCtrl = (MonsterControl_BossBase)monster;
// ⭐ not-self 分流:非自己击杀(含机器人)且开启新模式 → 走 not-self 流程
// 不克隆 effect_DieAward,在 killer 座位显示 img_BaoJiangZhong,
// 等待帧同步 baoJiangEnd(机器人由房主延迟 5~10 秒代发)后显示最终 BJEndUI + 加分
bool isSelfKill_Boss = sitData.user == GameManager.Instance.user.id;
if (GameManager.Instance.useNotSelfBaoJiangMode
&& !isSelfKill_Boss
&& monster.effect_DieAward != null
&& BaoJiangNotSelfHandler.ShowInProgress(
sitData,
monster.effect_DieAward,
killFish.fishId,
killFish.userId,
killFish.beishu,
gold: killFish.gold,
onScoreAdd: onScoreAdd))
{
// Boss 死亡仍走 DieFish(处理死亡音效/震屏等),但不播爆奖特效
monster.DieFish(killFish);
dieFishCalled = true;
break;
}
bossCtrl.v3 = sitData.transform.position;
bossCtrl.JiaFen = onScoreAdd; // 先设置 JiaFen,DieFish 的 lambda 才能捕获到
bossCtrl.isLocalCoin = sitData.user == GameManager.Instance.user.id; // ⭐ 金/银区分
@@ -1621,6 +1643,40 @@ public class CreateFishManager : MonoSingleton<CreateFishManager>
break;
case FishTypeEnum.特殊鱼:
{
// ⭐ not-self + Boss爆奖模式分流:不克隆 effect_DieAward,只读取预制体上的 BJEndUI
// 在 killer 座位 obj_BaoJiangZhongPanelPosition 显示 img_BaoJiangZhong(关 tMP_beishu)
// 等待帧同步 baoJiangEnd 后再走最终 BJEndUI 效果 + 加分
// 开关:GameManager.useNotSelfBaoJiangMode(false=旧模式,所有玩家走相同流程)
// ⚠️ 排除重写了 SetCoinCount 的子类(如炸弹蟹 HHWK_ZDX_DieEvent):
// 这些鱼有特殊爆炸/范围杀鱼玩法,必须走原流程,不能跳过 SetCoinCount
bool isSelfKill_TSY = sitData.user == GameManager.Instance.user.id;
if (GameManager.Instance.useNotSelfBaoJiangMode
&& !isSelfKill_TSY
&& monster.effect_DieAward != null)
{
var tsyPrefab = monster.effect_DieAward.GetComponent<DieEffect_TSY>();
if (tsyPrefab != null && tsyPrefab.baoJiangMode == TSYBaoJiangMode.Boss爆奖)
{
// 检查子类是否重写了 SetCoinCount(炸弹蟹等有特殊爆炸玩法的鱼不走 not-self 分流)
var setCoinMethod = tsyPrefab.GetType().GetMethod("SetCoinCount");
bool hasCustomSetCoinCount = setCoinMethod != null
&& setCoinMethod.DeclaringType != typeof(DieEffect_TSY);
if (!hasCustomSetCoinCount
&& BaoJiangNotSelfHandler.ShowInProgress(
sitData,
monster.effect_DieAward,
killFish.fishId,
killFish.userId,
killFish.beishu,
gold: killFish.gold,
onScoreAdd: onScoreAdd))
{
break;
}
}
}
// 普通鱼:金币飞向炮台
var award = Instantiate(
monster.effect_DieAward != null ? monster.effect_DieAward : dieFXPrefabAward);
@@ -1660,6 +1716,9 @@ public class CreateFishManager : MonoSingleton<CreateFishManager>
tsy.isLocalCoin = sitData.user == GameManager.Instance.user.id;
tsy.monster = monster;
tsy.coinCount = killFish.gold;
// 统一注入击杀者座位信息(posID/paoBei 供 GetSeatPosition/范围杀鱼金币计算使用)
tsy.posID = sitData.posID;
tsy.paoBei = (int)sitData.consumeGoldNum;
if (tsy.baoJiangMode == TSYBaoJiangMode.Boss爆奖)
{
@@ -1700,6 +1759,26 @@ public class CreateFishManager : MonoSingleton<CreateFishManager>
// Boss 鱼:显示浮动分数文本
var bossCtrl = (MonsterControl_BossBase)monster;
// ⭐ not-self 分流:非自己击杀(含机器人)且开启新模式 → 走 not-self 流程
bool isSelfKill_TBoss = sitData.user == GameManager.Instance.user.id;
if (GameManager.Instance.useNotSelfBaoJiangMode
&& !isSelfKill_TBoss
&& monster.effect_DieAward != null
&& BaoJiangNotSelfHandler.ShowInProgress(
sitData,
monster.effect_DieAward,
killFish.fishId,
killFish.userId,
killFish.beishu,
gold: killFish.gold,
onScoreAdd: onScoreAdd))
{
// Boss 死亡仍走 DieFish(处理死亡音效/震屏等),但不播爆奖特效
monster.DieFish(killFish);
dieFishCalled = true;
break;
}
bossCtrl.v3 = sitData.transform.position;
bossCtrl.JiaFen = onScoreAdd; // 先设置 JiaFen
bossCtrl.isLocalCoin = sitData.user == GameManager.Instance.user.id; // ⭐ 金/银区分
@@ -27,6 +27,10 @@ public class GameManager : MonoSingleton<GameManager>
[Tooltip("运行时开关:是否实际生成日志文件。需要同时启用 ENABLE_LOG_FILE 预编译指令才生效。\ntrue=生成日志文件;false=不生成(运行时关闭)")]
public bool enableLogFile = true;
[Header("爆奖模式")]
[Tooltip("其他玩家爆奖处理方式。\ntrue=新模式(not-self 分流:座位显示 img_BaoJiangZhong,等待帧同步 baoJiangEnd 后再显示最终 BJEndUI 加分);\nfalse=旧模式(所有玩家走相同流程,直接克隆 effect_DieAward 播完整特效)")]
public bool useNotSelfBaoJiangMode = false;
public GameConfig gameConfig;
public ActivityConfig activityConfig;
public Dictionary<string, FishTypeConfig> dic_fishTypeConfigs = new Dictionary<string, FishTypeConfig>();