[心得] DBM修改教學

看板WOW作者 (Alive)時間7年前 (2017/03/18 19:41), 編輯推噓42(4205)
留言47則, 43人參與, 最新討論串1/1
身為手殘玩家&略懂程式工程師,可以交給電腦的事情當然要交給電腦處理; 以下分享一下最近修改DBM提高自己/團隊容錯率順便貢獻回 upstream 的過程 # 增加特定法術冷卻計時, 倒數音效以及特別警告 # 大約一個月前團內在拓荒提克的時候,腿短DK如我在 P2 的射線死亡率有點高, 而當時的DBM對於射線(腐肉夢魘)是沒有任何提示的 隔天分析了一下打那幾場的 wcl, 發現他的頻率很固定, 模式如下: [wcl截圖](http://i.imgur.com/L034htH.png) P2 進場後第4秒開始唱第一條射線, 施法2秒, 施法後過2秒會唱下一道, 直到唱完6次為止 所以這邊想到要做的事情如下 (1) 增加腐肉夢魘的冷卻計時以及倒數語音 (2) 施法開始時增加特別語音警告(快跑啊小女孩快跑兮兮兮) ## 我們先找到提克 DBM 的檔案 ## 打開 Interface/Addons/DBM-Nighthold/Tichondrius.lua 觀察了一下裡面完全沒有提到腐肉夢魘,所以第一要務是找出腐肉夢魘的 spell id 可以從腐肉夢魘=>Carrion Nightmare=>在 wowhead 找到 spell id: 215988 ## 增加計時條/倒數語音/特殊警告 ## (a) 為了讓 DBM 可以辨認並產生選項, 我們需要宣告兩個變數 ```lua local timerCarrionNightmare = mod:NewNextCountTimer(4, 215988, nil, nil, nil, 2) local countdownCarrionNightmare = mod:NewCountdown("Alt4", 215988, false, 2, 3) ``` 主要是參考其他 timer 跟 countdown 去更改 spellid 就好, 其他參數可以先雷同 (b) 然後我們必要讓 DBM 知道我們想知道腐肉夢魘開始施法了 在事件註冊的地方 ```lua -- add spell event for carrion nightmare mod:RegisterEventsInCombat( "SPELL_CAST_START 212997 213238 212794 213531 206365 216034 216723 215988", ``` (c) 接著在施法事件處理加入計時條跟倒數啟動 ```lua function mod:SPELL_CAST_START(args) local spellId = args.spellId if spellId == 215988 then self.vb.carrionNightmare = self.vb.carrionNightmare + 1 specWarnCarrionNightmare:Show() voiceCarrionNightmare:Play("watchstep") if self.vb.carrionNightmare < 6 then timerCarrionNightmare:Start() countdownCarrionNightmare:Start() end ``` (d) 別忘了宣告施法次數跟歸零, 不過這段沒有很重要, 單純是告訴你這是第幾次 ```lua mod.vb.addsCount = 0 mod.vb.carrionNightmare = 0 mod.vb.batsKilled = 0 ``` 以上修改在 2/14 當天晚上 Raid 測試完畢正常運作後, [當天寫的](https://gist.github.com/alivedise/add3dc7b8740d3756480178f0fe8b59a) 我就去 DBM forum 請作者考慮是否加入並給他我的參考程式 [論壇文章 - Feature request for Tich's Carrion Nightmare Warning] (https://www.deadlybossmods.com/forum/viewtopic.php?f=5&t=188) 2/22後的 DBM 開始就有腐肉夢魘的警告了 (不過他 API 有點更動, 所以現在 DBM 的程式碼跟我當天寫得不盡相同) # 增加資訊框架 # 最近古爾單拓荒到 P3, 一樣發現了靈魂之井相關的提示太少, WeakAura 那邊有個靈魂之井的提示 (https://wago.io/V1agWHR8M) 實測後發現不合用, 而且對其他人來說要額外裝 WA 有點煩 所以我又把念頭動到比較熟悉的 DBM 身上 要顯示這類的資訊只能使用 DBM 的 InfoFrame 功能了 就是打眾星的時候會自動顯示找惡魔提示出來的小框框 參考了幾個有使用這個功能的副本 boss 後整理出一個流程如下 ## 一樣先找到古爾丹檔案 ## 打開 Interface/Addons/DBM-Nighthold/Guldan.lua 這時候會發現裡面已經有一個 InfoFrame 的提示叫 TimeStop 不過基於這不是主要困擾我的事 而 DBM 又似乎不支援多重 InfoFrame, 我們就先把這段複寫成靈魂之井 ## 找到關鍵法術 ID ## 參考上面的 WeakAura 字串 跟 Guldan.lua 後 很快地抓出相關的 ID 如下 (1) 靈魂之井 Well of Soul: 206939 (2) 靈魂虹吸 Soul Siphon: 221891 (3) 靈魂腐敗: 208802 它們之間的關係如下 (a) 當古爾單施放 221891 時, 井內多一個靈魂 (b) 當任何玩家獲得 208802 時, 井內少一個靈魂 (c) 當黑暗收穫施放時, 井內靈魂數量影響黑暗收穫傷害 所以我們藉此去維護一個 soulCount 然後用 update/sort InfoFrame 來顯示 a. 目前井內靈魂數量 b. 目前有腐敗 debuff 的人的列表, 從小到大 ## 實作流程 ## 1. 宣告 InfoFrame 使用 ```lua mod:AddInfoFrameOption(206939) ``` 2. 戰鬥開始或進入p3後顯示 InfoFrame ```lua if self.Options.InfoFrame then DBM.InfoFrame:SetHeader(GetSpellInfo(208536)) DBM.InfoFrame:Show(31, "function", updateInfoFrame, sortInfoFrame) end ``` 3. 實作 update & sort ```lua local updateInfoFrame, sortInfoFrame do local playerName = UnitName("player") local lines = {} local soaking = GetSpellInfo(221891) local spellid = "<|cff00ffff"..soak..">|r" sortInfoFrame = function(a, b) if a == spellid then return true end if b == spellid then return false end local a = lines[a] local b = lines[b] if not tonumber(a) then a = -1 end if not tonumber(b) then b = -1 end if a < b then return true else return false end end updateInfoFrame = function() table.wipe(lines) lines[spellid] = mod.vb.soulCount for uId in DBM:GetGroupMembers() do local _, _, _, count, _, _, _ = UnitDebuff(uId, soaking) lines[UnitName(uId)] = count end return lines end end ``` update 是告訴 DBM 如何更新內容 sort 是告訴 DBM 內容要怎麼排序 [Screenshot](http://i.imgur.com/PMWL7Ov.png) 4. 維護靈魂數量 ```lua elseif spellId == 221891 then local now = GetTime() if (now - self.vb.lastSiphonTime) >= 2 then self.vb.soulCount = self.vb.soulCount + 1 self.vb.lastSiphonTime = now end warnSoulSiphon:CombinedShow(0.3, args.destName) elseif spellId == 208802 then local now = GetTime() if (now - self.vb.lastSoakingTime) >= 2 then self.vb.soulCount = self.vb.soulCount - 1 self.vb.lastSoakingTime = now end local amount = args.amount or 1 if args:IsPlayer() and amount >= 3 then specWarnSoulCorrosion:Show(amount) end ``` P.S. 此功能還在測試中, 所以暫不提供完整檔案, 等完成後會向 DBM 作者提案 以上 by 聖光之願聯盟/人類死亡騎士/伊芙蕾娜 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.231.154.101 ※ 文章網址: https://www.ptt.cc/bbs/WOW/M.1489837308.A.D8A.html

03/18 19:44, , 1F
未看 先推
03/18 19:44, 1F

03/18 19:44, , 2F
快推不然別人以為我看不懂
03/18 19:44, 2F

03/18 19:44, , 3F
靠北 怎麼會在這裡看到程式碼 想說來錯版了XDDDD
03/18 19:44, 3F

03/18 19:46, , 4F
太牛啦!!!
03/18 19:46, 4F

03/18 19:49, , 5F
請收下膝蓋
03/18 19:49, 5F

03/18 19:49, , 6F
高手在民間,不過說真的計時條BW比較好用
03/18 19:49, 6F

03/18 19:53, , 7F
滿滿的聖人光環啊(膜拜
03/18 19:53, 7F

03/18 19:56, , 8F
不要跟我說這些 告訴我解壓縮檔要放哪就好
03/18 19:56, 8F

03/18 19:58, , 9F
推分享 但古爾丹不是放靈魂太近的人也會疊腐敗 這樣會不
03/18 19:58, 9F

03/18 19:58, , 10F
會失準?
03/18 19:58, 10F

03/18 20:00, , 11F
有針對時間過短的db不處理
03/18 20:00, 11F

03/18 20:01, , 12F
高手在民間
03/18 20:01, 12F

03/18 20:05, , 13F
手殘 但會寫程式幫助自己 /膜拜
03/18 20:05, 13F

03/18 20:18, , 14F
古爾丹有吃才有層數啊
03/18 20:18, 14F

03/18 20:25, , 15F
有用
03/18 20:25, 15F

03/18 20:29, , 16F
先推了,不然別人以為我看不懂
03/18 20:29, 16F

03/18 20:49, , 17F
只好推一下歐洲傲嬌DK惹 XD
03/18 20:49, 17F

03/18 20:51, , 18F
專業幫推
03/18 20:51, 18F

03/18 20:58, , 19F
媽 我在這 我跟這DK同團(揮手)
03/18 20:58, 19F

03/18 21:11, , 20F
同是資訊人推~
03/18 21:11, 20F

03/18 22:05, , 21F
原來提克之後DBM有是你的功勞,謝謝你
03/18 22:05, 21F

03/18 22:07, , 22F
看不懂推
03/18 22:07, 22F

03/18 22:50, , 23F
推,真的看不懂 orz
03/18 22:50, 23F

03/18 23:12, , 24F
先推不然別人以為我看不懂
03/18 23:12, 24F

03/18 23:24, , 25F
推個艾雷XD
03/18 23:24, 25F

03/19 00:05, , 26F
好心推推
03/19 00:05, 26F

03/19 00:08, , 27F
不推不行
03/19 00:08, 27F

03/19 00:08, , 28F
推 我一直都想學寫lua 但是好懶 QQ
03/19 00:08, 28F

03/19 00:22, , 29F
工蝦小? 推
03/19 00:22, 29F

03/19 00:56, , 30F
看都無
03/19 00:56, 30F

03/19 00:59, , 31F
所以 快告訴我要放在哪個資料夾好嗎?
03/19 00:59, 31F

03/19 01:07, , 32F
推推
03/19 01:07, 32F

03/19 01:50, , 33F
看不懂推 QQ
03/19 01:50, 33F

03/19 02:00, , 34F
快推快推,以免....
03/19 02:00, 34F

03/19 02:40, , 35F
先推
03/19 02:40, 35F

03/19 06:10, , 36F
不明覺厲!
03/19 06:10, 36F

03/19 07:47, , 37F
太強惹
03/19 07:47, 37F

03/19 10:16, , 38F
超實用
03/19 10:16, 38F

03/19 15:16, , 39F
寫完這篇後歐丁給我第六橘冰龍腿啦 轉專精囉
03/19 15:16, 39F

03/19 15:39, , 40F
除了先跪之外沒什麼可以說的了
03/19 15:39, 40F

03/19 15:40, , 41F
樓主是剛剛Google團的嗎wwww
03/19 15:40, 41F

03/19 16:13, , 42F
對喔
03/19 16:13, 42F

03/19 19:55, , 43F
其實你去twitter @一下dbm跟他說你要什麼 很快就會加了
03/19 19:55, 43F

03/19 20:00, , 44F
其實我建議做個Table來存放法術ID
03/19 20:00, 44F

03/20 00:23, , 45F
開源精神給推~~
03/20 00:23, 45F

03/20 11:57, , 46F
推艾雷 wwwwwwwwwwwwww
03/20 11:57, 46F

03/20 16:00, , 47F
哩勒公蝦餃…
03/20 16:00, 47F
文章代碼(AID): #1OpHpysA (WOW)