用觸發製作技能是一門大學問,觸發技能寫得好不好,幾乎可以用來判斷一個Mapper的功力。效果的寫法無限多,就看大家怎麼發揮囉。以下提供幾個觸發技能的基本技巧:
隱藏部隊和隱藏技能:這是觸發技能的一大基本功,光是這一部分就能衍生出許許多多的特殊效果,例如:
指定一個目標,使目標及臨近敵軍睡著的群體催眠術(將單體技能改為群體技能)
指定一個地點,使臨近敵軍睡著的群體催眠術(將單體技能改為群體技能)
指定一個區域,使區域內敵軍睡著的群體催眠術(將單體技能改為群體技能)
在施法者身上產生邪狂氣(使指定目標的技能改為不指定目標)
指定一個敵軍,使它隨機受到緩慢、妖火、詛咒、酒醉等效果(混合技能效果)
原則上全地圖建立一種隱藏部隊就夠了,技能等都可用觸發加。不過請特別注意:
隱藏部隊不應該被別人看到,可以用Hide Unit觸發將隱藏部隊隱藏,或者把部隊的模組設為不存在(隨便打個.或空白或底線_即可)
隱藏部隊不應該留下影子,可以將部隊的影子消除,或者用Hide Unit觸發將隱藏部隊隱藏
隱藏部隊不要在小地圖上顯示出來,可以把Hide Minimap Display改為True、加上蝗蟲技能,或者用Hide Unit觸發將隱藏部隊隱藏
隱藏部隊不應該能被攻擊或受法術影響,可以把Target As改為None、加上蝗蟲技能,或者用Hide Unit觸發將隱藏部隊隱藏
隱藏部隊死亡時不應該留下屍體,可以把Death Type改為Can't Raise, Does not Decay,或者用Hide Unit觸發將隱藏部隊隱藏
隱藏部隊用完當然就要處理掉。可以用Unit - Kill + Unit - Remove(根據B社所言,移除一個被隱藏的部隊可能會出某些問題。如果一個部隊是被隱藏的,最好先殺死再移除)、用Unit - Add Expiration Timer,或者把隱藏部隊的生命值設很低並月設定每秒扣血,讓它自動死亡。
Art - Animination - Cast Point、Art - Animination - Cast Backswing設為0:不要有施法時間才能在一瞬間完成 多個施法動作
如果隱藏部隊要發射投射類的技能或攻擊,最好不要讓它佔有體積,否則位置會怪怪的。可以把Movement Type設為None,或者用觸發Unit - Turn Collision Size Off
接著是隱藏技能,也就是讓隱藏部隊施展的技能。請特別注意以下數據的設定:
Casting Time 設為0:不能有施法時間,否則不能在一瞬間對大量目標施法(少數技能如Shadow Strike(闇影擊)例外)。
Cooldown 設為0:不能有冷卻時間,不然對一個目標施法後就無法立刻再施展了
Mana Cost 設為0:法力不夠會放不出來
Techtree - Check Dependencies 設為False:忽略科技需求,省得還要調整科技(把需求的科技全刪掉也可以)
特效部隊:顧名思義就是把部隊拿來當特效用。因為光是用觸發沒辦法改變特效的大小、顏色、透明度、高度等設定。一般都是建立一個部隊,把模組改為想要的特效、把影子刪掉、並加上Locust(蝗蟲)技能以免受其它 部隊技能影響。不要用時再用觸發刪除即可。
要改變大小可用Animination - Change Unit Size
改變高度可用Animination - Change Unit Flying Height,注意部隊移動類型必須設為Fly
改變顏色和透明度可用Animination - Change Unit Vertex Coloring配合Unit - Change Color
改變動作可用Animination - Play Unit Animation
改變特效部隊的垂直角度(對XY平面的夾角)可以改Art - Maximum Pitch Angle;另外Art - Maximum Roll Angle可以改另一個方向的角度
技能啟動:觸發技能的事件大致上有以下幾種:
以無效果的技能啟動:當部隊施展某技能,就啟動觸發效果。一般以Unit Starts the effect of an ability(部隊使一種技能生效)作為事件
攻擊時發動:一般以Unit Is attacked作為事件,發動者為Attacking Unit。注意此事件並非部隊擊中目標時發動,所以會有些許的不精確(最嚴重的是觸發啟動了,部隊卻沒有真的擊中目標)。
被攻擊時發動:以Unit Is attacked作為事件,發動者為Attacked Unit(Triggering Unit)。注意此事件並非部隊被擊中時發動,所以會有些許的不精確(最嚴重的是觸發啟動了, 部隊卻沒有真的被擊中)。
殺人時發動:以Unit Dies作為事件,發動者為Killing Unit
被殺時發動:以Unit Dies作為事件,發動者為Dying Unit(Triggering Unit)
召喚部隊時,在召喚出的部隊附近產生效果:以Unit Spawns a summoned unit作為事件
受傷害時發動:以Unit Takes damage作為事件
動畫模擬法:想製作跳砍、擊退等兼具力與美感的技能嗎? ===這類技能其實就是像卡通一樣,在極短的時間內做間斷的動作,使它看起來像連續的一樣:
[觸發一]:當部隊施展技能時,設定相關變數。計次變數歸零,並開啟[觸發二]。
[觸發二]:一開始是關閉的。每過0.0x秒,根據[觸發一]的變數進行小幅的移動或動作設定。每次執行時計次變數加一,當它大於一定數值時就完成技能效果並關閉此觸發。
以上做法有個小小的缺點是時間不完全精確,因為Turn Off時觸發的事件仍然在計時中。假設[觸發二]是每0.05秒執行一次,當[觸發一]啟動時,可能間隔0~0.05秒才開始執行[觸發二]。如果該技能連此種微小的誤差都必須考慮的話,請愛用計時器:
建立一個計時器
[觸發一]:當部隊施展技能時,設定相關變數。計次變數歸零,設定計時器重複計時,0.0x秒歸零。
[觸發二]:以[計時器歸零]作為事件,根據[觸發一]的變數進行小幅的移動或動作設定。每次執行時計次變數加一,當它大於一定數值時就完成技能效果並暫停計時器 。
可能有人想問:為什麼不用For迴圈和Wait來做,如此一來可以直接用Triggering Unit之類的函數,也可以省下不少變數?
但是很可惜的是--Wait有延遲,最多可達約0.2秒。雖然一般情況下,0.2秒小到看不見。但是如果你想讓一個部隊連續移動,0.2秒的延遲已足夠使它看起來斷斷續續,因此不適合用這個方法。
這一類的技能要特別注意突發狀況的處理,例如跳砍時施法者掛掉了怎麼辦? 擊退時目標亂跑怎麼辦?一般都會用暫停和無敵來預防這些狀況發生。但是用觸發處理暫停的話,假設技能一和技能二都會使目標在效果期間暫停。如果技能一發動之後技能二又對同一個目標發動怎麼辦?
技能一暫停目標=>技能二暫停目標=>……=>技能一解除暫停目標=>(這段期間技能二還沒解除,但是目標的暫停已被取消。可能會出問題)=>技能二解除暫停目標。解法方法可以用技能來使目標無敵,但暫停則較麻煩,請不要製造出二個以上的暫停技能同時作用在同一目標的機會。
連結技能:也就是施法者必須一直站著施法才有效,一但中斷施法,效果就停止的技能。一般做法分成三部分:
[觸發一]:以「部隊開始施展技能」作為事件。為開始施展時的相關設定
[觸發二]:以「遊戲時間每0.0x秒」作為事件(或者用計時器的做法),是施法中的實際效果。由[觸發一]開啟;由[觸發三]關閉。
[觸發三]:以「部隊停止施展技能」作為事件。為技能停止時的處理
利用Player - Enable/Disable Ability、Unit - Add Ability和Unit - Remove Ability來允許玩者使用技能或隱藏不想給玩者看到的技能(用Add/Remove Ability比較準確,但是由於英雄技能一但被移除就無法學習,因此多半只能用Enable/Disable Ability處理)。使用Player - Enable/Disable Ability請特別注意部隊所有權轉移的問題。
利用不同的Buff做為判斷部隊是否正受某些技能的影響,進而精確抓出想要的部隊。
此外,用觸發製作技能時,請特別注意以下幾點:
是否支援多重施法:所謂「多重施法」是指在某個部隊的X觸發技能作用期間,又有部隊施放X觸發技能。由於觸發技能常用變數儲存資料,如果有多梯次的同種技能在同一時段施展,可能會造成變數錯亂而產生BUG。多重施法常見於:
A部隊施展X觸發技能後,立刻重設冷卻時間,再立刻施展X觸發技能。例:舊版OS的Void放時間暫停=>重置球=>時間暫停,造成一大群 部隊永久定住。
地圖上有二個以上可施展X觸發技能的部隊,A施展X技能後不久,B施展X技能。例:舊版三國兩個關羽同時跳砍,造成一個卡住。
一般稍微複雜一點的觸發技能都不支援多重施法(要支援的話寫起來複雜很多),所以請特別注意此方面的問題。
是否允許科技重疊:所謂「科技重疊」是指一個玩家有二個(或以上)擁有X技能的部隊。如果X技能與科技需求相關,或者和Player - Enable/Disable Ability有關,則此情況下常見錯亂。例:A英雄有3個英雄技能,當A變身成B時則無法施放3技能,一般的作法是將3技能加上[部隊A]科技需求。但是地圖上若有兩個A,一個變成B,一個仍為A,結果二個 部隊都能施展3技能(實際上變成B的那個應該不能用的)。
技能可否重學:少數技能與科技樹相關(如:彈跳攻擊、增加射程的被動技),是用「每學一次技能,對應的科技就升一級」的方式製作。不過技能可以重學,科技卻不能降級……。
可否使用擋魔技能(Spell Shield):Spell Shield是「可以擋住一個對自己施展的負向法術,冷卻時間X秒」的技能,當技能被擋住時,技能本身沒有效果,但是相關的觸發事件(Begins Channeling、Begins Casting、Starts the Effect、…)還是會啟動。所以有時會擋不住,或者只擋一半的問題,更甚者可能產生Bug。
可否改變施法者的所有權:少數技能利用隱藏的部隊來控制科技需求(也就是隨著時間和條件增刪隱藏部隊),這類的技能當施法者改變所有權時,要另外用觸發處理(改變施法者的所有權時,要同時改變隱藏 部隊的所有權) 。
使用觸發將單體技能群體化是最基本的觸發技能製作。基本的手法是當施放主技能時,建立隱藏部隊對目標附近的所有部隊施放相應的隱藏技能。
以任意部隊為底(建議不要用工人、法師、或英雄,例如步兵就是不錯的選擇)建立隱藏部隊,假設名為Temp Caster,並且設定:
Ability清空,並加上Locust
Art - Animination - Cast Point、Art - Animination - Cast Backswing 設為0
以催眠術為底,建立隱藏技能。假設命名為"子催眠術" ,並且設定:
Casting Time 設為0:不能有施法時間,否則不能在一瞬間對大量目標施法
Cooldown 設為0:不能有冷卻時間,不然對一個目標施法後就沒了
Mana Cost 設為0:Mana不夠就不能放了
Techtree - Check Dependencies 設為True:省得還要調整科技
建立主技能,因為實際的效果是由隱藏技能發動,因此主技能最好不要有任何的效果,只要能指定目標或地點就好了。筆者建議用Channel做底。假設這個技能命名為"群體催眠術"
接下來就是寫觸發囉:
如果要做指定地點或區域的群體催眠術,可以將(Position of (Target unit of ability being cast))改成Target point of ability being cast(指定區域的技能,觸發也只能抓到指定的點,也就是該區域的中心)
如果要做不指定目標的群體催眠術,可以將(Position of (Target unit of ability being cast))改成(Position of (Casting Unit))
如果不了解為什麼最後一行要填入Undead Dreadlord - Sleep (Picked unit),請參見命令說明。
討論區