研究War3编辑器(7):在触发器中使用JASS脚本

本文介绍了JASS脚本在Warcraft III地图编辑器中的应用,用于创建触发器和AI。通过实例展示了如何在触发器中运行单行脚本,如显示文本,以及如何将触发器转换为自定义文本以实现更复杂的逻辑,如循环计数。同时,探讨了如何通过比较地图导出的脚本来学习JASS函数,例如创建单位。此外,提到了原生函数的概念,并提供了查阅原生函数的方法。
摘要由CSDN通过智能技术生成

JASS脚本

JASS(Just Another Scripting Syntax) is an event driven scripting language used in Blizzard Entertainment’s Warcraft III game. Map creators can use it in the World Editor to create triggers and AI scripts.
JASS (仅仅是另一个脚本语法)是一个事件驱动型的脚本语言,被用在War3中。用户可以在地图编辑器中使用它来创建触发器和AI脚本。
——Jass Coding | Warcraft 3 World Editor Wiki | Fandom

http://jass.sourceforge.net/doc/ 是一个非官方的JASS手册。

本篇目标是尝试在触发器中使用JASS脚本。并讨论一些相关的内容。

触发器中运行“单行脚本”

在触发器的动作中,有一个类型是Custom Script
在这里插入图片描述
这个“动作”代表运行一个单行的JASS脚本。
例如call DisplayTextToPlayer(GetLocalPlayer(), 0,0, "Hello, yaksue!")将显示“Hello, yaksue!”给玩家
在这里插入图片描述
接着,我设置这个触发器的事件为“当一个单位死亡”
在这里插入图片描述
测试:
在这里插入图片描述

触发器转换为“自定义文本”

上述的使用方式中,只能运行简单的命令,但有时逻辑必须使用多行来表示。

为此,可以将一个触发器转换为“自定义文本”
在这里插入图片描述
正如编辑器所提示,这个转换是不可逆的:(其实这也意味着转换之后,对逻辑的控制更加底层了)
在这里插入图片描述
转换之后生成了多行代码。对这个结构暂时先不研究。
不过可以看到:之前定义的逻辑,在Trig_Untitled_Trigger_001_Actions这个函数中:
在这里插入图片描述
现在稍微改变Trig_Untitled_Trigger_001_Actions其中的逻辑,加一个循环,让它计数10次然后输出信息:

function Trig_Untitled_Trigger_001_Actions takes nothing returns nothing
 local integer i=0
 loop
   exitwhen i==10
   call DisplayTextToPlayer(GetLocalPlayer(), 0,0, "yaksue count:"+I2S(i))
   set i=i+1
 endloop
endfunction

//===========================================================================
function InitTrig_Untitled_Trigger_001 takes nothing returns nothing
    set gg_trg_Untitled_Trigger_001 = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Untitled_Trigger_001, EVENT_PLAYER_UNIT_DEATH )
    call TriggerAddAction( gg_trg_Untitled_Trigger_001, function Trig_Untitled_Trigger_001_Actions )
endfunction

测试:
在这里插入图片描述

地图的脚本

地图可以导出脚本
在这里插入图片描述
不过我并没有找到“导入脚本”的操作。我觉得这可能意味着,存在于地图中的数据,并没有全部都能被导出到脚本中,否则的话二者就可以无缝转换,而不是现在这样只能地图单向到脚本。

通过比较差异来学习脚本操作

我能想象到的一个利用地图的“导出脚本”功能来学习JASS的一些函数的方法是:
比较操作前后的差异。

例如:
我新建一个空白的地图,导出脚本到test_a.j
然后在地图中做些操作,例如放置几个农民:
在这里插入图片描述
再导出脚本到test_b.j

这样,可以比较两个脚本的差异(比较差异的软件我使用了Meld):
在这里插入图片描述
经过简单的分析,就可以明白CreateUnitsForPlayer0中有放置4个农民的操作:

function CreateUnitsForPlayer0 takes nothing returns nothing
    local player p= Player(0)
    local unit u
    local integer unitID
    local trigger t
    local real life

    set u=BlzCreateUnitWithSkin(p, 'hpea', - 209.7, 79.4, 109.955, 'hpea')
    set u=BlzCreateUnitWithSkin(p, 'hpea', - 90.2, 74.0, 66.645, 'hpea')
    set u=BlzCreateUnitWithSkin(p, 'hpea', 30.3, - 11.6, 155.725, 'hpea')
    set u=BlzCreateUnitWithSkin(p, 'hpea', - 21.9, - 131.8, 169.700, 'hpea')
endfunction

而其中BlzCreateUnitWithSkin就是放置单位的操作了。


接下来,我可以在一个新的地图中,建立一个触发器,使用Map initialization作为事件,转换为“自定义文本”,然后将生成农民的代码拷贝到函数体中:
在这里插入图片描述
之后,我虽然在地图编辑器内看不到农民,但是因为有了一个在地图初始化阶段就触发的触发器,其中有逻辑放置农民。所以我运行游戏的时候可以看到4个农民:
在这里插入图片描述

如何查阅原生函数

DisplayTextToPlayer用来显示信息,BlzCreateUnitWithSkin用来放置单位,这些函数都是“原生函数(Native functions )”

http://jass.sourceforge.net/doc/globals.shtml#native中有如下描述:
Native functions are functions that are implemented within the Warcraft III engine. They form the API which the game exports to JASS programmers. Unless you have access to Warcraft III’s source code, you probably will not be defining a new native function, but you will probably call them. Their prototypes are declared in common.j, common.ai, and Blizzard.j.
原生函数(Native functions)是War3引擎所实现的函数,他们构成了导出给JASS程序员的API。除非你可以获取War3的源代码,否则你不可能定义新的原生函数,只能调用他们。函数的声明被放在了common.jcommon.aiBlizzard.j中。

我通过搜索,在我的C:\Users\admin\Documents\Warcraft III\JassHelper路径发现了common.jBlizzard.j
在这里插入图片描述
其中DisplayTextToPlayerBlzCreateUnitWithSkin都能在common.j中找到:

native DisplayTextToPlayer          takes player toPlayer, real x, real y, string message returns nothing
native BlzCreateUnitWithSkin                       takes player id, integer unitid, real x, real y, real face, integer skinId returns unit
功能最强大的Jass编辑器更新 1.4.3.3 -> 1.4.3.4[!] 修正了当字符串或注释存在括号时括号提示的显示错误问题;[!] plugin(插件)菜单不再可以使用任意热键;[!] 修正了Shortcut Manager的程序运行期间内存泄露问题;[!] 修正了打开某些地图文件时Global ListTriggers可能产生严重错误的问题;[+] 增加了提示无对应的括号的提示(该功能默认关闭);[+] 保存脚本文件到地图文件时自动删除"(attributes)"文件;[+] 在config.exe增加了关联地图类型文件(*.W3M, *.W3X)功能(使用该功能时请选择“否”,否则将覆盖掉原来使用WE打开的关联方式);[+] Shortcut Manager的热键选择列表去除plugin菜单已使用的热键; 将UTF8<->ASC功能移动到Format All/Selected Text菜单下; 提高了文件较长时的一些相关功能的效率。文件说明JassShopPro.exe - 主程序config.exe - 设置程序。许多JSP有许多强大的功能需要调用该文件来设定MpqLib.dll - 用于直接读取地图jass文件的动态链接库(Thx to Soar)CHS.lng - 简体文语言包。建议每次更新都覆盖掉default.tmt - 模板文件。这是一个文本文件,可以根据该文件内容(挺容易懂的)设计自定义的模板菜单,支持快捷键和一些控制命令。可以通过config.exe定义自己的模板菜单文件common.j, blizzard.j, common.ai - 目前为1.18的API文件,主程序至少需要common.j文件pjass.exe - 用于语法检查,无此文件,主程序的语法检查将不可用jsp.ini - JassShopPro.exe会自动创建该文件,用于保存设置,无此文件时config.exe不可用。当首次运行JassShopPro的时候,如果没有找到这个文件,程序会自动搜索并提问是否使用语言包(语言包有特殊的设定,如果是某些英文版改的文版xp的或者新加坡文版之类,不会自动提问CHS.lng)功能 语法高亮 根据jass2语言定义了十几种字体,可以通过config.exe自己设定字体颜色、风格,以及高亮规则 智能大小写转换 可自动转换大小写,并能自动判断是否进行大小写转换,例如输入 “location”,此时如果再输入“(”,程序将认为它是函数,自动转换成“Location(”,否则认为是类型,不进行大小写转换 快速函数搜索 可以方便快捷的查找API函数、常量、变量、类型。可以选择是否从名称第一个字母开始匹配,是否注意大小写,该函数的返回类型或变量、常量的类型。搜索按钮将自动在所有函数/变量常量/类型查找。按回车或者空格会将当前词汇添加到下拉菜单。单击其条目,下面的代码框将显示源代码,双击搜索列表项目,将自动插入代码 标准的MDI(多文档界面)操作 Ctrl+F4关闭一个文档,Ctrl+Tab切换文档 功能强大的搜索功能 有丰富的选项,在主界面编辑时会智能填入搜索内容。如选代码不含有换行符,搜索对话框将自动填入选的文本,超过一行则会自动将搜索范围变为 Selected Text (选文本) 书签功能 每个编辑的文本可以定义10个书签 当前代码结构 左侧的列表会显示全部的全局变量、函数、全局Trigger。红色的变量代表常量,红色的函数代表常函数,红色的Trigger代表缺乏全局变量声明的T。目前Trigger列表只是列出来,没有任何实际功能。对于变量和函数,左键单击在代码框显示代码,右键单击跳转到声明位置,双鞑迦耄孛旖菁麱2 )会在整个编辑文本改名 强大的模板引擎 具体可以参照Default.tmt文件,可以自定义类别,自定义快捷键,做一些比较复杂的功能 语法检查 该功能需要pjass.exe文件。可以在检查结果双击条目跳转到出错位置 测试地图 现在程序已经支持直接打开地图文件war3map.j或者scripts\war3map.j文件,或者直接储存到地图文件。如果正在编辑的是地图文件,可立刻使用WE的标准操作快捷键Ctrl+F9进行地图测试 插入颜色 可以直观的选择颜色,然后转换成jass的颜色代码插入到文本 强大的文本缩进 可通过config.exe设置tab键的宽度,编辑代码时也会根据关键词进行缩进。菜单提供了缩进、去除缩进、增加缩进功能,自动根据是否选文本对选代码或者全文进行缩进处理,方便阅读 与WE通信 可以直接与WE的文本编辑框通信,相互复制代码 UTF-8 <-> ASC 人性化的操作 主程序支持参数,可以通过config.exe在注册表注册文件类型,从而双击打开相关类型文件。如果已经有一个JassShopPro在运行,再次双击注册为用JSP打开的类型的文件时,将在已启动的文档打开文件。同样,支持拖放操作,可以直接将文件拖到窗口打开 自动完成功能 输入“set ”,将自动显示本地变量与全部全局变量;输入“call ”,则会自动显示当前代码前面的全部函数。输入一个有效的函数名称并按“(”时,将显示该函数参数的提示(或者按F1) 丰富的快捷键 大多数有用的功能都提供了快捷键。 Ctrl+鼠标左键单击(F2):如果大小写不正确,会自动转换大小写。如果被点的是当前文档的全局变量、常量或者函数,则会自动跳转到声明位置 双击:可在代码框得到相关的源代码 压缩代码 可以进行一些简单的代码压缩处理,可以处理:去除注释,压缩全局变量、常量名称,压缩函数名称,去除无用回车,去除缩进等 自定义菜单快捷键 主程序的Shortcut Manager可以方便帮助您设置菜单的快捷键,方便需要 plug-in 支持插件程序,可以通过config.exe方便的管理已安装的插件。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值