PEAK
This package has been deprecated and may no longer be maintained. We recommend looking for an alternative.
Install with App

Details

Latest version
0.3.5
Last Updated
First Uploaded
Downloads
392
Likes
3
Size
202KB
Dependants

版本:v0.3.5 | 适用游戏: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,转为“盲连模式”尝试破局。
  • 已知问题:手动切换时本机UI会卡住,且可能会导致ID错位(不影响语音)。


4. 配置选项与快捷键

⌨️ 快捷键

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

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

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

⚙️ 配置文件

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

  • UI设置

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

    • ​重连超时时间​:默认 25秒。即进房后黄色的 [连接中] 状态维持的最长时间,超时变红。
    • ​启用ID漂移修复​:默认 True。建议保持开启,否则可能看到 Unknown。
    • 启用手动重置 (Alt+K)":默认 true, 允许按 Alt+K 强制断开或重连语音。
    • 重试间隔 (s):每次自动重连之间的冷却时间
  • 高级与调试

    • ​启用虚拟玩家​:在 UI 上生成一个假人,用于测试排版。
    • 延迟对齐偏移量:Ping值显示的水平像素偏移,单独靠右对齐。
    • 自动隐藏简易UI:当所有人连接正常时,自动隐藏简易模式的UI。
    • 启用调试日志:在BenInex控制台输出详细的网络日志,默认只显示在alt+J界面中。
    • 简易模式显示Ping:在简易模式下方显示本机延迟
    • 启用虚拟玩家:添加一个假玩家用于测试UI布局。
    • 虚拟玩家名**:用于调整字体大小和ping值偏移量。

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

Thunderstore development is made possible with ads. Please consider making an exception to your adblock.