诸如EVE Online和WOW用来开发MMORPG的语言是什么?[关闭]


22

据我了解,MMORPG是与其他任何普通3d视频游戏一样在您的计算机上运行的游戏,但是随着游戏中发生的每个动作,都会通过对服务器的HTTP调用对Universe进行更改。因此,玩家计算机在渲染图形和动画方面承担了所有繁重的工作,但是Web框架进行了在线交流。

  • 所以我想知道正在使用什么Web框架,Web服务器和数据库来创建MMORPG,例如EVE Online和WOW?

  • 另外,正在使用哪些编程语言和3d游戏引擎来使客户端(3d图形/动画/声音)成为游戏的一部分?


我认为几乎每个MMO都从现成的技术开始,然后在它们增长到一定规模并真正真正地对其工具进行专业化之后,从中自定义地狱。EVE Online中的无堆栈I / O是一个很棒的示例:eveonline.com/devblog.asp?
Michael Stum

您是指对服务器的TCP调用吗?Web服务器和浏览器都使用HTTP(超文本传输​​协议)来访问网页,并且与MMO无关,除非您指的是基于浏览器的游戏,例如urbandead。
stonemetal

Michael Stum,Stackless I / O是否由Stackless Python制成?

@亚当不知道这两个是否相关。
迈克尔·斯托姆

@Michael Stum刚发现是从此视频中找到的。us.pycon.org

Answers:


30

大多数公司使用C ++。Eve是一个离群值,核心图形引擎使用C ++,而其他人已经指出,游戏逻辑使用Python。CCP还为Stackless本身做出了很多贡献,而Stackless大部分都是C语言。WoW是游戏本身的C ++,尽管UI是用Lua编写的。Cryptic(Champions Online,《星际迷航》在线)使用纯C,但是在业界很少见。例如,Java会不时弹出。Runescape,但我想不出AAA。迪士尼已将Panda3D(用C语言编写的基于Python的引擎)用于许多MMO,但与Eve一样并不常见。

总的来说,对于游戏逻辑和引擎来说,似乎是C ++,对于客户端脚本来说,Lua是最接近标准的。

至于网络方面,一切都结束了。我们(加密)将PHP,C和Python(Django)混合使用以获取各种位。CCP使用ASP来制作网站本身,并使用Python来为后端提供动力(尽管缓慢地漂移在一起)。WAR和LOTRO都在其站点上使用PHP,尽管目前尚不清楚它们使用的是什么特定框架(如果有)。

您提到MMO通过Web API调用工作,但事实并非如此。基于HTTP的协议效率太低,并且HTTP并非设计用于长时间运行的连接。几乎所有MMO(并非像憎恶的王国或城市亡者一样都不是基于Web的)都使用自定义服务器和自定义协议。客户端是高度有状态的,执行诸如提起清单UI之类的操作不会触发对服务器的请求,因为所有这些信息都缓存在客户端上。


coderanger,所以当您说“客户端是高度有状态的”时,您的意思是客户端应用程序将所有数据存储在那里,而不总是向服务器发送请求?此外,人们如何学习开发定制服务器和定制协议?

2
是的,为减少网络流量,客户端在本地缓存了很多信息(与通常通常直接来自服务器的网络游戏不同)。服务器仍然是权威的,以防止作弊。至于学习如何发展这种东西。我会找一本有关“网络编程”的书。有很多的工具,在那里,可以帮助虽然,扭曲,Protocol Buffers的,等等等等,这在很大程度上取决于你是什么样的语言和框架,最舒适的。
coderanger

3
Panda3d是用C ++而不是C编程的
。– jokoon 2010年

5

EVE Online的一些链接:

基本上,EVE Online在SQL Server 2005和某些其他Microsoft软件上运行。客户端主干大部分是用Python编写的(确切的说是无堆栈Python,据我所记得)和一些C ++很有可能。

至于《魔兽世界》,我确实知道他们将Lua用于所有客户端GUI东西,但是除此之外,我认为他们不会将Lua用于其他任何东西。C ++可能使用了。哇,我想也可以使用一些Windows盒子,但似乎它们可能有一些其他类型的盒子专门用于某些任务,而这些任务可能根本不是基于Windows的。

信息不多,但希望对您有所帮助。

这些游戏中有很多都基于功能将服务器分开,因此它们将具有仅负责存储对象/内容的数据库服务器以及实际运行游戏世界(验证玩家动作等)的服务器。


3

我对EVE和WOW不太确定,但是我已经看到MMO游戏使用C ++,C#,Java甚至PHP作为服务器(不过后者仅用于基于浏览器的简单游戏)。

客户端通常是用C ++(或Flash(如果是基于浏览器的游戏)编写的);我曾经使用过一个基于.NET的客户端(将C#与C ++ / CLI混合使用)。

而且几乎总是使用某种动态脚本语言来促进开发“设计者”内容(例如能力,任务等),这些内容经常更改,并且游戏设计师可以相对于程序员进行更改。


3

首先,MMORPG或任何在线游戏首先都不使用HTTP或“ Web框架”。

用C ++编程服务器,就像游戏本身一样,通过使用套接字在网络上传输数据包来实现通信。

服务器通常运行其他操作系统,并且仅包含游戏代码,因此许多玩家可以在单个服务器上流畅地玩游戏。

我不知道暴风雪如何管理他们的服务器,也不知道他们是否使用集群。

当然,当我说“ sockets”和“ C ++”时,我说的是实时游戏,而不是游戏可能提供的其他服务,例如带有WoW的武器库。他们可能只是使用可以从多个服务中读取的数据库,例如论坛,军械库,游戏,帐户管理等,但我认为他们有依赖的数据库,该数据库会寻找新条目等,因此所有内容都可以同步很好。

我认为负责《魔兽世界》网络部分的人可能真是个坏蛋。


3
“我认为负责魔兽世界网络部分的人可能真是个坏蛋。” 在我看来,服务器数量少和客户端移动并没有真正带来坏处。尽管事后看来也是20/20。


0

有数十种游戏引擎。我想到的两个是虚幻引擎和Source。

对于语言,这取决于任务。渲染和其他对性能至关重要的部分通常以一种本地语言完成。以C ++为例。但是通常使用一些动态语言来定义脚本,因为此代码更容易更改,并且通常由较少的“硬核”程序员编写:-) Lua,Python,Ruby-它们都可以在这里使用。


0

WoW也将Lua用于其所有内部脚本。我不确定他们是否会修改语言本身,但我不会怀疑它是否适合他们的需求。您可以打赌他们拥有不同的工具,可使设计人员轻松修改/调整脚本。这是来自我的朋友的内幕信息,这些朋友曾经/曾经是魔兽世界的开发者。


当人们修改像Lua这样的语言时,就意味着他们正在基于Lua创建自己的个人框架。正确?如果是这样,这是否会降低所开发程序的性能/速度?

@ J3M7OR3-据我了解,他们基于Lua创建了自己的内部框架,但我无法说出性能/速度。
凯尔C 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.