- 好友
 - 5
  
- 在线时间
 - 0 小时
  
- 最后登录
 - 2025-11-1
  
 
 
 
 
见习骑士 
  
 
- UID
 - 3199602
  
- 第纳尔
 - 1177 
  
- 精华
 - 0
  
- 互助
 - 36 
  
- 荣誉
 - 0 
  
- 贡献
 - 1 
  
- 魅力
 - 227 
  
- 注册时间
 - 2020-9-4
  
 
  鲜花( 63)   鸡蛋( 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开始算) 
 
 
 
 
 
 |   
 
 
 
 |