本帖最后由 AntiN0m1 于 2025-1-27 20:52 编辑
先上懒人福利:只需要在module_triggers.py里加入以下触发器就行了(可以用魔球修改):
- (0, 0, 1,
- [
- (faction_slot_eq, "$players_kingdom", slot_faction_ai_state, sfai_feast),
- (check_quest_active, "qst_organize_feast"),
- (quest_slot_eq, "qst_organize_feast", slot_quest_target_center, "$g_encountered_party"),
- (neg|map_free),
- ],
- [
- (call_script, "script_internal_politics_rate_feast_to_s9", "trp_household_possessions", 120, "$players_kingdom", 0),
- (assign, ":quality_of_feast", reg0),
- (try_begin),
- (ge, ":quality_of_feast", 20),
- (quest_get_slot, ":feast_center", "qst_organize_feast", slot_quest_target_center),
- (store_current_hours, "$g_current_hours"),
- (party_clear, "p_temp_party"),
- (call_script, "script_get_heroes_attached_to_center_aux", ":feast_center", "p_temp_party"),
- (party_get_num_companion_stacks, ":num_stacks","p_temp_party"),
- (try_for_range, ":i_stack", 0, ":num_stacks"),
- (party_stack_get_troop_id, ":stack_troop","p_temp_party",":i_stack"),
- (troop_get_slot, "$g_talk_troop_last_talk_time", ":stack_troop", slot_troop_last_talk_time),
- (store_sub, "$g_time_since_last_talk","$g_current_hours","$g_talk_troop_last_talk_time"),
- (ge, "$g_time_since_last_talk", 24),
- (troop_set_slot, ":stack_troop", slot_troop_last_talk_time, "$g_current_hours"),
- (call_script, "script_troop_change_relation_with_troop", ":stack_troop", "trp_player", 1),
- (try_end),
- (try_end),
- ]
- ),
复制代码
|
只要玩家在城里休息,就可以自动与参加宴会的领主加关系了。而且是对每个领主只要可以对话加关系,就立即生效,很智能,与那些每天一次的触发器不同。
2025/1/27更新:把 (0,0,1, 改成 (1,0,0, 吧,用起来没有可感知的区别,但占用资源少些。
下面详细说明一下:
先在module_dialogs.py里找到宴会加关系的对话:
- [anyone,"lord_start", [
- ##对话条件
- (faction_slot_eq, "$g_talk_troop_faction", slot_faction_ai_state, sfai_feast),
- (faction_slot_eq, "$g_talk_troop_faction", slot_faction_ai_object, "$g_encountered_party"),
-
- (check_quest_active, "qst_organize_feast"),
- (quest_slot_eq, "qst_organize_feast", slot_quest_target_center, "$g_encountered_party"),
- (try_begin), ##这些不用看
- (eq, "$g_talk_troop_faction", "fac_kingdom_4"),
- (str_store_string, s5, "str_flagon_of_mead"),
- (else_try),
- (store_mod, ":mode", "$g_talk_troop", 2),
- (eq, ":mode", 0),
- (eq, "$g_talk_troop_faction", "fac_kingdom_3"),
- (str_store_string, s5, "str_skin_of_kumis"),
- (else_try),
- (store_mod, ":mode", "$g_talk_troop", 2),
- (eq, ":mode", 0),
- (eq, "$g_talk_troop_faction", "fac_kingdom_2"),
- (str_store_string, s5, "str_mug_of_kvass"),
- (else_try),
- (str_store_string, s5, "str_cup_of_wine"),
- (try_end),
- ],
- "I lift a {s5} to your health, {playername}! You are most gracious to host us on this occasion. Now, what is it?", "lord_talk",[
- ##以下是加关系的代码
- (call_script, "script_internal_politics_rate_feast_to_s9", "trp_household_possessions", 120, "$players_kingdom", 0),
- (assign, ":quality_of_feast", reg0),
-
- (try_begin),
- (ge, ":quality_of_feast", 20),
- (ge, "$g_time_since_last_talk", 24),
- (call_script, "script_troop_change_relation_with_troop", "$g_talk_troop", "trp_player", 1),
- (try_end),
- ]],
复制代码
|
其中有个全局变量$g_time_since_last_talk,代表上次对话后过的时间,效果是最少每24小时对话才能加关系。注意每次对话后都会使其重新计算,所以频繁对话会导致无法加关系。
它是在文件开头的第一个对话里定义的:
- (store_current_hours, "$g_current_hours"),
- (troop_get_slot, "$g_talk_troop_last_talk_time", "$g_talk_troop", slot_troop_last_talk_time),
- (troop_set_slot, "$g_talk_troop", slot_troop_last_talk_time, "$g_current_hours"),
- (store_sub, "$g_time_since_last_talk","$g_current_hours","$g_talk_troop_last_talk_time"),
复制代码
|
我首先想的是屏蔽掉module_dialogs.py里加关系的代码,用一个冷却时间24小时的触发器去每天和参加宴会的领主加关系:
- (0, 0, 24,
- [
- (check_quest_active, "qst_organize_feast"),
- (faction_slot_eq, "$players_kingdom", slot_faction_ai_state, sfai_feast),
- ],
- [
- (try_begin),
- (call_script, "script_internal_politics_rate_feast_to_s9", "trp_household_possessions", 120, "$players_kingdom", 0),
- (assign, ":quality_of_feast", reg0),
- (ge, ":quality_of_feast", 20),
- (quest_get_slot, ":feast_center", "qst_organize_feast", slot_quest_target_center),
- ##according to script_enter_court
- (party_clear, "p_temp_party"),
- (call_script, "script_get_heroes_attached_to_center_aux", ":feast_center", "p_temp_party"),
- (party_get_num_companion_stacks, ":num_stacks","p_temp_party"),
- (try_for_range, ":i_stack", 0, ":num_stacks"),
- (party_stack_get_troop_id, ":stack_troop","p_temp_party",":i_stack"),
- (call_script, "script_troop_change_relation_with_troop", ":stack_troop", "trp_player", 1),
- (try_end),
- (try_end),
- ]
- ),
复制代码
|
这个方法简单粗暴,但与实战情况相去甚远,无论玩家在哪都会加关系。而且本来可以对话加关系的领主,如果在触发器触发前离开了,就加不了关系了。
最后我决定用一个冷却时间1小时的触发器去模拟与参加宴会领主的对话。玩家只要在城里休息,就能自动模拟与可加关系领主对话的效果,相当于智能地替玩家操作了,与原本的实战情况相当吻合,而且不用屏蔽原代码。
就是本贴开头的触发器,这里注释说明一下:
- (0, 0, 1,
- [
- ##把对话条件修改一下搬过来
- (faction_slot_eq, "$players_kingdom", slot_faction_ai_state, sfai_feast),
- (check_quest_active, "qst_organize_feast"),
- (quest_slot_eq, "qst_organize_feast", slot_quest_target_center, "$g_encountered_party"),
- (neg|map_free), ##保证玩家在城里
- ],
- [
- ##加关系的宴会质量条件搬过来
- (call_script, "script_internal_politics_rate_feast_to_s9", "trp_household_possessions", 120, "$players_kingdom", 0),
- (assign, ":quality_of_feast", reg0),
- (try_begin),
- (ge, ":quality_of_feast", 20),
- (quest_get_slot, ":feast_center", "qst_organize_feast", slot_quest_target_center),
- (store_current_hours, "$g_current_hours"),
- ##找到要加关系的领主,根据script_enter_court
- (party_clear, "p_temp_party"),
- (call_script, "script_get_heroes_attached_to_center_aux", ":feast_center", "p_temp_party"),
- (party_get_num_companion_stacks, ":num_stacks","p_temp_party"),
- (try_for_range, ":i_stack", 0, ":num_stacks"),
- (party_stack_get_troop_id, ":stack_troop","p_temp_party",":i_stack"),
- ##模拟与其对话
- (troop_get_slot, "$g_talk_troop_last_talk_time", ":stack_troop", slot_troop_last_talk_time),
- (store_sub, "$g_time_since_last_talk","$g_current_hours","$g_talk_troop_last_talk_time"),
- (ge, "$g_time_since_last_talk", 24), ##注意在上次对话1天之后才再次对话
- (troop_set_slot, ":stack_troop", slot_troop_last_talk_time, "$g_current_hours"),
- (call_script, "script_troop_change_relation_with_troop", ":stack_troop", "trp_player", 1),
- (try_end),
- (try_end),
- ]
- ),
复制代码
|
其中提到的script_enter_court,我在上个帖子中有用到,本贴参照的是其代码中【###5.城内领主】的那一段。
上个帖子的链接:https://bbs.mountblade.com.cn/thread-2108427-1-1.html
另附上战后自动加关系的链接:https://bbs.mountblade.com.cn/thread-2040974-1-1.html
|