(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) 最新评论