骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

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

[经验与教程] 【流水线】批量设置俘虏转化成对应兵种

[复制链接]

15

主题

138

回帖

146

积分

见习骑士

Rank: 3

UID
3048044
第纳尔
2016
精华
0
互助
16
荣誉
2
贡献
20
魅力
284
注册时间
2018-12-15
鲜花(30) 鸡蛋(0)
发表于 2023-5-28 11:15:36 | 显示全部楼层 |阅读模式
在开始前说一下,这个做法一共分为三种slot保存法,可以理解为三层结构分别是faction、partytemplate和party,范围最广的(faction)泛用性越高,和需要特定配置的(pt),最后是只根据pt生成,且非跟随faction的(例如巡逻队类)会使用party,但实际上完全可以用faction里另加的手段来避免这个情况,因此大部分情况下是不会使用party的slot用于存放转化兵种数据的。我在这下面会用一个简单的脚本作为一个例子,可以作为参考或是思路引子。
首先准备工作

constant中为faction和partyt emplate两种slot分别添加五个slot对应等级每x级作为间隔的俘虏(可以根据自身情况灵活调整)
(如果你问我constant里的东西加在哪,那我的评价是你先做几个小时mod再回来看这个帖子)
slot_pt_prisonar_change_troop1   = 8
slot_pt_prisonar_change_troop2   = 9
slot_pt_prisonar_change_troop3   = 10
slot_pt_prisonar_change_troop4   = 11
slot_pt_prisonar_change_troop5   = 12



slot_faction_prisonar_change_troop1  = 151
slot_faction_prisonar_change_troop2  = 152
slot_faction_prisonar_change_troop3  = 153
slot_faction_prisonar_change_troop4  = 154
slot_faction_prisonar_change_troop5  = 155

数字均可以根据你的个人情况调整
以上是绑定的兵种,接下来我们再给pt的slot中添加一个控制上限的,可加可不加,也可以手操
如果你要用这个办法添加的话,除非是指定只有几个野怪有转化能力,否则应当开局先用try_for_range循一遍template来让所有野怪有一个基础的最大转化量
slot_pt_prisonar_max_change_limit   = 13

然后在simple trigger里添加一个转化间隙的触发器
  (48,   #cd,根据我个人电子斗蛐蛐经验48小时最好
   [
     (try_for_parties,":party"),  #巡查所有party
       (gt,":party","p_你已定义party的最后一个"),#如果你准备让城镇也有这个效果,应使用towns_begin
       (neg|party_slot_eq,":party",slot_party_type,spt_village_farmer),  #屏蔽部分类型的部队节省算力,可以自行在constant中搜索spt查询
       (party_get_num_companions,":cur_size",":party"),
       (party_get_template_id,":template_id",":party"),
      (try_begin),
        (party_template_get_slot,":limit",":template_id",slot_pt_prisonar_max_change_limit),
        (neq,":limit",0),  #保证作者不会过劳死因此未赋值的情况下忽略
       (else_try),
        (assign,":limit",500),  #否则定一个上限
      (try_end),
       (lt,":cur_size",":limit"),   #不大于上限再进行转化
       (store_faction_of_party,":faction",":party"),   #这里也是为了存信息的,这样调用脚本比较方便(懒)
       (call_script,"script_changing_prisonar",":party",":template_id",":faction"),
     (try_end),
      ]),

然后在script里新建一个脚本


    ("changing_prisonar",[

      (store_script_param, ":party", 1),
      (store_script_param, ":template", 2),  
      (store_script_param, ":faction", 3),
      (assign,":continue",0),   #先把是否继续否定
    (try_begin),      #用个大try套上是因为我懒得用cf_
      (try_begin),
         (this_or_next|eq,":template", "pt_outlaw_looter"),          #先指定会继承faction转化的部队类型,这里使用is_between语句也可以很好的泛用
         (party_slot_eq,":party",slot_party_type,spt_kingdom_hero_party),   #然后领主部队也会继承,如果你准备让town和castle也能够转化也需要在这里加上
         (faction_get_slot,":add1",":faction",slot_faction_prisonar_change_troop1),
         (faction_get_slot,":add2",":faction",slot_faction_prisonar_change_troop2),
         (faction_get_slot,":add3",":faction",slot_faction_prisonar_change_troop3),
         (faction_get_slot,":add4",":faction",slot_faction_prisonar_change_troop4),
         (faction_get_slot,":add5",":faction",slot_faction_prisonar_change_troop5),
         (assign,":continue",1),  
       (else_try),   
         (eq,":template", "pt_tibes_living"),   #只根据pt转化的类型
         (party_template_get_slot,":add1",":template",slot_pt_prisonar_change_troop1),   
         (party_template_get_slot,":add2",":template",slot_pt_prisonar_change_troop2),
         (party_template_get_slot,":add3",":template",slot_pt_prisonar_change_troop3),
         (party_template_get_slot,":add4",":template",slot_pt_prisonar_change_troop4),
         (party_template_get_slot,":add5",":template",slot_pt_prisonar_change_troop5),
         (assign,":continue",1),         
      (try_end),      
         (eq,":continue",1),          #如果继续
         (party_get_num_prisoner_stacks, ":num_stacks",":party"),   #获取部队的俘虏堆数
         (try_for_range, ":troop_iterator", 0, ":num_stacks"),  #巡一遍
           (party_prisoner_stack_get_troop_id, ":cur_troop_id", ":party", ":troop_iterator"),  #获取对应槽的俘虏的troop的id
           (neg|troop_is_hero, ":cur_troop_id"),  #不是英雄
           (party_count_prisoners_of_type, ":size",":party", ":cur_troop_id"),   #获取部队里的该类型俘虏数量
           (try_begin),
             (gt,":size",6),  #我设定的,大于6个的情况下随机转化2到6个
             (store_random_in_range,":move_num",2,7),
            (else_try),
             (assign,":move_num",":size"),  #小于6直接转化全部
           (try_end),
           (store_character_level,":level",":cur_troop_id"),
           (val_div,":level",9),  #我设定的,等级除以9来决定槽12345,可以根据你定的槽数和设定进行修改
           (try_begin),
             (le,":level",1),  #这部分略显臃肿,还有优化空间,不过鉴于这是个script平时也不看问题不大
             (party_remove_prisoners,":party",":cur_troop_id",":move_num"),
             (party_add_members,":party",":add1",":move_num"),
            (else_try),
             (le,":level",2),
             (party_remove_prisoners,":party",":cur_troop_id",":move_num"),
             (party_add_members,":party",":add2",":move_num"),
            (else_try),
             (le,":level",3),
             (party_remove_prisoners,":party",":cur_troop_id",":move_num"),
             (party_add_members,":party",":add3",":move_num"),
            (else_try),
             (le,":level",4),
             (party_remove_prisoners,":party",":cur_troop_id",":move_num"),
             (party_add_members,":party",":add4",":move_num"),
            (else_try),
             (party_remove_prisoners,":party",":cur_troop_id",":move_num"),
             (party_add_members,":party",":add5",":move_num"),            
           (try_end),           
         (try_end),
       (try_end),  
    ]),

这样就完成了
最后是设定部分,我建议在item_info最顶上加,在游戏开始时为所有的faction和特殊template设定对应的槽位
例如
     (faction_set_slot,"fac_outlaws",slot_faction_prisonar_change_troop1,"trp_"),
     (faction_set_slot,"fac_outlaws",slot_faction_prisonar_change_troop2,"trp_"),
     (faction_set_slot,"fac_outlaws",slot_faction_prisonar_change_troop3,"trp_"),
     (faction_set_slot,"fac_outlaws",slot_faction_prisonar_change_troop4,"trp_"),
     (faction_set_slot,"fac_outlaws",slot_faction_prisonar_change_troop5,"trp_"),  

以及
(party_template_set_slot,"pt_",slot_pt_prisonar_change_troop1,""),
(party_template_set_slot,"pt_",slot_pt_prisonar_change_troop2,""),
(party_template_set_slot,"pt_",slot_pt_prisonar_change_troop3,""),
(party_template_set_slot,"pt_",slot_pt_prisonar_change_troop4,""),
(party_template_set_slot,"pt_",slot_pt_prisonar_change_troop5,"),

很简单对不对
(如果你学不会我可要攻击你了)


评分

参与人数 1第纳尔 +10 魅力 +1 收起 理由
agjib + 10 + 1 您的帖子很有价值!

查看全部评分

29

主题

688

回帖

550

积分

骑士

Rank: 4Rank: 4

UID
3322408
第纳尔
1738
精华
0
互助
67
荣誉
0
贡献
0
魅力
4
注册时间
2022-2-3
鲜花(55) 鸡蛋(0)
发表于 2023-5-28 12:59:28 来自手机 | 显示全部楼层
吓我一跳释放忍术。来自: Android客户端

15

主题

138

回帖

146

积分

见习骑士

Rank: 3

UID
3048044
第纳尔
2016
精华
0
互助
16
荣誉
2
贡献
20
魅力
284
注册时间
2018-12-15
鲜花(30) 鸡蛋(0)
 楼主| 发表于 2023-5-28 16:50:29 | 显示全部楼层
112233lyh 发表于 2023-5-28 12:59
吓我一跳释放忍术。

安修,奥克苏恩
您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

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

GMT+8, 2024-4-19 19:42 , Processed in 0.104905 second(s), 26 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

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