武装突袭3吧 关注:45,233贴子:307,891

任务编辑玩转游戏脚本 从入门到精通全篇基础教程

只看楼主收藏回复

SQF就是StatusQuoFunction的缩写,是SQS(StatusQuoScript)升级版,所有懂的编辑任务的人都知道脚本对于武装突袭3的重要性,脚本可用控制游戏场景的任何事物,例如:游戏逻辑,触发器,建筑物,AI,武器,载具等。从闪点行动起脚本就分为SQS和SQF,进入武装突袭3后SQF的优势直接大于SQS,为什么这么说?因为SQF的文件执行效率比SQS更快,可以保证游戏运行脚本的效率,比SQS更加架构化,比SQS更加易懂,SQF脚本就占据了SQS脚本的主导地位。


IP属地:河南1楼2019-06-24 17:30回复
    第一节 : 了解任务的事件脚本 init.sqf
    什么叫事件 不懂百度
    我们来说一下,首先由我们在任务编辑器中创建的任务分为2种,第一种
    则是 单人任务,第二种则为多人任务
    初始任务保存后得到文件名.岛屿名 的任务名称
    里面会包含mission.sqm文件,这个文件包含你在任务中放置的全部对象
    该文件会被玩家和服务器读取
    下面为大家介绍事件脚本(默认是没有这个文件的需要自己创建):
    首先我们在任务创建一个名为init.sqf 的脚本文件
    这个事件脚本的用处非常大 它会在你的任务开始时(在简报屏幕之前)执行脚本内容
    例如我们想编译某个脚本以供调用,则可以将文件写入在init,例如
    call compile preprocessFile "elstp.sqf";
    或者想让进入的玩家显示hello world 可以写入
    hint "hello world";(不推荐,建议写入在玩家本地事件 后面讲到)
    并且,该文件的执行不会被错误代码阻止,也就是说你在里面写的脚本发生错误并不会中断运行
    而使用waitUntil 函数可以实现等待(后面讲解)如果你在里面写大规模的sqf脚本推荐使用 spawn函数(后面讲解)
    总结:该文件是一个任务的基础初始化文件,并且会在任何客户端上执行。它会在你的任务开始时(在简报屏幕之前)执行脚本内容


    IP属地:河南4楼2019-06-24 17:35
    回复


      来自iPhone客户端5楼2019-06-24 17:46
      回复
        第二节 : 了解任务的事件脚本 exit.sqf与onPlayerKilled.sqf
        exit.sqf
        作用:任务结束时(在汇报屏幕之前)执行
        onPlayerKilled.sqf
        作用:当玩家在单人游戏或多人游戏中被杀时执行
        例如在其中写入:hint "你被杀死了!"; 当玩家死亡时将提示给玩家


        IP属地:河南6楼2019-06-24 18:01
        回复
          第三节 : 了解任务的事件脚本 initServer.sqf 与 initPlayerServer.sqf
          initServer.sqf 这个脚本作用就大了,但是貌似只能在多人上执行,单人貌似没啥用
          他负责在任务开始时仅在服务器上执行。如果你想某些东西不想让客户端去处理。建议写在
          这个里面,比如初始化某些脚本。
          initPlayerServer.sqf
          当玩家加入任务时仅在服务器上执行
          此脚本依赖于BIS_fnc_execVM和remoteExec(远程执行)。如果CfgRemoteExec的类函数设置为mode = 0或1,则永远不会执行该脚本。不推荐使用


          IP属地:河南7楼2019-06-24 18:05
          回复
            第四节 : 了解任务的事件脚本 initPlayerLocal.sqf 与 onPlayerKilled.sqf
            initPlayerLocal.sqf 这个经常用到 他将在玩家在单人游戏或多人游戏中被执行。
            例如你想给一个玩家进入任务后提示一句欢迎你来到服务器可以在里面写入
            hint "欢迎来到服务器"; 并且在这里执行的脚本有一个固定的对象 那就是 player
            所以你可以在这里处理很多,例如给玩家添加按钮 ,给玩家添加事件,都可以。他不会被全局执行。
            仅在单个客户机上执行脚本。意思就是说如果执行这个脚本按道理来说全部玩家都会提示,但是在这里
            仅对但个玩家提示,也就是进入服务器的人提示。
            onPlayerKilled.sqf
            当玩家在多人游戏任务中重生时,在本地执行。如果respawnOnStart为0或1,则此事件脚本也将在任务开始时触发,oldUnit将在此实例中为objNull。如果respawnOnStart等于-1,则此任务开始时不会触发此脚本。
            这个脚本则是当玩家重生的时候会执行,比如你在 initPlayerLocal.sqf 给玩家添加按钮 player addAction
            这会发现当玩家死亡,对象会丢失,也就是说玩家复活后会移除按钮,这时候想简单处理则可以在玩家复活的时候重新添加按钮!


            IP属地:河南9楼2019-06-24 18:13
            回复
              第二章 任务全局设置Description.ext
              一般自己在编辑器保存是不会带这个文件的,需要自己新建
              里面涵盖的东西非常多,这里只说常用
              定义任务头:
              你的任务在多人列表刷出来显示的任务的类型(引用官方例子)
              class Header {
              gameType = CTF ; //游戏类型
              minPlayers = 1 ; //任务支持的最小玩家数量
              maxPlayers = 10 ; //任务支持的最大玩家数量
              };
              任务选择菜单中显示任务名称。
              briefingName = "xxx" ;
              定义任务载入时的名称(可以使用html代码变换颜色)
              onLoadMission="xxx任务"
              在加载简介时显示消息
              onLoadIntro="你好";
              任务载具时显示的图片(需要使用armatools工具转换格式)
              loadScreen = "pictures \ intro.paa";
              任务的作者
              author = "xxx";
              由于参数过多,更多参数请参阅官方文档


              IP属地:河南11楼2019-06-24 18:21
              回复
                SQF 基础语法: 第一节 认识变量 声明变量
                变量是编程中常见的,在其它编程语言中,变量的声明有很大规范性,例如java使用 int num = 10;
                而在sqf中,局部变量者使用 下划线来声明 例如
                _num = 10; 如果没有下划线,则视为全局变量
                通过简单的计算
                _num = _num + 20
                打印输出
                systemChat 这是在屏幕左下角打印文字, str 的意思很明确,则是转换为字符串
                systemChat str _num
                由此可见 游戏中会输出 : 30
                例如声明一个变量打印玩家名字
                _playerName = name palyer;
                systemChat _playerName ;
                则会输出玩家名称.
                SQF还允许数组
                SQF没有java以及其他语言那样明确的类型,所以它是属于游戏脚本语言,
                如果你声明的变量 = " " 则是字符串,如果[] 则是 数组
                类似于 JavaScript中的用 var 声明的变量


                IP属地:河南12楼2019-06-24 18:31
                回复
                  不够通俗


                  IP属地:广东来自iPhone客户端13楼2019-06-25 01:09
                  回复
                    这种技术帖必须顶啊!


                    IP属地:北京14楼2019-06-28 01:32
                    回复
                      if 判断函数的应用
                      if字面意思就能知道,如果
                      if是用来判断一个对象或地址,他返回 Boolean ,易语言叫 逻辑型
                      boolean只有两种状态 ,true/真 false/假
                      默认如果是true则会执行
                      例如
                      _a = true;
                      if (_a) then {hint "你好!"}

                      _b = 10;
                      if(_b >= 10) then {xxxxx} else{BBBBB}
                      代码解释:声明变量b等于10; 如果变量 b大于10 着运行 xxx中的代码块,当条件不成立着运行BBBBB的代码块
                      代码块指的是 {这里被括起来的的代码}


                      IP属地:河南16楼2019-06-28 20:25
                      回复
                        大佬,想请问下有没有做地图的工具啊,就是自己做一个全新的地形


                        IP属地:陕西来自iPhone客户端20楼2019-06-28 23:04
                        回复
                          感谢/


                          来自Android客户端21楼2019-06-29 09:58
                          回复
                            逻辑运算符的应用
                            普通的加减乘除等于就不说了
                            != 不等于
                            例如
                            _a = 1 ;
                            _b =2;
                            if (_a != _b) then {xxxx}
                            代码解释 如果a不等于b则运行


                            IP属地:河南22楼2019-06-29 15:13
                            回复
                              取百分比
                              _A % _B
                              == 绝对等于
                              一个 等于 是赋值, 两个等于则是比较
                              _a = 1;
                              _b = 1;
                              if (_a == _b) then {XXXX}
                              解释:a等于b则执行XXXX代码


                              IP属地:河南23楼2019-06-29 15:13
                              回复