Mercurial > wow > kbf
comparison KBF.lua @ 42:d792f986400f
Add in support for custom display of weapon enchants.
author | Chris Mellon <arkanes@gmail.com> |
---|---|
date | Tue, 18 Jan 2011 22:34:29 -0600 |
parents | 15a0ceebbd83 |
children | 81cade22f2f9 |
comparison
equal
deleted
inserted
replaced
41:15a0ceebbd83 | 42:d792f986400f |
---|---|
107 end | 107 end |
108 buffCount = buffCount+1 | 108 buffCount = buffCount+1 |
109 end | 109 end |
110 | 110 |
111 -- temporary enchants | 111 -- temporary enchants |
112 -- TODO: So much copy/paste here. I really need to clean this up. | |
112 local tempEnchant = self.secureHeader:GetAttribute("tempEnchant1") | 113 local tempEnchant = self.secureHeader:GetAttribute("tempEnchant1") |
113 if tempEnchant and tempEnchant:IsShown() then | 114 if tempEnchant and tempEnchant:IsShown() then |
114 self:BindBarToWeaponEnchant(tempEnchant, 16) | 115 self:BindBarToWeaponEnchant(tempEnchant, 16) |
115 self:UpdateBarExpirationTime(tempEnchant) | 116 self:UpdateBarExpirationTime(tempEnchant) |
116 buffCount = buffCount + 1 | 117 buffCount = buffCount + 1 |
117 end | 118 end |
119 if ( tempEnchant and GameTooltip:IsOwned(tempEnchant) ) then | |
120 self:OnEnter(tempEnchant) | |
121 end | |
118 tempEnchant = self.secureHeader:GetAttribute("tempEnchant2") | 122 tempEnchant = self.secureHeader:GetAttribute("tempEnchant2") |
119 if tempEnchant and tempEnchant:IsShown() then | 123 if tempEnchant and tempEnchant:IsShown() then |
120 self:BindBarToWeaponEnchant(tempEnchant, 17) | 124 self:BindBarToWeaponEnchant(tempEnchant, 17) |
121 self:UpdateBarExpirationTime(tempEnchant) | 125 self:UpdateBarExpirationTime(tempEnchant) |
122 buffCount = buffCount + 1 | 126 buffCount = buffCount + 1 |
125 -- TODO: maybe this should only happen if we're dirty | 129 -- TODO: maybe this should only happen if we're dirty |
126 if not InCombatLockdown() then | 130 if not InCombatLockdown() then |
127 tempEnchant:SetAttribute('target-slot', 17) | 131 tempEnchant:SetAttribute('target-slot', 17) |
128 end | 132 end |
129 end | 133 end |
134 if ( tempEnchant and GameTooltip:IsOwned(tempEnchant) ) then | |
135 self:OnEnter(tempEnchant) | |
136 end | |
130 -- make a fake third buff bar. It can't be used to cancel the buff, but | 137 -- make a fake third buff bar. It can't be used to cancel the buff, but |
131 -- at least you can see it. | 138 -- at least you can see it. |
132 | 139 |
133 local thirdWeaponInfo = select(7, GetWeaponEnchantInfo()) | 140 local thirdWeaponInfo = select(7, GetWeaponEnchantInfo()) |
134 if thirdWeaponInfo then | 141 if thirdWeaponInfo then |
150 self.tempEnchant3:SetPoint("TOP", self.secureHeader, "TOP", 0, (buffCount * -16)) | 157 self.tempEnchant3:SetPoint("TOP", self.secureHeader, "TOP", 0, (buffCount * -16)) |
151 self:BindBarToWeaponEnchant(tempEnchant, 18) | 158 self:BindBarToWeaponEnchant(tempEnchant, 18) |
152 self:UpdateBarExpirationTime(tempEnchant) | 159 self:UpdateBarExpirationTime(tempEnchant) |
153 buffCount = buffCount + 1 | 160 buffCount = buffCount + 1 |
154 end | 161 end |
155 | 162 if ( tempEnchant and GameTooltip:IsOwned(tempEnchant) ) then |
163 self:OnEnter(tempEnchant) | |
164 end | |
156 -- debuffs | 165 -- debuffs |
157 -- Since debuffs aren't cancellable, don't need to use the secure header | 166 -- Since debuffs aren't cancellable, don't need to use the secure header |
158 -- for them. This could be rewritten to support useful features like | 167 -- for them. This could be rewritten to support useful features like |
159 -- sorting & scaling and stuff. Honestly, should at least be alphabetical. | 168 -- sorting & scaling and stuff. Honestly, should at least be alphabetical. |
160 for idx=1,99 do | 169 for idx=1,99 do |
210 frame.timertext:SetText(self:FormatTimeText(remaining)) | 219 frame.timertext:SetText(self:FormatTimeText(remaining)) |
211 frame.statusbar:SetValue(remaining) | 220 frame.statusbar:SetValue(remaining) |
212 end | 221 end |
213 end | 222 end |
214 | 223 |
224 local gratt = LibStub:GetLibrary("LibGratuity-3.0") | |
225 | |
215 function kbf:BindBarToWeaponEnchant(parentFrame, slotOverride) | 226 function kbf:BindBarToWeaponEnchant(parentFrame, slotOverride) |
216 -- allow passing of explicit slot in order to work around aura header bug | 227 -- allow passing of explicit slot in order to work around aura header bug |
217 local slot = slotOverride or parentFrame:GetAttribute("target-slot") | 228 local slot = slotOverride or parentFrame:GetAttribute("target-slot") |
218 local itemIndex = slot - 15 -- 1MH, 2OF | 229 local itemIndex = slot - 15 -- 1MH, 2OF |
219 local RETURNS_PER_ITEM = 3 | 230 local RETURNS_PER_ITEM = 3 |
220 local hasEnchant, remaining, enchantCharges = select(RETURNS_PER_ITEM * (itemIndex - 1) + 1, GetWeaponEnchantInfo()) | 231 local hasEnchant, remaining, enchantCharges = select(RETURNS_PER_ITEM * (itemIndex - 1) + 1, GetWeaponEnchantInfo()) |
221 -- remaining time is in milliseconds | 232 -- remaining time is in milliseconds |
222 if not hasEnchant then return end -- this should never happen | 233 if not hasEnchant then return end -- this should never happen |
223 local remaining = remaining / 1000 | 234 local remaining = remaining / 1000 |
235 | |
224 local icon = GetInventoryItemTexture("player", slot) | 236 local icon = GetInventoryItemTexture("player", slot) |
225 -- this is terrible, but I hate myself and everyone else. | 237 local maxDuration |
226 -- We're going to assume that the duration of the temp enchant | 238 if select(2, UnitClass("player")) == "ROGUE" then |
227 -- is either 60 minutes, or however long is left, because poisons are 1 hour | 239 -- Rogues are probably using poisons, which are an hour |
228 local duration = max((60 * 60), remaining) | 240 maxDuration = 60 * 60 |
241 else | |
242 -- everyone else is probably using something thats a half hour | |
243 maxDuration = 30 * 60 | |
244 end | |
245 local duration = max(maxDuration, remaining) | |
229 local expirationTime = GetTime() + remaining | 246 local expirationTime = GetTime() + remaining |
230 -- TODO | |
231 local name = GetItemInfo(GetInventoryItemID("player", slot)) | 247 local name = GetItemInfo(GetInventoryItemID("player", slot)) |
248 -- try to figure out what the weapon enchant is | |
249 -- tooltip string -> {spellid, duration} | |
250 local knownEnchants = { | |
251 ["Flametongue"] = {8024, 30*60}, | |
252 ["Frostbrand"] = {8033, 30*60}, | |
253 | |
254 } | |
255 local spellId = nil | |
256 if gratt then | |
257 gratt:SetInventoryItem("player", slot) | |
258 for tag, info in pairs(knownEnchants) do | |
259 if gratt:Find(tag) then | |
260 spellId, duration = unpack(info) | |
261 -- TODO: Maybe want to leave it as the weapon icon? | |
262 -- I don't think theres enough room to add both the name of the weapon & the buff in there | |
263 -- maybe use the tag? | |
264 -- Or maybe use the slot name, ie Flametongue / Main Hand | |
265 name, _, _ = GetSpellInfo(spellId) | |
266 break | |
267 end | |
268 end | |
269 end | |
270 parentFrame.spellId = spellId | |
232 if not parentFrame.icon then | 271 if not parentFrame.icon then |
233 self:ConstructBar(parentFrame, 1, 0, 1) | 272 self:ConstructBar(parentFrame, 1, 0, 1) |
234 end | 273 end |
235 self:SetBarAppearance(parentFrame, name, icon, enchantCharges, duration, expirationTime) | 274 self:SetBarAppearance(parentFrame, name, icon, enchantCharges, duration, expirationTime) |
236 end | 275 end |
299 GameTooltip:SetFrameLevel(button:GetFrameLevel() + 2); | 338 GameTooltip:SetFrameLevel(button:GetFrameLevel() + 2); |
300 GameTooltip:SetUnitAura(unit, index, filter); | 339 GameTooltip:SetUnitAura(unit, index, filter); |
301 return | 340 return |
302 end | 341 end |
303 local slot = button:GetAttribute("target-slot") -- temp enchant | 342 local slot = button:GetAttribute("target-slot") -- temp enchant |
304 GameTooltip:SetOwner(button, "ANCHOR_BOTTOMLEFT"); | 343 if slot then |
305 GameTooltip:SetFrameLevel(button:GetFrameLevel() + 2); | 344 GameTooltip:SetOwner(button, "ANCHOR_BOTTOMLEFT"); |
306 GameTooltip:SetInventoryItem(unit, slot) | 345 GameTooltip:SetFrameLevel(button:GetFrameLevel() + 2); |
346 if button.spellId then | |
347 -- TODO: This might be too big of a tooltip to care about that much. | |
348 -- Maybe I should just have a single line with the weapon name | |
349 --GameTooltip:SetInventoryItem(unit, slot) | |
350 local name = GetItemInfo(GetInventoryItemID("player", slot)) | |
351 local r, g, b = GetItemQualityColor(GetInventoryItemQuality("player", slot)) | |
352 GameTooltip:SetText(name, r, g, b) | |
353 GameTooltip:AddLine(" ") | |
354 GameTooltip:AddSpellByID(button.spellId) | |
355 else | |
356 GameTooltip:SetInventoryItem(unit, slot) | |
357 end | |
358 end | |
307 end | 359 end |
308 | 360 |
309 -- creates a icon + statusbar bar | 361 -- creates a icon + statusbar bar |
310 function kbf:ConstructBar(frame, r, g, b) | 362 function kbf:ConstructBar(frame, r, g, b) |
311 local texture = "Interface\\TargetingFrame\\UI-StatusBar" | 363 local texture = "Interface\\TargetingFrame\\UI-StatusBar" |