vanilla-wow-addons – Rev 1
?pathlinks?
------------------------------------------------------
-- AdSpace.lua
------------------------------------------------------
FAS_VERSION = "11200.2";
------------------------------------------------------
FAS_SPECIAL_VENDOR_COLOR = {r=1.0, g=0.5, b=0.25};
FAS_INDENT = " ";
FAS_AllClasses = { "PALADIN", "SHAMAN", "MAGE", "PRIEST", "WARLOCK", "WARRIOR", "HUNTER", "ROGUE", "DRUID", "ANY" };
-- Configuration
FAS_Config = { };
FAS_Config_Default = { };
FAS_Config_Default.ShowCost = false;
FAS_Config_Default.PostToRaid = true;
FAS_Config_Default.Recipes = true;
FAS_Config_Default.Librams = true;
FAS_Config_Default.Darkmoon = true;
FAS_Config_Default.AD = true;
FAS_Config_Default.ZG = true;
FAS_Config_Default.AQ20 = true;
FAS_Config_Default.AQ40 = true;
FAS_OptionsText = {
["Recipes"] = FAS_OPTION_RECIPES,
["ShowCost"] = FAS_OPTION_RECIPE_COST,
["Librams"] = FAS_OPTION_LIBRAM,
["Darkmoon"] = FAS_OPTION_DARKMOON,
["AD"] = FAS_OPTION_AD,
["ZG"] = FAS_OPTION_ZG.." "..GFWUtils.Gray(FAS_OPTION_ZG_FACTION),
["AQ20"] = FAS_OPTION_AQ20.." "..GFWUtils.Gray(FAS_OPTION_AQ20_FACTION),
["AQ40"] = FAS_OPTION_AQ40.." "..GFWUtils.Gray(FAS_OPTION_AQ40_FACTION),
["PostToRaid"] = FAS_OPTION_POST_RAID,
};
local function FAS_Tooltip_Hook(frame, name, link, source)
if (link) then
local _, _, itemID = string.find(link, "item:(%d+):%d+:%d+:%d+");
itemID = tonumber(itemID);
local itemInfo = FAS_ItemInfo[itemID];
if (FAS_Config.Recipes and itemInfo) then
if (source == "MERCHANT") then
return false; -- kinda silly to show merchants who sell this when we're seeing this at a merchant
end
local myFaction = UnitFactionGroup("player");
local vendors = GFWTable.Merge(FAS_VendorInfo[myFaction][itemID], FAS_VendorInfo["Neutral"][itemID]);
local note = itemInfo.note;
local color;
local intro;
if (note) then
color = FAS_SPECIAL_VENDOR_COLOR;
else
color = GFW_FONT_COLOR;
end
if (FAS_Config.ShowCost) then
intro = string.format(SOLD_FOR_PRICE_BY, GFWUtils.TextGSC(itemInfo.b));
else
intro = SOLD_BY;
end
if (table.getn(vendors) > 1) then
frame:AddLine(intro..":", color.r, color.g, color.b);
for i, aVendor in vendors do
local vendorLoc = FAS_VendorLocations[aVendor];
if (vendorLoc) then
local vendorName = FAS_Localized[aVendor] or aVendor;
local vendorLocation = FAS_Localized[vendorLoc] or vendorLoc;
frame:AddLine(FAS_INDENT..string.format(VENDOR_LOCATION_FORMAT, vendorName, vendorLocation), color.r, color.g, color.b);
else
GFWUtils.PrintOnce(GFWUtils.Red("AdSpace "..FAS_VERSION.." error: ").."Can't find location for "..aVendor..". Please report to gazmik@fizzwidget.com.", 60);
return false;
end
end
elseif (table.getn(vendors) == 1) then
local vendorLoc = FAS_VendorLocations[vendors[1]];
if (vendorLoc) then
local vendorName = FAS_Localized[vendors[1]] or vendors[1];
local vendorLocation = FAS_Localized[vendorLoc] or vendorLoc;
frame:AddLine(intro.." "..string.format(VENDOR_LOCATION_FORMAT, vendorName, vendorLocation), color.r, color.g, color.b);
else
GFWUtils.PrintOnce(GFWUtils.Red("AdSpace "..FAS_VERSION.." error: ").."Can't find location for "..vendorName..". Please report to gazmik@fizzwidget.com.", 60);
return false;
end
else
local found = false;
for _, faction in {"Alliance", "Horde", "Neutral"} do
if (FAS_VendorInfo[faction][itemID]) then
found = true;
end
end
if not (found) then
GFWUtils.PrintOnce(GFWUtils.Red("AdSpace "..FAS_VERSION.." error: ")..link.."("..itemID..") is listed but has no vendors. Please report to gazmik@fizzwidget.com.", 60);
return false;
end
end
if (note ~= "") then
frame:AddLine(note, color.r, color.g, color.b);
end
return true;
end
local libramInfo = FAS_LibramInfo[itemID];
if (FAS_Config.Librams and libramInfo) then
local color = FAS_SPECIAL_VENDOR_COLOR;
local returnToName = FAS_Localized[libramInfo.name] or libramInfo.name;
local returnToLocation = FAS_Localized[FAS_VendorLocations[libramInfo.name]] or FAS_VendorLocations[libramInfo.name];
local bonus = FAS_Localized[libramInfo.bonus] or libramInfo.bonus;
frame:AddLine(RETURN_TO.." "..string.format(VENDOR_LOCATION_FORMAT, returnToName, returnToLocation), color.r, color.g, color.b);
frame:AddLine(string.format(ARCANUM_FORMAT, bonus), color.r, color.g, color.b);
return true;
end
local darkmoonInfo = FAS_DarkmoonInfo[itemID];
if (FAS_Config.Darkmoon and darkmoonInfo) then
local color = FAS_SPECIAL_VENDOR_COLOR;
frame:AddLine(darkmoonInfo, color.r, color.g, color.b);
return true;
end
local tokenInfo = FAS_TokenInfo[itemID];
if ((FAS_Config.ZG or FAS_Config.AQ20 or FAS_Config.AQ40) and tokenInfo) then
local color = FAS_SPECIAL_VENDOR_COLOR;
local addedLines;
for _, faction in FAS_TokenFactions do
local _, _, factionAbbrev = string.find(faction, "(.-)_FACTION");
if (FAS_Config[factionAbbrev]) then
local reportLines = {};
for _, class in FAS_AllClasses do
if (not (class == "SHAMAN" and UnitFactionGroup("player") == "Alliance") and
not (class == "PALADIN" and UnitFactionGroup("player") == "Horde")) then
for _, rewardID in tokenInfo do
local reward = FAS_TokenRewards[rewardID];
if (reward and reward.class == class and reward.faction == faction) then
local repNeeded;
if (reward.rep) then
repNeeded = getglobal("FACTION_STANDING_LABEL"..reward.rep);
end
local reportLine = "";
reportLine = reportLine .. reward.type;
if (repNeeded) then
reportLine = reportLine .. " ("..repNeeded..")";
end
reportLine = reportLine .. ", ";
if (reportLines[class]) then
reportLines[class] = reportLines[class] .. reportLine;
else
reportLines[class] = reportLine;
end
end
end
if (reportLines[class]) then
reportLines[class] = string.gsub(reportLines[class], ", $", "");
end
end
end
if (GFWTable.Count(reportLines) > 0) then
frame:AddLine(string.format(FAS_FACTION_REWARDS, getglobal(faction)), color.r, color.g, color.b);
addedLines = true;
for class, reportLine in reportLines do
frame:AddLine(" "..getglobal(class)..": "..reportLine, color.r, color.g, color.b);
end
end
end
end
if (addedLines) then
return true;
end
end
for key, tokenSetList in FAS_FactionTokenSets do
if (FAS_Config[key]) then
for _, coinSet in tokenSetList do
local found;
local otherCoins = {};
for _, coinID in coinSet do
if (itemID == coinID) then
found = true;
else
local itemText = FAS_TokenNames[coinID];
itemText = FAS_Localized[itemText] or itemText;
table.insert(otherCoins, itemText);
end
end
if (found) then
local color = FAS_SPECIAL_VENDOR_COLOR;
frame:AddLine(FAS_TURNIN.." "..getglobal(key.."_FACTION"), color.r, color.g, color.b);
if (table.getn(otherCoins) > 0) then
frame:AddDoubleLine(" ", FAS_WITH.." "..table.concat(otherCoins, ", "), color.r, color.g, color.b, color.r, color.g, color.b);
end
return true;
end
end
end
end
end
end
function FAS_OnLoad()
-- Register Slash Commands
SLASH_FAS1 = "/adspace";
SLASH_FAS2 = "/ads";
SlashCmdList["FAS"] = function(msg)
FAS_ChatCommandHandler(msg);
end
-- Register for Events
this:RegisterEvent("ADDON_LOADED");
GFWTooltip_AddCallback("GFW_AdSpace", FAS_Tooltip_Hook);
table.insert(UISpecialFrames,"FAS_OptionsFrame");
GFWUtils.Print("Fizzwidget AdSpace "..FAS_VERSION.." initialized!");
end
function FAS_OnEvent(event, arg1)
-- Save Variables
if ( event == "ADDON_LOADED" ) then
if (FAS_Config.Tooltip) then
for key, value in FAS_Config_Default do
if (FAS_Config[key] == nil) then
FAS_Config[key] = FAS_Config_Default[key];
end
end
FAS_Config.Tooltip = nil;
end
this:UnregisterEvent("ADDON_LOADED");
end
end
function FAS_ChatCommandHandler(msg)
if ( msg == "" ) then
if FAS_OptionsFrame:IsVisible() then
HideUIPanel(FAS_OptionsFrame);
else
ShowUIPanel(FAS_OptionsFrame);
end
return;
end
-- Print Help
if ( msg == "help" ) or ( msg == "" ) then
GFWUtils.Print("Fizzwidget AdSpace "..FAS_VERSION..":");
GFWUtils.Print("/adspace (or /ads)");
GFWUtils.Print("- "..GFWUtils.Hilite("help").." - Print this helplist.");
GFWUtils.Print("- "..GFWUtils.Hilite("[item link]").." - Show info for an item in the chat window.");
GFWUtils.Print("- "..GFWUtils.Hilite("status").." - Check current settings.");
GFWUtils.Print("- "..GFWUtils.Hilite("recipes on").." | "..GFWUtils.Hilite("off").." - Show info for vendor-supplied recipes in tooltips.");
GFWUtils.Print("- "..GFWUtils.Hilite("showcost on").." | "..GFWUtils.Hilite("off").." - Also show vendor prices for recipes.");
GFWUtils.Print("- "..GFWUtils.Hilite("librams on").." | "..GFWUtils.Hilite("off").." - Show info for librams in tooltips.");
GFWUtils.Print("- "..GFWUtils.Hilite("darkmoon on").." | "..GFWUtils.Hilite("off").." - Show info for Darkmoon Faire grey item turn-ins in tooltips.");
GFWUtils.Print("- "..GFWUtils.Hilite("zg on").." | "..GFWUtils.Hilite("off").." - Show info for for special raid loot from Zul'Gurub (Zandalar Tribe rewards) in tooltips.");
GFWUtils.Print("- "..GFWUtils.Hilite("aq20 on").." | "..GFWUtils.Hilite("off").." - Show info for for special raid loot from Ruins of Ahn'Qiraj (Cenarion Circle rewards) in tooltips.");
GFWUtils.Print("- "..GFWUtils.Hilite("aq40 on").." | "..GFWUtils.Hilite("off").." - Show info for for special raid loot from Ahn'Qiraj (Brood of Nozdormu rewards) in tooltips.");
GFWUtils.Print("- "..GFWUtils.Hilite("post on").." | "..GFWUtils.Hilite("off").." - Post to raid/party chat when getting raid loot info via "..GFWUtils.Hilite("/ads [item link]")..".");
return;
end
if (msg == "version") then
GFWUtils.Print("Fizzwidget AdSpace "..FAS_VERSION);
return;
end
if ( msg == "status" ) then
local gotSomething;
if (FAS_Config.Recipes) then
GFWUtils.Print("Showing info for "..GFWUtils.Hilite("vendor-supplied recipes").." in tooltips.");
gotSomething = 1;
if (FAS_Config.ShowCost) then
GFWUtils.Print("Also showing vendor price for recipes.");
end
end
if (FAS_Config.Librams) then
GFWUtils.Print("Showing info for "..GFWUtils.Hilite("Librams").." in tooltips.");
gotSomething = 1;
end
if (FAS_Config.Darkmoon) then
GFWUtils.Print("Showing info for "..GFWUtils.Hilite("Darkmoon Faire grey item turn-ins").." in tooltips.");
gotSomething = 1;
end
if (FAS_Config.ZG) then
GFWUtils.Print("Showing info for special raid loot from "..GFWUtils.Hilite("Zul'Gurub (Zandalar Tribe rewards)").." in tooltips.");
gotSomething = 1;
end
if (FAS_Config.AQ20) then
GFWUtils.Print("Showing info for special raid loot from "..GFWUtils.Hilite("Ruins of Ahn'Qiraj (AQ20 Cenarion Circle rewards)").." in tooltips.");
gotSomething = 1;
end
if (FAS_Config.AQ40) then
GFWUtils.Print("Showing info for special raid loot from "..GFWUtils.Hilite("Ahn'Qiraj (AQ40 Brood of Nozdormu rewards)").." in tooltips.");
gotSomething = 1;
end
if ((FAS_Config.ZG or FAS_Config.AQ20 or FAS_Config.AQ40) and FAS_Config.PostToRaid) then
GFWUtils.Print("Will post to raid/party chat when showing info for raid loot via "..GFWUtils.Hilite("/ads [link]")..".");
end
if (not gotSomething) then
GFWUtils.Print("Not adding any info to tooltips.");
end
return;
end
if (msg == "test") then
local itemInfoCount = 0;
for itemID in FAS_ItemInfo do
local found = false;
for _, faction in {"Alliance", "Horde", "Neutral"} do
if (FAS_VendorInfo[faction][itemID]) then
found = true;
end
end
if not (found) then
GFWUtils.Print("Item ID "..itemID.." not found in FAS_VendorInfo.");
end
itemInfoCount = itemInfoCount + 1;
end
GFWUtils.Print(itemInfoCount.." entries in FAS_ItemInfo.");
for _, faction in {"Alliance", "Horde", "Neutral"} do
local vendorInfoCount = 0;
for itemID in FAS_VendorInfo[faction] do
if (FAS_ItemInfo[itemID] == nil) then
GFWUtils.Print("Item ID "..itemID.." not found in FAS_ItemInfo.");
end
vendorInfoCount = vendorInfoCount + 1;
end
GFWUtils.Print(vendorInfoCount.." entries in FAS_VendorInfo["..faction.."].");
end
return;
end
local _, _, cmd, args = string.find(msg, "^([%l%d']+) *(.*)");
if (cmd) then cmd = string.lower(cmd); end
if (cmd == "recipes" or cmd == "recipe") then
if (args == "on") then
FAS_Config.Recipes = true;
elseif (args == "off") then
FAS_Config.Recipes = nil;
else
FAS_Config.Recipes = not FAS_Config.Recipes;
end
if (FAS_Config.Recipes) then
GFWUtils.Print("Showing info for "..GFWUtils.Hilite("vendor-supplied recipes").." in tooltips.");
else
GFWUtils.Print(GFWUtils.Red("Not").."showing info for "..GFWUtils.Hilite("vendor-supplied recipes").." in tooltips.");
end
return;
end
if (cmd == "showcost" or cmd == "cost") then
if (args == "on") then
FAS_Config.ShowCost = true;
elseif (args == "off") then
FAS_Config.ShowCost = nil;
else
FAS_Config.ShowCost = not FAS_Config.ShowCost;
end
if (FAS_Config.ShowCost) then
GFWUtils.Print("Also showing vendor price for recipes.");
else
GFWUtils.Print(GFWUtils.Red("Not").."showing vendor price for recipes.");
end
return;
end
if (cmd == "librams" or cmd == "libram") then
if (args == "on") then
FAS_Config.Librams = true;
elseif (args == "off") then
FAS_Config.Librams = nil;
else
FAS_Config.Librams = not FAS_Config.Librams;
end
if (FAS_Config.Librams) then
GFWUtils.Print("Showing info for "..GFWUtils.Hilite("Librams").." in tooltips.");
else
GFWUtils.Print(GFWUtils.Red("Not").."showing info for "..GFWUtils.Hilite("Librams").." in tooltips.");
end
return;
end
if (cmd == "darkmoon") then
if (args == "on") then
FAS_Config.Darkmoon = true;
elseif (args == "off") then
FAS_Config.Darkmoon = nil;
else
FAS_Config.Darkmoon = not FAS_Config.Darkmoon;
end
if (FAS_Config.Darkmoon) then
GFWUtils.Print("Showing info for "..GFWUtils.Hilite("Darkmoon Faire grey item turn-ins").." in tooltips.");
else
GFWUtils.Print(GFWUtils.Red("Not").."showing info for "..GFWUtils.Hilite("Darkmoon Faire grey item turn-ins").." in tooltips.");
end
return;
end
if (cmd == "zg" or cmd == "zul'gurub" or cmd == "zulgurub" or cmd == "zandalar") then
if (args == "on") then
FAS_Config.ZG = true;
elseif (args == "off") then
FAS_Config.ZG = nil;
else
FAS_Config.ZG = not FAS_Config.ZG;
end
if (FAS_Config.ZG) then
GFWUtils.Print("Showing info for special raid loot from"..GFWUtils.Hilite("Zul'Gurub (Zandalar Tribe rewards)").." in tooltips.");
else
GFWUtils.Print(GFWUtils.Red("Not").."showing info for special raid loot from"..GFWUtils.Hilite("Zul'Gurub (Zandalar Tribe rewards)").." in tooltips.");
end
return;
end
if (cmd == "aq20" or cmd == "cenarion") then
if (args == "on") then
FAS_Config.AQ20 = true;
elseif (args == "off") then
FAS_Config.AQ20 = nil;
else
FAS_Config.AQ20 = not FAS_Config.AQ20;
end
if (FAS_Config.AQ20) then
GFWUtils.Print("Showing info for "..GFWUtils.Hilite("Ruins of Ahn'Qiraj (AQ20)").." special raid loot in tooltips.");
else
GFWUtils.Print(GFWUtils.Red("Not").."showing info for "..GFWUtils.Hilite("Ruins of Ahn'Qiraj (AQ20)").." special raid loot in tooltips.");
end
return;
end
if (cmd == "aq40" or cmd == "brood" or cmd == "nozdormu") then
if (args == "on") then
FAS_Config.AQ40 = true;
elseif (args == "off") then
FAS_Config.AQ40 = nil;
else
FAS_Config.AQ40 = not FAS_Config.AQ40;
end
if (FAS_Config.AQ40) then
GFWUtils.Print("Showing info for "..GFWUtils.Hilite("Ahn'Qiraj (AQ40)").." special raid loot in tooltips.");
else
GFWUtils.Print(GFWUtils.Red("Not").."showing info for "..GFWUtils.Hilite("Ahn'Qiraj (AQ40)").." special raid loot in tooltips.");
end
return;
end
if (cmd == "post" or cmd == "raid" or cmd == "party") then
if (args == "on") then
FAS_Config.PostToRaid = true;
elseif (args == "off") then
FAS_Config.PostToRaid = nil;
else
FAS_Config.PostToRaid = not FAS_Config.PostToRaid;
end
if (FAS_Config.PostToRaid) then
GFWUtils.Print("Will post to raid/party chat when getting info for raid loot via "..GFWUtils.Hilite("/ads [link]")".");
else
GFWUtils.Print("Will only print to chat window when getting info for raid loot via "..GFWUtils.Hilite("/ads [link]")".");
end
return;
end
if (args == nil or args == "") then
args = msg;
end
local postedText;
for itemLink in string.gfind(args, "|c%x+|Hitem:%d+:%d+:%d+:%d+|h%[.-%]|h|r") do
postedText = nil;
local _, _, itemID = string.find(itemLink, "|c%x+|Hitem:(%d+):%d+:%d+:%d+|h%[.-%]|h|r");
if (itemID == nil or itemID == "") then
GFWUtils.Print("Usage: "..GFWUtils.Hilite("/ads info <item link>"));
return;
end
itemID = tonumber(itemID);
local itemInfo = FAS_ItemInfo[itemID];
if (itemInfo) then
local myFaction = UnitFactionGroup("player");
local vendors = GFWTable.Merge(FAS_VendorInfo[myFaction][itemID], FAS_VendorInfo["Neutral"][itemID]);
local note = itemInfo.note;
local intro = itemLink..": "..string.format(SOLD_FOR_PRICE_BY, GFWUtils.TextGSC(itemInfo.b));
if (vendors == nil or vendors == {}) then
GFWUtils.Print(GFWUtils.Red("AdSpace "..FAS_VERSION.." error: ")..itemLink.."("..itemID..") is listed but has no vendors. Please report to gazmik@fizzwidget.com.");
return;
end
GFWUtils.Print(intro);
for i, aVendor in vendors do
local vendorName = FAS_Localized[aVendor] or aVendor;
local vendorLocation = FAS_Localized[FAS_VendorLocations[aVendor]] or FAS_VendorLocations[aVendor];
GFWUtils.Print(string.format(VENDOR_LOCATION_FORMAT, vendorName, vendorLocation));
end
if (note and note ~= "") then
GFWUtils.Print(GFWUtils.Hilite(note));
end
postedText = 1;
end
local libramInfo = FAS_LibramInfo[itemID];
if (libramInfo) then
local returnToName = FAS_Localized[libramInfo.name] or libramInfo.name;
local returnToLocation = FAS_Localized[FAS_VendorLocations[libramInfo.name]] or FAS_VendorLocations[libramInfo.name];
local bonus = FAS_Localized[libramInfo.bonus] or libramInfo.bonus;
GFWUtils.Print(itemLink..": "..RETURN_TO.." "..string.format(VENDOR_LOCATION_FORMAT, returnToName, returnToLocation));
GFWUtils.Print(bonus);
postedText = 1;
end
local darkmoonInfo = FAS_DarkmoonInfo[itemID];
if (darkmoonInfo) then
GFWUtils.Print(itemLink..": "..darkmoonInfo);
postedText = 1;
end
local tokenInfo = FAS_TokenInfo[itemID];
if (tokenInfo) then
for _, faction in FAS_TokenFactions do
local reportLines = {};
for _, class in FAS_AllClasses do
for _, rewardID in tokenInfo do
local reward = FAS_TokenRewards[rewardID];
if (reward and reward.class == class and reward.faction == faction) then
local link = GFWUtils.ItemLink(rewardID);
local repNeeded;
if (reward.rep) then
repNeeded = getglobal("FACTION_STANDING_LABEL"..reward.rep);
end
local reportLine = "";
if (link) then
reportLine = reportLine .. link .. " - ";
end
reportLine = reportLine .. reward.type;
if (repNeeded) then
reportLine = reportLine .. " ("..repNeeded..")";
end
reportLine = reportLine .. ", ";
if (reportLines[class]) then
reportLines[class] = reportLines[class] .. reportLine;
else
reportLines[class] = reportLine;
end
end
end
if (reportLines[class]) then
reportLines[class] = string.gsub(reportLines[class], ", $", "");
end
end
if (GFWTable.Count(reportLines) > 0) then
local _, _, factionAbbrev = string.find(faction, "(.-)_FACTION");
postedText = 1;
if (FAS_Config[factionAbbrev]) then
FAS_Post(itemLink..": "..string.format(FAS_FACTION_REWARDS, getglobal(faction)));
for class, reportLine in reportLines do
FAS_Post(" "..getglobal(class)..": "..reportLine);
end
else
FAS_Post(itemLink..": "..string.format(FAS_FACTION_REWARDS_COUNT, GFWTable.Count(reportLines), getglobal(faction)));
end
end
end
end
local rewardInfo = FAS_TokenRewards[itemID];
if (rewardInfo) then
local link = GFWUtils.ItemLink(itemID);
FAS_Post(link..": "..string.format(ITEM_REQ_REPUTATION, getglobal(rewardInfo.faction), getglobal("FACTION_STANDING_LABEL"..rewardInfo.rep)));
local reportLines = {};
for tokenID, rewards in FAS_TokenInfo do
if (GFWTable.KeyOf(rewards, itemID)) then
local itemText = GFWUtils.ItemLink(tokenID);
local itemQuality = FAS_TokenQuality[tokenID];
if (itemText == nil) then
itemText = FAS_TokenNames[tokenID];
itemText = FAS_Localized[itemText] or itemText;
local _, _, _, color = GetItemQualityColor(math.floor(itemQuality));
itemText = color..itemText..FONT_COLOR_CODE_CLOSE;
end
if (rewardInfo == ENSCRIBE) then
-- ZG enchants take 1 each of any reagent
itemText = "1 x "..itemText;
else
-- other token quests take 1 epic only, or 5 of one green + 5 another green + 2 blue + 1 "special"
if (itemQuality == 2) then
itemText = "5 x "..itemText;
elseif (itemQuality == 3) then
itemText = "2 x "..itemText;
else
itemText = "1 x "..itemText;
end
end
table.insert(reportLines, itemText);
end
end
table.sort(reportLines);
for _, line in reportLines do
FAS_Post(line);
end
postedText = 1;
end
if (not postedText) then
GFWUtils.Print("Nothing known about "..itemLink..".");
end
end
if (postedText) then
return;
end
-- if we made it down here, there were args we didn't understand... time to remind the user what to do.
FAS_ChatCommandHandler("help");
end
function FAS_StripColor(text)
if (string.find(text, "|c%x+|Hitem:%d+:%d+:%d+:%d+|h%[.-%]|h|r")) then
return text;
else
return string.gsub(text, "|c"..string.rep("%x", 8).."(.-)|r", "%1");
end
end
function FAS_Post(msg)
if (FAS_Config.PostToRaid and GetNumRaidMembers() > 0) then
msg = FAS_StripColor(msg);
SendChatMessage(msg, "RAID");
elseif (FAS_Config.PostToRaid and GetNumPartyMembers() > 0) then
msg = FAS_StripColor(msg);
SendChatMessage(msg, "PARTY");
else
GFWUtils.Print(msg);
end
end
function FAS_CheckMerchant(itemID)
for merchantIndex = 1, GetMerchantNumItems() do
local link = GetMerchantItemLink(merchantIndex);
local _, _, merchantItemID = string.find(link, "item:(%d+):%d+:%d+:%d+");
if (tonumber(merchantItemID) == itemID) then
return true;
end
end
return false;
end
function FAS_OptionsShow()
FAS_VersionText:SetText("v. "..FAS_VERSION);
for option, description in FAS_OptionsText do
local button = getglobal("FAS_OptionsButton_"..option);
local text = getglobal("FAS_OptionsButton_"..option.."Text");
if (button and text) then
button:SetChecked(FAS_Config[option]);
text:SetText(description);
end
end
end
function FAS_OptionsClick()
local button = this:GetName();
local option = string.gsub(button, "FAS_OptionsButton_", "");
FAS_Config[option] = this:GetChecked();
end
-- private, for building localization tables
function FAS_Translate(langCode)
tempTranslations = {};
local localizedVendorInfo = getglobal("FAS_VendorInfo_"..langCode);
local localizedVendorLocations = getglobal("FAS_VendorLocations_"..langCode);
for faction, factionVendorList in FAS_VendorInfo do
for itemID, vendorList in factionVendorList do
local localizedVendors = localizedVendorInfo[faction][itemID];
if (localizedVendors and type(localizedVendors) == "table") then
for index, name in vendorList do
local localizedName = localizedVendors[index];
if (localizedName == nil) then break; end
if (localizedName ~= name) then
if (tempTranslations[name] == nil) then
tempTranslations[name] = {};
end
table.insert(tempTranslations[name], localizedName);
end
local location = FAS_VendorLocations[name];
local localizedLocation = localizedVendorLocations[localizedName];
if (localizedLocation and localizedLocation ~= location) then
if (tempTranslations[location] == nil) then
tempTranslations[location] = {};
end
table.insert(tempTranslations[location], localizedLocation);
end
end
end
end
end
local localizedLibramInfo = getglobal("FAS_LibramInfo_"..langCode);
for itemID, libramInfo in FAS_LibramInfo do
local localizedInfo = localizedLibramInfo[itemID];
if (localizedInfo and type(localizedInfo) == "table") then
if (localizedInfo.name ~= libramInfo.name) then
if (tempTranslations[libramInfo.name] == nil) then
tempTranslations[libramInfo.name] = {};
end
table.insert(tempTranslations[libramInfo.name], localizedInfo.name);
end
if (localizedInfo.bonus ~= libramInfo.bonus) then
if (tempTranslations[libramInfo.bonus] == nil) then
tempTranslations[libramInfo.bonus] = {};
end
table.insert(tempTranslations[libramInfo.bonus], localizedInfo.bonus);
end
local location = FAS_VendorLocations[libramInfo.name];
local localizedLocation = localizedVendorLocations[localizedInfo.name];
if (localizedLocation and localizedLocation ~= location) then
if (tempTranslations[location] == nil) then
tempTranslations[location] = {};
end
table.insert(tempTranslations[location], localizedLocation);
end
end
end
FAS_Config[langCode] = {};
for baseString, translations in tempTranslations do
if (table.getn(translations) == 1) then
FAS_Config[langCode][baseString] = translations[1];
else
local mergedTranslations = {}
for _, translation in translations do
if (GFWTable.KeyOf(mergedTranslations, translation) == nil) then
table.insert(mergedTranslations, translation);
end
end
if (table.getn(mergedTranslations) == 1) then
FAS_Config[langCode][baseString] = mergedTranslations[1];
else
FAS_Config[langCode][baseString] = mergedTranslations;
end
end
end
end