From 88e07da08b99d342a5d8dc98570902dec63fceca Mon Sep 17 00:00:00 2001 From: Steven Jackson Date: Fri, 17 Oct 2014 17:51:04 -0500 Subject: [PATCH] 5.0.55 --- .../SVUI/assets/artwork/Doodads/COMICS-TYPE1.blp | Bin 350740 -> 350740 bytes .../SVUI/assets/artwork/Doodads/COMICS-TYPE2.blp | Bin 350740 -> 350740 bytes .../SVUI/assets/artwork/Icons/AURA-MULTISTRIKE.blp | Bin 0 -> 2580 bytes .../SVUI/assets/artwork/Icons/AURA-VERSATILITY.blp | Bin 0 -> 2580 bytes Interface/AddOns/SVUI/docs/schema.lua | 2 +- Interface/AddOns/SVUI/language/chinese_ui.lua | 2 +- Interface/AddOns/SVUI/language/english_ui.lua | 2 +- Interface/AddOns/SVUI/language/french_ui.lua | 2 +- Interface/AddOns/SVUI/language/german_ui.lua | 2 +- Interface/AddOns/SVUI/language/italian_ui.lua | 2 +- Interface/AddOns/SVUI/language/korean_ui.lua | 2 +- Interface/AddOns/SVUI/language/portuguese_ui.lua | 2 +- Interface/AddOns/SVUI/language/russian_ui.lua | 2 +- Interface/AddOns/SVUI/language/spanish_ui.lua | 5 +- Interface/AddOns/SVUI/language/taiwanese_ui.lua | 2 +- .../LibSuperVillain-1.0/LibSuperVillain-1.0.lua | 1280 +------------------- .../LibSuperVillain-1.0/LibSuperVillain-1.0.xml | 7 + .../libs/LibSuperVillain-1.0/modules/Animate.lua | 483 ++++++++ .../libs/LibSuperVillain-1.0/modules/Linguist.lua | 86 ++ .../libs/LibSuperVillain-1.0/modules/Registry.lua | 1202 ++++++++++++++++++ .../libs/LibSuperVillain-1.0/modules/Timers.lua | 133 ++ Interface/AddOns/SVUI/libs/_load.xml | 2 +- Interface/AddOns/SVUI/packages/actionbar/SVBar.lua | 5 +- Interface/AddOns/SVUI/packages/aura/SVAura.lua | 24 +- Interface/AddOns/SVUI/packages/bag/SVBag.lua | 52 +- Interface/AddOns/SVUI/packages/stats/SVStats.lua | 2 +- .../SVUI/packages/unit/elements/essentials.lua | 2 +- Interface/AddOns/SVUI/scripts/comix.lua | 130 +- Interface/AddOns/SVUI/scripts/ego.lua | 1 + Interface/AddOns/SVUI/scripts/misc.lua | 5 +- Interface/AddOns/SVUI/scripts/raid.lua | 10 +- Interface/AddOns/SVUI/scripts/spellbind.lua | 2 +- Interface/AddOns/SVUI/setup/installer.lua | 2 +- Interface/AddOns/SVUI/setup/presets.lua | 2 +- Interface/AddOns/SVUI/system/_load.xml | 2 - Interface/AddOns/SVUI/system/alerts.lua | 4 +- Interface/AddOns/SVUI/system/common.lua | 253 +++- Interface/AddOns/SVUI/system/configs.lua | 3 +- Interface/AddOns/SVUI/system/core.lua | 9 +- Interface/AddOns/SVUI/system/media.lua | 2 +- Interface/AddOns/SVUI/xml/widgets.xml | 62 +- Interface/AddOns/SVUI_ChatOMatic/Loader.lua | 4 +- .../SVUI_ChatOMatic/components/chat_history.lua | 14 +- .../AddOns/SVUI_ConfigOMatic/SVUI_ConfigOMatic.lua | 7 + .../AddOns/SVUI_ConfigOMatic/components/bar.lua | 2 +- .../SVUI_ConfigOMatic/components/profiles.lua | 2 +- Interface/AddOns/SVUI_CraftOMatic/Loader.lua | 4 +- Interface/AddOns/SVUI_FightOMatic/Loader.lua | 4 +- Interface/AddOns/SVUI_LogOMatic/Loader.lua | 4 +- Interface/AddOns/SVUI_StyleOMatic/Loader.lua | 4 +- .../AddOns/SVUI_StyleOMatic/SVUI_StyleOMatic.lua | 9 +- .../SVUI_StyleOMatic/components/addons/Ace3.lua | 61 +- .../components/addons/Altoholic.lua | 10 +- .../components/addons/AtlasLoot.lua | 2 +- .../components/blizzard/auctionhouse.lua | 2 +- .../components/blizzard/character.lua | 190 +-- .../components/blizzard/dressup.lua | 2 +- .../SVUI_StyleOMatic/components/blizzard/guild.lua | 47 +- .../components/blizzard/petition.lua | 20 +- .../components/blizzard/petjournal.lua | 4 +- .../SVUI_StyleOMatic/components/blizzard/quest.lua | 71 +- .../components/blizzard/transmog.lua | 2 +- .../components/blizzard/voidstorage.lua | 80 +- .../SVUI_StyleOMatic/components/style_methods.lua | 14 +- Interface/AddOns/SVUI_TrackOMatic/Loader.lua | 4 +- 65 files changed, 2593 insertions(+), 1760 deletions(-) create mode 100644 Interface/AddOns/SVUI/assets/artwork/Icons/AURA-MULTISTRIKE.blp create mode 100644 Interface/AddOns/SVUI/assets/artwork/Icons/AURA-VERSATILITY.blp create mode 100644 Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/LibSuperVillain-1.0.xml create mode 100644 Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/modules/Animate.lua create mode 100644 Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/modules/Linguist.lua create mode 100644 Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/modules/Registry.lua create mode 100644 Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/modules/Timers.lua diff --git a/Interface/AddOns/SVUI/assets/artwork/Doodads/COMICS-TYPE1.blp b/Interface/AddOns/SVUI/assets/artwork/Doodads/COMICS-TYPE1.blp index ac9790e52214ae4e8a8046a0bcf32c225a6a0a38..b155a11a0ce7b377cc4693600ca61b63762ab721 100644 GIT binary patch delta 35861 zcma(44O~=J{s)eqd+(rwsSGMDtq*etFwsQD%GMrq289+YWfVqH(HT(7ht#pM%%?l3 z_*4oy;&m$pQPOA=ThiHYZO-_VwUy9rsH-L8Ln@R4Zh{$bfA4ed+=1Hv>;L=RmjUOV zr_b}}b3W&s+qRFQwtWWSXt>d{wdBJmXkJ&HP;^r)VN zYPW)?w<6l?+)6tM^GhwKq?TWA5#q7^v9C~1qCGDBZYI$c1%JF4#*vDJ;w~<>i5Sq| zMTaL!qq0IFqTT*X6#7TB;NKC2#Cyy!{W#)Di!tKo!Wh4q*bBqL(WAkL8KojZ?9ZS# z$`k@$Im%_M>>?;5@nk$X1=E#3Y1MHCPlLrs;j$)1&d$on$iT#mO&==6>akfFTvj9K=P6E_ z&WrI|M~#iSl@y=5J2IV3t|-E<*H#U;+Y@ah%(4<#lM5HY)KNv~5;5A5qs|#@tN6|q z0fw@&_VSUlib83{&{ce=o*d^|GPtY8d&L{#J(Go^eXQ(8y(`eUdrRA9u%K!*q^Y8Q zbU=VeRQ=gP@kvcg8V+=Tk1BSff59AK{rhVZeWZ+6?(3r0YvunaiBcjo1m6C^42wz=&?R?1k_QUvEZlW+5AXC!ozuu21cozcxs+a#0!t%If_~0bNK>q zD)9KzBo1u0p<9L9HkK2bMYpGFd_qqp$!VYT-EMV`2=bR(&}74e?i?LLOdp3?7N)1+ zr!U=zxtzAlZJK;Z`-rDL-NGjkk2&M7kAA(zs<)?jshmN173F532(`*zjOLA$L5o&o z>*q`?5tfPDt99R5 zpH%E|O@?}!Qaufm+bFgTQx>3~V=Cm*Q*93D46!9ZtyGF29G#> zux`g^z}7ZBf+~&EA#qDQ0fz&UX?2d|Nvg-~{2I1X^w_dj^lT<#7teU6Ndh4015Kz1 zWOt`M>vJp=A@hutD3s4I(n8gYktjsWOza^7>|zQx2|&K5!NPcKGhftIe*j?oGmr2& z29JBzX}-kZu|40fN4CL!Hf#g1W=zajnXC7>pRWO6&KHWf^;>6KxJ-|Awh?1HXMYbr zVDnh#P}{l0Q%I{Z27TIf{s#J59nB^k-x@^*R~g5)V;I-5cprDm|5m0=>7|Fsc_BraR9@-@IcJ`7CpudGD$hF z7+UBw6nw$rB2yGHe5=bCGdnCS41&o7OpqZoBtUtFMri#BfX?#dj{1Wq({(>@n(cA9 zjGWa|;MxgvM2~sVSfSoz^|%)$z{rag2Nw-t=)FW~ps=6Dm-}{F;giZ0#WU*V!Ib*0 zm!H!WQA+z?9)dY+o}sVw_H=zEhHB_5RXmkqJM4>UxL;OGOFV|xEL^e2_S#4gqRai% zd{b!ifs$C@DSj=DTkmPWPlLz0#0aD1T$0EQ_Y^GI1QrbUh_6qJZBBAVj!lWu`h9%O zKDV_2a#7QffiPdA< z&{t?PWmdR0jAK0VZ|nzXYBo~LBi=Al=*@3XemUNdXvG_pC&o9;_-T8yjb8=z-Skwi z+6k0FQSd3SQFzXrK}GSV(`dDDvxPU=JO?)~jC5vXWx@xmL_}oc_L%d>@g^XbzmRiz z8uA%(1^svs)LQT<^dNQXma#n*lXJ`1#f7Zn-H1ND0d|FR%PtD;R?j#Jq0KWr^82E) zvMycJ(HjLvK75IX61Il@ROrtN<2IPXgKt{Vqi_gJPlda1AqV0%Y#+&+TpqKWMkPSD zL>4$*Hb6?veLmbSaaL5xeYx0XvSiWtOn7Wdn-N${Q%vi7j2Wg1-d(BX<0kk8!(T=S z^-1mu+h3+Lf*yQ}614KIg};;bk$^DmZA#P1w<%2{-l5PYzVo&2#WmUbzwON8ba$H} z$j)6woNH@QKOw!X*kdYM5V^!|{|=@{)r2LKip537NJMNI2>aAf;!y>httv7?R~w3M zVc44DA+YF>g54HQUt!xlokpXCl&GLv2)Xzw$mlPjjIJ+XGHczl02C|V^8u%uR7v3| zr4;iNl#Vl*^ivgkFkVoE&%yf^#m5*+4cp8oV4zB?Ag5LDf}wxgSIL=(Ju2!Xbgnx= zXn3Iwp`qROY>=TXS=10U>>n#M!;D+syTwtP-N7!5Tn8ikz5}2Y(VrE{`^7v8#Rn3> zx~cBEhEKF!f1x4M8Ps6tOHy$ z+^jJF-w>X{{lLqj zb4~P`87hNt~;~eCh)Pi|~Sh&l6xkQ!5N#(2%d=j2&iR5UAz-3<8R(5fHeY z6HrzcSeOcA`*I}6R{5n_;GA14LA468@+QX?U50OV@l*@kPEf0J_W*i*kJW+4|8MZT zqT%0_Jk-a3CNXk7ac9z58U--1^F2cTcJ>3VCxA`)J6*^?@nH^*DBy_y+z6pLXZGLz zvx~8=_yY5H{tHm6iuwx&bV3^uJ;i}UPVcG0Px7}*7a_?NHCOyP&RkJ^qo2SC^W#k& zeEx9H!3Nmuq)hvu9MDfuj0hmG6h@rdaJn-f{~{_VYj-08y{{)(E2{2x*JFS~0WR$i zkY!fCf903VP9@=>f1 z;%yMQA)R?~xGctViCna7i|2|sA~(cyM$YLq4CLxN4HY3Q!!-7ySA73)jDRqku2DpV z7$!{&DkojGK?-HFnd`@ksj|(?ZF;0$bQeYqOThpvJ|ovf+oDC|A*NK!pa}b&1;xdp zo8ga;!VMcC8-{XNQCOY1-(_G`qrx9htY)umC|B93hs|blTB#`v0FdGe7#n%$a4vyI zPv>yX!RclHa1NG0Ox^xC2Wb?6h*z;Q2FUzm>CaWP1`D$SIqXI2au<(`!rO-V}P(^g%f0%)zQs z^(nr-1awU11`9R4IN6xOrE$ExFa<*rIX{J?p;4xD6x^BG+&G=cH7Q)83F|O!cQGX| zrB2&4LNW-iHiPL`#sc!EIX`C_9u^Ku!u(XD5&)|3yiS#<`3kr+TsEX)vf;8BzanP~ z;bGt*L<}S@ZWcw^naaJWw_YYy;BJQeZ7MegIH}n5ss6~$3mij)L8U$Oy|hPjiW|s z?n@d0G{!;HdeG!Y_A&Ln)Pk9Y%YigdxQ!xU!w3f1YUBFG{zSu%_AuTGgb#6444L>V zfi_~5-8ODT&nBXuke-g^46+m;m{Wl|7{+t+9|6))C&vUA#flR6J2{wvAvHO4A0#^@ zha{oQRw!b#b+-55c&@wfFrtvHTZ48qf-LU}nFBOx#|ZLiFG4oDX<6lDO%$a;1~-z@ z!ffX@gQfdBv_G-{fjBFx?ZINX#!f}cYn;dxbDSvqCxKpbMDm%i*$PU8+xo=*cL zoL89!L5)OSX7UWy8*_;i;3@|5t8Zz$ahFIxPoOo&?74YBCT*b zF`ij=JE<}Qg@Y(ZnkP>luZE*4W;QuMUz79+L7zwQYPJ^0hHUf(E3#GbbY^o;^OT`Z8DbHJK1>Kq5tj^wL}PlUoa8zYy$y4?(^NM@ zjCzq996POZD`~?+k*B_+W*8yQJTrGLdUg-sU*CyDw#=szDNFNJr00Y34w$Hj1$fPS z(-v@64jd_1$nEMOn(Y&_Xe`b0m)15|TdNEB8Dyu6LvT-`7lj4&4B;W6D(-htd_=I! z#q6|I78il6F4?w-njdTGp|L^U0x|H$CA(1pnwaI{MU=_ELA;*0y;Y02Tfaf{6_t03 znGtd<20XxKF~!DPvlzUKG=O(~fihbqLjJ6>>ou-2(iS$%t_FNaE0Q*GwrpF%9pH(1 z`|FG=F4;=|xNfz{?$^0~7`5niPUP0h{@3BN;M7ybj_-kC5ix@&*NFM>QtrraAX^S~ zH4)jcg7r>Z0gN3pe1aVgD98~(Ng=Xhg$nZul>;kOO*5QF|WOv$`1eq*PWCx&RjrqjV!Sq z3JMZDK;RY(Sph0Q|Ml|0Ty8{cJsIBXgbN8|bj3rp3D7g}Q8YU1oi?vw708AuL!!5a z>lgD6Zhu*O=5>Vd36C}1Mh$HT^_k{8ZU{_fPEHOrxj-ymF+vTCcbBl_qLEHGf|sQ{ zl`eT;FegW>W#XE)78Xa84eRg{Qn(H{BNkZ4ErhI^*K=)1Ld)h2TtCEC=}c8XIM^8x znkzdufUOrvfn2t%cIFG_Nd&euBOh2Mp{w= zLIE3fPOwa@%*hKkaSQJ!Bo~j?O?lFyqxM7oc@u|}fo$B&U4-9@-<}U+3ae+$2TpF; zoe%SqDOcrlee_nP_*c;HJ^AN+?jcCBSip6o`Fe2?GV^p?qr#B@HJR2e)KHKmvJ-#w zY!{%)+mIk^% zFgXsyqHDF_$UEU)?bKri%WosDLOB#D)j&oz;L)h~)FXX_#fxRWkb4R=v=nj)aVkIT z)VQ<9_*jiFEGjAr=(Fvk5zkYBE@WcXajGMD-*GBs8q9qmw9q6g^cPsPof@AIeAIY4 z#u7O#___-MgCN)tWm($J*{GR8_yiYW1T4@os~p(Q6kplSIjOsrL7h~&O2!27as&Mp z?KSM+Hen5e5W4s;P`74riN>4&ve_6#Oy8F0(ky?Vo-En^7B`r4dlTN`%K2VOFB)!@ zKnS`MVOi1hJoaLEtJaPoyc1G~fOQvZmbME(it<5PLg=sy z{wf&mV_5uy=D=tafhxn1>0^shs<2iXz7^m#eBD7>8{dsZt13GJtym)jXl?4@Vs1VM z{KV4d=(-N|cOyt~8%fQY&9O3#SFKo}$_2ZbxEkbxyWxwP;SvIP^GFr(JMd_%w$_V( zhe}~tL_=LdiedW-$FRj6)+SJPMT8|N!BE(r@Y+hai*z05HJ5@3Ab;_@KpwEY3p_K` zMTUx}6ClaXeZa&V+@Yd|BT(E5!%?sg3TpKR_F+K*J5&4~)(cp>Y%jwsNbJgD84Wz5 zy|yxLoQ{V86d%AWkb?s-PwQo8Ipe&W{<6u%<*3tp1LfSO96Y2;F8+}DP_bKjMi|71 zYL@_QB-{VSkg&=k{&+;O#z&1!r-3<=@yJ!&!UkwmyM#Cut7{Q6c+^5Q8lkRcuj_Bz zN*y&c4Tmu`tfm(hCZITfeHSK1e$>l73wYdKE-^;r4ppn%fq5aV1iYrIuco=hRua9u z!t~Ke?vF^3(C0eLBMh6$&V0pPkHF{P{{h_VVzFF>KYCsi*Js=8)PJy8+g&fN-~KU| zV8&uH!A29T9 zM$k2i-dROBWi{d;$$wLW=S9g2Cuo2`+%QuO`L7-pW6#988e;r zVnI$!7MO-sND_bya14HsC}-2ZC6oocErE-02!a1lg%W3PKM$%Pof&o%)hv)NzD}?xIuE&32y(N9EU!uV z;|Dvu&hy+tooP7NtsCT)5gS&f_#TK?M|~XKE(##M;BC0b)$`fpWK%*C+5JgrcGpZ{iTXyfYQfz%YJrubO=( za$zPG9V0RF; zE53ajv5FqS_v7C{s63MIqjSg@%{-E)A$QtHz7S&t1n-Ga{5_-*=~xI4p`LyzV3av> zGB1xxBztNeanP`=73@G(AIVEOg?OHQHjUMTvW}IUtfcULW9bynCRzXlO)a@djhB%A zg?7pxn*R+*D-mHl&0}pVJD%qAa`@GU=U*Vj34wKVSC~vXOU7)C8#7AZ3A~^Nkn4nc zGZHya7`t6(XJtc!vXhnd_McdL{sU2MujigXdw1UpkZiQ4Dp9dkw?OcI^bCKO7aT<~ zNUDGtHRZ8#CHgbb2wu!6^)wB92sY2B2NfJ zsb)K3(sBGS&o-SXaimb)DJA!UlL>z89S)0euJN8SX6ss@wztk?us`H3 zL-|-7%2!%=xK>5Er#uI|x5mx5w>!GE!^w(0|KUd=pdz&Yqo}{y!rAOFNQ-Vqv{*pW z)vcVtK50VFN@306gbSTp&fO`egiHd|p0&E^(Vdy2o4`8+gly$@K0)UwngijqGoexJ;2bX-C*l|QsQz-$U(d_Z zL_P|nFiXPTrUh3&Ti6<)kc=N+t;x{nZ;qYp!f}FD-t!;f8@qxNK|vYY^UZI|Gp?X) zS9pqg+?apG%{b4>E$!{ER?+^be~Xe%xHbBlsKUbTQRi#cwO;V8I5#Ji5Qm&Sg-?H& z+fUKXeo`aD;q$NFqSjw%qtuEz$$5P(JuR)B0}2unf0%ebqu$8q&8Hak5MQg0?*uJ( zyWn|K7cFvChv)Y`JmY678}=x>y-&;GgmC4Tf5g?Zq{ifmj8mDM_aBq_DnWoO$@$ZG zV~;pu&q-8O6w^yGRMS6=e@>`@WJXNq`}QmsFlG*Lv=jPbA|f+wDRj<@bz+24+p{llk{PFQSCVxhc@# zaQCTtrO|@&l@^o1HsPh00B1r_K3e5D+59l9-HNjL?*;JJg!C6bRwv0Dh+H*`u{=dK zJ`XqGkdtM{^SoWsIp}n=VgnLGGo`fcZVg6nIsP-J&&%5sTCiO?KjXZ;tzGhyuI)J= zRY)xpTH_hjHgk6Z%#T*ixw+^3L@k^|eav^O!S^T_oiSSngK{(4N}QHwGo>!~l(CeK zGmm|3(w{Ai`hzyWjHW&3m*6OnRz7}y^!Yo*AYpJq29Q$5Yvs##_M9Jv2?K3XgGFkC zl}d`9IN_PHxbue}xN;VOOA z+n(~8vF%KL3wXZj4j~YoO+lRF_SPOd@xgm#u*_dDOS}3@kvOeZ>*LbFZWk*0USI-) ztuK#mmV9nDe?P+g`q}(S&fr}zhmYX!d*xgn=SOHtal>5}x*@TS14goAK65lFNCh&- zS2Ule>&MFZ{Io|M`6(oGbfS;NCuAk@6`9DTlToU_gkU*}Ho!aN8-j!}8s+swb}ryE zB+zmWWckOFf2P8+IK&&FHA&pPdv}RON|@0LzcI6{47(X5_38_>{y>PAt6BZWp?cQe z*KVd)U)ghBDJzqx-G$Zg#PQ1U58tY+4@uh|I>2iRb#YXf9zEWY8(qfV%}~ppxMNV3 zvf}#+H2?xvXPyVwLv}r;DfR*ly=ePKA)P{7k|Ao}#t=emd_`)Ji^J3`d;{O#qoe5U(Dtv zdr!Ie#X6y8A0oTOEb`bOJLn(E+888S5rWk0dx1Qg=CeRL*kakSl91iGc~R=Xi-@!q zSvA&UbDUhWm`_An?Na|>w1tI&!lb9AQ3K?U=~IN7*Q!_0sM-h&rTjSA@+!YrivQxV zh1Z)Fwp?OyV0CZ;SdweUuOPRsWpfqb>gp?0m_BNQ1|c$D-3ngvnOP$wloaF9l5gRs zZrJS$V12Gv=0nMn^u>v6qntKSM&CMq#g1b_8bHDEVDEy`s7;`i_uSlbg}NxNMJnhC zOIV`7px-|U38BP-uHgpm-Fm8T_Uh(VSOM^61^~{O*bZ>))je0DqS|F8TS0vXOQy~z zm4!}_Ub&KU0nI}I9fvxBb^lbzvn6qWzA*9C|54Lkiu3{j6xw2YZSP0{v`A;IoC(WQ(F)>`c6sOL&V8>`>PTzz9jjmhH4`qerK)PqC8p*@w-U z6+E^V5q4yxKbx<{?cD>47s#h2h)yQ-gBIeMbUv*Wun$h-tDCj$evRzUJDfhW~Ctwmj<4CWJ41IWO^nWS- zGuo{B40}Sc)_+u6wm59{{*Y?X@g^xHA@=NPin)Mp5>!MbUrCdI7cDKSwRtOUPixGo zL4(SkS=CnF`ud-hYuQMYPAoh!VE+fI+ZctICn}5!4M-c6KBa>*E@?}O&Ua?Yb}>CO$pv*rA{)^qu-7mh=s zS(yB1@88}0{kkNGNK{@PM1<|1OY+mm*0#YK;t&B0prwc-c3aO?)WcCLNta3XFl2s$ z%TQ(CTsb0-@7qg~pC=R25>?JXEFJP}2uvP7G7z(b!Sq^CZYtHUfvSjku`&s!wu~u(VvhP4M6I9CnD{lAA9J+0jIfa@q zq&SX36o`MKeam+E(slDMj5;mqv+Q=s&b8I%w|$R%_szY90Rr!=H8|Fk zeG?hlP=}*;Vs5r}5LO0IhjMn)sGGJ)?GvZ~9#|h54;cHcw&1};MLBjehH!YadNy7< z24om)*cx~ACQP;8X;TpCkUti1$C{G#>c$i!q4IkGG>irwms)C+Mk%{VB=jVt95;s> z(6dFg7E$1!>J5;QJy5`lI;5v6x3MHgJ$^-QBny2OAN7qb@S9nPx{QSo5ThJ}?J}(D zUmy>qEkr$qAs?%Hq}g1Be4m~)nxBw9RlQ?_oqLCDl8XuX6nKY)-LWGDN}tELYa(oz z-5&oVg(3FbswR}DBRjbVMbnEHVxUttyXDuH9#J4W`bS|nRoOWfm(;Z90W=EG@|x_eai&{N2ro`KwMlIj#qm?lEs^*! zBWpirYh2PTc${#Y4-48YYttow+b*lWFXt#+69ANg+Oc(wsVQe5CS0No;B31D?fPj` zsLTee7q#;52Q)Puqe9~E`hUtVf3~!o&rw7@4gG#ZY}%saU(asJ)`xd%*Is|y?the( z%^ma%BDziis}N_p$dN4c;POAuZ@IV-+ZHDMwr$nlXcH0z7}?twE-CCQsd+6}|b8Gva3n&~-h}o&udO4t|0_{_6K$+QHuxxHsg=cT|~sNA+zxkq<)R zfJ{wKrx7@_eu_6mPTPrm5KYkb>ZQWcctt9DfhdWi3b3u=rV>yD+m(<0NIT;k*-pM+ zOzfXQcA&(n) z&PLWYoAlGFqlRhpG%4K0TV-V~tz6s`OC|1Jm+vS>|21-GPi$F}z#l?>^2DwBRHQO3 z*=HP5iY^^qxGWa}IRX=01cwKJT$h?mg#WdD0;}R~%E&_EBq)+ZaW+wr+=upfbeACV zR+lZS^WJrRFJRUG-XW?|_6(i(mrCVczEX10M8f(HyZ`SHd9?3y6ysZ+Q*4=!eIcX6 z{0m1BN@3&0&Y${h;nk-X{&Y(*k!j<{k7qi81n<$NJ)jXEiiVH2l~4z;{lQIU0Ou>>m-n1$=mc{!%@%q}6tNc$?DrZ%dzJao3rhn4Y5PDMn)t|6`{GPadAf_7<>ULuwkY ztKNxQ)yx|%+3otN71-jy1QeWR)K`!IOREOEV=rSZ1AvARw7Ye$XeP3Xs;2&^% z4kW447y>k6gM4A}81X6JSJ$=~*(>v>{18m*zze~*5@}KV(bJKiOj_6{P(f7b%O0lM4SW}sJXM8#DEZO*>RGZPjCK7 zsEykFpXe?qMRBt4D>hdwNl&MnR{#$rb|5)lj|xHA3^>1rdv4tU}KHNUen=E1d@gObQN#w5;@7Oh!_l#hkZKyf$dMVJjwBUQ4W>^!S>Z^S!++v z{iut-6F0K4KN21uDhFuUjd)P2UxobrTr0{hqK9PtI2QnTx7fq_^Woq;qNSf7L8|jP z!HPW1Sv~TiYM|wIrwjM&bSt7W%S65U6g@*SR(Muz5G=*bEp$MBxUeuNQ5ZlZI8}xj)l*YRsf0KjG;yGA zQSW6F+=qHGKnjJa$F^57-JutQ;qj>p~4524CO0LWh=7+gwdwTxKn`9T3Qv6*~i-?JV?j44{ zUoooXI}$6SF7#0H_>rh{vG%}LU6lhH^sh$rr7?<@DZRlcknco*mM1~N5z^sQPmr7- zH^of?^k~qZ8qy#+=z#1Al@adI7r|rpdqG~@UPb_-GI(zTcGloOwf-mWiqRjq-ELem zr87`|BA{*e%_nahyFs%OtUcyeu2x-%E|lfa9>m^;y*H2*uGR(wdCh*m)d~QZ`#v5o zl0Ptj=CM!~M^!BoQ z2^z^J%}2=QpCasn+4nl93NV^DQj#ScVC8ATN*u+Hx7+Du8_a_N&bH#zXv1`&Uks%+ zJtnH2a=w7$81~#Ov_p~u?sx@GxyWXRfJ27tqYH?5)#Ee0n@u*^Nh@xdT%+Ur=dqE| zV<$X_T;LFlLk;$nn8SF@QZ>79*vGCvh4ikv5dJP0Wi(#&yp z`T-E^V?HmyYvNo~1N{Ss$YsL|kX9UBoG@-Id>H&I9*Ch+w!R>wMe5Tt3VH%m_WCIW zXM&1f5OAk42}h=AN1VAEKcN>r`_1I}t!u=F^Zr!KZFo<`j_TE~ZS;Zzvezin4CL!= z#B2}SU#MYrzRBd4UFgQ^r+T(LaX+5t$e?XT8L zL5P9_-qSi@LJ^5M95Yh^40Q;Vv>pvlrjUnP{bpyk~y0Md^bVLnd z2&Xo|)#w2OsEJj}|BIo{1P%mGpJ9Mnoe3^tnAW~iV{+|pC0c zqR@}algnQe62l(6OwV&(c~N*D$KLGIkKy|wpfm25NkiZZisuUn9FCov<*Ef#4RAiT zVS!+Ygc798VM+k;>#fi;cnhhtm(0ek520TVQ|g~m#!p297AL_t!@bZ3^+{IQ;1cMk z8${d#5uTUOAOG?ovHkIA8h*N*gclceZ9$?abX~Lv$aa3DEB+TyyEF*inMlKma;Q@S55yBIzKZc>rLNJt~Ai zUhNNJN0nJq8N zwYF*)u0fgSgE1QhrU-R3|1)8Y!^7MCQ4nEiRr>%}4V@z*BDAswp;o2<;v)z&Tf-h& z?&u%>e^C(4p@KN$h{ZXTUI0tO~9Q|VjKNJ${0;<@p%>)@7Ji@n%2t&uL(vD2gqL&roryR+%Hje#<_$#0+@OC z5@CP@X+<~;X+my1Od~~HU1=@W%%S9q4&~}<#jn+$0IAe_#wzJ%?!FS=@uc#J+T$W@ zLC6>gYX6XVJW;EAJbv)tI1(nQ1L$s-))p4}LKB{7gth2kZ!uxCfTtY*-Q)1=A@!jH zhEpa4c?kf_IG`UAz7vgC;^|#vtzJb?nj2D=y_XPS;@k}yup4sBJUJX8dwUY$QAY}$ z1O?n3q?KaKZ5qq`x4r3o0kbgV#dFT!9r-()OVfX$0VA7 zray_JzwTuM`w)^`uv{1i$*);1v|≪r`o7h#u}1Y?p+-qj9>p-bycQ0~_QupHfV- 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 Uo3l2a2qWfYL(YgAh$r0t3m+f=od5s; diff --git a/Interface/AddOns/SVUI/assets/artwork/Doodads/COMICS-TYPE2.blp b/Interface/AddOns/SVUI/assets/artwork/Doodads/COMICS-TYPE2.blp index fa7694222018051075b8536755ab843513ee06ab..149053b85c9ea9d927a50737dfdc52d91f1c8cad 100644 GIT binary patch delta 29646 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 literal 0 HcmV?d00001 diff --git a/Interface/AddOns/SVUI/assets/artwork/Icons/AURA-VERSATILITY.blp b/Interface/AddOns/SVUI/assets/artwork/Icons/AURA-VERSATILITY.blp new file mode 100644 index 0000000000000000000000000000000000000000..9b05708430c0c04f91543e82a057e5631ff241ed GIT binary patch literal 2580 zcmeH{PiPZC6vn?vx-~5ndoZ+M3jrHw_0VFXP+I8VL1+=WNVb&XAyt%Knt0NKLKY87 z@n8{)Cu^icVFjs|cub%Ng^KpzAsU1p7K#XJMf!*C?)YXmk#( z(8>zfN)toO6zfA3R+AiV{bFa?t4}0q`E_rTe&dRjw52{nuSxt$2sn~~m~%32 zBR)Sr&o6AG#YWna?}zMv^$%OOU>L@v<6eIU?4kuBu6lfDt->Fx=jC?RGN^QZpy-VFc% literal 0 HcmV?d00001 diff --git a/Interface/AddOns/SVUI/docs/schema.lua b/Interface/AddOns/SVUI/docs/schema.lua index fdf841f..b676b51 100644 --- a/Interface/AddOns/SVUI/docs/schema.lua +++ b/Interface/AddOns/SVUI/docs/schema.lua @@ -42,7 +42,7 @@ S U P E R - V I L L A I N - U I By: Munglunch # ]]-- -local lib = _G.LibSuperVillain +local lib = LibSuperVillain("Registry") local PKG = {}; --Here you would build your package object, then... diff --git a/Interface/AddOns/SVUI/language/chinese_ui.lua b/Interface/AddOns/SVUI/language/chinese_ui.lua index 77be406..30304d0 100644 --- a/Interface/AddOns/SVUI/language/chinese_ui.lua +++ b/Interface/AddOns/SVUI/language/chinese_ui.lua @@ -1,4 +1,4 @@ -local L = _G.LibSuperVillain:Lang("zhCN"); +local L = LibSuperVillain("Linguist"):Lang("zhCN"); if not L then return end --[[LOGIN MESSAGE]]-- L["LOGIN_MSG"] = "歡迎使用 |cffFFFF1ASupervillain UI|r! 让您的 %s 和你 %s." diff --git a/Interface/AddOns/SVUI/language/english_ui.lua b/Interface/AddOns/SVUI/language/english_ui.lua index 42b63ea..cb9ca76 100644 --- a/Interface/AddOns/SVUI/language/english_ui.lua +++ b/Interface/AddOns/SVUI/language/english_ui.lua @@ -1,4 +1,4 @@ -local L = _G.LibSuperVillain:Lang("enUS", true); +local L = LibSuperVillain("Linguist"):Lang("enUS", true); if not L then return; end --[[LOGIN MESSAGE]]-- L["LOGIN_MSG"] = "Welcome to |cffFFFF1ASupervillain UI|r! Keep your %s and your %s." diff --git a/Interface/AddOns/SVUI/language/french_ui.lua b/Interface/AddOns/SVUI/language/french_ui.lua index d5f51b8..f25b5f9 100644 --- a/Interface/AddOns/SVUI/language/french_ui.lua +++ b/Interface/AddOns/SVUI/language/french_ui.lua @@ -1,4 +1,4 @@ -local L = _G.LibSuperVillain:Lang("frFR"); +local L = LibSuperVillain("Linguist"):Lang("frFR"); if not L then return; end --[[LOGIN MESSAGE]]-- L["LOGIN_MSG"] = "Bienvenue sur |cffFFFF1ASupervillain UI|r! Gardez votre %s et votre %s." diff --git a/Interface/AddOns/SVUI/language/german_ui.lua b/Interface/AddOns/SVUI/language/german_ui.lua index fc3ac5c..ce04b12 100644 --- a/Interface/AddOns/SVUI/language/german_ui.lua +++ b/Interface/AddOns/SVUI/language/german_ui.lua @@ -1,4 +1,4 @@ -local L = _G.LibSuperVillain:Lang("deDE"); +local L = LibSuperVillain("Linguist"):Lang("deDE"); if not L then return end --[[LOGIN MESSAGE]]-- L["LOGIN_MSG"] = "Willkommen zu |cffFFFF1ASupervillain UI|r! halten Sie Ihre %s und Ihre %s." diff --git a/Interface/AddOns/SVUI/language/italian_ui.lua b/Interface/AddOns/SVUI/language/italian_ui.lua index 66eeb36..b663781 100644 --- a/Interface/AddOns/SVUI/language/italian_ui.lua +++ b/Interface/AddOns/SVUI/language/italian_ui.lua @@ -1,4 +1,4 @@ -local L = _G.LibSuperVillain:Lang("itIT"); +local L = LibSuperVillain("Linguist"):Lang("itIT"); if not L then return; end --[[LOGIN MESSAGE]]-- L["LOGIN_MSG"] = "Benvenuti a |cffFFFF1ASupervillain UI|r! Mantenete il vostro %s e il vostro %s." diff --git a/Interface/AddOns/SVUI/language/korean_ui.lua b/Interface/AddOns/SVUI/language/korean_ui.lua index 30cea20..386315e 100644 --- a/Interface/AddOns/SVUI/language/korean_ui.lua +++ b/Interface/AddOns/SVUI/language/korean_ui.lua @@ -1,4 +1,4 @@ -local L = _G.LibSuperVillain:Lang("koKR"); +local L = LibSuperVillain("Linguist"):Lang("koKR"); if not L then return; end --[[LOGIN MESSAGE]]-- L["LOGIN_MSG"] = "|cffFFFF1AUI를 악당|r에 오신 것을 환영합니다! 귀하의 유지 %s 당신을 %s." diff --git a/Interface/AddOns/SVUI/language/portuguese_ui.lua b/Interface/AddOns/SVUI/language/portuguese_ui.lua index 1bc2bd0..f875f2d 100644 --- a/Interface/AddOns/SVUI/language/portuguese_ui.lua +++ b/Interface/AddOns/SVUI/language/portuguese_ui.lua @@ -1,4 +1,4 @@ -local L = _G.LibSuperVillain:Lang("ptBR"); +local L = LibSuperVillain("Linguist"):Lang("ptBR"); if not L then return; end --[[LOGIN MESSAGE]]-- L["LOGIN_MSG"] = "Bem vindo à |cffFFFF1ASupervillain UI|r! Manter o seu %s e seu %s." diff --git a/Interface/AddOns/SVUI/language/russian_ui.lua b/Interface/AddOns/SVUI/language/russian_ui.lua index 9962fb7..d76aa24 100644 --- a/Interface/AddOns/SVUI/language/russian_ui.lua +++ b/Interface/AddOns/SVUI/language/russian_ui.lua @@ -1,4 +1,4 @@ -local L = _G.LibSuperVillain:Lang("ruRU"); +local L = LibSuperVillain("Linguist"):Lang("ruRU"); if not L then return; end --[[LOGIN MESSAGE]]-- L["LOGIN_MSG"] = "обро пожаловать в |cffFFFF1ASupervillain UI|r! Держите свои %s и ваши %s." diff --git a/Interface/AddOns/SVUI/language/spanish_ui.lua b/Interface/AddOns/SVUI/language/spanish_ui.lua index b5fabba..0e1c185 100644 --- a/Interface/AddOns/SVUI/language/spanish_ui.lua +++ b/Interface/AddOns/SVUI/language/spanish_ui.lua @@ -1,6 +1,7 @@ -local L = _G.LibSuperVillain:Lang("esES"); +local Localization = LibSuperVillain("Linguist") +local L = Localization:Lang("esES"); if not L then - L = _G.LibSuperVillain:Lang("esMX") + L = Localization:Lang("esMX") end if not L then return; end --[[LOGIN MESSAGE]]-- diff --git a/Interface/AddOns/SVUI/language/taiwanese_ui.lua b/Interface/AddOns/SVUI/language/taiwanese_ui.lua index 9a60c71..de62e82 100644 --- a/Interface/AddOns/SVUI/language/taiwanese_ui.lua +++ b/Interface/AddOns/SVUI/language/taiwanese_ui.lua @@ -1,4 +1,4 @@ -local L = _G.LibSuperVillain:Lang("zhTW"); +local L = LibSuperVillain("Linguist"):Lang("zhTW"); if not L then return; end --[[LOGIN MESSAGE]]-- L["LOGIN_MSG"] = "歡迎使用 |cffFFFF1ASupervillain UI|r! 让您的 %s 和你 %s." diff --git a/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/LibSuperVillain-1.0.lua b/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/LibSuperVillain-1.0.lua index b7e8b1c..014c72a 100644 --- a/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/LibSuperVillain-1.0.lua +++ b/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/LibSuperVillain-1.0.lua @@ -17,1280 +17,32 @@ \_/ |______/|________/|________/|__/ |__/|______/|__/ \__/ -LibSuperVillain is a library used to manage localization, packages, scripts and data embedded +LibSuperVillain is a library used to manage localization, packages, scripts, animations and data embedded into the SVUI core addon. It's main purpose is to keep all methods and logic needed to properly keep -core add-ins functioning outside of the core object. +core add-ins functioning outside of the core object and away from other libraries like LibStub. --]] +local _G = getfenv(0) ---[[ LOCALIZED GLOBALS ]]-- ---GLOBAL NAMESPACE -local _G = getfenv(0); ---LUA -local unpack = _G.unpack; -local select = _G.select; -local assert = _G.assert; -local type = _G.type; -local error = _G.error; -local pcall = _G.pcall; -local print = _G.print; -local ipairs = _G.ipairs; -local pairs = _G.pairs; -local next = _G.next; -local rawset = _G.rawset; -local rawget = _G.rawget; -local tostring = _G.tostring; -local tonumber = _G.tonumber; -local getmetatable = _G.getmetatable; -local setmetatable = _G.setmetatable; ---STRING -local string = _G.string; -local upper = string.upper; -local format = string.format; -local find = string.find; -local match = string.match; -local gsub = string.gsub; ---MATH -local math = _G.math; -local floor = math.floor ---TABLE -local table = _G.table; -local tsort = table.sort; -local tconcat = table.concat; -local tinsert = _G.tinsert; -local tremove = _G.tremove; -local twipe = _G.wipe; ---BLIZZARD API -local ReloadUI = _G.ReloadUI; -local GetLocale = _G.GetLocale; -local CreateFrame = _G.CreateFrame; -local IsAddOnLoaded = _G.IsAddOnLoaded; -local GetNumAddOns = _G.GetNumAddOns; -local GetAddOnInfo = _G.GetAddOnInfo; -local LoadAddOn = _G.LoadAddOn; -local EnableAddOn = _G.EnableAddOn; -local GetSpecialization = _G.GetSpecialization; -local GetAddOnMetadata = _G.GetAddOnMetadata; -local IsAddOnLoadOnDemand = _G.IsAddOnLoadOnDemand; +local LibSuperVillain = _G["LibSuperVillain"] - ---[[ LIB CONSTRUCT ]]-- -local lib -do - _G.LibSuperVillain = {} - lib = _G.LibSuperVillain -end - ---[[ ADDON DATA ]]-- - -local CoreName, CoreObject = ... -local AddonVersion = GetAddOnMetadata(..., "Version"); -local SchemaFromMeta = "X-" .. CoreName .. "-Schema"; -local HeaderFromMeta = "X-" .. CoreName .. "-Header"; -local InterfaceVersion = select(4, GetBuildInfo()); - ---[[ COMMON LOCAL VARS ]]-- - -local GLOBAL_FILENAME = CoreName.."_Global"; -local ERROR_FILENAME = CoreName.."_Errors"; -local PROFILE_FILENAME = CoreName.."_Profile"; -local CACHE_FILENAME = CoreName.."_Cache"; -local SOURCE_KEY = 1; -local GLOBAL_SV, PROFILE_SV, CACHE_SV, ERROR_CACHE, PLUGINS, MODULES; -local PluginString = "" -local AllowedIndexes, LoadOnDemand = {},{}; -local Callbacks, ScriptQueue = {},{}; - -local playerClass = select(2,UnitClass("player")); - -local INFO_FORMAT = "|cffFFFF00%s|r\n |cff33FF00Version: %s|r |cff0099FFby %s|r"; - -if GetLocale() == "ruRU" then - INFO_FORMAT = "|cffFFFF00%s|r\n |cff33FF00Версия: %s|r |cff0099FFот %s|r"; -end - ---[[ LIB EVENT LISTENER ]]-- - -lib.EventManager = CreateFrame("Frame", nil) - ---[[ COMMON META METHODS ]]-- - -local rootstring = function(self) return self.NameID end - ---[[ CUSTOM LUA METHODS ]]-- - ---LOCAL HELPERS -local function formatValueString(text) - if "string" == type(text) then - text = gsub(text,"\n","\\n") - if match(gsub(text,"[^'\"]",""),'^"+$') then - return "'"..text.."'"; - else - return '"'..gsub(text,'"','\\"')..'"'; - end - else - return tostring(text); - end -end - -local function formatKeyString(text) - if "string"==type(text) and match(text,"^[_%a][_%a%d]*$") then - return text; - else - return "["..formatValueString(text).."]"; - end -end - ---APPENDED METHODS -function table.dump(targetTable) - local dumpTable = {}; - local dumpCheck = {}; - for key,value in ipairs(targetTable) do - tinsert(dumpTable, formatValueString(value)); - dumpCheck[key] = true; - end - for key,value in pairs(targetTable) do - if not dumpCheck[key] then - tinsert(dumpTable, "\n "..formatKeyString(key).." = "..formatValueString(value)); - end - end - local output = tconcat(dumpTable, ", "); - return "{ "..output.." }"; -end - -function math.parsefloat(value,decimal) - if decimal and decimal > 0 then - local calc1 = 10 ^ decimal; - local calc2 = (value * calc1) + 0.5; - return floor(calc2) / calc1 - end - return floor(value + 0.5) -end - -function table.copy(targetTable,deepCopy,mergeTable) - mergeTable = mergeTable or {}; - if targetTable==nil then return nil end - if mergeTable[targetTable] then return mergeTable[targetTable] end - local replacementTable = {} - for key,value in pairs(targetTable)do - if deepCopy and type(value) == "table" then - replacementTable[key] = table.copy(value, deepCopy, mergeTable) - else - replacementTable[key] = value - end - end - setmetatable(replacementTable, table.copy(getmetatable(targetTable), deepCopy, mergeTable)) - mergeTable[targetTable] = replacementTable; - return replacementTable -end - -function string.trim(this) - return find(this, '^%s*$') and '' or match(this, '^%s*(.*%S)') -end - -function string.color(this, color) - return format("|cff%s%s|r", color, this) -end - -function string.link(this, prefix, text, color) - text = tostring(text) - local colorstring = tostring(this):color(color or "ffffff") - return format("|H%s:%s|h%s|h", prefix, text, colorstring) -end - -function string.explode(str, delim) - local res = {} - local pattern = format("([^%s]+)%s()", delim, delim) - local line, pos - while (true) do - line, pos = match(str, pattern, pos) - if line == nil then break end - tinsert(res, line) - end - return res -end - ---[[ - /$$ /$$ /$$ /$$ -| $$ |__/ |__/ | $$ -| $$ /$$ /$$$$$$$ /$$$$$$ /$$ /$$ /$$ /$$$$$$$/$$$$$$ -| $$ | $$| $$__ $$ /$$__ $$| $$ | $$| $$ /$$_____/_ $$_/ -| $$ | $$| $$ \ $$| $$ \ $$| $$ | $$| $$| $$$$$$ | $$ -| $$ | $$| $$ | $$| $$ | $$| $$ | $$| $$ \____ $$ | $$ /$$ -| $$$$$$$$| $$| $$ | $$| $$$$$$$| $$$$$$/| $$ /$$$$$$$/ | $$$$/ -|________/|__/|__/ |__/ \____ $$ \______/ |__/|_______/ \___/ - /$$ \ $$ - | $$$$$$/ - \______/ - -Linguist is a simple localization component. Seriously, thats it! ---]] - ---LINGUIST HELPERS -local activeLocale - -local failsafe = function() assert(false) end - ---LINGUIST META METHODS -local metaread = { - __index = function(self, key) - rawset(self, key, key) - return key - end -} - -local defaultwrite = setmetatable({}, { - __newindex = function(self, key, value) - if not rawget(activeLocale, key) then - rawset(activeLocale, key, value == true and key or value) - end - end, - __index = failsafe -}) - -local metawrite = setmetatable({}, { - __newindex = function(self, key, value) - rawset(activeLocale, key, value == true and key or value) - end, - __index = failsafe -}) - ---LINGUIST STORAGE -lib.Localization = setmetatable({}, metaread); - ---LINGUIST PUBLIC METHOD -function lib:Lang(locale, isDefault) - if(not locale) then - return self.Localization - else - local GAME_LOCALE = GetLocale() - if GAME_LOCALE == "enGB" then GAME_LOCALE = "enUS" end - - activeLocale = self.Localization - - if isDefault then - return defaultwrite - elseif(locale == GAME_LOCALE) then - return metawrite - end - end -end - ---[[ - /$$$$$$$ /$$ /$$ -| $$__ $$ | $$ | $$ -| $$ \ $$ /$$$$$$ /$$$$$$ /$$$$$$ | $$$$$$$ /$$$$$$ /$$$$$$$ /$$$$$$ -| $$ | $$|____ $$|_ $$_/ |____ $$| $$__ $$|____ $$ /$$_____/ /$$__ $$ -| $$ | $$ /$$$$$$$ | $$ /$$$$$$$| $$ \ $$ /$$$$$$$| $$$$$$ | $$$$$$$$ -| $$ | $$/$$__ $$ | $$ /$$/$$__ $$| $$ | $$/$$__ $$ \____ $$| $$_____/ -| $$$$$$$/ $$$$$$$ | $$$$/ $$$$$$$| $$$$$$$/ $$$$$$$ /$$$$$$$/| $$$$$$$ -|_______/ \_______/ \___/ \_______/|_______/ \_______/|_______/ \_______/ - - -DataBase is a component used to create and manage SVUI data objects. - -It's main purpose is to keep all methods and logic needed to properly maintain -valid data outside of the core object. ---]] - ---DATABASE LOCAL HELPERS -local function SanitizeStorage(data) - for k,v in pairs(data) do - if(k == "STORED" or k == "SAFEDATA" or k == "LAYOUT") then - data[k] = nil - end - end -end - -local function LiveProfileChange() - local LastKey = SOURCE_KEY - if(PROFILE_SV.SAFEDATA and PROFILE_SV.SAFEDATA.dualSpecEnabled) then - SOURCE_KEY = GetSpecialization() - lib.EventManager:RegisterEvent("ACTIVE_TALENT_GROUP_CHANGED") - - if(not SOURCE_KEY) then - SOURCE_KEY = 1 - end - - if(LastKey ~= SOURCE_KEY) then - --construct core dataset - local db = rawget(CoreObject.db, "data") - db = PROFILE_SV.STORED[SOURCE_KEY] - - local cache = rawget(CoreObject.cache, "data") - cache = CACHE_SV.STORED[SOURCE_KEY] - - if(CoreObject.ReLoad) then - CoreObject:ReLoad() - end - - lib:RefreshAll() - end - else - SOURCE_KEY = 1 - lib.EventManager:UnregisterEvent("ACTIVE_TALENT_GROUP_CHANGED") - end -end - -local function tablecopy(d, s, debug) - if(debug) then - print(debug) - assert(type(s) == "table", "tablecopy ERROR: source (" .. debug .. ") is not a table") - assert(type(d) == "table", "tablecopy ERROR: destination (" .. debug .. ") is not a table") - end - if(type(s) ~= "table") then return end - if(type(d) ~= "table") then return end - for k, v in pairs(s) do - local saved = rawget(d, k) - if type(v) == "table" then - if not saved then rawset(d, k, {}) end - tablecopy(d[k], v) - elseif(saved == nil or (saved and type(saved) ~= type(v))) then - rawset(d, k, v) - end - end -end - -local function tablesplice(targetTable, mergeTable) - if type(targetTable) ~= "table" then targetTable = {} end - - if type(mergeTable) == 'table' then - for key,val in pairs(mergeTable) do - if type(val) == "table" then - val = tablesplice(targetTable[key], val) - end - targetTable[key] = val - end - end - return targetTable -end - -local function importdata(s, d) - if type(d) ~= "table" then d = {} end - if type(s) == "table" then - for k,v in pairs(s) do - if type(v) == "table" then - v = importdata(v, d[k]) - end - d[k] = v - end - end - return d -end - -local function removedefaults(db, src, nometa) - if(type(src) ~= "table") then - if(db == src) then db = nil end - return - end - if(not nometa) then - setmetatable(db, nil) - end - for k,v in pairs(src) do - if type(v) == "table" and type(db[k]) == "table" then - removedefaults(db[k], v, nometa) - if next(db[k]) == nil then - db[k] = nil - end - else - if db[k] == v then - db[k] = nil - end - end - end -end - ---DATABASE META METHODS -local meta_transdata = { - __index = function(t, k) - if(not k or k == "") then return end - local sv = rawget(t, "data") - local dv = rawget(t, "defaults") - local src = dv and dv[k] - - if(src ~= nil) then - if(type(src) == "table") then - if(sv[k] == nil or (sv[k] ~= nil and type(sv[k]) ~= "table")) then sv[k] = {} end - tablecopy(sv[k], src) - else - if(sv[k] == nil or (sv[k] ~= nil and type(sv[k]) ~= type(src))) then sv[k] = src end - end - end - - rawset(t, k, sv[k]) - return rawget(t, k) - end, -} - -local meta_database = { - __index = function(t, k) - if(not k or k == "") then return end - local sv = rawget(t, "data") - if(not sv[k]) then sv[k] = {} end - rawset(t, k, sv[k]) - return rawget(t, k) - end, -} - ---DATABASE PUBLIC METHODS -function lib:Remove(key) - if(GLOBAL_SV.profiles[key]) then GLOBAL_SV.profiles[key] = nil end - if(GLOBAL_SV.cache[key]) then GLOBAL_SV.cache[key] = nil end - twipe(GLOBAL_SV.profileKeys) - for k,v in pairs(GLOBAL_SV.profiles) do - GLOBAL_SV.profileKeys[k] = k - end - for k,v in pairs(GLOBAL_SV.cache) do - GLOBAL_SV.profileKeys[k] = k - end -end - -function lib:GetProfiles() - local list = GLOBAL_SV.profileKeys or {} - return list -end - -function lib:CheckProfiles() - local hasProfile = false - local list = GLOBAL_SV.profileKeys or {} - for key,_ in pairs(list) do - hasProfile = true - end - return hasProfile -end - -function lib:ImportDatabase(key) - if(not GLOBAL_SV.profiles[key]) then GLOBAL_SV.profiles[key] = {} end; - PROFILE_SV.STORED[SOURCE_KEY] = GLOBAL_SV.profiles[key] - - if(not GLOBAL_SV.cache[key]) then GLOBAL_SV.cache[key] = {} end; - CACHE_SV.STORED[SOURCE_KEY] = GLOBAL_SV.cache[key] - - ReloadUI() -end - -function lib:ExportDatabase(key) - local export, saved - - if(not GLOBAL_SV.profiles[key]) then GLOBAL_SV.profiles[key] = {} end; - export = rawget(CoreObject.db, "data"); - saved = GLOBAL_SV.profiles[key]; - tablecopy(saved, export); - - if not GLOBAL_SV.cache[key] then GLOBAL_SV.cache[key] = {} end - export = rawget(CoreObject.cache, "data") - saved = GLOBAL_SV.cache[key] - tablecopy(saved, export); - - - twipe(GLOBAL_SV.profileKeys) - for k,v in pairs(GLOBAL_SV.profiles) do - GLOBAL_SV.profileKeys[k] = k - end - for k,v in pairs(GLOBAL_SV.cache) do - GLOBAL_SV.profileKeys[k] = k - end -end - -function lib:WipeDatabase() - for k,v in pairs(PROFILE_SV.STORED[SOURCE_KEY]) do - PROFILE_SV.STORED[SOURCE_KEY][k] = nil - end -end - -function lib:WipeCache(index) - if(index) then - CACHE_SV.STORED[SOURCE_KEY][index] = nil - else - for k,v in pairs(CACHE_SV.STORED[SOURCE_KEY]) do - CACHE_SV.STORED[SOURCE_KEY][k] = nil - end - end -end - -function lib:WipeGlobal() - for k,v in pairs(GLOBAL_SV) do - GLOBAL_SV[k] = nil - end -end - -function lib:GetSafeData(index) - if(index) then - return PROFILE_SV.SAFEDATA[index] - else - return PROFILE_SV.SAFEDATA - end -end - -function lib:SaveSafeData(index, value) - PROFILE_SV.SAFEDATA[index] = value -end - -function lib:CheckData(schema, key) - local file = PROFILE_SV.STORED[SOURCE_KEY][schema] - print("______" .. schema .. ".db[" .. key .. "]_____") - print(file[key]) - print("______SAVED_____") -end - -function lib:NewGlobal(index) - index = index or CoreObject.Schema - if(not GLOBAL_SV[index]) then - GLOBAL_SV[index] = {} - end - return GLOBAL_SV[index] -end - ---[[ - /$$$$$$$ /$$ /$$ -| $$__ $$ |__/ | $$ -| $$ \ $$ /$$$$$$ /$$$$$$ /$$ /$$$$$$$/$$$$$$ /$$$$$$ /$$ /$$ -| $$$$$$$/ /$$__ $$ /$$__ $$| $$ /$$_____/_ $$_/ /$$__ $$| $$ | $$ -| $$__ $$| $$$$$$$$| $$ \ $$| $$| $$$$$$ | $$ | $$ \__/| $$ | $$ -| $$ \ $$| $$_____/| $$ | $$| $$ \____ $$ | $$ /$$| $$ | $$ | $$ -| $$ | $$| $$$$$$$| $$$$$$$| $$ /$$$$$$$/ | $$$$/| $$ | $$$$$$$ -|__/ |__/ \_______/ \____ $$|__/|_______/ \___/ |__/ \____ $$ - /$$ \ $$ /$$ | $$ - | $$$$$$/ | $$$$$$/ - \______/ \______/ - -Registry is a component used to manage packages and scripts embedded -into the SVUI core addon. - -It's main purpose is to keep all methods and logic needed to properly keep -core add-ins functioning outside of the core object. ---]] - ---REGISTRY LOCAL HELPERS - -local function HandleErrors(schema, action, catch) - if(CoreObject.DebugMode == true) then - schema = schema or "LibSuperVillain" - action = action or "Unknown Function" - local timestamp = date("%m/%d/%y %H:%M:%S") - local err_message = ("%s [%s] - (%s) %s"):format(schema, action, timestamp, catch) - tinsert(ERROR_CACHE.FOUND, err_message) - --ScriptErrorsFrame_OnError(catch, false, true) - CoreObject:Debugger(err_message) - end -end - -local function LoadingProxy(schema, obj) - if(not obj) then return end - if(not obj.initialized) then - if(obj.Load and type(obj.Load) == "function") then - local _, catch = pcall(obj.Load, obj) - if(catch) then - HandleErrors(schema, "Load", catch) - else - obj.initialized = true - end - end - else - if(obj.ReLoad and type(obj.ReLoad) == "function") then - local _, catch = pcall(obj.ReLoad, obj) - if(catch) then - HandleErrors(schema, "ReLoad", catch) - end - end - end -end - ---OBJECT INTERNALS - -local changeDBVar = function(self, value, key, sub1, sub2, sub3) - local db = CoreObject.db[self.Schema] - if((sub1 and sub2 and sub3) and (db[sub1] and db[sub1][sub2] and db[sub1][sub2][sub3])) then - db[sub1][sub2][sub3][key] = value - elseif((sub1 and sub2) and (db[sub1] and db[sub1][sub2])) then - db[sub1][sub2][key] = value - elseif(sub1 and db[sub1]) then - db[sub1][key] = value - else - db[key] = value - end - - if(self.UpdateLocals) then - self:UpdateLocals() - end -end - -local changePluginDBVar = function(self, value, key, sub1, sub2, sub3) - local db = self.db - if((sub1 and sub2 and sub3) and (db[sub1] and db[sub1][sub2] and db[sub1][sub2][sub3])) then - db[sub1][sub2][sub3][key] = value - elseif((sub1 and sub2) and (db[sub1] and db[sub1][sub2])) then - db[sub1][sub2][key] = value - elseif(sub1 and db[sub1]) then - db[sub1][key] = value - else - db[key] = value - end - - if(self.UpdateLocals) then - self:UpdateLocals() - end -end - -local innerOnEvent = function(self, event, ...) - local obj = self.___owner - local fn = self[event] - if(fn and type(fn) == "function" and obj.initialized) then - local _, catch = pcall(fn, obj, event, ...) - if(catch) then - local schema = obj.Schema - HandleErrors(schema, event, catch) - end - end -end - -local registerEvent = function(self, eventname, eventfunc) - if not self.___eventframe then - self.___eventframe = CreateFrame("Frame", nil) - self.___eventframe.___owner = self - self.___eventframe:SetScript("OnEvent", innerOnEvent) - end - - if(not self.___eventframe[eventname]) then - local fn = eventfunc - if type(eventfunc) == "string" then - fn = self[eventfunc] - elseif(not fn and self[eventname]) then - fn = self[eventname] - end - self.___eventframe[eventname] = fn - end +if not LibSuperVillain then + LibSuperVillain = LibSuperVillain or {libs = {}} + _G["LibSuperVillain"] = LibSuperVillain - self.___eventframe:RegisterEvent(eventname) -end - -local unregisterEvent = function(self, event, ...) - if(self.___eventframe) then - self.___eventframe:UnregisterEvent(event) - end -end - -local innerOnUpdate = function(self, elapsed) - if self.elapsed and self.elapsed > (self.throttle) then - local obj = self.___owner - local callbacks = self.callbacks - - for name, fn in pairs(callbacks) do - local _, catch = pcall(fn, obj) - if(catch and CoreObject.Debugging) then - print(catch) - end - end - - self.elapsed = 0 - else - self.elapsed = (self.elapsed or 0) + elapsed - end -end - -local registerUpdate = function(self, updatefunc, throttle) - if not self.___updateframe then - self.___updateframe = CreateFrame("Frame", nil); - self.___updateframe.___owner = self; - self.___updateframe.callbacks = {}; - self.___updateframe.elapsed = 0; - self.___updateframe.throttle = throttle or 0.2; - end - - if(updatefunc and type(updatefunc) == "string" and self[updatefunc]) then - self.___updateframe.callbacks[updatefunc] = self[updatefunc] - end - - self.___updateframe:SetScript("OnUpdate", innerOnUpdate) -end - -local unregisterUpdate = function(self, updatefunc) - if(updatefunc and type(updatefunc) == "string" and self.___updateframe.callbacks[updatefunc]) then - self.___updateframe.callbacks[updatefunc] = nil - if(#self.___updateframe.callbacks == 0) then - self.___updateframe:SetScript("OnUpdate", nil) - end - else - self.___updateframe:SetScript("OnUpdate", nil) - end -end - -local function SetPluginString(addonName) - local author = GetAddOnMetadata(addonName, "Author") or "Unknown" - local name = GetAddOnMetadata(addonName, "Title") or addonName - local version = GetAddOnMetadata(addonName, "Version") or "???" - return INFO_FORMAT:format(name, version, author) -end - ---REGISTRY PUBLIC METHODS - -function lib:RunCallbacks() - for i=1, #Callbacks do - local fn = Callbacks[i] - if(fn and type(fn) == "function") then - local _, catch = pcall(fn) - if(catch) then - HandleErrors("LibSuperVillain", "Callback", catch) - end - end - end -end - -function lib:RefreshModule(schema) - local obj = CoreObject[schema] - LoadingProxy(schema, obj) -end - -function lib:RefreshPlugin(schema) - local obj = _G[schema] - LoadingProxy(schema, obj) -end - -function lib:RefreshAll() - for _,schema in pairs(MODULES) do - local obj = CoreObject[schema] - LoadingProxy(schema, obj) - end - - for schema,_ in pairs(PLUGINS) do - local obj = _G[schema] - LoadingProxy(schema, obj) - end -end - -function lib:LiveUpdate() - if(PROFILE_SV.SAFEDATA.NEEDSLIVEUPDATE and not C_PetBattles.IsInBattle()) then - self:RefreshAll() - PROFILE_SV.SAFEDATA.NEEDSLIVEUPDATE = false - end -end - -function lib:GetModuletable() - return MODULES -end - -function lib:GetPlugins() - return PluginString -end - -function lib:CheckDualProfile() - return PROFILE_SV.SAFEDATA.dualSpecEnabled -end - -function lib:ToggleDualProfile(enabled) - PROFILE_SV.SAFEDATA.dualSpecEnabled = enabled - if(enabled) then - self.EventManager:RegisterEvent("ACTIVE_TALENT_GROUP_CHANGED") - LiveProfileChange() - else - self.EventManager:UnregisterEvent("ACTIVE_TALENT_GROUP_CHANGED") - end -end - -function lib:LoadQueuedModules() - if MODULES then - for i=1,#MODULES do - local schema = MODULES[i] - local obj = CoreObject[schema] - local data = CoreObject.db[schema] - if(obj and data and data.enable and (not obj.initialized)) then - local halt = false - if(data.incompatible) then - for addon,_ in pairs(data.incompatible) do - if IsAddOnLoaded(addon) then halt = true end - end - end - if(not halt) then - LoadingProxy(schema, obj) - end - end - end - end -end - -function lib:LoadQueuedPlugins() - if PLUGINS then - for schema,files in pairs(PLUGINS) do - local obj = _G[schema] - local enabled = PROFILE_SV.SAFEDATA[schema].enable - if(obj and enabled and (not obj.initialized)) then - local halt = false - - if((not obj.db) and files.PROFILE and _G[files.PROFILE]) then - local db = setmetatable({}, meta_transdata) - db.data = _G[files.PROFILE] - db.defaults = obj.configs - obj.db = db - end - - if((not obj.cache) and files.CACHE and _G[files.CACHE]) then - local cache = setmetatable({}, meta_database) - cache.data = _G[files.CACHE] - obj.cache = cache - end - - if((not obj.public) and files.GLOBAL and _G[files.GLOBAL]) then - local public = setmetatable({}, meta_database) - public.data = _G[files.GLOBAL] - obj.public = public - end - - if(obj.db and obj.db.incompatible) then - for addon,_ in pairs(obj.db.incompatible) do - if IsAddOnLoaded(addon) then halt = true end - end - end - - if(not halt) then - LoadingProxy(schema, obj) - end - end - end + function LibSuperVillain:NewLibrary(libName) + assert(type(libName) == "string", "Missing Library Name") + self.libs[libName] = self.libs[libName] or {} + return self.libs[libName] end -end - ---[[ CONSTRUCTORS ]]-- - -function lib:NewPlugin(addonName, addonObject, pfile, gfile, cfile) - local version = GetAddOnMetadata(addonName, "Version") - local header = GetAddOnMetadata(addonName, HeaderFromMeta) - local schema = GetAddOnMetadata(addonName, SchemaFromMeta) - local lod = IsAddOnLoadOnDemand(addonName) - - PROFILE_SV.SAFEDATA[schema] = PROFILE_SV.SAFEDATA[schema] or {["enable"] = true} - - local addonmeta = {} - local oldmeta = getmetatable(addonObject) - if oldmeta then - for k, v in pairs(oldmeta) do addonmeta[k] = v end - end - addonmeta.__tostring = rootstring - setmetatable( addonObject, addonmeta ) - - addonObject.Version = version - addonObject.NameID = addonName - addonObject.TitleID = header - addonObject.Schema = schema - addonObject.LoD = lod - addonObject.initialized = false - addonObject.CombatLocked = false - addonObject.ChangeDBVar = changePluginDBVar - addonObject.RegisterEvent = registerEvent - addonObject.UnregisterEvent = unregisterEvent - addonObject.RegisterUpdate = registerUpdate - addonObject.UnregisterUpdate = unregisterUpdate - - if(IsAddOnLoaded(addonName) and not lod) then - CoreObject.Options.args.plugins.args.pluginOptions.args[schema] = { - type = "group", - name = header, - childGroups = "tree", - args = { - enable = { - order = 1, - type = "toggle", - name = "Enable", - get = function() - return PROFILE_SV.SAFEDATA[schema].enable - end, - set = function(key, value) - PROFILE_SV.SAFEDATA[schema].enable = value; - CoreObject:StaticPopup_Show("RL_CLIENT") - end, - } - } - } - end - - _G[schema] = addonObject - - if(not PLUGINS) then PLUGINS = {} end - - PLUGINS[schema] = { - ["GLOBAL"] = gfile, - ["PROFILE"] = pfile, - ["CACHE"] = cfile, - }; - - local infoString = SetPluginString(addonName) - local oldString = PluginString - PluginString = ("%s%s\n"):format(oldString, infoString) - - return addonObject -end - -local function NewLoadOnDemand(addonName, schema, header) - LoadOnDemand[schema] = addonName; - PROFILE_SV.SAFEDATA[schema] = PROFILE_SV.SAFEDATA[schema] or {["enable"] = false} - CoreObject.Options.args.plugins.args.pluginOptions.args[schema] = { - type = "group", - name = header, - childGroups = "tree", - args = { - enable = { - order = 1, - type = "execute", - width = "full", - name = function() - local nameString = "Disable" - if(not IsAddOnLoaded(addonName)) then - nameString = "Enable" - end - return nameString - end, - func = function() - if(not IsAddOnLoaded(addonName)) then - local loaded, reason = LoadAddOn(addonName) - PROFILE_SV.SAFEDATA[schema].enable = true - lib:LoadQueuedPlugins() - else - PROFILE_SV.SAFEDATA[schema].enable = false - CoreObject:StaticPopup_Show("RL_CLIENT") - end - end, - } - } - } -end - ---LIBRARY EVENT HANDLING - -local Library_OnEvent = function(self, event, arg, ...) - if(event == "PLAYER_LOGOUT") then - local sv = rawget(CoreObject.db, "data") - local src = rawget(CoreObject.db, "defaults") - for k,v in pairs(sv) do - if(not src[k]) then - sv[k] = nil - elseif(src[k] ~= nil and (not LoadOnDemand[k])) then - removedefaults(sv[k], src[k]) - end - end - elseif(event == "ADDON_LOADED") then - if(arg == CoreName) then - if(not CoreObject.___loaded and CoreObject.Load) then - CoreObject:Load() - CoreObject.___loaded = true - self:UnregisterEvent("ADDON_LOADED") - end - end - elseif(event == "PLAYER_LOGIN") then - if(not CoreObject.___initialized and CoreObject.Initialize and IsLoggedIn()) then - CoreObject:Initialize() - CoreObject.___initialized = true - self:UnregisterEvent("PLAYER_LOGIN") - end - elseif(event == "ACTIVE_TALENT_GROUP_CHANGED") then - LiveProfileChange() - end -end - --- CORE OBJECT CONSTRUCT - -local Core_NewCallback = function(self, fn) - if(fn and type(fn) == "function") then - Callbacks[#Callbacks+1] = fn - end -end - -local Core_NewScript = function(self, fn) - if(fn and type(fn) == "function") then - ScriptQueue[#ScriptQueue+1] = fn - end -end - -local Core_NewPackage = function(self, schema, header) - if(self[schema]) then return end - - if(not MODULES) then MODULES = {} end - MODULES[#MODULES+1] = schema - - AllowedIndexes[schema] = schema - - local addonName = ("SVUI [%s]"):format(schema) - - local obj = { - NameID = addonName, - TitleID = header, - Schema = schema, - initialized = false, - CombatLocked = false, - ChangeDBVar = changeDBVar, - RegisterEvent = registerEvent, - UnregisterEvent = unregisterEvent, - RegisterUpdate = registerUpdate, - UnregisterUpdate = unregisterUpdate - } - - local addonmeta = {} - local oldmeta = getmetatable(obj) - if oldmeta then - for k, v in pairs(oldmeta) do addonmeta[k] = v end - end - addonmeta.__tostring = rootstring - setmetatable( obj, addonmeta ) - - self[schema] = obj - return self[schema] -end - -local Core_ResetData = function(self, sub, sub2, sub3) - local data = self.db - local sv = rawget(data, "data") - local src = rawget(data, "defaults") - local targetData - if(sub3 and sub2 and sv and sv[sub] and sv[sub][sub2]) then - targetData = sv[sub][sub2][sub3] - elseif(sub2 and sv and sv[sub]) then - targetData = sv[sub][sub2] - elseif(sub and sv) then - targetData = sv[sub] - else - targetData = sv - end - if(targetData) then - for k,v in pairs(targetData) do - targetData[k] = nil + function LibSuperVillain:Fetch(libName, silent) + if not self.libs[libName] and not silent then + error(("Cannot find a library instance of %q."):format(tostring(libName)), 2) end - else - sv = {} - end - tablecopy(sv, src) -end - -function lib:NewCore(gfile, efile, pfile, cfile) - --meta assurance - local mt = {}; - local old = getmetatable(CoreObject); - if old then - for k, v in pairs(old) do mt[k] = v end - end - mt.__tostring = rootstring; - setmetatable(CoreObject, mt); - - --database - GLOBAL_FILENAME = gfile or GLOBAL_FILENAME - ERROR_FILENAME = efile or ERROR_FILENAME - PROFILE_FILENAME = pfile or PROFILE_FILENAME - CACHE_FILENAME = cfile or CACHE_FILENAME - - --events - if(not self.EventManager.Initialized) then - self.EventManager:RegisterEvent("ADDON_LOADED") - self.EventManager:RegisterEvent("PLAYER_LOGIN") - self.EventManager:RegisterEvent("PLAYER_LOGOUT") - self.EventManager:SetScript("OnEvent", Library_OnEvent) - self.EventManager.Initialized = true + return self.libs[libName] end - --internals - CoreObject.___errors = {}; - - CoreObject.NameID = CoreName; - CoreObject.Version = AddonVersion; - CoreObject.GameVersion = tonumber(InterfaceVersion); - CoreObject.DebugMode = false; - CoreObject.Schema = GetAddOnMetadata(CoreName, SchemaFromMeta); - CoreObject.TitleID = GetAddOnMetadata(CoreName, HeaderFromMeta); - - CoreObject.RegisterEvent = registerEvent - CoreObject.UnregisterEvent = unregisterEvent - CoreObject.RegisterUpdate = registerUpdate - CoreObject.UnregisterUpdate = unregisterUpdate - - CoreObject.NewCallback = Core_NewCallback - CoreObject.NewScript = Core_NewScript - CoreObject.NewPackage = Core_NewPackage - CoreObject.ResetData = Core_ResetData - CoreObject.db = tablesplice(CoreObject.configs, {}) - CoreObject.L = self:Lang() - - --set global - _G[CoreName] = CoreObject; - - return _G[CoreName] + setmetatable(LibSuperVillain, { __call = LibSuperVillain.Fetch }) end - --- INITIALIZE AND LAUNCH - -function lib:Initialize() - local coreSchema = CoreObject.Schema - --GLOBAL SAVED VARIABLES - if not _G[GLOBAL_FILENAME] then _G[GLOBAL_FILENAME] = {} end - GLOBAL_SV = _G[GLOBAL_FILENAME] - - if(GLOBAL_SV.profileKeys) then - twipe(GLOBAL_SV.profileKeys) - else - GLOBAL_SV.profileKeys = {} - end - - GLOBAL_SV.profiles = GLOBAL_SV.profiles or {} - for k,v in pairs(GLOBAL_SV.profiles) do - GLOBAL_SV.profileKeys[k] = k - end - - GLOBAL_SV.cache = GLOBAL_SV.cache or {} - for k,v in pairs(GLOBAL_SV.cache) do - GLOBAL_SV.profileKeys[k] = k - end - - --SAVED ERRORS - if not _G[ERROR_FILENAME] then _G[ERROR_FILENAME] = {} end - ERROR_CACHE = _G[ERROR_FILENAME] - - local datestamp = date("%m_%d_%y") - - if(ERROR_CACHE.TODAY and ERROR_CACHE.TODAY ~= datestamp) then - ERROR_CACHE.FOUND = {} - end - - if(not ERROR_CACHE.FOUND) then - ERROR_CACHE.FOUND = {} - end - - ERROR_CACHE.TODAY = datestamp - - --CACHE SAVED VARIABLES - if not _G[CACHE_FILENAME] then _G[CACHE_FILENAME] = {} end - CACHE_SV = _G[CACHE_FILENAME] - if(not CACHE_SV.STORED) then - CACHE_SV.STORED = {} - CACHE_SV.STORED[1] = {} - CACHE_SV.STORED[2] = {} - CACHE_SV.STORED[3] = {} - if playerClass == "DRUID" then - CACHE_SV.STORED[4] = {} - end - for k,v in pairs(CACHE_SV) do - if(k ~= "STORED") then - CACHE_SV.STORED[1][k] = v - end - end - end - - --PROFILE SAVED VARIABLES - if not _G[PROFILE_FILENAME] then _G[PROFILE_FILENAME] = {} end - PROFILE_SV = _G[PROFILE_FILENAME] - PROFILE_SV.SAFEDATA = PROFILE_SV.SAFEDATA or {dualSpecEnabled = false} - - if not PROFILE_SV.SAFEDATA.NEEDSLIVEUPDATE then PROFILE_SV.SAFEDATA.NEEDSLIVEUPDATE = false end - - if(PROFILE_SV.SAFEDATA and PROFILE_SV.SAFEDATA.dualSpecEnabled) then - SOURCE_KEY = GetSpecialization() or 1 - self.EventManager:RegisterEvent("ACTIVE_TALENT_GROUP_CHANGED") - else - SOURCE_KEY = 1 - self.EventManager:UnregisterEvent("ACTIVE_TALENT_GROUP_CHANGED") - end - - if(not PROFILE_SV.STORED) then - PROFILE_SV.STORED = {} - PROFILE_SV.STORED[1] = {} - PROFILE_SV.STORED[1][coreSchema] = {} - PROFILE_SV.STORED[2] = {} - PROFILE_SV.STORED[2][coreSchema] = {} - PROFILE_SV.STORED[3] = {} - PROFILE_SV.STORED[3][coreSchema] = {} - if playerClass == "DRUID" then - PROFILE_SV.STORED[4] = {} - PROFILE_SV.STORED[4][coreSchema] = {} - end - - --Attempt to copy any prior variables, even outdated - if(PROFILE_SV.system or (MODULES[1] and PROFILE_SV[MODULES[1]])) then - for k,v in pairs(PROFILE_SV) do - if(k == "system") then - tablecopy(v, PROFILE_SV.STORED[1][coreSchema]) - elseif(k == "media" or k == "filter") then - PROFILE_SV.STORED[1][coreSchema][k] = v - elseif(AllowedIndexes[k]) then - PROFILE_SV.STORED[1][k] = v - end - end - end - else - PROFILE_SV.STORED[1] = PROFILE_SV.STORED[1] or {} - PROFILE_SV.STORED[1][coreSchema] = PROFILE_SV.STORED[1][coreSchema] or {} - SanitizeStorage(PROFILE_SV.STORED[1]) - - PROFILE_SV.STORED[2] = PROFILE_SV.STORED[2] or {} - PROFILE_SV.STORED[2][coreSchema] = PROFILE_SV.STORED[2][coreSchema] or {} - SanitizeStorage(PROFILE_SV.STORED[2]) - - PROFILE_SV.STORED[3] = PROFILE_SV.STORED[3] or {} - PROFILE_SV.STORED[3][coreSchema] = PROFILE_SV.STORED[3][coreSchema] or {} - SanitizeStorage(PROFILE_SV.STORED[3]) - - if playerClass == "DRUID" then - PROFILE_SV.STORED[4] = PROFILE_SV.STORED[4] or {} - PROFILE_SV.STORED[4][coreSchema] = PROFILE_SV.STORED[4][coreSchema] or {} - SanitizeStorage(PROFILE_SV.STORED[4]) - elseif PROFILE_SV.STORED[4] then - PROFILE_SV.STORED[4] = nil - end - - end - - for k,v in pairs(PROFILE_SV) do - if(k ~= "STORED" and k ~= "SAFEDATA") then - PROFILE_SV[k] = nil - end - end - - --construct core dataset - local db = setmetatable({}, meta_transdata) - db.data = PROFILE_SV.STORED[SOURCE_KEY] - db.defaults = CoreObject.configs - CoreObject.db = db - - local cache = setmetatable({}, meta_database) - cache.data = CACHE_SV.STORED[SOURCE_KEY] - CoreObject.cache = cache - - --check for LOD plugins - local addonCount = GetNumAddOns() - - for i = 1, addonCount do - local addonName, _, _, _, _, reason = GetAddOnInfo(i) - local lod = IsAddOnLoadOnDemand(i) - local header = GetAddOnMetadata(i, HeaderFromMeta) - local schema = GetAddOnMetadata(i, SchemaFromMeta) - - if(lod and schema) then - NewLoadOnDemand(addonName, schema, header) - end - end -end - -function lib:Launch() - if LoadOnDemand then - for schema,name in pairs(LoadOnDemand) do - local db = PROFILE_SV.SAFEDATA[schema] - if(db and (db.enable or db.enable ~= false)) then - if(not IsAddOnLoaded(name)) then - local loaded, reason = LoadAddOn(name) - end - EnableAddOn(name) - end - end - end - - self:LoadQueuedModules() - self:LoadQueuedPlugins() - - if ScriptQueue then - for i=1, #ScriptQueue do - local fn = ScriptQueue[i] - if(fn and type(fn) == "function") then - fn() - end - end - - ScriptQueue = nil - end - - PROFILE_SV.SAFEDATA.NEEDSLIVEUPDATE = C_PetBattles.IsInBattle() -end \ No newline at end of file diff --git a/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/LibSuperVillain-1.0.xml b/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/LibSuperVillain-1.0.xml new file mode 100644 index 0000000..ec560ff --- /dev/null +++ b/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/LibSuperVillain-1.0.xml @@ -0,0 +1,7 @@ + +