骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

搜索
查看: 3101|回复: 7

[功能与代码] 【新手向】本人用前辈代码微调的城镇招兵/城镇募兵

[复制链接]

15

主题

139

回帖

151

积分

见习骑士

Rank: 3

UID
3048044
第纳尔
2026
精华
0
互助
17
荣誉
2
贡献
20
魅力
284
注册时间
2018-12-15
鲜花(30) 鸡蛋(0)
发表于 2022-2-12 12:17:47 | 显示全部楼层 |阅读模式
本帖最后由 黑暗路西法 于 2022-5-19 14:35 编辑

借鉴(cahoxi)了有限幻想前辈, 圣殿骑士的光辉前辈,hushuailiner2前辈的教程,主攻俺寻思搞出了一个城镇招兵的代码,纯新手向,适合和我一样还没搞明白py但想diy的人入门
(大佬就不用看了,想必米娜桑都是有自己解决方法的)

帮助兼讨论:村庄招兵代码 分析 及修改 (参考了在玩家没有势力的情况下招别的东西)
https://bbs.mountblade.com.cn/thread-251902-1-1.html


【分享】一个简单的城镇招兵功能(想加独立菜单的需要参考这个)
https://bbs.mountblade.com.cn/thread-1881038-1-1.html

给玩家城镇添加招兵菜单  (PY分享)(参考了控制文化和关系)
https://bbs.mountblade.com.cn/thread-1559344-1-1.html


存放代码的位置可以参考上面两个帖子里的

      ("功能名字",[                 条件
                                            (this_or_next|party_slot_eq, "$g_encountered_party", slot_party_type, spt_town),   检查城市或城堡,如果单独检查一个可以把
                                            (party_slot_eq, "$g_encountered_party", slot_party_type, spt_castle),  可以换成 (party_slot_eq, "$g_encountered_party", slot_party_type, spt_village),塞到村庄里
                                           (store_troop_gold,":wanjiaqian","trp_player"),      检查玩家是否有足够的钱,可以修改或去掉      
                                           (ge,":wanjiaqian", 数字),      
                                            (player_has_item,"物品"),原文里就有的条件
                                            (troops_can_join, 数字),        玩家部队剩余的位置
                                            (party_get_slot, ":guanxi", "$g_encountered_party", slot_center_player_relation),   
                                            (ge,":guanxi", 大于的数字),    检查地点和玩家的关系

                                            (eq, "$soldier6", 0),  这个是针对于全局的,如果准备用slot版本可以换一个   
                                                                                                                       ],
            "存在感极低的功能名字",[ 结果
                                           (party_get_slot, ":wenhua", "$g_encountered_party", slot_center_culture),
                                            (store_faction_of_party, ":wenhua","$g_encountered_party"),  
                                            (faction_get_slot,reg50,":wenhua",slot_faction_tier_2_troop),    (学来的检查文化代码,我这里用tier2是在自己的mod里一个势力搞了三条兵种树,tier2是正规军和村兵区别开) (实际上constant里面可以注册tier6789的,py里有预留位置,在script搜各国tier照葫芦画瓢就行了)                                      
                                            (try_begin),(主攻俺寻思寻思出来的一个思路(为了显得自己不是纯缝合的大可爱),用于给不同的玩家)
                                              (this_or_next|eq, ":center_faction", "fac_player_supporters_faction"),(从分析村庄帖子里学来的如何检查玩家阵营)
                                              (eq, ":center_faction", "$players_kingdom"),  (如果玩家势力同属一个则什么都不会发生)(还可以把这一块顺序调换,比如你的mod里玩家有对应神器就优先选择有神器情况下能招募的兵,放在无事发生上面)

                                            (else_try),
                                              (main_party_has_troop,"trp_npc13"), (俺寻思出来的东西,在有特定npc的时候控制“别的东西”为一个兵种,可以改成任意东西,一种思路)
                                              (assign,reg50, "兵种"),  
                                            (else_try),
                                              (store_random_in_range,reg50,0,10),(如果这个城市不是玩家所属势力,则给玩家塞别的东西,这是个百分比概率可以换成所有数字,下面跟上就可以了)
                                              (is_between,reg50,0,3),
                                              (assign,reg50, "兵种a"),
                                            (else_try),
                                              (is_between,reg50,3,6),
                                              (assign,reg50, "兵种b"),
                                            (else_try),
                                              (is_between,reg50,6,10),
                                              (assign,reg50, "兵种c"),
                                            (try_end),
                                             (party_add_members,"p_main_party",reg50,数字),   (添加变量的兵种)(同色部分属于一个东西,如果你的预设只是本文中的一部分,那么把不需要的同色删掉就可以了)
                                              (troop_remove_gold,"trp_player",钱),   
                                              (troop_remove_item,"trp_player","物品"),  
                                              (assign, "$soldier6", 1),   接上面同款颜色的代码,接下来你可以在trigger里面搞点便宜触发器或者不搞来制造一次性界面
                                         ]),



潜水几年的第一帖,好歹是脱离纯参考阶段了



2022/5/19更新 拓展部分  知识水平要求搞明白局部变量的相互关联,以及能看懂一部分代码

slot版本(也就是每个据点独立计算招募cd)
首先跑constant那里注册一个party的slot     搜索##  PARTY SLOTS            #############################能找到这个栏目
之后将上方紫色的文字部分替换,首先是条件栏目里的检查全局变量(eq, "$soldier6", 0),
改为
(party_slot_eq,"$g_encountered_party",slot_你起的名字,预期数值), #用于检查,比如说如果你单纯的想写成cd那么这里可以设置为0 #注意,如果你准备听了我下方那个加量小修改,这里应该修改为大于等于正数,也就是party_slot_eq改为ge,预期数值为正数
这个预期数值是根据你的后续意愿更改的,如果只是单纯的检查是否能招募可以简单的检测cd可以用0,下面那个招募后cd用1

将下方触发后的便宜全局变量(assign, "$soldier6", 1),修改改为
(party_set_slot,"$g_encountered_party",slot_你起的名字,预期数值),  #用于覆盖,例如你只想做单纯的cd的话,这个情况下预期数值改为1#注意,如果你准备听了我下方那个拓展,这里应该修改预期数值为0,
而招募次数则应该写的复杂点,改为
###############
(party_get_slot,局部变量,"$g_encountered_party",slot_你起的名字),
(val_sub,局部变量,数值), #这里扣除局部变量,等同削减招募次数
(party_set_slot,"$g_encountered_party",slot_你起的名字,局部变量),
###############
同上所述,因为条件改为要求大于等于正数,所以这里扣除次数如果到了0那么是无法接着招募的


之后在trigger写一个触发器
  (检查时间,检查间隔, 0.0,
  [],                                            ##单纯作为cd的话没必要设置条件,更深入的修改例如检查玩家是否属于某个势力这种情况下我认为应该作为条件添加在下方的try_for_range里,如果是作为间隔检查一类(例如玩家有物品可以加快cd这种情况)可以多写几个克隆的触发器用于分开检测,运用还是很多的

这里仅做一个简单例子,也就是上面简单cd话题的延续
  [
    (try_for_range, ":cur_center", centers_begin, centers_end),  #循环一遍算“据点”的部队
        (party_get_slot, 局部变量, ":cur_center", slot_你起的名字), #检查slot
        (eq,局部变量,触发后的数值), #如果你是根据上面那个搞未触发0触发了1那么这里填1
        (party_set_slot, ":cur_center", slot_你起的名字,原本数值),  #同上,这里填0
    (try_end),
  ]),
这个实际上可以再做一点小拓展,例如如果你想做一些小联动,例如储存募兵次数之类的,那么可以在这里修改一下
将下文
        (eq,局部变量,触发后的数值),
        (party_set_slot, ":cur_center", slot_你起的名字,原本数值),  

改为
       (val_add,局部变量,你的预期数值),
        (party_set_slot, ":cur_center", slot_你起的名字,局部变量),  
#举个例子,如果你想把这个拓展用在招募兵种的数量上面,那么之后你在(party_add_members,"p_main_party",reg50,数字), 这里,可以在他下方再加两行


(party_get_slot,局部变量,"$g_encountered_party",slot_你起的名字),
(party_add_members,"p_main_party",reg50,局部变量),


#这样就是储存每次触发增长数值,隔长时间募兵可以一次性多招募一些,如果你想要一个硬上限,可以在检查slot里改一下,在val_add前面加一行(lt,局部变量,你的预期上限),就是少于这个上限才加储存的可招募士兵
因为触发条件是大于等于所以这样添加了才能触发(见上注)
如果你想把这个拓展用于招募次数上也可以,设置上限和后续修改同上注释即可,就是隔的时间长一点会增加招募次数,两个拓展如果是一起用我建议你搞两个slot

然后这两个拓展的具体修改的后续上面也写了

评分

参与人数 2第纳尔 +20 互助 +2 魅力 +15 收起 理由
幼稚园殺手 + 10 + 1 + 5 文章不错,继续努力!
muyiboy + 10 + 1 + 10 文章不错,继续努力!

查看全部评分

鲜花鸡蛋

Aomine Daiki  在2022-2-12 15:16  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下
幼稚园殺手  在2022-2-12 13:57  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下

15

主题

139

回帖

151

积分

见习骑士

Rank: 3

UID
3048044
第纳尔
2026
精华
0
互助
17
荣誉
2
贡献
20
魅力
284
注册时间
2018-12-15
鲜花(30) 鸡蛋(0)
 楼主| 发表于 2022-2-12 12:31:30 | 显示全部楼层
对于最后的数字,如果想模拟一下随机性就在加兵代码上面加一条(store_random_in_range,reg5,数字,数字),然后把加兵代码里的具体数字改成变量(party_add_members,"p_main_party",reg50,reg5),   
如果想搞一个全局变量cd可以在trigger里做一个便宜触发器
  (多久检查一次, 延迟多久, 什么时候重置,  (检查时间内是不会触发的,所以也能当便宜cd用,比如赏金猎人就不是你打死一队立马秽土转生出来一队)
  [
    (eq, "$soldier6", 1),
  ],
  [
   (assign, "$soldier6", 0),
  ]),
骑砍的全局变量非常便宜,只要"$任意东西"就算一个新的,所以我自己是加了一队乱七八糟的这东西的

55

主题

2716

回帖

1756

积分

子爵[版主]

吟游诗人

Rank: 7Rank: 7Rank: 7

UID
3054380
第纳尔
23959
精华
2
互助
57
荣誉
44
贡献
916
魅力
1418
注册时间
2019-1-18

骑砍中文站APP会员勋章原版正版勋章战团正版勋章火与剑正版勋章拿破仑正版勋章维京征服正版勋章霸主正版勋章剧本设计大奖赛骑友真人秀Ⅷ勋章骑友真人秀Ⅶ勋章骑友真人秀Ⅸ勋章

QQ
鲜花(506) 鸡蛋(2)
发表于 2022-2-12 13:57:08 | 显示全部楼层
挺好的,就是有些代码的颜色太花了,看的眼睛难受。
@stevenxxy007 来给这个帖子加点分吧
珍惜 奉献 不负韶华

15

主题

139

回帖

151

积分

见习骑士

Rank: 3

UID
3048044
第纳尔
2026
精华
0
互助
17
荣誉
2
贡献
20
魅力
284
注册时间
2018-12-15
鲜花(30) 鸡蛋(0)
 楼主| 发表于 2022-2-12 15:01:39 | 显示全部楼层
幼稚园殺手 发表于 2022-2-12 13:57
挺好的,就是有些代码的颜色太花了,看的眼睛难受。
@stevenxxy007 来给这个帖子加点分吧

我觉得颜色花里胡哨应该能比较直观的让没动过几次ms(比如曾经看代码还要一顿分析什么是什么的我)的人理解这些操作符是可以随意增减的(比如说相互对应这些),除了红色和深绿色的部分其他的把同色去掉可以当无事发生这样

55

主题

2716

回帖

1756

积分

子爵[版主]

吟游诗人

Rank: 7Rank: 7Rank: 7

UID
3054380
第纳尔
23959
精华
2
互助
57
荣誉
44
贡献
916
魅力
1418
注册时间
2019-1-18

骑砍中文站APP会员勋章原版正版勋章战团正版勋章火与剑正版勋章拿破仑正版勋章维京征服正版勋章霸主正版勋章剧本设计大奖赛骑友真人秀Ⅷ勋章骑友真人秀Ⅶ勋章骑友真人秀Ⅸ勋章

QQ
鲜花(506) 鸡蛋(2)
发表于 2022-2-12 15:13:53 | 显示全部楼层
黑暗路西法 发表于 2022-2-12 15:01
我觉得颜色花里胡哨应该能比较直观的让没动过几次ms(比如曾经看代码还要一顿分析什么是什么的我)的人理 ...

不是,是太花了,花到看不清楚了,你那个换成村庄的可以改一下,这个颜色太花了
珍惜 奉献 不负韶华

15

主题

139

回帖

151

积分

见习骑士

Rank: 3

UID
3048044
第纳尔
2026
精华
0
互助
17
荣誉
2
贡献
20
魅力
284
注册时间
2018-12-15
鲜花(30) 鸡蛋(0)
 楼主| 发表于 2022-2-12 15:20:13 | 显示全部楼层
幼稚园殺手 发表于 2022-2-12 15:13
不是,是太花了,花到看不清楚了,你那个换成村庄的可以改一下,这个颜色太花了

好了

鲜花鸡蛋

幼稚园殺手  在2022-2-12 15:26  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下

8

主题

25

回帖

15

积分

随仆

Rank: 1

UID
3300893
第纳尔
195
精华
0
互助
1
荣誉
0
贡献
0
魅力
0
注册时间
2021-12-21
鲜花(0) 鸡蛋(0)
发表于 2022-2-23 14:17:50 | 显示全部楼层
谢谢大佬,备注很贴心了

0

主题

3

回帖

6

积分

平民

Rank: 1

UID
3324529
第纳尔
37
精华
0
互助
1
荣誉
0
贡献
0
魅力
0
注册时间
2022-2-8
鲜花(0) 鸡蛋(0)
发表于 2022-3-18 12:54:32 来自手机 | 显示全部楼层
谢谢大佬,备注很贴心了
您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

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

GMT+8, 2024-5-27 17:38 , Processed in 0.127231 second(s), 25 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

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