-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRewards.lua
More file actions
172 lines (162 loc) · 6.15 KB
/
Rewards.lua
File metadata and controls
172 lines (162 loc) · 6.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
-- Rewards.lua: Quest reward overlays, tooltip toggle, and reward key bindings (1..0 and SHIFT-1..0)
local addonName = "DialogKeyWrath"
local DK = _G[addonName.."Frame"]
if not DK then return end
local U = DK.Util
local DB = DK.DB
DK.Rewards = DK.Rewards or {}
-- Overlays
local function RemoveRewardNumberOverlay(btn)
if btn and btn.dkNumberOverlay then
btn.dkNumberOverlay:Hide()
btn.dkNumberOverlay:SetParent(nil)
btn.dkNumberOverlay = nil
btn.dkNumberFS = nil
end
end
local function CreateRewardNumberOverlay(btn, index)
if not btn then return end
if btn.dkNumberFS then
btn.dkNumberFS:SetText(tostring(index))
btn.dkNumberFS:Show()
return
end
local overlay = CreateFrame("Frame", nil, btn)
overlay:SetAllPoints(btn)
overlay:SetFrameStrata("TOOLTIP")
overlay:SetFrameLevel(9999)
local fs = overlay:CreateFontString(nil, "OVERLAY")
fs:SetFont("Fonts\\FRIZQT__.TTF", 18, "THICKOUTLINE")
fs:SetPoint("LEFT", btn, "LEFT", 12.5, 0)
fs:SetJustifyH("CENTER"); fs:SetJustifyV("MIDDLE")
fs:SetText(tostring(index)); fs:SetTextColor(1,1,1)
btn.dkNumberOverlay = overlay
btn.dkNumberFS = fs
end
-- Tooltip helpers
local function ShowRewardTooltip(btn)
if not btn or not DB().rewardTooltipOnSelect then return end
if not GameTooltip or not btn.GetID then return end
local id = btn:GetID() or 0
if id <= 0 then return end
GameTooltip:SetOwner(btn, "ANCHOR_RIGHT")
local t = (btn.type == "reward") and "reward" or "choice"
if GameTooltip.SetQuestItem then
GameTooltip:SetQuestItem(t, id)
GameTooltip:Show()
-- Comparison tooltips if Shift held or setting enabled
if (IsShiftKeyDown() or DB().compareTooltips) and GameTooltip_ShowCompareItem then
pcall(GameTooltip_ShowCompareItem, GameTooltip)
end
DK._rewardTooltipBtn = btn
end
end
local function HideRewardTooltip(btn)
if GameTooltip and GameTooltip.Hide then
if (not btn) or DK._rewardTooltipBtn == btn then
GameTooltip:Hide()
DK._rewardTooltipBtn = nil
end
else
DK._rewardTooltipBtn = nil
end
end
-- Only overlay/hide hooks here (tooltip toggle is handled by click hooks below)
local function HookRewardButtons()
for i = 1, 10 do
local btn = _G["QuestInfoItem"..i]
if btn and not btn.dkHooked then
btn:HookScript("OnShow", function(self)
if DB().showNumbers and QuestFrameRewardPanel and QuestFrameRewardPanel:IsVisible() then
CreateRewardNumberOverlay(self, self.dkIndex or i)
else
RemoveRewardNumberOverlay(self)
end
end)
btn:HookScript("OnHide", function(self)
RemoveRewardNumberOverlay(self)
if DK._rewardTooltipBtn == self then
HideRewardTooltip(self)
end
end)
btn.dkHooked = true
end
end
end
-- Number visible rewards
local function NumberRewardButtons()
if not DB().showNumbers or not QuestFrameRewardPanel or not QuestFrameRewardPanel:IsVisible() then
for i = 1, 10 do local b = _G["QuestInfoItem"..i] if b then RemoveRewardNumberOverlay(b) end end
return
end
HookRewardButtons()
local count = 1
for i = 1, 10 do
local btn = _G["QuestInfoItem"..i]
if btn and btn:IsVisible() then
btn.dkIndex = count
CreateRewardNumberOverlay(btn, count)
count = count + 1
else
if btn then RemoveRewardNumberOverlay(btn) end
end
end
end
-- Toggle tooltip on click (mouse or number-key click)
local function InitializeRewardHooks()
for i = 1, 10 do
local btn = _G["QuestInfoItem"..i]
if btn and not btn.dkRewardHooked then
-- keep existing highlight/selection behavior
btn:HookScript("OnClick", function(self)
if DK._selectedReward and DK._selectedReward ~= self then U.RemoveHighlight(DK._selectedReward) end
if DB().rewardTooltipOnSelect then
if DK._rewardTooltipBtn == self then
HideRewardTooltip(self)
else
ShowRewardTooltip(self)
end
end
DK._selectedReward = self
U.ApplyHighlight(self)
end)
btn:HookScript("OnHide", function(self)
if DK._rewardTooltipBtn == self then
HideRewardTooltip(self)
end
end)
btn.dkRewardHooked = true
end
end
end
-- Bind number keys for quest rewards (also bind SHIFT-<digit> + optional NUMPAD keys)
local function BindNumberKeysForRewards()
local owner = DK._bindingOwner
if not owner then return end
local ct = 1
for i = 1, 10 do
local btn = _G["QuestInfoItem"..i]
if btn and btn:IsVisible() then
if ct <= 10 then
local key = (ct < 10) and tostring(ct) or "0"
local click = "CLICK "..btn:GetName()..":LeftButton"
SetOverrideBinding(owner, false, key, click)
SetOverrideBinding(owner, false, "SHIFT-"..key, click)
if DB().allowNumPadKeys then
local nk = (key == "0") and "NUMPAD0" or ("NUMPAD"..key)
SetOverrideBinding(owner, false, nk, click)
SetOverrideBinding(owner, false, "SHIFT-"..nk, click)
end
end
ct = ct + 1
if ct > 10 then break end
end
end
end
-- Exports for Core/GUI
DK.Rewards.RemoveRewardNumberOverlay = RemoveRewardNumberOverlay
DK.Rewards.CreateRewardNumberOverlay = CreateRewardNumberOverlay
DK.NumberRewardButtons = NumberRewardButtons
DK.Rewards.BindNumberKeysForRewards = BindNumberKeysForRewards
DK.Rewards.InitializeRewardHooks = InitializeRewardHooks
DK.Rewards.HideTooltip = HideRewardTooltip