我是Argentum Online (AO)社区的成员和贡献者,这是来自阿根廷的第一个MMORPG,which is Free Software;虽然它不是3D,但它确实令人上瘾,并且拥有数十万用户。
真的不幸的是,AO是用Visual Basic开发的(是的,你可以笑)但前社区,所以想象一下,代码不仅糟透了,而且还具有零可移植性。
我正在计划,有些朋友要重写客户端,而作为GNU / Linux疯狂,想要跨平台做。其他人doing the same with the server in Java。
所以我最大的问题是我们想要使用快速开发语言(如Java,Ruby或Python),但客户端会非常不安全。 Ruby / Python版本可以使用它的所有代码,Java可以很容易地被解压缩(是的,我们在社区中有一些破解者)
我们已经考虑在C / C ++中将安全模块实现为动态库的选项,但它可以替换为自定义库,因此它不是很安全。
我们也在考虑使用C ++和Ruby / Python中的GUI来执行核心应用程序。但还没有分析它的所有含义。
但是我们真的不想用C / C ++编写整个游戏代码,因为它不需要那么多的性能(游戏平均以18fps的速度播放),我们希望尽可能快地开发它。 / p>
那么在我的案例中你会选择什么?
谢谢!
答案 0 :(得分:8)
有一句古老的格言:'默默无闻的安全感并不安全'。
不要担心代码可用,这根本不会产生任何影响。相反,设计网络协议使其难以破解,这意味着对重要事务的真正强大的身份验证。
实际上,我要做的是尝试将游戏移植到Mono,从你现在的VB源开始,逐步在C#或IronPython中编写新代码。
答案 1 :(得分:5)
理想情况下,客户端是否“安全”应该不是问题。如果这是一个问题,那么游戏架构就会出现问题。
客户能够“做任何想做的事”是无关紧要的。在设计良好的多人游戏中,客户端只拥有绝对需要的数据,所有操作都由服务器授权。
让我们说有人嘲笑客户说他们的对手已经死了。精细。他们可以整天在客户端破解它,甚至可能欺骗渲染器让对手摔倒。但是,他们没有权力说出对手是否死了 - 这取决于服务器。所以服务器收到一条消息“对手X已经死了”。服务器应该足够智能,以“嗯,不”,对手愉快地继续活着并做任何他想做的事。
当然,这是理想的,并且通常需要对游戏玩法和/或服务器负载的流动性做出一些妥协。但是,对于重要的事情,所有应该由服务器验证。特别是在MMO中。
将您的游戏视为您的客户是开源的。
答案 2 :(得分:2)
我建议从VB6升级路径 - > VB.NET。 Visual Studio将为您完成大部分转换过程。正确移植后,如果需要,可以将其转换为C#。然后,您必须为非便携式(仅限Windows)功能和Mono不支持的功能创建变通方法。
答案 3 :(得分:2)
我不明白。您想重写一个自由软件程序并使其成为封闭源代码吗?如果你重写所有东西,我想你可以做到,但从现在开放,协议也打开。
所以,即使通过默默无闻的安全措施很好(但事实并非如此),你也不会有这种安全感,因为没有默默无闻。
失败了,其他一切都不再重要。
如果整体设计有缺陷,无论是修理还是停止担心:如果老虎正在吃你,刷牙是没有意义的。
答案 4 :(得分:1)
我无法评论最后的答案..
事情是,特别是这个游戏,有些人认为改变它们会使游戏完全不同。例如,客户端每时每刻都知道其他用户在哪里。 (它是一个基于磁贴引擎的游戏)所以,当一个角色不可见时,它可以看到它访问代码(或编辑内存或处理数据包)..哦,让我们说客户端不知道任何关于隐形角色..当一个角色施放一个咒语时,他有一个“开销”信息,比如“VAX IN TAR”或类似的东西......所以,你可以看到施放该咒语的角色的位置..人们经常发送一个空聊天(这在游戏中是公平的)所以,无论谁能够阅读聊天并寻找空闲聊天(充满空格),他都知道隐形字符在哪里。
所有这些事情。有可能做所有这些东西把所有的东西放在服务器中,但它将是一个完全不同的游戏。
这个游戏是一个非常恐怖的游戏,每个玩家都会做很多事情,并且在服务器中拥有所有这些东西会使它完全无法播放。
抱歉我的英语不好。 (我是alcuadrado的朋友,在其他帖子中无法发表评论,对不起,如果这不是答案)