You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
195 lines
6.7 KiB
195 lines
6.7 KiB
local GetItemSpell = GetItemSpell;
|
|
local GetSpellInfo = GetSpellInfo;
|
|
local GetSpellBaseCooldown = GetSpellBaseCooldown;
|
|
|
|
|
|
local SpellSetupFuncs = {};
|
|
|
|
local function Setup_RubyWhelpShell(tooltip)
|
|
--Show whelp training progress
|
|
local info, value;
|
|
local anyPadding = false;
|
|
|
|
for i = 2148, 2153 do
|
|
info = C_CurrencyInfo.GetCurrencyInfo(i);
|
|
if info then
|
|
value = info.quantity;
|
|
if value and value > 0 then
|
|
if anyPadding then
|
|
tooltip:AddDoubleLine(info.name, value, 1, 0.82, 0);
|
|
else
|
|
anyPadding = true;
|
|
tooltip:AddDoubleLine(info.name, value, 1, 0.82, 0, -12);
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
SpellSetupFuncs[389843] = Setup_RubyWhelpShell;
|
|
|
|
|
|
local function Setup_FindItemAura(spellIDs, tooltip, spellFrame)
|
|
local GetInfo = C_UnitAuras.GetPlayerAuraBySpellID;
|
|
local auraInfo, auraInstanceID;
|
|
|
|
for _, id in ipairs(spellIDs) do
|
|
auraInfo = GetInfo(id);
|
|
if auraInfo then
|
|
spellFrame.Icon:SetTexture(auraInfo.icon);
|
|
auraInstanceID = auraInfo.auraInstanceID;
|
|
tooltip:AddLine(auraInfo.name, 1, 1, 1, -12);
|
|
break
|
|
end
|
|
end
|
|
|
|
if auraInstanceID then
|
|
local info = C_TooltipInfo.GetUnitBuffByAuraInstanceID("player", auraInstanceID);
|
|
if info and info.lines and info.lines[2] and info.lines[2].leftText then
|
|
tooltip:AddLine(info.lines[2].leftText, 1, 0.82, 0);
|
|
end
|
|
end
|
|
end
|
|
|
|
local function Setup_PrimalRitualShell(tooltip, spellFrame)
|
|
local spellIDs = {390835, 390655, 390899, 390869}; --Fire (Damage), Stone (Aborb), Wind (Mastery), Sea (Heal)
|
|
Setup_FindItemAura(spellIDs, tooltip, spellFrame);
|
|
end
|
|
|
|
SpellSetupFuncs[390643] = Setup_PrimalRitualShell;
|
|
|
|
|
|
local function Setup_OminousChromaticEssence(tooltip, spellFrame)
|
|
local spellIDs = {402221, 401516, 401518, 401519, 401521}; --Fire (Damage), Stone (Aborb), Wind (Mastery), Sea (Heal)
|
|
Setup_FindItemAura(spellIDs, tooltip, spellFrame);
|
|
end
|
|
|
|
SpellSetupFuncs[401515] = Setup_OminousChromaticEssence;
|
|
|
|
|
|
NarciEquipmentSpellFrameMixin = {};
|
|
|
|
function NarciEquipmentSpellFrameMixin:SetFrameWidth(width)
|
|
self:SetWidth(width);
|
|
self.SpellEffect:SetWidth(width);
|
|
self.SpellName:SetWidth(width - 34);
|
|
end
|
|
|
|
|
|
function NarciEquipmentSpellFrameMixin:SetSpellEffect(link, effectText, isActive, cooldownText)
|
|
local spellName, spellID = GetItemSpell(link);
|
|
|
|
self.spellID = spellID;
|
|
self:SetSpellInactive(not isActive and ITEM_LEGACY_INACTIVE_EFFECTS);
|
|
|
|
if spellID then
|
|
if not spellName then
|
|
self:GetParent():QueryData();
|
|
return
|
|
end
|
|
local _, _, icon, _, minRange, maxRange = GetSpellInfo(spellID);
|
|
local cd = GetSpellBaseCooldown(spellID);
|
|
self.Icon:SetTexture(icon);
|
|
self.SpellName:SetText(spellName);
|
|
if cd and cd > 0 then
|
|
self.SpellCooldown:SetText( SecondsToTime(cd / 1000) );
|
|
self.CooldownIcon:Show();
|
|
elseif cooldownText then
|
|
self.SpellCooldown:SetText(cooldownText);
|
|
self.CooldownIcon:Show();
|
|
else
|
|
self.SpellCooldown:SetText(nil);
|
|
self.CooldownIcon:Hide();
|
|
end
|
|
if maxRange and maxRange > 0 then
|
|
maxRange = (maxRange <= 5 and MELEE_RANGE) or string.format(SPELL_RANGE, maxRange);
|
|
else
|
|
maxRange = " ";
|
|
end
|
|
self.SpellRange:SetText(maxRange);
|
|
self.SpellEffect:SetText(effectText);
|
|
elseif effectText then
|
|
--it seems impossible to obatin the spellID from item if that one is a legacy item
|
|
self.spellID = 0;
|
|
self.SpellName:SetText(self:GetParent().itemName);
|
|
self.Icon:SetTexture(self:GetParent().itemIcon);
|
|
self.SpellRange:SetText(" ");
|
|
self.SpellEffect:SetText(effectText);
|
|
if cooldownText then
|
|
self.SpellCooldown:SetText(cooldownText);
|
|
self.CooldownIcon:Show();
|
|
else
|
|
self.SpellCooldown:SetText(nil);
|
|
self.CooldownIcon:Hide();
|
|
end
|
|
else
|
|
self:Hide();
|
|
return
|
|
end
|
|
|
|
local frameHeight = self:GetTop() - (self.SpellEffect:GetBottom() or 0) + (self.bottomPadding or 0);
|
|
local frameWidth = math.max(34 + self.SpellName:GetWrappedWidth(), self.SpellEffect:GetWrappedWidth());
|
|
|
|
local tooltip = self:GetParent();
|
|
|
|
tooltip:EvaluateMaxWidth(frameWidth);
|
|
self:SetHeight(frameHeight);
|
|
self:Show();
|
|
tooltip:InsertFrame(self);
|
|
|
|
if spellID and SpellSetupFuncs[spellID] then
|
|
SpellSetupFuncs[spellID](tooltip, self);
|
|
end
|
|
end
|
|
|
|
function NarciEquipmentSpellFrameMixin:Clear()
|
|
if self.spellID then
|
|
self:Hide();
|
|
self.Icon:SetTexture(nil);
|
|
self.SpellName:SetText(nil);
|
|
self.SpellCooldown:SetText(nil);
|
|
self.SpellRange:SetText(nil);
|
|
self.SpellEffect:SetText(nil);
|
|
self.spellID = nil;
|
|
end
|
|
end
|
|
|
|
function NarciEquipmentSpellFrameMixin:SetCooldownTextColor(r, g, b)
|
|
self.CooldownIcon:SetVertexColor(r, g, b);
|
|
self.SpellCooldown:SetTextColor(r, g, b);
|
|
self.SpellName:SetTextColor(r, g, b);
|
|
end
|
|
|
|
function NarciEquipmentSpellFrameMixin:SetSpellInactive(requirementText)
|
|
if requirementText then
|
|
if self.isActive then
|
|
self.isActive = nil;
|
|
self.Icon:ClearAllPoints();
|
|
self.Icon:SetPoint("LEFT", self, "LEFT", 1, 0);
|
|
self.Icon:SetPoint("TOP", self.InactiveAlert, "BOTTOM", 0, -5);
|
|
self.SpellName:ClearAllPoints();
|
|
self.SpellName:SetPoint("TOPLEFT", self.Icon, "TOPLEFT", 31, -1);
|
|
self:SetCooldownTextColor(0.5, 0.5, 0.5);
|
|
self.SpellEffect:SetTextColor(0.5, 0.5, 0.5);
|
|
self.Icon:SetDesaturation(1);
|
|
self.InactiveAlert:Show();
|
|
self.RedBackground:Show();
|
|
self.bottomPadding = 6;
|
|
end
|
|
self.InactiveAlert:SetText(requirementText);
|
|
else
|
|
if not self.isActive then
|
|
self.isActive = true;
|
|
self.Icon:ClearAllPoints();
|
|
self.Icon:SetPoint("TOPLEFT", self, "TOPLEFT", 1, -1);
|
|
self.SpellName:ClearAllPoints();
|
|
self.SpellName:SetPoint("TOPLEFT", self, "TOPLEFT", 32, 0);
|
|
self:SetCooldownTextColor(0.8863, 0.8863, 0.8863);
|
|
self.SpellEffect:SetTextColor(1, 0.82, 0);
|
|
self.Icon:SetDesaturation(0);
|
|
self.InactiveAlert:Hide();
|
|
self.RedBackground:Hide();
|
|
self.bottomPadding = 0;
|
|
end
|
|
self.InactiveAlert:SetText(nil);
|
|
end
|
|
end
|