치아n연화
2018-01-04 02:12
조회: 3,902
추천: 0
쐐기용 위크오라를 만드는데... 도움요청약간의 월돚과 퇴근후 취미생활로 위크오라를 만지작하고 있습니다.
트위치에서 귀마개님의 플레이 영상을 보던중, 리틀윜이나 dbm에서 표시해주지 못하는 경보를 위크오라를 통해 표시하는걸 보고 저런건 어떻게 만드는지 궁금해서 좀 뒤적여봤습니다. 특정 몹이 자신을 타겟팅해서 스킬을 캐스팅하는걸 찾는게 좀 신기한 구조로 찾게 되어있었습니다. COMBAT_LOG_EVENT_UNFILTERED 이벤트 명세는 컴뱃로그 소스 유닛 정보와 대상 유닛 정보를 모두 넘겨주도록 문서상에는 나와있는데, 실제 해보니 SPELL_CAST_START에서는 대상 유닛 정보가 nil이더군요... 아마 특정 버전 이후부터 막힌것이 아닐까 생각듭니다만, 대안으로 사용하는 방법이 매크로에서 target이나 focus처럼 wow api내부에서 nameplate1~nameplate40까지 사용 가능하도록 등록되어 있습니다. 아마 동시에 40마리 이상은 처리하지 않는다는 가정하에 작성되어있나 싶기도 하고 그런고로, targettarget처럼 nameplate1target을 하면 첫번째 이름표대상의 타겟을 검색 가능하도록 되어있네요. 사실 이런 코드는 api를 누가 더 많이, 명세를 정확히 알고있냐의 문제라서 다만 특정 유닛의 nameplate에 대해서 이펙트 처리하는 api는 못찾겠네요. 개인적으로도 ElvUI를 쓰고있어서 그쪽동네 api가 공개되어있나 싶어서 찾아봤는데 당연히 공개된게 있을리 만무하고 차선책으로 코드를 다 읽어봐야 하는데 그것도 고난과 역경이라 관련 api 아시는분 있으시면 팁좀 주시면 감사하겠습니다... 만들면서 커스텀 트리거로 커스텀 이벤트를 발생시키는 구조로 하려고 했는데 뭐 대단한걸 만드는것도 아니고 해서 그냥 대충 만들었습니다. COMBAT_LOG_EVENT_UNFILTERED 이벤트의 콜백함수에 그냥 다 때려박았습니다. 그런고로 얘는 활성화되지는 않지만 동작은 되는 뭐 그런 구조입니다. -- COMBAT_LOG_EVENT_UNFILTERED function (eventName, ...) local timestamp, type, hideCaster, sourceGUID, sourceName, sourceFlags, sourceRaidFlags, destGUID, destName, destFlags, destRaidFlags = ...; if (type == "SPELL_CAST_START") then local spellId, spellName, spellSchool = select(12, ...); for castOnMeSpell, castOnMe in pairs(ZNT["CastOnMe"]) do if (castOnMeSpell == spellName) then -- spell matched if (castOnMe[1] == "" or castOnMe[1] == sourceName) then -- source matched local isTargetOnMe = false; for i=1, 40 do local nmps = "nameplate" .. i; local nmpGUID = UnitGUID(nmps); if (nmpGUID == sourceGUID) then if (UnitIsUnit("nameplate" .. i .. "target", "player")) then isTargetOnMe = true; end break; end end if (isTargetOnMe) then -- target on me -- alert message if (castOnMe[2] ~= "") then SendChatMessage(castOnMe[2]); end -- alert sound if (castOnMe[3] ~= "") then PlaySoundFile(ZNSM[castOnMe[3]]); end end end break -- break when spell matched anyway... end end -- for castOnMeSpell, castOnMe in pairs(ZNT["CastOnMe"]) do for castAnySpell, castAny in pairs(ZNT["CastAny"]) do if (castAnySpell == spellName) then -- spell matched if (castAny[1] == "" or castAny[1] == sourceName) then -- source matched -- alert message if (castAny[2] ~= "") then SendChatMessage(castAny[2]); end -- alert sound if (castAny[3] ~= "") then PlaySoundFile(ZNSM[castAny[3]]); end end break -- break when spell matched anyway... end end -- for castAnySpell, castAny in pairs(ZNT["CastAny"]) do end -- if (type == "SPELL_CAST_START") then end 사용할 설정들을 대강 모아놨습니다. -- Soundfile Mapping ZNSM = { ["AirHorn"] = "interfaceaddonsweakaurasmediasoundsairhorn.ogg", ["BikeHorn"] = "interfaceaddonsweakaurasmediasoundsbikehorn.ogg", ["Sonar"] = "interfaceaddonsweakauraspoweraurasmediasoundssonar.ogg" }; -- ZNT Table ZNT = { ["CastOnMe"] = { ["사격"] = {"", "사격", "Sonar"} -- specific target, chat, sound }, ["CastAny"] = { ["칼춤"] = {"", "칼춤", "Sonar"}, -- specific target, chat, sound ["산사태"] = {"막돌 파괴자", "산사태", "AirHorn"} } }; 실제 위크오라 문자열은 다음과 같습니다. dW1evaqEvvTEvkQEpiI5RQOCFGq7NwquKwKs1mIIOHeIuZzvbzuqHtbknPvfuZAvrAwQunSOuLBPOmTvfQ2fimUfvuM3QcPHPQi6yqPSmfv6zQkQMMkfX1uviEhiQzhf19uGvheyzRkcFhjPTJKYdccYbbjluvjEiq0evvQUisQ2OQs6JQkLFSOIQtIOQvQq7zrfXmvuv3eiTtOKFIOmufv4uRuuwkuQ8uO6trPQ6QiQSvvksFfkvLtSOI05wvaRvLcVfKAUQe3fuSxv5VQuAWYHvYIvuLhRuMSICziBwvLpRGgTkPtJWQbcQxJKy2i1TrKDRIFJIHJeBBvbA5O0ZbmDuDDG61RkuUDisMkOAKqr4h2EWF4KE4tp8Ph8h(ebaim4ZgNGAOh(IM(HV24eudbNLy4qelOmtOhwZW2N8HV24emhGh8hoaFXYFWF4amGptpCYF4i2FRn0fOMMyoaxW(qlQafy2fWL5GHQiwOaZUaafnrSUGZa(mbCbG5SyHGz4Wh(eZTamGptV594pCIdb)b)HpXC7gyaodP3xE4BGb4mKE4ZMz4mGpt)iOrgOlkuiodD8gyHdQnWGehnZmO3HIGftWWE2HXgy7ehoI93AdD5YAAI5aC5cvrlQSaZUaUCHeAIyD5cad4ZeWLllc2RmShiygoC)UJMzg07FHGkimbd7zhgBGTtC4i2FRn0LlRPjMdWLlufTOYcm7c4YfsOjI1LlamGptaxUmpcQGUYWEGGz4W97oAMzqVJZCwS7WydSDIdhX(BTHUCznnXCaUCHQOfvwGzxaxUqHHQi2fy2faj0eX6YfagWNjGlxayolwiygoC3rqeYo64Sz2nWcUbFnpAKJ3al42adsC0mZGEhKlaozhqr7WydmiXrZmZmZGEhZy6Ncc(e3SDySbgKSVF32XmM(PGGpXnB)UTJZCwS7GOnBMbqbTr8JyZ4l2Hi(DB76IF3ayaFMC0mZaX7oAMzqVdYfahQZ)DySbgK4OzMzMzqVJ5pWhfZFWp8om2ads23VB7y(d8rX8h8dVF32Xzol2Dq8UnBMbqbTr8JyZ4l2Hi(DB76IF3ayaFMC0mZmZmO3XmMI9WmM(PqkqOp0om2ads2)yy)ZPFS5CmPbPWKysqWh)JJ55ei9(DBhZyk2dZy6NcPaH(q73TDOiyXemSNDq0rZmdeDeeH8J)4pColXWHi2h8ho)pf0dFdmaNH0dFdmaNH0TxjMqpCobj00dFdmaNH0T8)uqpCe1qh(dFcm7ItWCE4ydIpYdhrn0H)Wb51f3afbaSgIE4iQHoCGhoijd0Vaf8BNpzF7wQFtPowWVLCy9vYpF4uh7O(3F4BGb4mKE4ZMzGKmq)cuWVD(K9TBP(nL6yb)wYH1xj)8HtDSJ6F3XFGpBCcMJHbIAOdhRfj0DdciGawhnZmAMTfTXjiHa4lsuUB8)uq3TRetiqUa4i27gady2n03ih5)(DdGbm7gcRfj0DdGbm7g6R0RHa3nagWSBiSBrm9v61qG72ecG)nYr(VF3MqaCSwKq3Tjea)R0RHa3Tjeah7wetFLEneWgyqabeq2rZmZrZmJ4NHb)pfKnyGTJphuF(Z)wqcfo8BXHdf2bFhwJFfDC0mZmZmAMTfTbqbrtt(P7gafennwlsO7gafenn(2vggABGbGOrBCmW2CVBqabeWczhnZmZmZrZmZmZ(XWABlaozhqr4uq003TTfaNSdOiJ4yuweSayCdSGd9oixaCYoGI2HbwBIXrZmZmZmZmIFggBlaozhqr4uq002Gbgafennwlsiyn(v0XMnZaOGOPnsl(2v0KJMzMzMzMzMzgXpdJTfaNSdOiOXgm2Gb2(UXWABlaozhqrqJnySbdmagWSBiSwKqWA8ROJnBMbWaMDdzKw8TROjhnZmZmZmZmZmZmZrZmZmZmZmZmZmZOz2w0gba8f7qeNSdOiBG9BrdGGSJMzMzMzMzMzMzM9JH1igGT72n5tAtmoAMzMzMzMzMzMzMzMrZSTOTdjka2aB)SiHOqV4ODdcimci7OzMzMzMzMzMzMzMzgnZ2I2oKO8nYr(VBdmYDi4FJCK)7yCirbawi7OzMzMzMzMzMzMzMzgXpdJdjkFJCK)72Gbgady2n03ih5)oSg)k64OzMzMzMzMzMzMzMzMzMr8ZWGChco5bi3HGJX(zrcrHEXr7geqyegeqy78f7qeF)UTtHE9hXUdlSg)k64OzMzMzMzMzMzMzMzMzMzMzeaWxSdrCYoGISbgNfmcYoAMzMzMzMzMzMzMzMzMzOZKJMzMzMzMzMzMzMzMzMz28yrlQazhnZmZmZmZmZmZmZmZqNjhnZmZmZmZmZmZmdDMC0mZmZmZmZmZmZmhnZmZmZmZmZmZmJ4NHbba8f7qeNSdOiyn(v0XMnZ4l2HiUXCmsihnZmZmZmZmZmZmZmZC0mZmZmZmZmZmZmZmB2mBrJy5gjeaWAiYrZmZmZmZmZmZmZmZmIFggBlaozhqrqpxym)Sb2(oSg)k64OzMzMzMzMzMzMzMzMzMHJotG86IdkcayneHX2cGt2bue0ZfgyHSJMzMzMzMzMzMzMzMzOZKJMzMzMzMzMzMzMzMzoAMzMzMzMzMzMzMzMnBMTOrSCdGb8zYrZmZmZmZmZmZmZmZmIFggBlaozhqrq)5Wy(zdS9Dyn(v0XrZmZmZmZmZmZmZmZmZmBoOx)XzaFM(kbncJBGfoOqVTa4KDafb9NddmWczhnZmZmZmZmZmZmZmZqNjhnZmZmZmZmZmZmZmZC0mZmZmZmZmZmZm0zYrZmZmZmZmZmdDMC0mZmZmZmZmZMhlArfB2mBESOfvmQEfDmakiAAJ0IVDfnzRZFQU(dbeq4OzMzMzMzg6m5OzMzMzOZKnBM9JH12waCYoGIWPGOPVBBlaozhqrgXXOSiybW4gybh6DqUa4KDafTddS2eJJMzMzM5OzMzMz)yyTTfahQZFCkiA6722cGd15VrCmklcwamUbwWHEhKlaouN)7WaRnX4OzMzMzMzgXpdJTfahQZFCkiAABWadGcIMgRfjeSg)k6yZMzauq00gPfF7kAYrZmZmZmZmZmJ4NHX2cGd15p0ydgBWaBF3yyTTfahQZFOXgm2Gbgady2newlsiyn(v0XMnZayaZUHmsl(2v0KJMzMzMzMzMzMzM5OzMzMzMzMzMzMzZMzlAel3iHaawdroAMzMzMzMzMzMzgXpdJTfahQZFONlmMF2aBFhwJFfDC0mZmZmZmZmZmZmZmdhDMa51fhueaWAicJTfahQZFONlmWczhnZmZmZmZmZmZmdDMC0mZmZmZmZmZmZmhnZmZmZmZmZmZmB2mBrJy5gad4ZKJMzMzMzMzMzMzMr8ZWyBbWH68h6phgZpBGTVdRXVIooAMzMzMzMzMzMzMzMnh0R)4mGptFLGgHXnWchuO3waCOo)H(ZHbgyHSJMzMzMzMzMzMzMHotoAMzMzMzMzMzMzMJMzMzMzMzMzg6m5OzMzMzMzMzMnpw0Ik2Sz28yrlQyu9k6yauq00gPfF7kAYwN)uD9hciGWrZmZmZmZm0zYrZmZmZqNjB2m7hdRTTa4qD(JtbrtF32waCOo)nIJrzrWcGXnWco07GCbWH68FhgyTjghnZmZmZrZmdDMSzZmIFgg8)uq2Gb2o(Cq95p)Bbju4WVfhouyh8Dyn(v0Xr0z6Hd(GOg6WF4lWCMhoWvgQs25HdCLHQKDGAJtqn0J)WPzwtp4pCWaOBbiU5O3xE48fn6WFWF4KatZjEWF8h)HZU2qp4pCsGP5ep4p(J)WNi(9Jydmn))d(dhG4mKg9W3UUOPrNHOhojW0CIh8h(21fnn6me9(YJ)4pCwgA0d(dNeyAoXd(J)4pC(IgD4Z9b)HtcmnN4b)XF8hofQrHVOrh(d(dNeyAoXd(J)4p8FRnobZ5b)HtcmnN4b)XF8hoya0Tte)(rSbMM))9LhoXzildykp4pCsGP5ep4p(J)WbiU5Oh8hoaXzin6HtzXY))WjbMMt8G)WPSy5)FF5XF8h)HZIgsWCG)Nc6HtSXCE4etpCmdPH0GG5mS38jM3dFnnrWjyol6B5SedhIybEWF8h(bmj4SedhIybEyHTh)Hd8WNleFeiM7dNApSW2nzUy7XFp
EXP
33,287
(9%)
/ 36,001
치아n연화
|
인벤 공식 앱
댓글 알람 기능 장착! 최신 게임뉴스를 한 눈에 보자