总结:其实也没有什么好总结的......英雄远征这套源码虽然说体积并不大,麻雀虽小五脏俱全,对于MMORPG网游的一些基本系统都有完备的实现,虽然实现方法不一定是最好的。除去场景,战斗,组队,任务等那些我文章中有提到的系统,源码中还有像是帮派,邮件,坐骑,宠物,排行榜相关的模块,有兴趣的同学可以自己去看看。
游戏中还有几个比较重要的系统,感觉还是要提一下:
1.心跳包系统:客户端会以指定时间间隔循坏给服务器发送消息(此处是协议10006),保持和服务器的连接,如果超出了时间,服务器就会关闭和客户端的连接(看过《三体》的同学应该都知道,就是“摇篮系统”)。游戏内的心跳包超时时间和超时次数在sd_reader.erl中定义,作为接收tcp连接的超时参数。
2.定时器系统:源码中有专门的一个文件夹timer,用于存放需要执行定时任务的代码。服务器启动的时候调用timer_frame:start_link()启动后天定时服务管理进程(是一个gen_fsm),定时检查需要执行定时任务的模块。
3.随机数生成系统:关于erlang伪随机的说明,可以参考这篇文章:https://www.cnblogs.com/unqiang/p/4180748.html
所以我们需要一个能返回随机种子的进程。服务器启动的时候调用mod_rand:start_link()启动随机数种子返回进程,当需要生成随机数的时候,使用该进程返回的种子。
其余的还有很多细节值得研究,由于精力有限就不深入下去了。
这份代码到我手上的时候已经不知道经过了多少人的手了,既然是游戏总会想去玩一下......根据源码的sql文件配置完数据库后,游戏服务器是能运行起来的,但没有配套的客户端,对于游戏中相关功能的实现总少了直观的理解。
个人用Erlang编写了一个简陋的客户端模拟程序(之前没发现源码里就有模拟客户端的代码,发现之后看了下,感觉协议也不太对的上......),可以完成平台登录,创建角色,进入游戏的操作,用来观察玩家登录的完整过程足够了。服务端也做了相应的修改,为了方便进行程序的调试(主要是添加了shell内方便热更的方法),两份代码打包后上传百度云,如果有感兴趣的同学对其继续完善,甚至能还原游戏内大部分的功能的话,请务必通知我去玩一下。