v9.7.2: Ebonhold Database integration and core logic refinements

This commit is contained in:
Xurkon
2026-02-14 21:13:44 -06:00
parent 0a2cc15641
commit 6ef85d4e2d
573 changed files with 1751730 additions and 2 deletions
+104
View File
@@ -0,0 +1,104 @@
---@type QuestieAuto
local QuestieAuto = QuestieLoader:ImportModule("QuestieAuto")
---@class QuestieAutoPrivate
---@field disallowedNPC table<NpcId, boolean>
---@field disallowedQuests table<QuestId, boolean>
local _QuestieAuto = QuestieAuto.private
--- COMPATIBILITY ---
local UnitGUID = QuestieCompat.UnitGUID
local GetQuestID = QuestieCompat.GetQuestID
function _QuestieAuto:AllQuestWindowsClosed()
if GossipFrame and (not GossipFrame:IsVisible())
and GossipFrameGreetingPanel and (not GossipFrameGreetingPanel:IsVisible())
and QuestFrameGreetingPanel and (not QuestFrameGreetingPanel:IsVisible())
and QuestFrameDetailPanel and (not QuestFrameDetailPanel:IsVisible())
and QuestFrameProgressPanel and (not QuestFrameProgressPanel:IsVisible())
and QuestFrameRewardPanel and (not QuestFrameRewardPanel:IsVisible()) then
return true
end
return false
end
function _QuestieAuto:AcceptQuestFromGossip(index, availableQuests, modulo)
local title = availableQuests[index]
local isTrivial = availableQuests[index + 2]
local isRepeatable = availableQuests[index + 4]
if _QuestieAuto:IsAllowedQuest(true, title) and ((not isTrivial) or Questie.db.profile.acceptTrivial) then
Questie:Debug(Questie.DEBUG_DEVELOP, "[QuestieAuto] Checking available quest: \"" .. title .. "\"",
"isTrivial", isTrivial, "isRepeatable", isRepeatable, "index",
index)
QuestieCompat.SelectAvailableQuest(math.floor(index / modulo) + 1)
end
end
function _QuestieAuto:CompleteQuestFromGossip(index, availableQuests, modulo)
local title = availableQuests[index]
local isComplete = availableQuests[index + 3]
if _QuestieAuto:IsAllowedQuest() and isComplete and title then
Questie:Debug(Questie.DEBUG_DEVELOP, "[QuestieAuto] Checking active quest: \"" .. title .. "\"", "index", index)
QuestieCompat.SelectActiveQuest(math.floor(index / modulo) + 1)
else
Questie:Debug(Questie.DEBUG_DEVELOP, "[QuestieAuto] \"" .. title .. "\" is not complete. Index:", index)
end
end
function _QuestieAuto:TurnInQuest(rewardIndex)
Questie:Debug(Questie.DEBUG_DEVELOP, "Turn in!")
-- We really want to disable this in instances, mostly to prevent retards from ruining groups.
if (Questie.db.profile.autocomplete and _QuestieAuto:IsAllowedNPC() and _QuestieAuto:IsAllowedQuest()) then
GetQuestReward(rewardIndex)
end
end
function _QuestieAuto:IsAllowedNPC()
local npcGuid = UnitGUID("target") or nil
local allowed = true
if npcGuid then
---@type string, string, string, string, string, string
local _, _, _, _, _, npcIDStr = strsplit("-", npcGuid)
if npcIDStr then
local npcId = tonumber(npcIDStr)
if (_QuestieAuto.disallowedNPC[npcId] ~= nil) then
allowed = false
end
Questie:Debug(Questie.DEBUG_INFO, "[QuestieAuto] Is NPC-ID", npcId, "allowed:", allowed)
end
end
return allowed
end
function _QuestieAuto:IsAllowedQuest(questStarter, title)
local questId = GetQuestID(questStarter, title)
local allowed = true
if questId > 0 then
if (_QuestieAuto.disallowedQuests[questId] ~= nil) then
allowed = false
end
Questie:Debug(Questie.DEBUG_INFO, "[QuestieAuto]", "Is questId", questId, "allowed:", allowed)
end
return allowed
end
local bindTruthTable = {
['shift'] = function()
return IsShiftKeyDown()
end,
['ctrl'] = function()
return IsControlKeyDown()
end,
['alt'] = function()
return IsAltKeyDown()
end,
['disabled'] = function() return false; end,
}
function _QuestieAuto:IsBindTrue(bind)
return bind and bindTruthTable[bind]()
end