From 66df583303893c84e16d3e378a0b028212aa510c Mon Sep 17 00:00:00 2001 From: Adam Hellberg Date: Mon, 7 Nov 2011 09:39:51 +0100 Subject: [PATCH] Updates to Mob List and bug fixes. CHANGED: MobList now uses an OnUpdate script to prevent game freeze. FIXED: Tooltip now displays count as " ()" instead of " ()". --- KillTrack.lua | 2 +- MobList.lua | 141 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 138 insertions(+), 5 deletions(-) diff --git a/KillTrack.lua b/KillTrack.lua index 8046fe6..918f8fe 100644 --- a/KillTrack.lua +++ b/KillTrack.lua @@ -83,7 +83,7 @@ function KT.Events.UPDATE_MOUSEOVER_UNIT(self, ...) if not UnitCanAttack("player", "mouseover") then return end local id = KTT:GUIDToID(UnitGUID("mouseover")) local gKills, cKills = self:GetKills(id) - GameTooltip:AddLine(("Killed %d (%d) times."):format(gKills, cKills), 1, 1, 1) + GameTooltip:AddLine(("Killed %d (%d) times."):format(cKills, gKills), 1, 1, 1) GameTooltip:Show() end diff --git a/MobList.lua b/MobList.lua index e22a554..766f48e 100644 --- a/MobList.lua +++ b/MobList.lua @@ -17,7 +17,11 @@ * along with KillTrack. If not, see . --]] -KillTrack.MobList = {} +local MAX_LOAD_INDEX = 200 + +KillTrack.MobList = { + LoadWarning = false +} local KT = KillTrack local ML = KT.MobList @@ -26,7 +30,49 @@ local Sort = KT.Sort.Desc local GUI = LibStub("AceGUI-3.0") -local frame, scrollHeader, idHeader, nameHeader, cKillsHeader, gKillsHeader, scrollContainer, scroll +local frame, scrollHeader, idHeader, nameHeader, cKillsHeader, gKillsHeader, scrollContainer, scroll, loadButton + +local loadFrame = CreateFrame("Frame") + +local index = 0 +local count = 0 + +local function update(_, elapsed) + index = index + 1 + ML:AddItem(index) + local c = floor((index)/100) + if c > count and index < MAX_LOAD_INDEX then + count = count + 1 + --w = c/10 + loadButton:SetDisabled(false) + loadFrame:SetScript("OnUpdate", nil) + elseif index >= MAX_LOAD_INDEX and not ML.LoadWarning then + StaticPopup_Show("KILLTRACK_LOADWARNING") + ML.LoadWarning = true + loadFrame:SetScript("OnUpdate", nil) + elseif index >= #KT.Temp.MobEntries then + index = 0 + count = 0 + ML.LoadWarning = false + frame:SetStatusText(("%d/%d mob entries loaded."):format(#KT.Temp.MobEntries, #KT.Temp.MobEntries)) + loadButton:SetDisabled(true) + loadFrame:SetScript("OnUpdate", nil) + end +end + +StaticPopupDialogs["KILLTRACK_LOADWARNING"] = { + text = "\124cffFF0000*** WARNING ***\124r\nLoading more than 200 entries may cause severe lag or client crashes.\nDo you want to continue?", + button1 = "Continue", + button2 = "Purge", + button3 = "Cancel", + OnAccept = function() loadFrame:SetScript("OnUpdate", update) end, + OnCancel = function() index = 0 count = 0 ML.LoadWarning = false ML:HideGUI() KT:ShowPurge() end, -- This is actually button2, not 3 + OnAlt = function() index = 0 end, + showAlert = true, + timeout = 0, + hideOnEscape = false, + whileDead = true +} function ML:ShowGUI() frame = GUI:Create("Frame") @@ -36,6 +82,20 @@ function ML:ShowGUI() frame:SetTitle("KillTrack - Mob List") frame:SetCallback("OnClose", function(frame) frame:Release() end) + local loadHeader = GUI:Create("SimpleGroup") + loadHeader:SetFullWidth(true) + loadHeader:SetLayout("Flow") + loadButton = GUI:Create("Button") + loadButton:SetText("Load more entries") + loadButton:SetFullWidth(true) + loadButton:SetHeight(24) + loadButton:SetCallback("OnClick", function(button) + button:SetDisabled(true) + loadFrame:SetScript("OnUpdate", update) + end) + loadButton:SetDisabled(true) + loadHeader:AddChild(loadButton) + scrollHeader = GUI:Create("SimpleGroup") scrollHeader:SetFullWidth(true) scrollHeader:SetLayout("Flow") @@ -46,6 +106,10 @@ function ML:ShowGUI() idHeader:SetColor(1, 1, 0) idHeader:SetHighlight(0.1, 0.1, 0.1) idHeader:SetCallback("OnClick", function() + loadButton:SetDisabled(true) + index = 0 + count = 0 + ML.LoadWarning = false if Sort == KT.Sort.IdAsc then Sort = KT.Sort.IdDesc else @@ -60,6 +124,10 @@ function ML:ShowGUI() nameHeader:SetColor(1, 1, 0) nameHeader:SetHighlight(0.1, 0.1, 0.1) nameHeader:SetCallback("OnClick", function() + loadButton:SetDisabled(true) + index = 0 + count = 0 + ML.LoadWarning = false if Sort == KT.Sort.AlphaA then Sort = KT.Sort.AlphaD else @@ -74,6 +142,10 @@ function ML:ShowGUI() cKillsHeader:SetColor(1, 1, 0) cKillsHeader:SetHighlight(0.1, 0.1, 0.1) cKillsHeader:SetCallback("OnClick", function() + loadButton:SetDisabled(true) + index = 0 + count = 0 + ML.LoadWarning = false if Sort == KT.Sort.CharDesc then Sort = KT.Sort.CharAsc else @@ -88,6 +160,10 @@ function ML:ShowGUI() gKillsHeader:SetColor(1, 1, 0) gKillsHeader:SetHighlight(0.1, 0.1, 0.1) gKillsHeader:SetCallback("OnClick", function() + loadButton:SetDisabled(true) + index = 0 + count = 0 + ML.LoadWarning = false if Sort == KT.Sort.Desc then Sort = KT.Sort.Asc else @@ -110,6 +186,7 @@ function ML:ShowGUI() scrollContainer:AddChild(scroll) + frame:AddChild(loadHeader) frame:AddChild(scrollHeader) frame:AddChild(scrollContainer) @@ -120,6 +197,45 @@ function ML:HideGUI() frame:Release() end +function ML:AddItem(index) + local entry = KT.Temp.MobEntries[index] + local container = GUI:Create("SimpleGroup") + container:SetFullWidth(true) + container:SetLayout("Flow") + local id = GUI:Create("InteractiveLabel") + id:SetWidth(100) + id:SetFont("Fonts\\FRIZQT__.TTF", 12) + id:SetText(tostring(entry.Id)) + id:SetColor(1, 1, 1) + id:SetHighlight(0.1, 0.1, 0.1) + id:SetUserData("NPC_ID", entry.Id) + id:SetUserData("NPC_NAME", entry.Name) + id:SetCallback("OnClick", function(self) + KT:ShowDelete(self:GetUserData("NPC_ID"), self:GetUserData("NPC_NAME")) + end) + local name = GUI:Create("Label") + name:SetWidth(200) + name:SetFont("Fonts\\FRIZQT__.TTF", 12) + name:SetText(entry.Name) + name:SetColor(1, 1, 1) + local cKills = GUI:Create("Label") + cKills:SetWidth(100) + cKills:SetFont("Fonts\\FRIZQT__.TTF", 12) + cKills:SetText(entry.cKills) + cKills:SetColor(1, 1, 1) + local gKills = GUI:Create("Label") + gKills:SetWidth(100) + gKills:SetFont("Fonts\\FRIZQT__.TTF", 12) + gKills:SetText(entry.gKills) + gKills:SetColor(1, 1, 1) + container:AddChild(id) + container:AddChild(name) + container:AddChild(cKills) + container:AddChild(gKills) + scroll:AddChild(container) + frame:SetStatusText(("%d/%d mob entries loaded."):format(index, #KT.Temp.MobEntries)) +end + function ML:UpdateList() if Sort == KT.Sort.IdDesc or Sort == KT.Sort.IdAsc then idHeader:SetColor(1, 0, 0) @@ -145,6 +261,24 @@ function ML:UpdateList() scroll:ReleaseChildren() + KT.Temp.MobEntries = KT:GetSortedMobTable(Sort) + + loadFrame:SetScript("OnUpdate", update) + + --[[ + local co = coroutine.create(AddItems) + + while coroutine.status(co) ~= "dead" do + local errorfree, count, container = coroutine.resume(co) + if errorfree then + scroll:AddChild(container) + + else + message("Unknown error encountered while loading mob list.") + error("Unknown error encountered while loading mob list.") + end + end + local entries = KT:GetSortedMobTable(Sort) for i,v in ipairs(entries) do @@ -183,6 +317,5 @@ function ML:UpdateList() container:AddChild(gKills) scroll:AddChild(container) end - - frame:SetStatusText(("%d mob entries loaded."):format(#entries)) + --]] end -- 1.7.9.5