ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 와우(wow) 리치왕의 분노 (3.3.5) 퀘스트 자동 수락 및 완료 애드온
    취미/게임 2025. 8. 11. 06:42
    반응형

    wow\interface\AddOns\ 폴더 안에 AutoQuest 폴더를 만듭니다.

    AutoQuest.zip
    0.00MB



    AutoQuest.toc

    ## Interface: 30300
    ## Title: AutoQuest
    ## Notes: 자동 퀘스트 수락 및 완료
    ## Author: Soulowner
    ## Version: 1.0
    AutoQuest.lua

     

    AutoQuest.lua

    -- 딜레이 함수
    local function Delay(delay, func)
        local waitFrame = CreateFrame("Frame")
        waitFrame.time = delay
        waitFrame:SetScript("OnUpdate", function(self, elapsed)
            self.time = self.time - elapsed
            if self.time <= 0 then
                func()
                self:SetScript("OnUpdate", nil)
            end
        end)
    end
    
    -- 안전한 클릭 함수
    local function safeClick(button)
        if button and button:IsShown() and button:IsEnabled() then
            button:Click()
        end
    end
    
    -- 보상이 하나일 경우 자동 선택
    local function autoSelectSingleReward()
        if GetNumQuestChoices() == 1 then
            local rewardButton = QuestInfoRewardButton1
            if rewardButton and rewardButton:IsShown() then
                QuestInfoItem_OnClick(rewardButton)
            end
        end
    end
    
    -- 보상 선택 후 완료 버튼 활성화 감지
    local function waitForRewardSelection()
        local elapsedTime = 0
        local maxWait = 10  -- 최대 10초 대기
        local interval = 0
    
        local watcher = CreateFrame("Frame")
        watcher:SetScript("OnUpdate", function(self, elapsed)
            elapsedTime = elapsedTime + elapsed
            interval = interval + elapsed
    
            if interval < 0.2 then return end
            interval = 0
    
            if QuestFrameCompleteQuestButton and QuestFrameCompleteQuestButton:IsShown() and QuestFrameCompleteQuestButton:IsEnabled() then
                safeClick(QuestFrameCompleteQuestButton)
                self:SetScript("OnUpdate", nil)
            elseif elapsedTime >= maxWait then
                print("퀘스트 완료 실패: 보상 선택이 감지되지 않음")
                self:SetScript("OnUpdate", nil)
            end
        end)
    end
    
    -- 보상 클릭 후 완료 버튼 자동 클릭을 위한 후킹
    hooksecurefunc("QuestInfoItem_OnClick", function()
        Delay(0.2, function()
            if QuestFrameCompleteQuestButton and QuestFrameCompleteQuestButton:IsShown() and QuestFrameCompleteQuestButton:IsEnabled() then
                safeClick(QuestFrameCompleteQuestButton)
            end
        end)
    end)
    
    -- 이벤트 처리 프레임 생성
    local f = CreateFrame("Frame")
    f:RegisterEvent("GOSSIP_SHOW")
    f:RegisterEvent("QUEST_DETAIL")
    f:RegisterEvent("QUEST_PROGRESS")
    f:RegisterEvent("QUEST_COMPLETE")
    
    f:SetScript("OnEvent", function(_, event)
        if event == "GOSSIP_SHOW" then
            local available = GetNumGossipAvailableQuests()
            local active = GetNumGossipActiveQuests()
    
            -- 단일 퀘스트 자동 선택 (0.5초 지연)
            if available + active == 1 then
                Delay(1.0, function()
                    if available == 1 then
                        SelectGossipAvailableQuest(1)
                    elseif active == 1 then
                        SelectGossipActiveQuest(1)
                    end
                end)
            end
    
        elseif event == "QUEST_DETAIL" then
            Delay(0.1, function()
                safeClick(QuestFrameAcceptButton)
            end)
    
        elseif event == "QUEST_PROGRESS" then
            Delay(0.1, function()
                safeClick(QuestFrameCompleteButton)
            end)
    
        elseif event == "QUEST_COMPLETE" then
            if GetNumQuestChoices() == 1 then
                autoSelectSingleReward()
                Delay(0.2, function()
                    safeClick(QuestFrameCompleteQuestButton)
                end)
            else
                waitForRewardSelection()
            end
        end
    end)

     

    반응형

    댓글

Designed by Tistory.