传奇3源代码研究总结【实用】

 
浏览量:42 回复数:7

 2004年暑期之前,我有幸得到了传奇3的源代码,经过本人大半年的工作,该代码已经全部调试通过,但由于本人的精力有限,不能最大发挥该代码的能量,故决定转让该代码, 全部代码包括2个客户端程序代码,7个服务端程序代码,以及地图编辑器、图片编辑器、脚本编辑器、数据转换器等工具的代码。

这是一个完整的大型2D网络游戏的代码。

为使对此代码感兴趣的人有一个了解,本人对该代码及调试的过程作一个大概的介绍。



一、服务器采用机群式架构:

服务器由数量不定的Gate服务器、Game服务器、DB服务器组成,除Gate服务器需要公用IP外,其它的服务器都可以在内网上运行。这样的设计,可以适应硬件的变化,也可以适应用户的变化。Login服务器可以自动选择游戏服务器,以平衡游戏服务器的负载,而某个游戏服务器只在某个或某些地图上提供服务,Gate服务器除了转发数据包、加解密外,还可以过滤数据包,对客户端进行身份确认等。将Gate服务器分出来,还可以保护其它服务器。

具体方案可以参考本人附送的“Mir of Legend” Servers Architecture文档



二、客户端有一个完整的2D图形引擎(函数库),(即使不懂DirectX)利用该引擎,可以方便地将文字以及图片(瓦片、什物、角色、魔法)以各种效果贴到屏幕。



三、完整的地图系统,在地图文件中不仅记录了瓦片,也记录了各种事件、光照、动画等。



本人的主要工作:

1、弄清了整个服务器的体系结构,画出了Servers Architecture图,对数据的流向有清楚的认识。

2、用IO完成端口服实现了服务器间的通讯,提高了服务器的性能,而原来的代码中没能实现。

3、解决并完善了多线程的共享问题,而原来的代码没有解决这个问题。

4、在发行版本的程序中嵌入了自诊断代码,使得在Release 版的程序中的错误也能被发现。

5、更改了原来的怪物AI的算法,使得怪物的行动效率更高,现在的怪物数量已达8万个,反应时间更短,在P4 3。0G 1GRAM的机子上运行,装入所有地图(500个),怪物数量达8万个时,CPU的使用率只有60%。

6、更改了原来的脚本解释器算法,使刷钱,刷装备外挂无缝可钻。且结构更简单更清晰,不懂程序的玩家也能自己编写脚本。

7、服务器端增加了防盗技术,所有程序都不保存在硬盘上,而是运行时临时加密上传到服务器中,保留在内存中,即使有人进入了服务器,也看不到程序,更无法复制程序。程序所用的关键数据也是临时加密上传,即使有人得到了程序,也由于得不到关键数据,而无法正常运行。

8、加入了反私服技术,由于利益的驱使,服务器端程序也无法保证不流出。反私服技术就是在上面第七点失去作用的情况下的最后一个有效的招术,即在服务器端程序中留下后门,只要一条指令,就可使服务器不定期的死机,重启,耗尽资源等。

9、地图编辑器、图片编辑器、脚本编辑器、数据转换器等工具的制作都是本人的工作。



经验及体会:

1、关于该代码的来源:

该代码除工具的代码没有泄漏外,其它的代码均泄漏出来了。似乎是内部人员所为,但从代码中看并不是这样简单,从代码的编写风格来看,至少有3个小组参与了编写,客户端1个,服务器端至少有2个,客户端与服务器端的接口以及服务器端程序之间的接口都不一致,甚至连加密解密这样的函数也有错误,在服务器端的2个小组中,一个是完全C++的代码,另一个残留有DEPHI的代码,并且有大量的韩文注释,由此可以看出,该代码的泄漏是在程序的合成期,既不在内测期,也不在公测期。从私服的服务器端程序来看,服务器端有用C++写的程序,也有用DEPHI写的程序,而该套代码全部是用C++写的,这说明该套代码有可能是一套废弃的代码。

2、作坊式的游戏软件公司也可以取得成功:

国内有传媒指责韩国的游戏公司大多是作坊式的游戏软件公司,所出的游戏也是二流游戏,奥美德公司及其出品的传奇游戏也在其内。其实不必这样指责别人,只要市场认可就行,每每以技术的观点看待一款游戏显得过于幼稚。

如果有了完整的源代码基础, 游戏的制作门坎就更低:

一两个核心程序员+源代码+投资人=一款游戏

对于网络游戏,核心程序是服务器端程序,投资人只要投资客户端的图片制作和广告费用。这可是最大程度上的代码复用。

3、软件工程大有可为,但目前作用有限:

没有接触过大型软件的程序员对软件工程意义的理解是十分有限的,通常只能停留在书本上。我想,完全按照软件工程原理制作的软件是不多的,至少在国内是如此。

贯彻软件工程原理和方法的程度依赖于系统分析员个人的经验,并受限于实际条件。

例如:针对一个具体的问题,选择何种开发的语言,如何将问题分解到每一个小组,在小组中如何将任务再分配,一但某个小组在某个算法上遇到了困难,如何采取有效的办法去解决,如何协调各个小组的工作等等,这些在教科书上都有说明,但实际操作时却完全依靠个人的经验和能力。不同的系统分析员在同样的问题上发挥的作用是大不相同的。

例如:能否在详细设计之前就知道该软件的性能瓶颈,数据流量的瓶颈,从而在开发中给予足够的人力、财力和时间。

由于系统分析员的精力所限,不可能精通所有算法,甚至不可能知道都有哪些算法,如果他面临一个从未接触过的问题,有些算法知道而有些不知道,那么他将如何面对这些不知道的算法呢?例如:如何让计算机识别出一幅图片中是否有一个苹果,并且不会把一个西红柿也当成苹果呢。如何让一个计算机五子棋程序具有自主学习的功能呢。

所以,尽管有软件工程作指导,但一个软件能否开发成功,能否在市场上取得成功,在很大程度上是个未知数。

从传奇3的代码来看,它不象是在软件工程严格管理之下的产品。例如,它有很多类的成员变量没有初始化。

4、如何保证代码的安全:

以本人的理解,代码安全也是软件工程学中研究的问题,而且代码安全问题存在于软件开发各个阶段。但翻了几本教科书,也没有看到代码安全的论述。

从目前来看,大型软件的开发文档比源程序更具有价值。那么开发文档是向所有参与项目的人员开放,还是只开放相关的部分,如果只开放相关的部分,那么这些编写代码的程序员是否对自己的部分有足够的信心呢,那么这些只有极少数人能看到的开发文档是否科学合理呢。

从传奇3的程序看,里面的代码全部是可编译的C++代码,依本人的看法,这样有不合理之处,要保证代码安全,代码只能对极少数核心程序员开放,而一但核心程序员离开,代码安全将不保。本人以为,2D图形引擎、加解密模块、通讯模块、角色引擎可以作成DLL文件,这些由一个小组完成,并在程序中留下后门。然后将这些DLL文件分发到其它各个小组中去。在同样的条件下,普通程序员可以更专心于算法的设计,并且可以适当扩大代码的开放度,有利于提高软件的质量。各个小组可沿接口的两边同时开展工作并且进行测试,这样做即使在代码的合成期各个小组也不必看到对方的代码。各个小组的负责人只对本小组的代码安全负责,同时发生代码泄漏的情况将不复存在。

经常有报道说某某游戏的源代码泄漏了,大部分是炒作,只有极少是真正的泄漏。服务器要有防黑客技术,服务器端程序在设计时也要考虑这个问题。黑客防不胜防,内测时使用DEBUG版的程序带源码调试,外测时就不能使用源码调试,因此自诊断技术就必不少,必要时还要把服务器端设计成GATE+SERVER双机式的结构。其中GATE在外网上运行,SERVER在内网上运行。

5、防盗和反私服技术并不难,但传奇3为何不吸取传奇2的教训:

本人以为这是沿用了微软的套路。

6、网络游戏的收费方式将成为今后软件收费方式中的一种重要方式:

在网络大行其道的未来,多数应用软件都将设计成客户端+服务器端式的结构。用户每次使用软件就必需与服务器相连,并取得服务器的认证,服务器根据用户所使用的功能、使用的时间进行收费。这并不是说所有的功能在服务器上实现,用户使用的只是终端。一种可能的方式是用户在使用时才下载必要的模块,这个模块可以很小,但很关键,这个模块甚至可能仅仅是一些数据而已,而且是进行过加密的。这种按时,按功能收费的方式似乎更合情合理。

7、C++模板库和通用类库使VC程序开发变得更快捷方便,成本更低:

传奇3游戏是使用C++模板库和通用类库的典范。



其它的象如何开发面向不同人群的不同版本的软件,如何自动升级软件等等,本人也都作了一些思考,在此就不多说了。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
本来打算等录完教程在开源,后来发现实在是没时间,怕大家等不及,先开源了再说吧。大家先拿去研究,等我忙完这一阵有时间了录一个流程讲解,方便大家修改源码! 下面大概给大家介绍下服务器和客户端的交互流程 服务器线程分类:玩家更新,怪物更新,数据接收,地图更新,数据库,界面更新,网管接收 玩家类里的更新和怪物类里的更新大致一样,是操作攻击是否击中,掉血计算,buff到期时间等不是立即生效的东西都在更新里。 服务器的设计思路比较清楚,所以还未见过内存方面报错(数组越界有可能会有,比如部分玩法,目前不稳定的都关闭了暂时没时间修复,大家可以自己动手) 暂时关闭的不稳定玩法:行会争霸,团战(尚未测试),摆摊,交易系统。 玩家视野我设计的是每个地图格子一个整数数组存放玩家或怪物编号,怪物编号以>0开始,玩家以<0开始,每次移动都会去地图类里取视野 另外服务器上的菜单:刷怪控制、管理这两个尚未测试应该有bug,自己注意修复一下 本服务器设计的非常安全,不会有任何变态挂,加速挂,锁血挂等出现,因为所有计算都是在服务器上完成的,计算效率也是杠杆的 不过有人可能说效率不行呀 cpu太高,带几十个人就卡了。那是因为 易语言 在源码调试下运行本身就会慢5-10倍左右,所以测试性能建议编译后在试试 另外微端的事情我说一下,大家直接把RES资源下载到客户端目录下,然后屏蔽微端连接,就可以了,不需要微端了就,但是需要下载好整个游戏就行了 上一个客户端版本我附带在这里大家可以去下载: https://bbs.125.la/forum.php?mod=viewthreadtid=14496289 讨论易语言游戏制作和发展的 QQ群:336787216 ,欢迎一起携手造就易语言游戏的未来,个人认为易语言写游戏真的很容易。主要是引擎非常效率,引擎用的是凤影龙鸣作者封装的
传奇源代码 05 delphi 是一个编程工具,主要用于开发传奇游戏相关的项目。Delphi 是一种基于 Object Pascal 的面向对象的编程语言,是 Borland(现在是 Embarcadero Technologies)公司开发的一种可视化编程环境。传奇源代码 05 delphi 通过使用 Delphi 开发环境,为开发人员提供了一种简单而强大的方式来创建传奇游戏传奇游戏是一种非常受欢迎的在线多人游戏,它具有丰富的角色扮演和冒险元素。传奇源代码 05 delphi 提供了一些基本的游戏框架和模块,开发人员可以根据自己的需求进行修改和定制,以创建独特而引人入胜的游戏体验。 通过传奇源代码 05 delphi,开发人员可以使用 Delphi 的强大功能来设计和实现游戏角色、地图、任务和故事情节等元素。他们可以利用 Delphi 的面向对象编程特性,创建各种各样的角色类和技能类,以及游戏中的交互和战斗系统。 除了游戏内容的开发,传奇源代码 05 delphi 还提供了一些网络和数据库的支持。开发人员可以利用 Delphi 的网络编程库和数据库连接组件,实现游戏服务器和客户端之间的通信和数据存储。这样,他们可以轻松地创建一个稳定和可靠的传奇游戏网络环境。 总之,传奇源代码 05 delphi 是一个强大的开发工具,为开发人员提供了丰富的功能和灵活的定制选项来创建传奇游戏。无论是开发个人项目还是商业产品,传奇源代码 05 delphi 都是一个值得考虑的选择。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值