취미/게임
와우(wow) 리치왕의 분노 (3.3.5) 퀘스트 자동 수락 및 완료 애드온
soulowner
2025. 8. 11. 06:42
반응형
wow\interface\AddOns\ 폴더 안에 AutoQuest 폴더를 만듭니다.
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)
반응형