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
208 lines
5.3 KiB
|
1 year ago
|
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
|