觸發技能製作教學

用觸發製作技能是一門大學問,觸發技能寫得好不好,幾乎可以用來判斷一個Mapper的功力。效果的寫法無限多,就看大家怎麼發揮囉。以下提供幾個觸發技能的基本技巧:

  1. 隱藏部隊和隱藏技能:這是觸發技能的一大基本功,光是這一部分就能衍生出許許多多的特殊效果,例如:

    • 指定一個目標,使目標及臨近敵軍睡著的群體催眠術(將單體技能改為群體技能)

    • 指定一個地點,使臨近敵軍睡著的群體催眠術(將單體技能改為群體技能)

    • 指定一個區域,使區域內敵軍睡著的群體催眠術(將單體技能改為群體技能)

    • 在施法者身上產生邪狂氣(使指定目標的技能改為不指定目標)

    • 指定一個敵軍,使它隨機受到緩慢、妖火、詛咒、酒醉等效果(混合技能效果)

    原則上全地圖建立一種隱藏部隊就夠了,技能等都可用觸發加。不過請特別注意:

    • 隱藏部隊不應該被別人看到,可以用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:忽略科技需求,省得還要調整科技(把需求的科技全刪掉也可以)

  2. 特效部隊:顧名思義就是把部隊拿來當特效用。因為光是用觸發沒辦法改變特效的大小、顏色、透明度、高度等設定。一般都是建立一個部隊,把模組改為想要的特效、把影子刪掉、並加上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可以改另一個方向的角度

  3. 技能啟動:觸發技能的事件大致上有以下幾種:

    • 以無效果的技能啟動:當部隊施展某技能,就啟動觸發效果。一般以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作為事件

  4. 動畫模擬法:想製作跳砍、擊退等兼具力與美感的技能嗎? ===這類技能其實就是像卡通一樣,在極短的時間內做間斷的動作,使它看起來像連續的一樣:

    • [觸發一]:當部隊施展技能時,設定相關變數。計次變數歸零,並開啟[觸發二]。

    • [觸發二]:一開始是關閉的。每過0.0x秒,根據[觸發一]的變數進行小幅的移動或動作設定。每次執行時計次變數加一,當它大於一定數值時就完成技能效果並關閉此觸發。

    以上做法有個小小的缺點是時間不完全精確,因為Turn Off時觸發的事件仍然在計時中。假設[觸發二]是每0.05秒執行一次,當[觸發一]啟動時,可能間隔0~0.05秒才開始執行[觸發二]。如果該技能連此種微小的誤差都必須考慮的話,請愛用計時器:

    • 建立一個計時器

    • [觸發一]:當部隊施展技能時,設定相關變數。計次變數歸零,設定計時器重複計時,0.0x秒歸零。

    • [觸發二]:以[計時器歸零]作為事件,根據[觸發一]的變數進行小幅的移動或動作設定。每次執行時計次變數加一,當它大於一定數值時就完成技能效果並暫停計時器 。

    可能有人想問:為什麼不用For迴圈和Wait來做,如此一來可以直接用Triggering Unit之類的函數,也可以省下不少變數?

    但是很可惜的是--Wait有延遲,最多可達約0.2秒。雖然一般情況下,0.2秒小到看不見。但是如果你想讓一個部隊連續移動,0.2秒的延遲已足夠使它看起來斷斷續續,因此不適合用這個方法。

    這一類的技能要特別注意突發狀況的處理,例如跳砍時施法者掛掉了怎麼辦? 擊退時目標亂跑怎麼辦?一般都會用暫停和無敵來預防這些狀況發生。但是用觸發處理暫停的話,假設技能一和技能二都會使目標在效果期間暫停。如果技能一發動之後技能二又對同一個目標發動怎麼辦?
    技能一暫停目標=>技能二暫停目標=>……=>技能一解除暫停目標=>(這段期間技能二還沒解除,但是目標的暫停已被取消。可能會出問題)=>技能二解除暫停目標。解法方法可以用技能來使目標無敵,但暫停則較麻煩,請不要製造出二個以上的暫停技能同時作用在同一目標的機會。

  5. 連結技能:也就是施法者必須一直站著施法才有效,一但中斷施法,效果就停止的技能。一般做法分成三部分:

    • [觸發一]:以「部隊開始施展技能」作為事件。為開始施展時的相關設定

    • [觸發二]:以「遊戲時間每0.0x秒」作為事件(或者用計時器的做法),是施法中的實際效果。由[觸發一]開啟;由[觸發三]關閉。

    • [觸發三]:以「部隊停止施展技能」作為事件。為技能停止時的處理

  6. 利用Player - Enable/Disable Ability、Unit - Add Ability和Unit - Remove Ability來允許玩者使用技能或隱藏不想給玩者看到的技能(用Add/Remove Ability比較準確,但是由於英雄技能一但被移除就無法學習,因此多半只能用Enable/Disable Ability處理)。使用Player - Enable/Disable Ability請特別注意部隊所有權轉移的問題。

  7. 利用不同的Buff做為判斷部隊是否正受某些技能的影響,進而精確抓出想要的部隊。

此外,用觸發製作技能時,請特別注意以下幾點:

  • 是否支援多重施法:所謂「多重施法」是指在某個部隊的X觸發技能作用期間,又有部隊施放X觸發技能。由於觸發技能常用變數儲存資料,如果有多梯次的同種技能在同一時段施展,可能會造成變數錯亂而產生BUG。多重施法常見於:

    1. A部隊施展X觸發技能後,立刻重設冷卻時間,再立刻施展X觸發技能。例:舊版OS的Void放時間暫停=>重置球=>時間暫停,造成一大群 部隊永久定住。

    2. 地圖上有二個以上可施展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。

  • 可否改變施法者的所有權:少數技能利用隱藏的部隊來控制科技需求(也就是隨著時間和條件增刪隱藏部隊),這類的技能當施法者改變所有權時,要另外用觸發處理(改變施法者的所有權時,要同時改變隱藏 部隊的所有權) 。

範例 - 群體催眠術(單體技能群體化)

使用觸發將單體技能群體化是最基本的觸發技能製作。基本的手法是當施放主技能時,建立隱藏部隊對目標附近的所有部隊施放相應的隱藏技能。

  1. 以任意部隊為底(建議不要用工人、法師、或英雄,例如步兵就是不錯的選擇)建立隱藏部隊,假設名為Temp Caster,並且設定:

    • Ability清空,並加上Locust

    • Art - Animination - Cast Point、Art - Animination - Cast Backswing 設為0

  2. 以催眠術為底,建立隱藏技能。假設命名為"子催眠術" ,並且設定:

    • Casting Time 設為0:不能有施法時間,否則不能在一瞬間對大量目標施法

    • Cooldown 設為0:不能有冷卻時間,不然對一個目標施法後就沒了

    • Mana Cost 設為0:Mana不夠就不能放了

    • Techtree - Check Dependencies 設為True:省得還要調整科技

  3. 建立主技能,因為實際的效果是由隱藏技能發動,因此主技能最好不要有任何的效果,只要能指定目標或地點就好了。筆者建議用Channel做底。假設這個技能命名為"群體催眠術"

  4. 接下來就是寫觸發囉:

    Group Sleep
    Events
     Unit - A unit Starts the effect of an ability
    Conditions
     (Ability being cast) Equal to 群體催眠術
    Actions
     -------- 建立隱藏部隊 --------
     Unit - Create 1 Temp Caster for (Owner of (Triggering unit)) at (Position of (Triggering unit)) facing Default building facing degrees
     -------- 將隱藏部隊隱藏起來 ,如果要省去這條就得依照上一個問題所述, --------
     -------- 將模組、影子、小地點顯示等問題處理掉 --------
     Unit - Hide (Last created unit)
     -------- 設定隱藏部隊的生命時間,時間到時它將會死亡。時間長短只要夠它施法即可--------
     Unit - Add a 2.00 second Generic expiration timer to (Last created unit)
     -------- 給予隱藏部隊技能,並設定等級與施法者同 --------
     -------- 也可以一開始就把技能放隱藏部隊身上,但是這樣就必須為不同技能建立不同種隱藏部隊,反而較麻煩。 --------
     Unit - Add 子催眠術 to (Last created unit)
     Unit - Set Level of 子催眠術 for (Last created unit) to (Level of (Ability being cast) for (Triggering unit))
     -------- 選取目標附近半徑300內的部隊,對它們施法 --------
     -------- 指定區域的技能,會計算部隊的Collision Size(碰撞體積), --------
     -------- 也就是說一個部隊視為一個圓,只要被削到就會受到效果。 --------
     -------- 但是觸發的Pick Unit不一樣,部隊視為一個點,它的座標必須落在指定的圓形區域內才會被觸發抓到 --------
     -------- 一般遊戲部隊的碰撞體積都在16~32內,所以如果你要做是指定區域的技能, --------
     -------- 最好在觸發中填入較技能的範圍稍大的數字才會較精確 --------
     Unit Group - Pick every unit in (Units within 300.00 of (Position of (Target unit of ability being cast))) and do (Actions)
      Loop - Actions
       -------- 命令隱藏部隊面對選到的部隊 --------
       -------- 因為轉身也要時間,所以為了在一瞬間完成施法,只好用觸發幫它轉 --------
       Unit - Make (Last created unit) face (Picked unit) over 0.00 seconds
       -------- 命令隱藏部隊對選到的部隊施展催眠術 --------
       Unit - Order (Last created unit) to Undead Dreadlord - Sleep (Picked unit)

  5. 如果要做指定地點或區域的群體催眠術,可以將(Position of (Target unit of ability being cast))改成Target point of ability being cast(指定區域的技能,觸發也只能抓到指定的點,也就是該區域的中心)

  6. 如果要做不指定目標的群體催眠術,可以將(Position of (Target unit of ability being cast))改成(Position of (Casting Unit))

  7. 如果不了解為什麼最後一行要填入Undead Dreadlord - Sleep (Picked unit),請參見命令說明

綜合教學/觸發技能教學.txt · 上一次變更: 2007年11月12日 9:08 pm 來自 wasabi
www.chimeric.de Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0