骑马与砍杀中文站论坛

标题: 请问怎么修改AI城池兵力低于一定数值自动增兵? [打印本页]

作者: 回火的熏鱼    时间: 2021-8-17 21:47
标题: 请问怎么修改AI城池兵力低于一定数值自动增兵?
AI的城池兵力一般低于“X”个左右就会自动增加兵力,每过24小时增加一次。我想修改这个“X”,比如把AI城池兵力低于200个左右就会自动增兵改为低于1000个左右就会自动增兵。琢磨很久了,整不明白。有知道的大佬么

作者: 幼稚园殺手    时间: 2021-8-17 21:52
首先循环所有城市,然后获取城市的兵力party_get_num_companions,当这个兵力低于一个你想要的数量,就增加一定的兵种(这个可以自由发挥),就是可能看起来有点怪怪的,因为领主增兵也是要钱的,没钱加再多的也要解散
作者: 回火的熏鱼    时间: 2021-8-17 21:58
幼稚园殺手 发表于 2021-8-17 21:52
首先循环所有城市,然后获取城市的兵力party_get_num_companions,当这个兵力低于一个你想要的数量,就增加 ...

谢谢。战团就有这个机制,请问可以修改它吗?如果能,请问怎么修改呢?
作者: 幼稚园殺手    时间: 2021-8-17 22:01
回火的熏鱼 发表于 2021-8-17 21:58
谢谢。战团就有这个机制,请问可以修改它吗?如果能,请问怎么修改呢?

我刚刚的回答已经说了
首先循环所有城市try_for_range,然后获取城市的兵力party_get_num_companions,当这个兵力低于一个你想要的数量lt ,就增加一定的兵种party_add_members
作者: 回火的熏鱼    时间: 2021-8-17 22:08
幼稚园殺手 发表于 2021-8-17 22:01
我刚刚的回答已经说了
首先循环所有城市try_for_range,然后获取城市的兵力party_get_num_companions, ...

谢谢!您对我很有帮助
作者: 回火的熏鱼    时间: 2021-8-17 23:20
幼稚园殺手 发表于 2021-8-17 22:01
我刚刚的回答已经说了
首先循环所有城市try_for_range,然后获取城市的兵力party_get_num_companions, ...

大佬,不好意思又打扰你了。可能我表述有问题,我是想在原有的代码上进行修改。AI的城池兵力一般低于“X”个左右就会自动增加兵力,我想修改这个“X”。但是我不怎么看得懂代码,您可以帮帮我吗?
这是我想修改的代码:
(24.000000,
[
    (try_for_range, ":var_0", "trp_npc_adonja", "trp_knight_1_1_wife"),
        (troop_slot_eq, ":var_0", slot_troop_occupation, 2),
        (troop_get_slot, ":var_1", ":var_0", slot_troop_leaded_party),
        (ge, ":var_1", 1),
        (party_is_active, ":var_1"),
        (party_get_attached_to, ":var_2", ":var_1"),
        (is_between, ":var_2", "p_town_1", "p_salt_mine"),
        (party_slot_eq, ":var_2", slot_center_is_besieged_by, -1),
        (store_faction_of_party, ":var_3", ":var_1"),
        (try_begin),
            (this_or_next|eq, ":var_3", "fac_player_supporters_faction"),
            (eq, ":var_3", "$players_kingdom"),
            (assign, ":var_4", 1),
            (store_random_in_range, ":var_5", 0, 2),
            (val_add, ":var_4", ":var_5"),
        (else_try),
            (game_get_reduce_campaign_ai, ":var_6"),
            (try_begin),
                (eq, ":var_6", 0),
                (assign, ":var_4", 2),
            (else_try),
                (eq, ":var_6", 1),
                (assign, ":var_4", 1),
                (store_random_in_range, ":var_5", 0, 2),
                (val_add, ":var_4", ":var_5"),
            (else_try),
                (eq, ":var_6", 2),
                (assign, ":var_4", 1),
            (try_end),
        (try_end),
        (try_begin),
            (faction_slot_eq, ":var_3", slot_faction_marshall, ":var_0"),
            (val_add, ":var_4", 1),
        (try_end),
        (try_for_range, ":var_7", 0, ":var_4"),
            (call_script, "script_hire_men_to_kingdom_hero_party", ":var_0"),
        (try_end),
    (try_end),
    (try_for_range, ":var_8", "p_town_1", "p_village_1"),
        (neg|party_slot_eq, ":var_8", slot_town_lord, "trp_player"),
        (party_slot_ge, ":var_8", slot_town_lord, 1),
        (party_slot_eq, ":var_8", slot_center_is_besieged_by, -1),
        (store_faction_of_party, ":var_9", ":var_8"),
        (try_begin),
            (this_or_next|eq, ":var_9", "fac_player_supporters_faction"),
            (eq, ":var_9", "$players_kingdom"),
            (assign, ":var_10", 450),
        (else_try),
            (game_get_reduce_campaign_ai, ":var_6"),
            (assign, ":var_10", 450),
            (try_begin),
                (eq, ":var_6", 0),
                (assign, ":var_10", 300),
                (store_random_in_range, ":var_4", 0, 2),
                (val_add, ":var_4", 1),
            (else_try),
                (eq, ":var_6", 1),
                (assign, ":var_10", 450),
                (assign, ":var_4", 1),
            (else_try),
                (eq, ":var_6", 2),
                (assign, ":var_10", 600),
                (store_random_in_range, ":var_4", 0, 2),
            (try_end),
        (try_end),
        (try_for_range, ":var_7", 0, ":var_4"),
            (party_get_slot, ":var_11", ":var_8", slot_town_wealth),
            (assign, ":var_12", ":var_11"),
            (val_div, ":var_12", 2),
            (gt, ":var_12", ":var_10"),
            (call_script, "script_cf_reinforce_party", ":var_8"),
            (val_sub, ":var_11", ":var_10"),
            (party_set_slot, ":var_8", slot_town_wealth, ":var_11"),
        (try_end),
    (try_end),
    (try_for_range, ":var_8", "p_town_1", "p_salt_mine"),
        (neg|is_between, ":var_8", "p_castle_1", "p_village_1"),
        (call_script, "script_get_center_ideal_prosperity", ":var_8"),
        (assign, ":var_13", reg0),
        (party_get_slot, ":var_14", ":var_8", slot_town_prosperity),
        (try_begin),
            (gt, ":var_14", ":var_13"),
            (call_script, "script_change_center_prosperity", ":var_8", -1),
            (val_add, "$newglob_total_prosperity_from_convergence", -1),
        (else_try),
            (neg|ge, ":var_14", ":var_13"),
            (call_script, "script_change_center_prosperity", ":var_8", 1),
            (val_add, "$newglob_total_prosperity_from_convergence", 1),
        (try_end),
    (try_end),
作者: 幼稚园殺手    时间: 2021-8-17 23:24
回火的熏鱼 发表于 2021-8-17 23:20
大佬,不好意思又打扰你了。可能我表述有问题,我是想在原有的代码上进行修改。AI的城池兵力一般低于“X ...

领主要招募兵种要和自己的钱有关,而不是你想随意多少就多少的吧?凭空增加兵种也不是我很建议的事情,得按照机制来定
作者: 回火的熏鱼    时间: 2021-8-17 23:30
幼稚园殺手 发表于 2021-8-17 23:24
领主要招募兵种要和自己的钱有关,而不是你想随意多少就多少的吧?凭空增加兵种也不是我很建议的事情,得 ...

我已经修改过领主的工资了。我只是想修改城镇和城堡的招兵机制。我测试过了,有的城堡低于220人就开始招兵,有的城堡低于170人才开始招兵。我就是想修改这个判定的数值,比如城堡低于1000人就开始招兵。麻烦大佬了。
作者: 幼稚园殺手    时间: 2021-8-17 23:35
回火的熏鱼 发表于 2021-8-17 23:30
我已经修改过领主的工资了。我只是想修改城镇和城堡的招兵机制。我测试过了,有的城堡低于220人就开始招 ...

好吧,应该是hire_men_to_kingdom_hero_party这个脚本
作者: 回火的熏鱼    时间: 2021-8-17 23:49
幼稚园殺手 发表于 2021-8-17 23:35
好吧,应该是hire_men_to_kingdom_hero_party这个脚本

非常感谢!大佬晚安
作者: 回火的熏鱼    时间: 2021-8-18 11:20
幼稚园殺手 发表于 2021-8-17 23:35
好吧,应该是hire_men_to_kingdom_hero_party这个脚本

大佬大佬,不好意思再次打扰你,我把hire_men_to_kingdom_hero_party能改的数值都改完测试了测试没变化。
("hire_men_to_kingdom_hero_party",
[
    (store_script_param_1, ":var_0"),
    (troop_get_slot, ":var_1", ":var_0", slot_troop_leaded_party),
    (troop_get_slot, ":var_2", ":var_0", slot_troop_wealth),
    (assign, ":var_3", ":var_2"),
    (val_mul, ":var_3", 3),
    (val_div, ":var_3", 4),
    (call_script, "script_party_get_ideal_size", ":var_1"),
    (assign, ":var_4", reg0),
    (store_mul, ":var_5", ":var_4", 3),
    (val_div, ":var_5", 2),
    (party_get_num_companions, ":var_6", ":var_1"),
    (store_faction_of_party, ":var_7", ":var_1"),
    (try_begin),
        (this_or_next|eq, ":var_7", "fac_player_supporters_faction"),
        (eq, ":var_7", "$players_kingdom"),
        (assign, ":var_8", 450),
    (else_try),
        (game_get_reduce_campaign_ai, ":var_9"),
        (assign, ":var_8", 450),
        (try_begin),
            (eq, ":var_9", 0),
            (assign, ":var_8", 300),
        (else_try),
            (eq, ":var_9", 1),
            (assign, ":var_8", 450),
        (else_try),
            (eq, ":var_9", 2),
            (assign, ":var_8", 600),
        (try_end),
    (try_end),
    (assign, ":var_10", 1),
    (try_for_range, ":var_11", 0, ":var_10"),
        (try_begin),
            (neg|ge, ":var_6", ":var_4"),
            (gt, ":var_3", ":var_8"),
            (gt, ":var_1", 0),
            (call_script, "script_cf_reinforce_party", ":var_1"),
            (val_sub, ":var_2", ":var_8"),
            (troop_set_slot, ":var_0", slot_troop_wealth, ":var_2"),
        (else_try),
            (gt, ":var_6", ":var_5"),
            (store_troop_faction, ":var_12", ":var_0"),
            (party_get_num_companion_stacks, ":var_13", ":var_1"),
            (assign, ":var_14", 0),
            (assign, ":var_15", 0),
            (try_for_range_backwards, ":var_16", 0, ":var_13"),
                (party_stack_get_troop_id, ":var_17", ":var_1", ":var_16"),
                (neg|troop_is_hero, ":var_17"),
                (party_stack_get_size, ":var_18", ":var_1", ":var_16"),
                (store_character_level, ":var_19", ":var_17"),
                (store_troop_faction, ":var_20", ":var_17"),
                (try_begin),
                    (eq, ":var_12", ":var_20"),
                    (val_mul, ":var_19", 3),
                (try_end),
                (val_mul, ":var_19", ":var_18"),
                (val_add, ":var_14", ":var_18"),
                (val_add, ":var_15", ":var_19"),
            (try_end),
            (gt, ":var_14", 0),
            (store_div, ":var_21", ":var_15", ":var_14"),
            (try_for_range_backwards, ":var_16", 0, ":var_13"),
                (party_stack_get_troop_id, ":var_17", ":var_1", ":var_16"),
                (neg|troop_is_hero, ":var_17"),
                (party_stack_get_size, ":var_18", ":var_1", ":var_16"),
                (store_character_level, ":var_19", ":var_17"),
                (store_troop_faction, ":var_20", ":var_17"),
                (try_begin),
                    (eq, ":var_12", ":var_20"),
                    (val_mul, ":var_19", 3),
                (try_end),
                (store_sub, ":var_22", ":var_21", ":var_19"),
                (val_div, ":var_22", 3),
                (store_add, ":var_23", 10, ":var_22"),
                (gt, ":var_23", 0),
                (call_script, "script_get_percentage_with_randomized_round", ":var_18", ":var_23"),
                (gt, reg0, 0),
                (party_remove_members, ":var_1", ":var_17", reg0),
            (try_end),
        (try_end),
    (try_end),
作者: 幼稚园殺手    时间: 2021-8-18 11:26
回火的熏鱼 发表于 2021-8-18 11:20
大佬大佬,不好意思再次打扰你,我把hire_men_to_kingdom_hero_party能改的数值都改完测试了测试没变化。 ...

这个脚本是给国家的英雄雇佣兵,和领主的财富有关,我不知道你改了什么东西,首先要修改不是随便改几个数字,首先你要看懂这个脚本的意思,他加的不是固定值
作者: 回火的熏鱼    时间: 2021-8-18 13:16
幼稚园殺手 发表于 2021-8-18 11:26
这个脚本是给国家的英雄雇佣兵,和领主的财富有关,我不知道你改了什么东西,首先要修改不是随便改几个数 ...

谢谢大佬,我知道不是固定值,但是我看不懂。。。
作者: NEW_SHIT    时间: 2021-8-20 13:14
不用改动原来的文件,直接加大地图触发器就行了
作者: 黑脸小白    时间: 2021-8-20 13:39
楼上说的没错,在你不知道怎么修改战团原来的代码的情况下,你完全可以重新加一个触发器,看了你的描述,直接加没问题,毕竟你设置的是一个阈值,比如1000,没有1000这个触发器就会触发。
不过可以给一些小建议:
1、征兵确实需要跟领主的财富挂钩,不然就乱套了。你搜索slot_troop_wealth,这个是领主的财富,你找找就能知道他与招兵的关系;slot_town_wealth是城镇的财富,你也可以用起来,用代码做一些新的,远比修改有趣得多;
2、战团里招兵,我记得是根据cf_reinforce_party脚本招募的,他会自动获取该阵营的一二三阶征兵模板,不过你得需要设定招募次数,比如这样:
        (try_for_range, ":unused", 0, 10),
          (call_script, "script_cf_reinforce_party", ":center_no"),
        (try_end),  这样就是招募10次模板
作者: 回火的熏鱼    时间: 2021-8-22 19:59
黑脸小白 发表于 2021-8-20 13:39
楼上说的没错,在你不知道怎么修改战团原来的代码的情况下,你完全可以重新加一个触发器,看了你的描述,直 ...

非常感谢!
作者: 回火的熏鱼    时间: 2021-8-23 00:28
黑脸小白 发表于 2021-8-20 13:39
楼上说的没错,在你不知道怎么修改战团原来的代码的情况下,你完全可以重新加一个触发器,看了你的描述,直 ...

请问大佬能帮我修改错误吗?萌新太菜了。

(try_for_range,":var_0","p_town_1","p_castle_48"),
(party_get_num_companions,":var_1",":var_0"),
(try_begin),
(neg|ge,":var_1",1000),
(else_try),
(try_for_range,":var_0",0,10),
    (call_script,"script_238",":var_0"),
(try_end),

作者: fmn    时间: 2021-9-3 20:29
借贵宝地求助,类似的需求:

如果一个城堡、城镇的兵数超过50,就不让再增加了,这个可以做到吗?

同样,我还想限制领主的带兵数,限制最多带10个,请问有办法吗?


作者: NEW_SHIT    时间: 2021-9-3 21:02
https://bbs.mountblade.com.cn/thread-2080945-1-1.html
这是我写的帖子,不知道对你有没有用
作者: 少林寺    时间: 2021-9-4 00:16
fmn 发表于 2021-9-3 20:29
借贵宝地求助,类似的需求:

如果一个城堡、城镇的兵数超过50,就不让再增加了,这个可以做到吗?

可以,具体逻辑:大地图循环party,
party_get_num_companions  记录人数,大于多少人数就否定接下来的代码。
作者: 黑脸小白    时间: 2021-9-4 09:04
本帖最后由 黑脸小白 于 2021-9-4 09:15 编辑
回火的熏鱼 发表于 2021-8-23 00:28
请问大佬能帮我修改错误吗?萌新太菜了。

(try_for_range,":var_0","p_town_1","p_castle_48"),

不好意思,系统居然没提示我有回复,才看到……
阁下这个是魔球的格式吗?有几个小问题:
1、MS的代码,有几个try开头,就必须要有几个try_end结束,阁下这段代码里出现了三次try开头的操作,却只有一个try_end……
2、else_try是在有多种情况下才用,这段代码只需要判断是否有1000个兵这一种情况,因此不需要分支判断;
  1. (try_for_range,":var_0","p_town_1","p_castle_48"),
  2.     (party_get_num_companions,":var_1",":var_0"),
  3.     (neg|ge,":var_1",1000),
  4.     (try_for_range,":unused",0,10),##这里要用unused,这个变量在MS里可以没有具体含义,不然用其他的话,编译会提示你未赋值。
  5.         (call_script,"script_238",":var_0"),
  6.     (try_end),
  7. (try_end),
复制代码

作者: NEW_SHIT    时间: 2021-9-4 11:38
受教了

作者: 回火的熏鱼    时间: 2022-11-1 02:52
黑脸小白 发表于 2021-9-4 09:04
不好意思,系统居然没提示我有回复,才看到……
阁下这个是魔球的格式吗?有几个小问题:
1、MS的代码 ...

感谢!牛牛牛牛牛牛




欢迎光临 骑马与砍杀中文站论坛 (https://bbs.mountblade.com.cn/) Powered by Discuz! X3.4