找回密码
 点一下
查看: 3044|回复: 24

【已解决!】当事件采用变量时触发玩家会获取错误吗!?

[复制链接]
发表于 2020-10-20 02:16:41 | 显示全部楼层 |阅读模式
本帖最后由 Prinny 于 2020-11-11 14:56 编辑

如图,当采用下图的触发,英雄单位进区域时发生问题:
1)玩家英雄(每个玩家只有1个)靠近车库,车库所有权转移,但是目前只有房主可以使用,其他玩家靠近,车库使用权也会变成玩家1(此时玩家1在外面打怪呢根本不在!)

2)玩家1或玩家2的英雄单位(每个玩家只有1个)进入锻造店,都会把其他玩家也带进车库;
图中,全局变量-英雄[有0~16数组元素],玩家整数段 目前是 预设-任意玩家
疑惑:问题出在事件使用的变量上?

---------------------已解决!开局空变量、触发器运行过早变量还未赋值导致比如系统会判定空变量的单位=死亡
一定要设置好触发的运行先后、采用变量事件时多加一些硬性的条件

2222.png
1111.png
发表于 2020-10-20 09:13:16 | 显示全部楼层
1,加个条件,触发单位不等于车库单位试试。如果想做商店可以设个如玩家15,将其对玩家用户开启控制权和视野,然后商店单位给这个玩家15
2,事件里这么用变量真是搞不懂,正常来讲如果你想判断多个单位中的某一个触发事件,事件里直接设任意单位,然后再在条件中使用或(触发单位=A)(触发单位=B)…… 或者事先将它们全部加入同一单位组中,在条件中判断触发单位是否在该单位组中就行了。
3,玩家数据集是干什么

点评

找到原因了,触发玩家触发单位的所有者。尽管好多时候它们的值是一样的,但毕竟不是同一个函数。 这是在论坛上其他大佬说的,我这次出错的所有问题 都是事件 单位 触发的  详情 回复 发表于 2020-10-20 18:09
如上图是错误方式 英雄[任意玩家]这样无法被正确读取要改成上面的,不要怕麻烦,然后保险起见再加个条件  详情 回复 发表于 2020-10-20 16:07
大佬大佬!类似的情况,必须这样 才能解决触发单位获取正常 如果用 流浪军载具[任意玩家] 这个变量作为事件单位 那么下面的动作中 触发单位获取错误  详情 回复 发表于 2020-10-20 15:39
感谢!  发表于 2020-10-20 13:19
感动!谢谢大佬回复我!这个玩家数据集个变量-类型是录制 如图,里面存放了很多跟玩家有关的变量 ------------------------------------------------------------ 此外还有:移动数据集、UI数据集,这样 移动数  详情 回复 发表于 2020-10-20 13:06
回复 1 0

使用道具 举报

 楼主| 发表于 2020-10-20 13:06:59 | 显示全部楼层
本帖最后由 Prinny 于 2020-10-20 13:18 编辑
超级007x 发表于 2020-10-20 09:13
1,加个条件,触发单位不等于车库单位试试。如果想做商店可以设个如玩家15,将其对玩家用户开启控制权和视 ...

感动!谢谢大佬回复我!
然后关于您的答复:
1)关于大佬回复1,玩家15暂且不考虑,因为我12个用户+3个电脑已经排满了,另外商店我自己做好了不需要设置玩家的(是对话框配合数据库无限按钮形式的贩卖)
2)关于大佬说的条件,我会尝试一下的,非常感谢!

3)关于您回复3的疑惑:

这个玩家数据集是个变量-类型是录制<玩家设置录制>
<玩家设置录制>如图,里面存放了很多跟玩家有关的变量
------------------------------------------------------------
此外还有:移动数据集、UI数据集,这样
移动数据集的功能是:当你使用WASD移动时,不管你控制的单位是什么或者你有多少个单位,你永远可以移动你的英雄单位和载具单位,鼠标和键盘各管各,为了实现一边走路一边控制大炮(还没做好,目前只能移动)
UI数据集也是 针对玩家的按钮对话框 头衔的
-------------------------
目前,这个游戏刚上传大厅,可以搜索到了!名字叫重装机兵[MetalMax](=W=我想复刻这款作品的要素)
目前就是有玩家2不能点击车库的问题,需要等我修好!特来论坛求助!(其实问题还有几个的,只是这个我搞不懂问题在哪)目前我正在做检测触发变量数值的函数,穿插到每个运行中去

玩家数据集.png

关于大佬回复1

关于大佬回复1

诚邀体验

诚邀体验
回复

使用道具 举报

 楼主| 发表于 2020-10-20 15:39:27 | 显示全部楼层
本帖最后由 Prinny 于 2021-9-2 17:53 编辑
超级007x 发表于 2020-10-20 09:13
1,加个条件,触发单位不等于车库单位试试。如果想做商店可以设个如玩家15,将其对玩家用户开启控制权和视 ...

类似的情况,必须这样 才能解决触发单位获取正常
如果用 流浪军载具[任意玩家]  这个变量作为事件单位 那么下面的动作中 触发单位获取错误

也就是不能偷懒使用变量[预设-任意玩家]这个东西很迷~~~~~~~
但是为什么问题1)事件里 用自带的函数任意单位 下面动作触发始终获取玩家1 我就更迷了(还是只能做检测函数了)
总之 加个局部变量和条件 似乎能解决这2个迷之问题
迷之错误的解决方案.png
回复

使用道具 举报

 楼主| 发表于 2020-10-20 16:07:35 | 显示全部楼层
本帖最后由 Prinny 于 2020-10-20 16:09 编辑
超级007x 发表于 2020-10-20 09:13
1,加个条件,触发单位不等于车库单位试试。如果想做商店可以设个如玩家15,将其对玩家用户开启控制权和视 ...

如下图是错误方式 英雄[任意玩家]这样无法被正确读取
要改成上面的,然后保险起见再加个条件,这个问题就解决了
还剩另一个传送多人的写法我写了很多也没问题啊,这个也奇怪的,总之,我也试着加条件..

错误方式

错误方式

点评

事件一个一个弄你不嫌麻烦吗。事件直接设任意单位,然后在条件里筛选就够了 预设中的任意单位代表的是 无筛选条件,任何单位都可以触发 而你的英雄[任意玩家]只是代表指定一个单位的变量,用在这个事件里即是仅限  详情 回复 发表于 2020-10-21 09:06
回复

使用道具 举报

 楼主| 发表于 2020-10-20 18:09:43 | 显示全部楼层
本帖最后由 Prinny 于 2021-9-2 17:57 编辑
超级007x 发表于 2020-10-20 09:13
1,加个条件,触发单位不等于车库单位试试。如果想做商店可以设个如玩家15,将其对玩家用户开启控制权和视 ...

找到其中一个原因了,触发玩家<>触发单位的所有者,尽管好多时候它们的值是一样的。
回复

使用道具 举报

 楼主| 发表于 2020-10-20 23:17:56 | 显示全部楼层
本帖最后由 Prinny 于 2021-9-2 17:58 编辑

原来,事件变量尽量不要使用指定单位的,用任意单位这样的事件是最高效最没问题的,条件中指定具体单位即可
回复

使用道具 举报

发表于 2020-10-21 09:06:39 来自手机 | 显示全部楼层
Prinny 发表于 2020-10-20 16:07
如下图是错误方式 英雄[任意玩家]这样无法被正确读取要改成上面的,然后保险起见再加个条件,这个问题就 ...

事件一个一个弄你不嫌麻烦吗。事件直接设任意单位,然后在条件里筛选就够了
预设中的任意单位代表的是 无筛选条件,任何单位都可以触发
而你的英雄[任意玩家]只是代表指定一个单位的变量,用在这个事件里即是仅限该变量指定的那一个单位可以触发
根本上,英雄[任意玩家]用法是错的,任意玩家的预设是用在类型是玩家的事件上的,你在这里用它应该是灰色的
回复

使用道具 举报

发表于 2020-10-21 09:31:36 来自手机 | 显示全部楼层
最后说一下,可行的用法
1,事件:任意单位死亡
条件:或(触发单位=英雄[1])(触发单位=英雄[2])(触发单位=英雄[3])......
2.,事件:任意单位死亡
条件:无(最好进行单位筛选除去发射物之类的单位)
动作:if 触发单位=英雄[触发单位所有者] then 复活触发单位
3,事件:英雄[1]死亡 英雄[2]死亡
英雄[3]死亡……
4,如果英雄单位拥有一个共有的标签,而其他普通单位没有,如:轻甲,重甲,灵能单位等等,那么可以直接条件里单位筛选这个标签。类似的将所有英雄加入同一个单位组,条件判断触发单位是否在这个单位组中,是同一思路

点评

另外死亡事件使用变量真的很有趣! 我试着用变量-雷兽死亡,决定雷兽死亡后创建一个神器释放清理效果 发现这个触发在地图开局没有变量赋值(空变量)时无限进入动作创建神器 也就是说这个单位是空变量=死亡  详情 回复 发表于 2020-10-22 11:53
大佬 另一个问题的原因也找到了,图中单位的所有者=用户是有问题的 这个用户是与预设里找到的 我看其他大佬都是用指定玩家比如1-12在活动玩家中这样的命令,不用编辑器预设的这个 即 条件1:在界限内 1  详情 回复 发表于 2020-10-22 11:45
回复

使用道具 举报

 楼主| 发表于 2020-10-22 11:45:04 | 显示全部楼层
本帖最后由 Prinny 于 2020-10-22 12:02 编辑
超级007x 发表于 2020-10-21 09:31
最后说一下,可行的用法
1,事件:任意单位死亡
条件:或(触发单位=英雄[1])(触发单位=英雄[2])(触发单位 ...

大佬 上一版的那个复杂的写法我改简洁了!是我理解不充分...
我昨晚试着发布后还是没解决车库权限问题(目前就剩下这个)
但是这次有进步!我我想原因又找到了,那个车库问题截图中 单位的所有者=用户 好像是有问题的(虽然看字面没问题)
这个用户我是在预设里找到的(跟控制者=用户的预设选择用户似乎不同)
我看其他大佬都是用 指定玩家比如1-12在活动玩家中 这样的命令

即   
条件1:在界限内    1 <= ((触发单位)的所有者) <= 12
条件2:(((触发单位)的所有者)在(活动玩家)中)==真

如果一定要用用户识别,我想试试 玩家控制者是用户 这个识别
即       (玩家((触发单位)的所有者)的控制者)==用户 (这个预设选择下拉列表只有电脑 用户 等短短几项)
而 单位所有者 == (预设)用户(下拉列表里有用户1 2 3 4 5 6....等几十项)所以我觉得在我不清楚这个区别前,最好不用它
这两个都叫用户似乎是不同的?




回复

使用道具 举报

 楼主| 发表于 2020-10-22 11:53:52 | 显示全部楼层
本帖最后由 Prinny 于 2021-9-2 17:42 编辑
超级007x 发表于 2020-10-21 09:31
最后说一下,可行的用法
1,事件:任意单位死亡
条件:或(触发单位=英雄[1])(触发单位=英雄[2])(触发单位 ...

另外在解决问题的过程中。检测到三个有趣的现象:
1)死亡事件使用变量时
我试着用触发事件用 变量-雷兽死亡,来决定雷兽死亡后创建一个神器释放清理效果
发现这个触发在地图开局没有变量赋值(即空变量时)会无限进入动作 然后无限在其他单位位置创建神器
也就是说这个单位是空变量=死亡 但是创建位置很奇妙 是任意单位的位置 这个触发器是有解释并提供一个专门处理触发器空变量的动作的(但是这个动作是不效率的东西,尽量不用它,把逻辑处理好)
2)第二个神奇现象 就是触发器杀死物品这个命令,
用检测测出来操作者是玩家16(提示读取到16,超过界限15,但是这个数组是系统内定的[15]没法改),
目前在物品死亡掉落的条件里设置不是玩家16杀的(来排除系统杀死)

3)上述2)的条件如果设置 击杀者是用户 这个判定会导致玩家2杀怪无法掉落!!!!!(外星人事件)
所以不敢用用户这个,我准备试着用(玩家((击杀者)的所有者)的控制者)==用户(控制者用户和所有者用户的预设下拉列表完全不同,不是同一个东西)
在挑选1~8时,如果条件出现所有者=用户也是只执行1次的就很迷,改为控制者=用户就好了
这个编辑器真的要好好研究了 ...

这里的用户不是同一个下拉列表下的

这里的用户不是同一个下拉列表下的

这里的用户不是同一个下拉列表下的

这里的用户不是同一个下拉列表下的
回复

使用道具 举报

 楼主| 发表于 2020-10-22 13:07:31 | 显示全部楼层
本帖最后由 Prinny 于 2021-9-2 17:52 编辑

事件:尽量使用任意单位,不要指定变量和具体单位(尽量在条件里指定)!
事件:英雄[任意玩家]死亡,这个触发会执行多次,可能因为我这个数组是16的缘故,这个预设会遍历全部数组
条件:所有者 = 用户 尤其用在挑选时你会发现只执行一次 必须要改为控制者 = 用户









回复

使用道具 举报

发表于 2020-10-22 17:08:08 | 显示全部楼层
本帖最后由 Nostalie 于 2020-10-22 17:22 编辑

事件里不要用变量。。
用了的话也不会真正的变。

解决方法是在条件或者动作里用变量。

或者动态给触发器添加事件。(这样做应该会高效,因为没有不必要的触发,但是貌似不能删除已经注册的事件,所以只能用在某些情况)


然后你想判断玩家是电脑还是人。应该用玩家类型=用户/电脑
玩家是个整数怎么可能直接等于用户这种类型。。。用户要是整数也该是一堆整数,也该是玩家组啊。

点评

非常感谢大佬解惑!  发表于 2020-10-22 21:17
嗯嗯 玩家类型 我现在全改控制者是用户那个了  发表于 2020-10-22 21:16
对的!我觉得也是尽量不要用(空)变量,其实那些系统的东西都是功能函数带返回值而已,空变量就是出问题,因为开局触发已经运行了,但是变量还没赋值的情况就很糟糕  发表于 2020-10-22 21:15
回复 1 0

使用道具 举报

发表于 2020-10-26 18:25:09 | 显示全部楼层
如果使用标准方法搭建触发器,就不要再事件里使用变量,因为这时候变量还没赋值。
另外所属玩家==用户,就一定!=电脑或者中立吧,为啥要重复判断。
又另外,事件里都指明具体单位了(流浪单位1-8),条件那里再判断一次干嘛,没可能不通过啊,因为就是这么触发的。

点评

感谢!通过折腾我才终于弄懂了  详情 回复 发表于 2020-10-28 14:41
回复

使用道具 举报

 楼主| 发表于 2020-10-28 14:41:36 | 显示全部楼层
yxxiaobin 发表于 2020-10-26 18:25
如果使用标准方法搭建触发器,就不要再事件里使用变量,因为这时候变量还没赋值。
另外所属玩家==用户,就 ...

感谢!通过折腾我才终于弄懂了
回复

使用道具 举报

 楼主| 发表于 2020-10-28 14:47:13 | 显示全部楼层
本帖最后由 Prinny 于 2021-9-2 18:12 编辑

此贴问题已解决,总结了一些原因:
1)事件可以采用变量,但要防止开局未赋值,或者赋值错误!未赋值(空单位)死亡事件会无限触发!>>对于单位事件,如果这个单位是空变量,编辑器默认空变量为任意单位处触发
>>虽然触发器动作有对空变量处理为无效不发生的动作,但是那个动作不效率,单位事件指定了变量或单位后会无法取消注册
>>单位事件尽量还是使用任意单位,大家在条件里筛选是什么单位,这是最效率的写法
2)所有者=用户没问题(数字类型的用户),控制者=用户也没问题(预设类型的用户)
>>只不过前者用在挑选中,该挑选动作只执行一次(其他朋友也发生过,我让他也改控制者=用户解决),这种情况往往是条件中的函数超数组导致,而且这种情况触发器没报数组超限(这种情况如同存档时挑选1~8玩家进行存档,结果你存了一个叫积分[1]的动作,玩家有4个,此时到玩家2的时候这个触发因为数组超限停止,但是调试不报数组超限的红字)。
3)条件的筛选重要性;
4)动作引用事件对象必须正确!触发XX都是从事件中获取的,有些事件就没有触发XX(函数动作最下面有官方提示)!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-12-22 11:22 , Processed in 0.107233 second(s), 30 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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