欧卡2对于模组匹配的一些记录
架设了欧卡的steam联机服务器之后,其实可以发现他的逻辑和平时开房联运基本一样。依据是在架设服务器的时候,需要玩家开欧卡控制台导出三个文件。
这三个文件分别是server_config.sli,server_package.dat和.sli。其实就是把自己在欧卡游戏里面,原有的三个文件复制了一份另存为出来。
server_config其实就是对联运的一些设置,比如名字,最大房间人数上限,是否开启碰撞等。
这里要特地讲一下server_package.sli的内容,这里面的内容是自己在欧卡里启用的mod的信息。
平时由个人主持联运时,如果他自己需要打开一些mod,那么server_package_sli里就会有这些mod的信息。
在server_package文件内,每个启用的mod都有一个checksum以及workshop_mod的参数。
checksum就是校验码,原理类似于sha256等,更改了文件,值就会变。
这就可以解释为什么个人主持联运开了可选模组,两个人都在自己的mod文件里添加了mp_mod_optional:true的可选模组参数,依旧会显示版本错误。虽然修改的内容相同,但是checksum的值每个人都会变化得不同,都无法相互兼容。
把服务器里面server_package所有mod的checksum行删除后,加入联运会发现还是显示版本错误。
再把文件里面workshop_mod一行也同样删掉,就正常了,可能是不止checksum,和steam创意工坊可能也有验证环节。
那么最后回过头来可以重新发现
个人开联运的时候,如果自己需要开启一些mod,server_package文件是必定有这些mod信息的,无法修改和删除文件内的信息。
要加入这个联运的成员们的对应mod文件,如果有修改过,(比如把原来不是可选模组的mod改为可选模组)那么checksum值就有变化,将无法和别人相互兼容。
那么这样的鲁棒性就太差了。
但服务器可以删除和修改server_package文件,更改mod信息的情况下,同时开服。不会有个人组织联运的那些限制。
在服务器启用了可选模组的前提下,可以把server_package文件清空。
这样每个人进来都不需要经过mod的验证,哪怕自己把mod改成什么样,checksum如何不同都可以,因为服务器上压根就没有mod的白名单。想自己加什么想玩的mod都行,前提是要把自己所有mod开启可选模组。
加入联运的判断(服务器和个人开联运都是相同的)
主持联运方 未开启可选模组
加入方的server_package文件必须和主持方的server_package内容信息一模一样。
主持联运方 开启可选模组
需要对比。
首先将主持联运方的server_package内的mod分为两部分:没有开启可选模组的mod,和开启可选模组的mod.
没有开启可选模组的mod部分,要求加入方的server_package内也必须有这些mod,且信息必须完全相同。
开启了可选模组的mod部分,如果加入方的server_package内没有这部分mod则忽略不管,但如果加入方的server_package内有这部分对应的mod,则需要信息相同。
主持方内server_package没有的mod,而加入方有的,需要加入方全设置为可选模组才可进入。除此之外无其他限制。