[WA] WA从入门到入土——团队框架篇
WA从入门到入土团队框架篇
前言
大家好,我是来自祈福的Momothewolf。在日常的插件维护开发过程中,经常有小伙伴向我提交框架相关的需求,这些需求往往千奇百怪:同样一个增益会有非常不一样的显示方式,高亮的目标有非常强的定制逻辑等等。
因此,这里整理了一些我用WA强化框架时的心得和资料,希望小伙伴以后可以更得心应手地开发自己想要的功能。
注:本文的示例与图示均使用WeakAura 3.7.0 版本,在以后的版本更新中,配置和接口不一定相同,敬请谅解
祈福-小猫咪能有什么坏心思呢 公会 招募志同道合玩家共同进行tbcc后续阶段的科研
本文采用 CC BY 4.0 协议
基础-智能群组
下面以要求频率最高,最常见的框架显示单一增益——绽放为例,讲解使用内建的功能对光环进行监视
首先输入/wa或者点选小地图的wa按钮,可以看到wa的配置界面
和大部分wa用户直接点击导入不同的是,我们点选新建,这里点击图标,为了在框架上显示绽放的图标和剩余时间
给自己的wa起一个合适的名字以后,在图示标签页,可以配置自己期望的图标大小、位置、层级等信息
为了清晰地显示在框架上,这里我们调整图标大小为15,锚点对齐到 单位框架 的中间
为了同时查看绽放的冷却和层数,我们勾选显示冷却,并且在文字里选择%s ,即层数。文字的锚点同样需要根据需求修改
然后是触发标签页,触发器选择光环-智能群组-增益效果
勾选名称,并输入增益的名字或者id。如绽放的id:33763
增益的id可以通过idTip插件查到,或者使用wowhead搜索
这里我们勾选 只来源于自己 ,避免有相同职业的增益造成界面混乱,同时勾选 自动克隆 ,这会让团队框架上所有满足条件(即有增益的团员)都会显示图标
然后就可以测试了,关闭wa页面,对自己施放绽放测试效果
如果显示效果不满意,可以重新回到配置页面调整层级、锚点等设定
但是仅仅这样,和大部分框架默认提示没什么区别,更多小伙伴监控绽放的实际需求是:图标太多,看不过来。或者说,能重点提示需要补绽放的目标
一般这种需求通过高亮图标或者框架来实现
重新回到配置页面,在条件标签页,选择我们的逻辑:如果 全部 当触发器1的层数3层 且剩余时间小于2秒的时候发光
现在切回去测试效果
绽放可以在3层且剩余2秒时高亮了
如果要高亮框架,则在条件里选择发光外部元素 单位框体 ,勾选自己想要的发光颜色如绿色
并且为了让框架高亮可以消失,在动作里,图标隐藏时,勾选 隐藏由此光环应用的发光
退出进行测试
可以看到框架的边框发光了,如果不满意,可以切回去配置一下发光的粗细、速度等等
我这里建议只让图标发光而不是让框架发光,因为框架的边框只有一个,而发光的WA可以有无数个。为避免冲突,要尽量避免使用框架高亮
下面是示例wa的作业:
!WA:2!Dr1pVTXnuClOwK2lab2QPgibfibgOEiPWivg1zPEqNJuSluKuOo)NImiX7okrgtrEHKN(J3QMYSq)eO5o51I2bp05dcf9dGhA39NG(ipj3KQbQhFVhFVF)(DpYc1knOuCP43V1CwKu0wMQIiF1AlWPgQu1mXWKcTNAsZE90etHlXIiWFljtycpOAJGQOfrsjpwos0EelH09QvBRg3Nqv4ixf2dPnyLXZNjygVWEWFA6MxtzXKoyoVtFUCKU7uJI1VprPV32QLM)XCnvo6aUuq0D9ntsiiCQcxEMDvGhq0peT7UpFVDvqlBk4t6Iidja4oKG5gkYLI3uDcHZpkw7DTon0Lq70E9yJVSZbvAh0PDqfuGFkGnuFLmn52SAPiqwO2TQwVUkvtAaLR78ysiC6aamQdRwVvTJRplvSeWEjBy58qsq((xjJj)YA3a6frjW8ta2bcYBU5CcjPcaRidcdseDMMW7501SpfAGgBacAi05auqK(wr8jV)(jLmKXMoAkgK4Zw(rj5boNULEs1amKWsdFbiCZUn8wFToz9pOchi5s1puOqHIxN7Dfg8RCCqZKVW5egfKqPyrNYInu)kW2BY7fBmj258NwKpx8Jlr0vU4VnvBy9Ma8rjnaxcaN(nA2OA26kGv2CM7smYbJIWVzljHWKSEnf7Ih)6uCmOd4hhe8rCFvNw48nsQIpvHtME6sJCamKPzHCs3LC(dMDt24OgnQI643miO5Rqh9YddwCBRBZUG8GLm6SpQp2OUp7npoO(rnQ(xlSdU1uK3LsertA9jpBNYFxo7SbU0USQctTBShEryQXifnhsuC8K5w31jI(g6x6YFfZMz3CWTkZvW03lx5H6BdsDP0ocZjfDajGYIohUOOl6IuNb2B4AGpOlefnKsy9PMh5ZL44A(AGOBIgKYnmpF7S4MzN4HI4yT2AfAGklmwZ5k3iOf((23jUjxDQPG7dwNZoUXrb1qvEvv14v8D1dbDtU)kt7eWlyAm8rjModly25kPyVSpVw26zp9kcwtABuo14olIT3aGWDSx7vAc03y9uBo2wM9u)byMWDWSW7KfLfNboZU7)3ZCJmAy(1UpR1MBXId)NF93(7F(3r)3yhcZtO4IOr2H5hDzplTaCaZD3TCkl(Y3E8ENWF93oUCZ6kMWwmcneGtpwFp)lKYbfMBbhZ9w3d3gfrjrNxl7EFZAthIvmlFlxPXl2sMS1(7h6IQFceVyMjeEye2HgI5PKs7MNsEORjJty5sqaBajBCPY2WF)(Qikw0hE6B7SXDNMOKG8yMyFPyNY74g8yI87)Wr9YEt3sA0U788DEwPH)5z)7d
总结:WA内建了智能群组的光环监控,并可以定位到单位框架上。通过这些功能,我们可以个性化的定制框架角落图标,便于监控一些自己的关键增益或者致命减益,用处非常广
======
WA目前内置的,可以匹配到智能群组的触发器,只有光环的增减益,单位信息的施法、生命值、能量,如果要做一些复杂的匹配或者混合逻辑,需要借助自定义触发器来实现
警告:接下来的内容涉及到自定义代码,因此需要一定的编程基础来阅读
进阶-自定义触发器
WA的状态触发器更新器(TSU)功能,可以满足熟悉事件以及内置接口玩家对动态信息监控的需求,并且具有“克隆”的特性,可以一次触发生成多个状态,用于在框架上多个单位显示监控信息
目前WA使用了LibGetFrame库来定位团队框架,LGF目前支持的框架如下:
-- raid frames
"^Vd1", -- vuhdo
"^Vd2", -- vuhdo
"^Vd3", -- vuhdo
"^Vd4", -- vuhdo
"^Vd5", -- vuhdo
"^Vd", -- vuhdo
"^HealBot", -- healbot
"^GridLayout", -- grid
"^Grid2Layout", -- grid2
"^PlexusLayout", -- plexus
"^ElvUF_RaidGroup", -- elv
"^oUF_bdGrid", -- bdgrid
"^oUF_.-Raid", -- generic oUF
"^LimeGroup", -- lime
"^SUFHeaderraid", -- suf
"^LUFHeaderraid", -- luf
"^AshToAsh", -- AshToAsh
-- party frames
"^AleaUI_GroupHeader", -- Alea
"^SUFHeaderparty", --suf
"^LUFHeaderparty", --luf
"^ElvUF_PartyGroup", -- elv
"^oUF_.-Party", -- generic oUF
"^PitBull4_Groups_Party", -- pitbull4
"^CompactRaid", -- blizz
"^CompactParty", -- blizz
-- player frame
"^SUFUnitplayer",
"^LUFUnitplayer",
"^PitBull4_Frames_Player",
"^ElvUF_Player",
"^oUF_.-Player",
"^PlayerFrame",
因此,在开发之前,需要确认一下你的框架是否在WA支持的清单上
下面,我们使用WA做一下团队框架高亮OT目标
首先创建一个图标或者文字或者材质WA,触发器选择 自定义-触发器状态更新器(高级)-检查事件-事件输入 UNIT_THREAT_LIST_UPDATE,PLAYER_REGEN_ENABLED
UNIT_THREAT_LIST_UPDATE 事件在单位仇恨发生变化时触发,PLAYER_REGEN_ENABLED在玩家脱战时触发。详细的单位事件清单参考单位事件清单
示例代码如下:
function (state,event)
-- 重置所有状态
for _, state in pairs(state) do
state.show = false
state.changed = true
end
-- 脱战后强制重置不进行检测
if not UnitAffectingCombat("player") then
return true
end
--监测所有成员仇恨
for unit in WA_IterateGroupMembers() do
if (UnitThreatSituation(unit) == 3) then
state = {
changed = true,
show = true,
unit = unit
}
else
state = {
changed = true,
show = false,
unit = unit
}
end
end
return true
end
state 参数是TSU特有的参数,类型为table,用于传递复数单位的触发器状态,主要有以下几个参数
名称
类型
作用
changed
boolean
通知WA表示触发器状态已更改,设置为true,才会进行后续的条件判断、图标显示等等
show
boolean
控制是否可见,如果为false,子表会自动删除
unit
string
单位unitid,用于标注状态属于哪个单位
name
string
名称,对应文字的%n
icon
number 或 string
图标
stacks
number
层数,对应文字的%s
index
number 或 string
用于声明动态数组类型的顺序,字符串和数字不能混用
progressType
“static” 或 “timed”
用于声明动态信息类型,"static"是静态信息,“timed”是会超时的信息
expirationTime
number
超时时间,仅在"timed"类型下生效
duration
number
持续剩余时间,仅在"timed"类型下生效,对应文字的%p
value
number
当前值,仅在"static"类型下生效
total
number
总值,仅在"static"类型下生效
autoHide
boolean
是否在超时后自动关闭,"timed"类型到期或者"static"当前值等于总值都可以触发
paused
boolean
是否暂停
remaining
boolean
和“paused”一起使用,声明暂停时间
完整参数清单参考官方wiki
event参数是事件名字,便于针对不同事件分别处理
event之后是事件本身的参数,请参考事件清单中对应事件的参数
我这里先使用
-- 重置所有状态
for _, state in pairs(state) do
state.show = false
state.changed = true
end
来重置所有状态,避免以前的动态信息仍然残留
-- 脱战后强制重置不进行检测
if not UnitAffectingCombat("player") then
return true
end
然后判断战斗状态,如果玩家脱离战斗,就不继续监测了
--监测所有成员仇恨
for unit in WA_IterateGroupMembers() do
if (UnitThreatSituation(unit) == 3) then
state = {
changed = true,
show = true,
unit = unit
}
else
state = {
changed = true,
show = false,
unit = unit
}
end
end
这里先调用了WA_IterateGroupMembers() 用于遍历所有团队成员,取到所有人的unitid
然后使用UnitThreatSituation()判断仇恨状态,如果OT,则设置提醒,将state表的 show 设为 true,然后changed 设为true通知wa更新,并且unit设置为这个团员的unitid来进行定位
state表在show为false之前不会销毁,因此尽量每次对同一个单位创建相同的表成员来覆盖原来的状态,否则可能会同时有多个状态同时存在,变成薛定谔的OT
最后return true,确保触发器始终激活
最后老样子,动作里配置图标显示(也就是show = true时),单位框体发光。图标消失时清除
挨打测试
成功高亮
示例字符串如下:
!WA:2!TA1tVTXXvCtRgKaIGczbdHw0CyHlqHmQIGDDRZLyuSl1YiwtjXUCLLnKCxn7oZYDQwoZ2zMvK0ffWIWa2UPoWwNmq6HwMl5qrakbAqqAlkqo0Zec9tGqSS7v9jOVzwAklBNdbO7bYzM3BEZ7p)M3VPu1zApdEg89womxseb9knGgXzn55IiY7CQIf7ws0D14yjrvk7hJPYSuupFsxvqmx0gPcYcu02KaCpgQnnkqLiiYeEkUNO34TneXIs4IgCktfwXDfFxVmRVzlvmR0qjQnrloxq2sGIuuotEzpPcju7mOvkVtqepLl(ftvAPF(FAAZ3uhywxLqJ2MrKY3yOzEXMDa3QJaZd0RT1EfA2lJ41G2LKEaeSbhB1ToYmowaoHrR9wBLA(v9Sx21HYOQYHXWFYKzpiHIjbO0uZMLBD02esMTmJeP8qWXM0VdxGxxGY6V(4bdWejcclKIK0xWvA1yLCI5mv20vf0Bz9lZryqmYY3pmsWZc6147CHf(Px8ivr(qBLL5ys2zRu3E5g(R6u3UYvTxCXA(1UM7atoYM1kLuAFzccZ7C9IsXuztdHPn(xNlvembVmLLmqqAbNVpeJoAZVxykHH1w3ZPU7klUNmfXu65H1wPzTfDfJDISlxJPiIyueztBmgQoBUobTTneyYnBW7qeMHltWu0MfRQ)9so3IZBxQFeVDgavKjEO0Se0uHaYlM2Q8WXiJAW8tNnDikA7wcEodxecVbmwLszeXQR5xV2kUEJrbW34G9gfA(oNk7ShNPDMyNK9J4a(K3H1SdnJSv20rq6G3wJ1wldd66r2HWuhGYHvHIt06uSkXXgM(IwSkhYCfwSVsqB1IiKF3FKy8W)TJg1ewy6dK5HgB2mpoM2Dyqf7M(bn9T98h9(HlrqPQKj60qqaD8A2WTEDNCaRfQtherHuz28AKyG)sEU2(b1RbgATglA77oFJ623W1lWZ9dCxjWDfBO8TyFajMMwdllpSWvmG5HacrrYlc2Oes02JEFp4(lrwEuLUNE)4CM5kJ1CgfN3CYNVSf8z(5DFxR)7DFWt)NF2H3)2h(hV)t)9F(H3ExJe4YRvW8wMTzrzwziQqwyLZBH5gD0FMvwqFJ06kwXOuj5LefLGyTiyqQsKxieGLp)0F2D(RhEVh)Kh(rp5F8Lp5EFEHZ81FXdE2)6JF2F(pC4NC7d)BFOrxASfJRSwdsJ2XXWLskRvfE7qKAUZvKwp35Tuje2KJxqGYl7vp1Xh9t)4hb2UiUp8Ep8jp6XF9F)UhU7Noj61vmDKVUDqn46belFaasYwM0oeaiZDISa4DZPDnFOPjs1KQYn9cMtBJZBDLRyDPxY5MKF2qRYnHSZV9eY0FNmZn)RiFCs)1l049xX83jK97MmJ8I1Q)p6pgqW3chY6ypACf6evQxSmccGEUHWDpDxoXsU1BuDT67LZgFxTC2z0ue7q8lMRB29xov2p41YrvmWttvHpIQ7aYqPxdkTqHBJ9qmABtn8YJE7QJCCyCg5RiijPPsqyTujV5(yD3dqdZnrHKa95WY(AD0E3OnCAJOmyVJ2y0MV5OBo6xnkag(9E5vYod4ErqyscMWHmqXJ2PWvERgZoa6O4zAUllhMqOTsu7gA0v307KebOUj91eqnP3I89pQGWUQM8Z4tZ2)5TmtcBtfcUiPGxQBbV0qUGcDimor)R565xRID9SZ(8nPtGlsLiGzbN4KYr4Qos4GM1RDEQIw2rtxo7OFtzVOuKuQhfQqanKspm7mhZbm(9aJwWr)qLTo6yjvmSanM6cl8ZEPFY(HFZV1ayGIO601uF1ZDwxClss2zIN0DFYzo8fSZPf6uhnUh0KTQ)pjNIhU9fVES7oDJU6krNJI9qTGTF0XMPYeAQHMxvaacGHFkVoAYLD7dyudJ9DMDpjjn28yPrVLGY01tsY(azeuswnZ8mOYdly6kSzPsLMAGgfrhlKYkIsyw5baxcbByWUZBpJ07sl8ElCHz25)C9)3
======
融汇贯通-自定义组合触发器
有了自定义触发器,我们就可以搞一些更复杂的逻辑了,比如将上面两个例子结合起来
仅对仇恨目标(当前T)3层绽放快到期时进行高亮
具体操作就是在示例1的基础上新建一个触发器2,内容和示例2的触发器完全一样
激活条件选择全部组合,动态信息选择排列前面或者触发器1(即绽放的触发器)
挨打测试
成功只对当前T显示绽放和高亮了
示例字符串如下:
!WA:2!Tw1tVTnYv841BXgOMd2AtmqsZ2qyGgyh4yelJ15Y6dI2u2UqwYHIoobz3knKCO4KqrYoCOSCAlGJWceN2MISg9WcKEz1EzpSOavanOOPPfWh2ZdewKpagXYzV6pb7BgkPyN0lfO8a1W37P373737pZq5sxlTDA7DgVfXkWVuqm1cFXt1bfZCdOfdzKa)Ou0Tk64eHzd1g5BbYxlG4ZmxqRGHMEhRGap7Gn9lTjjexzV(FQzxf7QkCALMmkPAvmn6xDzAVJVSvKBWMl4f4JJQOY2keRJIPOmhfhH1AGSyLcXEERy7sbxv03BRk646yiOlJrEmxDFunmGlW6cWPknJsmpkLASpHzg6H2ct3v4sPLxqF2zV(CZUFuSP0nLIDCinAxEHSLmkxYiRUXavRrXGk9sRPLpFlBSjyPbap6YA5xl3653n2VxkK6Y8uFh)mMwXrSGA8ZZVaFe(O8Fg)I8ZXhJF2uCLgVxhNyFlbjQmredXWtjJXKPuGh5RREvLF4Hp(Wx8x7(OT7(xE0H)(N1D7hi14eqvkpLI8VPq8vcreAuIxMuXoqAJ4rkzAbDQmVIdYlc)wQSCr(vX2Gwgnorj23UF0F9N)36UZxEWt(th8V(NhSZZsaZR(hp(1)NN(6V6p29R3U7F)piTL4O4hWuwh43SooyiR8RUqqnteBIXt47XNuH5I9heEkMft9F3O2l0h(0Va8DsE3DNNCWx8LV65pS7d(MbzVOukY8nYwEfgMc5Ys0G4WvX1mHMPjoblaOBcb0mCPyeReHfJe0(ecFmPY8ZRm7BbUb8ZDeM8za78BoHoXZjzUPEh99i9)7kLOFE5pNq3VBWx4JxR()iEKnb)paiL3GOEvOtuPoEzeuWtNs3YfBDp(iTt69llMFBlbFCOn8ozskkCQ1lSIrzJL11YAuo)kWS26RTywdTPwlF2BRPxwxBjTcL1kKvnV2I8pI)Z5xkvBBs0DLdn1XzqEEHJIKNnsM6wnWg)TN6iy)dM6J8Uj0iaL57C09W4WSWwalMUOW7UBe2ZrUNI)tGX4ieKdaYCBbZ564QI1AxzNZgMMHBWkh5IGvw3Q3sUWZlfkFbTH1qGb9oO6dlS2DG6X)frHJCmpSqGxa9xo0qdn8(js7Jb1SRBum8dLcHvRbGRiwBqSzUQzHppkjwKgyBPWh0jzp7T7HO9K6Vlq2eNTG8Hgi4AdqOAHIf04NHczLWMwsdTKWyy4z3EjHplCKCuY9vUrmYg4bKIHXjY9(rQJu2Mbu7nOOWMB07qcaQtIiME4k9Y5JDxq4ORuOauqvlAyuCv9vwAzJodcDjY9XNVxgDRtehHw5Y1IRBKFLcAVStvVGnZrX)6ySV1wR9(xB6mFCs2ju0w8QVhAk(q8N7ygZyb(fRJPWwOwcX5X(vzUNtAF)mBxXhlmGz2dU6yP(sCvfkDLr3WLyDp4wPOHL)JswipCYX8eq8OYaOc8cM6A6IjvDzxs1lazNZKbM6ZgtVwShJKsv0nog)tHPfpuuK4KAeqfIdTOYwqb85No8S9VZuurxKeHas22DxKpPMCj2C6WSfLLBpmkcxIrLz3hWpdFMo2IUAWe5iincdx3Ah1uyN03ZOwdr8ZXTLwZXChEv(mMoeFsK7BlUnXpPlh8xk17heuBiksE5v0CCRuCYy77sSXLHHYYcsaU4Mi2L0Ifyvpzo80Rn24eBZdF(l6(N)36VPpSTdfUggGo069tpkPviNqKaL7k2sKtp7QA0g9kwMqE4qQMIs8fEg7MjMy3(URp3n9UXmnYumV(MI5Kl1sKVejeVWL5JNJNAQt1SoIseuyMSfwC8GWXNFEt5(QORa6hM)Bnb2e(krLEDKxmo9SjQ2h3iKKWOgKAyHjFY88TtNHMS6veLTR0mKgaSnBlXYKPZmTGmA2Vgwrh5f6IgoDK(StF9PVw66F)T(Xd
======
一些成品示例
buds大佬的wago主页 buds是专门负责团队框架相关的wa维护者
框体显示tbcc减伤技能
框体显示治疗预估人数(红绿灯)
框体显示打灭暗牧
======
相关链接
TSU官方WIKI
常用wa代码片段
常用WA变量和函数
单位事件清单
======
公会:小猫咪能有什么坏心思呢
坐标:祈福
活动时间:每周六日晚上8点(偶尔周日下午)
招募职业:强烈需求头部dps法术萨和双修治疗,各种优秀玩家,也欢迎态度良好萌新一起交流。
公会现状:公会氛围日常夺笋,有多个排行榜治疗,技术贴大佬,有生存猎,强破贼,惩戒骑,咕咕,元素萨,给输出营造良好氛围,目前多数人打过ptr风暴毒蛇,希望大家能顺利开荒,快速farm,生活加班游戏不加班 教学贴沙发支持先~~ 前排支持MOMO 辛苦啦 好复杂,为大佬点赞 其他还好,函数有点难,仔细研究下 前排感谢大佬教学 这个一看就很高端 先留个爪爪 刚好在学,谢谢。今天自己做了几个都是复制别人做好的,然后再修改法术id。 牛逼,suf的框体也能用这个wa吧? 我现在就想知道哪里可以下载到wa,桃乐豆的和大脚冲突
页:
[1]
2