其实代码就几行,但对新手来说,要改的位置太多了,而且有些注意事项可能会忽略。
我们要在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", 0, 100),
(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", 1, 11),
(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(刚创的;没人;真的没有人)