【FF14】ACT Triggernometry/高級觸發(fā)器 教程 入門之章2
想要自己寫觸發(fā)器?那么快點(diǎn)進(jìn)來看看吧!
特此聲明:本文僅為想要“編寫屬于自己的觸發(fā)器”的人們提供幫助,不代表作者本人支持/認(rèn)可ACT觸發(fā)器等輪椅。

由于大部分FF玩家并非計(jì)算機(jī)相關(guān)專業(yè),因此本文的絕大部分內(nèi)容都會使用個(gè)人認(rèn)為便于各位理解的詞語進(jìn)行講解。本文為入門之章2(入門之章1:https://www.bilibili.com/read/cv21365409),后續(xù)還會更新。在看完本章節(jié)后,你應(yīng)該能做到:判斷什么技能是誰對誰釋放的。本章節(jié)分為以下幾個(gè)部分:觸發(fā)器的條件和計(jì)劃任務(wù);寫自己使用醒夢后過60秒tts播報(bào)醒夢的tts觸發(fā)器;寫播報(bào)死刑點(diǎn)誰誰誰,如果是你是T則提示“換T”的觸發(fā)器。
那么我們正式開始。

條件
觸發(fā)器動(dòng)作和條件:在產(chǎn)生符合正則表達(dá)式的模式的日志行時(shí),如果條件滿足則會執(zhí)行動(dòng)作。
——入門之章1
在上一章其實(shí)已經(jīng)提到這個(gè)東西了,不過沒有用過,這章會用。
條件又分為兩種:一是觸發(fā)器條件,在產(chǎn)生符合正則表達(dá)式的模式的日志行時(shí),判斷有沒有滿足該條件,滿足則執(zhí)行動(dòng)作,不滿足則該觸發(fā)器的所有動(dòng)作都不會執(zhí)行;二是動(dòng)作條件,在可以執(zhí)行動(dòng)作的情況下,滿足動(dòng)作條件才能執(zhí)行該動(dòng)作,否則不會執(zhí)行。
先后順序:開著ACT進(jìn)入戰(zhàn)斗狀態(tài)→解析插件自動(dòng)產(chǎn)生戰(zhàn)斗日志→正則表達(dá)式搜索到對應(yīng)模式的日志行→該觸發(fā)器的觸發(fā)器條件是否滿足(滿足繼續(xù)執(zhí)行動(dòng)作,不滿足則不執(zhí)行該觸發(fā)器的所有動(dòng)作)→動(dòng)作的條件是否滿足(同觸發(fā)器條件,但動(dòng)作會有很多,滿足幾條執(zhí)行幾條)。來看看下面這段偽代碼想想最終執(zhí)行的動(dòng)作是什么吧。

再把召喚換成學(xué)者呢,結(jié)果又會如何?都能想到就完全理解條件了!

計(jì)劃任務(wù)
其實(shí)這個(gè)比較復(fù)雜。但在目前的階段,我們只需要關(guān)注三個(gè)東西:一是觸發(fā)器的計(jì)劃任務(wù)中的“觸發(fā)器再次觸發(fā)周期”;二是動(dòng)作的計(jì)劃任務(wù)中的“上次觸發(fā)器動(dòng)作的執(zhí)行延遲”。三是“順序執(zhí)行”。三比較短就直接說——順序執(zhí)行不管什么觸發(fā)器你都勾上,別問那么多為什么。
觸發(fā)器再次觸發(fā)周期顧名思義,就是該觸發(fā)器觸發(fā)之后要過多久才能再次觸發(fā)(不寫的話代表該觸發(fā)器觸發(fā)之后立即能再次觸發(fā))。理論上來說這個(gè)功能應(yīng)該很有用。但是實(shí)際上,我們一般寫高難本的觸發(fā)器,高難本也不知道什么時(shí)候團(tuán)滅……我選擇這個(gè)觸發(fā)器完了就禁用,然后再用另一個(gè)觸發(fā)器來啟用這個(gè)觸發(fā)器。例如:絕神兵泰坦有兩次石牢,為了避免三連桶標(biāo)完之后再標(biāo)奶石牢,我會在標(biāo)完三連桶之后禁用標(biāo)記的觸發(fā)器,再用團(tuán)滅的觸發(fā)器啟用它。
上次觸發(fā)器動(dòng)作的執(zhí)行延遲就是說在上一條動(dòng)作執(zhí)行完畢后,過多久再執(zhí)行這一條動(dòng)作。例如:絕神兵三連桶標(biāo)記,動(dòng)作1在30毫秒后標(biāo)記,動(dòng)作2在30毫秒后標(biāo)記。三連桶點(diǎn)名出現(xiàn),過30毫秒我標(biāo)記1,標(biāo)完1后再過30毫秒我標(biāo)記2(標(biāo)記2實(shí)際上距離觸發(fā)器被觸發(fā)已經(jīng)過去了60毫秒)。

如何寫一個(gè)自己使用醒夢后過60秒tts播報(bào)醒夢的觸發(fā)器
獲取醒夢的日志行具體步驟在上一章,都還記得吧?不記得的自己去復(fù)習(xí),話不多說我們直接進(jìn)入寫正則和條件的環(huán)節(jié)(題外話:每次打木人都得跑到烤餅練兵所,是時(shí)候給自己買一個(gè)房子了)!

搜索醒夢:又是搜到了四條結(jié)果。在上一章中我們了解了游戲內(nèi)日志行(ChatLog 00)一般不會用來寫正則表達(dá)式。那么這個(gè)1A呢?
StatusAdd 1A日志行用于表示單位獲得了buff/debuff。結(jié)構(gòu)為
StatusAdd 1A:[技能id]:[技能名稱]:[持續(xù)時(shí)間]:[來源id]:[來源名稱]:[目標(biāo)id]:[目標(biāo)名稱]
來源可以為空。該行表示Xel'naga Zergling被附加了來源于Xel'naga Zergling的持續(xù)21秒的醒夢buff/debuff。另外特別需要注意的是上一章的傷害數(shù)字是16進(jìn)制,而這個(gè)buff/debuff的持續(xù)時(shí)間是十進(jìn)制。
現(xiàn)在似乎醒夢看起來用15和1A都可以寫正則表達(dá)式啊……?遇事不決按自己的習(xí)慣來。我的習(xí)慣是用15。把該15日志行寫成正則表達(dá)式如下:
^.{14}?ActionEffect?15:.{8}:(?<CasterName>[^:]+?):1D8A
看到CasterName了嘛。我們用< >括起來的東西稱之為變量(名稱),詳見Triggernometry官方文檔(https://github.com/paissaheavyindustries/Triggernometry/wiki/Triggernometry-FAQ-and-examples),太長這里不寫。本文直接講怎么用。還是新建一個(gè)觸發(fā)器,名字隨你便,正則寫上面那個(gè)。條件你看著寫,下面是我寫的供參考。條件和動(dòng)作里寫的${CasterName}就是正則表達(dá)式中的<CasterName>。CasterName只是一個(gè)名字,你把這個(gè)變量起名叫1111都沒有問題,隨便起。


觸發(fā)器條件:至少滿足一個(gè)條件,左側(cè)與右側(cè)的字符串必須相同(區(qū)分大小寫),左側(cè)${_ffxivplayer},右側(cè)${CasterName}
動(dòng)作計(jì)劃任務(wù):上次觸發(fā)器動(dòng)作的執(zhí)行延遲60000毫秒
${_ffxivplayer}以及下文出現(xiàn)的你沒見過的東西是怎么來的可以自己看riggernometry官方文檔。

如何寫一個(gè)播報(bào)死刑點(diǎn)誰,如果是你是T則提示換T的觸發(fā)器
還是極青龍的死刑(連線什么的還找它)。我們快速找到咒怨的替身(提示,是需要詠唱的技能),將其寫為正則表達(dá)式,如下:
.{14} (?:\w+ )14:.{8}:.*:37D2:.*:.{8}:(?<RoleName>[^.]*):
首先我們需要讓它不管你的職業(yè)都播報(bào)死刑點(diǎn)了誰,這個(gè)是不需要條件的,直接添加動(dòng)作,TTS,內(nèi)容為?死刑點(diǎn)${RoleName}
然后就是判斷你是不是T,是的話則提示換T。我們可以用${_ffxivparty[1].job}來表示小隊(duì)列表第一位玩家(也就是你)的職業(yè),四個(gè)T分別是WAR,PLD,DRK,GNB,都寫上就好了。我寫的如下圖


話說寫完之后,又會發(fā)現(xiàn)一個(gè)問題。我是T的話兩個(gè)動(dòng)作是一起執(zhí)行的!就是tts會同時(shí)說死刑點(diǎn)誰和換T,聽不清O_O這種情況一般來說,要么給一個(gè)動(dòng)作加上延遲,要么把一個(gè)動(dòng)作以文字的形式顯示在屏幕上。換T顯然比知道點(diǎn)誰死刑更重要,因此我選擇把死刑點(diǎn)誰變成文字。
動(dòng)作里找到文本顯示設(shè)置即可,非常簡單(字的顏色啊位置啊大小啊自己看著調(diào))。標(biāo)識符可以簡單理解為這段文本的名字(但不會有重復(fù)),標(biāo)識符就代表這段文本。實(shí)時(shí)的意思是……比如我想讓字顯示5秒我就寫${numeric:5-${_since}}??傊M(jìn)行了一番修改之后是這樣的:


寫完后進(jìn)本測試一下!

屏幕中央(我寫的位置)出現(xiàn)了字?。ㄓ謸QT測試了一下,也會tts播報(bào)換T,這個(gè)就沒截圖了)

其實(shí)到這里本文差不多該結(jié)束了。但我還想講一個(gè)小技巧(可跳過)。假如我們想測試觸發(fā)器,連醒夢都60秒一個(gè),像青龍的技能這種該怎么辦?總不能每寫一個(gè)就進(jìn)本測一下吧?接下來,就是偷懶的方法!
首先我們在右上角找到編輯配置,然后在其他里勾選開發(fā)者模式。如圖


例如青龍的死刑。我們還是先找到咒怨的替身!然后復(fù)制日志行。我復(fù)制的是
[09:06:48.232] StartsCasting 14:4000D74C:青龍:37D2:呪怨の形代:1034A2D7:Xel'naga Zergling:4.700:97.58:104.23:0.00:0.26
然后新建一個(gè)觸發(fā)器。正則表達(dá)式空著。添加動(dòng)作日志消息,如下圖

寫好之后,右鍵觸發(fā)器點(diǎn)執(zhí)行

這個(gè)時(shí)候你的屏幕上應(yīng)該會出現(xiàn)死刑點(diǎn)xxx幾個(gè)字!這就是不進(jìn)本就能測試的究極偷懶方法了=。=
不過需要注意的是這玩意只能模擬日志行,不能模擬實(shí)體。也就是說如果你寫的觸發(fā)器里有判斷職業(yè)什么的,是你自己還好,你可以切成對應(yīng)職業(yè);如果是隊(duì)友,就沒辦法了,還是只能進(jìn)本測。但這個(gè)也能解決大多數(shù)情況了。

相信大家看完都完全理解了,有不懂的地方可以評論區(qū)留言。那么本文就到此結(jié)束啦!
下一章節(jié)內(nèi)容預(yù)告:如何使用鯰魚精
課后作業(yè):本文的醒夢觸發(fā)器我們只判斷了使用醒夢的是誰,而沒有判斷職業(yè)。請?zhí)砑訔l件,自己的職業(yè)必須是白魔(WHM),學(xué)者(SCH),占星(AST)或賢者(SGE)。參考答案如下:
