研究War3编辑器(7):在触发器中使用JASS脚本
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次然后輸出信息:
測試:
地圖的腳本
地圖可以導出腳本
不過我并沒有找到“導入腳本”的操作。我覺得這可能意味著,存在于地圖中的數據,并沒有全部都能被導出到腳本中,否則的話二者就可以無縫轉換,而不是現在這樣只能地圖單向到腳本。
通過比較差異來學習腳本操作
我能想象到的一個利用地圖的“導出腳本”功能來學習JASS的一些函數的方法是:
比較操作前后的差異。
例如:
我新建一個空白的地圖,導出腳本到test_a.j
然后在地圖中做些操作,例如放置幾個農民:
再導出腳本到test_b.j
這樣,可以比較兩個腳本的差異(比較差異的軟件我使用了Meld):
經過簡單的分析,就可以明白CreateUnitsForPlayer0中有放置4個農民的操作:
而其中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.j,common.ai,Blizzard.j中。
我通過搜索,在我的C:\Users\admin\Documents\Warcraft III\JassHelper路徑發現了common.j和Blizzard.j:
其中DisplayTextToPlayer和BlzCreateUnitWithSkin都能在common.j中找到:
總結
以上是生活随笔為你收集整理的研究War3编辑器(7):在触发器中使用JASS脚本的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle11g 在azure云中使
- 下一篇: 最小二乘法直线拟合c语言代码,最小二乘法