mmorpg开发:MMORPG开发入门



  原著:Radu Privantu
   翻译:pAnic
   2005年5月11日
  
   原文出处:A Beginner’’s Guide to Creating a MMORPG
  
   -------------------------------------------------------------------
  
   译者序:这是篇讲解如何开发款MMORPG入门文章作者本人也是款游戏开发者文中内容源于实战有很高参考价值很多人都想拥有自己游戏这篇文章对那些想自己开发游戏人来说可能是纸福音也可能是盆冷水无论如何开发游戏都不是件简单事情以下是翻译正文:
  
  
   -------------------------------------------------------------------
  
   文章中心是如何起步开发你自己大型多人在线角色扮演游戏( 原文:Massive Multiplayer _disibledevent=>
请点击查看详细优缺点对比

   现在你决定了如何存储角色你还得选择C/S通讯网络协议:TCP 还是 UDP?,我们都知道TCP速度慢但是更准确并且需要额外带宽我实际使用TCP并没有遇到什么问题 如果你有充足带宽TCP是个好选择至少对初学者是这样 UDP 会很麻烦尤其是对新手 记住游戏或引擎初步测试会在你局域网进行所有包都会按顺序依次抵达在Internet上无法保证这虽然包会按顺序到达但是有时候会丢包这通常是个麻烦事 当然你可以设计你协议使得C/S能够从丢包中恢复但这对初学者来说很痛苦不值得推荐
  
   第 3步:选择数据传输协议
  
   又是看起来很简单其实不然你不能只是发送’’\\0’’结尾你需要个通用协议能同时适用串和 2进制数据用0(或其他)做结束符是不明智那个结束符可能是你要发送数据部分此外如果你发送20字节然后再20字节服务器极有可能收不到两个20字节取而代的它会次性收到40字节为了避免浪费带宽在不必要头上 而且你可以发送1KB但服务器会以两个小包形式收到它所以你必须知道哪里是个包开始哪里是结束在 “永恒大陆”(译者注:原文: Eternal Lands本文作者正在开发款MMORPG)中我们用如下思路方法:
  
   Off 0: 1 字节 表示传输命令;
   Off 1: 2 字节传输数据长度;
   Off 3: 变长消息内容;

   这种思路方法有优点:所有数据传输有统标准缺点是有些命令有固定已知长度浪费了些带宽以后我们会改成混合思路方法
  
   下件事是决定服务器模型: “非阻塞soket,不使用线程”或者“阻塞soket使用线程”两种思路方法(使用线程 vs 不使用线程)各有优缺点
  
   线程:
  
   服务器响应会更加平滑如果个玩家需要大量时间(例如从数据库中读取数据)这会在它自己线程中完成不会影响其他人(译者注:也许作者意思是每个玩家都有独立线程但这对MMORPG不太现实);

   难以恰当实现和调试:你可能需要大量同步并且个小疏忽就会导致灾难性后果( 服务器瘫痪物品复制等等);

   可以利用多处理器;

   无线程:
  
   实现和调试更简单;

   响应速度慢;



   在我公司我们使用无线程思路方法我没有足够资源和人力处理线程模式
  
   第 4步:客户端
  
   你打算做2D还是3D游戏?有些人认为2D游戏做起来简单我两者都做过并且我倾向于3D游戏更简单容我解释

   2D下你通常有个帧缓冲也就是个巨大象素点象素点格式会因显卡区别而区别 有些是RGB模式些是BGR模式等等每种颜色bit数也会区别只有在16bpp模式才有这个问题8-bit和24-bit模式简单但有他们各自问题(8-bit颜色数太少(256)而24-bit速度更慢)同时你需要制作你精灵动画不得不自己排序所有对象以便他们以正确顺序绘制 当然你可以用OpenGL或者D3D制作2D游戏但通常这并不值得并不是所有人都有3D加速卡所以使用3D库开发2D游戏般会带给你两者缺点:不是所有人都能玩你也不能旋转摄像机拥有漂亮阴影和3D游戏炫目效果

   (译者注目前绝大部分显卡都支持56516bpp格式这个也成为目前16位色业界通用格式有不少文章和代码都是讲述这格式下图像处理尤其是使用MMX技术)

   3D途径正如我所说更简单但是需要些数学(尤其是 3角)知识现代图形库很强大免费提供了基本操作(你不需要从后到前排列对象改变物体色彩和/或帖图都十分简单对象光照会按照光源和它位置计算(只要你为它们计算了法向量)还有更多)并且3D给了你创作和运动更多自由度缺点就是不是所有人都能玩你游戏(没有3D卡人数可能会让你大吃)并且预渲染图片总是比实时渲染更漂亮

   (译者注:市面上想买不支持3D显卡目前很困难只是高性能3D卡价格也不低)
  
   第 5步:安全
  
   显然不能相信用户任何时候都不能假设用户无法破解你精巧加密算法(如果你使用了话)或者协议用户发送任何信息都要通过验证极有可能在你服务器上你有固定缓冲区例如通常有个小(可能是4k)缓冲区用来接收数据(从soket)恶意用户会发送超长数据如果不检查这会导致缓冲区溢出引起服务器瘫痪或者更坏这个用户可以hack你服务器执行非法代码每个单独消息都必须检查:缓冲区是否溢出数据是否合法(例如用户发送“进入那扇门”即使门在地图或者“使用治疗药水”尽管用户没有那种药水等等) 我再次强调验证所有数据非常重要旦有非法数据把它和用户名IP时间和日期和非法原因记录下来偶尔检查下那个记录如果你发现少量非法数据并且来自于大量用户这通常是客户端bug或者网络问题然而如果你发现从个用户或者IP发现大量非法数据这是明显迹象表明有人正在欺骗服务器试图hack服务器或者运行宏/脚本同时决不要在客户端存储数据客户端应该从服务器接收数据换句话说不能发送这样消息“OK这是我得物品列表”或者“我力量是10魔法是200生命值是2000/2000” 而且客户端不应收到它不需要数据例如:客户端不应该知道其他玩家位置除非他们在附近 这是常识给每个人发送所有玩家会占用大量带宽并且有些玩家会破解客户端从中获取不公平利益(像在地图上显示特定玩家位置)
  
   (译者注:就像传奇免蜡烛外挂)所有这些似乎都是常识再次你会惊奇发现有多少人不知道这些我们认为常识
    
   另个要考虑问题当涉及到安全:玩家走动速度必须在服务器计算而不是客户端
  
   (译者注:这是重要原则但是会耗费大量服务器资源魔兽世界没有这样做它采用类似其他玩家揭发形式掩盖这个事实导致加速外挂可以用但是在有其他玩家时候会暴露)
  
   服务器应该跟踪时间(以ms为单位)当客户最后次移动时候并且移动请求如果比通常极限更快到来这个请求应该被抛弃不要记录这类虚假请求这可能是网络延迟(也就是玩家延迟过去10秒内发送数据同时到达了)
    
   检查距离如果个玩家试图和100亿公里以外玩家交易(或者甚至在另张地图上)记录下来如果个玩家试图查看或者使用个遥远地图对象记录它小心假ID例如正常情况下每个玩家都会分配个ID(ID在登陆时候分配可以是持久(唯ID) 如果ID在玩家登陆时候赋予9或怪物被创建时候)显然可以用玩家(保存玩家)位置(索引)作为ID
    
   所以第个登陆玩家ID是0第 2个是1依此类推现在通常你会有个限制比如说2000个索引在玩家列表里所以如果个客户端发送条命令类似:“查看ID200000角色”这会使服务器当机如果没有防备服务器会访问非法内存区域所以定要检查就像这样: \" actor id<0 or actor id> max players 然后记录非法操作并且断开玩家如果你使用C或者C注意或者定义索引为’’unsigned ’’ 并且检查上限某些原因定义为(,默认是有符号)记得检查 <0 and >max 没有做这些会严重挫伤你和其他用户类似要检查超出地图坐标如果你服务器有某种寻路算法并且客户端通过点击地面来移动确保他们不要点击在地图外部
  
   第 6步:获得个团队(Team)
  
   制作游戏需要大量工作(除非是个Pong and Tetris游戏)尤其是MMORPG你无法单靠自己理论上个完整团队(Team)组成是这样:
  
   至少3 个员: 1 个做服务器两个客户端(或者个客户端个负责工具例如美术插件世界编辑器等等)有6个员是最好更多就没必要了这取决于你领导能力最少个美工2到3个更合适如果这是个3D游戏你需要个3D美工个2D美工(制作帖图界面等等)个动画师个美术部负责人美术部应该由有经验人组织和安排除非你就是个艺术家
  
   少数世界构建者:创建所有地图是个漫长过程 并且直接关系到游戏成败再次你需要个世界构建部负责人世界需要协调所以不能只有个意气用事
  
   个 网站WebSite管理员是必须除非你精通网站WebSite设计并且愿意花时间做网站WebSite音效和音乐不是必须但是有音效和音乐游戏比没有会更吸引人
  
   个游戏经济系统 设计师.你也许觉得那很简单可以自己来做但事实上那是最复杂工作的如果经济系统设计不良(比如物品没有平衡资源在地图上随意放置等等)玩家会觉得无聊并且退出游戏我们早期进展存在很大问题尤其是经济系统主要是由我(员)设计它没有被恰当计划 于是我们花费了两个月来重新研究和建立整个新经济系统这需要次完全物品清除我告诉你玩家会很不乐意你删除他们物品幸运大部分玩家赞同这个想法但是这么多小时争论妥协解释和时间浪费还是让我们丧气以后会更多
  
   如前所说你需要个10~15人团队(Team)不包括协调员和管理者这10~15人必须是有经验如果都是新手就不值得你需要花大量时间解释要做什么怎样做为什么他现在做法不好等等
  
   开始就凑齐10~15人几乎是不可能不管你在区别论坛发多少帖你也无法找到合适团队(Team)成员毕竟如果个人熟练于他/她领域为什么在你无法拿出任何东西时候他/她要加入你团队(Team)?很多人有远大想法但是实现它们需要大量时间和努力所以他们宁可从事自己工作也不会加入你那如果你需要10~15人但是无法让他们加入你团队(Team)你如何才能制作款MMORPG呢? 好事实上开始不需要所有人都到位你真正需要员和个美工如果你是个只要找个美工就可以了请求懂美术朋友帮忙花钱请大学生/朋友做些美术或者其他工作
  
   现在你有了个美工你期待游戏样子现在可以开始实现了旦你有了可以运行C/S引擎些用来展示截图(或者更好玩家可以登陆你世界 4处走动聊天)更多人会愿意加入你团队(Team)更恰当除非你使用独有技术否则你客户端可以开源许多员会加入(作为志愿者)个开源工程而不是非开源项目而服务器不应该开源(除非你打算做款完全开源MMORPG)
    
   其他些忠告:在有东西可展示的前不要夸大你游戏最惹人烦事情的就是个新手发个“需要帮助”请求要求个巨大团队(Team)加入他游戏制作解释这个游戏到底有多酷旦你拥有了网站WebSite广告(通常是在个免费主机)你会看到个吸引人导航条包含“下载”“截图”“ 原画”(译者注原文:Concept art概念艺术在游戏应该指美工原始设计)“论坛”你点击下载链接然后看到美妙“建设中”页面(或者更糟糕个404)然后你点击截图得到同样结果如果你没有东西给人下载就不要放下载链接如果没有截图展示不要放截图链接然而更好在工程进展10%(和美工)的前不要浪费时间在网站WebSite上
  
   第 7步:打破某些神话


  
   你无法制作MMORPG, 只有大公司才可以
  
   我区别意虽然制作款像魔兽世界(World of Warcraft)无尽任务2(Ever Quest 2)亚瑟王召唤2(Asheron’’s Call 2)血统2(Lineage 2)和其他些游戏对个小自发团队(Team)是不可能但是做款像样游戏还是可以只要你有经验动机和时间,你需要1000小时编程来制作个可运行测试版大概10~15k小时完成几乎完整客户端和服务器但是作为团队(Team)领导者你不能只编程保持团队(Team)团结解决争执维护公共关系(PR)技术支持架设服务器惩罚捣乱分子自由讨论等等都是你职责你可能会被非编程任务淹没你很可能需要上班/上学这减少了你花费在项目上时间我们很幸运没有成员离开团队(Team)但是如果这种事情发生确是大问题假设你美工半途离开或者更糟糕他/她没有给你使用他/她作品许可当然这可以通过和他们签订合同来解决但找另外个美工仍然很麻烦个工程中有两种区别美术风格也是问题
  
   需要大笔金钱(通常 4-6 位数) 用来架设个 MMORPG 服务器.
  
   当然这不是真个人所见过专业服务器1000GB/月不到100美元/月(2~300美元初装费)除非你数据传输协议设计非常不合理1000GB/月对个1000玩家在线(平均)服务器来说足够了当然你还需要另个服务器做网站WebSite和客户端下载(客户端下载会占用大量流量当游戏变得流行时候)我们客户端有22MB有时候会有400GB/月传输量而我们还没有很流行(仍然)件事我们不需要另台专用服务器开启这个工程ADSL/cable服务器可以胜任直到你同时在线人数达到20~30然后要么找个友好主机公司用广告交换免费主机要么就只能自己掏腰包了
  
   制作个MMORPG很有趣
  
   这不是真你可能认为每个人都会赏识你玩家会支持你你标新立异并且当然很多玩家都玩你游戏玩家可能让人讨厌即使是完全免费游戏他们也能找到理由抱怨更糟糕是人们经常会抱怨矛盾战士会抱怨升级太难商人会对战士掠夺大量钱财很失望如果你减少怪物掉落物品有些玩家就会威胁说要退出游戏如果你增加同样群人会不满新手能更简单赚钱事实 真是左右为难改革和改进是必须如果你决定改变某些东西例如给加工物品增加挑战性有些人会说太难了如果你不做他们又会说太简单无味你会发现满意玩家通常不会说什么并且感到满意同时破坏者会怨声载道
    
   MMORPG经济比单机版难以平衡在单机游戏你可以逐渐改良武器只要玩家进展他/她可以使用更好装备丢弃(或者卖掉)旧方面在多人游戏里这种观点不成立每个人都试图得到最好武器而跳过低等级武器大部分玩家宁可空手省钱直到他们能买游戏中最好武器经济系统设计要参考相关文章
    
   迄今为止我列举所有事情加上额外工作和挑战足以让你在决定涉足这个工程的前 3思而行你必须知道你决定意味着什么
  
   整理总结
  
   希望这篇文章能给你足够知识篇文章将介绍如何建立个经济系统(更明确要避免哪些)还有些调试服务器和客户端信息
  
   有关作者
  
   这篇文章作者是 Radu Privantu, 永恒大陆(Eternal Lands) www.eternal-lands.com和项目规划, 永恒大陆是款免费客户端开源MMORPG作者可以通过 chaos_r[email protected] 联系

Tags:  mmorpg是什么意思 mmorpg游戏 mmorpg mmorpg开发

延伸阅读

最新评论

发表评论