World of Warcraft/[WoW] 위크오라

와우 용군단 위크오라에 단축키 표시하기 (23/06/10)

레임3D 2023. 6. 10.

Wago 원문 (https://wago.io/4pIsTr0Z9)

 

업데이트

모듈 업데이트 : CapsLock 단축키 CL로 표시

 

 


위크오라 버튼에 본인의 단축키를 표시하는 방법입니다.

만약 매크로라면 매크로 작성시 /시전, /사용 대신에

반드시 /cast, /use를 사용하세요

 

https://youtu.be/VDcNz-Tp87E


1. 메인 모듈 위크오라 가져오기

!WA:2!LRvZZTXXvElPe5yuo(dUL1MS2UQoWL8ceroIa8d9rzAVaGGsWg8Jfa0YjmCbNpAqmlhmZKEgakkxUQ1Cv24yVh2LooRRAD8bUED5AlFWftCkFW7fDi3svtPkNYrDihmPUK)cYR)ygmyWaqizDivfwsKt39796371V3V(ZtSWyTgtBmT3AsIvBxdDtmz5vRvU0sfv2wEtRsZV302LCQrM8hEPBl32TPfzzBxDltNx(JZ7UJnUIUPDBxsBh88yh1nQSTUMBZtLxdkyNPQlr3CtKRfst3X2qEhKEdKPfAl8ok6MA02uTABOHuWOgwTn1YcTqABULP12MenCd52gUNmVPCl8TwLxlQg(6UkgyZnDB(u71cAxNQ0n3d0GYSAB(QENwPjwwdtOQ1saZnZ7cCDsIP1IyYM4MEpYP(J770wrykxUdWHR1MBAG9ESn8syJQ2KPwUnXicguCvClSPlvnLvD17G9E0B7WiPcVvVV1gEp(j9EKvo1Ksz)yVt79W0AyfVKxIBjOcKNUJ3JsSLDDXetVh7KEp((1Sq(c5jFkVXA6930SpbS326UnfCFqifIjHaPFnGOazCqtDnCfSf4fjB49TAUp1jw1Qnrf)n3v1YWq22H5ioa8rfck)3207XTFsW8jUyt0IwA6n0XeOBTFchELb1TNHElD3AqmqEtlt8EBcbq20IvKje5D8oDfwn5D0Vb(PwW70hqJji6mxU3zS)zjLsook53pjs2udL8CjrTA7WCXazY2yneZOLrNvkrz9TWOKN9CjLsKCIKiDhKSbbgH3bbHKw(mmoWSQmyoGNs2LsfD8RLfivvRwTSmrQnLjWaiMG0n9dcDK2THLPBvqlvAH10B3I6ueXR0GTSNvnX(QGUz1Iw8KWiVSM12)GLB0Wb7(mp0bYMQGRzflDtxLcfxQwXk2Oq8xVHfPLSBD76U6TWIsNW(j6kYvT1KDHbRoWq6DOweqGU61Ozs5ZbfP6mnoD2koUYe3e51n1DFEfUaU(Z97mSuLnqlM7LxUcAo00jeLlTeR8uIYQmcckqBnbKow)ksVcEhqKAlBETCuxMzce8ZetGUc2L5cvBti0WFEpqhU4Y(vHOaQEXONlEe0H9krjE9we0Kc6e6vuYyvZidBQLibdPWfOATKHil56ussj6SxGRsPdx3CZfspfD2lWv40DToUxiSHhvHOYSaeK5IxGaPoPsUqLClwKgYgwDsZKw3F1VH7RoG46RX(zr4BcCg91yK(RrBtwSrpewYPGfmIP6w1gBySOSkXkvl6Vlb5io06OGICvVRZO(40)PybzvZrh6z8vYSraVDzqm2WOL6sbqs32eteDGRxH6GLjQnfZdmhk55vLDCL((jLKc0JiCa5VvzmXihknaQfDjvhUCdWYtfURyreDBkqMCtWxnpg3i4dk5IBv1WYT08P0Hp71TbzYi95YmE2PqAwb121sOCuw3ClU7SKjn92IStjr1PssriWeiKspDpSdU3aEdIy7x(ueDHSbQzJu(SLUpw6Rc6yitaZH8nT47SqoB9(Am8iE0Y(F3J7E4bSudjs8A)(975WvrOiBCei(EzmEuI0f0iK)Xqvp(6rlVPKwVPcS(zi0VepUOlh(9zI(cggAse4c7nnkANet20etS2AHaydgT5kDnlHVpVH(nUrkELrhNuKjuTpz)Al4cfo5xyouMS9hUkynxHALwEPUcaB4G7H3StpqExC1Y1kXfq(CvYmeHm1SJOqYoeHm9fhrHm1qeYStoIcz6HiKlKDefYmdrixCuDSZoeHCPr1XEHKjId3jA8uBxxiceIyoNiIBImPpBMSrjJUwq)5PGUtskz(vRvdIJKK4IyGPpaisE(2zGW7uDfum5hdpTOOrNvl9xKPffl)QRw6yILh5eIPEqKqm9dIeISpisiYC)Lq47sVW9xQGp7xCiSNzYlES8FPHXF2jpw(Zm5GeWlccy6zyRdpSmNz2VUanHeCi5o7f)6I9eVCV4K)1kCuFirGRIbrXCrSVwlZ6s2e9oW2KK47sLQRytzfd2slDjTJzzLcfDKq)OdrJaZXVIIOlbDIjwFDH1d7V9W35to638E3D3pcD07)rh()((O7(t(3p6T)O7(2Fb6O35do6d)pVF8rJaADk)Olu2zORWYp8dGCsZCTbeaHJPVFXZrxyQWHYV4OJkoyan0Sz6vMJmC9GrArtDHEL5iV6SbppcA6l1Rmh55Mg80kaYvefnZ0tFFaL9x0qdmMgEQXHV5VS3nphxwYMy3cg6QBPqpvx2UYOB2CCe9iJ7bpHwbfOijDtkj73Ds3KnSpVo0tSZwwN4KQqDMKf2HdDlCRqSAOBGz9t60r3nUFwxhj)ollBC8y2bAhbGwP5hNTt50SDd5VN5W76UlLPp2Tq35(Al0XeSW3)B4)XoJe2oCbLJD0pbo(Ep0IVM(tUV03KPodrpZphUrYnh6KPIXphRtmwh4XEEdXfCQ0w3qJB00Wt(gAtP2t8Aua9w(h7DWzzfJFJ32ceRwbNsEeXkfiN0rZnJ0dqw9eqcDe2dLF3VzkMIBc0)GTmrUfpwvGuW(2Qb78Czdx0XkAohAhR2izcgStRTOucriX500WUyslDt8RWp38ytOd(auIsoOUqaVue3zVMf4nhzaJiCoO1wCVnghBEg3gOz5V09kIf9ybPlEogKiU9Zd5hh1nlIM0MJxIDsEPJfdJtpR7zhZvYrbjloCSWsIBiubfh6wa2wA0XIUfDXrXyfpWG72w20fRvDua9eN9wVCmOdGlmxfQZhsYdZYEvzhgRIAyjIoP6rMPFafna23Oeqexesyy5ET3id6hx4tie6rdF(bFyqKtweveMZYLTZIaR8frHoouF6uTSzNwlQJSrBSdmvNRf3t7mo1nqr82MDbVMySg96PDW0tMLnyHLvBIKBtKdbckU6ZA8D1GE93ir8tLszRo2SJKQLzd9nLIELP9mvkmy1rQNBrEWByIz1s6MoyIBQWAZ4Oxp2bcXvmdklh)xAtN2kWuTI6hp5zNGEvwNf(t6XJGF29(UNd0WqLFJ0dFik6oLIy9Pe34AFhmpNom9yUfKmKLRe267BPjHfvydpOEqub(GEnU4NmWpG2N)HnZB)lbMEi5oPIAV0KiNUHr(M5wXhk54c7T2jUfHbl0IOV5MycljoOeF5xXMIgMPGvPLKTCGK0eJyACatY5)dZwwBR1PMJ4(O6i1DMBwXWY8nUNac6bKlMHfwVFSXHUKDaeumXFHldA8iMbmXehCkah0ZjODo0KdC(J(dzzmLo(ljClfON7BTv((q(AP772bbMc37qXrb(0hStapQlagLfAc4POVRGVxixO4L4aAyuKnrld9Yt9nMbEJZXB7bKpoQ3KGEcK6Bms4t6XvX6Gbp8hZ1ZfXZ67agmKqi0nLbD7YGVVwqMkQn71EqD3YWQWZbMOd)bRqWBQ7aodm7Hh1YbB0b7i13BeG)ArkdKg5Umd1aeckqxIKlW78CggPg2wcJxQXJbr1AltjaLTc7lN1YUUGjbUuFumO6bohst(cnwSOHYsQ03Bim()nKB4YvedofP3IFQKRUY85QvSE(slnFPLUsvX7ajmdvHLJYEUtPsUSjJlyc3a3FO3ns4HeON3tZQo)L9SHsdiH0PzIDfb(op2ZteF(B9oD(2q2Q9yTDW1LvCSikxflBaHJ4nUd4eypMOQTB0q)6huVqUQ1QxTwUk1UtxYzK6D59lybBGL9(I2L2ivQBSlFh9Aoj4myST8oo0LMSrfoMR3ck8xVqqFTcbd9vLQRuSC591WkqxtFmyKRwS8klSA59ABku9e2pj)r0jYjO6XN(q2pDSpzk(hvOVCkn7NFWVQkd8MYQ7uVbSjwsZ9Kn1PpHklZz9EXf8oTx6BHLDWWEazpqWh(2AqshT56uKeIdga10C2LsdvL9sNVLSUjJrV1EyVFK36E)tWNf6RMex)e)3SB8oJe6Wp9lo6d)pqh9B(5F1N9VGUm6SQjYkH(QF1NF3)Tpx04r)xq7V3np8dFF0r)))8dF3paD4V6ZpA3p9UV3V(OBcfU5)Zx9fFg)mQt4NXMk9d43QKaOl(uCgfmaWbI4iWvIjhjeDRfGCRRTEOPp81G4NPOBVZXydsmhWelrMEWSNNKa8)80h2N9tSar)gO)X2YAWGUmQwnsh(7w77fBmNQ4dikWWswRXTPja2yxfyvJg83zADtiIN0uXv2ac8ptf2RqnrfvdzhNZ4PNipK9Os)WBc2VN87cjC0xEPIElBywdXli814VGWt9NGPHH1JkBiEpD)R7UTfr7Aez7DVM4J9vdsstSphPJfPEM9GzjAWF6H5xUwTLxC)UaG)DNX703gkQiRUf9PyAQrUoVlpHcFA8N37V)pmR3tVHhAScEpBLc1QuEcr5QEpRs1RwAHA(vKZ7zZNRSFXKLZ79S7xg3WLVryrTlc1ERf110mWHQhQA5vRw8AxTyXYRUIhk7D(fhWB4oDBy(LV2sSM(sEte(zApnvQtZRA3cY2oLTu3cQRq5EiBgkzZWRszPvxCLCZd68s8kaqPCfkcuuDfFbLBLQLxUWRWeK33(KzBtmSFMMUU2ox(8NN(WNL0ToFWlF(8zM1(5gm4JnSFzD6i3PSp3GPsBhiavxTUBtcgw8GH2oko4wqGuLPLMsAY9DTufbMFNt8t)gj11Sp3ZvbR3cHo6dU5DFZpLEq8)YVm0jZF4)3NC47(wOStn5SzMK8pdZzO3yN8LlUqTdAqHba8oiG)u)j(7tLHmqdAuQwOsXIlvr1YWI8YNc(jBBDTdY4ur9hNPIYvkKLSdpm5BANCWMtllT6G8XBCapAUatCN4eN4u7dZdG1ypF1B(OhOBY5dSRe2ptmYlt2GmUXCQmJ0mstpwNF)R9N)d

 
 
2. 단축키 표시할 위크오라 >  디스플레이 탭에서 [문자 추가]

 

추가된 문자디스플레이 문자에 "%c" 입력하면 위에 공통 문자가 추가됩니다.

사용자 정의 함수에 아래 문자열을 복사해서 붙여넣으세요.

 

function() local KeyBindOnWA = _G.KeyBindOnWA or CreateFrame("FRAME", "KeyBindOnWA") if not KeyBindOnWA.UpdateList then KeyBindOnWA.UpdateList = {} end KeyBindOnWA.UpdateList[aura_env.id] = aura_env if KeyBindOnWA.GetKeybind then return KeyBindOnWA.GetKeybind(aura_env.state.name) end end

 

  • CapsLock 단축키 CL로 표시
  • 마우스5번 버튼
  • NUMPAD : N 으로 표시 되도록 추가

테스트

_G.kbTable_master = {}
local spamAura = ""
local spamCount = 0
local updated = false

-- Function to check for WA causing spam
local function spamCheck(checkAura)
    local lastAura = spamAura
    local prompt = ""
    if not checkAura then
        prompt = "Global update initiated"
        return false, prompt
    elseif (lastAura and checkAura == lastAura) then
        if spamCount > 3 then
            return true
        elseif spamCount == 3 then
            prompt = checkAura.." is spamming and will be ignored"
            spamCount = spamCount +1
            return true, prompt
        end
    else 
        prompt = checkAura.." triggered an update"
        spamAura = checkAura
        spamCount = spamCount +1
        return false , prompt
    end
end


-- Function to parse macros
local function macroParse(actionID, auraName)
    
    -- check if valid Macro
    local _, _, body = GetMacroInfo(actionID)
    if not body then return false; end
    
    
    -- look for simple macros, prio on spell macros vs item macros
    local macroSpell = body:match("/cast (.*)%s")
    if macroSpell then
        local _,_,_,_,_,_,macroID = GetSpellInfo(macroSpell)
        if macroID then
            local type = "spell"
            return macroID, type
        end
    end
    
    -- try to brute force a spellID using the spell that triggered the refresh
    if auraName then
        local _,_,_,_,_,_,provSpellID = GetSpellInfo(auraName)
        if provSpellID then
            local searchString = "/cast.*"..auraName
            local macroSpellCheck = body:find(searchString)
            if macroSpellCheck then
                local type = "spell"
                return provSpellID, type
            end
        end
    end
    
    -- look for /use strings if no spells are found
    local macroItem = body:match("/use (.*)%s")
    if macroItem then
        
        --  check if the /use is an equipment slot
        local slotCheck = tonumber(macroItem)
        if slotCheck and slotCheck < 20 then
            local itemID = GetInventoryItemID("PLAYER", slotCheck)
            if itemID then 
                local type = "item"
                return itemID, type
            end
        end
        
        -- check if the /use string is a valid item
        local _, itemlink = GetItemInfo(macroItem)
        if itemLink then
            local itemID = GetItemInfoFromHyperlink(itemLink)
            if itemID then
                local type = "item"
                return itemID, type
            end
        end
    end
    
    -- if nothing extracted return false
    return false
end


-- Main Function for populating keybind table
function _G.kbTable_refresh(auraName)
    
    -- checks if master table is created before running
    if not _G.kbTable_master then return; end
    
    -- checks if same WA has been spamming and stops it
    local spamResult, spamPrompt = spamCheck(auraName)
    -- console printout of check results
    --if spamPrompt then print (spamPrompt); end
    if spamResult then return; end
    
    for slotID=1,180 do
        local actionType, actionID, _ = GetActionInfo(slotID)
        
        
        -- check if button is a macro and get spell / item ID
        if actionType == "macro" then
            local macroID, macroType = macroParse(actionID, auraName)
            if macroID then 
                actionID = macroID
                actionType = macroType
            end
        end
        
        -- NIL check actionID then populate keybind table
        -- keybinds beyond #156 haven't been test yet
        if actionID then
            local action = slotID
            local modact = 1+(action-1)%12
            local bindstring = ""
            if (action < 25 or action > 72) and (action <145) then
                bindstring = 'ACTIONBUTTON'..modact
            elseif action < 73 and action > 60 then
                bindstring = 'MULTIACTIONBAR1BUTTON'..modact
            elseif action < 61 and action > 48 then
                bindstring = 'MULTIACTIONBAR2BUTTON'..modact
            elseif action < 37 and action > 24 then
                bindstring = 'MULTIACTIONBAR3BUTTON'..modact
            elseif action < 49 and action > 36 then
                bindstring = 'MULTIACTIONBAR4BUTTON'..modact
            elseif action < 157 and action > 144 then
                bindstring = 'MULTIACTIONBAR5BUTTON'..modact
            end
            local keyBind = GetBindingKey(bindstring)
            
            if keyBind then
                
                -- truncates mouse button keybinds
                local mouseMod, mouseBtn, btnNum = keyBind:match("(.*)(BUTTON)(.*)")
                if mouseBtn then
                    --       if mouseMod == 'SHIFT-' then
                    if mouseMod == 'S' then
                        mouseMod = "S"
                        --                    elseif mouseMod == 'CTRL-' then
                    elseif mouseMod == 'C' then
                        mouseMod = "C"
                    elseif mouseMod == 'A'then
                        mouseMod = "A"
                    end
                    keyBind = mouseMod.."M"..btnNum
                end
                
                -- items are stored with item name as key to bypass inventory requirement
                if actionType == 'item' then
                    actionID = GetItemInfo(actionID)
                end
                
                -- check for nil, changed or empty keybinds before populating
                if keyBind and actionID and kbTable_master[actionID] ~= keyBind then
                    kbTable_master[actionID] = keyBind
                    updated = true                  
                end
            end
        end
    end
    -- clear spamcheck to allow WAs to check for updates
    if updated then 
        spamAura = ""
        spamCount = 0
    end
end

-- Populate table on init
kbTable_refresh()


 


 

💲 추천 글