骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

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

[求助] team_get_leader和store_trigger_param【已解决】

[复制链接]

57

主题

953

回帖

543

积分

子爵[版主]

Rank: 7Rank: 7Rank: 7

UID
81513
第纳尔
5138
精华
1
互助
18
荣誉
5
贡献
100
魅力
123
注册时间
2008-6-26
QQ
鲜花(103) 鸡蛋(0)
发表于 2020-3-19 09:03:12 | 显示全部楼层 |阅读模式
本帖最后由 stevenxxy007 于 2020-3-24 22:15 编辑

1.team_get_leader
最近发现一个奇怪的现象,当mt中set_player_troop制定NPC当指挥官,之后调用team_get_leader,获取敌方首领的时候,获得的agent并不是敌方首领而是trp_player。
百思不得其解,这是内核的bug吗?当然,trp_player当指挥官的时候没有任何异常。所以现在导致我获取敌方首领都要通过遍历party自己实现,有点尴尬。

2.store_trigger_param_3
这个是存放触发器入参的,但是有些触发器拥有6个以上的入参,可是能存储入参的函数只有store_trigger_param_3为止,没有4,5,6等。如果是script的话至少有store_script_param
来制定入参序号获得入参的接口,但是这个trigger貌似没有这个接口,那我们要如何去获取大于3的入参呢?

以上两个问题,不知道有汽油碰到过吗?


3

主题

181

回帖

120

积分

见习骑士

Rank: 3

UID
286084
第纳尔
1293
精华
0
互助
13
荣誉
0
贡献
0
魅力
26
注册时间
2010-7-23

骑砍中文站APP会员勋章霸主正版勋章

QQ
鲜花(33) 鸡蛋(0)
发表于 2020-3-19 15:30:11 | 显示全部楼层
第一个问题,我没有使用过,所以现在没有办法回复你,

第二个问题,你举一个传6个参数的例子,我看到的传入的参数都很少,它和触发器是相关,触发器规定几个参数,就是几个参数。

  1. (ti_on_agent_killed_or_wounded, 0, 0, [],
  2.        [
  3.         (store_trigger_param_1, ":dead_agent_no"),
  4.         (store_trigger_param_2, ":killer_agent_no"),
  5.         (store_trigger_param_3, ":is_wounded"),
复制代码

以这个为例子:ti_on_agent_killed_or_wounded这个触发器就只有三个参数,不是我们随意接收参数,而是ti_on_agent_killed_or_wounded规定了只能有三个参数。我们能改变的只能是参数的名称。

评分

参与人数 2第纳尔 +210 互助 +3 魅力 +2 收起 理由
幼稚园殺手 + 10 + 1 乐于助人!
一尾锦鲤 + 200 + 2 + 2 乐于助人!

查看全部评分

《繁荣帝国》:一个最大限度基于真实的剧本,属于程序类MOD,也是smart module的孵化基础,所以繁荣帝国是完全遵循smart module工具规范的剧本。
《smart module》:骑砍源码组织利器,一个py文件就是一个神奇的module,每一个module都是一个单独的功能,可以代表是一个庞大的功能模块,也可以是一些通用类代码的集合,且每一个module无论功能大小,代码多少,都可以在多个剧本之间达到极速移植!

10

主题

69

回帖

134

积分

见习骑士

Rank: 3

UID
2818726
第纳尔
4066
精华
0
互助
10
荣誉
6
贡献
0
魅力
45
注册时间
2017-3-25

战团正版勋章霸主正版勋章

鲜花(188) 鸡蛋(0)
发表于 2020-3-19 22:16:37 | 显示全部楼层
本帖最后由 君悦 于 2020-3-19 23:54 编辑

1. 我没有遇到这个问题, 可能是你获取的方式错了。
我的调试代码:
        (try_for_range,":team_no",0,5),
          (team_get_leader,reg0,":team_no"),
          (display_message,"@{reg0}"),
        (try_end),

team_no跟mission_template里的spawn_record_no有关
譬如native中mission_template中的lead_charge, team_0为defender, team_1为attacker
暂时未知如何决定defender和attacker
默认玩家为attacker, 使用(select_enemy, 0),令玩家为defender

2. store_trigger_param         = 2070  # (store_trigger_param, <destination>, <trigger_param_no>),
譬如ti_on_agent_killed_or_wounded就有5个参数
ti_on_agent_killed_or_wounded = -26.0 # Agent has been defeated in battle (killed or wounded)
    # trigger param 1 = defeated agent_id
    # trigger param 2 = attacker agent_id
    # trigger param 3 = wounded flag: 0 = agent is killed, 1 = agent is wounded
    # trigger param 4 = hit bone
    # trigger param 5 = item_id of missile used to attack (if attack was with a ranged weapon)
生活明朗, 万物可爱

57

主题

953

回帖

543

积分

子爵[版主]

Rank: 7Rank: 7Rank: 7

UID
81513
第纳尔
5138
精华
1
互助
18
荣誉
5
贡献
100
魅力
123
注册时间
2008-6-26
QQ
鲜花(103) 鸡蛋(0)
 楼主| 发表于 2020-3-20 00:41:03 | 显示全部楼层
君悦 发表于 2020-3-19 22:16
1. 我没有遇到这个问题, 可能是你获取的方式错了。
我的调试代码:
        (try_for_range,":team_no",0 ...

第二个问题,我已经看到有这个接口了,非常感谢,之前那个手册太旧了没有写。
第一个问题,我是在set_player_troop指定NPC做指挥官后执行了team_get_leader,刚刚我也迭代了所有team,敌方team得到的agent id是0。set_player_troop指定trp_player时是好的。

谢谢这位兄台,我认识你,就是写君悦射击的那位大佬~

10

主题

69

回帖

134

积分

见习骑士

Rank: 3

UID
2818726
第纳尔
4066
精华
0
互助
10
荣誉
6
贡献
0
魅力
45
注册时间
2017-3-25

战团正版勋章霸主正版勋章

鲜花(188) 鸡蛋(0)
发表于 2020-3-20 02:41:41 | 显示全部楼层
stevenxxy007 发表于 2020-3-20 00:41
第二个问题,我已经看到有这个接口了,非常感谢,之前那个手册太旧了没有写。
第一个问题,我是在set_pl ...

我做了完整的测试, 并没有问题.
我也set_player_troop了, 一切正常
而且敌方team得到的agent_no为0不一定有问题, agent_no为0是合法的.
如果没有leader, 得到的值应该是-1

建议你先判定一下场上是否有agent_no为0的agent实体. (把他瞬移到你面前之类.. 遍历agent_no判断..

如果还是不行, 希望可以贴下相关代码
生活明朗, 万物可爱

5

主题

83

回帖

26

积分

随仆

Rank: 1

UID
3121497
第纳尔
200
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2019-12-7
鲜花(3) 鸡蛋(0)
发表于 2020-3-20 07:06:32 | 显示全部楼层
我是水贴第纳尔+1 嘿嘿

评分

参与人数 1第纳尔 -20 收起 理由
一尾锦鲤 -20 灌纯水是不对的,下次注意。(版规4-1)

查看全部评分

Every man a king 。
  让每个人都成为头顶没有王冠的国王。
休伊·皮尔斯·朗

57

主题

953

回帖

543

积分

子爵[版主]

Rank: 7Rank: 7Rank: 7

UID
81513
第纳尔
5138
精华
1
互助
18
荣誉
5
贡献
100
魅力
123
注册时间
2008-6-26
QQ
鲜花(103) 鸡蛋(0)
 楼主| 发表于 2020-3-20 09:08:19 | 显示全部楼层
首先在游戏菜单set_player_troop

随后在mt的ti_after_mission_start触发器中
(try_for_range,":team_no",0,5),
   (team_get_leader,":leader_agent",":team_no"),
   (agent_get_troop_id, reg0, ":leader_agent"),
   (display_message,"@leader:{reg0}"),
(try_end),

由于敌方的team是0,我方是4(leader_charge,默认的)
所以得到的log是,team0的时候为0(trp_player),team4的时候为1213(我的NPC),
其他team由于得不到agent所以报错跳红字(无视)。

评分

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

查看全部评分

10

主题

69

回帖

134

积分

见习骑士

Rank: 3

UID
2818726
第纳尔
4066
精华
0
互助
10
荣誉
6
贡献
0
魅力
45
注册时间
2017-3-25

战团正版勋章霸主正版勋章

鲜花(188) 鸡蛋(0)
发表于 2020-3-20 10:21:43 | 显示全部楼层
stevenxxy007 发表于 2020-3-20 09:08
首先在游戏菜单set_player_troop

随后在mt的ti_after_mission_start触发器中

我不知道为什么, 我觉得你应该是某些地方出了问题.

正常应该不会出现team4. 而是team0和team1
我建议你在native中重做一遍, 如果还是出问题, 那我也没有办法了

这是我的测试代码, 一切正常
mt:
        (key_clicked,key_t),
        (get_player_agent_no,":agent_player"),
        (assign,reg0,":agent_player"),
        (display_message,"@player:{reg0}"),
        (agent_get_look_position,pos1,":agent_player"),
        (position_move_y,pos1,100,0),
        (try_for_range,":team_no",0,5),
          (team_get_leader,":leader",":team_no"),
          (assign,reg0,":leader"),
          (display_message,"@{reg0}"),
          (ge,reg0,0),
          (agent_get_troop_id,reg1,reg0),
          (str_store_troop_name,s0,reg1),
          (display_message,s0),
        (try_end),

simple_trigger:
  (0,
   [
      (key_clicked,key_f5),
      (set_player_troop,"trp_npc4"),
   ])

评分

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

查看全部评分

鲜花鸡蛋

stevenxxy007  在2020-3-20 11:54  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下
生活明朗, 万物可爱

57

主题

953

回帖

543

积分

子爵[版主]

Rank: 7Rank: 7Rank: 7

UID
81513
第纳尔
5138
精华
1
互助
18
荣誉
5
贡献
100
魅力
123
注册时间
2008-6-26
QQ
鲜花(103) 鸡蛋(0)
 楼主| 发表于 2020-3-20 11:47:24 | 显示全部楼层
本帖最后由 stevenxxy007 于 2020-3-20 11:54 编辑
君悦 发表于 2020-3-20 10:21
我不知道为什么, 我觉得你应该是某些地方出了问题.

正常应该不会出现team4. 而是team0和team1

我再看看吧,是领军者基础上进行更改的~其他地方出问题的话,那范围太大了。
我现在的解决案是获取敌方的party然后获取party的stack为0的troop,理论上就是队长了。
另外还有个好玩的地方,指定指挥官为NPC后,trp_player有概率会变成随机脸。之前spawn_agent也发现会变随机脸~
有点搞笑

10

主题

69

回帖

134

积分

见习骑士

Rank: 3

UID
2818726
第纳尔
4066
精华
0
互助
10
荣誉
6
贡献
0
魅力
45
注册时间
2017-3-25

战团正版勋章霸主正版勋章

鲜花(188) 鸡蛋(0)
发表于 2020-3-23 16:38:07 | 显示全部楼层
stevenxxy007 发表于 2020-3-20 11:47
我再看看吧,是领军者基础上进行更改的~其他地方出问题的话,那范围太大了。
我现在的解决案是获取敌方 ...

spawn_agent会随机在troop的两个face中选一个来生成
用以下两句来固定脸
    (str_store_troop_face_keys, s0, "trp_player", 0),
    (troop_set_face_keys, "trp_player", s0, 1),
生活明朗, 万物可爱

57

主题

953

回帖

543

积分

子爵[版主]

Rank: 7Rank: 7Rank: 7

UID
81513
第纳尔
5138
精华
1
互助
18
荣誉
5
贡献
100
魅力
123
注册时间
2008-6-26
QQ
鲜花(103) 鸡蛋(0)
 楼主| 发表于 2020-3-24 00:05:55 | 显示全部楼层
本帖最后由 stevenxxy007 于 2020-3-24 00:14 编辑
君悦 发表于 2020-3-23 16:38
spawn_agent会随机在troop的两个face中选一个来生成
用以下两句来固定脸
    (str_store_troop_face_ke ...

万分感激,这个东西可是困扰了我很久的玄学问题。顺便再问一个问题,prop_instance如何绕着某个轴旋转啊?
prop_instance_rotate_to_position看说明是一边移动一边旋转到某个地方,如果我不要移动只要旋转呢?
而且它这个旋转也很困惑是绕什么轴转啊?如果我要指定绕着x,y,z轴旋转呢?

22

主题

789

回帖

383

积分

见习骑士

民间工匠

Rank: 3

UID
1115705
第纳尔
4018
精华
0
互助
24
荣誉
2
贡献
0
魅力
30
注册时间
2012-12-13
鲜花(233) 鸡蛋(10)
发表于 2020-4-8 00:36:27 | 显示全部楼层
prop_instance_rotate_to_position这个我也很迷茫,所以我就不用这个了,我猜想这个是为了解决prop_instance_animate_to_position里,大于180度的转动就会从反过来转动的问题(默认直接挪动到指定的pos,走最短的直线,而不是真的转动够你指定的度数)
所以我只用prop_instance_animate_to_position,而不用prop_instance_rotate_to_position

57

主题

953

回帖

543

积分

子爵[版主]

Rank: 7Rank: 7Rank: 7

UID
81513
第纳尔
5138
精华
1
互助
18
荣誉
5
贡献
100
魅力
123
注册时间
2008-6-26
QQ
鲜花(103) 鸡蛋(0)
 楼主| 发表于 2020-4-8 08:34:38 来自手机 | 显示全部楼层
那个rotate to position研究发现是给轮子专用的 默认就是沿着x轴自转然后再移动到某个位置
您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

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

GMT+8, 2024-5-10 05:11 , Processed in 0.137808 second(s), 28 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

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