骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

搜索
购买CDKEY 衣谷三国
查看: 121|回复: 0

[功能与代码] 领主与领地换兵(ms/txt)

[复制链接]

47

主题

104

回帖

225

积分

见习骑士

Rank: 3

UID
3199602
第纳尔
1167
精华
0
互助
36
荣誉
0
贡献
1
魅力
227
注册时间
2020-9-4
鲜花(61) 鸡蛋(0)
发表于 前天 23:28 | 显示全部楼层 |阅读模式
本帖最后由 奥杜因阿卡托什 于 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开始算)





您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

Archiver|手机版|小黑屋|骑马与砍杀中文站

GMT+8, 2025-9-21 05:18 , Processed in 0.072034 second(s), 18 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表