下网上载 发表于 2013-4-12 09:51:42

小白到大白 零编程基础讲解脚本编辑。。。。。

{:soso_e106:} 因为,arma3还支持sqs脚本。。而我也不太习惯sqf的脚本习惯,所以就一直用sqs。所幸很多sqs脚本能直接用到arma3里面。。。我看论坛的编程高手教程都是很专业化的语言来说的。。。我是编程零基础。。。随便写写。。。看看能不能容易理解点。从我自己的角度出发哈。。。。



首先,脚本调用,大家都知道两种方式   exec 或者 execVM

分别说 sqs 文件后缀的就用exec来调用

sqf脚本就用execVM来调用调用时前面还要加一些自定义的东西来等于一下比如

suibian = execVM "xxx.sqf"suibian 就是 “随便” 的拼音啦{:soso_e120:} 为了自己编辑任务时方便自己知道这个脚本是干嘛的。所以用些自己想好的缩写也是很方便好记的。。

然后来看看一个sqs的例子。。希望说得够通俗吧

#kai
_s1 = _this select 0;
_s2 = _this select 1;
@(_s1 distance _s2 <= 10)
~2
_s1 dofire _s2;
exit;

这个脚本什么意思?怎么调用?
先说调用在任意一个单位上,弹药箱啦游戏逻辑啦。甚至汽车等等的初始栏填上
exec "脚本名.sqs" //注意!脚本名必须为英文自定义吧。so1就是一个名字为so1的士兵,随你定义哪一个士兵名字也可以随便改。只要你地图上摆放的士兵与脚本上填写的士兵名字一样就行了。so2也是同样道理
然后这个脚本的用处?我一句句给你们解释
#kai   //这个是标题栏,通常高手用两个单词来说明下以下程序干嘛的,我嘛就用拼音{:soso_e118:}

_s1 = _this select 0;//这个的意思是调用时,第一个位置填写的东西等于脚本里的_s1这个东东 [一号定义,二号定义] exec "脚本名.sqs"

_s2 = _this select 1; //这个道理同上。。不过就是定义第二个格代表什么。。。由于武装突袭的脚本规则所以序号是从0开始的。。。所以一号位应该叫零号位

@(_s1 distance _s2 <= 10) //这个是一个等待的脚本条件意思是“直到_s1 这个小子,距离_s2这个混蛋 小于或者等于 10米的时候” 程序就继续往下运行

~2                      //这个意思等待两秒时间

_s1 dofire _s2;    //这个大家都很常见很常问的大名鼎鼎的 dofire 就是 s1向s2 开火

exit;                   //这里就是脚本结束的意思了。。。


全程不需要用触发器,发现没?这样的方式在任务编辑中少了很多蓝色的圆圈。。。而且更别说触发器很多时候突然就无效了{:soso_e153:}
只要明白脚本开头 _s1 = _this select 0;   这个定义是什么就能很好理解脚本的意思了。这就是很多人熟练使用触发器,但是完全看不懂脚本的原因【至少我是这样】
一般很多高手开发的脚本,是不会用_s1这种渣渣方式来定义的。使用英文单词定义其实更好更整洁方便理解。所以看脚本时看到_this select 0;类似这种语句不妨用
翻译机器看看他们 等于号前面的英文是什么意思。。。。
另外这个定义也是可以写很多个的比如
_s1 = _this select 0;
_自定义 = _this select 1;
_自定义 = _this select 2;
_自定义 = _this select 3;
_自定义 = _this select 4;   一般来说10个左右就基本足够了。。看需求。。有多少个士兵或者事情想定义的,就写多少个


调用的时候记得每个格子对应好定义的顺序,而且不能留空。。如果留空了没东西写的话,要回到脚本里删除掉定义比如_this select 3;不想要了。。那么删除的时候就把后面
跟着的_this select 4; 改成_this select 3;让顺序保持正确。

{:soso_e143:}不知道容不容易懂?我尽力了。。。二楼帖点编辑学习笔记吧、、










bym101 发表于 2013-4-13 10:28:02

一个神不帮助小白,小白也不会认为他是神
一个大白帮助小白,小白也会把他当作神

下网上载 发表于 2013-4-12 09:53:25

组行为
{_x setBehaviour "stealth"} forEach units group a1

{_x    这里可以自定义       } forEach units group a1


count units group _s1 < 4          以一个组的人数作为条件

cameraOn = NAME;NAME switchCamera "GUNNER";

"INTERNAL" (1st person)
"EXTERNAL" (3rd person)
"GUNNER" (optics / sights)
"GROUP" (commander view)
以上命令用于锁定到一个单位的身上录像跟随~而且不论跪下还是趴下都一致的,头也跟随摆动的

_gridPos = mapGridPosition getPos player 转换getpos坐标为 GPS坐标

_veh = createVehicle ["ah1w", position player, [], 0, "FLY"]
这样可以刷出一出生就是飞行的单位


以多个条件为触发
@((Not alive _ap)||(player distance _ap <= random 50)||(getdammage _ap >= 0.000001)) 满足一个条件即可
@((Not alive _ap)AND(player distance _ap <= random 50)AND(getdammage _ap >= 0.000001)) 满足所有条件
?(()||()||()) 例子

@({_x == "SmokeShellRed"} count magazines player == 0)检测玩家身上是否携带有烟雾弹无即触发
检测高度作为条件 //?(position XXX select 2 <= 60):goto "xxx"
检测速度条件 // ?(speed player) >= 10
检测单位不等于某些事情 ?(_mm != player)
如果单位不在载具里 @not (_ma in _fly1)
如果单位在载具里 @(_ma in _fly1)
?(_ap in (units group GroupName))判断单位在不在一个指定的小队里

player setUnitRecoilCoefficient 10 调整玩家后助力 1.62和AA3可用

this addEventHandler ["handleDamage", { (damage (_this select 0)) + ((_this select 2) * 0.03) }];
使命召唤一样的HP~后面那个0.03越小越难死,从0到1 该脚本代表中一枪扣多少血~一枪一0.1的话那么就是十枪,一枪0.01就是一百枪

player addAction ["call Medic", "mdd.sqs"];给玩家增加一个菜单,菜单里不能给脚本定义单位,所以菜单里的脚本是用来调用另外一个脚本的
mdd.sqs里面只要一句话: exec "jiaoben.sqs"这样就能给予某个单位定义了

joinSilent GrpNull;//单位脱离一个小队
({_x distance _ap <= 20} count (AllUnits - )) == 1 出去单位_ap 其他任何单位只要一个靠近都触发

{this reveal _x} forEach allUnits 该单位了解整个地图上的任何单位

Floor random 3.5 向下化整数
Ceil random 3.5 向上化整数

_sp = speed _h1 * 0.28 就可以吧速度单位化为向量中的数值单位
_h1 setvelocity

{addswitchableunit _x} foreach units group this;整个小队都是可以控制的

删除死亡单位 { deleteVehicle _x } forEach allDead;重复执行就可以了~删除所有死的单位



镜头抖动
             抖动强度 抖动时间 抖动节奏
addCamShake

沙尘暴 0.01为沙尘暴间隔 0.8为颜色,单位越小颜色越深 设置为true则为飞报纸 必须用触发器触发否则无效
call BIS_fnc_sandstorm;
添加一个F7 function INIT那里填上下句,风沙的脚本才能执行
必须用触发器触发或者脚本触发不能直接天道INIT上

THIS attachTo ]约束四个游戏逻辑在玩家四周就可以模拟出很多沙尘在周围了
下面为例子 分别四个游戏逻辑 P1 P2 P1_1 P2_1
call BIS_fnc_sandstorm; call BIS_fnc_sandstorm; call BIS_fnc_sandstorm; call BIS_fnc_sandstorm;p1 attachTo ];p1_1 attachTo ];p2 attachTo ];p2_1 attachTo ]






触发器内所有单位或者特定阵型单位统一做一样事情
{_x stop true} foreach thislist 单位统一不动
{_x 任意自定义} foreach thislist

this EnableIRLasers true   单位作战时自动打开镭射灯
{_x EnableIRLasers true} forEach units group a1
unitName enableGunLights true 单位使用枪灯
{_x EnableIRLasers true} forEach units group this;{_x enableGunLights true} forEach units group this;

n1 reveal n2
{_x = _TA} foreach thislist

约束电脑的行为
setspeedmode "limited" 设置速度为慢
h1 dowatch sd单位朝向方向 载具单位没效果
dofire不可用于锁定单位攻击的目标,但是 dotarget可以
this setunitpos "middle" 保持蹲姿
this setunitpos "up"站姿
this setunitpos "kneelDown" 蹲下或者趴下
this setunitpos "auto"   自己选择

this forceSpeed 2;移动速度

disableuserinput true玩家失去操作效果

让电脑移动和直接传送电脑
n1 setpos getpos n2 、、 n1 move getpos n2、、n1 domove getpos n2

锁定一个单位离不开另一个单位身边,以000为中心最后一个数值是高度
THIS attachTo ]
detach player 解锁以上命令




治疗~第一个name是接受治疗的单位
name action ["heal",name2]

5 fadeMusic 0 音乐五秒内渐变为0   
5 fadeSound 0 所有游戏声音渐变为0   音乐播放不会被干扰
5 fadeRadio 0.1 无线电声音渐变为0


让一个叫NA的单位 移动到我希望移动到的地方地图点击功能触发一下后 点开地图来点一下地图就会发生
onMapSingleClick "na domove _pos; onMapSingleClick """";";         


房屋内放置随机位置一个组 似乎附近的房屋的房间有多少才能写随机数字否则随机进大海
{_x setpos(nearestBuilding this buildingpos random 5)} foreach units n1      

治疗~第一个name是接受治疗的单位
name action ["heal",name2]

this addeventhandler ["fired",{(_this select 0) setunitpos "up"}];this addeventhandler ["hit", {(_this select 0) setunitpos "middle"}]
单位一开火就站,一中枪就蹲

this setvelocity某单位恒定速度前进 需要脚本配合

Name disableAI "Move" – 单位不动
Name disableAI "Target" – 单位不瞄准
Name disableAI "Autotarget" – 单位变瞎子
Name disableAI "Anim" – 电脑单位失去所有能力

this enableAI "Move"    恢复电脑移动能力


{_x disableAI "Move"} forEach units group s2
电脑一组人全部不会跑

{_x enableSimulation false} foreach thislist
让一个触发器内的东西定住,但是恢复触发器的东西走动就要用班组命令才可以
而且载具要一个一个用h1 enableSimulation true 分开搞才可以
{_x enableSimulation true} forEach units group s2 用于解锁定住的命令 为班组命令

在脚本中使用 ?(xxx = true)为条件时,必须在此之前设置一个 xxx = false

@(g1);在脚本中意为:直到等待g1 = true 的时候才继续运行脚本,可以简化脚本不需要运行goto


名子 = 职为 载具名

名子可以写你喜欢的,之后编写任务也很方便。
职为可以填上crew(这是指全部机组员)、driver(驾驶)、gunner(炮手)、commander(指挥官)等等,可能还有些我忘了吧。
载具名则填上你为你那个载具取的名子。

我已以下是例子,我有一台叫做"heli01"的直升机,我想把他的驾驶命名叫作"Pilot01"

所以就这样打 Pilot01 = driver heli01;

这样之后就可以对这台直升机的驾驶另外给script了~!

hintSilent format ["玩家分数:%1 \n 玩家杀敌数:%2",rating Player,_zhi]
""以内的%1就是""号以外的后面的第一个 第二个 数值等等



player addAction ["***", "a1.sqf", [①], ②15, ③false, ④true, "⑤", "⑥(_target == player)"];
我把知道的说一下
*** 动作菜单显示名字
①输入参数可传递到 a1.sqf脚本声明的变量中
②菜单显示的上下优先排序
③④这两布尔值啥意思???
⑤按下菜单时同时执行输入的命令?
⑥菜单显示的条件(循环检测)

{:soso_e144:} 我就不排版咯。。当时锻炼下看程序的能力。。。高手们的脚本可比这乱得多

bym101 发表于 2013-4-12 10:02:31

楼主好有才干

SRU 发表于 2013-4-12 10:49:16

来膜拜下{:soso_e113:}

JDLSNIPER 发表于 2013-4-12 11:13:34

学习了!

JDLSNIPER 发表于 2013-4-12 11:28:45

JDLSNIPER 发表于 2013-4-12 11:13 static/image/common/back.gif
学习了!

有三分之一懂,三分之二不懂!{:5_126:}编辑的时候只要能用触发器实现的我就用触发器!不管用几个或者转几个弯!脚本很少用!就是不懂它了!看了楼主的帖子后,明白了些东西,特别是一楼的_this select x,二楼的就有很多东西不懂了!

BLEACH象牙塔 发表于 2013-4-12 11:33:43

哈哈哈果然每个人的小册子都很混乱……

下网上载 发表于 2013-4-12 11:38:55

JDLSNIPER 发表于 2013-4-12 11:28 static/image/common/back.gif
有三分之一懂,三分之二不懂!编辑的时候只要能用触发器实现的我就用触发器!不管用几个或者转几 ...

懂那个就好说。。。二楼是命令。。需要的时候淘下宝就好

JDLSNIPER 发表于 2013-4-12 12:48:30

下网上载 发表于 2013-4-12 11:38 static/image/common/back.gif
懂那个就好说。。。二楼是命令。。需要的时候淘下宝就好

多谢楼主了!

my5800mkk 发表于 2013-4-12 13:38:03

多谢楼主学习下

cccbss 发表于 2013-4-12 15:03:20

请教下让AI在直升机的某个位置怎么写

下网上载 发表于 2013-4-12 15:13:15

cccbss 发表于 2013-4-12 15:03 static/image/common/back.gif
请教下让AI在直升机的某个位置怎么写

指定cargo点是吧? 见过。。。等等我找找

下网上载 发表于 2013-4-12 15:14:38

cccbss 发表于 2013-4-12 15:03 static/image/common/back.gif
请教下让AI在直升机的某个位置怎么写

Syntax
Syntax:
unitName moveInCargo vehicle
Parameters:
unitName: Object
vehicle: Object
Return Value:
Nothing
Alternative Syntax
Syntax:
unitName moveInCargo
Parameters:
unitName: Object
vehicle: Object
CargoIndex: Number
Return Value:
Nothing
Examples
Example 1:
_soldierOne moveInCargo _jeepOne
Example 2:
_soldierOne moveInCargo

大概就是这样了。。。1号2号位有多少填多少

st904413 发表于 2013-4-12 15:41:57

大白甚是威武啊,小弟玩好游戏就行了。。。。。。突然感觉,坑略深

下网上载 发表于 2013-4-12 15:48:14

st904413 发表于 2013-4-12 15:41 static/image/common/back.gif
大白甚是威武啊,小弟玩好游戏就行了。。。。。。突然感觉,坑略深

{:7_186:}当年我也觉得 arma的坑深不见底啊。。。。
页: [1] 2 3 4 5
查看完整版本: 小白到大白 零编程基础讲解脚本编辑。。。。。