vanilla-wow-addons – Rev 1
?pathlinks?
--===========================================================================--
---------------------------- LootTracker by PNB ----------------------------
--===========================================================================--
-- LootTrackerKillDetailsUI.lua
--
-- Code behind the kill details UI
--===========================================================================--
------------------------------------------------------------------------------
-- SetKill
------------------------------------------------------------------------------
function LT_SetKill(kill)
LT_DebugMessage(2, string.format("Viewing kill %s", kill.Name));
LT_KillDetails:Show();
LT_ItemDetails:Hide();
LT_PlayerDetails:Hide();
LT_SettingsFrame:Hide();
local description = kill.Name;
description = description .. string.format("\nLevel %d", kill.Level);
--description = description .. string.format("\n%s %s %s", kill.Gender, kill.Race, kill.Class);
if (kill.TimesKilled ~= nil) then
local deaths = getn(kill.TimesKilled);
if (deaths == 1) then
description = description .. string.format("\n%d death", deaths);
else
description = description .. string.format("\n%d deaths", deaths);
end
end
LT_Kill_DescriptionText:SetText(description);
LT_Kill_RemoveDeathButton:Disable();
local totalValue = 0;
if (kill.Drops ~= nil) then
local items = LT_GetItems();
foreach(kill.Drops, function(k,v)
local item = items[k];
if (item.Value) then
totalValue = totalValue + (item.Value * v);
end
end);
end
local averageValue = totalValue / getn(kill.TimesKilled);
local averageValueString = LT_GetValueString(averageValue, true);
LT_Kill_ValueText:SetText(averageValueString);
LT_Kill_DeathsList.Data = kill;
LT_Kill_DropsList.Data = kill;
LT_KillDetails.Data = kill;
LT_UpdateGenericScroller(LT_Kill_DeathsList);
LT_UpdateGenericScroller(LT_Kill_DropsList);
end
------------------------------------------------------------------------------
-- Kill_RemoveDeath
------------------------------------------------------------------------------
function LT_Kill_RemoveDeath()
LT_DebugMessage(1, "TODO: Remove the currently selected death entry");
end
------------------------------------------------------------------------------
-- Kill_Drops_GetTotal
------------------------------------------------------------------------------
function LT_Kill_Drops_GetTotal(scroller)
if (scroller.Data == nil) then
LT_DebugMessage(1, "No kill: Unable to get Drops total");
return 0;
end
if (scroller.Data.Drops == nil) then
LT_DebugMessage(1, "No drop list: Unable to get Drops total");
return 0;
end
local uniqueCount = 0;
foreach(scroller.Data.Drops, function(k,v)
uniqueCount = uniqueCount + 1;
end);
local totalCount = getn(scroller.Data.TimesKilled);
scroller.TotalCount = totalCount;
return uniqueCount;
end
------------------------------------------------------------------------------
-- Kill_Drops_GetItemLabel
------------------------------------------------------------------------------
function LT_Kill_Drops_GetItemLabel(scroller, index)
if (scroller.Data == nil) then
return "Unknown";
end
local label, data = LT_GetItemLabel(scroller, scroller.Data.Drops, index, LT_Kill_Drops_GetItemLabelWorker);
return label, data;
end
------------------------------------------------------------------------------
-- Kill_Drops_GetItemLabelWorker
------------------------------------------------------------------------------
function LT_Kill_Drops_GetItemLabelWorker(scroller, k, v)
local items = LT_GetItems();
local item = items[k];
local count = v;
local percentage = (count / scroller.TotalCount) * 100;
local qualityColor = LT_QualityColors[tostring(item.Quality)];
local description = LT_ColorText(item.Name, qualityColor);
local label = string.format("%s: %d (%.2f%%)", description, count, percentage);
local data = item.Name;
return label, data;
end
------------------------------------------------------------------------------
-- Kill_Deaths_GetTotal
------------------------------------------------------------------------------
function LT_Kill_Deaths_GetTotal(scroller)
if (scroller.Data == nil) then
LT_DebugMessage(1, "No kill: Unable to get Deaths total");
return 0;
end
if (scroller.Data.TimesKilled == nil) then
LT_DebugMessage(1, "No death list: Unable to get Deaths total");
return 0;
end
local uniqueCount = 0;
local totalCount = 0;
foreach(scroller.Data.TimesKilled, function(k,v)
uniqueCount = uniqueCount + 1;
end);
scroller.TotalCount = uniqueCount;
return uniqueCount;
end
------------------------------------------------------------------------------
-- Kill_Deaths_GetItemLabel
------------------------------------------------------------------------------
function LT_Kill_Deaths_GetItemLabel(scroller, index)
if (scroller.Data == nil) then
return "Unknown";
end
local label, data = LT_GetItemLabel(scroller, scroller.Data.TimesKilled, index, LT_Scroller_GetLabel);
return label, data;
end
------------------------------------------------------------------------------
-- OnKillButtonClicked
------------------------------------------------------------------------------
function LT_OnKillButtonClicked(button)
local name = button.Data;
local kills = LT_GetKills();
local kill = kills[name];
if (kill ~= nil) then
LT_SetKill(kill);
else
LT_DebugMessage(2, string.format("No kill found for name %s", name));
end
end