加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

骑马与砍杀之改进的战利品掠夺方法

(2010-09-24 01:27:32)
标签:

骑马与砍杀

改进

战利品

掠夺方法

游戏

分类: 骑马与砍杀图文攻略教程

战利品是这样生成的:战后,有一个叫trp_temp_troop的兵种去挨个掠夺战败方所有人(英雄除外)。 然后以物品栏的形式呈现在你面前,战利品界面左侧的物品栏就是该兵种的物品栏。
这里有一个问题,就是他挨个掠夺所有敌人的时候,很可能掠夺到一半的时候,战利品栏就满了(96件就满)。然后即使继续掠夺剩下的人,也无法将掠夺到的装备塞到战利品了。而敌人是乱序排列的,高级兵很可能就排在后面,而被后掠夺,接着很可能战利品栏已经满了,无法掠夺这些高级兵的装备了,然后因为先掠夺低级兵而导致战利品整体质量低下。 而且就算是掠夺单一兵种,比如敌人是300个海寇,掠夺每个海寇,得到的装备也都不一样的,很可能掠夺前面的海寇掠夺的是海寇的鞋子,盾牌等不值钱的玩意,掠夺后面海寇的时候掠夺的是铠甲,头盔等值钱的玩意。所以这和敌人排序与否的关系不大。

这个必须扩大战利品的格子数来解决,比如扩大到3倍,也就是288格,然后从中选择最贵的96件装备放回到trp_temp_troop里。但是又不能直接扩大物品栏的格子数,因为最高10级物品管理拥有的物品栏就是最大的物品栏,格子数是96格。把物品管理改得超过10是没有用的,实际还是只有96格。

这就需要采用变通的方式来解决。1个人去掠夺不够,那就派3个人去掠夺(物品管理都为10)。3个人物品栏加起来就有288格了。 完了之后,从3个人的物品栏里选择最贵的96件放到trp_temp_troop里,就能保证所掠夺的战利品质量最高。

这里面没有任何作弊修改的成分,我只是改变了掠夺规则,因为战利品还是那一堆战利品,我并没有提高战利品的质量,也没有提高掠夺几率,更没有增加新的战利品。唯一的区别是:原版里把那一堆战利品的前96件拿出来供你选择,我改成从那一堆战利品里挑选最贵的96件来供你选择。

相关的代码,打开module_scripts.py,找到下面一段:

  (party_get_num_companion_stacks, ":num_stacks",":enemy_party"),
      (try_for_range,
":i_stack", 0, ":num_stacks"
),
        (party_stack_get_troop_id,
":stack_troop",":enemy_party",":i_stack"
),
        (neg|troop_is_hero,
":stack_troop"
),
        (party_stack_get_size,
":stack_size",":enemy_party",":i_stack"
),
        (try_for_range,
":unused", 0, ":stack_size"
),
          (troop_loot_troop,
"trp_temp_troop", ":stack_troop", ":loot_probability"
),
        (try_end),
      (try_end),

 

替换成:

## CC
      
(store_add, ":temp_array_c_plus_one", "trp_temp_array_c", 1),
      (try_for_range,
":cur_troop", "trp_temp_array_a", ":temp_array_c_plus_one"),
        (troop_clear_inventory,
":cur_troop"), # clear_inventory
        # raise skl_inventory_management level to 10
        
(store_skill_level, ":cur_level", skl_inventory_management, ":cur_troop"),
        (store_sub,
":dest_level", 10, ":cur_level"),
        (troop_raise_skill,
":cur_troop", skl_inventory_management, ":dest_level"),
      (try_end),
      
      (call_script,
"script_copy_inventory", "trp_temp_troop", "trp_temp_array_a"),
      
      (party_get_num_companion_stacks,
":num_stacks", ":enemy_party"),
      (try_for_range,
":i_stack", 0, ":num_stacks"),
        (party_stack_get_troop_id,
":stack_troop",":enemy_party",":i_stack"),
        (neg|troop_is_hero,
":stack_troop"),
        (party_stack_get_size,
":stack_size",":enemy_party",":i_stack"),
        (try_for_range,
":unused", 0, ":stack_size"),
          (try_begin),
            (store_free_inventory_capacity,
":inv_cap_a", "trp_temp_array_a"),
            (gt,
":inv_cap_a", 0),
            (troop_loot_troop,
"trp_temp_array_a", ":stack_troop", ":loot_probability"),
          (else_try),
            (store_free_inventory_capacity,
":inv_cap_b", "trp_temp_array_b"),
            (gt,
":inv_cap_b", 0),
            (troop_loot_troop,
"trp_temp_array_b", ":stack_troop", ":loot_probability"),
          (else_try),
            (troop_loot_troop,
"trp_temp_array_c", ":stack_troop", ":loot_probability"),
          (try_end),
        (try_end),
      (try_end),
      
      (troop_clear_inventory,
"trp_temp_troop"),
      (try_for_range,
":unused", 0, 96), # for 96 times
        # find the best item
        
(assign, ":best_score", 0),
        (assign,
":best_troop", -1),
        (assign,
":best_slot", -1),
        (try_for_range,
":cur_troop", "trp_temp_array_a", ":temp_array_c_plus_one"),
          (troop_get_inventory_capacity,
":inv_cap", ":cur_troop"),
          (try_for_range,
":i_slot", 10, ":inv_cap"),
            (troop_get_inventory_slot,
":item", ":cur_troop", ":i_slot"),
            (troop_get_inventory_slot_modifier,
":imod", ":cur_troop", ":i_slot"),
            (gt,
":item", -1),
            (call_script,
"script_get_item_value_with_imod", ":item", ":imod"),
            (assign,
":score", reg0),
            (val_div,
":score", 100),
            (val_max,
":score",1),
            (gt,
":score", ":best_score"),
            (assign,
":best_score", ":score"),
            (assign,
":best_troop", ":cur_troop"),
            (assign,
":best_slot", ":i_slot"),
          (try_end),
        (try_end),
        (gt,
":best_score", 0),
        
# already found
        
(troop_get_inventory_slot, ":item", ":best_troop", ":best_slot"),
        (troop_get_inventory_slot_modifier,
":imod", ":best_troop", ":best_slot"),
        (troop_add_item,
"trp_temp_troop", ":item", ":imod"), # add to trp_temp_troop
        
(troop_set_inventory_slot, ":best_troop", ":best_slot", -1), # remove it
      
(try_end),
## CC

 

然后是这段代码里用到的2个script: script_copy_inventory和script_get_item_value_with_imod。如果你的MOD里有的话就不用加了。如果没有就加在module_scripts.py的最后面。

(点击展开 / 收起)
  ("copy_inventory",
    [
      (store_script_param_1,
":source"),
      (store_script_param_2,
":target"),
  
      (troop_clear_inventory,
":target"),
      (troop_get_inventory_capacity,
":inv_cap", ":source"),
      (try_for_range,
":i_slot", 0, ":inv_cap"),
        (troop_get_inventory_slot,
":item", ":source", ":i_slot"),
        (troop_set_inventory_slot,
":target", ":i_slot", ":item"),
        (troop_get_inventory_slot_modifier,
":imod", ":source", ":i_slot"),
        (troop_set_inventory_slot_modifier,
":target", ":i_slot", ":imod"),
        (troop_inventory_slot_get_item_amount,
":amount", ":source", ":i_slot"),
        (gt,
":amount", 0),
        (troop_inventory_slot_set_item_amount,
":target", ":i_slot", ":amount"),
      (try_end),
    ]),




注意:去掉这里imod_c r a c k e d里的空格。

(点击展开 / 收起)
("get_item_value_with_imod",
  [
# returns the sell price based on the item's money value and its imod
   
(store_script_param, ":item", 1),
    (store_script_param,
":imod", 2),

    (store_item_value,
":score", ":item"),
    (try_begin),
      (eq,
":imod", imod_plain),
      (assign,
":imod_multiplier", 100),
    (else_try),
      (eq,
":imod", imod_c r a c k e d),
      (assign,
":imod_multiplier", 50),
    (else_try),
      (eq,
":imod", imod_rusty),
      (assign,
":imod_multiplier", 55),
    (else_try),
      (eq,
":imod", imod_bent),
      (assign,
":imod_multiplier", 65),
    (else_try),
      (eq,
":imod", imod_chipped),
      (assign,
":imod_multiplier", 72),
    (else_try),
      (eq,
":imod", imod_battered),
      (assign,
":imod_multiplier", 75),
    (else_try),
      (eq,
":imod", imod_poor),
      (assign,
":imod_multiplier", 80),
    (else_try),
      (eq,
":imod", imod_crude),
      (assign,
":imod_multiplier", 83),
    (else_try),
      (eq,
":imod", imod_old),
      (assign,
":imod_multiplier", 86),
    (else_try),
      (eq,
":imod", imod_cheap),
      (assign,
":imod_multiplier", 90),
    (else_try),
      (eq,
":imod", imod_fine),
      (assign,
":imod_multiplier", 190),
    (else_try),
      (eq,
":imod", imod_well_made),
      (assign,
":imod_multiplier", 250),
    (else_try),
      (eq,
":imod", imod_sharp),
      (assign,
":imod_multiplier", 160),
    (else_try),
      (eq,
":imod", imod_balanced),
      (assign,
":imod_multiplier", 350),
    (else_try),
      (eq,
":imod", imod_tempered),
      (assign,
":imod_multiplier", 670),
    (else_try),
      (eq,
":imod", imod_deadly),
      (assign,
":imod_multiplier", 850),
    (else_try),
      (eq,
":imod", imod_exquisite),
      (assign,
":imod_multiplier", 1450),
    (else_try),
      (eq,
":imod", imod_masterwork),
      (assign,
":imod_multiplier", 1750),
    (else_try),
      (eq,
":imod", imod_heavy),
      (assign,
":imod_multiplier", 190),
    (else_try),
      (eq,
":imod", imod_strong),
      (assign,
":imod_multiplier", 490),
    (else_try),
      (eq,
":imod", imod_powerful),
      (assign,
":imod_multiplier", 320),
    (else_try),
      (eq,
":imod", imod_tattered),
      (assign,
":imod_multiplier", 50),
    (else_try),
      (eq,
":imod", imod_ragged),
      (assign,
":imod_multiplier", 70),
    (else_try),
      (eq,
":imod", imod_rough),
      (assign,
":imod_multiplier", 60),
    (else_try),
      (eq,
":imod", imod_sturdy),
      (assign,
":imod_multiplier", 170),
    (else_try),
      (eq,
":imod", imod_thick),
      (assign,
":imod_multiplier", 260),
    (else_try),
      (eq,
":imod", imod_hardened),
      (assign,
":imod_multiplier", 390),
    (else_try),
      (eq,
":imod", imod_reinforced),
      (assign,
":imod_multiplier", 650),
    (else_try),
      (eq,
":imod", imod_superb),
      (assign,
":imod_multiplier", 250),
    (else_try),
      (eq,
":imod", imod_lordly),
      (assign,
":imod_multiplier", 1150),
    (else_try),
      (eq,
":imod", imod_lame),
      (assign,
":imod_multiplier", 40),
    (else_try),
      (eq,
":imod", imod_swaybacked),
      (assign,
":imod_multiplier", 60),
    (else_try),
      (eq,
":imod", imod_stubborn),
      (assign,
":imod_multiplier", 90),
    (else_try),
      (eq,
":imod", imod_timid),
      (assign,
":imod_multiplier", 180),
    (else_try),
      (eq,
":imod", imod_meek),
      (assign,
":imod_multiplier", 180),
    (else_try),
      (eq,
":imod", imod_spirited),
      (assign,
":imod_multiplier", 650),
    (else_try),
      (eq,
":imod", imod_champion),
      (assign,
":imod_multiplier", 1450),
    (else_try),
      (eq,
":imod", imod_fresh),
      (assign,
":imod_multiplier", 100),
    (else_try),
      (eq,
":imod", imod_day_old),
      (assign,
":imod_multiplier", 100),
    (else_try),
      (eq,
":imod", imod_two_day_old),
      (assign,
":imod_multiplier", 90),
    (else_try),
      (eq,
":imod", imod_smelling),
      (assign,
":imod_multiplier", 40),
    (else_try),
      (eq,
":imod", imod_rotten),
      (assign,
":imod_multiplier", 5),
    (else_try),
      (eq,
":imod", imod_large_bag),
      (assign,
":imod_multiplier", 190),
    (try_end),
    (val_mul,
":score", ":imod_multiplier"),
    (assign, reg0,
":score"),
  ]),

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有