欢迎光临散文网 会员登陆 & 注册

【FF14】ACT Triggernometry/高级触发器 教程 入门之章2

2023-01-24 10:20 作者:Zergling_CN  | 我要投稿

想要自己写触发器?那么快点进来看看吧!

特此声明:本文仅为想要“编写属于自己的触发器”的人们提供帮助,不代表作者本人支持/认可ACT触发器等轮椅。

由于大部分FF玩家并非计算机相关专业,因此本文的绝大部分内容都会使用个人认为便于各位理解的词语进行讲解。本文为入门之章2(入门之章1:https://www.bilibili.com/read/cv21365409),后续还会更新。在看完本章节后,你应该能做到:判断什么技能是谁对谁释放的。本章节分为以下几个部分:触发器的条件和计划任务;写自己使用醒梦后过60秒tts播报醒梦的tts触发器;写播报死刑点谁谁谁,如果是你是T则提示“换T”的触发器。

那么我们正式开始。

条件

触发器动作和条件:在产生符合正则表达式的模式的日志行时,如果条件满足则会执行动作。

——入门之章1

在上一章其实已经提到这个东西了,不过没有用过,这章会用。

条件又分为两种:一是触发器条件,在产生符合正则表达式的模式的日志行时,判断有没有满足该条件,满足则执行动作,不满足则该触发器的所有动作都不会执行;二是动作条件,在可以执行动作的情况下,满足动作条件才能执行该动作,否则不会执行。

先后顺序:开着ACT进入战斗状态→解析插件自动产生战斗日志→正则表达式搜索到对应模式的日志行→该触发器的触发器条件是否满足(满足继续执行动作,不满足则不执行该触发器的所有动作)→动作的条件是否满足(同触发器条件,但动作会有很多,满足几条执行几条)。来看看下面这段伪代码想想最终执行的动作是什么吧。

再把召唤换成学者呢,结果又会如何?都能想到就完全理解条件了!

计划任务

其实这个比较复杂。但在目前的阶段,我们只需要关注三个东西:一是触发器的计划任务中的“触发器再次触发周期”;二是动作的计划任务中的“上次触发器动作的执行延迟”。三是“顺序执行”。三比较短就直接说——顺序执行不管什么触发器你都勾上,别问那么多为什么。

触发器再次触发周期顾名思义,就是该触发器触发之后要过多久才能再次触发(不写的话代表该触发器触发之后立即能再次触发)。理论上来说这个功能应该很有用。但是实际上,我们一般写高难本的触发器,高难本也不知道什么时候团灭……我选择这个触发器完了就禁用,然后再用另一个触发器来启用这个触发器。例如:绝神兵泰坦有两次石牢,为了避免三连桶标完之后再标奶石牢,我会在标完三连桶之后禁用标记的触发器,再用团灭的触发器启用它。

上次触发器动作的执行延迟就是说在上一条动作执行完毕后,过多久再执行这一条动作。例如:绝神兵三连桶标记,动作1在30毫秒后标记,动作2在30毫秒后标记。三连桶点名出现,过30毫秒我标记1,标完1后再过30毫秒我标记2(标记2实际上距离触发器被触发已经过去了60毫秒)。

如何写一个自己使用醒梦后过60秒tts播报醒梦的触发器

获取醒梦的日志行具体步骤在上一章,都还记得吧?不记得的自己去复习,话不多说我们直接进入写正则和条件的环节(题外话:每次打木人都得跑到烤饼练兵所,是时候给自己买一个房子了)!

搜索醒梦:又是搜到了四条结果。在上一章中我们了解了游戏内日志行(ChatLog 00)一般不会用来写正则表达式。那么这个1A呢?

StatusAdd 1A日志行用于表示单位获得了buff/debuff。结构为

StatusAdd 1A:[技能id]:[技能名称]:[持续时间]:[来源id]:[来源名称]:[目标id]:[目标名称]

来源可以为空。该行表示Xel'naga Zergling被附加了来源于Xel'naga Zergling的持续21秒的醒梦buff/debuff。另外特别需要注意的是上一章的伤害数字是16进制,而这个buff/debuff的持续时间是十进制。

现在似乎醒梦看起来用15和1A都可以写正则表达式啊……?遇事不决按自己的习惯来。我的习惯是用15。把该15日志行写成正则表达式如下:

^.{14} ActionEffect 15:.{8}:(?<CasterName>[^:]+?):1D8A

看到CasterName了嘛。我们用< >括起来的东西称之为变量(名称),详见Triggernometry官方文档(https://github.com/paissaheavyindustries/Triggernometry/wiki/Triggernometry-FAQ-and-examples),太长这里不写。本文直接讲怎么用。还是新建一个触发器,名字随你便,正则写上面那个。条件你看着写,下面是我写的供参考。条件和动作里写的${CasterName}就是正则表达式中的<CasterName>。CasterName只是一个名字,你把这个变量起名叫1111都没有问题,随便起。

触发器条件:至少满足一个条件,左侧与右侧的字符串必须相同(区分大小写),左侧${_ffxivplayer},右侧${CasterName}

动作计划任务:上次触发器动作的执行延迟60000毫秒

${_ffxivplayer}以及下文出现的你没见过的东西是怎么来的可以自己看riggernometry官方文档。

如何写一个播报死刑点谁,如果是你是T则提示换T的触发器

还是极青龙的死刑(连线什么的还找它)。我们快速找到咒怨的替身(提示,是需要咏唱的技能),将其写为正则表达式,如下:

.{14} (?:\w+ )14:.{8}:.*:37D2:.*:.{8}:(?<RoleName>[^.]*):

首先我们需要让它不管你的职业都播报死刑点了谁,这个是不需要条件的,直接添加动作,TTS,内容为 死刑点${RoleName}

然后就是判断你是不是T,是的话则提示换T。我们可以用${_ffxivparty[1].job}来表示小队列表第一位玩家(也就是你)的职业,四个T分别是WAR,PLD,DRK,GNB,都写上就好了。我写的如下图

话说写完之后,又会发现一个问题。我是T的话两个动作是一起执行的!就是tts会同时说死刑点谁和换T,听不清O_O这种情况一般来说,要么给一个动作加上延迟,要么把一个动作以文字的形式显示在屏幕上。换T显然比知道点谁死刑更重要,因此我选择把死刑点谁变成文字。

动作里找到文本显示设置即可,非常简单(字的颜色啊位置啊大小啊自己看着调)。标识符可以简单理解为这段文本的名字(但不会有重复),标识符就代表这段文本。实时的意思是……比如我想让字显示5秒我就写${numeric:5-${_since}}。总之进行了一番修改之后是这样的:

写完后进本测试一下!

屏幕中央(我写的位置)出现了字!(又换T测试了一下,也会tts播报换T,这个就没截图了)

其实到这里本文差不多该结束了。但我还想讲一个小技巧(可跳过)。假如我们想测试触发器,连醒梦都60秒一个,像青龙的技能这种该怎么办?总不能每写一个就进本测一下吧?接下来,就是偷懒的方法!

首先我们在右上角找到编辑配置,然后在其他里勾选开发者模式。如图

例如青龙的死刑。我们还是先找到咒怨的替身!然后复制日志行。我复制的是

[09:06:48.232] StartsCasting 14:4000D74C:青龍:37D2:呪怨の形代:1034A2D7:Xel'naga Zergling:4.700:97.58:104.23:0.00:0.26

然后新建一个触发器。正则表达式空着。添加动作日志消息,如下图

写好之后,右键触发器点执行

这个时候你的屏幕上应该会出现死刑点xxx几个字!这就是不进本就能测试的究极偷懒方法了=。=

不过需要注意的是这玩意只能模拟日志行,不能模拟实体。也就是说如果你写的触发器里有判断职业什么的,是你自己还好,你可以切成对应职业;如果是队友,就没办法了,还是只能进本测。但这个也能解决大多数情况了。

相信大家看完都完全理解了,有不懂的地方可以评论区留言。那么本文就到此结束啦!

下一章节内容预告:如何使用鲶鱼精

课后作业:本文的醒梦触发器我们只判断了使用醒梦的是谁,而没有判断职业。请添加条件,自己的职业必须是白魔(WHM),学者(SCH),占星(AST)或贤者(SGE)。参考答案如下:


【FF14】ACT Triggernometry/高级触发器 教程 入门之章2的评论 (共 条)

分享到微博请遵守国家法律