更多名人名博

上市公司专栏

实时股价每分更新

纳斯达克(美元)(市值:亿美元)
综指: 涨跌幅:
公司 股价 涨幅度 市值
盛大
网易
九城
畅游
完美
巨人
新浪
百度
恒生指数(港币)(市值:亿港币)
综指: 涨跌幅:
公司 股价 涨幅度 市值
腾讯
金山
网龙
创业板
综指: 涨跌幅:
公司 股价 涨幅度 市值
宝网
d
您现在的位置:首页> 开发|案例分析|游戏策划案例| > 圆桌理论/一次掷骰子原理(伤害判定系统)

圆桌理论/一次掷骰子原理(伤害判定系统)

来源:悠易论坛04-15-2010

  在2005年5月blz的一个蓝贴中有如下陈述:“wow中计算暴击率是基于所有的攻击的。暴击率不是仅仅基于命中的部分。换言之,如果你有5%的暴击率,是包含未命中在内的所有攻击总次数的5%是暴击。”[“暴击的几率是针对所有攻击而言的,miss也是其基数的一部分。”引用下别人的翻译]

  基于这段话中的隐含意思和一些玩家的实践,发现了一次掷骰子原理:一次近战或远程攻击的结果是基于一个单一的服务器产生随机数(服务器中心生成的单个的“骰子数”["Die Roll"]),然后通过核对服务器端的内在列表,得出攻击的结果。也就是说对白字来说未命中/躲闪/招架/格挡/碾压/暴击/普通攻击只进行一次roll数判断。

  自动攻击列表[白字普通伤害]

  下面是怪物的近战攻击和玩家的近战自动攻击[白字]列表。

  这个列表的排列是按照攻击结果的优先级的递减排列。也就是说,顶部结果的优先级高于其下面的部分。(这个优先顺序来自blz,同时是正确的。)

  未命中

  躲闪

  招架[背后没有]

  偏斜(仅出现在玩家和玩家宝宝对怪物时)

  格挡[背后没有]

  暴击

  碾压(仅出现在怪物对玩家和玩家宝宝时)

  普通攻击

  这个列表的含义:

  1、每次近战攻击都可能会出现未命中,躲闪,招架,格挡,偏斜,暴击,碾压。除此之外将是一次普通攻击。

  2、你的人物技能书中的各种(躲闪,招架,格挡)几率是完全的百分比几率。如果你技能书中显示你躲闪率为4.5%,那么同级别怪物对你的所有近战攻击平均有4.5%将会被你躲闪,而不是怪物命中你的攻击的4.5%。

  3、由这个列表有些近战攻击结果有0%几率存在;例如,玩家的自动攻击造成碾压的几率是0%,怪物的攻击有0%的几率被偏斜,对没有装备盾牌的玩家的攻击被格挡的几率是0%,等等。

  4、BOSS级怪物(永远被视为高玩家3级)攻击玩家的碾压几率为15%。

  5、怪物和玩家的白字近战攻击,不会出现诸如被格挡的碾压,被招架的暴击,未命中的偏斜等情况。所有可能的攻击结果是互相独立排斥的。

  6、当顶部的各种可能几率[除最后一个普通攻击外]达到或超过100%,攻击结果将不会出现普通攻击。

  如果未命中,躲闪,招架,格挡几率的和达到100%或更高(装备不错的战士用盾牌格挡技能时),攻击的结果不仅不会出现普通攻击,还会连碾压也不会出现。

  7、总结起来得出圆桌理论

  当怪确定目标来攻击玩家时,会根据双方的数据产生一个列表,攻击的各种结果按照优先级被依次添加到列表。列表中各种结果的可能性合为100%,不能达成100%的部分用普通攻击来填充;一旦达成100%的容量上限,后边的数据将被忽略,无法添加到桌面中。最后根据列表中的内容随机ROLL取攻击结果(假设ROLL1-100)。

  例如

  战士的数据如下 闪躲10%招架15% 格挡15%那么将得到如下的战斗列表

  结果 点数几率

  未命中 0-5 5%

  躲闪 6-1510%

  招架 16-30 15%

  格挡 31-45 15%

  碾压 46-60 15%

  普通攻击 61-100 40%

  且不论战士装备是否优秀,BOSS都将对他有15%的机会造成碾压

  若战士开启盾牌格挡技能 增加75%格挡几率 战斗列表会变成

  结果 点数几率

  未命中 0-5 5%

  躲闪 6-15 10%

  招架 16-30 15%

  格挡 31-100 70%

  碾压 NULL 0%

  普通攻击 NULL 0%

  BOSS绝对无法对战士造成任何普通攻击或者碾压

  例2

  如某贼的数据如下 闪躲25%招架5% 格挡0% 当他发现自己成为BOSS目标是开启闪躲技能(增加50%闪躲)综合有75%闪躲得到战斗列表如下

  结果 点数几率

  未命中 0-5 5%

  躲闪 6-8075%

  招架 81-85 5%

  格挡 NULL0

  碾压 85-100 15%

  普通攻击 NULL 0

  就是说BOSS只有15%的机会打中贼,但是只要BOSS对此贼造成伤害,就一定是碾压

  若贼同时开启了怀表等饰品并且生命降低触发了耻辱碎片那么闪躲再度增加达到95%那么战斗列表变成

  结果 点数几率

  未命中 0-5 5%

  躲闪 6-100 95%

  招架 NULL0%

  格挡 NULL0%

  碾压 NULL0%

  普通攻击 NULL 0%

  高闪躲甚至把招架也排挤出了桌面,显然此时贼处于物理免伤状态。

  证明近战的几种攻击结果并非多次判断的概率叠加

  首先做一些假定:我们使用random(100)来生成小于100的整数,在这个范围内

  5%判定未击中的情形{random(100) <= 5}

  10%判定躲闪的情形 {random(100) <= 10}

  10%判定招架的情形 {random(100) <= 10}

  10%判定格挡的情形 {random(100) <= 10}

  15%致命一击的情形 {random(100) <= 15}

  利用网上的程序测试系统

  miss = 0

  dodge = 0

  parry = 0

  block = 0

  crit = 0

  hit = 0

  math.randomseed(os.time())

  for i=1,1000000 do

  if (math.random(1,100) <= 5) then

  miss = miss + 1

  elseif (math.random(1,100) <= 10) then

  dodge = dodge + 1

  elseif (math.random(1,100) <= 10) then

  parry = parry + 1

  elseif (math.random(1,100) <= 10) then

  block = block + 1

  elseif (math.random(1,100) <= 15) then

  crit = crit + 1

  else

  hit = hit + 1

  end

  end

  print("miss: "..miss.." "..miss/1000000)

  print("dodge: "..dodge.." "..dodge/1000000)

  print("parry: "..parry.." "..parry/1000000)

  print("block: "..block.." "..block/1000000)

  print("crit: "..crit.." "..crit/1000000)

  print("hit: "..hit.." "..hit/1000000)

  基于短路求值策略,我们循环生成100万次攻击,得到的战斗纪录是

  未击中 50215次 5.0215%

  躲闪 95482次 9.5482%

  招架 85364次 8.5364%

  格挡 76712次 7.6712%

  致命 104321 10.4321%

  命中 587906 58.7906%

  循环100万次的结果中我们发现致命率变成了可怜的10.x%,这和给出的15%差别甚巨。