- 好友
- 4
- 在线时间
- 0 小时
- 最后登录
- 2025-9-20
见习骑士

- UID
- 3199602
- 第纳尔
- 1167
- 精华
- 0
- 互助
- 36
- 荣誉
- 0
- 贡献
- 1
- 魅力
- 227
- 注册时间
- 2020-9-4
 鲜花( 61)  鸡蛋( 0)
|
本帖最后由 奥杜因阿卡托什 于 2025-9-19 23:31 编辑
领主如果部队现人数少于理想规模的50%,就会试图返回它自己名下驻军最多的一个城镇。在它自己的城镇里休整征兵时,领主会从驻军里所有级别兵种中随机抽取部队补齐,但不会使城镇驻军少于100。大概就是这样的功能。
这个是有人托我做的,结果在我这里测试了可以,在他那里却因未知原因失败了,总之先把源码和txt改法都放出来。
py代码:
在module_triggers.py里加入:
(1, 1, 0,
[
(try_for_range, ":troop_no", active_npcs_begin, active_npcs_end),
(troop_slot_eq, ":troop_no", slot_troop_occupation, slto_kingdom_hero),#是领主
(troop_get_slot, ":party_no", ":troop_no", slot_troop_leaded_party),
(ge, ":party_no", 1), #有在带兵
(party_is_active, ":party_no"),
(party_get_attached_to, ":cur_attached_party", ":party_no"),#部队存在且没有依附于某个据点(没在征兵)
(le, ":cur_attached_party", 0),
(call_script, "script_party_get_ideal_size", ":party_no"),
(assign, ":ideal_size", reg0),
(party_get_num_companions, ":party_size", ":party_no"),#总人数
(val_mul, ":party_size", 2),
(lt, ":party_size", ":ideal_size"),#部队人数不到理想人数的一半
(assign, ":count_no", 0),
(assign, ":target_center_no", 0),
(try_for_range, ":center_no", walled_centers_begin, walled_centers_end),
(party_slot_eq, ":center_no", slot_town_lord, ":troop_no"),
(party_slot_eq, ":center_no", slot_center_is_besieged_by, -1),#属于该领主且没被围攻的城
(party_get_num_companions, ":center_party_size", ":center_no"),#总人数
(ge, ":center_party_size", 100),#换兵的城驻军不能少于100
(gt, ":center_party_size", ":count_no"),
(assign, ":target_center_no", ":center_no"),#获取驻军最多的城
(try_end),
(gt, ":target_center_no", 0),
(party_set_slot, ":party_no", slot_party_orders_object, ":target_center_no"),
(party_set_slot, ":party_no", slot_party_orders_type, spai_retreating_to_center),
(try_end),
],
[
(try_for_range, ":troop_no", active_npcs_begin, active_npcs_end),
(troop_slot_eq, ":troop_no", slot_troop_occupation, slto_kingdom_hero),#是领主
(troop_get_slot, ":party_no", ":troop_no", slot_troop_leaded_party),
(ge, ":party_no", 1), #有在带兵
(party_is_active, ":party_no"),
(party_get_attached_to, ":cur_attached_party", ":party_no"),
(gt, ":cur_attached_party", 0),
(party_slot_eq, ":cur_attached_party", slot_town_lord, ":troop_no"),#部队正在领主自己的城里
(call_script, "script_party_get_ideal_size", ":party_no"),
(assign, ":ideal_size", reg0),
(party_get_num_companions, ":party_size", ":party_no"),#总人数
(val_mul, ":party_size", 2),
(lt, ":party_size", ":ideal_size"),#部队人数不到理想人数的一半
(party_get_num_companions, ":center_party_size", ":cur_attached_party"),#总人数
(ge, ":center_party_size", 100),#换兵的城驻军不能少于100
(val_sub, ":ideal_size", ":party_size"),#所需数量
(call_script, "script_change_troop", ":party_no", ":cur_attached_party", ":ideal_size"),#换兵
(try_end),
]),
在脚本里加入
#用于领主和城镇换兵中的迭代,直到领主补足部队到理想人数、或者城镇部队少于100为止
("change_troop", [
(store_script_param, ":party_no", 1),
(store_script_param, ":center_no", 2),
(store_script_param, ":ideal_size", 3),#所需数量
(try_begin),
(party_get_num_companions, ":center_party_size", ":center_no"),#总人数
(lt, ":center_party_size", 100),#换兵的城驻军少于100,无法继续换兵
(else_try),
(party_get_num_companion_stacks, ":num_stacks", ":center_no"),
(store_random_in_range, ":target_stack", 0, ":num_stacks"),#随机抽一种兵
(party_stack_get_troop_id, ":stack_troop", ":center_no", ":target_stack"),
(neg|troop_is_hero, ":stack_troop"),#不是英雄
(party_stack_get_size, ":stack_size", ":center_no", ":target_stack"),
(store_random_in_range, ":target_stack_size", 1, ":stack_size"),#随机抽走一定数量
(val_min, ":target_stack_size", ":ideal_size"),
(party_remove_members, ":center_no", ":stack_troop", ":target_stack_size"),#从城镇中移除,添加到领主部队
(party_add_members, ":party_no", ":stack_troop", ":target_stack_size"),
(val_sub, ":ideal_size", ":target_stack_size"),
(le, ":ideal_size", 0),#所需数量归零,停止迭代,否则继续下一个分支,再次迭代
(else_try),
(call_script, "script_change_troop", ":party_no", ":center_no", ":ideal_size"),
(try_end),
]),
txt(魔球)改法:
先在scripts.txt中,顶部数字加1,在最后加入
change_troop -1
21 23 2 1224979098644774912 1 23 2 1224979098644774913 2 23 2 1224979098644774914 3 4 0 1601 2 1224979098644774915 1224979098644774913 2147483678 2 1224979098644774915 100 5 0 1650 2 1224979098644774916 1224979098644774913 2136 3 1224979098644774917 0 1224979098644774916 1652 3 1224979098644774918 1224979098644774913 1224979098644774917 2147485155 1 1224979098644774918 1653 3 1224979098644774919 1224979098644774913 1224979098644774917 2136 3 1224979098644774920 1 1224979098644774919 2110 2 1224979098644774920 1224979098644774914 1615 3 1224979098644774913 1224979098644774918 1224979098644774920 1610 3 1224979098644774912 1224979098644774918 1224979098644774920 2106 2 1224979098644774914 1224979098644774920 2147483680 2 1224979098644774914 0 5 0 1 4 936748722493063937 1224979098644774912 1224979098644774913 1224979098644774914 3 0
魔球新建一触发器,时间填1、1和0
触发条件:
(try_for_range,":var_0","trp_npc1","trp_knight_relatives_begin"),
(540,":var_0",2,2),
(troop_get_slot,":var_1",":var_0",10),
(ge,":var_1",1),
(party_is_active,":var_1"),
(1694,":var_2",":var_1"),
(neg|gt,":var_2",0),
(call_script,"script_83",":var_1"),
(assign,":var_3",reg0),
(party_get_num_companions,":var_4",":var_1"),
(val_mul,":var_4",2),
(neg|ge,":var_4",":var_3"),
(assign,":var_5",0),
(assign,":var_6",0),
(try_for_range,":var_7","p_town_1","p_village_1_1"),
(541,":var_7",7,":var_0"),
(541,":var_7",54,1),
(party_get_num_companions,":var_8",":var_7"),
(ge,":var_8",100),
(gt,":var_8",":var_5"),
(assign,":var_6",":var_7"),
(try_end),
(gt,":var_6",0),
(party_set_slot,":var_1",246,":var_6"),
(party_set_slot,":var_1",245,14),
(try_end),
script_83对应的数字每个mod不同,为scripts.txt中party_get_ideal_size对应的序号(从0开始数)。可以利用反编译器和魔球快速获取。
触发结果:
(try_for_range,":var_0","trp_npc1","trp_knight_relatives_begin"),
(540,":var_0",2,2),
(troop_get_slot,":var_1",":var_0",10),
(ge,":var_1",1),
(party_is_active,":var_1"),
(1694,":var_2",":var_1"),
(gt,":var_2",0),
(541,":var_2",7,":var_0"),
(call_script,"script_83",":var_1"),
(assign,":var_3",reg0),
(party_get_num_companions,":var_4",":var_1"),
(val_mul,":var_4",2),
(neg|ge,":var_4",":var_3"),
(party_get_num_companions,":var_5",":var_2"),
(ge,":var_5",100),
(val_sub,":var_3",":var_4"),
(call_script,"script_769",":var_1",":var_2",":var_3"),
(try_end),
83号脚本同上,769号脚本为新加入的change_troop对应的序号,不过由于加在最后,所以应该是当前序号减1(从0开始算)
|
|