WoWInterface SVN UrbanAchiever

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /trunk
    from Rev 68 to Rev 69
    Reverse comparison

Rev 68 → Rev 69

Main.lua
7,7 → 7,7
BINDING_HEADER_URBANACHIEVER = "Urban Achiever"
BINDING_NAME_URBANACHIEVER_TOGGLE = "Toggle Achievement Frame"
 
local MAX_ACHIEVEMENTS = 3000
local MAX_ACHIEVEMENTS = 3400
local menuTypes= {"PLAYER", "PARTY", "RAID_PLAYER"}
local playerFaction = UnitFactionGroup("player") == "Alliance" and 1 or 2
 
222,7 → 222,7
--self:PopulateAchievements("achievements")
--self:PopulateAchievements("statistics")
 
self:CreateTracker()
--self:CreateTracker()
self:SetupFrames()
 
UrbanAchiever:CreateOptions()
241,7 → 241,7
end)
self:RegisterEvent("CRITERIA_UPDATE", function()
self:RefreshCriteriaButtons()
self:TrackerUpdate()
--self:TrackerUpdate()
end)
 
self:RegisterEvent("INSPECT_ACHIEVEMENT_READY", function()
254,18 → 254,13
 
--I loooooove that this event gets called for any achievement, not just when you're tracking it.
self:RegisterEvent("TRACKED_ACHIEVEMENT_UPDATE", function(event, ...)
local id, _,elapsed, duration = ...
if duration then
if UASVPC.trackTimed then self:AddTracker(id) end
if self.timers[id] and GetTime() - self.timers[id].start >= self.timers[id].duration then
--Timer has expired, wipe it.
self.timers[id] = nil
else
--No timer, or timer hasn't expired, refresh it
self.timers[id] = {["start"] = GetTime() - elapsed, ["duration"] = duration}
end
local id, criteriaID, elapsed, duration = ...
if not elapsed or not duration or not UASVPC.trackTimed then return end
if elapsed < duration then
AddTrackedAchievement(id)
elseif IsTrackedAchievement(id) and elapsed >= duration then
RemoveTrackedAchievement(id)
end
self:TrackerUpdate()
end)
 
--Use a different button so InspectAchievements() doesnt get called. Easier hooking.
287,6 → 282,7
 
self:HookAlertFrames()
self:HookMicroMenu()
self:HookWatchFrame()
 
--self:Hook("AchievementAlertFrame_OnClick")
self:SecureHook("UnitPopup_ShowMenu")
327,19 → 323,19
AchievementFrame_LoadUI()
end
 
CreateFrame("Frame", "AchievementAlertFrame1", UIParent, "AchievementAlertFrameTemplate")
CreateFrame("Button", "AchievementAlertFrame1", UIParent, "AchievementAlertFrameTemplate")
AchievementAlertFrame1:SetPoint("BOTTOM", UIParent, "BOTTOM", 0, 128)
CreateFrame("Frame", "AchievementAlertFrame2", UIParent, "AchievementAlertFrameTemplate")
CreateFrame("Button", "AchievementAlertFrame2", UIParent, "AchievementAlertFrameTemplate")
AchievementAlertFrame2:SetPoint("BOTTOM", AchievementAlertFrame1, "TOP", 0, -10)
 
AchievementAlertFrame1Button:SetScript("OnClick", function(button)
AchievementAlertFrame1:SetScript("OnClick", function(button)
local id = button:GetParent().id
self.frame:Show()
self:SetDisplayAchievement(id)
self:SetCategory(id)
end)
 
AchievementAlertFrame2Button:SetScript("OnClick", function(button)
AchievementAlertFrame2:SetScript("OnClick", function(button)
local id = button:GetParent().id
self.frame:Show()
self:SetDisplayAchievement(id)
357,6 → 353,31
GameTooltip_AddNewbieTip(frame, frame.tooltipText, 1.0, 1.0, 1.0, NEWBIE_TOOLTIP_ACHIEVEMENT);
end)
end
 
function self:HookWatchFrame()
local oldWatchFrameLinkButtonTemplate_OnLeftClick = WatchFrameLinkButtonTemplate_OnLeftClick
 
WatchFrameLinkButtonTemplate_OnLeftClick = function(this)
CloseDropDownMenus()
if ( this.type == "QUEST" ) then
if IsModifiedClick("ALT") then
RemoveQuestWatch(this.index)
WatchFrame_Update()
else
QuestLog_OpenToQuestIndex(this.index)
end
elseif ( this.type == "ACHIEVEMENT" ) then
if IsModifiedClick("ALT") then
RemoveTrackedAchievement(this.index)
else
if not self.frame:IsShown() then
self.frame:Show()
end
self:SetDisplayAchievement(this.index, true)
end
end
end
end
-------------------------------------------------------------
--Utilities
-------------------------------------------------------------
913,8 → 934,11
button.offset:SetHeight(16)
 
button.text = button:CreateFontString("$parentText", "BORDER", "GameFontNormal")
button.text:SetJustifyH("LEFT")
button.text:SetFont(GameFontNormal:GetFont(), 12)
button.text:SetPoint("LEFT", button.offset, "RIGHT", 7, 0)
button.text:SetPoint("RIGHT")
--button.text:SetWidth(150)
--button.text:SetTextColor(1,1,1)
 
button.bg = button:CreateTexture(nil, "BACKGROUND")
1073,7 → 1097,11
if ChatFrameEditBox:IsVisible() and IsModifiedClick("CHATLINK") then
self:InsertIntoChat(id)
elseif IsShiftKeyDown() then
self:ToggleTracker(id)
if IsTrackedAchievement(id) then
RemoveTrackedAchievement(id)
else
AddTrackedAchievement(id)
end
self:RefreshAchievementButtons(false)
else
self.currentAch = id
1284,7 → 1312,7
self:RefreshCategoryButtons()
self:RefreshAchievementButtons(false)
self:ComparisonUpdate()
self:TrackerUpdate()
--self:TrackerUpdate()
self.pointsText:SetText(GetTotalAchievementPoints())
end
 
1398,7 → 1426,7
-- self.frame.achButtons[button].background:SetTexture("Interface\\AchievementFrame\\UI-Achievement-Parchment-Horizontal")
end
 
if self:IsTracking(id) then
if IsTrackedAchievement(id) then
self.frame.achButtons[button].expand:SetTextColor(0,1,0)
self.frame.achButtons[button].expand:SetText("T")
self.frame.achButtons[button].expand:Show()
1440,7 → 1468,7
self.frame.achButtons[button]:Show()
end
 
function self:SetDisplayAchievement(id)
function self:SetDisplayAchievement(id, forceCat)
if id == nil then id = self.currentAch end
if not self.masterList[id] then return end
 
1449,7 → 1477,7
--Update the category list
--On second thought, I dont want it doing this.
--On third thought, I only want to do it if we're coming from the summary frame.
if self.currentCat == -1 then
if self.currentCat == -1 or forceCat then
self:SetCategory(self.currentAch)
end
 
1903,287 → 1931,3
ClearAchievementComparisonUnit()
SetAchievementComparisonUnit(unit)
end
 
-------------------------------------------------------------
--Tracking Stuff
-------------------------------------------------------------
function self:CreateTracker()
if self.tracker then
self.tracker.header:Show()
return
end
 
if not UASVPC.tracker.list then UASVPC.tracker.list = {} end
 
self.tracker = CreateFrame("Frame", "UrbanAchieverTrackerFrame", UIParent)
self.tracker:SetMovable(true)
self.tracker:SetClampedToScreen(true)
self.tracker:SetWidth(200)
self.tracker:SetHeight(200)
self.tracker:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", UASVPC.tracker.x, UASVPC.tracker.y)
 
--Create Tracker Header/Drag Frame
self.tracker.header = CreateFrame("Button", "UrbanAchieverTrackerFrame", self.tracker)
self.tracker.header:SetBackdrop({
bgFile = "Interface\\Tooltips\\UI-Tooltip-Background",
edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", tile = true, tileSize = 16, edgeSize = 16,
insets = {left = 5, right = 5, top = 5, bottom = 5}
})
self.tracker.header:SetBackdropColor(0,0,0)
self.tracker.header:SetWidth(200)
self.tracker.header:SetHeight(25)
self.tracker.header:SetClampedToScreen(true)
self.tracker.header:EnableMouse(true)
self.tracker.header:SetPoint("BOTTOM", self.tracker, "TOP")
self.tracker.header:SetScript("OnMouseDown",function()
if ( arg1 == "LeftButton" ) then
self.tracker:StartMoving()
end
end)
self.tracker.header:SetScript("OnMouseUp",function()
self.tracker:StopMovingOrSizing()
if ( arg1 == "RightButton" ) then
self.tracker.header:Hide()
end
UASVPC.tracker.x = self.tracker:GetLeft()
UASVPC.tracker.y = self.tracker:GetTop()
end)
self.tracker.header:SetScript("OnEnter", function()
GameTooltip:SetOwner(self.tracker.header, "ANCHOR_TOPLEFT")
GameTooltip:SetText("|cff00ff00Drag|r to move")
GameTooltip:AddLine("|cff00ff00Right-click|r to hide")
GameTooltip:Show()
end)
 
self.tracker.header:SetScript("OnLeave", function()
GameTooltip:Hide()
end)
 
local text = self.tracker.header:CreateFontString(nil, "OVERLAY", "GameFontNormal")
text:SetPoint("CENTER")
text:SetText("UrbanAchiever Tracker")
 
self.tracker.header:Hide()
 
self.tracker.achievements = {}
self.tracker.achievements[1] = self:CreateTrackerAchievementFrame("$parentAchievement1", self.tracker)
self.tracker.achievements[1]:SetPoint("TOPLEFT")
for i=2, 5 do
self.tracker.achievements[i] = self:CreateTrackerAchievementFrame("$parentAchievement" .. i, self.tracker)
self.tracker.achievements[i]:SetPoint("TOPLEFT", self.tracker.achievements[i-1], "BOTTOMLEFT")
end
 
for i=1, 5 do
self.tracker.achievements[i]:SetID(UASVPC.tracker.list[i] or 0)
end
 
self.tracker:SetScript("OnUpdate", function() self:TrackerOnUpdate() end)
self:ScaleTracker()
end
 
function self:CreateTrackerAchievementFrame(name, parent)
local frame = CreateFrame("Button", name, parent)
frame:EnableMouse(true)
frame:SetPoint("TOPLEFT")
frame:SetPoint("TOPRIGHT")
frame:SetHeight(20)
frame:SetScript("OnClick", function()
if arg1 == "LeftButton" then
if IsAltKeyDown() then
self:SubTracker(frame:GetID())
end
end
end)
 
frame.icon = frame:CreateTexture("$parentIcon", "ARTWORK")
frame.icon:SetWidth(16)
frame.icon:SetHeight(16)
frame.icon:SetPoint("TOPLEFT")
 
frame.name = frame:CreateFontString("$parentName", "BORDER", "GameFontNormal")
frame.name:SetTextColor(1,1,1)
frame.name:SetPoint("TOPLEFT", frame.icon, "TOPRIGHT")
frame.name:SetPoint("TOPRIGHT")
frame.name:SetJustifyH("LEFT")
 
local click = CreateFrame("Button", nil, frame)
click:SetHighlightTexture("Interface\\FriendsFrame\\UI-FriendsFrame-HighlightBar", "ADD")
click:SetPoint("TOPLEFT", frame.icon)
click:SetPoint("BOTTOMRIGHT", frame.name)
click:SetScript("OnClick", function()
if arg1 == "LeftButton" then
if IsAltKeyDown() then
self:SubTracker(frame:GetID())
else
local id = frame:GetID()
self.frame:Show()
self:SetDisplayAchievement(id)
self:SetCategory(id)
end
end
end)
 
frame.bar = CreateFrame("StatusBar", "$parentBar", frame, "AchievementProgressBarTemplate")
--frame.bar.text:SetFontObject("GameFontHighlight")
frame.bar.text:SetWidth(150)
frame.bar:SetWidth(150)
frame.bar:SetPoint("TOPLEFT", frame.icon, "BOTTOMLEFT", 15, -2)
 
frame.criteria = frame:CreateFontString("$parentCriteria", "BORDER", "GameFontNormal")
frame.criteria:SetTextColor(0.5,0.5,0.5)
frame.criteria:SetPoint("TOPLEFT", frame.bar, "BOTTOMLEFT", -14,0)
frame.criteria:SetWidth(200)
frame.criteria:SetJustifyH("LEFT")
frame.criteria:SetJustifyV("TOP")frame.bar:Hide()
 
frame:Hide()
 
return frame
end
 
function self:SetTrackerAchievement(num, id)
self.tracker.achievements[num]:SetID(id)
UASVPC.tracker.list[num] = id
 
if not self.masterList[id] then
self.tracker.achievements[num]:Hide()
return
end
 
local height = 20
local id, name, _,completed, _,_,_,_,_,icon = GetAchievementInfo(id)
 
--If the achievement is completed, color it green.
if completed then
name = "|Cff00ff00" .. name
end
self.tracker.achievements[num].icon:SetTexture(icon)
self.tracker.achievements[num].name:SetText(name)
self.tracker.achievements[num].bar:Hide()
self.tracker.achievements[num].bar:SetHeight(1)
 
--Now the criteria
local str = ""
if self.isAchList[GetAchievementCategory(id)] then
self.tracker.achievements[num].icon:Show()
for i=1, GetAchievementNumCriteria(id) do
cName, _,cCompleted, cQuantity, cReqQuantity, _,cFlags, _,cQuantityStr = GetAchievementCriteriaInfo(id, i)
 
if (not cCompleted) or (cQuantity < cReqQuantity) then
if (bit.band(cFlags, ACHIEVEMENT_CRITERIA_PROGRESS_BAR) == ACHIEVEMENT_CRITERIA_PROGRESS_BAR) then
self.tracker.achievements[num].bar:Show()
self.tracker.achievements[num].bar:SetHeight(14)
self.tracker.achievements[num].bar:SetMinMaxValues(0, cReqQuantity)
self.tracker.achievements[num].bar:SetValue(cQuantity)
local cQ, cRQ = cQuantity, cReqQuantity
if cQuantityStr:find("|T") then
cQ, cRQ = self:FormatMoney(cQuantity, cReqQuantity)
end
self.tracker.achievements[num].bar.text:SetText(cQ .. " / " .. cRQ)
height = height + 20
else
if UASVPC.specificCriteria and cReqQuantity > 1 then
cName = string.format("%s (%d/%d)", cName, cQuantity, cReqQuantity)
end
str = str .. " - " .. cName .. "\n"
end
end
end
if self.timers[id] then --There's an active timer for this achievement, display it
local timer = self.timers[id]
local timeLeft = math.floor(timer.start + timer.duration - GetTime())
str = str .. " - " .. SecondsToTime(timeLeft) .. "\n"
end
 
else --Its a Statistic, display the stat
self.tracker.achievements[num].icon:Hide()
str = "|cffffffff - " .. GetStatistic(id)
end
self.tracker.achievements[num].criteria:SetText(str)
self.tracker.achievements[num]:SetHeight(height + self.tracker.achievements[num].criteria:GetHeight())
 
self.tracker.achievements[num]:Show()
end
 
function self:ToggleTracker(id)
if self:IsTracking(id) then
self:SubTracker(id)
else
self:AddTracker(id)
end
end
 
function self:AddTracker(id)
--Make sure we're not already tracking
for i=1, #self.tracker.achievements do
if self.tracker.achievements[i]:GetID() == id then
self:SetTrackerAchievement(i, id) --Refresh it for timer purposes
return
end
end
 
--Add to the end
for i=1, #self.tracker.achievements do
if self.tracker.achievements[i]:GetID() == 0 then
self:SetTrackerAchievement(i, id)
break
end
end
end
 
function self:SubTracker(id)
local deleted = 0
for i=1, #self.tracker.achievements do
if self.tracker.achievements[i]:GetID() == id then
deleted = i
end
end
 
if deleted > 0 then
self:SetTrackerAchievement(deleted, 0)
if deleted < #self.tracker.achievements then
for i=deleted, #self.tracker.achievements-1 do
self:SetTrackerAchievement(i, self.tracker.achievements[i+1]:GetID())
end
end
self:SetTrackerAchievement(#self.tracker.achievements, 0)
end
end
 
function self:TrackerUpdate()
for i=1, #self.tracker.achievements do
self:SetTrackerAchievement(i, self.tracker.achievements[i]:GetID())
end
end
 
function self:IsTracking(id)
for i=1, #self.tracker.achievements do
if id == self.tracker.achievements[i]:GetID() then return true end
end
return false
end
 
function self:ScaleTracker()
self.tracker:SetScale(UASVPC.tracker.scale or 1)
end
 
function self:LoadTracker()
for i=1, #self.tracker.achievements do
if UASVPC.tracker.list[i] then
self:SetTrackerAchievement(i, UASVPC.tracker.list[i])
end
end
end
 
function self:TrackerOnUpdate()
for id,_ in next, self.timers do
if self:IsTracking(id) then
self:AddTracker(id)
end
if GetTime() - self.timers[id].start >= self.timers[id].duration then
--Timer has expired, wipe it.
self.timers[id] = nil
self:SubTracker(id)
end
end
end
FactionSpecificAchievements.lua
88,7 → 88,26
["2016"] = 1,
["2144"] = 1,
["2194"] = 1,
["2536"] = 1,
["2536"] = 1,
--New as of 3.1
["2421"] = 1,
["2419"] = 1,
["2760"] = 1,
["2761"] = 1,
["2762"] = 1,
["2763"] = 1,
["2764"] = 1,
["2770"] = 1,
["2777"] = 1,
["2778"] = 1,
["2779"] = 1,
["2780"] = 1,
["2781"] = 1,
["2782"] = 1,
["1737"] = 1,
["1752"] = 1,
["2797"] = 1,
["2817"] = 1,
 
["224"] = 2,
["259"] = 2,
177,5 → 196,24
["2195"] = 2,
["2200"] = 2,
["2537"] = 2,
--New as of 3.1
["2420"] = 2,
["2497"] = 2,
["2765"] = 2,
["2766"] = 2,
["2767"] = 2,
["2768"] = 2,
["2769"] = 2,
["2771"] = 2,
["2783"] = 2,
["2784"] = 2,
["2785"] = 2,
["2786"] = 2,
["2787"] = 2,
["2788"] = 2,
["2476"] = 2,
["2776"] = 2,
["2798"] = 2,
["2816"] = 2,
}