diff --git a/FurCFilter.lua b/FurCFilter.lua
index 8202486..13f1e1e 100644
--- a/FurCFilter.lua
+++ b/FurCFilter.lua
@@ -21,7 +21,8 @@ local sourceIndices
local recipeArray, itemId, itemLink, itemType, sItemType, itemName, recipeIndex, recipeListIndex
function FurC.SetFilter(useDefaults, skipRefresh)
- ClearTooltip(InformationTooltip)
+
+ ClearTooltip(InformationTooltip)
sourceIndices = FurC.SourceIndices
searchString = FurC.GetSearchFilter()
@@ -64,8 +65,8 @@ function FurC.InitFilters()
FurC.SetDropdownChoice("Version", FurC.GetDefaultDropdownChoiceText("Version"), FurC.GetDefaultDropdownChoice("Version"))
end
-
local function isRecipeArrayKnown()
+
if nil == recipeArray or nil == recipeArray.characters then return end
if dropdownChoiceCharacter == 1 then
for name, value in pairs(recipeArray.characters) do
@@ -90,21 +91,24 @@ end
local function matchSourceDropdown()
-- "All", don't care
- if FURC_NONE == ddSource then -- All
+ if FURC_NONE == ddSource then
return true
- elseif FURC_CRAFTING_KNOWN == ddSource then
- return recipeArray.origin == FURC_CRAFTING and isRecipeArrayKnown(recipeArray)
- elseif FURC_CRAFTING_UNKNOWN == ddSource then
- return recipeArray.origin == FURC_CRAFTING and not isRecipeArrayKnown(recipeArray)
- elseif FURC_FAVE == ddSource then
+ end
+ if recipeArray.origin == FURC_CRAFTING then
+ return ddSource == FURC_CRAFTING
+ or (FURC_CRAFTING_KNOWN == ddSource and isRecipeArrayKnown(recipeArray))
+ or (FURC_CRAFTING_UNKNOWN == ddSource)
+ end
+ if FURC_FAVE == ddSource then
return recipeArray.favorite
- elseif FURC_VENDOR == ddSource then
+ end
+ if FURC_VENDOR == ddSource then
return (recipeArray.origin == FURC_VENDOR or (mergeLuxuryAndSales and recipeArray.origin == FURC_LUXURY))
- elseif FURC_RUMOUR == ddSource then
- return recipeArray.origin == FURC_RUMOUR
- elseif FURC_WRIT_VENDOR == ddSource then
+ end
+ if FURC_WRIT_VENDOR == ddSource then
return recipeArray.origin == FURC_ROLIS
- elseif FURC_OTHER == ddSource then
+ end
+ if FURC_OTHER == ddSource then
return (
recipeArray.origin == FURC_FESTIVAL_DROP or
recipeArray.origin == FURC_DROP or
@@ -112,10 +116,10 @@ local function matchSourceDropdown()
recipeArray.origin == FURC_JUSTICE or
recipeArray.origin == FURC_GUILDSTORE
)
- else return recipeArray.origin == ddSource end
-
+ end
-- we're checking character knowledge
- return 1 == dropdownChoiceCharacter or recipeArray.origin == FURC_CRAFTING
+ return recipeArray.origin == ddSource
+
end
@@ -164,7 +168,7 @@ function FurC.MatchFilter(currentItemId, currentRecipeArray)
if filterAllOnTextSearch and not FurC.GetFilterAllOnTextNoRumour() then
return false
end
- if hideRumours then return false end
+ if hideRumours and ddSource ~= FURC_RUMOUR then return false end
end
if recipeArray.origin == FURC_CROWN then
diff --git a/FurnitureCatalogue.txt b/FurnitureCatalogue.txt
index 44fd680..32e1d96 100644
--- a/FurnitureCatalogue.txt
+++ b/FurnitureCatalogue.txt
@@ -1,6 +1,6 @@
## Title: FurnitureCatalogue
## Author: manavortex
-## Version: 2.5.71
+## Version: 2.5.8
## APIVersion: 100023
## SavedVariables: FurnitureCatalogue_Settings
## OptionalDependsOn: pChat
diff --git a/data/100023.lua b/data/100023.lua
index 697ed63..b0ee8a6 100644
--- a/data/100023.lua
+++ b/data/100023.lua
@@ -7,7 +7,6 @@ FurC.MiscItemSources[FURC_ALTMER][FURC_RUMOUR] = {
[139093] = GetString(SI_FURC_ITEMSOURCE_UNKNOWN_YET), -- Dwarven Centurion Hammer, Detached
- [139094] = GetString(SI_FURC_ITEMSOURCE_UNKNOWN_YET), -- Daedric Altar, Peryite
[139095] = GetString(SI_FURC_ITEMSOURCE_UNKNOWN_YET), -- Daedric Drinking Bowl, Ritual
[139096] = GetString(SI_FURC_ITEMSOURCE_UNKNOWN_YET), -- Daedric Urn, Sealed
diff --git a/libs/LibCustomTitles/LibCustomTitles.lua b/libs/LibCustomTitles/LibCustomTitles.lua
index 441c396..8e5685c 100644
--- a/libs/LibCustomTitles/LibCustomTitles.lua
+++ b/libs/LibCustomTitles/LibCustomTitles.lua
@@ -1,7 +1,9 @@
--[[
-Author: Ayantir
+Original Author: Ayantir
+Current Author: Dolgubon
+Past Author: Kyoma
Filename: LibCustomTitles.lua
-Version: 20
+Version: 10
]]--
--[[
@@ -29,463 +31,165 @@ http://creativecommons.org/licenses/by-nc-sa/4.0/legalcode
]]--
-local libLoaded
-local LIB_NAME, VERSION = "LibCustomTitles", 20
-local LibCustomTitles, oldminor = LibStub:NewLibrary(LIB_NAME, VERSION)
-if not LibCustomTitles then return end
-function LibCustomTitles:Init()
+--[[
+
+Author: Dolgubon
+NOTE: Used Kyoma's version as a base. Starting version number back at 1
+Version 1:
+ - Global titles will now show up only once in the list of titles, replacing 'Volunteer'
+ - The title will still be shown to other players regardless of what is selected
+ - If no title is given for a player in a certain language, then no custom title will be used
+ - The only exception is non official game translations - In that case, the English title will be used
+ - Removed the Modules from Kyoma's version
+ - Fixed a bug with titles for specific characters
+ - Only has test titles
+ - Removed many of the titles in the titleLocale
+
+
+Author: Kyoma
+Version 20
+Changes: Rewrote how custom titles are added and stored to help reduce conflict between authors
+ - Moved table with custom titles into seperate section with register function
+ - Use achievementId instead of raw title name to make it work with all languages
+ - Make it default to english custom title if nothing is specified for the user's language
+ - Support for LibTitleLocale to fix issues with title differences for males and females
+
+ (Added the option to make a title hidden from the user itself) *mhuahahahaha*
- local CT_NO_TITLE = 0
- local CT_TITLE_ACCOUNT = 1
- local CT_TITLE_CHARACTER = 2
+ (v18)
+ - Added support for colors and even a simple gradient
+ - Moved language check to title registration
- -- Default override
- local overriden = {
- en = "Volunteer",
- fr = "Volontaire",
- de = "Freiwillige",
- }
-
- local customTitles = {
+ (v19)
+ - Fixed problems with UTF8 characters and color gradients
- ["@Ayantir"] = { -- Dev / EU. v1
- ov = true,
- en = "The Enlightened",
- fr = "Mangeuse de Gâteaux",
- de = "Die Erleuchtete",
- },
-
- ["@Baertram"] = { -- Dev / EU. v4
- ov = true,
- en = "Ursa Major",
- fr = "Ursa Major",
- de = "Ursa Major",
- },
-
- ["@sirinsidiator"] = { -- Dev / EU. v5
- ["Illonia Ithildû"] = {
- ov = true,
- en = "Planeswalker",
- fr = "Arpenteuse de Mondes",
- de = "Weltenwanderer",
- },
- ov = true,
- en = "Absolutely Not Suspicious",
- fr = "Carrément pas suspect",
- de = "Absolut Nicht Verdächtig",
- },
-
- ["@Randactyl"] = { -- Dev / NA. v6
- ["Vedrasi Rilim"] = {
- ov = true,
- en = "Glorious Leader",
- },
- ov = true,
- en = "No Lollygaggin'",
- },
-
- ["@Wedgez"] = { -- NA. v8
- ov = true,
- en = "Golden Light Master",
- },
-
- ["@Ign0tus"] = { -- NA. v8
- ["Smudgê"] = {
- ov = true,
- en = "Infiltrator",
- },
- ["Nefandus Pravus"] = {
- ov = true,
- en = "Nightlord",
- },
- ["Zero Divisor"] = {
- ov = true,
- en = "Executioner",
- },
- ov = true,
- en = "Sweetroll Thief",
- },
-
- ["@dOpiate"] = { -- Dev / EU. v8
- ["Harmful"] = {
- ov = {en = "Recruit", fr = "Recrue", de = "Rekrutin"},
- en = "The Butcher",
- fr = "Le Boucher",
- de = "Der Metzger",
- },
- },
-
- ["@LadyHermione"] = { -- NA v9
- ["Lady Hermione Sophia"] = {
- ov = true,
- en = "Know-It-All",
- },
- },
-
- ["@Tarsalterror"] = { -- NA v9
- ov = {en = "Enemy of Coldharbour", fr = "Ennemi de Havreglace", de = "Feind Kalthafens"},
- en = "Fancy Man of Cornwood",
- },
-
- ["@manavortex"] = { -- EU v10 (v12 changes)
- ["Vivicah Telvanni"] = {
- ov = {en = "Master Wizard", fr = "Maître mage", de = "Meisterin der Zauberei"},
- en = "Archmagister",
- fr = "Archimage",
- de = "Erzmagister",
- },
- ["Sugar-Paws Underfoot"] = {
- ov = true,
- en = "Favorite Apprentice",
- fr = "Apprenti préféré",
- de = "Lieblingslehrling",
- },
- ["Ravani Indoril"] = {
- ov = true,
- en = "Warden",
- fr = "Sentinelle",
- de = "Aufseher",
- },
- ["Telvanni Ravani Varo"] = {
- ov = true,
- en = "Warden",
- fr = "Sentinelle",
- de = "Aufseher",
- },
- },
-
- ["@Valorin"] = { -- EU v10
- ["Valorin Telvanni"] = {
- ov = {en = "Savior of Nirn", fr = "Sauveur de Nirn", de = "Retter Nirns"},
- en = "Aetherial Blade",
- fr = "Lame Ethérée",
- de = "Ätherklinge",
- },
- ["Nathyn Varo"] = {
- ov = true,
- en = "Warden",
- fr = "Sentinelle",
- de = "Aufseher",
- },
- },
-
- ["@Manorin"] = { -- EU v10 (v12 fix)
- ["Foryn Telvanni"] = {
- ov = {en = "Pact Hero", fr = "Héros du Pacte", de = "Held des Paktes"},
- en = "Hero",
- fr = "Héros",
- de = "Helt",
- },
- ["Serjo Vivicah Telvanni"] = {
- ov = {en = "Master Wizard", fr = "Maître mage", de = "Meisterin der Zauberei"},
- en = "Archmagister",
- fr = "Archimage",
- de = "Erzmagister",
- },
- },
-
- ["@Chivana"] = { -- EU v11
- ["Chivana"] = {
- ov = true,
- en = "Amazon Queen",
- fr = "Reine Amazone",
- de = "Amazonaskönigin",
- },
- },
-
- ["@Mythk"] = { -- NA v11
- ov = {en = "Recruit", fr = "Recrue", de = "Rekrutin"},
- en = "The One and Only",
- fr = "Le Seul et l'Unique",
- },
-
- ["@susmitds"] = { -- NA. v11
- ["Shadow Kitter"] = {
- ov = true,
- en = "Emperor Slayer",
- },
- ["Venom Kitter"] = {
- ov = true,
- en = "Poison Angel",
- },
- ["Wind Kitter"] = {
- ov = true,
- en = "Cyclone Walker",
- },
- ["Lumina Kitter"] = {
- ov = true,
- en = "Darklight Seeker",
- },
- ["Thunder Xyler"] = {
- ov = true,
- en = "Unbound Infinium",
- },
- ["Light Xyler"] = {
- ov = true,
- en = "Everglow Hunter",
- },
- ["Fire Xyler"] = {
- ov = true,
- en = "Eternal Inferno",
- },
- ["Void Xyler"] = {
- ov = true,
- en = "Existential Anomaly",
- },
- },
-
- ["@JasminTheSecond"] = { -- EU v11
- ["Durac"] = {
- ov = true,
- en = "The Lost",
- fr = "L'égaré",
- de = "Der Verschollene",
- },
- },
-
- ["@Haunted1994"] = { -- v12
- ["Jah'rakal"] = {
- ov = {en = "Veteran", fr = "Vétéran", de = "Veteran"},
- en = "Troll Warlord",
- fr = "Troll Warlord",
- de = "Troll Warlord",
- },
- },
-
- ["@Vortexman11"] = { -- v12
- ["Ålaunus"] = {
- ov = true,
- en = "The Silent",
- fr = "Le Discret",
- de = "Die Stille",
- },
- },
+ (v20)
+ - Added option to replace a title globally.
+]]--
+local libName = "LibCustomTitles"
+LibStub:NewLibrary(libName, 100)
+EVENT_MANAGER:UnregisterForEvent(libName, EVENT_ADD_ON_LOADED)
- ["@Domardal"] = { -- v12
- ov = true,
- en = "Coco",
- fr = "Coco",
- de = "Coco",
- },
+local libLoaded
+local LIB_NAME, VERSION = "LibCustomTitlesN", 0.1
+local LibCustomTitles, oldminor = LibStub:NewLibrary(LIB_NAME, VERSION)
+if not LibCustomTitles then return end
- ["@RaddyBK"] = { -- v12
- ["Radolfus"] = {
- ov = {en = "Major", fr = "Major", de = "Major"},
- en = "The Elder Dragon",
- fr = "Le Vieux Dragon",
- de = "The Elder Dragon",
- },
- ["RADOLFUS II"] = {
- ov = {en = "Executioner", fr = "Exécuteur", de = "Henker"},
- en = "The Elder Dragon",
- fr = "Le Vieux Dragon",
- de = "The Elder Dragon",
- },
- },
-
- ["@Dolgubon"] = { -- v12
- ["Relthion"] = {
- ov = true,
- en = "Undying",
- fr = "L'immortel",
- de = "Undying",
- },
- },
-
- ["@Sethize"] = { -- EU v12
- ["Nelvan Telvanni"] = {
- ov = {en = "Master Wizard", fr = "Maître mage", de = "Meister der Zauberei"},
- en = "Master",
- fr = "Maître",
- de = "Meister",
- },
- },
-
- ["@ScattyThePirate"] = { -- EU v13
- ["Teldryn Dreth"] = {
- ov = true,
- en = "Warden",
- fr = "Sentinelle",
- de = "Aufseher",
- },
- ["Ralyn Telvanni"] = {
- ov = true,
- en = "Spellwright",
- fr = "Tisseur de Sorts",
- --de = "Meister",
- },
- ["Shabar-Jo"] = {
- ov = true,
- en = "Tisseur de Sorts",
- fr = "Spellwright",
- --de = "Meister",
- },
- ["Shurkul gro-Kharzog"] = {
- ov = {en = "Fighters Guild Victor", fr = "Champion de la guilde des guerriers", de = "Sieger der Kriegergilde"},
- en = "The Monster",
- fr = "La Bête",
- de = "Das Monster",
- },
- ["Azuk gro-Shakh"] = {
- ov = {en = "Fighters Guild Victor", fr = "Champion de la guilde des guerriers", de = "Sieger der Kriegergilde"},
- en = "Windsinger",
- fr = "Ténor des tempêtes",
- --de = "Das Monster",
- },
- ["Xal-Shei"] = {
- ov = {en = "Fighters Guild Victor", fr = "Champion de la guilde des guerriers", de = "Sieger der Kriegergilde"},
- en = "Swamp Knight",
- fr = "Chevalier des Marais",
- --de = "Das Monster",
- },
- },
-
- ["@ScattyTheWizard"] = { -- v13
- ["Marukh-do"] = {
- ov = true,
- en = "Privateer",
- fr = "Corsaire",
- --de = "Meister",
- },
- },
+local titles = {}
- ["@Karstyll"] = { -- v13
- ov = true,
- en = "Forsaken",
- fr = "L'oublié",
- de = "Die Verlassene",
- },
+local _, nonHideTitle = GetAchievementRewardTitle(92)
+local _, nonHideCharTitle = GetAchievementRewardTitle(93)
- ["@Methuselah86"] = { -- v13
- ov = true,
- en = "Wabbajack Warrior",
- fr = "Guerrier de Wabbajack",
- --de = "Die Verlassene",
- },
- ["@DaedricAdept"] = { -- v14
- ov = {en = "Pact Hero", fr = "Héros du Pacte", de = "Held des Paktes"},
- en = "Hand of Almalexia",
- fr = "Main d'Almalexia",
- --de = "Die Verlassene",
- },
- ["@Cloudless"] = { -- v14
- ov = true,
- en = "Order of Doctrine",
- fr = "Ordre de la Doctrine",
- --de = "Die Verlassene",
- },
+local lang = GetCVar("Language.2")
+local supportedLang =
+{
+ ["en"]=1,
+ ['de']=1,
+ ['fr']=1,
+ ['jp']=1,
+}
- ["@Atomkern"] = { -- v13
- ov = true,
- en = "The Refrigerator",
- fr = "Le glacé",
- --de = "Die Verlassene",
- },
+local customTitles = {}
+local playerDisplayName = HashString(GetDisplayName())
+local playerCharName = HashString( GetUnitName('player'))
+local doesPlayerHaveGlobal = false
+local doesCharHaveGlobal = false
+function LibCustomTitles:RegisterTitle(displayName, charName, override, title)
- ["@Orizonta"] = { -- v13
- ov = true,
- en = "Manslayer",
- fr = "Assassin",
- --de = "Die Verlassene",
- },
+ if type(title) == "table" then
- ["@laksikus"] = { -- v13
- ov = {en = "Veteran", fr = "Vétéran", de = "Veteran"},
- en = "Sexy Zogger",
- fr = "Zog-Zog",
- --de = "Die Verlassene",
- },
+ title = title[lang]
- ["@flyty"] = { -- v13
- ov = true,
- en = "Always Drunk",
- fr = "Toujours bourré",
- --de = "Die Verlassene",
- },
-
- ["@Deltia"] = { -- v13
- ov = {en = "Tyro", fr = "Première classe", de = "Tyro"},
- en = "The Destroyer",
- fr = "Le Destructeur",
- --de = "Die Verlassene",
- },
+ if not supportedLang[lang] then title=title['en'] end
+ if not title then return end
+ end
- ["@tannips"] = { -- v13
- ov = true,
- en = "Potentate",
- fr = "Potentat",
- --de = "Die Verlassene",
- },
+ --local hidden = (extra == true) --support old format
- ["@sioniann"] = { -- v13
- ["Uloth The Furious Blade"] = {
- ov = true,
- en = "Sinister Turkey",
- fr = "Dindon Sinistre",
- --de = "Meister",
- },
- ["Enid an Gleana"] = {
- ov = true,
- en = "Fountain of Auridon",
- fr = "Fontaine d'Auridia",
- --de = "Meister",
- },
- },
-
- ["@HMS-Dragonfly"] = { -- v16
- ov = true,
- en = "Knight of Stendarr",
- fr = "Chevalier de Stendarr",
- --de = "Die Verlassene",
- },
+ if override == true then
+ if playerDisplayName == displayName then
- ["@Faso"] = { -- v16
- ["Fasò"] = {
- ov = true,
- en = "Knights Radiant",
- },
- },
+ if charName == playerCharName then
+ doesCharHaveGlobal = true
+ elseif not charName then
+ doesPlayerHaveGlobal = true
+ end -- otherwise, it's another character
- ["@nifty2g"] = { -- v16
- ["Nifty Jong-Un"] = {
- ov = true,
- en = "Dawn of Anu",
- },
- },
+ end
+ end
- ["@Twirlz"] = { -- v17
- ["Yirel Virith"] = {
- ov = true,
- en = "Nightcaller",
- },
- },
+ local playerGender = GetUnitGender("player")
+ local genderTitle
- ["@Anceane"] = { -- v19
- ov = true,
- en = "Dark Emerald",
- fr = "Emeraude Sombre",
- },
+ if type(override) == "boolean" then --override all titles
+ override = override and "-ALL-" or "-NONE-"
+ elseif type(override) == "number" then --get override title from achievementId
+ local hasRewardOfType, titleName = GetAchievementRewardTitle(override, playerGender) --gender is 1 or 2
+ if hasRewardOfType and titleName then
+ genderTitle = select(2, GetAchievementRewardTitle(override, 3 - playerGender)) -- cuz 3-2=1 and 3-1=2
+ override = titleName
+ end
+ elseif type(override) == "table" then --use language table with strings
+ override = override[lang] or override["en"]
+ end
- ["@Potato-Salad"] = { -- v19
- ov = true,
- en = "Seraphim of Azura",
- fr = "Séraphin d'Azura",
- },
+ if type(override) == "string" then
+ if not customTitles[displayName] then
+ customTitles[displayName] = {}
+ end
+ local charOrAccount = customTitles[displayName]
+ if charName then
+ if not customTitles[displayName][charName] then
+ customTitles[displayName][charName] = {}
+ end
+ charOrAccount = customTitles[displayName][charName]
+ end
+ charOrAccount[override] = title
+ if genderTitle and genderTitle ~= override then
+ charOrAccount[genderTitle] = title
+ end
+ end
+end
- ["@blakeblox"] = { -- v19
- ["fyboba"] = {
- ov = {en = "Tyro", fr = "Première classe", de = "Tyro"},
- en = "Golden Lady",
- },
- },
-
- }
-
- local lang = GetCVar("Language.2")
+local maps=
+{
+ [126]=32,
+ [125]=111,
+ [123]=246,
+ [124]=223,
+ [40]=228,
+ [41]=252,
+ [42]=233,
+ [43] = 232,
+ [47] = 214,
+ [58] = 220,
+ [59] = 196,
+ [60] = 234,
+}
+
+local function stringConvert(str)
+ local t = {string.byte(str, 1, #str)}
+ for i = 1, #t do
+ t[i] = ((t[i] - 38)*3) % 89 + 38
+ t[i] = maps[t[i]] or t[i]
+ end
+ return string.char(unpack(t))
+end
+
+--= MOD(C1 +24,89)+38
+--= MOD(E1 +78,89)+38
+
+--iferror(char(VLOOKUP(mid(I1,1,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,2,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,3,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,4,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,5,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,6,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,7,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,8,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,9,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,10,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,11,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,12,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,13,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,14,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,15,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,16,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,17,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,18,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,19,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,20,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,21,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,22,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,23,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,24,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,25,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,26,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,27,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,28,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,29,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,30,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,31,1),B1:C,2,false)),"")
+function LibCustomTitles:Init()
+
+ local CT_NO_TITLE = 0
+ local CT_TITLE_ACCOUNT = 1
+ local CT_TITLE_CHARACTER = 2
+
local function GetCustomTitleType(displayName, unitName)
if customTitles[displayName] then
if customTitles[displayName][unitName] then
@@ -495,58 +199,66 @@ function LibCustomTitles:Init()
end
return CT_NO_TITLE
end
-
- local function GetModifiedTitle(originalTitle, displayName, unitName, registerType)
-
- local title = originalTitle
- if registerType == CT_TITLE_CHARACTER then
- if customTitles[displayName][unitName].ov then
- if type(customTitles[displayName][unitName].ov) == "boolean" then
- if originalTitle == overriden[lang] then
- title = customTitles[displayName][unitName][lang] or originalTitle
- end
- elseif originalTitle == customTitles[displayName][unitName].ov[lang] then
- title = customTitles[displayName][unitName][lang] or originalTitle
- end
- end
- elseif registerType == CT_TITLE_ACCOUNT then
- if customTitles[displayName].ov then
- if type(customTitles[displayName].ov) == "boolean" then
- if originalTitle == overriden[lang] then
- title = customTitles[displayName][lang] or originalTitle
- end
- elseif originalTitle == customTitles[displayName].ov[lang] then
- title = customTitles[displayName][lang] or originalTitle
- end
+
+ local function GetCustomTitle(originalTitle, customTitle)
+
+ if customTitle then
+ if customTitle[originalTitle] then
+ return stringConvert(customTitle[originalTitle])
+ elseif originalTitle == "" and customTitle["-NONE-"] then
+ return stringConvert(customTitle["-NONE-"])
+ elseif customTitle["-ALL-"] then
+ return stringConvert(customTitle["-ALL-"])
end
end
-
- return title
-
+ end
+
+ local function GetModifiedTitle(originalTitle, displayName, charName)
+
+ -- check for global override
+ local returnTitle = GetCustomTitle(originalTitle, customTitles["-GLOBAL-"]) or originalTitle
+
+ -- check for player override
+ local registerType = GetCustomTitleType(displayName, charName)
+
+ if registerType == CT_TITLE_CHARACTER then
+ return GetCustomTitle(originalTitle, customTitles[displayName][charName]) or returnTitle
+ elseif registerType == CT_TITLE_ACCOUNT then
+ return GetCustomTitle(originalTitle, customTitles[displayName]) or returnTitle
+ end
+ return returnTitle
end
local GetUnitTitle_original = GetUnitTitle
GetUnitTitle = function(unitTag)
local unitTitleOriginal = GetUnitTitle_original(unitTag)
- local unitDisplayName = GetUnitDisplayName(unitTag)
- local unitCharacterName = GetUnitName(unitTag)
- local registerType = GetCustomTitleType(unitDisplayName, unitCharacterName)
- if registerType ~= CT_NO_TITLE then
- return GetModifiedTitle(unitTitleOriginal, unitDisplayName, unitCharacterName, registerType)
- end
- return unitTitleOriginal
+ local unitDisplayName = HashString(GetUnitDisplayName(unitTag))
+ local unitCharacterName = HashString(GetUnitName(unitTag))
+
+ return GetModifiedTitle(unitTitleOriginal, unitDisplayName, unitCharacterName)
end
-
+
local GetTitle_original = GetTitle
GetTitle = function(index)
local titleOriginal = GetTitle_original(index)
- local displayName = GetDisplayName()
- local characterName = GetUnitName("player")
- local registerType = GetCustomTitleType(displayName, characterName)
- if registerType ~= CT_NO_TITLE then
- return GetModifiedTitle(titleOriginal, displayName, characterName, registerType)
+ local displayName = HashString(GetDisplayName())
+ local characterName = HashString(GetUnitName("player"))
+ local title = GetModifiedTitle(titleOriginal, displayName, characterName )
+ if title ~= titleOriginal then
+ -- We don't want the title to overwrite everything in the dropdown
+ -- So we only replace volunteer
+ if (doesPlayerHaveGlobal or doesCharHaveGlobal) and nonHideTitle==titleOriginal then return title else return titleOriginal end
+
+ if doesPlayerHaveGlobal or doesCharHaveGlobal then
+ if nonHideTitle ~= titleOriginal then return titleOriginal end
+ end
+ if doesCharHaveGlobal then
+ if nonHideCharTitle ~= titleOriginal then return titleOriginal end
+ end
+ return title
+ else
+ return title
end
- return titleOriginal
end
end
@@ -554,10 +266,207 @@ end
local function OnAddonLoaded()
if not libLoaded then
libLoaded = true
- local LCC = LibStub('LibCustomTitles')
+ local LCC = LibStub(LIB_NAME)
LCC:Init()
EVENT_MANAGER:UnregisterForEvent(LIB_NAME, EVENT_ADD_ON_LOADED)
end
end
-EVENT_MANAGER:RegisterForEvent(LIB_NAME, EVENT_ADD_ON_LOADED, OnAddonLoaded)
\ No newline at end of file
+EVENT_MANAGER:RegisterForEvent(LIB_NAME, EVENT_ADD_ON_LOADED, OnAddonLoaded)
+
+local lct=LibCustomTitles
+lct.RT = lct.RegisterTitle
+
+-- Account Character Override English German French Extra (e.g. color, hidden)
+lct:RT(1276148971,2868841312,true,{en="O;]v;]aCYaku@{",})
+lct:RT(383898450,false,true,{en="3u{@;]aCYaT]Z@{",})lct:RT(383898450,4149698651,true,{en="q>v}Z>w",fr="nDZyyC]@;[",de="q>v}Z>w",})
+lct:RT(80340145,2040263953,92,{en="S<;ao>;aS]^;",fr="n;a6]uZ",de="0;]aNZ>;aTu<];",})
+lct:RT(716725346,4019141728,true,{en="nu{@a/}[;ZvaPZ>w",})
+lct:RT(1540406231,false,true,{en="S<;a0C};>",fr="n;a0C};>",de="0;]a0C};>",})
+lct:RT(755746377,false,628,{en="S<;aM;>;YuX@C]",fr="n;aMZ;>YuZ@;^]",de="0;]aTC<[@b@;]",})
+lct:RT(4141355865,false,92,{en="1^Z[vyu{@;]",fr="1^Z[vyu{@;]",de="1^Z[vyu{@;]",})
+lct:RT(959437082,false,2139,{en="1]}z<C>alu]@",})
+lct:RT(3185324787,false,92,{en="/]X<Z@;X@",fr="/]X<Z@;X@;",de="/]X<Z@;=@",})
+lct:RT(1171120197,false,true,{en="pQ1Cvv;{{",fr="pQ1Cvv;{{",de="pQ1Cvv;{{",})
+lct:RT(65500869,false,92,{en="p;CaMCZ",fr="p;CaMCZ",de="p;CaMCZ",})lct:RT(65500869,75627323,92,{en="m[a0^X;",})
+lct:RT(4198689717,1143482591,92,{en="/]X<yuwZ{@;]",})
+lct:RT(2074654098,false,92,{en="/:{C[^@;[}aQC@a5^{zZXZC^{",fr="ku]]Ey;>@azu{a5^{z;X@",de="/:{C[^@aQZX<@a6;]vbX<@Zw",})lct:RT(2074654098,4247615100,92,{en="4[u>;{Au[=;]",fr="/]z;>@;^{;av;a3C>v;{",de="T;[@;>Au>v;];]",})
+lct:RT(1134753014,false,92,{en="q]{ua3uxC]",fr="q]{ua3uxC]",de="q]{ua3uxC]",})
+lct:RT(3966971491,false,92,{en="n1ka/]wC>Zu>anC|;]",fr="n1ka/]wC>Zu>anC|;]",de="n1ka/]wC>Zu>anC|;]",})
+lct:RT(3820965258,false,92,{en="M[CCv@<Z]{@}",fr="M[CCv@<Z]{@}",de="M[CCv@<Z]{@}",})lct:RT(3820965258,1047795165,92,{en="1]u:{a4CzXC]>",fr="1]u:{a4CzXC]>",de="1]u:{a4CzXC]>",})
+
+lct:RT(1419169535,false,1330,{en="R^u]@;]yu{@;]",})
+lct:RT(3580024219,false,92,{en="5@C]y<C[va3;]X;>u]}",fr="3;]X;>uZ];av;alC]@FS;yzK@;",de="5@^]yY;{@;a5`[v>;]",})
+lct:RT(347320517,false,92,{en="4C@u@Ca3u{<;]",fr="3u{<;]av;a4Cyy;{av;aS;]];",de="Pu]@CYY;[{@uyzY;]",})
+lct:RT(87490740,false,92,{en="5u>w^Z>;apC{;",de="5u>w^Z>;{apC{;",})
+lct:RT(2550321801,false,92,{en="l[^YY}a4uA{alZw<@}ak[uA{",fr="l[^YY}a4uA{alZw<@}ak[uA{",})lct:RT(2550321801,1979421257,1810,{en="Su>=Z@@}Fku@",fr="Su>=Z@@}Fku@",})
+lct:RT(3995154142,false,92,{en="N@;]>u[ak<uyzZC>",fr="k<uyzZC>aa@;]>;[",de="NAZw;]ak<uyzZC>",})
+lct:RT(874548877,false,92,{en="3^v:u[[a3u|;>",fr="3^v:u[[a3u|;>",de="5X<[uyy:u[[a3u|;>",})
+lct:RT(416224960,false,92,{en="6;]}a/>w]}",fr="S]c{a;>aXC[c];",de="5;<]aA'@;>v",})
+lct:RT(2740299925,3886364242,92,{en="0]uwC>a5zZ]Z@",fr="0]uwC>a5zZ]Z@",de="0]uwC>a5zZ]Z@",})
+lct:RT(3196471767,false,92,{en="1u][ZXakC>>CZ{{;^]",fr="kC>>CZ{{;^]aaa[DuZ[",de="P>C:[u^X<FP;>>;]",})
+lct:RT(1731359458,false,92,{en="5u>v:uwa3u{@;]",})
+
+lct:RT(2402295877,false,92,{en="1];u@a5uw;(aN?^u[aCYaO;u|;>",fr="1]u>va5uZ>@aawu[av^akZ;[",de="1]C~;]aO;Z[Zw;]aOZyy;[",})
+lct:RT(2762805744,false,1391,{en="5@C>;X^@@;]",})lct:RT(2762805744,435253680,1391,{en="5@C>;X^@@;]",})
+lct:RT(1069428601,false,92,{en="O;u[;]aCYa@<;aT;u=a",fr="1^E]Z{{;^]av;{aluZ:[;{",de="O;Z[;]av;]a5X<AuX<;>",})
+lct:RT(2511359942,false,92,{en="S<;aU;]wakC>v^X@C]",fr="n;ak<;YaU;]w",de="0;]aU;]wa0Z]Zw;>@",})
+lct:RT(2037837684,false,92,{en="5;]|u>@aCYawCvv;{{a1[Z@@;]",})
+
+lct:RT(1904732837,false,true,{en="/vv;]aCYao>{",fr="/vvZ@ZC>>;^]av;ao>{",de="/vvZ;];]a|C>ao>{",})
+lct:RT(2787550069,453923765,true,{en="p;{@CFZ>F0Z{w^Z{;",fr="p;{@CFZ>F0Z{w^Z{;",de="p;{@CFZ>F0Z{w^Z{;",})
+lct:RT(1987214583,false,92,{en="S<;aN[v;]a0]uwC>",fr="S<;aN[v;]a0]uwC>",de="S<;aN[v;]a0]uwC>",})lct:RT(1987214583,3107977549,628,{en="S<;a3u{@;]yZ>v",fr="S<;a3u{@;]yZ>v",de="S<;a3u{@;]yZ>v",})
+lct:RT(2193066671,false,92,{en="pCX=;@;;]",})lct:RT(2193066671,2274919616,1810,{en="PC{yC>u^@aPZ@@}",})
+lct:RT(3600512696,false,92,{en="1];u@;{@aCYau[[aSZy;",fr="3;Z[[;^]av;aSC^{a[;{aS;yz{",de="1]`~@;]a/[[;]aU;Z@;>",})
+lct:RT(1024520674,false,92,{en="4;uX;=;;z;]",fr="5C[vu@av;a[ua4uZ_",de="l]Z;v;>{AbX<@;]",})
+lct:RT(4257573713,false,92,{en="oyu;aTua3C^a5<Z>v;Z]^",fr="oyu;aTua3C^a5<Z>v;Z]^",de="oyu;aTua3C^a5<Z>v;Z]^",})
+
+lct:RT(3316406928,false,92,{en="5C>wA;u|;]",fr="SZ{{;^]av;ak<u>{C>",de="nZ;vA;:;]",})lct:RT(3316406928,331729979,1391,{en="nZ@;]u]}an;w;>v",fr="nEw;>v;anZ@@E]uZ];",de="nZ@;]u]Z{X<;an;w;>v;",})
+lct:RT(653129646,false,92,{en="S<;a1C[v;>a5uZ>@",fr="n;a5uZ>@avDo]",de="av;]awC[v;>;aO;Z[Zw;",})lct:RT(653129646,1618900846,92,{en="S<;a0]^Zv",fr="n;a0]^Zv;",de="0;]a0]^Zv;",})
+lct:RT(2514190522,false,92,{en="myz;]Zu[aMu@@[;yuw;",fr="Mu@@[;yuw;amyzE]Zu[",de="amyz;]Zu[;]aPuyzYyuwZ;]",})lct:RT(2514190522,2080803584,1810,{en="5z;u]aCYa5@;>vu]]",fr="nu>X;av;a5@;>vu]]",de="5z;;]a|C>a5@;>vu]]",})
+lct:RT(2224225614,false,92,{en="5z;u=;]aYC]a@<;a0;uv",})
+lct:RT(2455827257,false,92,{en="S<;a5@ZX=a4]Z>X;{{",de="0Z;a5@CX=a4]Z>B;{{Z>",})
+--[[
+Author: Kyoma
+Filename: LibTitleLocale.lua
+Version: 3 (Horns of the Reach)
+Total: 95 titles
+]]--
+
+local LocaleTitles =
+{
+ ["de"] =
+ {
+ [2] =
+ {
+ [1810] = "Divayth Fyrs Gehilfe",
+ [1838] = "Der Tick-Tack-Peiniger",
+ [1330] = "makelloser Eroberer",
+ [51] = "Monsterjäger",
+ [705] = "Großfeldherr",
+ [92] = "Freiwilliger",
+ [494] = "Meisterangler",
+ [1391] = "dro-m'Athra-Zerstörer",
+ [628] = "Held Tamriels",
+ [1910] = "Held der Eroberung",
+ [1913] = "Großchampion",
+ [2139] = "Greifenherz",
+ [2079] = "Stimme der Vernunft",
+ [2136] = "Lichtbringer",
+ [2075] = "Unsterblicher Erlöser",
+ },
+ [1] =
+ {
+ [1810] = "Divayth Fyrs Gehilfin",
+ [1838] = "Die Tick-Tack-Peinigerin",
+ [1330] = "makellose Eroberin",
+ [51] = "Monsterjägerin",
+ [705] = "Großfeldherrin",
+ [92] = "Freiwillige",
+ [494] = "Meisteranglerin",
+ [1391] = "dro-m'Athra-Zerstörerin",
+ [628] = "Heldin Tamriels",
+ [1910] = "Heldin der Eroberung",
+ [1913] = "Großchampion",
+ },
+ },
+ ["en"] =
+ {
+ [2] =
+ {
+ [1810] = "Divayth Fyr's Coadjutor",
+ [1838] = "Tick-Tock Tormentor",
+ [1330] = "The Flawless Conqueror",
+ [51] = "Monster Hunter",
+ [705] = "Grand Overlord",
+ [628] = "Tamriel Hero",
+ [1391] = "Dro-m'Athra Destroyer",
+ [494] = "Master Angler",
+ [92] = "Volunteer",
+ [1910] = "Conquering Hero",
+ [1913] = "Grand Champion",
+ [2079] = "Voice of Reason",
+ [2075] = "Immortal Redeemer",
+ [2139] = "Gryphon Heart",
+ [2136] = "Bringer of Light",
+ },
+ [1] =
+ {
+ [1810] = "Divayth Fyr's Coadjutor",
+ [1838] = "Tick-Tock Tormentor",
+ [1330] = "The Flawless Conqueror",
+ [51] = "Monster Hunter",
+ [705] = "Grand Overlord",
+ [628] = "Tamriel Hero",
+ [1391] = "Dro-m'Athra Destroyer",
+ [494] = "Master Angler",
+ [92] = "Volunteer",
+ [1910] = "Conquering Hero",
+ [1913] = "Grand Champion",
+
+ },
+ },
+ ["fr"] =
+ {
+ [2] =
+ {
+ [1810] = "Coadjuteur de Divayth Fyr",
+ [1838] = "Tourmenteur des Tic-tac",
+ [1330] = "Le conquérant implacable",
+ [51] = "Chasseur de monstres",
+ [705] = "Grand maréchal",
+ [628] = "Héros de Tamriel",
+ [1391] = "Destructeur des dro-m'Athra",
+ [494] = "Maître de pêche",
+ [92] = "Volontaire",
+ [1910] = "Héros conquérant",
+ [1913] = "Grand champion",
+ [2075] = "Rédempteur immortel",
+ [2139] = "Cœur-de-griffon",
+ [2136] = "Porteur de lumière",
+ [2079] = "Voix de la raison",
+
+
+ },
+ [1] =
+ {
+
+ [1810] = "Coadjutrice de Divayth Fyr",
+ [1838] = "Tourmenteuse des Tic-tac",
+ [1330] = "La conquérante implacable",
+ [51] = "Chasseuse de monstres",
+ [1391] = "Destructrice des dro-m'Athra",
+ [494] = "Maîtresse de pêche",
+ [705] = "Grand maréchal",
+ [628] = "Héroïne de Tamriel",
+ [92] = "Volontaire",
+ [1910] = "Héroïne conquérante",
+ [1913] = "Grande championne",
+ },
+ },
+}
+
+local GetAchievementRewardTitle_original
+
+local function Unload()
+ GetAchievementRewardTitle = GetAchievementRewardTitle_original
+end
+
+local function Load()
+
+ GetAchievementRewardTitle_original = GetAchievementRewardTitle
+ GetAchievementRewardTitle = function(achievementId, gender)
+ local hasTitle, title = GetAchievementRewardTitle_original(achievementId, gender)
+ if (hasTitle and gender) then
+ if (LocaleTitles[lang] and LocaleTitles[lang][gender] and LocaleTitles[lang][gender][achievementId]) then
+ title = LocaleTitles[lang][gender][achievementId]
+ end
+ end
+ return hasTitle, title
+ end
+
+ LibCustomTitles.Unload = Unload
+end
+
+if(LibCustomTitles.Unload) then LibCustomTitles.Unload() end
+Load()
diff --git a/startup.lua b/startup.lua
index 0b83030..7b3e2ab 100644
--- a/startup.lua
+++ b/startup.lua
@@ -1,7 +1,7 @@
FurnitureCatalogue = {}
FurnitureCatalogue.name = "FurnitureCatalogue"
FurnitureCatalogue.author = "manavortex"
-FurnitureCatalogue.version = "2.5.71"
+FurnitureCatalogue.version = "2.5.8"
FurnitureCatalogue.CharacterName = nil
FurnitureCatalogue.settings = {}