WOW〃retail/매크로,LUA〃

[LUA] 글자에 무지개 이펙트 추가

토실스 2022. 4. 14. 20:00
반응형

많은 사람들이 문의해줬고 나또한 궁금해하고 있었다가 해결되어 공유한다.

 

동작 - 초기실행시 - 사용자 설정 에 넣기.

if not aura_env.region.HSV then
    aura_env.region.HSV=CreateFrame("colorselect")
end


aura_env.rainbow=function(str)
    local curt,hue,step,r,g,b
    curt=GetTime()
    hue=360*(curt-floor(curt))
    step=360/#str
    str=str:gsub("[%z\1-\127\194-\244][\128-\191]*",function(c)
            aura_env.region.HSV:SetColorHSV(hue,1,1)
            r,g,b=aura_env.region.HSV:GetColorRGB()
            r,g,b=format("%.2x",r*255),format("%.2x",g*255),format("%.2x",b*255)
            hue=(hue+step)>360 and (hue+step)-360 or hue+step
            return "|cff"..r..g..b..c.."|r"
    end)
    return str
end

기존 askawa가 공유했던 rainbow 는 영어 이외는 적용불가였다. 

utf-8 에 적용가능한 검색 code는 

[%z\1-\127\194-\244][\128-\191]* 이다.

 


이후 디스플레이 - %c 로 설정, 매프레임으로 해놓고 아래 코드 입력.

살덩이창조 - 를 쓰고싶음 말로 설정.

function()
return aura_env.rainbow("살덩이창조")
end

활성조건에 매 프레임이 또 들어있으면, 프레임체크가 2배로 되서 nil오류가 날 것이다.

결과물 : 

만약 속도를 줄이고 싶다면, hue와 step의 360을 작게 하면 된다.

글자수 상관없이 내가 원하는 속도 : 다 지우고 고정된 숫자로 조절.


프레임 먹는거 싫어. 그냥 무지개색만 표현할래

동작 - 초기실행시 - 사용자 설정 에 넣기.

if not aura_env.region.colFrame then
    aura_env.region.colFrame = CreateFrame("Colorselect")
end
local col
aura_env.rainbow = function(str)
    local hue = 0
    str = str:gsub("[%z\1-\127\194-\244][\128-\191]*", function(char)
            aura_env.region.colFrame:SetColorHSV(hue,1,1)
            col = CreateColor(aura_env.region.colFrame:GetColorRGB())
            hue = hue + 360 / #str
            return col:WrapTextInColorCode(char)
        end
    )
    return str
end

hue값을 증가함수 말고 고정으로 설정했다.

결과물 : 


askawa 기존버전

if not aura_env.region.colFrame then
    aura_env.region.colFrame = CreateFrame("Colorselect")
end
local colFrame = aura_env.region.colFrame
local col
local pos = 0
aura_env.rainbow = function(str)
    local step = 360 / (#str-1)
    local hue = pos
    str = str:gsub("[%z\1-\127\194-\244][\128-\191]*", function(char)
            colFrame:SetColorHSV(hue,1,1)
            col = CreateColor(colFrame:GetColorRGB())
            hue = (hue+step) > 360 and (hue+step)-360 or hue+step
            return col:WrapTextInColorCode(char)
        end
    )
    pos = (pos+1) > 360 and 0 or pos + 1
    return str
end

step변수는 여기서 pos인데 360 아래에서 1씩 증가 (360/360)으로 느리게 설정했음.

맨위 거에서 step을 1로 설정한 것과 같다.

결과물 :

반응형