返回
返回

添加一把对指定阵营士兵造成多倍伤害的武器

例如做一把对诺多9倍伤害的锤子

其实代码就几行,但对新手来说,要改的位置太多了,而且有些注意事项可能会忽略。

正文(以潘德395为例)

我们要在mission_templates中找到伤害计算系统:
$g_damage_calculation_system
用MBCE把他转成txt去mission templates中查找
我们定位出该行,例如(ps:我们可以将mission templates的语法设置成Go方便查看):

-28.000000 0.000000 0.000000  1 2147483679 2 144115188075857328 0  185 2133 

前面的参数不用管,2133是个opcode,应该所有的MOD的伤害计算都是从这开始的,2133前面的数字便是代码的行数。我们把这行复制下来,去掉2133前面的东西,再丢进MBCE中,转成PY:

(assign, ":var_0", reg0),
(store_trigger_param_1, ":var_1"),
(store_trigger_param_2, ":var_2"),
(store_trigger_param_3, ":var_3"),
(store_trigger_param, ":var_4"4),
(assign, ":var_5"":var_3"),
(gt, ":var_5"0),
(get_player_agent_no, ":var_6"),
(agent_is_alive, ":var_1"),
(agent_is_human, ":var_1"),
(agent_get_wielded_item, ":var_7"":var_2"0),
(agent_get_troop_id, ":var_8"":var_1"),
(str_clear, s1),
(try_begin),
    (eq, ":var_4"0),
    (str_store_string, s1, "qstr_hb_abdomen"),
(else_try),
    (eq, ":var_4"1),
    (str_store_string, s1, "qstr_hb_thigh_l"),
(else_try),
    (eq, ":var_4"2),
    (str_store_string, s1, "qstr_hb_calf_l"),
(else_try),
    (eq, ":var_4"3),
    (str_store_string, s1, "qstr_hb_foot_l"),
(else_try),
    (eq, ":var_4"4),
    (str_store_string, s1, "qstr_hb_thigh_r"),
(else_try),
    (eq, ":var_4"5),
    (str_store_string, s1, "qstr_hb_calf_r"),
(else_try),
    (eq, ":var_4"6),
    (str_store_string, s1, "qstr_hb_foot_r"),
(else_try),
    (eq, ":var_4"7),
    (str_store_string, s1, "qstr_hb_spine"),
(else_try),
    (eq, ":var_4"8),
    (str_store_string, s1, "qstr_hb_thorax"),
(else_try),
    (eq, ":var_4"9),
    (str_store_string, s1, "qstr_hb_head"),
(else_try),
    (eq, ":var_4"10),
    (str_store_string, s1, "qstr_hb_shoulder_l"),
(else_try),
    (eq, ":var_4"11),
    (str_store_string, s1, "qstr_hb_upperarm_l"),
(else_try),
    (eq, ":var_4"12),
    (str_store_string, s1, "qstr_hb_forearm_l"),
(else_try),
    (eq, ":var_4"13),
    (str_store_string, s1, "qstr_hb_hand_l"),
(else_try),
    (eq, ":var_4"14),
    (str_store_string, s1, "qstr_hb_item_l"),
(else_try),
    (eq, ":var_4"15),
    (str_store_string, s1, "qstr_hb_shoulder_r"),
(else_try),
    (eq, ":var_4"16),
    (str_store_string, s1, "qstr_hb_upperarm_r"),
(else_try),
    (eq, ":var_4"17),
    (str_store_string, s1, "qstr_hb_forearm_r"),
(else_try),
    (eq, ":var_4"18),
    (str_store_string, s1, "qstr_hb_hand_r"),
(else_try),
    (eq, ":var_4"19),
    (str_store_string, s1, "qstr_hb_item_r"),
(try_end),
(store_skill_level, ":var_9", skl_ironflesh, ":var_8"),
(try_begin),
    (neg|eq, "$g_morale_system"0),
    (neg|eq, "$g_hero_enhancement"0),
    (try_begin),
        (this_or_next|is_between, ":var_8""trp_hero_burilgi""trp_omen_seeker"),
        (this_or_next|eq, ":var_8""trp_hero_eyegrim"),
        (this_or_next|eq, ":var_8""trp_seeress"),
        (this_or_next|eq, ":var_8""trp_hero_cavalas"),
        (this_or_next|eq, ":var_8""trp_hero_euryale"),
        (eq, ":var_8""trp_hero_stheno"),
        (store_mul, ":var_10"":var_9"-7),
    (else_try),
        (troop_is_hero, ":var_8"),
        (neg|eq, ":var_1"":var_6"),
        (store_mul, ":var_10"":var_9"-5),
    (else_try),
        (store_mul, ":var_10"":var_9"-3),
    (try_end),
(else_try),
    (store_mul, ":var_10"":var_9"-3),
(try_end),
(val_add, ":var_10"100),
(val_mul, ":var_5"":var_10"),
(val_div, ":var_5"100),
(store_mod, ":var_11"":var_5"100),
(try_begin),
    (store_random_in_range, ":var_12"0100),
    (gt, ":var_11"":var_12"),
    (val_sub, ":var_5"1),
(try_end),
(try_begin),
    (eq, ":var_7""itm_Cavalas_sword"),
    (store_div, ":var_13"":var_5"10),
    (store_mod, ":var_14"":var_5"10),
    (try_begin),
        (store_random_in_range, ":var_15"111),
        (try_begin),
            (ge, ":var_14"":var_15"),
            (assign, ":var_14"1),
        (else_try),
            (assign, ":var_14"0),
        (try_end),
    (try_end),
    (store_agent_hit_points, ":var_16"":var_2"1),
    (val_add, ":var_16"":var_13"),
    (val_add, ":var_16"":var_14"),
    (agent_set_hit_points, ":var_2"":var_16"1),
(try_end),
####################分隔##################
(try_begin),
    (eq, ":var_7""itm_astraea_manifest"),
    (store_troop_faction, ":var_17"":var_8"),
    (this_or_next|eq, ":var_17""fac_heretics"),
    (eq, ":var_17""fac_snake_cult"),
    (val_mul, ":var_5"2),
(try_end),
(try_begin),
    (eq, ":var_8""trp_hero_cavalas"),
    (neg|eq, ":var_0""itm_saphire_rune_axe"),
    (neg|eq, ":var_0""itm_ruby_rune_axe"),
    (neg|eq, ":var_0""itm_emerald_rune_axe"),
    (neg|eq, ":var_0""itm_saphire_rune_sword"),
    (neg|eq, ":var_0""itm_ruby_rune_sword"),
    (neg|eq, ":var_0""itm_emerald_rune_sword"),
    (neg|eq, ":var_0""itm_saphire_rune_two_h_sword"),
    (neg|eq, ":var_0""itm_ruby_rune_two_h_sword"),
    (neg|eq, ":var_0""itm_emerald_rune_two_h_sword"),
    (neg|eq, ":var_0""itm_saphire_rune_glaive"),
    (neg|eq, ":var_0""itm_ruby_rune_glaive"),
    (neg|eq, ":var_0""itm_emerald_rune_glaive"),
    (neg|eq, ":var_0""itm_saphire_rune_bow"),
    (neg|eq, ":var_0""itm_ruby_rune_bow"),
    (neg|eq, ":var_0""itm_emerald_rune_bow"),
    (assign, ":var_5"0),
(try_end),
(store_sub, ":var_10"":var_3"":var_5"),
(agent_get_item_slot, ":var_18"":var_1"5),
(try_begin),
    (store_div, ":var_19"":var_9"2),
    (store_agent_hit_points, ":var_20"":var_1"1),
    (store_div, ":var_21"":var_20"15),
    (store_add, ":var_22"":var_19"":var_21"),
    (this_or_next|neg|gt, ":var_5"":var_22"),
    (eq, ":var_18""itm_heavy_knight_armor"),
    (gt, ":var_20"":var_5"),
    (ge, ":var_5"3),
    (assign, reg1, ":var_5"),
    (assign, ":var_5"0),
    (val_sub, ":var_20", reg1),
    (agent_set_hit_points, ":var_1"":var_20"1),
    (try_begin),
        (eq, ":var_2"":var_6"),
        (display_log_message, "str_delivered_number_damage"),
    (try_end),
(try_end),
(try_begin),
    (eq, ":var_1"":var_6"),
    (try_begin),
        (this_or_next|eq, ":var_5"0),
        (eq, ":var_18""itm_heavy_knight_armor"),
        (assign, reg2, ":var_3"),
        (assign, reg3, ":var_10"),
        (assign, reg5, reg1),
    (else_try),
        (assign, reg2, ":var_3"),
        (assign, reg3, ":var_10"),
        (assign, reg5, ":var_5"),
    (try_end),
    (display_message, "str_damage_dec"),
(try_end),
(set_trigger_result, ":var_5"),

可以看到最后一行:var_5其实就是返回伤害值的。
我们在合适的位置插入我们的“诺多杀手”,我已经在上述代码中画了一条分割线,我们在分割线下面仿照itm_astraea_manifest写一个:

(try_begin),
    (eq, ":var_7""itm_cty_trp_oh_disasterhammer_nodorkiller"),#获取攻击方的主手武器
    (store_troop_faction, ":var_17"":var_8"),#存储敌方兵种的阵营
    (eq, ":var_17""fac_noldor_elves"),#判断敌方兵种阵营是否为诺多
    (val_mul, ":var_5"9),#伤害倍率
(try_end),

那可能有人会问,我能不能单独把这一小段丢进MBCE里转一下,答案是不能!
如果直接丢进去,你会发现:var_7变成了:var_0,:var_17变成了:var_1,:var_8变成:var_2……
这是因为MBCE会默认将第一个变量识别为:var_0,第二个识别为:var_1……以此类推。
所以我们将这一小段插到分割线后面,再将这一整段全部丢进MBCE,转成TXT即可。

这里又出现一个卡新手的问题,mission_templates中一共有20多处,难道要手动一个一个改吗,还容易出错。

正确做法:
·我们先将原来的一整段的 旧TXT码 包括它前面的数字(代码行数),单独拷到一个文档里
·再将修改好的一整段 新TXT码 包括它前面的数字(代码行数),单独拷到另一个文档里
·你只需ctrl+F搜旧TXT码,查找所有并替换成新TXT码即可。

附一个交流QQ群:855512521(刚创的;没人;真的没有人)

返回
返回