AllowHostReceiveHint 是一个用于 SCP: Secret Laboratory 服务器的微型修复插件,使用LabAPI,修复了Host收到 Hint时因无法处理而导致的服务器功能异常。
SCP:SL 的部分源代码使用宏定义区分客户端与服务端,让两者在不同场景下处理各自的任务,避免无效代码运行。
不同于使用Rpc的Broadcast,Hint使用网络包进行信息传递,但Host处理HintMessage的代码可能因为宏定义而消失。
当服务器自身(Host)作为客户端接收该消息时,因为无法处理,会被踢出。尽管NetworkServer.active仍为true,但Host被踢出会导致其他网络包无法处理,严重破坏服务器功能。
[STDOUT] 日志如下:
NetworkClient: failed to unpack and invoke message. Disconnecting.
本插件利用 Mirror 的 NetworkClient.ReplaceHandler<T> 方法,将 HintMessage 的处理器替换为空委托,使 Host 忽略该消息,从而避免上述问题。
NetworkClient.ReplaceHandler<HintMessage>(msg => { }, true); // 原理很简单其实可以直接使用 Harmony 补丁修改
NetworkClient.UnpackAndInvoke,后续会单独开一个新的插件专门修复常见的漏洞。