local FurC = FurC local vendorColor = "d68957" local goldColor = "e5da40" local apColor = "25C31E" local tvColor = "5EA4FF" local voucherColor = "82BCFF" local p = FurC.DebugOut -- debug function calling zo_strformat with up to 10 args local function colorise(str, col, ret) str = tostring(str) if str:find("%d000$") then str = str:gsub("000$", "k") end if ret then return str end return string.format("|c%s%s|r", col, str) end local function makeAchievementLink(achievementId) if not achievementId then return end if tonumber(achievementId) ~= achievementId then return GetString(SI_FURC_REQUIRES_QUEST) ..achievementId end return GetString(SI_FURC_REQUIRES_ACHIEVEMENT) .. GetAchievementLink(achievementId) end local function getRolisSource(recipeKey, recipeArray) recipeArray = recipeArray or FurC.Find(recipeKey) if not recipeArray then return end local versionData = FurC.Rolis[recipeArray.version] if nil ~= versionData and nil ~= versionData[recipeKey] then local itemPrice = zo_strformat(GetString(SI_FURC_STRING_FOR_VOUCHERS), colorise(versionData[recipeKey], voucherColor)) return zo_strformat(GetString(SI_FURC_STRING_Rolis), itemPrice) end versionData = FurC.Faustina[recipeArray.version] if nil ~= versionData and nil ~= versionData[recipeKey] then local itemPrice = zo_strformat(GetString(SI_FURC_STRING_FOR_VOUCHERS), colorise(versionData[recipeKey], voucherColor)) return zo_strformat(GetString(SI_FURC_STRING_FAUSTINA), itemPrice) end return GetString(SI_FURC_STRING_VOUCHER_VENDOR) end FurC.getRolisSource = getRolisSource local function getLuxurySource(recipeKey, recipeArray, stripColor) recipeArray = recipeArray or FurC.Find(recipeKey) if not recipeArray then return end local versionData = FurC.LuxuryFurnisher[recipeArray.version] if not versionData then return GetString(SI_FURC_STRING_FETCHER) end local itemData = versionData[recipeKey] if nil ~= itemData then local weekendString = (nil == itemData.itemDate and "") or zo_strformat(GetString(SI_FURC_STRING_WEEKEND_AROUND), itemData.itemDate) return zo_strformat( GetString(SI_FURC_STRING_WASSOLDBY), colorise(GetString(SI_FURC_STRING_ASSHOLE), vendorColor, stripColor), colorise(GetString(SI_FURC_STRING_HC), vendorColor, stripColor), colorise(itemData.itemPrice, goldColor, stripColor), weekendString ) end return GetString(SI_FURC_STRING_FETCHER) end FurC.getLuxurySource = getLuxurySource local function getPvpSource(recipeKey, recipeArray, stripColor) recipeArray = recipeArray or FurC.Find(recipeKey) if not recipeArray then return end local versionData = FurC.PVP[recipeArray.version] if not versionData then return "getPvpSource: nil" end for vendorName, vendorData in pairs(versionData) do for locationName, locationData in pairs(vendorData) do if nil ~= locationData[recipeKey] then return zo_strformat( GetString(SI_FURC_STRING_VENDOR), colorise(vendorName, vendorColor, stripColor), colorise(locationName, vendorColor, stripColor), colorise(locationData[recipeKey].itemPrice, apColor, stripColor), GetString(SI_FURC_STRING_AP) ) end end end return "getPvpSource" end FurC.getPvpSource = getPvpSource local typeTable = "table" local function getAchievementVendorSource(recipeKey, recipeArray, stripColor) recipeArray = recipeArray or FurC.Find(recipeKey) if not recipeArray then return end local versionData = FurC.AchievementVendors[recipeArray.version] if not versionData then return zo_strformat("getAchievementVendorSource: failed version lookup for ID <<1>> [<<2>>]", recipeKey, recipeArray.version) end local databaseEntry for zoneName, zoneData in pairs(versionData) do for vendorName, vendorData in pairs(zoneData) do databaseEntry = vendorData[recipeKey] if nil ~= databaseEntry then return zo_strformat( GetString(SI_FURC_STRING_VENDOR), colorise(vendorName, vendorColor, stripColor), colorise(zoneName, vendorColor, stripColor), colorise(databaseEntry.itemPrice, goldColor, stripColor), makeAchievementLink(databaseEntry.achievement) ) end end end return zo_strformat("getAchievementVendorSource, found version data but no item data for <<1>> ", recipeKey) end FurC.getAchievementVendorSource = getAchievementVendorSource local function getEventDropSource(recipeKey, recipeArray, stripColor) recipeArray = recipeArray or FurC.Find(recipeKey) if not recipeArray then return end local versionData = FurC.EventItems[recipeArray.version] local itemPriceString = "getEventDropSource: couldn't find " .. tostring(recipeKey) if not versionData then return itemPriceString end for versionNumber, versionData in pairs(FurC.EventItems) do for eventName, eventData in pairs(versionData) do for eventItemSource, eventSourceData in pairs(eventData) do if eventSourceData[recipeKey] then itemPriceString = zo_strformat( GetString(SI_FURC_FESTIVAL_DROP), colorise(eventName, vendorColor, stripColor), colorise(eventItemSource, vendorColor, stripColor) ) local additionalsource = tostring(eventSourceData[recipeKey]) or "" if #additionalsource > 4 then itemPriceString = itemPriceString .. "\n" .. additionalsource end return itemPriceString end end end end return itemPriceString end FurC.getEventDropSource = getEventDropSource function FurC.GetMiscItemSource(recipeKey, recipeArray, attachItemLink) if not recipeArray or not recipeArray.version or not recipeArray.origin then return end if recipeArray.origin == FURC_RUMOUR then return FurC.getRumourSource(recipeKey, recipeArray) end local versionFiles = FurC.MiscItemSources[recipeArray.version] if not versionFiles then return end local originData = versionFiles[recipeArray.origin] if nil == originData then return end return (not attachItemLink and originData[recipeKey]) or string.format("%s: %s", FurC.GetItemLink(recipeKey), originData[recipeKey]) end local function getRecipeSource(recipeKey, recipeArray) if nil == recipeKey and nil == recipeArray then return end if nil == FurC.RecipeSources then return end if nil ~= FurC.RecipeSources[recipeKey] then return FurC.RecipeSources[recipeKey] end recipeArray = recipeArray or FurC.Find(recipeKey) recipeKey = recipeArray.blueprint or recipeKey -- d(recipeKey) return (recipeArray.origin == FURC_RUMOUR and FurC.getRumourSource(recipeKey, recipeArray)) or FurC.RecipeSources[recipeKey] end FurC.getRecipeSource = getRecipeSource function FurC.getRumourSource(recipeKey, recipeArray) return (recipeArray.blueprint and GetString(SI_FURC_RUMOUR_SOURCE_RECIPE)) or GetString(SI_FURC_RUMOUR_SOURCE_ITEM) end function FurC.GetCrafterList(itemLink, recipeArray) if nil == recipeArray and nil == itemLink then return end recipeArray = recipeArray or FurC.Find(itemLink) if nil == recipeArray then return zo_strformat("FurC.GetCrafterList called for a non-craftable") end if nil == recipeArray.characters or NonContiguousCount(recipeArray.characters) == 0 then return GetString(SI_FURC_STRING_CANNOT_CRAFT) end local ret = GetString(SI_FURC_STRING_CRAFTABLE_BY) for characterName, characterKnowledge in pairs(recipeArray.characters) do ret = string.format("%s %s, ", ret, characterName) end return ret:sub(0, -3) end