WOW 板


LINE

看板 WOW  RSS
有点久没写weakaura的文章了 这次想讲的东西会相对进阶一点 如果对lua完全陌生的人就..end吧 (啥 但如果稍微看得懂 又想做一些比较麻烦的功能 那这篇应该可以帮上一点忙 另外基本上我一直都是自己边做边找ref 所以如果有讲错就不负责啦 XDD 本篇会讲的东西有 1. aura_env 环境 2. WeakAurasSaved 储存变数 3. Trigger State Updater (TSU) 1. aura_env 环境 https://github.com/WeakAuras/WeakAuras2/wiki/The-Aura-Environment 首先从weakaura的架构讲起 在建好一个aura以後 Weakaura首先会生一个对应的table出来 这个table叫做 aura_env 而关於这个weakaura的资讯 都会存在这个table当中 如果在weakaura的自订触发当中 抓到了一个字串 (比方说可能对话纪录传进来 拿到一个ID之类的) 那我想把它显示在提醒效果的文字部分 该怎麽做呢? 变数这种东西是有范围的 当然不能用local变数 会直接抓不到 用global范围又太大 搞不好哪天被其他aura或addon盖掉就尴尬了 於是我们就把他附在aura_env这个table中 举个例子 假设今天从 触发/自订/事件/CHAT_MSG_WHISPER (https://wow.gamepedia.com/index.php?title=CHAT_MSG_WHISPER ) 传进来一个密语 (这是有人密你的时候会触发的event ↑) 那触发那边可以用 -> https://imgur.com/03b5DeX.jpg
https://imgur.com/e7lFFKe.jpg
function(event, ...) local message, author = ... --只取前两个 反正後面不想用XD aura_env.text = author .. ":" .. message -- 在这边建个变数 等下可以用; 我希望显示 "密的人:他说的话" return true end 接着在 提醒效果/提醒效果文字 这边 我们用%c去接 自订函数用 -> https://imgur.com/ZJUaRqW.jpg
function() return aura_env.text or "" -- nil check end 这样就简单建好一个 有人密你的时候 把密语内容接起来 显示在文字部分的aura了 成果: https://pastebin.com/pJBCJJHA 那aura_env不只是自己接变数可以用 他本身也有很多东西存在里面 就算不是用自订变数也一样 举例来说 aura_env.id 这个就是aura本身的名称 aura_env.state 这个是当触发出来以後 储存一些资讯的table aura_env.state.stacks 就是触发的堆叠 在提醒效果的%s aura_env.state.icon 触发的图示 %i aura_env.state.duration 触发的持续时间 %p ......等等 其他可用的变数可以看这段最上面的连结 或是自己用loop去call看看 (for k,v in pairs(aura_env) do print(k,v) end) 善用这些变数 就可以在提醒效果中自由组合 加判断式去写一堆东西 但记得要做nil check 因为aura_env.state这东西不会那麽快建出来 另外我自己习惯是 只要是变数或函数(function) 能的话我都会在aura的初始化时定义出来 於是aura的初始化通常会长成这样 https://imgur.com/MJ5lEel.jpg
有点像header档 XD 2. 储存变数 光是有aura_env还不够啊 我希望拿到一个变数 我可以把它存起来 搞不好我换角色也想看 甚至我想把某些跨角色的数值加起来算一下 到底我现在总共有多少钱! Weakaura会把变数存在 WeakAurasSaved["displays"][aura_env.id]里面 (display是储存所有aura内容的table 而aura_env.id当然就是我们用的aura名称) 而实际的储存位置会在 World of Warcraft\WTF\Account\帐号\SavedVariables\WeakAuras.lua 这里 如果你真的去开这个lua档 就会看到一堆table 大概像 https://imgur.com/fpbKssQ.jpg
於是我们也可以照样操作 举例来说 我想算到底我的总财产有多少 先建个aura 类型文字 触发就自订/状态/所有框架 -> https://imgur.com/83Sv08v.jpg
https://imgur.com/KcY228m.jpg
function() WeakAurasSaved["displays"][aura_env.id]["Money"] = WeakAurasSaved["displays"][aura_env.id]["Money"] or {} -- 先建一个table来放资料 但是要看有没有预设存档 没有才建 WeakAurasSaved["displays"][aura_env.id]["Money"][UnitName("player")] = GetMoney()/10000 -- GetMoney传回目前有多少钱 但单位是铜 所以要除10000 aura_env.sum = 0 -- 开始计算总数 for k,v in pairs(WeakAurasSaved["displays"][aura_env.id]["Money"]) do aura_env.sum = aura_env.sum + v end return true end 显示部分一样用%c -> https://imgur.com/xyHFzF0.jpg
function() return aura_env.sum or 0 -- nil check end 之後只要登入角色 这个aura就会去抓目前钱的总数 自己储存加总 然後告诉你有多少 XD (这时候的SavedVariables\weakauras.lua就会像 https://imgur.com/OHOyz8R ) 成果: https://pastebin.com/33whNtWY 要提醒的是 建议建一个 WeakAurasSaved["displays"][aura_env.id]["Data"] 之类的table 来储存所有的变数 这样如果你要清空资料 只要把这整个table wipe掉就好 不然你去开SavedVariables\weakauras.lua看 还有这个aura本身储存的各种资料变数 保证乱成一团 XD 3. Trigger State Updater (TSU) 触发状态更新 https://github.com/WeakAuras/WeakAuras2/wiki/Trigger-State-Updater-(TSU) 要是到这边还跟着上 由衷佩服你 这些东西我搞了好久QQ 通常 一个aura就是对应到一个显示 但是有时候会希望 a. 同一个aura 可以给很多类似的东西用 显示N次 而我不希望类似的aura重复copy个好几遍 每个只改个光环名称 b. 做的时候根本还不知道要显示几遍 抓出来才知道 这时候就可以用TSU来做 开weakaura介面 看一下触发/自订/事件类型 以往比较常用的是事件跟状态 现在要用的则是触发状态更新 https://imgur.com/Buju2xD.jpg
这次拿小队来当例子 如果我想要显示每一个人的血量好了 (话说这功能不是小队框架就有了吗? 可是我一时之间想不到好做的范例嘛 QQ) 先建一个进度条 载入部分只在队伍中 https://imgur.com/2AFfpC7.jpg
检查的部分用所有框架 稍微省事一点 虽然有点吃效能 触发状态更新会把allstates这个表传进来 当作第一个变数 所以function要去接他 (如果检查部分用事件 那event, args就从第二个参数开始) function(allstates) -- 记得接这个table! for i = 0, 4 do local unit = (i == 0 and "player" or "party"..i) -- party1~4是小队其他人 自己不在编号内 只好这样搞 if UnitExists(unit) then -- 确认这个人存在 allstates[i] = { -- TSU的部分开始 changed = true, show = true, name = UnitName(unit), progressType = "static", value = UnitHealth(unit), total = UnitHealthMax(unit), } end end return true end -> https://imgur.com/N8R9Ie3.jpg
来细讲TSU那段在干嘛 首先我们改了allstate[i] 刚刚i是0~4 分别代表小队中的每个人编号 changed 这个状态i被改过了 show 这个状态i我希望它显示出来 以上两个刚建立时一定都是true name 我希望出来的名称是谁 可以用%n接 progressType 进度条的类型 有分timed跟static timed就是算时间 分别传两个number给duration跟expirationTime 跟平常用进度条的方法比较像 可以设定时间到会消失 static是自订进度 这边用value是UnitHealth(unit) 第i个人的血量 total是UnitHealthMax(unit) 第i个人的总血量 而duration/value可以用%p接 expirationTime/total可以用%t接 其余还有icon, texture, stacks等等 或是也可以自定义 比方说我做了个 class = UnitClass("unit") 来抓职业 那之後就可以用aura_env.state.class来读这个info 显示文字时也可以用%class来接 於是写好了触发以後 进度条左边摆 %n 右边摆%p/%t 稍微改一下样式 显示出来就是一个会自动copy的进度条 让你看小队里面所有人的血量 https://imgur.com/BX391qk.jpg
..然後你会发现 有两个人以上他就糊在一起惹 https://imgur.com/pxaUPfS.jpg
废话 你做了两个进度条 把他们摆在同样的位置 不糊才有鬼 所以再建一个动态模组 把这个进度条丢进里面 https://imgur.com/p7vteld.jpg
他就会帮你安排群组增长 对齐 置中等等样式了 这时候你会发现 有人退队了 阿他的血条还在? 原因是我们注册了allstates 在该不见时却没有把他移除掉 那最简单的方式是 每一次检查我都把所有的人移除掉 重新放就好了嘛 在刚刚那段code的第二行 加上 for k,v in pairs(allstates) do allstates[k].changed = true allstates[k].show = false end -> https://imgur.com/Ai69Y2Z.jpg
在每一次更新时 他都先把每一个状态标示为有改变 然後不显示 这样如果後面没被建起来 这个状态就会被消去 达到我们的目的 大概就是这些 反正自己动手做看看 应该会多少做出一点成果 然後不要怕bugsack一直逼逼叫 这是正常的 修到他不会叫就及格了 XD 成果: https://pastebin.com/B6V4EBfj 底下摆一些作品 https://wago.io/r1eVBDiaG 算整个帐号的荣誉值总量 转换成等级 不知道bfa会怎麽换算过去 所以之後可能会再改XD https://wago.io/B1EWsFWkm 帮到达斩杀线的目标 血条上个标 https://wago.io/HyUtnL-e7 看黑市的时候 储存资料 并且传给跟自己同公会/同频道(要自己设定) 的人 这样你朋友看黑市 你也会知道有那些东西 https://wago.io/H1AoOSYAG 当你afk 有人密你/在频道提到设定的关键字的时候 把讯息存起来 等你不再afk或下次登入时秀出来看 还有其他东西 我现在都丢wago.io了 https://wago.io/p/aegius1r 以上~ 直接end的举个手 ._./ -- 葡萄酒商勒修斯说:进到桶子,踏踩那些水果! 葡萄酒商勒修斯说:进到桶子,踏踩那些水果! 葡萄酒商勒修斯说:进到桶子,踏踩那些水果! 葡萄酒商勒修斯说:进到桶子,踏踩那些水果! 葡萄酒商勒修斯说:进到桶子,踏踩那些水果! 凡席尔说:你一定能成为厉害的酒商!又有一批秘能酒准备好出货了。乾 真的是你耶 --
QR Code



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 122.116.66.1
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/WOW/M.1528960349.A.BC1.html
1F:推 MoodSwings: 我还不怒推一把假装看得懂! 06/14 15:14
2F:推 sherwinc: ._./ 跟我想的差不多 06/14 15:15
3F:推 zoidsx: 辛苦了,打个游戏还要写程式还要教程式Q…Q 06/14 15:27
好玩就好XD
4F:推 eric30215: 嗯!果然跟我想的一样呢 06/14 15:50
5F:推 escescsoso: 原来如此!完全不懂! 06/14 16:24
6F:推 FrankWOO: ._./ 06/14 17:14
7F:推 sniper2824: 哇 好猛 推个 06/14 17:55
8F:推 corpserun: 请问可以做一个解开AFK後会自动喊话的WA吗 06/14 18:19
9F:→ aegius1r: https://pastebin.com/mqxhjPj0 好罗 动作那边改喊的话~ 06/14 18:35
10F:推 corpserun: 好 我要改 俺回来啦 准备开火啦 06/14 18:44
11F:→ corpserun: 可正常作用 感谢哥 06/14 18:46
12F:推 shendale33: ._./ 06/14 19:13
13F:推 becca945: 赞 俺回来啦 准备开火啦 06/14 19:14
14F:推 Feverist: 推推推推 06/14 21:29
15F:推 Zazzi: 只要是wa的我就推 06/14 21:59
16F:推 a84474666: 原来乾爹是从这边做的....刚刚出团还在分享 06/15 02:45
17F:推 Aldefael: 感谢分享!帮助很大!另外请教下某个AURA要即时取另个AURA 06/15 03:12
18F:→ Aldefael: 资料的话用WeakAurasSaved有缺点吗?之前不知道有这个 06/15 03:13
19F:→ Aldefael: WeakAurasSaved,都是用WeakAuras.ScanEvents用事件丢 06/15 03:15
20F:→ Aldefael: 这样接的AURA就要加个触发有时很乱.. 06/15 03:15
21F:→ aegius1r: 缺点大概就是不能随意更动名称吧? 我没有这样做过 不过 06/15 03:28
22F:→ aegius1r: 应该是没有其他问题@@ 06/15 03:28
23F:推 Aldefael: 感谢分享! 06/15 18:22
补充接自订info的部分 ※ 编辑: aegius1r (122.116.66.1), 08/02/2018 09:29:11
24F:推 fenir: 推推 帮助很大 10/10 13:09
25F:推 i9992200032: 想请问有没有办法储存在这场战斗中 此事件发生了几次 10/14 14:29
26F:→ i9992200032: 并显示 想了很久 不知道要从何下手去写 10/14 14:29
27F:→ aegius1r: 用自订事件接触发 应该可以接到每一次 把他存到某个变数 10/21 19:35
28F:→ aegius1r: 显示文字用那个变数 在脱离战斗时清空 10/21 19:36
29F:→ aegius1r: (PLAYER_REGEN_ENABLED) 10/21 19:36







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP