diff --git a/IIfA/IIfA.lua b/IIfA/IIfA.lua index dc92d80..47dbf7e 100644 --- a/IIfA/IIfA.lua +++ b/IIfA/IIfA.lua @@ -26,6 +26,7 @@ IIfA.bFilterOnSetName = false IIfA.searchFilter = "" IIfA.trackedHouses = {} IIfA.EMPTY_STRING = "" +IIfA.BagSlotInfo = {} -- 8-4-18 AM - make sure the table exists in case something tries to reference it before it's created. local LMP = LibStub("LibMediaProvider-1.0") local BACKPACK = ZO_PlayerInventoryBackpack @@ -485,9 +486,9 @@ function IIfA:ScanCurrentCharacterAndBank() IIfA:ScanBank() IIfA:ScanCurrentCharacter() - zo_callLater(function() - IIfA:MakeBSI() - end, 5000) +-- zo_callLater(function() +-- IIfA:MakeBSI() +-- end, 5000) end function IIfA:MakeBSI() diff --git a/IIfA/IIfABackpack.lua b/IIfA/IIfABackpack.lua index ec06de8..e75c900 100644 --- a/IIfA/IIfABackpack.lua +++ b/IIfA/IIfABackpack.lua @@ -940,6 +940,9 @@ function IIfA:FMC(control, WhoSeesIt) [56] = 2044, -- Apostle [57] = 2045, -- Ebonshadow [60] = 2120, -- Worm Cult + [61] = 2186, -- Psijic + [62] = 2187, -- Sapiarch + [64] = 2285, -- Pyandonean } -- local i, a diff --git a/IIfA/libs/LibCustomTitles/LibCustomTitles.lua b/IIfA/libs/LibCustomTitles/LibCustomTitles.lua index bf76cf8..7149d51 100644 --- a/IIfA/libs/LibCustomTitles/LibCustomTitles.lua +++ b/IIfA/libs/LibCustomTitles/LibCustomTitles.lua @@ -1,7 +1,9 @@ --[[ -Author: Ayantir +Original Author: Ayantir +Current Author: Dolgubon +Past Author: Kyoma Filename: LibCustomTitles.lua -Version: 11 +Version: 10 ]]-- --[[ @@ -29,195 +31,170 @@ http://creativecommons.org/licenses/by-nc-sa/4.0/legalcode ]]-- + +--[[ + +Author: Dolgubon +NOTE: Used Kyoma's version as a base. Starting version number back at 1 +Version 3: + - Fixed some issues with language and players using a non official langauge + +Version 2: + - Fixed an issue where titles that did not globally replace were not showing up for the player with the title + +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 + + (v18) + - Added support for colors and even a simple gradient + - Moved language check to title registration + + (v19) + - Fixed problems with UTF8 characters and color gradients + + (v20) + - Added option to replace a title globally. +]]-- +local libName = "LibCustomTitles" +LibStub:NewLibrary(libName, 100) +EVENT_MANAGER:UnregisterForEvent(libName, EVENT_ADD_ON_LOADED) + local libLoaded -local LIB_NAME, VERSION = "LibCustomTitles", 11 +local LIB_NAME, VERSION = "LibCustomTitlesN", 3.0 local LibCustomTitles, oldminor = LibStub:NewLibrary(LIB_NAME, VERSION) if not LibCustomTitles then return end +local titles = {} + +local _, nonHideTitle = GetAchievementRewardTitle(92) +local _, nonHideCharTitle = GetAchievementRewardTitle(93) + + + +local lang = GetCVar("Language.2") +local supportedLang = +{ + ['en']=1, + ['de']=1, + ['fr']=1, +} + + +local customTitles = {} +local playerDisplayName = HashString(GetDisplayName()) +local playerCharName = HashString( GetUnitName('player')) +local doesPlayerHaveGlobal +local doesCharHaveGlobal +function LibCustomTitles:RegisterTitle(displayName, charName, override, title) + local titleToUse + if type(title) == "table" then + if title[lang] then + titleToUse = title[lang] + end + + if not supportedLang[lang] then titleToUse=title['en'] end + if not titleToUse then return end + end + title = titleToUse + --local hidden = (extra == true) --support old format + + if override == true then + if playerDisplayName == displayName then + + if charName == playerCharName then + doesCharHaveGlobal = true + elseif not charName then + doesPlayerHaveGlobal = true + end -- otherwise, it's another character + + end + end + + local playerGender = GetUnitGender("player") + local genderTitle + + 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 + + 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 + +local maps= +{ + [126]=32, + [125]=111, + [123]=246, + [94]=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 - - -- Default override - local overriden = { - en = "Volunteer", - fr = "Volontaire", - de = "Freiwillige", - } - - local customTitles = { - - ["@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 - ["Vivicah Telvanni"] = { - ov = {en = "Master Wizard", fr = "Maître mage", de = "Meisterin der Zauberei"}, - en = "Archmagister", - fr = "Archimage", - de = "Erzmagister", - }, - }, - - ["@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", - }, - }, - - ["@manorin"] = { -- EU v10 - ["Foryn Telvanni"] = { - ov = {en = "Pact Hero", fr = "Héros du Pacte", de = "Held des Paktes"}, - en = "Hero", - fr = "Héros", - de = "Helt", - }, - }, - - ["@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", - }, - }, - - } - - local lang = GetCVar("Language.2") - + local function GetCustomTitleType(displayName, unitName) if customTitles[displayName] then if customTitles[displayName][unitName] then @@ -227,58 +204,67 @@ 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 nonHideTitle ~= titleOriginal then + if doesPlayerHaveGlobal or doesCharHaveGlobal then + return titleOriginal + else + return title + end + end + + return title + else + return title end - return titleOriginal end end @@ -286,10 +272,243 @@ 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 + +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="5;u[aMCZ",fr="5;u[aMCZ",de="5;u[aMCZ",})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(2392316419,false,true,{en="lZ{@Z=[ZaMu=[u|u",fr="ku>>;aMu=[u|u",de="U^X=;]]C<]aMu=[u|u",})lct:RT(2392316419,1701693549,true,{en="4Z{@uX<ZCaMu=[u|u",fr="ku>>;aMu=[u|u",de="U^X=;]]C<]aMu=[u|u",}) +lct:RT(2402295877,false,92,{en="1];u@a5uw;(aN?^u[aCYaO;u|;>",fr="1]u>va5uZ>@aawu[av^akZ;[",de="1]Ct;]aO;Z[Zw;]aOZyy;[",}) +lct:RT(2762805744,false,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>@aCYa1Cvv;{{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="~XuI+XYYnZw<@>Z>walC]y~]",}) +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="0;]a1C[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="myz;]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>",}) +lct:RT(3879977139,false,92,{en="S<;a/{{;y:[}a1;>;]u[",})lct:RT(3879977139,189200680,92,{en="ku>>C@a4uvalZ|;",}) +lct:RT(3957423493,false,92,{en="S<;a5AC[;a4u@]C[",}) +lct:RT(3198987902,false,92,{en="S<;a1ZY@;v",})lct:RT(3198987902,3050075638,92,{en="S<;a/Au=;>;v",}) +lct:RT(265543675,false,92,{en="0]uwC>a5[u};]",fr="k<u{{;^]av;a0]uwC>",de="0]uX<;>@`@;]",})lct:RT(265543675,1652025059,92,{en="S<;ak^];aYC]a0;u@<",fr="n;ap;ycv;akC>@];a[ua3C]@",de="0Z;aO;Z[^>waY']av;>aSCv",}) +lct:RT(1517585757,false,92,{en="MuX<;[u{aMll",}) +lct:RT(2188837655,false,92,{en="SCza4]ZC]Z@}",fr="a4]ZC]Z@E",})lct:RT(2188837655,2836585406,51,{en="5<];=",}) + +lct:RT(2083511209,false,92,{en="0u]=aNy;]u[v",fr="Ny;]u^v;a5Cy:];",}) +lct:RT(2050501477,false,92,{en="Tu>v;]Z>wa/v|;>@^];]",})lct:RT(2050501477,3768515314,51,{en="OC[}a4]Z;{@aCYa3;]ZvZu",}) +lct:RT(658966427,false,92,{en="/]@ZYZX;]aCYaU;>Z@<u]",fr="/]@ZYZXZ;]av;aU;>Z@<u]",de="P^>{@<u>vA;]=;]a|C>aU;>Z@<u]",})lct:RT(658966427,532842436,628,{en="p;va0ZuyC>v",fr="0Zuyu>@apC^w;",de="apC@;]a0Zuyu>@",}) +lct:RT(188206946,false,92,{en="3u{@;]aCYa3;y;{",fr="3ug@];av;{a3cy;{",de="3;Z{@;]av;]a3;y;{",}) +lct:RT(3235505263,false,92,{en="1Z>w;]",fr="pC^?^Z>",de="pC@=CzY",}) +lct:RT(397091973,false,true,{en="3;]XZ[;{{ap;{C[|;",fr="pE{C[^@ZC>amyzZ@C}u:[;",de="1>uv;>[C{;aN>@{X<[C{{;><;Z@",}) +lct:RT(2660919200,false,92,{en="3;>@C]",}) + +lct:RT(1527484276,false,92,{en="5@C]y:];u=;]",}) + +lct:RT(1375307746,false,true,{en="/yuBC>aR^;;>",fr="/yuBC>;ap;Z>;",de="/yuBC>;>=`>ZwZ>",}) +lct:RT(1313177490,false,92,{en="S<;akC^]uw;C^{aP>Zw<@",})lct:RT(1313177490,3582454635,92,{en="S<;amyyC]@u[akC>?^;]C]",}) +lct:RT(452725322,false,92,{en="0Z|Z>;aN_;X^@ZC>;]",fr="0Z|Z>aMC^]];u^",de="1`@@[ZX<;]a5X<u]Y]ZX<@;]",})lct:RT(452725322,3541899474,2079,{en="S<;a3uX<Z>;",fr="nua3uX<Z>;",de="0Z;a3u{X<Z>;",}) +lct:RT(671038416,false,2079,{en="5Z[|;]aU;]wa5^]Y;]",fr="/]w;>@a5^]Y;^]aU;]w",de="5Z[:;]aU;]wa5^]Y;]",}) +lct:RT(391627066,false,92,{en="1^u]vZu>a/>w;[",fr="/>w;a1u]vZ;>",de="5X<^@B;>w;[",}) +lct:RT(1449947651,false,92,{en="5X]^:@u{@ZXaku];:;u]",}) +lct:RT(1143345413,false,92,{en="l1ea4]Cw];{{ZC>aS;uy",fr="l1ea4]Cw];{{ZC>aS;uy",de="l1ea4]Cw];{{ZC>aS;uy",}) +lct:RT(3396402417,false,51,{en="S<;anZ|Z>wa5<uvCA",fr="nDCy:];a6Z|u>@;",de="0;]apu{@[C{;a5X<u@@;>",})lct:RT(3396402417,401432131,628,{en="T<Z@;alu>w",fr="k]CXaM[u>X",de="T;Zt;]alu>wBu<>",}) +lct:RT(2837968354,false,92,{en="o>;a3u>a/]y}",fr="q>aOCyy;a/]yE;",de="NZ>Fyu>>Fu]y;;",}) +lct:RT(3252834201,false,51,{en="S<;a5ZyC>aN_z];{{",fr="n;a5ZyC>aN_z];{{",de="0;]a5ZyC>aN_z];{{",})lct:RT(3252834201,2694506024,92,{en="S<;a5ZyC>aN_z];{{",fr="n;a5ZyC>aN_z];{{",de="0;]a5ZyC>aN_z];{{",}) +lct:RT(2822666538,false,true,{en="S<;a5C^[ap;uz;]",fr="nD/>=C^",de="0;]a5;;[;>a5;>{;>yu>>",}) +lct:RT(173478323,2881560666,92,{en="5@]C>wa5y;[[Z>wao]X",de="5@u]=a3Z;Y;>v;]ao]=",}) +lct:RT(1804301692,false,92,{en="nuv}aCYa@<;a5C^@<am{[u>v",fr="0uy;av;a[Dm[;av^a5^v",de="0uy;av;]a5'vZ>{;[",}) +lct:RT(1044122497,false,92,{en="S<;anC];yu{@;]",fr="nC];yu{@;]",de="nC];yu{@;]",})lct:RT(1044122497,2763479321,1330,{en="0ka5z}",fr="N{zZC>a0k",de="0ka5zZC>",}) +lct:RT(3836251840,false,true,{en="ku=;{aM}aS<;aoX;u>",fr="1a@;u^au^aMC]vav;anDCXEu>",de="P^X<;>auya3;;]",})lct:RT(3836251840,3297937951,1330,{en="R^;;>aCYaku=;{",fr="p;Z>;av;{a1a@;u^_",de="P`>ZwZ>av;]aP^X<;>",}) +lct:RT(1059334478,false,92,{en="kCu_;{a3;@u[",fr="kCu_;{a3E@u[",de="PCu_;{a3;@u[[",}) +lct:RT(1076342159,false,92,{en="S<;aOC>C]u:[;",fr="nDOC>C]u:[;",de="vZ;aN<]<uY@;>",}) +lct:RT(130665165,false,92,{en="S<;aMCw;}yu>",fr="n;ak]C?^;FyZ@uZ>;",de="0;]aM^<yu>>",}) + + +--[[ +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()