죽기

전체보기

모바일 상단 메뉴

본문 페이지

[잡담] 기본 룬프레임 이동해서 사용하기. 위크오라 룬무기강화 심크APL 조건 구현

밤과도토리
조회: 872
2025-08-10 15:24:02

현재 블리자드 편집모드가 생기면서
많이 편해졌는데 그 이후로 기본 runeframe의 이동이 좀 더 어려워졌는데요
지난 시즌까지만 해도 재설정하고나서 setpoint 를 빈함수로 놔두면 고정됐는데
이번 시즌부터는 계속 끌고가면서 frame도 깨지더라고요.

그래서 끌고갈때마다 다시 이동시키는 코드로 하니까 거의 체감 없이 룬프레임 중앙에 두고 쓸수 있었습니다.

setscale 에서 크기 setpoint에서 좌표 함수 건드리시면 위치이동 가능합니다. (현재 발밑중앙)
룬 쿨타임 숫자가 안보이는건 아직 있는 현상인지는 모르겠는데 저건 예전에 만들어놓고 계속쓰는중이라 같이 첨부합니다. 아래 코드 다른 lua파일에 붙여넣기 하셔도 되고 압축 받아서 애드온처럼 사용하셔도 됩니다.
(애드온 처럼 쓰시면 룬프레임 크기 1.2에 발밑 중앙으로 갑니다)

1. 룬프레임 이동코드

local frame = CreateFrame("FRAME")
frame:RegisterEvent("PLAYER_ENTERING_WORLD")
frame:RegisterEvent("PET_STABLE_SHOW")
frame:RegisterEvent("PET_UI_CLOSE")
frame:RegisterEvent("PET_UI_UPDATE")
frame:RegisterEvent("PLAYER_SPECIALIZATION_CHANGED")

local function FixRuneFramePosition()
    if not RuneFrame or not PlayerFrameBottomManagedFramesContainer then return end
    RuneFrame:ClearAllPoints()
    RuneFrame:SetScale(1.2) 
    RuneFrame:SetPoint("CENTER", UIParent, "CENTER", 3, -35)
end

local function eventHandler(self, event, ...)
    C_Timer.After(0.01, FixRuneFramePosition)
end

frame:SetScript("OnEvent", eventHandler)

--핵심: 누군가 RuneFrame:SetPoint() 호출하면 다시 되돌림

hooksecurefunc(RuneFrame, "SetPoint", function()
    C_Timer.After(0.01, FixRuneFramePosition)
end)

-- 룬 쿨타임 숫자 보이기

for i=1,6 do _G["RuneFrame"]["Rune"..i ].Cooldown:SetHideCountdownNumbers(false) end


2. 룬강 트리거

심크래프트 apl 에서 쿨다운 항목을 보면 아래 항목이 있는데요

empower_rune_weapon,use_off_gcd=1,if=(rune<2|!buff.killing_machine.react)&runic_power<35+(talent.icy_onslaught*buff.icy_onslaught.stack*5)&gcd.remains<0.5

룬이 2개 미만이거나 도살기 버프가 없고,
룬 마력이 35 + (냉기의 맹습 재능 * (해당 버프 중첩 * 5)) 미만이며,
현재 GCD가 0.5초 미만 이라는 조건이 있습니다.

이게 위크오라에서 선택해서 하면 사실 버프 중첩마다 하나씩 아이콘 만들어서 할순 있는데,
하나로 구현할 방법이 안떠올라서 아래 trigger로 구현했습니다.

활성조건 첫번째에 룬무강 사용가능 넣고
두번째에 사용자 정의 > 이벤트
이벤트 고르시고 이벤트종류에는 아래 이벤트내용을(talent_update나 entering_world는 안써도 될거같습니다.)

UNIT_POWER_UPDATE:player, UNIT_AURA, PLAYER_TALENT_UPDATE, PLAYER_ENTERING_WORLD

그리고 트리거에는 아래 내용 붙여주시면 됩니다.

function(event, ...)
    -- 옵션
    aura_env.icyOnslaughtName = aura_env.icyOnslaughtName or "Icy Onslaught"
    aura_env.checkGCD = true  -- GCD < 0.5 체크 끄려면 false

    local function GetReadyRunes()
        local ready = 0
        for i = 1, 6 do
            local start, dur, runeReady = GetRuneCooldown(i)
            if runeReady then ready = ready + 1 end
        end
        return ready
    end

    local function GCDRemains()
        -- GCD 더미 스펠
        local gcdSpellID = 61304
        local info = C_Spell and C_Spell.GetSpellCooldown and C_Spell.GetSpellCooldown(gcdSpellID)
        if not info then return 0 end
        local start = info.startTime or 0
        local dur   = info.duration or 0
        if dur == 0 then return 0 end
        local remains = (start + dur) - GetTime()
        return remains > 0 and remains or 0
    end

    -- 현재 RP
    local rp = UnitPower("player", Enum.PowerType.RunicPower)

    -- 맹습(냉기의 맹습) 중첩
    local stacks = 0
    local name, icon, count = AuraUtil.FindAuraByName(aura_env.icyOnslaughtName, "player", "HELPFUL")
    if count then stacks = count end

    -- 임계치: 35 + 5 * 중첩
    local threshold = 35 + stacks * 5

    -- 룬/KM 상태
    local runes = GetReadyRunes()
    local kmUp = AuraUtil.FindAuraByName("Killing Machine", "player", "HELPFUL") ~= nil
    local resourceGate = (runes < 2) or (not kmUp)

    -- GCD 조건
    local gcdOK = true
    if aura_env.checkGCD then
        gcdOK = (GCDRemains() < 0.5)
    end

    -- 디스플레이용 저장
    aura_env.threshold = threshold
    aura_env.rp = rp
    aura_env.stacks = stacks
    aura_env.runes = runes
    aura_env.kmUp = kmUp

    return resourceGate and (rp < threshold) and gcdOK
end


이러면 대략적으로 동작에는 문제없는거같습니다 gpt가 만들어준거라 좀더 고수님이 수정해주실수있으면 더 깔끔해지지 않을까 생각해봅니다 


Lv70 밤과도토리

모바일 게시판 하단버튼

댓글

새로고침
새로고침

모바일 게시판 하단버튼

지금 뜨는 인벤

더보기+

모바일 게시판 리스트

모바일 게시판 하단버튼

글쓰기

모바일 게시판 페이징

최근 HOT한 콘텐츠

  • 와우
  • 게임
  • IT
  • 유머
  • 연예
AD