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

 找回密码
 加入VME

QQ登录

只需一步,快速开始

搜索
查看: 17465|回复: 32

[教程] 编写任务入门教程-持续更新(6月14日更新)

  [复制链接]
发表于 2014-6-2 07:43:47 | 显示全部楼层 |阅读模式
本帖最后由 是觉得很烦 于 2014-6-14 06:44 编辑

从刚开始接触aa3到现在,摸索出了一些经验,与大家分享。
模板使用方法:放入档案名下面的mpmissions或missions文件

一.创建任务
任务是一张任务图的核心,没有任务,玩家就没有目的,任务图就失去意义。翻了大多数教程,都没有发现详尽的任务创建教程,我在这就详举几种方式。


1.F7模块创建;
2.bis_fnc_taskCreate函数创建;
3.简报创建briefing;
4.settask函数创建;
5.shk_taskmaster创建(第三方函数创建)。

1.F7模块创建不是很推荐,因为错误率太高。但它比较简便。怎么使用?
在F7模块一栏有一个情报栏
在这里你首先要放置一个“创建任务”模块,输入任务名称及描述,用同步线与任务分配给的小队队长相连接,再创建一个①“设置任务状态”的模块设置为分配用同步线与“创建任务”相连接,再创建一个“设置任务地点”的模块设置为分配用同步线与“创建任务”相连接,任务地点为目标地。再创建一个②“设置任务状态”的模块设置为分配用同步线与“创建任务”相连接,设置任务成功或失败。再创建一个“触发器用同步线与②“设置任务状态”相连接。这个触发器上填上条件。这个触发器好可以和下个任务的①“设置任务状态”(分配)连接,上个任务完成后自动分配下一个任务。
再放个模板。

2.bis_fnc_taskCreate函数创建,强烈推荐!
首先在任务文件创建一个文本文档改名为missionTasks.sqf并另存为UTF-8格式,输入
case "tsk1": {
                if (_taskState == "") then {
                [
                [
                  units BIS_grpBlue, _taskID,  //任务分配的阵营及id
                [
                "拿取装备,等候任务分配", //任务描述
                "拿取装备",//任务名称
                "拿取装备"//任务在地图上显示的名称
                ],
                 markerPos "Fus_obj_1", //任务的标记地点,首先在地图上创建一个名为“Fus_obj_1"的标记,此处可填objnull无标记
                 true
                  ],
                 "bis_fnc_taskCreate",
                   nil,
                   false
        ] spawn BIS_fnc_MP;//发送到每个客户端
                };
        };

如何呼叫?可以在触发器上呼叫在触发器触发成功一栏填上 "tsk1" call BIS_fnc_missionTasks;
也可在init.sqf呼叫,填上
if (isServer) then {
        "tsk1" call BIS_fnc_missionTasks;
};

放了多个任务则在触发器上呼叫在触发器触发成功一栏填上 "tsk1" call BIS_fnc_missionTasks;"tsk2" call BIS_fnc_missionTasks;"tsk3" call BIS_fnc_missionTasks;............
在init.sqf呼叫,填上
if (isServer) then {
        "tsk1" call BIS_fnc_missionTasks;//至于为何要分行,是因为分行条路更清晰
        "tsk2" call BIS_fnc_missionTasks;
         "tsk3" call BIS_fnc_missionTasks;
};

完成了任务怎么设置状态?
任务目标达成后在触发器触发成功一栏填上[["tsk1", "Succeeded"] , "BIS_fnc_taskSetState",false] call BIS_fnc_mp;
或在init.sqf上填上
[] spawn {
        waitUntil {//条件};
        [["objgroup1", "Succeeded"] , "BIS_fnc_taskSetState",false] call BIS_fnc_mp; //设置任务状态为成功
        "tsk2" call BIS_fnc_missionTasks;//呼叫下一个任务
};

任务状态有 "SUCCEEDED"//成功
"ASSIGNED"//分配
"CREATED"//创建
"CANCELED"//取消
"FAILED"//失败

再放个任务模板





3.简报创建briefing比较推荐,直接放模板,在briefing.sqf文件上有详细的注释
在触发器上如何输入?
任务目标达成后在触发器触发成功一栏填上
tsk1 setTaskState "SUCCEEDED";
["TaskSUCCEEDED", ["", "摧毁 "]] call BIS_fnc_showNotification;

任务状态["TaskSucceeded", ["", "任务名 "]] call BIS_fnc_showNotification;
["TaskASSIGNED", ["", "任务名 "]] call BIS_fnc_showNotification;
["TaskCREATED", ["", "任务名 "]] call BIS_fnc_showNotification;
["TaskFAILED", ["", "任务名 "]] call BIS_fnc_showNotification;
["TaskCANCELED", ["", "任务名 "]] call BIS_fnc_showNotification;
task_1 setTaskState "SUCCEEDED"//成功
task_1 setTaskState "ASSIGNED"//分配
task_1 setTaskState "CREATED"//创建
task_1 setTaskState "FAILED"//失败
tsk1 setTaskState "CANCELED"//取消

4.settask不太推荐,在init.sqf输入
if (isServer) then {
[params,//字符串或数组的格式[任务ID任务ID或阵列,父任务ID ]
target,//任务的所有者
desc, //任务描述["任务描述", "任务标题", "标记"]
dest, //目标地,可以为markerPos "标记名称",或[x,y,z]坐标,或pos..... 同步对象
state,//任务状态,字符串可以是以下:“创造”“分配”“autoassigned”(“分配”时,没有任务被指定,否则“创造”)“成功”“失败”“取消”
priority, //在当前任务完成后,系统选择下一个具有最大的优先级> = 0
showNotification,//显示任务提示 true或者false
isGlobal//全局创建
] call BIS_fnc_setTask;
};

5.shk_taskmaster创建(第三方函数创建)较推荐
首先这个文件放到根目录
在init.sqf上添加
execVM "shk_taskmaster.sqf";
waituntil {! isnil "SHK_Taskmaster_Tasks"};

[tsk1,
"任务名称",
"任务描述.",
true,
[],
"assigned",//任务状态
mark//任务标记,可以为markerPos "标记名称"
] call SHK_Taskmaster_add;//创建一个任务

完成了任务怎么设置状态?
任务目标达成后在触发器触发成功一栏填上
["tsk1","succeeded"] call SHK_Taskmaster_upd;

在init.sqf上写
[] spawn {
        waitUntil {//条件};
        ["tsk1","succeeded"] call SHK_Taskmaster_upd;//设置任务状态为成功
};
任务状态有 "SUCCEEDED"//成功
"ASSIGNED"//分配
"CREATED"//创建
"CANCELED"//取消
"FAILED"//失败
任务模板内含原作者说明

好,任务部分就到这了,有问题同一在本帖提问,或加入qq群:247572976
我周六,周日统一回复,并更新.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入VME

x
 楼主| 发表于 2014-6-6 06:01:55 | 显示全部楼层
二.下面来简单的介绍下几个文件的用处

1.description.ext
这个文件主要是任务的各种信息:
任务名称,任务类型,复活的方式,结局,等等诸多可定义的东西.
例子:
class Header
{
gameType = COOP;//任务的类型,可以为DM(死斗),COOP(合作),CTI(夺旗),SANDBOX(沙盒),RPG(角色扮演);
minPlayers = 1;//最小玩家数
maxPlayers = 10;//最大玩家数
};

author = "FusRoDah";//作者名称
onLoadName = "荧惑行动";//任务名称
saving=0;//禁用保存,不仅用则删除这一行
overviewPicture = "duodaozhanyi.jpg";//加载的任务图片
overviewText = "荧惑小队在Altis的武装行动!";//在加载任务是的简报

Respawn = "INSTANT";//复活方式
RespawnDelay = 5;//复活延时
DisabledAI = TRUE;//时候禁用ai,是为true,不是为false

class CfgDebriefing//结尾的提示,用触发器直接选择结局1,2是不是很突兀,在这里定义结局动画
{
        class End1
        {
                title = "";//显示默认为任务成功
                subtitle = "你们赢了!";//任务成功下一行的描述,任务完成的原因
                description = "你们赢了!";//任务总结
                       picture = "b_inf";
                pictureColor[] = {0.0,0.3,0.6,1};
        };
        class endLoser
        {
                title = "";//显示默认为任务成功
                subtitle = "人质死亡!";//任务成功下一行的描述,任务失败的原因
                description = "人质死亡!";//任务总结
                pictureBackground = "";
                picture = "b_inf";
                pictureColor[] = {0.0,0.3,0.6,1};
        };
};



2.init.sqf
这是一个很有用文件,是初始化任务的文件,可以用来创建任务,也可用来当触发器使用,用来呼叫各种脚本.
当作为触发器使用的例子:
[] spawn {
        waitUntil {{alive _x} count [sbe] == 0};//当名为sbe的人死亡时,触发
        [["objgroup2", "Succeeded"] , "BIS_fnc_taskSetState",false] call BIS_fnc_mp; //设置objgroup2这个任务的状态为成功
        "objgroup3" call BIS_fnc_missionTasks;//呼叫下一个任务
        { deleteVehicle _x } forEach allDead;//删除所有死亡
};


3.①.initplayerlocal.sqf
本地玩家的初始化状态,与init.sqf差不多


②.initServer.sqf
服务器的初始化化,某些服务起的东西在这定义


4.mission.sqm
也就是任务的主体,编辑器导出的东西,下面对他进行分析
version=12;
class Mission
{
        addOns[]=//这里是游戏所用到的模组,当你玩一个任务没有任务需要的模组可在此删除
        {
                "A3_Characters_F_BLUFOR",
                "a3_characters_f_beta",
                "A3_Characters_F_INDEP",
                "A3_Characters_F_Civil",
                "A3_Characters_F_OPFOR",
                "A3_Air_F_Beta_Heli_Transport_01",
                "A3_Soft_F_MRAP_01",
                "A3_Structures_F_Mil_Helipads",
                "A3_Weapons_F_Ammoboxes",
                "a3_weapons_f_beta_ammoboxes",
                "A3_Soft_F_HEMTT",
                "A3_Signs_F",
                "A3_Air_F_Beta_Heli_Transport_02",
                "a3_map_altis",
                "A3_Characters_F_Gamma",
                "a3_uav_f_characters_f_gamma",
                "A3_Static_F_Gamma",
                "A3_Structures_F_Mil_BagFence",
                "A3_Animals_F_Rabbit",
                "A3_Structures_F_Civ_InfoBoards"
        };
        addOnsAuto[]=
        {
                "A3_Characters_F_BLUFOR",
                "a3_characters_f_beta",
                "A3_Characters_F_Gamma",
                "a3_uav_f_characters_f_gamma",
                "A3_Characters_F_INDEP",
                "A3_Characters_F_Civil",
                "A3_Characters_F_OPFOR",
                "A3_Weapons_F_Ammoboxes",
                "a3_weapons_f_beta_ammoboxes",
                "A3_Structures_F_Mil_Helipads",
                "A3_Animals_F_Rabbit",
                "A3_Structures_F_Civ_InfoBoards",
                "a3_map_altis"
        };
        randomSeed=9114063;
        class Intel
        {
                briefingName="[GHST] Enemy Assault CO36 V2.7";
                overviewText="Enemy forces occupy most of Altis. Await orders from command and complete all tasks given. Good Luck.";
                resistanceWest=0;
                resistanceEast=1;
                startWind=0;
                forecastWind=0;
                forecastWaves=0;
                year=2023;
                month=3;
                day=7;
                hour=12;
                minute=10;
                startFogBase=0.001;
                forecastFogBase=0.001;
                startFogDecay=0.0049999999;
                forecastFogDecay=0.0049999999;
        };
        class Groups
        {
                items=18;
                class Item0
                {
                        side="WEST";
                        class Vehicles
                        {
                                items=10;
                                class Item0
                                {
                                        position[]={14672.732,17.91,16721.188};
                                        azimut=302.116;
                                        offsetY=1;
                                        special="NONE";
                                        id=0;
                                        side="WEST";
                                        vehicle="B_Soldier_F";
                                        player="PLAYER COMMANDER";
                                        leader=1;
                                        skill=1;
                                        text="s1";
                                        init="BIS_grpMain = group this";//相当于编辑器中单位的init一栏
                                };


5.onPlayerKilled.sqf
玩家重生后调用的脚本和状态用waituntil {alive player};来触发,可调用脚本
 楼主| 发表于 2014-6-14 06:40:08 | 显示全部楼层
本帖最后由 是觉得很烦 于 2014-6-14 06:43 编辑

三.兵力布置

1.简单的Ai巡逻路点创建
选择F4导航点,单击击要添加路点的单位/组(组领导),在需要AI前进的地方双击创建一个路点为"移动",再创建个路点也为移动,最后创建个路点为循环
如图
其中路点的循环可随着需求增多;

2.对路点功能的介绍

放置半径是指Ai可能会随机出现的范围;
条件 这一栏可以当成路点触发器,在条件这一栏输入你要是路点达成的目标,如not alive s1//在s1死的时候路点生效;

3.半随机的Ai循环路点的创建
选择F4导航点,单击击要添加路点的单位/组(组领导),在需要AI前进的地方双击创建一个路点为"移动",设置其放置半径为50(按照你想要AI出现的范围调整),,再创建个路点也为移动,,设置其放置半径为50,最后创建个路点为循环也设置其放置半径为50.多设置几个路点,可以实现AI的随机移动;

4.过多的单位解决情况
众所周知,AA3的AI计算非常耗资源,往往放置超过150个的单位就会出现卡顿,这里除了刷兵外,还有个解决方法为_____运算管理
这是个F7模块,在物件修改器的类别里,在半径处修改数值,如改为2000,则在距离玩家2000米之外的单位不会被运算,从而减少资源占用;

5.刷兵
grp = creategroup West;//创建一个West组
man = grp createunit [typeof player ,//单位种类
markerPos "Fus_this_1",//创建位置
[],0,"none"];
man domove markerPos "Fus_this_1";  //移动到何处




"o_soldier_f"//单位种类  createUnit [getMarkerPos "marker_1", //创建位置_groupAlpha,所在组"loon1 = this ;
this addweapon {binocular}", //初始化,相当于init栏 0.6, //单位技能"corporal"//等级]

5.推荐AI布置脚本
原帖http://forums.bistudio.com/showt ... -occupation-system-(eos)&highlight=EOS_Spawn
沦陷时期系统(EOS)是一个高度可定制的,功能强大的脚本,它允许任务设计者能够轻松地填充他们的场景,AI单位。单位EOS环境中催生不需要时节省资源,最终使没有滞后和去同步大多人任务被自动删除。

EOS功能

-再生侠AI步兵,潜水,快艇,摩托化步兵,装甲车辆,直升机和静态的展示位置。
-自动产卵/删除单位节约服务器资源
-现实缓存单元
-单位巡逻标志区域
-更多控制的高级用户
-对于初学者广泛的说明
-自选配置的AI技能水平
-堡垒防御选项
-参数的概率为更多的现实主义指导的完整说明在下载
http://www.armaholic.com/page.php?id=20262
介绍,这个脚本的特点就是节省资源!!!!!!!!!!!!!
用的爽的请给原作者捐赠http://bangabob.yolasite.com/

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入VME

x
发表于 2014-6-2 09:24:26 | 显示全部楼层
沙发,支持技术贴,给予热爱编辑器的新手们最大支持!正在学习中!
 楼主| 发表于 2014-6-2 13:56:21 | 显示全部楼层
顺便提问下对话框怎么导出?
发表于 2014-6-4 11:39:54 来自手机 | 显示全部楼层
very good tutorial, I'm waiting for updates :D
发表于 2014-6-4 19:59:06 | 显示全部楼层
大神,你QQ是多少?我想请教一点对你来说简单的问题
 楼主| 发表于 2014-6-5 14:21:42 | 显示全部楼层
不是有qq群吗?
发表于 2014-6-6 07:40:34 | 显示全部楼层
好久没见到如此新鲜的技术贴了,顶楼主,大赞
发表于 2014-6-7 05:09:50 | 显示全部楼层
不错啊帮助很大!!!
发表于 2014-6-7 05:24:32 | 显示全部楼层
这才是真好人
发表于 2014-6-7 09:11:34 来自手机 | 显示全部楼层
对于arma3的玩家,这是任务的基础,这都不会的话就是arma的门外汉!不会有成就感的!
 楼主| 发表于 2014-6-7 09:53:39 | 显示全部楼层
wowjjc-pc 发表于 2014-6-7 09:11
对于arma3的玩家,这是任务的基础,这都不会的话就是arma的门外汉!不会有成就感的!

?什么意思,不懂
发表于 2014-6-7 15:42:34 来自手机 | 显示全部楼层
感谢楼主普及!希望再出高级篇!顶你。话说你上面这些我去年就试用过了!不过还是要顶一下。因为这游戏刚出来的时候我不会创任务,玩的没意思,想卖掉游戏的冲动,后来慢慢的我有时间就专门研究创任务,不到一个月基本就有楼主上面的成就,现在对这游戏是爱不释手,当然也不走火入魔。一句话:以前是游戏玩我,苦不堪言,现在是我玩游戏,乐哈!
 楼主| 发表于 2014-6-7 22:03:49 | 显示全部楼层
wowjjc-pc 发表于 2014-6-7 15:42
感谢楼主普及!希望再出高级篇!顶你。话说你上面这些我去年就试用过了!不过还是要顶一下。因为这游戏刚出 ...

共勉,顺便问一下,对话框创建后怎么导出,导出位置在哪?
发表于 2014-6-8 16:34:06 | 显示全部楼层
{:soso_e140:}二代的编辑风格,现在3代模块更简便了
您需要登录后才可以回帖 登录 | 加入VME

本版积分规则

小黑屋|中国虚拟军事网

GMT+8, 2024-5-2 16:38

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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