骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

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

[功能与代码] 将俘虏转化为奴隶兵

[复制链接]

3

主题

38

回帖

22

积分

随仆

Rank: 1

UID
3280741
第纳尔
277
精华
0
互助
2
荣誉
0
贡献
0
魅力
1
注册时间
2021-10-21
鲜花(1) 鸡蛋(0)
发表于 2024-1-14 18:05:32 | 显示全部楼层 |阅读模式
本帖最后由 ghmhcgm 于 2024-1-14 18:16 编辑

这是我的帖子武装士兵修改版。(只需付钱) - MOD制作技术区 - 骑马与砍杀中文站论坛 - Powered by Discuz! (mountblade.com.cn)的拓展,用队伍里的俘虏来换取奴隶兵。(我没有合适的兵种,就只能拿斯骑示范了。)功能我测试过一遍了,有些小问题,但大体还能用。这也算是一篇半求助帖子吧。下面进入正题:
在module_game_menus.py中加入这几段代码:

      ("camp_arms",[],"arms.",
       [(jump_to_menu,"mnu_camp_arms"),
        ]
       ),##添加到营地菜单

然后到menu最后]之前添加。
  ("camp_arms",0,
   "what do you want to the armed forces?",
   "none",
   [
     ],
    [

      ("camp_national_army",[  
          (party_get_num_prisoners, ":prisoner", "p_main_party"), #检测俘虏数量
          (ge, ":prisoner", 5),#数量大于5
      ],"army.",
       [(party_get_num_prisoner_stacks, ":num_stacks", "p_main_party"),
          (try_for_range_backwards, ":i_stack", 0, ":num_stacks"),
           (party_prisoner_stack_get_troop_id, ":troop_no", "p_main_party", ":i_stack"),# 获取囚犯首领id
           (neg|troop_is_hero, ":troop_no"),# 不是英雄
           (val_add, ":troop_no", 1),
           (ge,":num_stacks",5),
           (party_remove_prisoners, "p_main_party", ":num_stacks", 5),#移除五个俘虏
           (party_add_members,"p_main_party","trp_swadian_man_at_arms",1),#得到一个奴隶兵
          (else_try),
           (display_message,"@no_injuries",0xFFFFFFFF),
           (jump_to_menu,"mnu_camp"),
          (try_end),

       ),
     ("camp_money_to_morale_back",[],"Go back.",#返回
       [(jump_to_menu, "mnu_camp"),
        ]
       ),
    ]
)
这就是代码部分,但不知怎的这字符串会出现两遍,我把图放出来,希望有大佬能帮忙完善一下。本人不会py,技术实在有限。

微信图片_20240114180806_new.png

3

主题

38

回帖

22

积分

随仆

Rank: 1

UID
3280741
第纳尔
277
精华
0
互助
2
荣誉
0
贡献
0
魅力
1
注册时间
2021-10-21
鲜花(1) 鸡蛋(0)
 楼主| 发表于 2024-1-14 18:11:30 | 显示全部楼层
本帖最后由 ghmhcgm 于 2024-1-14 18:14 编辑

忘记发图了

27

主题

218

回帖

259

积分

见习骑士

Rank: 3

UID
3225805
第纳尔
1483
精华
0
互助
37
荣誉
0
贡献
0
魅力
256
注册时间
2021-3-14
鲜花(48) 鸡蛋(0)
发表于 2024-1-14 20:55:09 | 显示全部楼层

循环问题啊 ,你漏了

评分

参与人数 2第纳尔 +20 收起 理由
幼稚园殺手 + 10 乐于助人!
Aomine Daiki + 10 乐于助人!

查看全部评分

鲜花鸡蛋

ghmhcgm  在2024-1-14 22:01  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下

3

主题

38

回帖

22

积分

随仆

Rank: 1

UID
3280741
第纳尔
277
精华
0
互助
2
荣誉
0
贡献
0
魅力
1
注册时间
2021-10-21
鲜花(1) 鸡蛋(0)
 楼主| 发表于 2024-1-14 22:01:39 | 显示全部楼层
快乐风猫 发表于 2024-1-14 20:55
循环问题啊 ,你漏了

请问需要怎么改,能教我一下吗?或者说说要用哪个条件语句,比如说不用循环也可以的那种。我还没学会py,只知道一些有注释过条件语句,谢谢。

27

主题

218

回帖

259

积分

见习骑士

Rank: 3

UID
3225805
第纳尔
1483
精华
0
互助
37
荣誉
0
贡献
0
魅力
256
注册时间
2021-3-14
鲜花(48) 鸡蛋(0)
发表于 2024-1-16 12:59:08 | 显示全部楼层
本帖最后由 快乐风猫 于 2024-1-16 13:02 编辑
ghmhcgm 发表于 2024-1-14 22:01
请问需要怎么改,能教我一下吗?或者说说要用哪个条件语句,比如说不用循环也可以的那种。我还没学会py, ...

("camp_national_army",[  
          (party_get_num_prisoners, ":prisoner", "p_main_party"), #检测俘虏数量
          (ge, ":prisoner", 5),#数量大于5
      ],"army.",
       [(party_get_num_prisoner_stacks, ":num_stacks", "p_main_party"),
          (try_for_range_backwards, ":i_stack", 0, ":num_stacks"),
           (party_prisoner_stack_get_troop_id, ":troop_no", "p_main_party", ":i_stack"),# 获取囚犯首领id
           (neg|troop_is_hero, ":troop_no"),# 不是英雄
           (val_add, ":troop_no", 1),
          (try_begin),
           (ge,":num_stacks",5),
           (party_remove_prisoners, "p_main_party", ":num_stacks", 5),#移除五个俘虏
           (party_add_members,"p_main_party","trp_swadian_man_at_arms",1),#得到一个奴隶兵
          (else_try),
           (display_message,"@no_injuries",0xFFFFFFFF),
           (jump_to_menu,"mnu_camp"),
          (try_end),
          (try_end),

       ),


如果有多个 (else_try),判断条件的话 必须要 (try_begin),开始,最后(try_end),来结束,还有try_for_range也需要(try_end),来结束循环,有多少try_for_range就要多少个(try_end),来结束循环

评分

参与人数 1第纳尔 +10 收起 理由
幼稚园殺手 + 10 乐于助人!

查看全部评分

鲜花鸡蛋

ghmhcgm  在2024-1-16 23:44  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下

3

主题

38

回帖

22

积分

随仆

Rank: 1

UID
3280741
第纳尔
277
精华
0
互助
2
荣誉
0
贡献
0
魅力
1
注册时间
2021-10-21
鲜花(1) 鸡蛋(0)
 楼主| 发表于 2024-1-16 23:44:01 | 显示全部楼层
快乐风猫 发表于 2024-1-16 12:59
("camp_national_army",[  
          (party_get_num_prisoners, ":prisoner", "p_main_party"), #检测俘 ...

谢谢大佬,学到东西了。

3

主题

29

回帖

10

积分

随仆

圣殿骑士团[KT]
战团ID:拉斐尔伯爵

Rank: 1

UID
2383113
第纳尔
129
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2014-12-27

战团正版勋章维京征服正版勋章

鲜花(0) 鸡蛋(0)
发表于 2024-9-12 00:02:51 | 显示全部楼层
请问大佬,我借鉴你的代码想用魔球做个能给大地图上所有部队定时将俘虏减少转化为奴兵的触发器,但是一直无法生效,能麻烦帮忙看一下吗
(try_for_parties,":var_0"),
    (party_get_template_id,":var_1",":var_0"),
    (eq,":var_1","pt_kingdom_hero_party"),
    (party_get_num_prisoners,":var_5",":var_1"),
    (ge,":var_5",5),
    (party_remove_prisoners,":var_1",":var_5",5),
    (party_add_members,":var_1","trp_vill_nubing",5),
(try_end),

0

主题

5

回帖

7

积分

平民

Rank: 1

UID
3684151
第纳尔
0
精华
0
互助
1
荣誉
0
贡献
0
魅力
0
注册时间
2024-8-3
鲜花(0) 鸡蛋(0)
发表于 2024-9-12 10:42:17 | 显示全部楼层
(try_for_parties,":var_0"),
    (party_get_template_id,":var_1",":var_0"),
    (eq,":var_1","pt_kingdom_hero_party"),  # 这条语句判断只有玩家战队才会继续往下执行
    (party_get_num_prisoners,":var_5",":var_1"),
    (ge,":var_5",5),
    (party_remove_prisoners,":var_1",":var_5",5),
    (party_add_members,":var_1","trp_vill_nubing",5),
(try_end),

3

主题

29

回帖

10

积分

随仆

圣殿骑士团[KT]
战团ID:拉斐尔伯爵

Rank: 1

UID
2383113
第纳尔
129
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2014-12-27

战团正版勋章维京征服正版勋章

鲜花(0) 鸡蛋(0)
发表于 2024-9-13 00:19:41 | 显示全部楼层
ukatoilol 发表于 2024-9-12 10:42
(try_for_parties,":var_0"),
    (party_get_template_id,":var_1",":var_0"),
    (eq,":var_1","pt_king ...

感谢指点,我改动了一下,现在添加奴兵的功能正常了,但是不能正常的减少俘虏数量,请问大佬有头绪吗
(try_for_parties,":var_0"),
    (party_get_num_prisoners,":var_5",":var_1"),
    (ge,":var_5",5),
    (party_remove_prisoners,":var_0",":var_5",5),
    (party_add_members,":var_0","trp_vill_nubing",5),
(try_end),

0

主题

5

回帖

7

积分

平民

Rank: 1

UID
3684151
第纳尔
0
精华
0
互助
1
荣誉
0
贡献
0
魅力
0
注册时间
2024-8-3
鲜花(0) 鸡蛋(0)
发表于 2024-9-13 12:07:31 | 显示全部楼层
本帖最后由 ukatoilol 于 2024-9-13 12:30 编辑

你的代码实现不了移除俘虏的功能.
(party_remove_members,<party_id>,<troop_id>,<number>),
这个函数需要参数包括(party_remove_members, 队伍ID, 俘虏的兵种ID, 移除的数量),
你的代码里就没有获取过"俘虏的兵种ID"这个必要的参数

大概的写了下实现代码思路,不保证运行不报错

  1. (try_for_parties,":party"), # 循环所有队伍
  2.    (party_get_num_prisoner_stacks, ":num_stacks", ":party"), # 获取队伍中俘虏的总数,包含英雄
  3.    (ge, ":num_stacks", 5), # 队伍的俘虏数量大等于5个
  4.    (assign, ":removed_cnt", 0) # 记录已移除俘虏的数量
  5.    (try_for_range_backwards, ":i_stack", 0, ":num_stacks"), # 循环俘虏
  6.      (lt, ":removed_cnt", 5), # 移除数量不超过5个
  7.      (party_prisoner_stack_get_troop_id, ":troop_no", ":party", ":i_stack"),# 获取俘虏的兵种ID
  8.      (neg|troop_is_hero, ":troop_no"),# 俘虏不是英雄
  9.      (party_remove_prisoners, ":party", ":troop_no", 1),# 移除1个俘虏
  10.      (val_add, ":removed_cnt", 1), # 已移除数量+1
  11.    (try_end),
  12.    (gt, ":removed_cnt", 0), # 是否至少移除了一个俘虏
  13.    (party_add_members,":party","trp_vill_nubing",1),#得到一个奴隶兵
  14. (try_end),
复制代码



3

主题

29

回帖

10

积分

随仆

圣殿骑士团[KT]
战团ID:拉斐尔伯爵

Rank: 1

UID
2383113
第纳尔
129
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2014-12-27

战团正版勋章维京征服正版勋章

鲜花(0) 鸡蛋(0)
发表于 2024-9-18 18:12:57 | 显示全部楼层
ukatoilol 发表于 2024-9-13 12:07
你的代码实现不了移除俘虏的功能.
(party_remove_members,,,),
这个函数需要参数包括(party_remove_member ...

收到,我试试!感谢大佬!
您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

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

GMT+8, 2024-12-27 12:30 , Processed in 0.145846 second(s), 28 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

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