|
|
|
|
-- Not being used due to potential taint
|
|
|
|
|
|
|
|
|
|
local _, addon = ...
|
|
|
|
|
|
|
|
|
|
local function SetSmallFont(object)
|
|
|
|
|
local path, height = GameFontBlackTiny:GetFont();
|
|
|
|
|
object:SetFont(path, 9);
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local function AchievementAlertFrame_SetUp(frame, achievementID, alreadyEarned)
|
|
|
|
|
local _, name, points, completed, month, day, year, description, flags, icon, rewardText, isGuild, wasEarnedByMe, earnedBy = GetAchievementInfo(achievementID);
|
|
|
|
|
frame.id = achievementID;
|
|
|
|
|
|
|
|
|
|
if ( points < 100 ) then
|
|
|
|
|
frame.points:SetFontObject(GameFontNormal);
|
|
|
|
|
else
|
|
|
|
|
frame.points:SetFontObject(GameFontNormalSmall);
|
|
|
|
|
end
|
|
|
|
|
frame.points:SetText(points);
|
|
|
|
|
|
|
|
|
|
if ( points == 0 ) then
|
|
|
|
|
frame.points:Hide();
|
|
|
|
|
frame.Shield:SetTexture([[Interface\AchievementFrame\UI-Achievement-Shields-NoPoints]]);
|
|
|
|
|
else
|
|
|
|
|
frame.points:Show();
|
|
|
|
|
frame.Shield:SetTexture([[Interface\AchievementFrame\UI-Achievement-Shields]]);
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
frame.icon:SetTexture(icon);
|
|
|
|
|
|
|
|
|
|
frame.PlayerAchievementBackground:SetShown(not isGuild);
|
|
|
|
|
frame.GuildAchievementBackground:SetShown(isGuild);
|
|
|
|
|
|
|
|
|
|
if isGuild then
|
|
|
|
|
frame:SetWidth(312);
|
|
|
|
|
frame.Name:SetWidth(170);
|
|
|
|
|
frame.Name:SetText(name);
|
|
|
|
|
frame.NameLong:SetWidth(170);
|
|
|
|
|
frame.NameLong:SetText(name);
|
|
|
|
|
frame.NameLong:SetPoint("CENTER", frame.Name, "CENTER", 0, 0);
|
|
|
|
|
local isLongName = frame.Name:IsTruncated();
|
|
|
|
|
frame.Name:SetShown(not isLongName);
|
|
|
|
|
frame.NameLong:SetShown(isLongName);
|
|
|
|
|
frame.shine = frame.GuildAchievementBackground.Shine;
|
|
|
|
|
frame.glow = frame.GuildAchievementBackground.Glow;
|
|
|
|
|
if not frame.guildDisplay then
|
|
|
|
|
frame.guildDisplay = true;
|
|
|
|
|
frame:SetHeight(98);
|
|
|
|
|
frame.unlockedText:SetText( string.upper(GUILD_ACHIEVEMENT_UNLOCKED) );
|
|
|
|
|
frame.points:SetVertexColor(0, 1, 0);
|
|
|
|
|
frame.Shield:SetTexCoord(0, 0.5, 0.5, 1);
|
|
|
|
|
frame.Shield:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -16, 14);
|
|
|
|
|
frame.guildName:Show();
|
|
|
|
|
frame.GuildBorder:Show();
|
|
|
|
|
frame.GuildBanner:Show();
|
|
|
|
|
frame.icon:SetSize(45, 45);
|
|
|
|
|
frame.decor:Hide();
|
|
|
|
|
end
|
|
|
|
|
frame.guildName:SetText( GetGuildInfo("player") );
|
|
|
|
|
SetSmallGuildTabardTextures("player", nil, frame.GuildBanner, frame.GuildBorder);
|
|
|
|
|
frame.points:SetPoint("CENTER", frame.Shield, "CENTER", -1, 3);
|
|
|
|
|
else
|
|
|
|
|
frame.Name:SetWidth(0);
|
|
|
|
|
frame.Name:SetText(name);
|
|
|
|
|
frame.NameLong:SetText(name);
|
|
|
|
|
frame.Name:Show();
|
|
|
|
|
frame.NameLong:Hide();
|
|
|
|
|
frame.shine = frame.PlayerAchievementBackground.ShineMask;
|
|
|
|
|
frame.glow = frame.PlayerAchievementBackground.Glow;
|
|
|
|
|
frame.PlayerAchievementBackground.Ribbon:SetHeight(24);
|
|
|
|
|
frame.PlayerAchievementBackground.Ribbon:SetPoint("BOTTOM", 0, 21);
|
|
|
|
|
local frameWidth;
|
|
|
|
|
local textWidth = frame.Name:GetWidth();
|
|
|
|
|
local extra = textWidth - 170;
|
|
|
|
|
if extra > 0 then
|
|
|
|
|
if extra > 64 then
|
|
|
|
|
extra = 64;
|
|
|
|
|
frame.Name:Hide();
|
|
|
|
|
frame.NameLong:Show();
|
|
|
|
|
frame.NameLong:SetWidth(170 + extra);
|
|
|
|
|
frame.NameLong:SetPoint("CENTER", frame.Name, "CENTER", 0, -2);
|
|
|
|
|
frame.PlayerAchievementBackground.Ribbon:SetHeight(32);
|
|
|
|
|
frame.PlayerAchievementBackground.Ribbon:SetPoint("BOTTOM", 0, 16);
|
|
|
|
|
end
|
|
|
|
|
frameWidth = 312 + extra;
|
|
|
|
|
else
|
|
|
|
|
frameWidth = 312;
|
|
|
|
|
end
|
|
|
|
|
frame.PlayerAchievementBackground:SetWidth(frameWidth);
|
|
|
|
|
frame.PlayerAchievementBackground.ShineMask.animIn.Translation:SetOffset(frameWidth + 78, 0);
|
|
|
|
|
frame:SetWidth(frameWidth);
|
|
|
|
|
|
|
|
|
|
if frame.guildDisplay then
|
|
|
|
|
frame.guildDisplay = nil;
|
|
|
|
|
frame:SetHeight(78);
|
|
|
|
|
--frame.unlockedText:SetText( string.upper(ACHIEVEMENT_UNLOCKED) );
|
|
|
|
|
frame.points:SetVertexColor(1, 0.82, 0);
|
|
|
|
|
frame.Shield:SetTexCoord(0, 0.5, 0, 0.45);
|
|
|
|
|
frame.Shield:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -14, 14);
|
|
|
|
|
frame.guildName:Hide();
|
|
|
|
|
frame.GuildBorder:Hide();
|
|
|
|
|
frame.GuildBanner:Hide();
|
|
|
|
|
frame.icon:SetSize(52, 52);
|
|
|
|
|
frame.decor:Show();
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local texY;
|
|
|
|
|
if flags == 131072 then
|
|
|
|
|
texY = 0.5;
|
|
|
|
|
else
|
|
|
|
|
texY = 0;
|
|
|
|
|
end
|
|
|
|
|
frame.PlayerAchievementBackground.Ribbon:SetTexCoord(0, 1, texY, texY + 0.3125);
|
|
|
|
|
|
|
|
|
|
frame.unlockedText:SetText( string.upper(ACHIEVEMENT_UNLOCKED) );
|
|
|
|
|
frame.points:SetPoint("CENTER", frame.Shield, "CENTER", 0, 0);
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
SetSmallFont(frame.unlockedText);
|
|
|
|
|
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local function CriteriaAlertFrame_SetUp(frame, achievementID, criteriaString)
|
|
|
|
|
frame.id = achievementID;
|
|
|
|
|
frame.name:SetText(criteriaString);
|
|
|
|
|
frame.unlockedText:SetText( string.upper(ACHIEVEMENT_PROGRESSED) );
|
|
|
|
|
SetSmallFont(frame.unlockedText);
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---- Alert System ----
|
|
|
|
|
local AchievementAlertUtil = {};
|
|
|
|
|
addon.AchievementAlertUtil = AchievementAlertUtil;
|
|
|
|
|
|
|
|
|
|
function AchievementAlertUtil:Enable()
|
|
|
|
|
if not AlertFrame then return end;
|
|
|
|
|
|
|
|
|
|
if not self.achievementAlertSystem then
|
|
|
|
|
self.achievementAlertSystem = AlertFrame:AddQueuedAlertFrameSubSystem("NarciAchievementAlertFrameTemplate", AchievementAlertFrame_SetUp, 2, 6);
|
|
|
|
|
end
|
|
|
|
|
if not self.criteriaAlertSystem then
|
|
|
|
|
self.criteriaAlertSystem = AlertFrame:AddQueuedAlertFrameSubSystem("NarciCriteriaAlertFrameTemplate", CriteriaAlertFrame_SetUp, 2, 0);
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if not self.listener then
|
|
|
|
|
self.listener = CreateFrame("Frame");
|
|
|
|
|
self.listener:SetScript("OnEvent", function(self, event, ...)
|
|
|
|
|
if event == "ACHIEVEMENT_EARNED" then
|
|
|
|
|
self.achievementAlertSystem:AddAlert(...);
|
|
|
|
|
elseif event == "CRITERIA_EARNED" then
|
|
|
|
|
self.criteriaAlertSystem:AddAlert(...);
|
|
|
|
|
end
|
|
|
|
|
end)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
self.listener:RegisterEvent("ACHIEVEMENT_EARNED");
|
|
|
|
|
self.listener:RegisterEvent("CRITERIA_EARNED");
|
|
|
|
|
|
|
|
|
|
AlertFrame:UnregisterEvent("ACHIEVEMENT_EARNED");
|
|
|
|
|
AlertFrame:UnregisterEvent("CRITERIA_EARNED");
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function AchievementAlertUtil:Disable()
|
|
|
|
|
if self.listener then
|
|
|
|
|
self.listener:UnregisterEvent("ACHIEVEMENT_EARNED");
|
|
|
|
|
self.listener:UnregisterEvent("CRITERIA_EARNED");
|
|
|
|
|
AlertFrame:RegisterEvent("ACHIEVEMENT_EARNED");
|
|
|
|
|
AlertFrame:RegisterEvent("CRITERIA_EARNED");
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function AchievementAlertUtil.AlertFrame_OnClick(self, button, down)
|
|
|
|
|
if button == "RightButton" then
|
|
|
|
|
self:StopAnimating();
|
|
|
|
|
self:Hide();
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if not self.id then return end;
|
|
|
|
|
|
|
|
|
|
if Narci_AchievementFrame then
|
|
|
|
|
Narci_AchievementFrame:LocateAchievement(self.id);
|
|
|
|
|
else
|
|
|
|
|
Narci.LoadAchievementPanel(self.id);
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
------------------------------------------------------------------------------------------------------
|
|
|
|
|
--/run NarciAchievementAlertSystem:AddAlert(13699)
|
|
|
|
|
--/run NarciAchievementAlertSystem:AddAlert(15407)
|
|
|
|
|
--/run NarciAchievementAlertSystem:AddAlert(5159)
|
|
|
|
|
--/run NarciAchievementAlertSystem:AddAlert(4958)
|
|
|
|
|
--/run NarciAchievementAlertSystem:AddAlert(11572)
|
|
|
|
|
------------------------------------------------------------------------------------------------------
|