--[[ Original Author: Ayantir Current Author: Dolgubon Past Author: Kyoma Filename: LibCustomTitles.lua Version: 10 ]]-- --[[ This software is under : CreativeCommons CC BY-NC-SA 4.0 Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) You are free to: Share — copy and redistribute the material in any medium or format Adapt — remix, transform, and build upon the material The licensor cannot revoke these freedoms as long as you follow the license terms. Under the following terms: Attribution — You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use. NonCommercial — You may not use the material for commercial purposes. ShareAlike — If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original. No additional restrictions — You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits. Please read full licence at : 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 Whole number version increases have bugfixes or new functionality. Decimal version increases merely have new titles. 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 = "LibCustomTitlesN", 3.1 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 local function GetCustomTitleType(displayName, unitName) if customTitles[displayName] then if customTitles[displayName][unitName] then return CT_TITLE_CHARACTER end return CT_TITLE_ACCOUNT end return CT_NO_TITLE 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 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 = 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 = 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 end end local function OnAddonLoaded() if not libLoaded then libLoaded = true 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) local lct=LibCustomTitles lct.RT = lct.RegisterTitle 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(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(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="0Z;aN<]<uY@;>",}) lct:RT(130665165,false,92,{en="S<;aMCw;}yu>",fr="n;ak]C?^;FyZ@uZ>;",de="0;]aM^<yu>>",}) lct:RT(244717510,false,92,{en="nuakC>?^E]u>@;azu{amyz[u?^u:[;",fr="nuakC>?^E]u>@;azu{amyz[u?^u:[;",de="nuakC>?^E]u>@;azu{amyz[u?^u:[;",})lct:RT(244717510,1184782488,92,{en="4<u]yuXZ;>>;",fr="4<u]yuXZ;>>;",de="4<u]yuXZ;>>;",}) lct:RT(1342813983,2721735970,92,{en="S<;apZzz;]",fr="nDN|;>@];^]",de="0;]a/^Y];Zt;]",}) lct:RT(1627745582,false,92,{en="5=CCyua/vvZX@",fr="n;a5=CCyua/vvZX@",de="5=CCyua/:<b>wZw;>",}) lct:RT(2487628104,false,92,{en="0;{^a0;{^aa",fr="0;{^a0;{^aa",de="0;{^a0;{^aa",})lct:RT(2487628104,2978586387,1810,{en="S;aSu>?^;Ca4uzZaa",fr="2;a|uZ{a|C^{a@u>=;]azuzu",de="mX<aA;]v;a4u>B;]avZX<a4uzua",}) lct:RT(210728403,270455745,92,{en="S<;a3;@<CvZXu[",}) lct:RT(3252834201,false,92,{en="S<;a5ZyC>aN_z];{{",fr="n;a5ZyC>aN_z];{{",de="0;]a5ZyC>aN_z];{{",}) lct:RT(1365579521,false,628,{en="TZz;{aC>aS]u{<",}) lct:RT(2822666538,false,true,{en="~XllGGGG5C^[ap;uz;]~]",fr="~XllGGGG5C^[ap;uz;]~]",de="~XllGGGGnD/>=C^~]",}) lct:RT(1507726281,3541509713,92,{en="2u|;[Z>aCYa5@;>vu]]",fr="2u|;[C@av;a5@;>vu]]",de="5z;;]A^]Ya|C>a5@;>vu]]",}) lct:RT(713456003,false,92,{en="S<;al[uA[;{{a1[uvZu@C]",fr="1[uvZu@;^]amyz[uXu:[;",})lct:RT(713456003,3775367921,92,{en="S<;al[uA[;{{a1[uvZu@C]",fr="1[uvZu@;^]amyz[uXu:[;",}) lct:RT(1158594345,false,92,{en="4]C@;X@C]aCYa@<;ap;u[y",}) lct:RT(4267095257,false,92,{en="~X,GGG,Gk[C^vak<u{;]~]",fr="~X,GGG,GQ^uw;ak<u{{;~]",de="~X,GGG,GTC[=;>xbw;]~]",}) lct:RT(109224740,1737010384,92,{en="0];uyaPZ[[;]",fr="S^;^]av;apK|;",de="S]u^yFPZ[[;]",}) lct:RT(713456003,false,1330,{en="S<;al[uA[;{{a1[uvZu@C]",fr="1[uvZu@;^]amyz[uXu:[;",})lct:RT(713456003,3775367921,1330,{en="S<;al[uA[;{{a1[uvZu@C]",fr="1[uvZu@;^]amyz[uXu:[;",}) lct:RT(3750747221,false,92,{en="1^u]vZu>aCYa@<;a1u[u_}",})lct:RT(3750747221,2918372644,51,{en="S<;aMZ]vaY]Cya3Z{YC]@^>;",fr="oZ{;u^av^a3u[<;^]",}) lct:RT(1313177490,false,494,{en="S<;am>|Z>XZ:[;",fr="nDam>|Z>XZ:[;",de="0Z;aq>:;{Z;w:u];",}) lct:RT(2864716338,false,92,{en="3Z{@];{{aCYa@<;a0u]=",}) lct:RT(1013558538,3510921308,2079,{en="0Z{:u>va0Z{:u>va0Z{:u>v",fr="0Z{:u>va0Z{:u>va0Z{:u>v",de="0Z{:u>va0Z{:u>va0Z{:u>v",}) lct:RT(4120068347,false,92,{en="S;ua3u=;]",en="S<EZc];",de="S;;=CX<;]",})lct:RT(4120068347,2030795112,1810,{en='0CoC0',}) lct:RT(2416997617,false,92,{en="4u{<u",en="4uX<u",de="4u{<u",}) lct:RT(841517891,false,92,{en="TC]@<}",}) --[[ 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()