1 QuestHelper_File
["objtips.lua"] = "Development Version"
2 QuestHelper_Loadtime
["objtips.lua"] = GetTime()
4 local real_GameTooltipOnShow
= GameTooltip
:GetScript("OnShow") or QuestHelper
.nop
6 local function addObjectiveObjTip(tooltip
, objective
, depth
, already_touched
)
7 if depth
> 10 then return end -- fuck that, man. Just fuck that.
8 already_touched
[objective
] = true -- YOU CANNOT EAT A PURSE
10 if objective
.watched
or objective
.progress
then
13 if objective
.quest
then
14 tooltip
:AddLine((" "):rep(depth2
)..QHFormat("TOOLTIP_QUEST", string.match(objective
.quest
.obj
or "", "^%d*/%d*/(.*)$") or "???"), 1, 1, 1)
19 if objective
.progress
then
20 QuestHelper
:AppendObjectiveProgressToTooltip(objective
, tooltip
, nil, depth2
)
22 tooltip
:AddLine((" "):rep(depth2
)..QHText("TOOLTIP_WATCHED"), unpack(QuestHelper
:GetColourTheme().tooltip
))
25 -- Calling Show again to cause the tooltip's dimensions to be recalculated.
26 -- Since the frame should already be shown, the OnShow event shouldn't be called again.
30 if objective
.used
then
31 for obj
, text
in pairs(objective
.used
) do
32 if not already_touched
[obj
] then -- no infinite loops please
33 tooltip
:AddLine((" "):rep(depth
)..QHFormat(text
, obj
.obj
), 1, 1, 1)
34 addObjectiveObjTip(tooltip
, obj
, depth
+1, already_touched
)
39 already_touched
[objective
] = nil -- oh why not. just so I can get a screenshot of some poor sap getting a 2^n case
42 local function addObjectiveTip(tooltip
, cat
, obj
)
43 local list
= QuestHelper
.objective_objects
[cat
]
45 local objective
= list
[obj
]
47 addObjectiveObjTip(tooltip
, objective
, 0, {})
52 local function CopyOver(to
, from
)
53 to
:SetFont(from
:GetFont())
54 to
:SetFontObject(from
:GetFontObject())
55 to
:SetText(from
:GetText())
56 to
:SetTextColor(from
:GetTextColor())
57 to
:SetSpacing(from
:GetSpacing())
58 to
:SetShadowOffset(from
:GetShadowOffset())
59 to
:SetShadowColor(from
:GetShadowColor())
63 local function StripBlizzQHTooltipClone(ttp
)
64 if not UnitExists("mouseover") then return end
71 while _G
["GameTooltipTextLeft" .. line
] and _G
["GameTooltipTextLeft" .. line
]:IsShown() do
72 local r
, g
, b
, a
= _G
["GameTooltipTextLeft" .. line
]:GetTextColor()
73 r
, g
, b
, a
= math
.floor(r
* 255 + 0.5), math
.floor(g
* 255 + 0.5), math
.floor(b
* 255 + 0.5), math
.floor(a
* 255 + 0.5)
75 if r
== 255 and g
== 210 and b
== 0 and a
== 255 then
76 --_G["GameTooltipTextLeft" .. line]:SetText("hellos")
80 CopyOver(_G
["GameTooltipTextLeft" .. wpos
], _G
["GameTooltipTextLeft" .. line
])
81 CopyOver(_G
["GameTooltipTextRight" .. wpos
], _G
["GameTooltipTextRight" .. line
])
92 if line
~= wpos
then for ts
= wpos
, line
- 1 do
93 QuestHelper
: Assert(ts
> 1)
95 local tt
= _G
["GameTooltipTextLeft" .. ts
]
96 local ttr
= _G
["GameTooltipTextRight" .. ts
]
97 local ptt
= _G
["GameTooltipTextLeft" .. (ts
- 1)]
99 -- this . . . this is awful!
103 tt
:SetPoint("TOPLEFT", ptt
, "BOTTOMLEFT", 0, 0)
113 GameTooltip
:SetScript("OnShow", function(self
, ...)
115 -- Some other AddOns hook this function, but don't bother to pass the values they were called with.
119 if QH_filter_hints
then
120 StripBlizzQHTooltipClone(self
)
123 if QuestHelper
and QuestHelper_Pref
.tooltip
then
124 -- Apparantly, sometimes InventoryOnPar invokes our tooltip function with something that doesn't have GetItem method.
125 local monster
, item
= self
.GetUnit
and self
:GetUnit(), self
.GetItem
and self
:GetItem()
128 addObjectiveTip(self
, "monster", monster
)
132 addObjectiveTip(self
, "item", item
)
136 return real_GameTooltipOnShow(self
, ...)