- 好友
- 2
- 在线时间
- 27 小时
- 最后登录
- 2025-3-30
贵族[MOD作者]
  
- UID
- 3048044
- 第纳尔
- 2219
- 精华
- 0
- 互助
- 19
- 荣誉
- 3
- 贡献
- 20
- 魅力
- 495
- 注册时间
- 2018-12-15
 鲜花( 40)  鸡蛋( 0)
|
在开始前说一下,这个做法一共分为三种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,"),
很简单对不对
(如果你学不会我可要攻击你了)
|
评分
-
查看全部评分
|