骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

搜索
购买CDKEY 小黑盒加速器
查看: 3682|回复: 15

[功能与代码] [OSP][战团]下马骑兵自动上马AI代码

[复制链接]

46

主题

628

回帖

492

积分

骑士

Rank: 4Rank: 4

UID
3398051
第纳尔
1845
精华
0
互助
48
荣誉
5
贡献
10
魅力
341
注册时间
2022-8-13
鲜花(57) 鸡蛋(0)
发表于 2022-12-29 17:25:53 | 显示全部楼层 |阅读模式
本帖最后由 ggfgfgf 于 2023-3-11 20:02 编辑

rt,马被砍死的骑兵附近有马的话会上马,难以测试,如有问题欢迎指教:)算是个简易的bot吧

module_misson_templates.py中开头定义
添加

cavalry_ai_dismounted_remount = (
        5, 0, 0.5, [],
          [
                (try_for_agents, ":agent"),
                        (agent_is_alive, ":agent"),
                        (agent_is_non_player, ":agent"),
                        (agent_slot_eq, ":agent", slot_agent_is_running_away, 0),
                        (agent_get_troop_id, ":troop_id", ":agent"),
                        (troop_is_guarantee_horse, ":troop_id"),
                        (agent_get_horse, ":h", ":agent"),
                        (eq, ":h", -1),                                (set_show_messages, 0),
                                (agent_get_team, ":team", ":agent"),
                                (agent_get_division, ":division", ":agent"),
                                (team_give_order, ":team", ":division", 3),
                                (set_show_messages, 1),
                (try_end),
    ])



形如

............
##############################......

pilgrim_disguise = [itm_pilgrim_hood,itm_pilgrim_disguise,itm_practice_staff, itm_throwing_daggers]
af_castle_lord = af_override_horse | af_override_weapons| af_require_civilian

#新增代码
cavalry_ai_dismounted_remount = (
        5, 0, 0.5, [],
          [
                (try_for_agents, ":agent"),
                        (agent_is_alive, ":agent"),
                        (agent_is_non_player, ":agent"),
                        (agent_slot_eq, ":agent", slot_agent_is_running_away, 0),
                        (agent_get_troop_id, ":troop_id", ":agent"),
                        (troop_is_guarantee_horse, ":troop_id"),
                        (agent_get_horse, ":h", ":agent"),
                        (eq, ":h", -1),
                                (set_show_messages, 0),
                                (agent_get_team, ":team", ":agent"),
                                (agent_get_division, ":division", ":agent"),
                                (team_give_order, ":team", ":division", 3),
                                (set_show_messages, 1),
                (try_end),
    ])
#新增代码
............

在你需要的战场触发器中添加:
cavalry_ai_dismounted_remount,

这里以野战(lead_charge)为例


  (
    "lead_charge",mtf_battle_mode|mtf_synch_inventory,charge,
    "You lead your men to battle.",
    [
     (1,mtef_defenders|mtef_team_0,0,aif_start_alarmed,12,[]),
     (0,mtef_defenders|mtef_team_0,0,aif_start_alarmed,0,[]),
     (4,mtef_attackers|mtef_team_1,0,aif_start_alarmed,12,[]),
     (4,mtef_attackers|mtef_team_1,0,aif_start_alarmed,0,[]),
     ],
    [
      (ti_on_agent_spawn, 0, 0, [],
       [
         (store_trigger_param_1, ":agent_no"),
         (call_script, "script_agent_reassign_team", ":agent_no"),

         (assign, ":initial_courage_score", 5000),

............
      cavalry_ai_dismounted_remount,#新增代码
      common_battle_order_panel,
      common_battle_order_panel_tick,


    ],
  ),


代码注释:
cavalry_ai_dismounted_remount = (
        5, 0, 0.5, [], #每隔5秒触发一次,触发后延时0秒执行代码,执行后等待0.5秒
          [
                (try_for_agents, ":agent"), #循环遍历所有战场者
                        (agent_is_alive, ":agent"),                #战场者是活的
                        (agent_is_non_player, ":agent"),       #战场者不是玩家
                        (agent_get_class ,":class", ":agent"), #获取战场者兵种
                        (eq,":class",grc_archers),                  #是骑兵
                        (agent_get_horse, ":h", ":agent"),     #获取战场者的马
                        (neg|ge, ":h", 0),                             #马编号小于0,骑兵没有马匹,为下马骑兵,即需下达上马命令,使之上马
                                                                             #p.s.上马命令须在下达冲锋命令后下达,并须周围有无人骑的马匹
                                (agent_get_team, ":team", ":agent"),       #获取下马骑兵(战场者)队伍
                                (agent_get_division, ":division", ":agent"),#获取下马骑兵所属分组
                                (team_set_relation, ":team", 6, 1),          #设置临时队伍6与玩家队伍为友军
                                (get_player_agent_no, ":p"),                   #获取玩家战场编号
                                (team_set_leader, 6, ":p"),                      #设置临时队伍领导者为玩家
                                (agent_set_team, ":agent", 6),                #将下马骑兵设入临时队伍
                                (agent_set_division, ":agent", ":division"),#将下马骑兵设入临时分组
                                (team_give_order, 6, ":division", 0),         #向临时分组下达冲锋命令
                                (team_give_order, 6, ":division", 3),         #向临时分组下达上马命令,此段意在单独向该战场者下达命令
                               # (agent_set_team, ":agent", ":team"),       #还原战场者队伍为原先的
                               # (agent_set_division, ":agent", ":division"),#还原战场者所属分组为原先的

                (try_end),
    ])


module_system教程导航,by 心中飞翔
Module System的简单教程(完整版本?) - MOD制作资料区 - 骑马与砍杀中文站论坛 - Powered by Discuz! (mountblade.com.cn)


评分

参与人数 2第纳尔 +20 互助 +2 魅力 +67 收起 理由
15653910782 + 47 感谢您对骑砍中文站的支持!
Aomine Daiki + 20 + 2 + 20 文章不错,继续努力!

查看全部评分

鲜花鸡蛋

15653910782  在2023-10-7 15:28  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下
半世尘埃  在2022-12-30 10:10  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下

24

主题

3782

回帖

1162

积分

骑士

Rank: 4Rank: 4

UID
2781503
第纳尔
10448
精华
0
互助
4
荣誉
0
贡献
0
魅力
59
注册时间
2016-11-27

骑砍中文站APP会员勋章骑士美德之英勇勋章[杰出会员活跃勋章]霸主正版勋章元老骑士勋章战团正版勋章骑士美德之谦恭勋章[杰出会员财富勋章]

鲜花(97) 鸡蛋(1)
发表于 2022-12-30 11:50:21 来自手机 | 显示全部楼层
这个可以,一直很想要这个

74

主题

1695

回帖

576

积分

骑士

Rank: 4Rank: 4

UID
2733219
第纳尔
5255
精华
0
互助
5
荣誉
2
贡献
0
魅力
7
注册时间
2016-3-31

骑砍中文站APP会员勋章汉匈决战正版勋章元老骑士勋章骑士美德之英勇勋章[杰出会员活跃勋章]

鲜花(61) 鸡蛋(1)
发表于 2023-1-5 21:28:41 | 显示全部楼层
在场景内骑兵数量大的时候,不知道会不会有明显的降帧啊
文献千年国,车书万里图。
鸿庞开辟后,南服一唐虞。

46

主题

628

回帖

492

积分

骑士

Rank: 4Rank: 4

UID
3398051
第纳尔
1845
精华
0
互助
48
荣誉
5
贡献
10
魅力
341
注册时间
2022-8-13
鲜花(57) 鸡蛋(0)
 楼主| 发表于 2023-1-6 08:11:05 | 显示全部楼层
千里难行 发表于 2023-1-5 21:28
在场景内骑兵数量大的时候,不知道会不会有明显的降帧啊

不会                                        .

点评

00  发表于 2023-11-1 17:46
要是有txt添加方法就好了  发表于 2023-1-6 08:22

评分

参与人数 1魅力 +5 收起 理由
15653910782 + 5 您的帖子很有价值!

查看全部评分

鲜花鸡蛋

千里难行  在2023-1-6 20:29  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下

23

主题

339

回帖

299

积分

见习骑士

Rank: 3

UID
3189500
第纳尔
2709
精华
0
互助
26
荣誉
6
贡献
20
魅力
437
注册时间
2020-6-13
鲜花(68) 鸡蛋(0)
发表于 2023-1-6 13:19:21 | 显示全部楼层
team_give_order这个操作并不需要队伍是玩家队伍,AI队伍也能生效,所以并不需要把他设置成玩家队伍再下命令;由于team_give_order这个是对整个队伍分组的命令,所以只需要设置一次命令即可。
以下是POBD代码

(点击展开 / 收起)

B站个人空间:https://b23.tv/rZhCYpH

46

主题

628

回帖

492

积分

骑士

Rank: 4Rank: 4

UID
3398051
第纳尔
1845
精华
0
互助
48
荣誉
5
贡献
10
魅力
341
注册时间
2022-8-13
鲜花(57) 鸡蛋(0)
 楼主| 发表于 2023-1-6 16:00:17 | 显示全部楼层
apk43 发表于 2023-1-6 13:19
team_give_order这个操作并不需要队伍是玩家队伍,AI队伍也能生效,所以并不需要把他设置成玩家队伍再下命 ...

这里是为了被分组的bot不会攻击玩家队伍

23

主题

339

回帖

299

积分

见习骑士

Rank: 3

UID
3189500
第纳尔
2709
精华
0
互助
26
荣誉
6
贡献
20
魅力
437
注册时间
2020-6-13
鲜花(68) 鸡蛋(0)
发表于 2023-1-6 19:14:07 | 显示全部楼层
本帖最后由 apk43 于 2023-1-6 19:44 编辑
ggfgfgf 发表于 2023-1-6 16:00
这里是为了被分组的bot不会攻击玩家队伍

我理解您的意思了,你的意思是让下马的骑兵单独分队获得上马的命令而不影响组内其他人,但是如果把他们设置回原来的队伍和分组之后,临时分队的上马命令对他们还生效吗?你有没有测试?
B站个人空间:https://b23.tv/rZhCYpH

46

主题

628

回帖

492

积分

骑士

Rank: 4Rank: 4

UID
3398051
第纳尔
1845
精华
0
互助
48
荣誉
5
贡献
10
魅力
341
注册时间
2022-8-13
鲜花(57) 鸡蛋(0)
 楼主| 发表于 2023-1-7 10:59:30 | 显示全部楼层
apk43 发表于 2023-1-6 19:14
我理解您的意思了,你的意思是让下马的骑兵单独分队获得上马的命令而不影响组内其他人,但是如果把他们设 ...

所以说难以测试,但是没有自动冲锋,所以认为没为问题

23

主题

339

回帖

299

积分

见习骑士

Rank: 3

UID
3189500
第纳尔
2709
精华
0
互助
26
荣誉
6
贡献
20
魅力
437
注册时间
2020-6-13
鲜花(68) 鸡蛋(0)
发表于 2023-1-7 12:16:29 | 显示全部楼层
ggfgfgf 发表于 2023-1-7 10:59
所以说难以测试,但是没有自动冲锋,所以认为没为问题

按理说他们被设置成原来的队伍分组之后,就会继续执行原来的队伍分组的命令的。

我刚刚测试了几遍,没有见到下马骑兵自动上马的现象
B站个人空间:https://b23.tv/rZhCYpH

46

主题

628

回帖

492

积分

骑士

Rank: 4Rank: 4

UID
3398051
第纳尔
1845
精华
0
互助
48
荣誉
5
贡献
10
魅力
341
注册时间
2022-8-13
鲜花(57) 鸡蛋(0)
 楼主| 发表于 2023-1-7 13:11:59 | 显示全部楼层
本帖最后由 ggfgfgf 于 2023-1-7 13:43 编辑
apk43 发表于 2023-1-7 12:16
按理说他们被设置成原来的队伍分组之后,就会继续执行原来的队伍分组的命令的。

我刚刚测试了几遍,没 ...

那请教下,有什么解决办法呢?还是直接让骑兵变成另一支队伍?呃,汉匈里就是这么单独命令士兵的,可能是命令编号错了

23

主题

339

回帖

299

积分

见习骑士

Rank: 3

UID
3189500
第纳尔
2709
精华
0
互助
26
荣誉
6
贡献
20
魅力
437
注册时间
2020-6-13
鲜花(68) 鸡蛋(0)
发表于 2023-1-7 13:55:15 | 显示全部楼层
本帖最后由 apk43 于 2023-1-7 14:12 编辑
ggfgfgf 发表于 2023-1-7 13:11
呃,汉匈里就是这么单独命令士兵的,可能是命令编号错了

我才发现你把获取兵种分组搞错了,应该把
(eq,":class",grc_archers), ##这是射手
改成
(eq,":class",grc_cavalry), ##这是骑兵
而且命令编号我查了没错
mordr_mount                                = 3
尽管如此,我把它粘贴到纯净版native编译测试,还是不会自动上马。





B站个人空间:https://b23.tv/rZhCYpH

23

主题

339

回帖

299

积分

见习骑士

Rank: 3

UID
3189500
第纳尔
2709
精华
0
互助
26
荣誉
6
贡献
20
魅力
437
注册时间
2020-6-13
鲜花(68) 鸡蛋(0)
发表于 2023-1-7 14:17:35 | 显示全部楼层
本帖最后由 apk43 于 2023-1-7 14:31 编辑

我的建议是就直接开局让所有骑兵编队都获得上马的命令,就像我前面说的POBD那样。

要是执着要单独的AI,我倒是写了一个,
但是要WSE的一个操作符agent_set_horse, 测试有效,仅供参考:
(点击展开 / 收起)


评分

参与人数 1互助 +2 收起 理由
agjib + 2 乐于助人!

查看全部评分

鲜花鸡蛋

ggfgfgf  在2023-1-7 16:18  送朵鲜花  并说:感谢感谢
ggfgfgf  在2023-1-7 16:17  送朵鲜花  并说:感谢感谢
B站个人空间:https://b23.tv/rZhCYpH

33

主题

1074

回帖

342

积分

见习骑士

Rank: 3

UID
2586888
第纳尔
2310
精华
0
互助
2
荣誉
0
贡献
0
魅力
17
注册时间
2015-8-25

汉匈决战正版勋章

鲜花(149) 鸡蛋(0)
发表于 2023-10-18 16:08:16 | 显示全部楼层
武安apk43 发表于 2023-1-7 14:17
我的建议是就直接开局让所有骑兵编队都获得上马的命令,就像我前面说的POBD那样。

要是执着要单独的AI,我 ...

请问这段代码是放script.py里吗?
“你靠什么赢得尊重?”我问。
“靠我为自己权利所作的斗争。”郝劲松说,“权利是用来伸张的,否则权利就只是一张纸。”
我问他:“你以谁的名义在诉讼?”
“公民。”
“公民和普通百姓的区别是什么?”
“能独立地表达自己的观点,却不傲慢,对政治表示服从,却不卑躬屈膝。能积极地参与国家的政策,看到弱者知道同情,看到邪恶知道愤怒,我认为他才算是一个真正的公民。”
我问他最后一个问题:“你想要一个什么样的世界?”
这个年轻人说:“我想要宪法赋予我的那个世界。”

43

主题

1165

回帖

442

积分

骑士

Rank: 4Rank: 4

UID
3065189
第纳尔
675
精华
0
互助
16
荣誉
0
贡献
2
魅力
11
注册时间
2019-3-28

骑士美德之英勇勋章[杰出会员活跃勋章]

QQ
鲜花(108) 鸡蛋(0)
发表于 2023-10-18 17:18:16 | 显示全部楼层
w25747 发表于 2023-10-18 16:08
请问这段代码是放script.py里吗?

这是战场触发器,需要放到module_mission_templates里

评分

参与人数 1第纳尔 +5 互助 +1 收起 理由
agjib + 5 + 1 乐于助人!

查看全部评分

鲜花鸡蛋

w25747  在2023-10-18 20:53  送朵鲜花  并说:非常感谢!
忠 誠 勇 毅 ,心 系 社 會
您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

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

GMT+8, 2024-12-19 18:58 , Processed in 0.197008 second(s), 29 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

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