中国虚拟军事网(VME)- 专注于武装突袭系列虚拟军事游戏

 找回密码
 加入VME

QQ登录

只需一步,快速开始

搜索
查看: 3235|回复: 15

碰到了脚本生僻语句语法的情况,理解不了。

[复制链接]
发表于 2016-3-15 23:59:32 | 显示全部楼层 |阅读模式
【fnc_addChemLightActions = {
        _this addAction ["Activate chemlight",{
                        chem = "Chemlight_blue" createVehicle [getPosASL (_this select 0) select 0, getPosASL (_this select 0) select 1,1];
                        chem attachTo [(_this select 0),[0.1,0,0.4]];
                },[],1,false,true,"",
                "((getposASL _this select 2)  < 1) && {isnil 'chem'}"
        ];
        _this addAction ["Deactivate chemlight",{
                        detach chem; chem = nil;
                },
                [],1,false,true,"",
                "!isnil 'chem'"
        ];
};

_this call fnc_addChemLightActions;
_this addEventhandler ["respawn",{(_this select 0) call fnc_addChemLightActions}];】在 这段别人的脚本中,我对于其中的这两行【chem = "Chemlight_blue" createVehicle [getPosASL (_this select 0) select 0, getPosASL (_this select 0) select 1,1]与【chem attachTo [(_this select 0),[0.1,0,0.4]];
                },[],1,false,true,"",
                "((getposASL _this select 2)  < 1) && {isnil 'chem'}"】想破了头都没理清是什么 意思 ?    就是那里面不是说了_this select 0 后面又紧接着select 0 ,_this seect 1 后面也紧接着select 1,以前常碰到的只有一个select  0,后面没有紧跟另一个select了,那么以前那个就好理解,但现在这种语法语句就有点摸不着头绪了,还有那里面有一行chem attachTo [(_this select 0),[0.1,0,0.4]];
                },[],1,false,true,"", 这一行又是啥意思?为何会有[],1, false,true这样的写法,它的功效是什么?烦请哪位脚本行家详细解说一下,最好是用通俗易懂的例子解说一下,先谢过了。
发表于 2016-3-16 08:08:04 | 显示全部楼层
本帖最后由 chaoduichen 于 2016-3-16 08:13 编辑

学而不思则罔。请教楼主几个问题
1  _this 是什么,为什么需要select ,可以select X ,X的范围是什么,由什么来决定 ,_this select X的类型是什么,
   翻翻维基,思考思考,搞清这些,你一定能搞定为何会有_this select 0 select 1的存在,甚至对3个select 的存在都不感到惊讶
  阿玛3在1.48引入了param 和params两个命令,看看这两个和上面这些有什么关系。                     

2 这个其实和上面是一致的,某些命令是需要参数的,而且参数数量是可变的。具体情况看维基吧,上面介绍的倒是详细。

  读脚本我个人的建议是 从上到下,从外到内,不是只指文本的排列,而是指语句块,逻辑结构的顺序【这语言基本是面向过程的】。别的废话没有了,我想说的 就这么多。等高人来给你具体的例子吧。
        还有就是脚本扔进Poseidon(Arma的一个专用文本编辑器)里,自带SQF语法高亮(还有cfg,ext等的高亮),有助于分析。 PS:A网有下载,搜索也不难。有Play With Six 的估计应该可以找到。再不济直接谷歌。
        说了一大堆,楼主看看就好。无需回复。
发表于 2016-3-16 10:33:35 | 显示全部楼层
好高端( ⊙ o ⊙ )啊!
 楼主| 发表于 2016-3-16 11:46:51 | 显示全部楼层
ta406601917 发表于 2016-3-16 10:33
好高端( ⊙ o ⊙ )啊!

我或许比你都 更小白,呵呵,能否加q私聊啊498701682,两个爱好脚本的小白共同探讨共同进步如何?
发表于 2016-3-16 14:06:52 | 显示全部楼层
前六行其实都是一个超长的addaction命令。 这样一长段代码换行写的你要注意括号头和尾在哪里。 我自己一般都喜欢把格式码好换行,可读性会好一些。

理解数据结构 单个变量, 单层array, 双层array都有什么不同,这样就理解select怎么用了。

比如说 a=1, b=[1,2,3],c=[[1,2],[3,4]] 。怎么样从a,b,c中拿到1这个值?

答案:
a, b select 0, (c select 0) select 0

脚本不难的,但是需要有编程基础系统学习
 楼主| 发表于 2016-3-16 14:10:38 | 显示全部楼层
2fast 发表于 2016-3-16 14:06
前六行其实都是一个超长的addaction命令。 这样一长段代码换行写的你要注意括号头和尾在哪里。 我自己一般 ...

感 谢解答,很形像,是不是有点类似于插件定义里的类继承的意思 ?
 楼主| 发表于 2016-3-16 14:13:24 | 显示全部楼层
2fast 发表于 2016-3-16 14:06
前六行其实都是一个超长的addaction命令。 这样一长段代码换行写的你要注意括号头和尾在哪里。 我自己一般 ...

那第二个问题里的这行是什么参数传递 ?【[],1,false,true,""】,烦请大神也作一下通俗的解答吧。
发表于 2016-3-16 18:11:08 | 显示全部楼层
跟类继承应该不大一样吧。

你说的第二个问题其实是这样的

  _this addAction ["Activate chemlight",{很长一段代码A },[],1,false,true,"", 又是很长一段代码B];

事实上前六行就是这么一行命令。只不过代码A和代码B分行写了。至于addAction命令需要什么参数就去参考wiki吧,对号入座就懂了

我一般不喜欢分行写,分行写的话格式也要调到可读性好才行。
 楼主| 发表于 2016-3-16 22:38:51 | 显示全部楼层
2fast 发表于 2016-3-16 18:11
跟类继承应该不大一样吧。

你说的第二个问题其实是这样的

大神,我的不解之处在此处【[],1,false,true,】这四个代表什么参数?为什么在同一处有FALSE又有TRUE,前面那个方括号代表的是传递 什么 参数?
发表于 2016-3-17 10:13:36 | 显示全部楼层
unit addAction [title, script, arguments, priority, showWindow, hideOnUse, shortcut, condition, positionInModel, radius, radiusView, showIn3D, available, textDefault, textToolTip]

上面下划线的对应下面下划线的

_this addAction ["Activate chemlight",{很长一段代码A },[],1,false,true,"", 又是很长一段代码B];

具体解释看 https://community.bistudio.com/wiki/addAction
 楼主| 发表于 2016-3-17 10:45:54 | 显示全部楼层
2fast 发表于 2016-3-17 10:13
unit addAction [title, script, arguments, priority, showWindow, hideOnUse, shortcut, condition, posi ...

还是有点云里雾里,如果能上面一样举个通俗易懂的例子来配合解说就形像多了
发表于 2016-3-18 11:23:57 | 显示全部楼层
  _this addAction ["Activate chemlight",{
                        chem = "Chemlight_blue" createVehicle [getPosASL (_this select 0) select 0, getPosASL (_this select 0) select 1,1];
                        chem attachTo [(_this select 0),[0.1,0,0.4]];
                },[],1,false,true,"",
                "((getposASL _this select 2)  < 1) && {isnil 'chem'}"
        ];

上面这6行其实缩写下来就是下面这行addAction的命令

_this addAction ["Activate chemlight",{很长一段代码A },[],1,false,true,"", 又是很长一段代码B];

至于这一行的命令可以参考下面的连接来解释

https://community.bistudio.com/wiki/addAction

这个命令的用法以及参数是如下

unit addAction [title, script, arguments, priority, showWindow, hideOnUse, shortcut, condition, positionInModel, radius, radiusView, showIn3D, available, textDefault, textToolTip]

你对比一下看看就知道 [],1,false,true, 对应的是arguments, priority, showWindow, hideOnUse这几个参数。 我就不一个一个具体解释。如果没有英文阅读能力的话要看懂这些稍微复杂一点的命令就有些困难的。可以找一找汉化的教程。
 楼主| 发表于 2016-3-18 18:43:49 | 显示全部楼层
2fast 发表于 2016-3-18 11:23
_this addAction ["Activate chemlight",{
                        chem = "Chemlight_blue" createVeh ...

感 谢大神的耐心指导,其实主要的一点就是这样写的参数会有什么效果出来,就好比_veh="官方载具名代码"createvehicle  position player  这一行代码一样,它的效果就是在玩家身边生成一辆载具,这字面意思简单易懂
发表于 2016-3-18 21:05:42 来自手机 | 显示全部楼层
如果我没有记错中括号是传递参数的,因为添加菜单命令也在传递数组到_this所以是select几也忘记了。数字是排序,越大越往上排如遇相同最后添加会置上。一个布尔值用于物体被添加菜单时是否自动弹出另一个是选择后要不要关闭滚轮菜单列表,还有什么菜单显示条件添加图标也就几个常用的...后面的想不起来了
 楼主| 发表于 2016-3-18 22:00:10 | 显示全部楼层
啤酒冲米二 发表于 2016-3-18 21:05
如果我没有记错中括号是传递参数的,因为添加菜单命令也在传递数组到_this所以是select几也忘记了。数字是 ...

嘿嘿,兄弟你也忘记了,那如果你碰到了要写类似情况的脚本那要咋办呢?又要去官网查?话说你这段时间是不是都没上Q啊?
您需要登录后才可以回帖 登录 | 加入VME

本版积分规则

小黑屋|中国虚拟军事网

GMT+8, 2024-4-19 11:14

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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