奇迹(MU): 奇迹技术谈

作者: httplee 2004-12-08 我要投稿专区首页

httplee
序言:奇迹,一款从2001年面世的“3d”网游,前前后后经历了接近3年多的时间。在大陆全面挂机一年多后,少有人再对奇迹做技术分析。本人是个奇迹爱好者,经历一年多的挂机后,5-1的号也满了(智力的哦)。出于对微机技术的喜好,对奇迹一向有所研究,现在,在无所追求的情况下,也想对奇迹从
  序言:

  

  奇迹,一款从2001年面世的“3d”网游,前前后后经历了接近3年多的时间。在大陆全面挂机一年多后,少有人再对奇迹做技术分析。本人是个奇迹爱好者,经历一年多的挂机后,5-1的号也满了(智力的哦)。出于对微机技术的喜好,对奇迹一向有所研究,现在,在无所追求的情况下,也想对奇迹从技术方面做一次完全的分析,如果您有耐心,也许你能从中找到你所需要的。

  

   一:[画面]3D之争未定论

  

  奇迹的画面是否华丽,我想大多数人没有争议,细腻,接近完美的图案。前所未有的闪耀装备。这些都是以前,甚至是以后的游戏难以超越的地方。

  

   技术点:

  

  1>奇迹的所有画面是位图的(解释下,位图的画面和矢量画面是对应的,矢量画面随图画的变大不产生失真变化,位图反之),位图画面的好处是:容易做到很精致,在适当的分辨率下,可以显示出完美的画面来,但是由于位图画面本身的缺点,奇迹无法做到镜头缩放(这里是指任意比例,在一定范围内,奇迹其实是可以的,但是效果不好,另外涉及到他屏幕的显示方式问题,所以奇迹没有缩放功能),此外,位图画面对奇迹的另外个限制就是:分辨率可供调节的有限(这里要说下,其实最受限制的是上限,因为位图缩小还稍微好点,仅仅缺少了部分的像素,扩大是他的致命伤,奇迹的位图真实大小大家可能已经猜到――就是最上限的那个分辨率下的大小,奇迹画面是位图的另外一个证据是,在亚特兰中时常漂流扩大的花瓣)。无论如何,奇迹的画面,从任意角度来说,都还算完美的,如果你看过同类的作品:魔兽3,英雄王座,你就会知道,其实奇迹在画面上,还是下了苦功的;

  

  2>奇迹的位置坐标是2维的(即只有XY2种坐标运算,如果一张纸,在上面找任意点都可以以XY2个参数定位);这是奇迹的画面定位的争议点,因为奇迹的人物,建筑,本身是3D模型,甚至场景地图上的草,树,大多也是3D模型(只能说大多,因为某些不是,比如地图背景:沙漠的沙子和虫子,仙的土壤都是非3D模型的2维贴图)。所以很多人说他是伪3D。也有很多人说是3D。我的意见是:以2维运算体现3D效果的游戏(注意,不要误解,其实把奇迹说成是3D或者2D都不对)

  对于画面,今天就说到这里,感谢您的阅读!

  

   二:服务器构架――似有隐患

  

  奇迹的服务器构架其实很特别,和之前以及现在的大多数网游服务器构架方式不太一样。传奇,天堂2的构架是类似的(注意,不是一样)。而奇迹是目前比较另类的构架方式

  

   技术点:

  

  1>串架服务器。奇迹的服务器是单个服务器承受所有地图运算,采用多个服务器串联共同分流的方式。而传奇天堂,都是采用多个服务器并架的方式来分流地图运算量(传奇早期的毒蛇谷刷钱法就是利用服务器并架时延迟的问题来的,而天堂2,如果你有跑长途,你会发现有时候在地图的最前方有一片树木林立于蓝天之中。如果你有地图补丁,你会发现恰好蓝天和陆地的分界线就是地图上的回城分界线,也就是说,天2里某个回城区划分给一个服务器运算,多个服务器并列构架,无缝运算[目前最先进的构架方式就是这种])。由于奇迹每个服务器都要承受所有地图的运算,所以奇迹是目前全球唯一一个需要更新地图前重复服务器压力测试的游戏(别以为韩国和大陆的测试区是方便你我,其实开新地图,对服务器来说都是严峻考验,也不会有任何一个游戏,专门为了平衡度来开测试服务器吧?多动下脑筋!),因为每增加一个新地图都会带来服务器的运算增大。这里要遗憾的告诉大家,从目前的服务器状况来说,奇迹要想按照奇迹大陆上的地图来开发,恐怕是不可能的。因为目前技术下,目前构架情况下的服务器承受不了这么多的运算。而大家可能也注意到,每次开新地图,都会对老地图的刷怪进行调整,其实,就是在平衡服务器的运算量。当然,也有可能某天,奇迹也变成传奇天堂的构架方式。

  

   三:概率论――雾里看花的成功率

  

  玩奇迹的人(包括SF)都有一个感觉――奇迹的合成显示成功率简直就是说胡话。现在我告诉大家:对,那个概率是假的!但是他也不完全是虚假的,因为显示的数字低的的确是比高的要难合许多。

  

   技术点:

  

  1>没有采用真正种子算法的概率算法。几乎所有懂计算机编程的都知道几乎所有语言里都有随即函数,这个函数通常会随机产生一个0-1之间的数字(比如0.58)。于是乎,所有人都在想奇迹的成功概率也应该是采用了某个种子算法来产生随机数。我要告诉大家,你每次去合成,并不是每次产生一个随机数。这节内容比较多,如果有耐心,请仔细看:

  

  首先,奇迹在服务器启动后产生一个很长的随机数串(二进制的,大概是一个字的长度,不要小看这个长度,你要想轮回这个长度几乎不可能,那需要消耗的不是一仓2仓的物品和石头),这个随机数串是以0和1来表示的,也就是说,表示的是成功和失败,所以奇迹里,真正符合概率论的,就是50%概率的合成,那么,符合50%概率的是哪些呢?灵魂点不幸运,点生命宝石,和+10不幸运都符合50%概率,我要告诉大家,合+10不幸运的,胆子大些,放心去吧,绝对够高!说到这里,有些人会说:哦,奇迹是一启动服务器就有个数字串啊,那上次不是有人说,点灵魂不幸运的只和地图有关系吗?我要告诉大家,他说的没有错,问题是在于,这个数字串是所有人共同享用的,而且,你上线后不是从数字串的头开始执行,而是通过一个指针把你定位到这个串中的某一个位置,从那里开始执行,如果你换地图,这个指针就发生变化。详细点说:服务器启动-》产生数字串-》人物登陆后-》定位到串。当你移动到别的地图,那你就被定位到那个地图的串开头,在同一个地图内所有人共享串的移动顺序。所以,假如你登陆后,所在地图的串是010101(0失败,1成功),那么你点一个灵魂,就是失败,如果下一个是你点,那么就是成功,如果下一个是同一个地图上的另外个人点的,也是成功!

  

  说了半天不幸运的成功概率,下面要说下幸运的了,灵魂点幸运其实很简单,这个75%根本没随机函数的,计算机自动把一秒分成3000,通常,最底层的语言(比如汇编语言)才可能真实的精确到3000分之一秒,其他语言,越是解释型的就越不能精确到这么多,但是始终可以精确到百分之一左右,奇迹把一秒大概分成4块,在某3个连续的块里就是成功,另外的那个1/4秒里就是失败。所以,真正影响幸运成功的概率就是:时间。真正点幸运不失败的方法只有一个:首先碰运气,如果点成功了第一个,在一秒后点下一个灵魂,一定成功。前提是你的网不卡,要真的在1秒后服务器也接受到点的指令。什么地点说,喝酒说,都是无稽之谈。很多人说节奏很重要,说的是正确的。

  

  下面谈下合成,这个是绝大多数人的重点内容了。不幸运合+10上面说了,遵守地图成功序列,真正符合50%的概率,幸运的合+10,75%,同点幸运灵魂一样,由时间决定(但是这里难度就大了。因为你要放石头和物品,要把握时间节奏太难了)。不幸运合+11到+13,那个玛雅葛布林告诉你是45%对吗,真正的概率是多少呢,30%,这30%和灵魂点幸运一样,遵守时间法则,那么幸运的合+11-13呢,显示是70%实际大概是50%,包括合票都是50%,这几个都符合时间法则,连合披风也是一样,唯一被改过的是天马,这个的概率是99.99,目前不清楚符合什么规则,只是非常难爆。好像合了几百个才爆了一个。

  

   四:外挂,谁之错?!

  

  奇迹的外挂很变态,是目前所有的游戏里最变态的一个,这不是外挂制作者厉害,而是奇迹本身的算法决定的,由于考虑到单个服务器承受所有地图的运算,所以奇迹采用了大量本地运算。比如,同一个地图内的人物移动,奇迹是如此运算的:本地点击地图的某个位置,首先,本地运算坐标是否合法,合法,则发送往服务器,服务器发送回本地同意,本地分次按移动的速度传送回服务器移动到某个坐标,服务器接受后发送回本地同意指令,而外挂,则是点中某个坐标后,不经过本地的检验,直接发送,所以可以卡坐标,另外瞬间移动则是省略了本地根据移动速度做的移动运算,直接告诉服务器,已经到达目标地,而奇迹,缺少了这个坐标检验。再比如,奇迹的挂打的速度变态,是因为命中的运算是本地进行的,在你攻击的时候,其实是本地进行运算告诉服务器有没打到,服务器再进行运算,是miss还是多少伤害,这也是为什么奇迹里更改攻击效果可以改变命中的情况(比如打的近的暴炎在改为毁灭后,可以杀到后面的怪――不是自动攻击的情况)。很遗憾的告诉大家,奇迹要想改变这些,太困难了,他的构架很成熟,再更改,需要改变的东西太多,webzen现在摊子也不小,恐怕很难去改变这些。

 相关论坛】   【打印本页】  

::::::::::参阅:游戏同类文章
::::::::::相关精彩文章

::::::::热门新闻关注::::::::