折腾hk4e服务器的记录
前言
本文是我折腾某个动漫(XX)游戏服务端时的记录,内容杂乱、无固定格式,甚至还包含许多centos的使用内容(因为我不会Linux),仅用作备忘录;不过如果你刚好也在折腾这个,那或许其中某些信息会对你有所帮助。
关于服务端
我获取到的hk4e server是从同学手里拿到的3.4dev版本,在启动脚本打印信息中提到服务端由XX研究社提供,具体内容不在此处透露,有兴趣可自行了解。
注意别被骗了,要你花钱的都是倒卖 (除了某些国产网盘下载也许需要充会员才给你开放完整下载权限,或者需花钱魔法上网等)
启动流程备忘:
开机,打开终端;
反向代理无法在本地使用,详见下文
第一步:启动反向代理(不使用frp则无需此步骤)
su root(输入密码,进入超级用户)
ifconfig (检查IP地址是否正确)
cd frpc[TAB] (进入frp客户端文件夹)
./frpc -c ./frpc.toml (启动frp客户端,提前验证服务端是否启动)
第二步:启动服务端
34s start
34s status (检查各服务启动情况)
关于客户端
3.x客户端可使用补丁方式连接,无需代理。
需要注意的是,由于3.4服务端分发问题严重,官方已删除3.4客户端的分发链接,互联网上几乎所有二次上传的文件也都被DMCA或已失效。
关于虚拟机性能
我的电脑是一台华硕笔记本电脑,搭载i7-11800H和自己升级的32G内存,实际来说16G内存+Win10即可运行基本完整的服务端,24G内存即可同时启动服务端和客户端游玩。
要开带联机的服务器,虚拟机至少需分配13G内存,因此16G内存将无法同时启动客户端,必须在单独的电脑上启动。
对于CPU而言,需要注意不要开太多核心,至少在我电脑上开4核就是最快的(太少了也慢,建议不低于3核),而多于6核的时候宿主机和虚拟机一起卡。
关于公网连接的端口和协议
这一点是我折腾时间最长、难度最高的部分,因为没有任何文档和指引,全靠自己摸索。
通过调查配置文件、自己抓包分析、试错等多种方式,确定公网连接所需端口及协议列表如下:
端口 | 服务 | 传输层协议 | 说明 | 开放? |
---|---|---|---|---|
23401 | maingame | UDP | 主游戏服务 | 必须 |
23405 | dispatch | TCP | 签派(即区服下发) | 必须 |
23406 | muipserver | TCP | 游戏进程/多IP通信服务 | 使用GM时 |
23410 | sdkserver | TCP | SDK服务 | 必须 |
问题排查
卡下载更新:检查TCP 23405(使用本地的反代会导致变成内部IP进而无法连接)
开门白屏:检查UDP 23401,检查gateserver配置中的outer_ip(注意该字段不允许使用域名!)
开门黑屏闪加载圈:检查TCP 23410,及sdkserver配置中对应区服IP(使用本地的反代会导致变成内部IP进而无法连接)
GM工具无法连接:检查TCP 23406
使用反向代理的问题
由于我的服务器是对公网开放的,但我电脑是在NAT内网之下,所以我是利用了一个带公网IP的商用宽带环境做内网穿透使用;之前的做法是通过L2TP VPN连接到商宽环境,然后将其外网端口转发到我的VPN客户端IP上。
但我的虚拟机在使用xl2tpd的时候CPU会占满100%,GitHub上有一个已关闭的issue指向同一个问题,似乎可以通过更新centos的内核来解决,而我暂时还不想更新,所以这里另寻他路。
那么这种需要服务器在内网、客户端在外网的环境,使用反向代理似乎是无脑的选择;通过反向代理,客户端发往服务器的数据会先发送到反向代理服务器,反代服务器再将请求转发到内网的真实服务器上,反之亦然。
因此我快速配置好了frp反代软件,然而通过外网就是无法连接(我在内网时选择走外网链接是正常,但如果不在内网则不行);具体症状主要表现为卡更新(准备更新资源)。
经过反复日志排查,我的猜测是位于真实服务器上的反向代理客户端是以本地的身份向服务器发送请求的,因此服务器也会以本地地址响应;这里主要是影响了dispatch的功能,可能服务器返回的是内网IP URL,因此不在同一内网的机器无法查询。
我也尝试过非常多方法,甚至直接将内网IP整个删掉并替换,但仍然无效。最终不得不放弃反向代理的方案,转而使用其他VPN方法。
通过Softether VPN client连接
因为是使用Softether搭建的VPN服务器,所以客户端也用这个软件很合理。
至于为什么一开始没有使用?因为在Linux下配置client需要很多手动操作,而我刚好对Linux一无所知。
这里非常感谢@Variazioni 提供的教程,原文见:https://blog.csdn.net/Variazioni/article/details/127004628
简而言之,Linux下使用softether client不仅需要通过命令行界面完成操作(没有图形程序),还需要手动进行DHCP、调整路由表等。操作方法如下:
1 |
|
经过以上调整后即可完成VPN配置,可ping一下VPN服务器网络内的IP检查是否成功。
关于数据库和文件
终端中使用bt指令可执行控制操作,如强制修改MySQL密码、查询宝塔面板地址等;
数据库中部分表的含义可参考:https://www.iopq.net/forum.php?mod=viewthread&tid=17117217
宝塔面板左侧进入数据库即可备份和恢复,点右侧管理按钮即可进入PhpMyAdmin进行数据库编辑。
如何备份账号数据
在数据库路径/34live_db/34live_db_user/
下,分别导出t_block_data_X
、t_home_data_X
和t_player_data_X
(其中X是用户id);导出后得到sql文件,备份即创建完成。
也可在宝塔面板备份所有数据库,不过恢复的时候可能会出现各种密码问题,不是非常建议。
恢复时,先确定恢复目标id的表格是否存在(可使用面板查询,若服务崩溃可通过SQL指令查询,指令可询问AI获取),若不存在可直接导入对应SQL恢复文件;若存在,则应先使用文本编辑软件打开SQL文件,删除其中CREATE TABLE
段落处的所有内容再执行恢复。
注意,若需要复制账号,请先创建一个新号,进游戏看一遍开局CG再执行以上操作,并且记得将所有表里的UID进行修改确保不冲突,否则可能出现数据冗余错误(即账号记录和实际表不匹配),导致gateserver无法启动等问题。这时需要手动连接数据库进行调整等,总之很麻烦。
养成折腾之前备份数据库的习惯!再稳一点可以存虚拟机快照!
提示“当前所选内容没有包含唯一字段”
出现此问题时,进入服务器主文件夹,找到/www/server/phpmyadmin/phpmyadmin_[hexString]/config.inc.php
,在Servers configuration
下加入一行:$cfg['RowActionLinksWithoutUnique'] = true;
,保存文件重启服务端即可。
文件只读
由于centos自带的资源管理器在获取root权限后经常出现各种奇奇怪怪的问题,因此建议的方法是将对应文件复制到桌面,编辑后通过获取了root权限的终端使用cp /源文件目录/源文件 /目标目录/目标文件
将新文件覆盖过去。
关于功能
添加卡池
虽然说明书里说可以使用yskc
指令来更换卡池,但实际上由于默认MySQL不允许空密码登录,设置是无效的(终端里会显示很多Access denied for user 'root'@'localhost' (using password: YES)
之类的错误);
建议使用外部工具来设置,例如该数据库连接工具:
卡池类型中,201是角色限时,301是武器限时;
先删除旧的限时卡池,再从下方预设卡池选择添加;
“抽奖卡池选择”字段中,左侧选择卡池类型id,右侧需输入卡池自身id(理论上来说所有卡池各不相同即可)
添加活动
主题活动仅限3.x可正常运行,推测是每次大版本号更新时会删除部分旧版活动资源和数据,因此老活动通常只能开普通活动;可以通过活动id判断。
在活动id表格中可查询活动id;
若id以5开头则为普通活动,多数可以正常游玩;非5开头通常不可正常游玩。(也有很多例外,总体来说越新的活动正常概率越高)
最终注意事项(备忘)
- 干一些奇怪的操作前一定要备份数据库,别嫌麻烦,万一炸了随时可以恢复,总不至于从头创建账号;
- 不要点商城里的丽莎皮肤,会卡死客户端;
- GM里的父任务选项尽量别用,很容易出问题;
xl2tpd这个组件似乎有问题,用VPN的话会吃满一个CPU核心,尽量用frp反代。