Weakauras aura環境 儲存變數 TSU - WOW

Eden avatar
By Eden
at 2018-06-14T15:12

Table of Contents

有點久沒寫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的舉個手 ._./


--
葡萄酒商勒修斯說:進到桶子,踏踩那些水果!
葡萄酒商勒修斯說:進到桶子,踏踩那些水果!
葡萄酒商勒修斯說:進到桶子,踏踩那些水果!
葡萄酒商勒修斯說:進到桶子,踏踩那些水果!
葡萄酒商勒修斯說:進到桶子,踏踩那些水果!
凡席爾說:你一定能成為厲害的酒商!又有一批秘能酒準備好出貨了。乾 真的是你耶

--
Tags: WOW

All Comments

Rebecca avatar
By Rebecca
at 2018-06-17T05:50
我還不怒推一把假裝看得懂!
Frederic avatar
By Frederic
at 2018-06-17T09:49
._./ 跟我想的差不多
Valerie avatar
By Valerie
at 2018-06-22T04:21
辛苦了,打個遊戲還要寫程式還要教程式Q…Q
Delia avatar
By Delia
at 2018-06-24T01:31
嗯!果然跟我想的一樣呢
Elizabeth avatar
By Elizabeth
at 2018-06-27T10:20
原來如此!完全不懂!
Genevieve avatar
By Genevieve
at 2018-07-01T02:21
._./
Dora avatar
By Dora
at 2018-07-05T14:02
哇 好猛 推個
Liam avatar
By Liam
at 2018-07-10T06:11
請問可以做一個解開AFK後會自動喊話的WA嗎
Selena avatar
By Selena
at 2018-07-13T13:47
https://pastebin.com/mqxhjPj0 好囉 動作那邊改喊的話~
Tristan Cohan avatar
By Tristan Cohan
at 2018-07-17T23:50
好 我要改 俺回來啦 準備開火啦
Catherine avatar
By Catherine
at 2018-07-21T04:34
可正常作用 感謝哥
Annie avatar
By Annie
at 2018-07-24T00:06
._./
Hedda avatar
By Hedda
at 2018-07-24T01:39
讚 俺回來啦 準備開火啦
Anthony avatar
By Anthony
at 2018-07-27T10:27
推推推推
Megan avatar
By Megan
at 2018-07-27T23:24
只要是wa的我就推
Sarah avatar
By Sarah
at 2018-07-31T22:02
原來乾爹是從這邊做的....剛剛出團還在分享
Megan avatar
By Megan
at 2018-08-03T09:49
感謝分享!幫助很大!另外請教下某個AURA要即時取另個AURA
Una avatar
By Una
at 2018-08-04T08:08
資料的話用WeakAurasSaved有缺點嗎?之前不知道有這個
Irma avatar
By Irma
at 2018-08-08T09:18
WeakAurasSaved,都是用WeakAuras.ScanEvents用事件丟
這樣接的AURA就要加個觸發有時很亂..
Agnes avatar
By Agnes
at 2018-08-11T07:31
缺點大概就是不能隨意更動名稱吧? 我沒有這樣做過 不過
應該是沒有其他問題@@
Todd Johnson avatar
By Todd Johnson
at 2018-08-13T03:34
感謝分享!
Bethany avatar
By Bethany
at 2018-08-16T13:52
推推 幫助很大
Sierra Rose avatar
By Sierra Rose
at 2018-08-17T10:33
想請問有沒有辦法儲存在這場戰鬥中 此事件發生了幾次
並顯示 想了很久 不知道要從何下手去寫
Charlie avatar
By Charlie
at 2018-08-19T21:04
用自訂事件接觸發 應該可以接到每一次 把他存到某個變數
Liam avatar
By Liam
at 2018-08-21T13:58
顯示文字用那個變數 在脫離戰鬥時清空
(PLAYER_REGEN_ENABLED)

各位覺得女王三句話中哪句是謊言?

Lucy avatar
By Lucy
at 2018-06-14T13:15
首先呢 小妹要先聊聊 今天 火腿哈密瓜 大大在暗語眾組頻上 分享的一個訊息 恩 這樣有沒有很想加入暗語眾了呢 西西 好 回歸正題 就是希瓦納斯 他有一個黑暗精靈部隊 然後裡面都是女的 好 那回歸三句話的遊戲 小妹對於這種文字難題 第一件事情 就是把原文找出來看 不看不好 一看大驚 希瓦已 ...

應該快開前夕了

Gilbert avatar
By Gilbert
at 2018-06-14T10:34
原本惡術又大改機制(為什麼我又說又),成為手感良好傷害也不錯的職業選擇,許多玩 家決定用術士開荒。 然後就被砍成智障了。 大部分技能的係數都被砍、惡魔傷害砍、核心機制砍,NGA大佬花了老半天寫的前夕指南 瞬間變成歷史文件。 「現在惡術在任何場合都沒有出場機會」 這是他留下的最後一句話。 據說惡術直接 ...

台灣暴雪 徵 台港澳競技場賽評乙位

Heather avatar
By Heather
at 2018-06-14T10:32
情報來源:台灣暴雪內部 情報連結:真的沒有...只有截圖 https://i.imgur.com/DnIbGVx.png 情報內容: 下周四前,利用底下影片片段,將你的講解錄下來。 將錄音(影)檔案上傳到YouTube或者其他影音空間。 接著將信件寄到 tw-communityatb ...

有關隨機5H

Barb Cronin avatar
By Barb Cronin
at 2018-06-14T09:20
非要我打你臉就說吧,也沒什麼難的... → summerinsect: 忘記縮網址重發一次.. https://goo.gl/kPdbse 06/13 23:55 歡迎大家去SEX一起討論喔,健康正向的性沒有什麼羞恥的 不過會拿這個做文章的人,我不知道他在想什麼就是了,大概覺得談性就很髒吧 ...

為什麼我選擇聖騎士-"爪"馬代PO 再戰江湖

Kyle avatar
By Kyle
at 2018-06-14T04:48
阿拉哥您好 小妹是德魯伊 好巧 你家的聖光之心掉在幻夢森林 德魯伊呢 看事情的角度就跟你們聖騎士不一樣 我們是生命能量的科學家 所以我們看任何人 其實就跟看動物沒兩樣 而阿拉哥您提交的材料 小妹看了一下 小妹認為 根據一張照片看來 此研究物體 似乎有著較為壯碩的外觀 疑似屬於有較為高睪固酮分泌的 ...