Mercurial > wow > kbf
comparison KBF.lua @ 17:233745d4774b
basic, buggy, temp weapon enchant support. Secure headers are totally screwed with these
author | Chris Mellon <arkanes@gmai.com> |
---|---|
date | Fri, 15 Oct 2010 21:41:55 -0500 |
parents | 87131aeedc3f |
children | 27aa0d9ffe43 |
comparison
equal
deleted
inserted
replaced
16:87131aeedc3f | 17:233745d4774b |
---|---|
17 self.anchor:SetScript("OnUpdate", function() self:OnUpdate() end) | 17 self.anchor:SetScript("OnUpdate", function() self:OnUpdate() end) |
18 self.dirty = true -- force an immediate scan on login | 18 self.dirty = true -- force an immediate scan on login |
19 self:HideBlizzardBuffFrames() | 19 self:HideBlizzardBuffFrames() |
20 end | 20 end |
21 -- naming convention | 21 -- naming convention |
22 -- "frame" is the secure aura button created by the group handler | 22 -- a "frame" is the top-level button (secure button from the header, or one I make myself) |
23 -- "bar" is the set of icon + status bars that we create to show the buff time | 23 -- that will contain the UI information about the buff |
24 | |
25 -- a "bar" is a frame that has the icon, status bar, ect associated with it | |
24 | 26 |
25 function kbf:HideBlizzardBuffFrames() | 27 function kbf:HideBlizzardBuffFrames() |
26 local function HideBlizFrame(frame) | 28 local function HideBlizFrame(frame) |
27 if not frame then return end | 29 if not frame then return end |
28 frame:UnregisterAllEvents() | 30 frame:UnregisterAllEvents() |
54 end | 56 end |
55 -- temporary enchants | 57 -- temporary enchants |
56 -- TODO: The blizz secure aura header binds both temp enchants | 58 -- TODO: The blizz secure aura header binds both temp enchants |
57 -- to the main hand. No support for cancelling weapon enchants | 59 -- to the main hand. No support for cancelling weapon enchants |
58 -- until this gets fixed up | 60 -- until this gets fixed up |
61 local tempEnchant = self.secureFrame:GetAttribute("tempEnchant1") | |
62 if tempEnchant and tempEnchant:IsShown() then | |
63 if self.dirty or true then | |
64 self:BindBarToWeaponEnchant(tempEnchant, 16) | |
65 end | |
66 self:UpdateBarExpirationTime(tempEnchant) | |
67 end | |
68 tempEnchant = self.secureFrame:GetAttribute("tempEnchant2") | |
69 if tempEnchant and tempEnchant:IsShown() then | |
70 if self.dirty or true then | |
71 self:BindBarToWeaponEnchant(tempEnchant, 17) | |
72 end | |
73 self:UpdateBarExpirationTime(tempEnchant) | |
74 end | |
59 | 75 |
60 -- debuffs | 76 -- debuffs |
61 -- Since debuffs aren't cancellable, don't need to use the secure header | 77 -- Since debuffs aren't cancellable, don't need to use the secure header |
62 -- for them. This could be rewritten to support useful features like | 78 -- for them. This could be rewritten to support useful features like |
63 -- sorting & scaling and stuff. Honestly, should at least be alphabetical. | 79 -- sorting & scaling and stuff. Honestly, should at least be alphabetical. |
113 frame.timertext:SetText(self:FormatTimeText(remaining)) | 129 frame.timertext:SetText(self:FormatTimeText(remaining)) |
114 frame.statusbar:SetValue(remaining) | 130 frame.statusbar:SetValue(remaining) |
115 end | 131 end |
116 end | 132 end |
117 | 133 |
134 function kbf:BindBarToWeaponEnchant(parentFrame, slotOverride) | |
135 local index = parentFrame:GetAttribute("index") | |
136 -- allow passing of explicit slot in order to work around aura header bug | |
137 local slot = slotOverride or parentFrame:GetAttribute("target-slot") | |
138 local itemIndex = slot - 15 -- 1MH, 2OF | |
139 local RETURNS_PER_ITEM = 3 | |
140 local hasEnchant, remaining, enchantCharges = select(RETURNS_PER_ITEM * (itemIndex - 1) + 1, GetWeaponEnchantInfo()) | |
141 -- remaining time is in milliseconds | |
142 if not hasEnchant then return end | |
143 local remaining = remaining / 1000 | |
144 if not hasEnchant then return end -- this should never happen | |
145 local icon = GetInventoryItemTexture("player", slot) | |
146 -- this is terrible, but I hate myself and everyone else. | |
147 -- We're going to assume that the duration of the temp enchant | |
148 -- is either 60 minutes, or however long is left, because poisons are 1 hour | |
149 local duration = max((60 * 60), remaining) | |
150 local expirationTime = GetTime() + remaining | |
151 -- TODO | |
152 local name = GetItemInfo(GetInventoryItemID("player", slot)) | |
153 if not parentFrame.icon then | |
154 self:ConstructBar(parentFrame, 1, 0, 1) | |
155 end | |
156 self:SetBarAppearance(parentFrame, name, icon, enchantCharges, duration, expirationTime) | |
157 end | |
158 | |
118 function kbf:BindBarToBuff(parentFrame, unit) | 159 function kbf:BindBarToBuff(parentFrame, unit) |
119 local index = parentFrame:GetAttribute("index") | 160 local index = parentFrame:GetAttribute("index") |
120 local filter = parentFrame:GetAttribute("filter") | 161 local filter = parentFrame:GetAttribute("filter") |
121 local name, rank, icon, stacks, debuffType, duration, expirationTime, | 162 local name, rank, icon, stacks, debuffType, duration, expirationTime, |
122 unitCaster, isStealable, shouldConsolidate, spellId = UnitAura(unit, index, filter) | 163 unitCaster, isStealable, shouldConsolidate, spellId = UnitAura(unit, index, filter) |
146 parentFrame.statusbar:SetMinMaxValues(0,1) | 187 parentFrame.statusbar:SetMinMaxValues(0,1) |
147 parentFrame.statusbar:SetValue(1) | 188 parentFrame.statusbar:SetValue(1) |
148 end | 189 end |
149 end | 190 end |
150 | 191 |
192 -- expects time seconds | |
151 function kbf:FormatTimeText(time) | 193 function kbf:FormatTimeText(time) |
152 if not time or time == 0 then return "" end | 194 if not time or time == 0 then return "" end |
153 local timetext | 195 local timetext |
154 local h = floor(time/3600) | 196 local h = floor(time/3600) |
155 local m = time - (h*3600) | 197 local m = time - (h*3600) |
171 -- this is for the secure buttons, so use the attributes | 213 -- this is for the secure buttons, so use the attributes |
172 -- I'd like a better place to position this but it's funky for right now, handle it later | 214 -- I'd like a better place to position this but it's funky for right now, handle it later |
173 local unit = button.unit or button:GetAttribute("unit") | 215 local unit = button.unit or button:GetAttribute("unit") |
174 local filter = button.filter or button:GetAttribute("filter") | 216 local filter = button.filter or button:GetAttribute("filter") |
175 local index = button:GetAttribute("index") or button.index | 217 local index = button:GetAttribute("index") or button.index |
218 if unit and filter and index then | |
219 GameTooltip:SetOwner(button, "ANCHOR_BOTTOMLEFT"); | |
220 GameTooltip:SetFrameLevel(button:GetFrameLevel() + 2); | |
221 GameTooltip:SetUnitAura(unit, index, filter); | |
222 return | |
223 end | |
224 local slot = button:GetAttribute("target-slot") -- temp enchant | |
176 GameTooltip:SetOwner(button, "ANCHOR_BOTTOMLEFT"); | 225 GameTooltip:SetOwner(button, "ANCHOR_BOTTOMLEFT"); |
177 GameTooltip:SetFrameLevel(button:GetFrameLevel() + 2); | 226 GameTooltip:SetFrameLevel(button:GetFrameLevel() + 2); |
178 GameTooltip:SetUnitAura(unit, index, filter); | 227 GameTooltip:SetInventoryItem("player", slot) |
179 end | 228 end |
180 | 229 |
181 -- creates a icon + statusbar bar | 230 -- creates a icon + statusbar bar |
182 function kbf:ConstructBar(frame, r, g, b) | 231 function kbf:ConstructBar(frame, r, g, b) |
183 local texture = "Interface\\TargetingFrame\\UI-StatusBar" | 232 local texture = "Interface\\TargetingFrame\\UI-StatusBar" |
295 frame:SetAttribute("minHeight", 16) | 344 frame:SetAttribute("minHeight", 16) |
296 frame:SetAttribute("unit", "player") -- TODO: figure out the vehicle swapping stuff | 345 frame:SetAttribute("unit", "player") -- TODO: figure out the vehicle swapping stuff |
297 frame:SetAttribute("sortMethod", "NAME") | 346 frame:SetAttribute("sortMethod", "NAME") |
298 frame:SetAttribute("sortOrder", "-") | 347 frame:SetAttribute("sortOrder", "-") |
299 -- TODO: SecureAuraHeader doesn't correcltly implement the temp enchants | 348 -- TODO: SecureAuraHeader doesn't correcltly implement the temp enchants |
300 --frame:SetAttribute("weaponTemplate", "KBFSecureUnitAuraTemplate") | 349 frame:SetAttribute("weaponTemplate", "KBFSecureUnitAuraTemplate") |
301 --frame:SetAttribute("includeWeapons", 1) | 350 frame:SetAttribute("includeWeapons", 1) |
302 frame:SetPoint("TOP", anchor, "BOTTOM", 0, 0) | 351 frame:SetPoint("TOP", anchor, "BOTTOM", 0, 0) |
303 frame:Show() -- has to be shown, otherwise the child frames don't show | 352 frame:Show() -- has to be shown, otherwise the child frames don't show |
304 self.secureFrame = frame | 353 self.secureFrame = frame |
305 return anchor | 354 return anchor |
306 end | 355 end |