文章目录

前言

  博主上学那会非常喜欢玩传奇这个游戏,虽然没接受热血点卡版的洗礼,但一点也不影响我对这个游戏的喜爱,传奇私服几乎覆盖了我整个初中、高中时代,多少个闷热的夜晚通宵守在电脑屏幕前,为的就是趁没人的时候,刷几个BOSS,爆点好装备。
  由于自己搭建传奇服务端非常简单,所以上学那会就积累了一些自己喜欢玩的服务端版本,在2020年的今天,我又打开了这些十年前的版本,玩起来还是那么经典。传奇的那几个主要的引擎,几乎在2013-2015年之间全部停止更新了,像当时主流的HeroM2引擎以及现在主流的GOM引擎都已不更新,不过GOM引擎功能完善,现在还是有些第三方在做着插件和登录器。而我之前下载的版本用的全都是HeroM2引擎,用起来虽然都没问题,但动态IP这个功能一直很鸡肋。

关于动态IP

  如果是用服务器架设那自然是有固定IP的,这里我们不讨论,主要说一说家庭宽带,我们家用宽带都是动态IP,像我这边默认是6天左右换一次IP(据说打电话申请最长可调整一个月),像我这么懒的人,不可能说外网IP换了就去更新重启一下服务端,我肯定是没那毅力的 :smirk: 。这里我看到了引擎控制器上有一个动态IP选项。


  我这边的软路由里面是绑定了动态域名解析的,所以外网IP变化之后,域名还是能够重新指向新的IP;GOM引擎果然是强大一些,开启动态IP模式之后,外网IP就算更新了,只需要退一下游戏,重新打开登录器就又连上了 :+1: :+1: :+1: :+1: 。但是HeroM2引擎就没那么强了,开启动态IP模式之后,外网访问是不开门的,卡在这个界面了!

动态IP模式的优点及原理

  我自己本身是搭建了一个E3的itx小主机用来做24小时开机的服务器的,但我没有固定IP,那玩意太贵了。这个时候引擎的动态IP模式就很有必要了,他几乎实现了固定IP的体验,不必因为IP的变化而去重启服务端。按照传统操作,就算你登录器上是动态域名,但外网IP变化之后,你还是需要停止服务器,重新配置IP,启动服务器。在重启M2Server的时候,你服务端的挂机信息,怪物信息,一些活动脚本全部都重启了,体验太差,动态IP模式的话只会用户掉线,重新打开登录器登录即可,服务端的信息都还在,体验虽然称不上完美,但已经相当不错了。
  动态IP的原理就是登录服务器网关能够自己获取公网IP,用户登录器向服务端请求登录信息,登录服务器网关返回登录IP和端口,用户输入账号密码之后,请求登录网关,门打开之后进游戏。

HeroM2动态IP模式存在的问题

  这里我要介绍下家里的网络情况,家里是软路由连接光猫进行拨号的,家里的所有设备通过交换机接入软路由,这是很普遍的大众情况。
  HeroM2和GOM都有动态IP模式,但GOM的更加智能,GOM能够在有路由器的情况下自动解析路由器动态IP,这样用户能够得到正确的登录地址。而HeroM2则没有这个功能,HeroM2引擎开启动态IP后,外网卡在开门的界面,卡住之后我打开CMD,输入netstat -ano之后发现登录器访问的登录地址是192.168.2.119:7100,这个是我这台虚拟主机的内网IP,我在公网IP的电脑上肯定是访问不了这个地址的。也就是说HeroM2的动态IP功能是把系统第一张网卡的IP地址返回给用户登录,所以如果你的系统是直连光猫进行宽带拨号的,那这个HeroM2的动态IP功能是能正常使用的,如果中间加了路由器,那这个功能就废了。

解决思路

  1、既然是返回第一张网卡的IP地址,那我有没有可能创建一个虚拟网卡,然后把虚拟网卡的IP设置为公网IP,每次更新IP后通过脚本改变这个虚拟网卡的IP地址。这个想法在验证的时候发现没啥用,不管怎么设置虚拟网卡,他返回的都是内网的那个IP地址。
  2、既然GOM引擎的功能能正常使用,要不换一个引擎。这个理论是可以实现的,但是工程量浩大,且繁杂,意义不是特别大,不适合我这种懒人。
  3、HXM2(幻想引擎)兼任Hero,网关上也有动态动态域名模式。最终因为登录器问题以及乱七八糟的体验,没有折腾下去。
  4、能否写一个程序,在每次IP变化之后,重新配置DBServer和LoginSrv的ip,然后关闭DBServer.exe和LoginSrv.exe进程,再重新启动这两个网关,这样主M2Server不受影响,也变相实现了效果!
  通过重新配置服务端和启动、关闭服务端,最终验证第四个方法是可行的,我重新配置游戏控制器,搜索服务端文件,发现只修改了5处txt配置文档,分别是:

D:\Mirserver\Mir200\!Servertable.txt  //发现Mir200这个配置信息其实没什么影响,直接写了127.0.0.1
D:\Mirserver\DBServer\!serverinfo.txt
D:\Mirserver\DBServer\!addrtable.txt
D:\Mirserver\LoginSrv\!addrtable.txt
D:\Mirserver\LoginSrv\!serveraddr.txt

  那我只需要关闭引擎的动态IP功能,写一个程序就可以完成上述操作了。

程序实现

  想到要做窗口程序,一开始准备回顾下大学学的C#,看了下Visual Studio的安装包大小,默默地关闭了下载页面,打开了隔壁的易语言编程工具。这里要喊一句:易语言 YES!
  对于有编程经验的人来说,易语言入门是真的是毫无门槛,丰富的支持库,只需要敲几行命令就能实现想要的功能,不要太方便!!


  终于可以安心做一个懒人了,有事没事打开登录器上去刷刷怪,这里再夸一句GOM的假人真的做的太真了。。我这搭了好几个版本,登录器晚些放到博客来,有缘的喜欢传奇的可以下载一起玩~


人活着一定要争口气,哪怕生为草绳,也要做绑螃蟹的那根。