[size=150%]WA从入门到入土
[size=125%]团队框架篇
[size=125%]前言
大家好,我是来自祈福的Momothewolf。在日常的插件维护开发过程中,经常有小伙伴向我提交框架相关的需求,这些需求往往千奇百怪:同样一个增益会有非常不一样的显示方式,高亮的目标有非常强的定制逻辑等等。
因此,这里整理了一些我用WA强化框架时的心得和资料,希望小伙伴以后可以更得心应手地开发自己想要的功能。
注:本文的示例与图示均使用WeakAura 3.7.0 版本,在以后的版本更新中,配置和接口不一定相同,敬请谅解
祈福-小猫咪能有什么坏心思呢 公会 招募志同道合玩家共同进行tbcc后续阶段的科研
本文采用 CC BY 4.0 协议
[size=125%]基础-智能群组
下面以要求频率最高,最常见的框架显示单一增益——绽放为例,讲解使用内建的功能对光环进行监视
首先输入/wa或者点选小地图的wa按钮,可以看到wa的配置界面
和大部分wa用户直接点击导入不同的是,我们点选新建,这里点击图标,为了在框架上显示绽放的图标和剩余时间
给自己的wa起一个合适的名字以后,在图示标签页,可以配置自己期望的图标大小、位置、层级等信息
为了清晰地显示在框架上,这里我们调整图标大小为15,锚点对齐到 [size=120%]单位框架 的中间
为了同时查看绽放的冷却和层数,我们勾选显示冷却,并且在文字里选择%s ,即层数。文字的锚点同样需要根据需求修改
然后是触发标签页,触发器选择光环-[size=120%]智能群组-增益效果
勾选名称,并输入增益的名字或者id。如绽放的id:33763
增益的id可以通过idTip插件查到,或者使用wowhead搜索
这里我们勾选 只来源于自己 ,避免有相同职业的增益造成界面混乱,同时勾选 自动克隆 ,这会让团队框架上所有满足条件(即有增益的团员)都会显示图标
然后就可以测试了,关闭wa页面,对自己施放绽放测试效果
如果显示效果不满意,可以重新回到配置页面调整层级、锚点等设定
但是仅仅这样,和大部分框架默认提示没什么区别,更多小伙伴监控绽放的实际需求是:图标太多,看不过来。或者说,能重点提示需要补绽放的目标
一般这种需求通过高亮图标或者框架来实现
重新回到配置页面,在条件标签页,选择我们的逻辑:如果 全部 当触发器1的层数3层 且 剩余时间小于2秒的时候发光
现在切回去测试效果
绽放可以在3层且剩余2秒时高亮了
如果要高亮框架,则在条件里选择发光外部元素 [size=120%]单位框体 ,勾选自己想要的发光颜色如绿色
并且为了让框架高亮可以消失,在动作里,图标隐藏时,勾选 隐藏由此光环应用的发光
退出进行测试
可以看到框架的边框发光了,如果不满意,可以切回去配置一下发光的粗细、速度等等
我这里建议[size=120%]只让图标发光而不是让框架发光,因为框架的边框只有一个,而发光的WA可以有无数个。为避免冲突,要尽量避免使用框架高亮
下面是示例wa的作业:
[collapse]!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[/collapse]
总结:WA内建了智能群组的光环监控,并可以定位到单位框架上。通过这些功能,我们可以个性化的定制框架角落图标,便于监控一些自己的关键增益或者致命减益,用处非常广
======
WA目前内置的,可以匹配到智能群组的触发器,只有光环的增减益,单位信息的施法、生命值、能量,如果要做一些复杂的匹配或者混合逻辑,需要借助自定义触发器来实现
警告:接下来的内容涉及到自定义代码,因此需要一定的编程基础来阅读
[size=125%]进阶-自定义触发器
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[unit] = {
- changed = true,
- show = true,
- unit = unit
- }
- else
- state[unit] = {
- 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[unit] = {
- changed = true,
- show = true,
- unit = unit
- }
- else
- state[unit] = {
- 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时),单位框体发光。图标消失时清除
挨打测试
成功高亮
示例字符串如下:
[collapse]!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[/collapse]
======
[size=125%]融汇贯通-自定义组合触发器
有了自定义触发器,我们就可以搞一些更复杂的逻辑了,比如将上面两个例子结合起来
仅对仇恨目标(当前T)3层绽放快到期时进行高亮
具体操作就是在示例1的基础上新建一个触发器2,内容和示例2的触发器完全一样
激活条件选择全部组合,动态信息选择排列前面或者触发器1(即绽放的触发器)
挨打测试
成功只对当前T显示绽放和高亮了
示例字符串如下:
[collapse]!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[/collapse]
======
[size=125%]一些成品示例
buds大佬的wago主页 buds是专门负责团队框架相关的wa维护者
框体显示tbcc减伤技能
框体显示治疗预估人数(红绿灯)
框体显示打灭暗牧
======
[size=125%]相关链接
TSU官方WIKI
常用wa代码片段
常用WA变量和函数
单位事件清单
======
公会:小猫咪能有什么坏心思呢
坐标:祈福
活动时间:每周六日晚上8点(偶尔周日下午)
招募职业:强烈需求头部dps法术萨和双修治疗,各种优秀玩家,也欢迎态度良好萌新一起交流。
公会现状:公会氛围日常夺笋,有多个排行榜治疗,技术贴大佬,有生存猎,强破贼,惩戒骑,咕咕,元素萨,给输出营造良好氛围,目前多数人打过ptr风暴毒蛇,希望大家能顺利开荒,快速farm,生活加班游戏不加班 |
1、在门户里发表的文章仅代表作者本人的观点,与本网站立场无关。
2、门户的所有内容都不保证其准确性,有效性,时间性。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
3、当政府机关依照法定程序要求披露信息时,论坛均得免责。
4、若因线路及非本站所能控制范围的故障导致暂停服务期间造成的一切不便与损失,论坛不负任何责任。
5、注册会员通过任何手段和方法针对论坛进行破坏,我们有权对其行为作出处理。并保留进步追究其责任的权利。
|