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.

208 lines
5.3 KiB

local _, addon = ...
if not addon.IsGame_11_0_0 then return end;
local L = addon.L;
local API = addon.API;
local GetMapID = API.GetMapID;
local StripHyperlinks = StripHyperlinks;
local GetCurrencyInfo = C_CurrencyInfo.GetCurrencyInfo;
local GetItemName = C_Item.GetItemNameByID;
local GetItemCount = C_Item.GetItemCount;
local GetItemIcon = C_Item.GetItemIconByID;
local find = string.find;
local GetMinimapZoneText = GetMinimapZoneText;
local KEY_QUANTITY_FORMAT = "%d / %d |T%s:16:16|t";
local POSTCALL_ADDED = false;
local MODULE_ENABLED = false;
local IN_VALID_ZONE = false;
local NAME_KEYS = {
--Name = {type, id, requiredQuantity} --type: 0(currency) 1(item)
["Delve Chest 1 Rare"] = {0, 3028, 1},
};
local DOOR = L["GameObject Door"];
local ZONE_DOORS = {
--Some objects have genric names like "door"
--We use the minimap zone text to determine if it's the door we want
};
local SUPPORTED_MAPS = {};
do
local DELVE_INSTANCE = {
2664,
2679,
2680,
2681,
2682,
2683,
2684,
2685,
2686,
2687,
2688,
2689,
2690,
2767,
};
for _, mapID in ipairs(DELVE_INSTANCE) do
SUPPORTED_MAPS[mapID] = true;
end
end
local EL = CreateFrame("Frame");
local REQUEST_COUNTER = 0;
local function LocalizeNames()
REQUEST_COUNTER = REQUEST_COUNTER + 1;
if REQUEST_COUNTER > 3 then
return
end
local ZskeraVault = {
72953, 72954, 72955,
};
local ZskeraVaultKey = {1, 202196, 1};
local GetTitleForQuestID = C_QuestLog.GetTitleForQuestID;
local reload = false;
for _, questID in ipairs(ZskeraVault) do
local name = GetTitleForQuestID(questID);
if name and name ~= "" then
ZONE_DOORS[name] = ZskeraVaultKey;
else
reload = true;
end
end
if reload then
C_Timer.After(0.25, function()
LocalizeNames();
end);
end
if MODULE_ENABLED and IN_VALID_ZONE then
EL:UpdateZone();
end
end
local function Post_GetWorldCursor(tooltip, tooltipData)
if not (MODULE_ENABLED and IN_VALID_ZONE) then return end;
local name = tooltipData.lines and tooltipData.lines[1] and tooltipData.lines[1].leftText;
if name and name ~= "" then
name = StripHyperlinks(name);
if NAME_KEYS[name] then
local data = NAME_KEYS[name];
local type = data[1];
local id = data[2];
local numRequired = data[3];
local keyName, numOwned, icon;
if type == 0 then
local currencyInfo = GetCurrencyInfo(id);
if currencyInfo then
keyName = currencyInfo.name;
numOwned = currencyInfo.quantity;
icon = currencyInfo.iconFileID;
end
elseif type == 1 then
keyName = GetItemName(id)
numOwned = GetItemCount(id);
icon = GetItemIcon(id);
end
if numOwned then
if numOwned < numRequired then
tooltip:AddDoubleLine(keyName, string.format(KEY_QUANTITY_FORMAT, numRequired, numOwned, icon), 1.000, 0.125, 0.125, 1.000, 0.125, 0.125);
else
tooltip:AddDoubleLine(keyName, string.format(KEY_QUANTITY_FORMAT, numRequired, numOwned, icon));
end
tooltip:Show();
end
end
end
end
EL:SetScript("OnEvent", function(self, event, ...)
if event == "PLAYER_MAP_CHANGED" then
local oldMapID, newMapID = ...
self:UpdateZone(newMapID);
end
end);
function EL:UpdateZone(newMapID)
local mapID = newMapID or GetMapID();
if mapID and SUPPORTED_MAPS[mapID] then
IN_VALID_ZONE = true;
else
IN_VALID_ZONE = false;
end
end
local function EnableModule(state)
if state then
MODULE_ENABLED = true;
if not POSTCALL_ADDED then
POSTCALL_ADDED = true;
if TooltipDataProcessor and TooltipDataProcessor.AddTooltipPostCall then
local tooltipType = 4; --World Object
TooltipDataProcessor.AddTooltipPostCall(tooltipType, Post_GetWorldCursor);
else
print("Plumber: WoW API Changed (TooltipDataProcessor.AddTooltipPostCall)");
end
for localeKey, data in pairs(NAME_KEYS) do
local name = L[localeKey];
if name then
NAME_KEYS[name] = data;
end
end
LocalizeNames();
--]]
end
EL:RegisterEvent("PLAYER_MAP_CHANGED");
EL:UpdateZone();
else
MODULE_ENABLED = false;
EL:UnregisterEvent("PLAYER_MAP_CHANGED");
end
end
do
local moduleData = {
name = addon.L["ModuleName TooltipChestKeys"],
dbKey = "TooltipChestKeys",
description = addon.L["ModuleDescription TooltipChestKeys"],
toggleFunc = EnableModule,
categoryID = 1,
uiOrder = 5,
moduleAddedTime = 1718500000,
};
addon.ControlCenter:AddModule(moduleData);
end