AiAeT-BetterPeakVoiceFixCn icon

BetterPeakVoiceFixCn

基于PEAK VOICE FIX的改进版,优化了重连逻辑和加入更多的监控功能,连接日志可视化,支持ALT+K手动断开重连。

By AiAeT
Last updated 2 days ago
Total downloads 110
Total rating 1 
Categories Quality Of Life Client Side All Clients
Dependency string AiAeT-BetterPeakVoiceFixCn-0.3.4
Dependants 0 other packages depend on this package

This mod requires the following mods to function

BepInEx-BepInExPack-5.4.2100 icon
BepInEx-BepInExPack

BepInEx pack for Mono Unity games. Preconfigured and ready to use.

Preferred version: 5.4.2100

README

版本:v0.3.4 | 适用游戏:PEAK 1.53a

1. 模组概述

基于PEAK VOICE FIX的改进版,优化了重连逻辑和加入更多的监控功能,连接日志可视化,支持ALT+K手动断开重连。

2. UI

A. 常驻简易 UI (默认开启)

在屏幕(默认右侧)显示的小型状态栏。

  • 本机语音​:显示当前连接状态(如 已连接 🟢)。

  • 语音连接人数​:格式为 n/N

    • 仅当所有人完美连接且无错位时,会自动隐藏(可配置)。
  • 当有玩家状态变化时会将其显示出来。

B. 详细信息面板 ( J 键切换)

这是模组的核心视窗,包含三部分信息。

① 顶部:连接状态与 IP

  • 本机IP​:你当前连接的语音服务器地址。
  • 房主IP​:房主所在的语音服务器地址。
    • [同步] 🟢:你与房主在同一频道,能互相听到。
    • [异常] 🔴:你与房主不在同一频道(即“孤立”状态),需重连。

② 中部:玩家列表状态 (关键)

每一行代表一个游戏内的玩家。模组通过智能算法赋予他们不同的状态标签:

状态标签 颜色 触发条件与含义
[已连接] 绿色 🟢 完美状态​。ID 匹配,语音在房间内。
[错位] 淡绿 🟢 v0.3.4 核心功能​。玩家显示已断开,但语音房间里有“无名幽灵”占位。含义​:他的语音大概率是通畅的,只是 ID 卡住了。​无需让他重连​。
[连接中] 黄色 🟡 玩家刚进房(前 25秒)或正在验证。请耐心等待变绿。
[断开] 红色 🔴 进房超过 25秒,且语音房间里没有对应的幽灵。含义​:彻底没连上,听不到也说不出。需按 Alt+K。
[孤立] 黄色 🟡 本机连错了语音服务器,不同服务器是无法互相通信的。

③ 顶部/底部:智能统计栏

显示格式:n / N(m 人ID错位)

  • ​**n (当前语音人数)**​:包含 正常连接 + 错位(幽灵)连接 的总和。

    • n = N (满员):显示为 绿色 🟢。
    • 若 ​存在错位​:显示为 淡绿色 🟢。
    • n < N (未满):显示为 黄色 🟡。
    • n = 1 (孤立):显示为 红色 🔴。
  • ​**N (游戏总人数)**​:当前房间内的玩家总数。

  • ​**(m 人ID错位)**​:仅当检测到幽灵连接时显示,提示你有多少人处于“错位”状态。


C. 调试控制台 (按 Alt + J)

面向高级用户,显示底层数据流。

  • 数据列​:ID | Name | IP | Ver | [状态]
  • ​**[幽灵] 标记**​:明确指出哪些 ID 是残留的“尸体”。
  • Ver​:显示对方安装的模组版本(如 v0.3.4,需对方也安装此版本)。
  • 功能按钮​:支持一键导出日志到文件,方便反馈 BUG。

2. 核心功能

连接与同步逻辑

本模组并非简单的“断线重连器”,而是一个基于 PUN (Photon Unity Networking) 的分布式语音协调系统。它通过一套严密的决策树来确保所有玩家“殊途同归”。

A. 房主:灯塔广播机制

房主是语音网络的基准点。

  • 机制​:房主的客户端会以高频率(每秒检查)扫描自身的语音连接状态。一旦连接成功,模组会将当前的 语音服务器 IP 写入到房主的 ​PUN 玩家自定义属性 (​PVF_IP) 中。
  • 同步​:这个属性是全网同步的。这意味着房间内任何一个安装了模组的客机,都能实时读取到房主当前连接的语音 IP。
  • 变动广播​:如果房主因网络波动切换了语音服务器,模组会立即更新属性,并广播一条日志:“房主IP变动: Old -> New”,指引所有客机跟随。

B. 客机:智能决策树

客机并不是无脑连房主,而是拥有一套​“多数派优先”​的智能决策逻辑,以防止房主单人掉线导致全员陪葬。

当客机需要重连时,执行以下逻辑判断:

[开始重连决策]
      │
      ▼
1. 【寻找多数派 (Majority Rule)】
   统计缓存中所有玩家所在的语音 IP。
   IF (某个 IP 的人数 ≥ 2 且是全场最多)
      └─ 决定:连接到这个“多数派 IP” (跟随大部队)
      
      ▼ (如果大家都很分散)
      
2. 【跟随房主 (Follow Host)】
   读取房主的 PVF_IP 属性。
   IF (房主有有效 IP)
      └─ 决定:连接到房主的 IP
      
      ▼ (如果房主也没连上)
      
3. 【盲连/自动 (Blind Connect)】
   不指定 IP,让 Photon 自动分配。
   └─ 决定:听天由命 (Auto)

意义​:这套逻辑确保了即使房主掉线,剩下的人也能为后面中途加入的人提供广播功能。(前提是房间内至少两人安装模组且新加入的玩家也安装了模组)

SOS 与 快照缓存

A. 缓存快照

模组会在本地维护一份 PlayerCache(花名册)。

  • 作用​:PUN 的玩家列表有时会因为网络波动瞬间消失(导致数据丢失)。本地缓存会“记住”每个玩家最后一次出现的 ​名字​、​IP​、版本号 和 ​状态​。
  • 价值​:这就是为什么即使玩家掉线了,Alt+J 面板依然能显示他“上次所在的 IP”和“是否为幽灵”,而不是直接消失。

B. SOS 求救信号

当模组执行自动重连,或玩家按下 Alt+K 时,会向全房间广播一个 Event Code 186 的数据包。

  • 发送内容​:[类型:SOS, 目标IP, 来源IP]
  • 接收方反应​:
  1. UI 底部弹出警告。
  2. 记录该玩家的“事故现场”(他从哪里掉的,想去哪里)。
  • 实战用途​:当你看到某人一直连不上,查看 SOS 日志发现他的“目标 IP”和大家的“多数派 IP”不一致,就能立即判断是他连错服务器了,而不是麦克风坏了。

手动干预(Alt + K)使用场景

  • 场景一:当前是 [孤立] 状态

    • 动作​:​**主动断开 (Disconnect)**​。
    • 逻辑​:调用 punVoice.Client.Disconnect() -> 发送 SOS 信号“手动断开”。
    • 目的​:软重启,当你发现自己串台了,可以尝试主动断开重进。
  • 场景二:当前是 [断开] / [连接中] 状态

    • 动作​:​**强制重连 (Force Reconnect)**​。
    • 逻辑​:立即触发 HandleClientLogic -> 走一遍上面的“智能决策树” -> 强制指定 IP -> 发起连接。
    • 循环策略​:如果连续失败 3 次,模组会自动放弃指定 IP,转为“盲连模式”尝试破局。

4. 配置选项与快捷键

⌨️ 快捷键

  • J​:切换 UI 显示模式(隐藏 -> 简易 -> 详细)。

  • Alt + K​:​**手动重置 (SOS)**​。

    • 防误触机制​:如果当前是 [已连接] / [错位] 状态,按第一次会​主动断开​。再按一次才会执行强制重连。
    • 如果当前是 [断开] 状态,按一次即可直接重连。
  • Alt + J​:打开/关闭调试控制台。

⚙️ 配置文件

(路径: BepInEx/config/chuxiaaaa.Aiae.BetterVoiceFix.cfg)

  • UI设置

    • UI位置​:下拉选择 左侧右侧
  • 网络设置

    • 重连超时时间​:默认 25秒。即进房后黄色的 [连接中] 状态维持的最长时间,超时变红。
    • 启用ID漂移修复​:默认 True。建议保持开启,否则可能看到 Unknown。
  • 高级与调试

    • 启用虚拟玩家​:在 UI 上生成一个假人,用于测试排版。

5. 兼容性

对方状态
未安装模组 同步和重连机制无效,但你能单向看到他的真实状态(断开/连接)
兼容PeakVoiceFix 理论上同步(广播和接受房主服务器IP)机制是兼容的,但UI跟未安装模组一样。
旧版模组 (<v0.3.0) 功能正常,能看到IP和连接情况,但看不到你的详细连接步骤(如“验证中...”),也看不到你的版本号。
>v0.3.4 功能正常,能看到详细连接步骤、版本号、IP。

6. 常见问题 (FAQ)

Q: 为什么人数显示 ​ 10/10​**,但后面跟着 ​(2 人ID错位)?**

A: 这说明语音房间里确实有 10 个连接(满员)。其中 8 个是正常的,2 个是 ID 错位的。

因为 ​错位 = 能说话​,所以总数算作满员(绿色/淡绿)。这是一个​好消息​,说明全员语音通畅。

Q: 我是 [错位] 状态,需要按 Alt+K 修复吗?

A: ​不需要​。只要你能说话,能听到别人,就不要乱动。[错位] 只是 ID 对不上,不影响语音功能。强行重连反而可能导致你彻底卡死。

Q: 为什么我自己进了游戏,但在 Alt+J 的列表里看不到自己?

A: 这说明​你自己就是那个错位的人​。

Dump 列表打印的是“语音服务器里的 ID”。你的游戏 ID 是新的,但你的语音客户端还在用旧 ID(幽灵)。因为旧 ID 找不到对应的玩家名字,所以可能显示为 [幽灵] 或者被归类到错位统计中。

Q: 刚进房间为什么所有人都是黄色的?

A: 这是 ​25秒宽限期​。游戏连接语音需要时间,模组不会一上来就报错,而是先显示黄色 [连接中] 等待数据同步。

Q:什么时候应该使用alt+K?

A:当你显示为[孤立]/[断开]的时候,可尝试手动断开重连,如果依然不奏效,请重启游戏和steam/检查网络/检查模组(尤其是LocalMultiplayer)。