BOW极品装备暴率完全解析(从源代码来解析)

字体:        | 上一篇 下一篇 | 打印

("give_special_loot", [
    (store_script_param_1, ":party"), #Party_id

    (assign, ":total_gain", 0),
    (party_get_num_companion_stacks, ":num_stacks",":party"),
    (try_for_range, ":i_stack", 0, ":num_stacks"),
      (party_stack_get_troop_id,     ":stack_troop",":party",":i_stack"),
      (store_character_level, ":level", ":stack_troop"),
      (store_mul, ":gain", ":level", ":level"),
   (try_begin),
       (neg|troop_is_hero, ":stack_troop"),
       (party_stack_get_size, ":stack_size",":party",":i_stack"),
       (store_mul, ":stack_gain", ":gain", ":stack_size"),
   (else_try),
    (store_mul, ":stack_gain", ":gain", 2), # heroes count twice
   (try_end),
      (val_add, ":total_gain", ":stack_gain"),
    (try_end),


(val_div, ":total_gain", 100),

(val_max, ":total_gain", 20),
(val_sub, ":total_gain", 20),
(assign, ":special_item_in_loot", 0),
(store_mul, ":upper_range", "$num_unique_items_given", 250),
(val_add, ":upper_range", 3000),
(store_random_in_range, ":r", 0, ":upper_range"),
(try_begin),
  (lt, ":r", ":total_gain"),
  (store_random_in_range, ":r", 0, 14),


  # First special item is always the one you can use the best

  (try_begin),
   (eq, "$num_unique_items_given", 0),
   (store_proficiency_level, ": one_handed_skill", "trp_player", wpt_one_handed_weapon),
     (store_proficiency_level, ":two_handed_skill", "trp_player", wpt_two_handed_weapon),
     (store_proficiency_level, ":polearm_skill", "trp_player", wpt_polearm),
     (store_proficiency_level, ":archery_skill", "trp_player", wpt_archery),
   (try_begin),
     (ge, ":archery_skill", ": one_handed_skill"),
     (ge, ":archery_skill", ":two_handed_skill"),
     (ge, ":archery_skill", ":polearm_skill"),
     (assign, ":r", 15), #silver bow
   (else_try),
     (ge, ":polearm_skill", ": one_handed_skill"),
     (ge, ":polearm_skill", ":two_handed_skill"),
     (assign, ":r", 7), #kushana
   (else_try),
     (ge, ":two_handed_skill", ": one_handed_skill"),
     (assign, ":r", 2), #durendal
   (else_try),
     (assign, ":r", 4), #caliburn
   (try_end),
  (try_end),

  
  (try_begin),
    (eq, ":r", 0),
    (eq, "$given_curtana", 0),
    (assign, "$given_curtana", 1),
    (assign, ":special_item_in_loot", "itm_curtana"),
  (else_try),
    (eq, ":r", 1),
    (eq, "$given_talhoffer", 0),
    (assign, "$given_talhoffer", 1),
    (assign, ":special_item_in_loot", "itm_talhoffer"),
  (else_try),
    (eq, ":r", 2),
    (eq, "$given_durendal", 0),
    (assign, "$given_durendal", 1),
    (assign, ":special_item_in_loot", "itm_durendal"),
  (else_try),
    (eq, ":r", 3),
    (eq, "$given_yitianjian", 0),
    (assign, "$given_yitianjian", 1),
    (assign, ":special_item_in_loot", "itm_yi_tian_jian"),
  (else_try),
    (eq, ":r", 4),
    (eq, "$given_caliburn", 0),
    (assign, "$given_caliburn", 1),
    (assign, ":special_item_in_loot", "itm_caliburn"),
   (else_try),
    (eq, ":r", 5),
    (eq, "$given_tulongdao", 0),
    (assign, "$given_tulongdao", 1),
    (assign, ":special_item_in_loot", "itm_tu_long_dao"),
  (else_try),
    (eq, ":r", 6),
    (eq, "$given_caithness", 0),
    (assign, "$given_caithness", 1),
    (assign, ":special_item_in_loot", "itm_caithness"),
  (else_try),
    (eq, ":r", 7),
    (eq, "$given_kushana", 0),
    (assign, "$given_kushana", 1),
    (assign, ":special_item_in_loot", "itm_kushana"),
  (else_try),
    (eq, ":r", 8),
    (eq, "$given_fenris", 0),
    (assign, "$given_fenris", 1),
    (assign, ":special_item_in_loot", "itm_fenris"),
  (else_try),
    (eq, ":r", 9),
    (eq, "$given_mjolnir", 0),
    (assign, "$given_mjolnir", 1),
    (assign, ":special_item_in_loot", "itm_mjolnir"),
  (else_try),
    (eq, ":r", 10),
    (eq, "$given_grendel", 0),
    (assign, "$given_grendel", 1),
    (assign, ":special_item_in_loot", "itm_grendel"),
  (else_try),
    (eq, ":r", 11),
    (eq, "$given_berserkr", 0),
    (assign, "$given_berserkr", 1),
    (assign, ":special_item_in_loot", "itm_berserkr"),
  (else_try),
    (eq, ":r", 12),
    (eq, "$given_ducalis", 0),
    (assign, "$given_ducalis", 1),
    (assign, ":special_item_in_loot", "itm_ducalis"),
  (else_try),
    (eq, ":r", 13),
    (eq, "$given_templar", 0),
    (assign, "$given_templar", 1),
    (assign, ":special_item_in_loot", "itm_templar"),
  (else_try),
    (eq, ":r", 14),
    (eq, "$given_hospitaller", 0),
    (assign, "$given_hospitaller", 1),
    (assign, ":special_item_in_loot", "itm_hospitaller"),
  (else_try),
    (eq, ":r", 15),
    (eq, "$given_silver_bow", 0),
    (assign, "$given_silver_bow", 1),
    (assign, ":special_item_in_loot", "itm_silver_bow"),
  (try_end),
(try_end),

(try_begin),
   (neq, ":special_item_in_loot", 0),
   (val_add, "$num_unique_items_given", 1),
   (troop_ensure_inventory_space, "trp_temp_troop", 5),
   (troop_add_item, "trp_temp_troop", ":special_item_in_loot", 0),
   (assign, reg0, 1),
(else_try),
   (assign, reg0, 0),
(try_end),
]),


就是这一大段了.不要怕,其实分析起来很简单的.

****************************************************************

红色部分就是计算敌人部队的强度.
具体的算法就是:部队总强度(:total_gain)等于各兵种强度(:stack_gain)之和.单兵种的强度为该兵种数量(:stack_size)乘以该兵种单个的强度(:gain),单个的强度(:gain)等于该兵种等级(:level)的平方. 如果该兵种是英雄的话,兵种数量(:stack_size)要计2次.

以暗黑复仇者这个部队为例:
pt_dark_avengers Dark_Avengers 2 0 6 312 124 10 25 0 125 15 30 0 127 20 35 0 128 15 20 0 110 15 30 1 -1

trp_dark_champion = 124    10-25(数量)   38(等级)   :gain(1444)   :stack_gain(14440-36100)
trp_dark_knight = 125        15-30(数量)    30(等级)   :gain(900)    :stack_gain(13500-27000)
trp_dark_sniper = 127         20-35(数量)   23(等级)   :gain(529)    :stack_gain(10580-18515)
trp_dark_warrior = 128        15-20(数量)   18(等级)   :gain(324)    :stack_gain(4860-6480)
:total_gain为43380-88095

****************************************************************

蓝色部分就决定几率了.
算法是把 :total_gain除以100,这个结果与20比大小,取两者中大的一者,再减去20. 获得最终的:total_gain.
以暗黑复仇者这个部队为例:
最终:total_gain为413-860

然后这段脚本片断还定义了一个"上限"(:upper_range).
算法是:你获得极品的次数乘以250,再加上3000.
然后就是随机值:r,范围是:0-upper_range
当这个随机值:r小于:total_gain 就能获得极品.

还是以暗黑复仇者这个部队为例,另外假设你没有获得过极品:
那么:
获得极品最小几率是:412/3000=13.73%
获得极品最大几率是:859/3000=28.63%
没有获得过极品,去打暗黑复仇者部队,获极品的几率为13.73%-28.63%.

****************************************************************

紫色部分就决定你第一次获得极品将会是哪一件:
一句话,跟你的武器熟练度有关.
弓箭熟练度最高:     获得银木弓(silver bow)
长杆熟练度最高:     获得贵霜剑(kushana)
双手熟练度最高:     获得杜朗达尔圣剑(durendal)
单手熟练度最高:     获得石中剑(caliburn)


****************************************************************

灰色部分就是获得第一件极品以后再获得极品的情况了,极品的获得就是随机的了,不再指定是哪一件了.

****************************************************************

最后一段就是计数,你每获得一次极品,$num_unique_items_given就增大1,那么获得极品几率那个式子的分母就增大250,也就意味以后获得极品的几率会越来越低.获得同样的极品$num_unique_items_given这个数字也会增加1的.

完毕.

[ 本帖最后由 rubik 于 2008-1-21 23:45 编辑 ]

查看全部评论(2) 最新评论

  • 删除 hao0427 (2008-4-07 19:29:30, 评 0 分)

    熟练度最高指多少?

  • 删除 Knightk99 (2008-1-22 11:01:03, 评 0 分)

    强!大大好厉害嗷?

查看全部评论(2)我来说两句

-5 -3 -1 - +1 +3 +5