From 5daee133f0af9841e21f8f1b8bbf6b43c6661145 Mon Sep 17 00:00:00 2001 From: Steven Jackson Date: Fri, 9 Jan 2015 01:19:29 -0600 Subject: [PATCH] 5.4.16 --- Interface/AddOns/SVUI/SVUI.toc | 2 +- .../artwork/Unitframe/Class/DEATHKNIGHT-BLOOD.blp | Bin 2580 -> 0 bytes .../artwork/Unitframe/Class/DEATHKNIGHT-FROST.blp | Bin 2580 -> 0 bytes .../artwork/Unitframe/Class/DEATHKNIGHT-UNHOLY.blp | Bin 2580 -> 0 bytes .../artwork/Unitframe/Class/MAGE-BG-ANIMATION.blp | Bin 6676 -> 0 bytes .../assets/artwork/Unitframe/Class/MAGE-CHARGE.blp | Bin 0 -> 23060 bytes .../artwork/Unitframe/Class/MAGE-FG-ANIMATION.blp | Bin 6676 -> 0 bytes .../artwork/Unitframe/Class/MAGE-ICICLE-1.blp | Bin 0 -> 23060 bytes .../artwork/Unitframe/Class/MAGE-ICICLE-2.blp | Bin 0 -> 23060 bytes .../artwork/Unitframe/Class/MAGE-ICICLE-3.blp | Bin 0 -> 23060 bytes .../artwork/Unitframe/Class/MAGE-ICICLE-4.blp | Bin 0 -> 23060 bytes .../artwork/Unitframe/Class/MAGE-ICICLE-5.blp | Bin 0 -> 23060 bytes .../assets/artwork/Unitframe/Class/RUNES-BG.blp | Bin 0 -> 23060 bytes .../assets/artwork/Unitframe/Class/RUNES-FG.blp | Bin 0 -> 23060 bytes Interface/AddOns/SVUI/data/defaults.lua | 12 +- Interface/AddOns/SVUI/framework/api/api.xml | 12 +- .../AddOns/SVUI/framework/widgets/widget_afk.lua | 15 +- .../libs/LibSuperVillain-1.0/modules/Registry.lua | 23 --- .../libs/LibSuperVillain-1.0/modules/SpecialFX.lua | 2 +- .../Plugins/oUF_ActionPanel/oUF_ActionPanel.toc | 2 +- .../Plugins/oUF_Afflicted/oUF_Afflicted.toc | 2 +- .../Plugins/oUF_Conqueror/oUF_Conqueror.lua | 60 +++++--- .../Plugins/oUF_Gladiator/oUF_Gladiator.toc | 2 +- .../oUF_Villain/Plugins/oUF_KungFu/oUF_KungFu.lua | 6 +- .../Plugins/oUF_MageMagic/oUF_MageMagic.lua | 46 ++++-- .../Plugins/oUF_MageMagic/oUF_MageMagic.toc | 2 +- Interface/AddOns/SVUI/packages/bag/SVBag.lua | 37 +++-- Interface/AddOns/SVUI/packages/chat/SVChat.lua | 8 +- Interface/AddOns/SVUI/packages/tip/SVTip.lua | 2 +- .../AddOns/SVUI/packages/unit/elements/castbar.lua | 19 +-- .../SVUI/packages/unit/elements/essentials.lua | 15 +- .../AddOns/SVUI/packages/unit/elements/misc.lua | 93 +++++++----- Interface/AddOns/SVUI/packages/unit/frames.lua | 37 +---- .../SVUI/packages/unit/resources/deathknight.lua | 49 +++--- .../AddOns/SVUI/packages/unit/resources/mage.lua | 39 +++-- .../AddOns/SVUI/packages/unit/resources/monk.lua | 35 ++--- .../SVUI/packages/unit/resources/warrior.lua | 157 ++++++++++---------- Interface/AddOns/SVUI/setup/presets.lua | 16 +- Interface/AddOns/SVUI/system/core.lua | 16 +- Interface/AddOns/SVUI/system/media.lua | 47 +++--- .../AddOns/SVUI_ChatOMatic/SVUI_ChatOMatic.toc | 2 +- .../AddOns/SVUI_ConfigOMatic/SVUI_ConfigOMatic.lua | 13 +- .../AddOns/SVUI_ConfigOMatic/SVUI_ConfigOMatic.toc | 2 +- .../AddOns/SVUI_CraftOMatic/SVUI_CraftOMatic.toc | 2 +- .../AddOns/SVUI_FightOMatic/SVUI_FightOMatic.lua | 11 +- .../AddOns/SVUI_FightOMatic/SVUI_FightOMatic.toc | 2 +- Interface/AddOns/SVUI_LogOMatic/SVUI_LogOMatic.toc | 2 +- .../AddOns/SVUI_StyleOMatic/SVUI_StyleOMatic.toc | 2 +- .../components/blizzard/auctionhouse.lua | 13 +- .../components/blizzard/character.lua | 4 +- .../components/blizzard/system.lua | 13 +- .../components/blizzard/voidstorage.lua | 25 +++- .../AddOns/SVUI_TrackOMatic/SVUI_TrackOMatic.toc | 2 +- 53 files changed, 461 insertions(+), 388 deletions(-) delete mode 100644 Interface/AddOns/SVUI/assets/artwork/Unitframe/Class/DEATHKNIGHT-BLOOD.blp delete mode 100644 Interface/AddOns/SVUI/assets/artwork/Unitframe/Class/DEATHKNIGHT-FROST.blp delete mode 100644 Interface/AddOns/SVUI/assets/artwork/Unitframe/Class/DEATHKNIGHT-UNHOLY.blp delete mode 100644 Interface/AddOns/SVUI/assets/artwork/Unitframe/Class/MAGE-BG-ANIMATION.blp create mode 100644 Interface/AddOns/SVUI/assets/artwork/Unitframe/Class/MAGE-CHARGE.blp delete mode 100644 Interface/AddOns/SVUI/assets/artwork/Unitframe/Class/MAGE-FG-ANIMATION.blp create mode 100644 Interface/AddOns/SVUI/assets/artwork/Unitframe/Class/MAGE-ICICLE-1.blp create mode 100644 Interface/AddOns/SVUI/assets/artwork/Unitframe/Class/MAGE-ICICLE-2.blp create mode 100644 Interface/AddOns/SVUI/assets/artwork/Unitframe/Class/MAGE-ICICLE-3.blp create mode 100644 Interface/AddOns/SVUI/assets/artwork/Unitframe/Class/MAGE-ICICLE-4.blp create mode 100644 Interface/AddOns/SVUI/assets/artwork/Unitframe/Class/MAGE-ICICLE-5.blp create mode 100644 Interface/AddOns/SVUI/assets/artwork/Unitframe/Class/RUNES-BG.blp create mode 100644 Interface/AddOns/SVUI/assets/artwork/Unitframe/Class/RUNES-FG.blp diff --git a/Interface/AddOns/SVUI/SVUI.toc b/Interface/AddOns/SVUI/SVUI.toc index a84b988..90c381b 100644 --- a/Interface/AddOns/SVUI/SVUI.toc +++ b/Interface/AddOns/SVUI/SVUI.toc @@ -1,6 +1,6 @@ ## Interface: 60000 ## Author: Munglunch -## Version: 5.4.15 +## Version: 5.4.16 ## Title: |cffFF9900SVUI|r ## Notes: Supervillain UI [|cff9911FFCore Framework|r]. ## SavedVariables: SVUI_Global, SVUI_Errors diff --git a/Interface/AddOns/SVUI/assets/artwork/Unitframe/Class/DEATHKNIGHT-BLOOD.blp b/Interface/AddOns/SVUI/assets/artwork/Unitframe/Class/DEATHKNIGHT-BLOOD.blp deleted file mode 100644 index 1965896b21e165a0f18b15e198cd320aa781e838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2580 zcmZ?r2{2-0U|?Y4U}sbS(jYvA1&BF-n3I9w3J^a5;x9nV!o|QKLIh?2>Sq8N>Hwq! z&@hlY3PwX%j+lxhR~~1r+#Aae5B&jq_P^s4-W}r zAfTU8dG0yi@}3`i|3{#OfkD(%mDl9j^uIUk{~R}HQD6v*izuMfe02TB54Ppr-j--> z0JJYOH1sOZh9C3)1Ht7vjvSnfObo%_{(rOw@;6OcB#`i+p@Fj=sD5MZjobIY>ci2^ zBbEQ3!E+*mVgbXSXATTgw=UIXU)e(ry)F4SI6i?9yk+MPsC|hXn%rDmF#BrXZ=Mqq6Bh^LU!F5* z%A%%CRc9~#{|M5sY07iUiVqJSn9knD3k;9jT|uDm2q&06^eW8qK9}V^FYIApm?~;& z3NwG+_rM-b&d#?mzQwV?o|w4sP#AyH6yNLzzv3!j{7F+zM<2HZ zro#A@=dyz0tAk=}zE7{cu~GMSrWY_iLc&N+5C0jM1QAJKTlv; zW(bU*t5Zd#_HWa@y;b%GIKINe!^G`@iGN$NK8F)Tem{f%Ar%iMwd0mRes~zc@FZma zK+7}ow>`H2X4xiS<0*7~XegUvTe~Tg|DPk2VE8fe-$=R*RG$RYuL~?7IQa|`n1R8a Z0ObGv`u{%*uq_7yAoEwRTD1z@zW`={Qsn>u diff --git a/Interface/AddOns/SVUI/assets/artwork/Unitframe/Class/DEATHKNIGHT-FROST.blp b/Interface/AddOns/SVUI/assets/artwork/Unitframe/Class/DEATHKNIGHT-FROST.blp deleted file mode 100644 index a37e79e4a28504d641059b67d61fad74dbdc634a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2580 zcmeH{e@s(X6vxl)kM&nz;&{oXvbj>zzy?FZbn2?F6^K;=CBAD6(*RYRGh><C zWjMP1Aw+2RAvn z`Q)5?&b{Av-mw)r<{$u2XfNIB%^5s@xjTHu|o^L3{gK%1McaHqn1in8S{JHtqmyBm~`XQZNSc#@K4{z0`?Y@ z-E(lP9*2CeFHN~49+d0Rx%yC79NxaFZaK>*x?)44WeqD!_AGqFxVN_Q?vsKw4!_6r zG2>r-qvuKXYdQ6vqSqOJ{dQ^TDHw^i&dZFmd^{b{^P$*fsySh1EI3LWQP4Hh`ezs; zYYHOi*9TG4tzLG1z%RDN*U#ALU$uw6KSW|Nf9JHprrX}V8M8w)o=tqBU;RR7s9`7b z2m0J?F(LR-R{7%NjJF4RYky1Xj+(0H@Qg*huM;&&S>NW&xXkKdK9A3U`CmL|_Z*h% zBdhu^*t+#e)5!F({0JV*{cwt5>fN>Me73)=W!_ay>CN_nMY5j?P7Htgx^o@Nn1ACy zWiXsSOGt(TJ&a3hMUkjRl*7*A4 z^wPPWANFflyr_58lLcSB4;PYK8T*eN>Imm5_;(|h+ZjKSwpEi2gWc|F&fgiwVxqer zIB{3`=>;r5)raqg;b+a}ze6%p{gJ*qE!dSN*AwV^svjdgPVVyx*^f{PzNVDI_Ydy4 z$MWAf-R5qFv%-p_DdYM8()3?Bx{ud(G5@9_ulI)HdosK@I>gv58tc*XMHa*Hq}!~% zRV6qQ>rKS!q$L}!&|gHpe?G=l5N_U2Tb3~bgf#=tIKPp`@0-G5WN=Omc8$ji0-h*; z9{XQMS}r~g(0&-m)Hj3ujyZ0K*8E6$V|&|jut(lF_a6QJjk7U1uloRszav}xE<*A% z${r6rm?;1M-Tw;MZK+g(TY(B~wHsq)UY9AG>Rs)BS=#}4LjBan0wO$Dxz!wgeXD{#bob#OXzFWO6 zV=)B)G&7!x#jh0QY77QL1Mm=|7vnvKIus!C9|G_^AZaRoA{2peY>hcE=D?T(e|I3{ z&n;>$U(m@H%)9;xz+^IY#NXiUyEXq|$3|4{L zIK2notVev+W9J)ECE6L2E!j^^LB6J0orFky#?7G6Q(^*bXH=6T;6WvTx4yI;V+L2Jy|(q(+hTHlXXvzQZH)O zaJ|u=T88WOOuR7QBcBN=Y)>=TUf0yfd|Bcthe1Wrzwj!CT*tzH<`*OEJ+VZWFh$0! zIM_A2?NY;?yX38uzZLyT^%ubrNOQ-nb;S`93nru4Tmorj+wiBTRsfI3)N#CroF@Z> z40c6&=X+m-{o>=BV<%{9Wt=74%Y=aptBeVGmD%U3|IM#=l|a!W=k>yd697f2MX;tO zZk>Br-)uG;*KgwO*zZnvIlxqGIJPMflFB9|x2|HU{iX3T|Frq`24f1i2e6?I%f2r zKQyCuD7e1?AfYnDGV>1UCewEJRs8_0^ znFV+oB2TkHy@2&KS+l8eO(S|nGvZO-B*>ArS$V|`fOsP!rJG-rRzcinh(Elyji8<1PxC3t+=jFJBq#v`krych>j#K*c9a)>_ A4gdfE diff --git a/Interface/AddOns/SVUI/assets/artwork/Unitframe/Class/MAGE-BG-ANIMATION.blp b/Interface/AddOns/SVUI/assets/artwork/Unitframe/Class/MAGE-BG-ANIMATION.blp deleted file mode 100644 index 456c68f021fe624aca14540b1e45426a434a41d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6676 zcmeHLeNa=Kr0!>HS&QytKdygfJJJ}f)4 z?aa>pv*Vk2gkSEx=XZbSo_p>+S@X=s9}5sdlqgB(%Af|fUAh-kX0 zH@4coeeBpnm)?uoD?tnR7UCE^^tV^#kXZ?C*#)lx|IH4}&x$42_kEECe1{mo9EBwR zyzlVu0ne}*fK3Sa*JO_-Bf76eO4I5I;r2!-a>!B z65;ES#jc3V&&4I))(M0N+4OS6Dif$X+eQ)NqmkI829w;{D46_7(>|U?2+8D|5u_!O{>cxB;TC%L`BK##${vKIY2GRdfM1P>ZP}B+fiM>Imv_X+;y-09y+@?28ZTkhm zWe%k#b0En3qszIo)p+_(p?UqlZ=C2Q`p?Yir(UyfPq)ADDACWM+X3wVRgP-VuM`ve zL3dH>QERe~;Cx@37Ez{k1P{8e7bDc)L-5CLi`i&B8Q@S2wHzfue9Dokw9+J4WtYHy z93y-&ryR9c#t(+2uwPv)t03!bF(;KL?5#8qd%^J=n?{rh1;P2giyfYKT80Tu_evXH zXxiFBaN6*C&8^1Feu6K%i(8G?4oCzuf`-#6vlsHZ3q>XBic-P!zUqLgHoOz!+tr!J z+dskXH1Bz8W|oZK#Uzy{<|;Y~4vzcv^w*|Ig3BB?iaWi-{Cdf}wVFLGQ9@OnIKQu%8qNAifhF6Z(Fo$bif zJYKpc9DWB8e2BTAy>a>L8iEI5J?hsmu|)rIb5uX%lh;#MOQ{vD-_`G7FX)At{k;D@ z?0U_%lQ}M8ugoDS-*JGF6WrzeV{y0lB+ozQ{4t)atf1q2A zN>ml4T*@LTiq}DYDHJK;A^p3YN{xQ9ritL7d+WNsTnQhKjsCoD@HWra=pS?nVjs)l z`;S}9GyUV^1dq9Ewc=&r%N!b|au6j?8_p0J3`Qe&{}P=bz7pYlu24!Oq<^}1r@6%A z2@ovvo-cN}*j$1)`|6lIussQG^xN44F&rCn`AO!r>1%2XGX&FpN{u2fPr)q#azssd zScEF!;bNlti(&nhckzE{9w_duJjwe%=uRq6QRMOSYw}OCm+&T<9`nJ{CKH=hVx6w zFnxrt%wf|u8xEupEc5#H`*RE$l|TFq~J)qMPox!bftDuIvBM({tb zc?e&(Ki`W`&btKX`!Iii-=8v{#q9CincyBo$*}%8cC!A-QT_OQxI6xX<89h4+xq!@ z(&)ROPe_pP@z*rnDlL!7c_NiA2fgzcNQr>&5DI*ZA@7T1|p7m*;QvCu`7M`_DU_?zIjM^8G7(9#$tu z&yevIzMCBlM9&Tl&9rCEYKY@j|@sf7F6D79)MmAxAD8-SlfOWLWA+Eb64Gk~Av`DMOmHPpcT z`qnWwHZ7Yf-$d-?`ygWr-{$Q{^!J|6BkhCE^_nLO7JCQ|x-WKAG&F<1dHo`+pZeyj z9arOa_WF7MoPhN#Q_u7h`{~|5{g>m@!vxz|n>G)%+O?qQ`3AHCXQSn@?w{{wK}F;yDXvHGa~ z_u#&b^;3;2tIO?G{C$i=QT?fKJ`3;CU*@owRot=!Vn5$k*Eb>%^LWg?qE)|fme0q# zokgvC1VYpELGIf}Mr4=D9EGCM%F+_S$`7C(+s^YXtOo?g_f@CEd=zu>5EHsR5+1Ed zx9Q<`D<#AS+)WYH&OtQ5W1~3%{=8XG=8&UhR*r`GqZ2e!);w|5Y&Og871;je^~8WF3e4Q_KKPj_`ZS92p`srx&5;3uf3O zQeTg_MW_{Kv`VjIjl>2#r)wr*RtrF1;)tfzgEc7!-sYWN% z)5hLq)Fr4N_Jl^?^5gy`YBD}rpU#iR{(X+y8MD@&nG7bSzEZ|I)G0S-^FWKWH6IFa7Jv$uMACFS#T*9~!C0A!T4( z0_{-0N^uIo`G!q^d~*eUZ-M@}o~fv$>Bqur+c>~5NPc_)?jwzm?-Qne9>G}8i-1>!&sE|4X@`7N2zYnX?Fh!dr<}q42YyR9{O&$Y7)j^5%-`oEMC$V=j diff --git a/Interface/AddOns/SVUI/assets/artwork/Unitframe/Class/MAGE-CHARGE.blp b/Interface/AddOns/SVUI/assets/artwork/Unitframe/Class/MAGE-CHARGE.blp new file mode 100644 index 0000000000000000000000000000000000000000..ed032c411f5d644ab91e9725ddf9402ebef61b9b GIT binary patch literal 23060 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 rcfX|Ww|8(poC%nYSFvS>7cd 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 SU*E=+^7d7bf6t=7zWoogSEeQa literal 0 HcmV?d00001 diff --git a/Interface/AddOns/SVUI/assets/artwork/Unitframe/Class/MAGE-ICICLE-2.blp b/Interface/AddOns/SVUI/assets/artwork/Unitframe/Class/MAGE-ICICLE-2.blp new file mode 100644 index 0000000000000000000000000000000000000000..5457703cffa0d66a13c25712279e83dc90eef925 GIT binary patch literal 23060 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 t?;EL$5jqANPAFU%?5+Q~Zv1Jfy2919VBt$5g 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 literal 0 HcmV?d00001 diff --git a/Interface/AddOns/SVUI/assets/artwork/Unitframe/Class/MAGE-ICICLE-4.blp b/Interface/AddOns/SVUI/assets/artwork/Unitframe/Class/MAGE-ICICLE-4.blp new file mode 100644 index 0000000000000000000000000000000000000000..b07dc246d18e1078c694b5db1ab0efe39e5ef75a GIT binary patch literal 23060 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 bs|i$jw4!3^N~63V6qoWUD=I1;AMgJGdwj26 literal 0 HcmV?d00001 diff --git a/Interface/AddOns/SVUI/assets/artwork/Unitframe/Class/MAGE-ICICLE-5.blp b/Interface/AddOns/SVUI/assets/artwork/Unitframe/Class/MAGE-ICICLE-5.blp new file mode 100644 index 0000000000000000000000000000000000000000..6cfe93cdf24747923609cda3c83c5c911384eb10 GIT binary patch literal 23060 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 l@naUsn4q6$VhFVVpusTXR{)^+Z(yMJ3 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 ssls?`C5%rYD9Dcn(GmF*M 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 j@f<$rb`$;&98C~)s(;aH - - + + - + - + - - + + diff --git a/Interface/AddOns/SVUI/framework/widgets/widget_afk.lua b/Interface/AddOns/SVUI/framework/widgets/widget_afk.lua index f26bf5d..96f28e1 100644 --- a/Interface/AddOns/SVUI/framework/widgets/widget_afk.lua +++ b/Interface/AddOns/SVUI/framework/widgets/widget_afk.lua @@ -62,15 +62,14 @@ function SV.AFK:Activate(enabled) end local AFK_OnEvent = function(self, event) - if(event == "PLAYER_REGEN_DISABLED") then - self:RegisterEvent("PLAYER_REGEN_ENABLED", "OnEvent") - self:Activate(false) - else + if(event == "PLAYER_FLAGS_CHANGED") then if(UnitIsAFK("player")) then self:Activate(true) else self:Activate(false) end + else + self:Activate(false) end end @@ -106,6 +105,8 @@ function SV.AFK:Initialize() if(SV.db.general.afk) then self:RegisterEvent("PLAYER_FLAGS_CHANGED") self:RegisterEvent("PLAYER_REGEN_DISABLED") + self:RegisterEvent("PLAYER_ENTERING_WORLD") + self:RegisterEvent("PET_BATTLE_OPENING_START") self:SetScript("OnEvent", AFK_OnEvent) end end @@ -114,10 +115,16 @@ function SV.AFK:Toggle() if(SV.db.general.afk) then self:RegisterEvent("PLAYER_FLAGS_CHANGED") self:RegisterEvent("PLAYER_REGEN_DISABLED") + self:RegisterEvent("PLAYER_ENTERING_WORLD") + self:RegisterEvent("PET_BATTLE_OPENING_START") + self:RegisterEvent("PLAYER_DEAD") self:SetScript("OnEvent", AFK_OnEvent) else self:UnregisterEvent("PLAYER_FLAGS_CHANGED") self:UnregisterEvent("PLAYER_REGEN_DISABLED") + self:UnregisterEvent("PLAYER_ENTERING_WORLD") + self:UnregisterEvent("PET_BATTLE_OPENING_START") + self:UnregisterEvent("PLAYER_DEAD") self:SetScript("OnEvent", nil) end end \ No newline at end of file diff --git a/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/modules/Registry.lua b/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/modules/Registry.lua index bd7003c..cdf635e 100644 --- a/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/modules/Registry.lua +++ b/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/modules/Registry.lua @@ -179,29 +179,6 @@ function table.copy(targetTable,deepCopy,mergeTable) 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(this, delim) - local pattern = format("([^%s]+)", delim) - local res = {} - for line in this:gmatch(pattern) do - tinsert(res, line) - end - return res -end - --DATABASE LOCAL HELPERS local function copydefaults(d, s) diff --git a/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/modules/SpecialFX.lua b/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/modules/SpecialFX.lua index f481c2d..aeae438 100644 --- a/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/modules/SpecialFX.lua +++ b/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/modules/SpecialFX.lua @@ -70,7 +70,7 @@ local EFFECTS_LIST = setmetatable({ ["arcane"] = {[[Spells\Cast_arcane_01.m2]], -12, 12, 12, -12, 0.25, 0, 0}, ["fire"] = {[[Spells\Bloodlust_state_hand.m2]], -8, 4, 24, -24, 0.23, -0.08, 0.08}, ["frost"] = {[[Spells\Ice_cast_low_hand.m2]], -12, 12, 12, -12, 0.25, -0.2, -0.35}, - ["chi"] = {[[Spells\Fel_fire_precast_high_hand.m2]], -12, 12, 12, -12, 0.3, 0, 0}, + ["chi"] = {[[Spells\Fel_fire_precast_high_hand.m2]], -12, 12, 12, -12, 0.3, -0.04, -0.1}, ["lightning"] = {[[Spells\Fill_lightning_cast_01.m2]], -12, 12, 12, -12, 1.25, 0, 0}, ["water"] = {[[Spells\Monk_drunkenhaze_impact.m2]], -12, 12, 12, -12, 0.9, 0, 0}, ["earth"] = {[[Spells\Sand_precast_hand.m2]], -12, 12, 12, -12, 0.23, 0, 0}, diff --git a/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_ActionPanel/oUF_ActionPanel.toc b/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_ActionPanel/oUF_ActionPanel.toc index 5192212..d8bba41 100644 --- a/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_ActionPanel/oUF_ActionPanel.toc +++ b/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_ActionPanel/oUF_ActionPanel.toc @@ -2,7 +2,7 @@ ## Title: oUF ActionPanel ## Notes: Adds a backing to all unit frames that provides many utilities. ## Author: Munglunch -## Version: 5.4.15 +## Version: 5.4.16 ## X-Category: oUF ## Dependencies: oUF diff --git a/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_Afflicted/oUF_Afflicted.toc b/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_Afflicted/oUF_Afflicted.toc index e1856ba..bddcfb3 100644 --- a/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_Afflicted/oUF_Afflicted.toc +++ b/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_Afflicted/oUF_Afflicted.toc @@ -2,7 +2,7 @@ ## Title: oUF Afflicted ## Notes: Adds Custom Debuff Highlighting to oUF. ## Author: Munglunch -## Version: 5.4.15 +## Version: 5.4.16 ## X-Category: oUF ## Dependencies: oUF diff --git a/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_Conqueror/oUF_Conqueror.lua b/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_Conqueror/oUF_Conqueror.lua index c8ad6d0..e1c66fa 100644 --- a/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_Conqueror/oUF_Conqueror.lua +++ b/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_Conqueror/oUF_Conqueror.lua @@ -11,14 +11,14 @@ local UnitDebuff = _G.UnitDebuff; local parent, ns = ... local oUF = ns.oUF -local ENRAGE_ID = 13046; +local ENRAGE_ID = 12880; -local function getRageAmount() +local function getEnrageAmount() for i = 1, 40 do - local name, rank, icon, count, dispelType, duration, expires, _, _, _, spellID, _, _, _, amount = + local _, _, _, count, _, duration, expires, _, _, _, spellID = UnitBuff("player", i) - if spellID == ENRAGE_ID then - return duration, expires + if(spellID and spellID == ENRAGE_ID) then + return floor(expires), duration end end return 0,0 @@ -41,19 +41,41 @@ local BarOnUpdate = function(self, elapsed) end end +local EnrageOnUpdate = function(self, elapsed) + if not self.duration then return end + self.elapsed = (self.elapsed or 0) + elapsed + if self.elapsed >= 0.5 then + local timeLeft = (self.duration - self.elapsed) + if timeLeft > 0 then + self.bar:SetValue(timeLeft) + else + self.start = 0; + self.duration = 8; + self.elapsed = 0; + self.bar:SetValue(0); + self:SetScript("OnUpdate", nil); + self:FadeOut(); + end + end +end + local Update = function(self, event, unit) local element = self.Conqueror - local bar = element.Enrage + local enrage = element.Enrage if(element.PreUpdate) then element:PreUpdate(event) end - local start, duration = getRageAmount() - - if(duration and start) then - bar:SetMinMaxValues(0, start) - bar:SetValue(start) - bar.start = start - bar.duration = duration - bar:SetScript('OnUpdate', BarOnUpdate) + if(enrage:IsShown()) then + local start, duration = getEnrageAmount() + if(duration and start and (start ~= enrage.start)) then + enrage.bar:SetMinMaxValues(0, duration) + enrage.bar:SetValue(duration) + + enrage.elapsed = 0; + enrage.start = start + enrage.duration = duration + enrage:SetScript('OnUpdate', EnrageOnUpdate) + enrage:FadeIn(); + end end if(element.PostUpdate) then @@ -78,11 +100,13 @@ local Enable = function(self) self:RegisterEvent('UNIT_AURA', Path, true) - if(bar.Enrage:IsObjectType'Texture' and not bar.Enrage:GetTexture()) then - bar.Enrage:SetTexture[[Interface\TargetingFrame\UI-StatusBar]] + local enrage = bar.Enrage; + if(enrage.bar:IsObjectType'Texture' and not enrage.bar:GetTexture()) then + enrage.bar:SetTexture[[Interface\TargetingFrame\UI-StatusBar]] end - bar.Enrage:SetMinMaxValues(0, 100) - bar.Enrage:SetValue(0) + enrage.bar:SetMinMaxValues(0, 100) + enrage.bar:SetValue(0) + enrage:FadeOut() return true end diff --git a/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_Gladiator/oUF_Gladiator.toc b/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_Gladiator/oUF_Gladiator.toc index 3679662..0a2f7de 100644 --- a/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_Gladiator/oUF_Gladiator.toc +++ b/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_Gladiator/oUF_Gladiator.toc @@ -2,7 +2,7 @@ ## Title: oUF Gladiator ## Notes: Adds PvP trinket status and spec icons to oUF frames. ## Author: Munglunch -## Version: 5.4.15 +## Version: 5.4.16 ## X-Category: oUF ## Dependencies: oUF diff --git a/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_KungFu/oUF_KungFu.lua b/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_KungFu/oUF_KungFu.lua index b9872e7..b6fb2b9 100644 --- a/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_KungFu/oUF_KungFu.lua +++ b/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_KungFu/oUF_KungFu.lua @@ -168,7 +168,9 @@ local Update = function(self, event, unit) local staggering = getStaggerAmount() if staggering == 0 then stagger:SetValue(0) + stagger:FadeOut() else + stagger:FadeIn() local health = UnitHealth("player") local maxHealth = UnitHealthMax("player") local staggerTotal = UnitStagger("player") @@ -244,7 +246,7 @@ local function Enable(self, unit) bar[i]:SetStatusBarTexture([=[Interface\TargetingFrame\UI-StatusBar]=]) end - bar[i]:SetStatusBarColor(unpack(oUF.colors.KungFu[i])) + bar[i]:SetStatusBarColor(unpack(CHI_COLORS[i])) bar[i]:SetFrameLevel(bar:GetFrameLevel() + 1) bar[i]:GetStatusBarTexture():SetHorizTile(false) end @@ -253,7 +255,7 @@ local function Enable(self, unit) if(stagger:IsObjectType'StatusBar' and not stagger:GetStatusBarTexture()) then stagger:SetStatusBarTexture(0.91, 0.75, 0.25) end - stagger:SetStatusBarColor(unpack(brewColor)) + stagger:SetStatusBarColor(unpack(DEFAULT_BREW_COLOR)) stagger:SetMinMaxValues(0, 100) stagger:SetValue(0) diff --git a/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_MageMagic/oUF_MageMagic.lua b/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_MageMagic/oUF_MageMagic.lua index 2653700..c1d7286 100644 --- a/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_MageMagic/oUF_MageMagic.lua +++ b/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_MageMagic/oUF_MageMagic.lua @@ -19,7 +19,7 @@ if not oUF then return end local playerGUID; local ARCANE_CHARGE_ID = 36032; - +local ARCANE_BARRAGE_ID = 44425; local IGNITE_ID = 12654; local COMBUSTION_ID = 83853; local PYROBLAST_ID = 11366; @@ -72,14 +72,24 @@ end local GetResources = { [1] = function(self, event, ...) - if(event == 'UNIT_AURA') then + if(event == 'COMBAT_LOG_EVENT_UNFILTERED') then + local _, eventType, _, srcGUID, _, _, _, destGUID, _, _, _, spellID, _, _, amount = ... + if(srcGUID == playerGUID) then + if(eventType:find("_DAMAGE")) then + if(spellID == ARCANE_BARRAGE_ID) then + SPELLCOUNT = 0 + return + end + end + end + elseif(event == 'UNIT_AURA') then local unit = ...; for index = 1, 30 do - local _, _, _, count, _, start, duration, _, _, _, spellID = UnitDebuff(unit, index) + local name, _, _, count, _, start, duration, _, _, _, spellID = UnitDebuff(unit, index) if(spellID == ARCANE_CHARGE_ID) then - SPELLCOUNT = count + SPELLCOUNT = count or 0 return start, duration - end + end end end return 0,0,true @@ -155,8 +165,12 @@ local BarOnUpdate = function(self, elapsed) if timeLeft > 0 then self:SetValue(timeLeft) else - self.start = nil - self.duration = nil + if(SPELLCOUNT > 0) then + SPELLCOUNT = SPELLCOUNT - 1 + end + self.start = 0; + self.duration = 0; + self.elapsed = 0; self:SetValue(0) self:Hide() self:SetScript("OnUpdate", nil) @@ -195,7 +209,7 @@ local IcicleOnUpdate = function(self, elapsed) if(SPELLCOUNT > 0) then SPELLCOUNT = SPELLCOUNT - 1 end - self.elapsed = nil; + self.elapsed = 0; self:SetValue(0); self:Hide(); self:SetScript("OnUpdate", nil); @@ -241,6 +255,7 @@ local Update = function(self, event, ...) bar[i]:SetValue(start) bar[i]:SetScript('OnUpdate', BarOnUpdate) else + bar[i].elapsed = 0; bar[i]:SetValue(0) bar[i]:SetScript('OnUpdate', nil) bar[i]:Hide() @@ -256,6 +271,7 @@ local Update = function(self, event, ...) bar[i]:SetValue(31) bar[i]:SetScript('OnUpdate', IcicleOnUpdate) else + bar[i].elapsed = 0; bar[i]:SetValue(0) bar[i]:SetScript('OnUpdate', nil) bar[i]:FadeOut() @@ -281,21 +297,23 @@ local Proxy = function(self, ...) if((not bar.CurrentSpec) or (bar.CurrentSpec ~= spec)) then ResetMagic(self); if(spec) then - bar.CurrentSpec = spec; - if(bar.CurrentSpec == 3) then + if(spec == 3) then self:UnregisterEvent('UNIT_AURA', Update) self:RegisterEvent('COMBAT_LOG_EVENT_UNFILTERED', Update, true) --print("Switch To Frost") - elseif(bar.CurrentSpec == 2) then + bar.CurrentSpec = spec; + elseif(spec == 2) then self:RegisterEvent('UNIT_AURA', Update) self:RegisterEvent('COMBAT_LOG_EVENT_UNFILTERED', Update, true) if(not bar.Ignite:IsShown()) then bar.Ignite:Show() end bar.Ignite.Bar:SetValue(0) --print("Switch To Fire") - elseif(bar.CurrentSpec == 1) then + bar.CurrentSpec = spec; + elseif(spec == 1) then self:RegisterEvent('UNIT_AURA', Update) - self:UnregisterEvent('COMBAT_LOG_EVENT_UNFILTERED', Update) + self:RegisterEvent('COMBAT_LOG_EVENT_UNFILTERED', Update, true) --print("Switch To Arcane") + bar.CurrentSpec = spec; end if(bar.PostTalentUpdate) then bar:PostTalentUpdate(spec) end else @@ -319,6 +337,7 @@ local Enable = function(self, unit) if(bar) then self:RegisterEvent("PLAYER_TALENT_UPDATE", Path) + self:RegisterEvent("ACTIVE_TALENT_GROUP_CHANGED", Path) self:RegisterEvent("PLAYER_ENTERING_WORLD", Path) bar.__owner = self bar.ForceUpdate = ForceUpdate @@ -354,6 +373,7 @@ local Disable = function(self, unit) self:UnregisterEvent("UNIT_AURA", Update) self:UnregisterEvent("COMBAT_LOG_EVENT_UNFILTERED", Update) self:UnregisterEvent("PLAYER_TALENT_UPDATE", Path) + self:UnregisterEvent("ACTIVE_TALENT_GROUP_CHANGED", Path) self:UnregisterEvent("PLAYER_ENTERING_WORLD", Path) bar:Hide() end diff --git a/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_MageMagic/oUF_MageMagic.toc b/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_MageMagic/oUF_MageMagic.toc index cccf22e..2ffd799 100644 --- a/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_MageMagic/oUF_MageMagic.toc +++ b/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_MageMagic/oUF_MageMagic.toc @@ -2,7 +2,7 @@ ## Title: oUF Mage Magic ## Notes: Adds support for mage spell indicators to oUF. ## Author: Munglunch -## Version: 5.4.15 +## Version: 5.4.16 ## Dependencies: oUF oUF_MageMagic.lua \ No newline at end of file diff --git a/Interface/AddOns/SVUI/packages/bag/SVBag.lua b/Interface/AddOns/SVUI/packages/bag/SVBag.lua index 147ffc7..39cc496 100644 --- a/Interface/AddOns/SVUI/packages/bag/SVBag.lua +++ b/Interface/AddOns/SVUI/packages/bag/SVBag.lua @@ -54,6 +54,7 @@ local hooksecurefunc = _G.hooksecurefunc; local BLANK_TEXTURE = [[Interface\BUTTONS\WHITE8X8]]; local BASIC_TEXTURE = [[Interface\AddOns\SVUI\assets\artwork\Bars\DEFAULT]]; local BORDER_TEXTURE = [[Interface\Addons\SVUI\assets\artwork\Template\ROUND]]; +local BORDER_BG = [[Interface\AddOns\SVUI\assets\artwork\Unitframe\Class\ORB-BG]]; local ICON_BAGS = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-BAGS]]; local ICON_SORT = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-SORT]]; local ICON_STACK = [[Interface\AddOns\SVUI\assets\artwork\Icons\BAGS-STACK]]; @@ -96,30 +97,35 @@ local function FormatCurrency(amount) end local function StyleBagToolButton(button, iconTex) - if button.styled then return end + if button.styled then return end + + local bg = button:CreateTexture(nil, "BACKGROUND") + bg:SetAllPointsOut(button, 4, 4) + bg:SetTexture(BORDER_BG) + bg:SetVertexColor(unpack(SV.Media.color.default)) local outer = button:CreateTexture(nil, "OVERLAY") - outer:SetAllPointsOut(button, 6, 6) + outer:SetAllPointsOut(button, 5, 5) outer:SetTexture(BORDER_TEXTURE) - outer:SetGradient("VERTICAL", 0.4, 0.47, 0.5, 0.3, 0.33, 0.35) + outer:SetGradient(unpack(SV.Media.gradient.container)) button:SetNormalTexture(iconTex) iconTex = button:GetNormalTexture() - iconTex:SetGradient("VERTICAL", 0.5, 0.53, 0.55, 0.8, 0.8, 1) + iconTex:SetGradient(unpack(SV.Media.gradient.medium)) local icon = button:CreateTexture(nil, "OVERLAY") - icon:SetAllPointsOut(button, 6, 6) + icon:SetAllPointsOut(button, 5, 5) SetPortraitToTexture(icon, iconTex) hooksecurefunc(icon, "SetTexture", SetPortraitToTexture) local hover = button:CreateTexture(nil, "HIGHLIGHT") - hover:SetAllPointsOut(button, 6, 6) + hover:SetAllPointsOut(button, 5, 5) hover:SetTexture(BORDER_TEXTURE) hover:SetGradient(unpack(SV.Media.gradient.yellow)) if button.SetPushedTexture then local pushed = button:CreateTexture(nil, "BORDER") - pushed:SetAllPointsOut(button, 6, 6) + pushed:SetAllPointsOut(button, 5, 5) pushed:SetTexture(BORDER_TEXTURE) pushed:SetGradient(unpack(SV.Media.gradient.highlight)) button:SetPushedTexture(pushed) @@ -127,7 +133,7 @@ local function StyleBagToolButton(button, iconTex) if button.SetCheckedTexture then local checked = button:CreateTexture(nil, "BORDER") - checked:SetAllPointsOut(button, 6, 6) + checked:SetAllPointsOut(button, 5, 5) checked:SetTexture(BORDER_TEXTURE) checked:SetGradient(unpack(SV.Media.gradient.green)) button:SetCheckedTexture(checked) @@ -135,7 +141,7 @@ local function StyleBagToolButton(button, iconTex) if button.SetDisabledTexture then local disabled = button:CreateTexture(nil, "BORDER") - disabled:SetAllPointsOut(button, 6, 6) + disabled:SetAllPointsOut(button, 5, 5) disabled:SetTexture(BORDER_TEXTURE) disabled:SetGradient(unpack(SV.Media.gradient.default)) button:SetDisabledTexture(disabled) @@ -621,9 +627,8 @@ local ContainerFrame_UpdateLayout = function(self) slot = CreateFrame("CheckButton", slotName, bag, template); slot:SetNormalTexture(""); slot:SetCheckedTexture(""); - slot:RemoveTextures() - slot:SetStylePanel("Slot", true, 2, 0, 0, 0.45); - slot.Panel.Shadow:SetAttribute("shadowAlpha", 0.9) + slot:RemoveTextures(); + slot:SetStylePanel("Slot", true, 1, 0, 0); if(not slot.NewItemTexture) then slot.NewItemTexture = slot:CreateTexture(nil, "OVERLAY", 1); @@ -642,8 +647,8 @@ local ContainerFrame_UpdateLayout = function(self) if(not slot.icon) then slot.icon = slot:CreateTexture(nil, "BORDER"); end - slot.icon:SetAllPointsIn(slot); slot.icon:SetTexCoord(0.1, 0.9, 0.1, 0.9); + slot.icon:SetAllPointsIn(slot); slot.questIcon = _G[questIcon] or slot:CreateTexture(nil, "OVERLAY") slot.questIcon:SetTexture(TEXTURE_ITEM_QUEST_BANG); @@ -766,7 +771,7 @@ local ReagentFrame_UpdateLayout = function(self) slot:SetNormalTexture(nil); slot:SetCheckedTexture(nil); slot:RemoveTextures() - slot:SetStylePanel("Slot", true, 2, 0, 0, 0.5); + slot:SetStylePanel("Slot", true, 2, 0, 0); slot.NewItemTexture = slot:CreateTexture(nil, "OVERLAY", 1); slot.NewItemTexture:SetAllPointsIn(slot); @@ -1221,7 +1226,7 @@ do end local Tooltip_Hide = function(self) - self:GetNormalTexture():SetGradient("VERTICAL", 0.5, 0.53, 0.55, 0.8, 0.8, 1) + self:GetNormalTexture():SetGradient(unpack(SV.Media.gradient.medium)) GameTooltip:Hide() end @@ -1435,7 +1440,7 @@ do local bagsCount = #self.BagFrames + 1; local frame = CreateFrame("Button", bagName, isReagent and self.BankFrame or SV.Screen) - frame:SetStylePanel("Default", isReagent and "Action" or "Container") + frame:SetStylePanel("Default", "Container") frame:SetFrameStrata("HIGH") frame:SetFrameLevel(SVUI_ContainerFrame:GetFrameLevel() + 99) diff --git a/Interface/AddOns/SVUI/packages/chat/SVChat.lua b/Interface/AddOns/SVUI/packages/chat/SVChat.lua index 9421d81..0d219ac 100644 --- a/Interface/AddOns/SVUI/packages/chat/SVChat.lua +++ b/Interface/AddOns/SVUI/packages/chat/SVChat.lua @@ -274,10 +274,16 @@ do return msg end + local function _getlink(this, prefix, text, color) + text = tostring(text) + local colorstring = ("|cff%s%s|r"):format(color or "ffffff", tostring(this)) + return format("|H%s:%s|h%s|h", prefix, text, colorstring) + end + local function _parse(arg1, arg2, arg3) internalTest = true; local prefix = (" [%s]"):format(arg2) - local slink = prefix:link("url", arg2, "0099FF") + local slink = _getlink(prefix, "url", arg2, "0099FF") return ("%s "):format(slink) end diff --git a/Interface/AddOns/SVUI/packages/tip/SVTip.lua b/Interface/AddOns/SVUI/packages/tip/SVTip.lua index 8791eb9..4ff7879 100644 --- a/Interface/AddOns/SVUI/packages/tip/SVTip.lua +++ b/Interface/AddOns/SVUI/packages/tip/SVTip.lua @@ -291,7 +291,7 @@ local function tipcleaner(this) for i=3, this:NumLines() do local tip = _G["GameTooltipTextLeft"..i] local tipText = tip:GetText() - if tipText:find(PVP) or tipText:find(FACTION_ALLIANCE) or tipText:find(FACTION_HORDE) then + if(tipText and (tipText:find(PVP) or tipText:find(FACTION_ALLIANCE) or tipText:find(FACTION_HORDE))) then tip:SetText(nil) tip:Hide() end diff --git a/Interface/AddOns/SVUI/packages/unit/elements/castbar.lua b/Interface/AddOns/SVUI/packages/unit/elements/castbar.lua index 1adbdab..ad6b2c1 100644 --- a/Interface/AddOns/SVUI/packages/unit/elements/castbar.lua +++ b/Interface/AddOns/SVUI/packages/unit/elements/castbar.lua @@ -548,12 +548,10 @@ function MOD:CreateCastbar(frame, reversed, moverName, ryu, useFader, isBoss, ha local hadouken = CreateFrame("Frame", nil, castbar) if ryu then - castbar.Time:SetFont(SV.Media.font.numbers, 12, "OUTLINE") - castbar.Time:SetShadowOffset(1, -1) + castbar.Time:FontManager("aura") castbar.Time:SetTextColor(1, 1, 1) - castbar.Text:SetFont(SV.Media.font.alert, 12, "OUTLINE") - castbar.Text:SetShadowOffset(0, 0) - castbar.Text:SetTextColor(1, 1, 1) + castbar.Text:FontManager("caps") + castbar.Text:SetTextColor(1, 1, 1, 0.75) castbar:SetStatusBarTexture(SV.Media.bar.lazer) @@ -606,7 +604,6 @@ function MOD:CreateCastbar(frame, reversed, moverName, ryu, useFader, isBoss, ha organizer:SetPointToScale("LEFT", castbar, "RIGHT", 4, 0) castbar.Time:SetPointToScale("RIGHT", castbar, "LEFT", -4, 0) - castbar.Time:SetJustifyH("CENTER") else hadouken[1] = hadouken:CreateTexture(nil, "ARTWORK") hadouken[1]:SetAllPoints(hadouken) @@ -642,26 +639,20 @@ function MOD:CreateCastbar(frame, reversed, moverName, ryu, useFader, isBoss, ha organizer:SetPointToScale("RIGHT", castbar, "LEFT", -4, 0) castbar.Time:SetPointToScale("LEFT", castbar, "RIGHT", 4, 0) - castbar.Time:SetJustifyH("CENTER") end -- castbar.Time:SetPointToScale("CENTER", organizer, "CENTER", 0, 0) -- castbar.Time:SetJustifyH("CENTER") castbar.Text:SetAllPoints(castbar) - castbar.Text:SetJustifyH("CENTER") else - castbar.Time:SetFont(SV.Media.font.default, 11) - castbar.Time:SetShadowOffset(1, -1) + castbar.Time:FontManager("aura", "RIGHT") castbar.Time:SetTextColor(1, 1, 1, 0.9) castbar.Time:SetPoint("RIGHT", castbar, "LEFT", -1, 0) - castbar.Time:SetJustifyH("RIGHT") - castbar.Text:SetFont(SV.Media.font.default, 11) - castbar.Text:SetShadowOffset(1, -1) + castbar.Text:FontManager("caps") castbar.Text:SetTextColor(1, 1, 1, 0.9) castbar.Text:SetAllPoints(castbar) - castbar.Text:SetJustifyH("CENTER") castbar.pewpew = false diff --git a/Interface/AddOns/SVUI/packages/unit/elements/essentials.lua b/Interface/AddOns/SVUI/packages/unit/elements/essentials.lua index 1e4b817..42a11a7 100644 --- a/Interface/AddOns/SVUI/packages/unit/elements/essentials.lua +++ b/Interface/AddOns/SVUI/packages/unit/elements/essentials.lua @@ -263,7 +263,7 @@ local function CreateThreat(frame, unit) aggro:SetFrameStrata("HIGH") aggro:SetFrameLevel(30) aggro:SetSize(40,40) - aggro:SetPoint("CENTER", frame, "TOPRIGHT", -6, -6) + aggro:SetPoint("BOTTOMLEFT", frame, "TOPRIGHT", -6, -6) aggro.texture = aggro:CreateTexture(nil, "OVERLAY") aggro.texture:SetAllPoints(aggro) aggro.texture:SetTexture(AGGRO_TEXTURE) @@ -386,16 +386,17 @@ end function MOD:SetActionPanel(frame, unit, noHealthText, noPowerText, noMiscText) if(unit and (unit == "target" or unit == "player")) then frame.ActionPanel = CreateActionPanel(frame, 3) - + local baseSize = SV.db.font.unitprimary.size / 0.55; local info = CreateFrame("Frame", nil, frame) info:SetFrameStrata("BACKGROUND") info:SetFrameLevel(0) - info:SetPointToScale("TOPLEFT", frame.ActionPanel, "BOTTOMLEFT", -1, 1) - info:SetPointToScale("TOPRIGHT", frame.ActionPanel, "BOTTOMRIGHT", 1, 1) - info:SetHeight(30) + info:SetPointToScale("TOPLEFT", frame.ActionPanel, "BOTTOMLEFT", 0, 1) + info:SetPointToScale("TOPRIGHT", frame.ActionPanel, "BOTTOMRIGHT", 0, 1) + info:SetHeight(baseSize) local bg = info:CreateTexture(nil, "BACKGROUND") - bg:SetAllPointsIn(info) + bg:SetPointToScale("TOPLEFT", frame.ActionPanel, "BOTTOMLEFT", 0, 1) + bg:SetPointToScale("BOTTOMRIGHT", info, "BOTTOMRIGHT", 0, 0) bg:SetTexture(1, 1, 1, 1) bg:SetGradientAlpha("VERTICAL", 0, 0, 0, 0, 0, 0, 0, 0.7) @@ -477,6 +478,8 @@ function MOD:SetActionPanel(frame, unit, noHealthText, noPowerText, noMiscText) border4:SetPoint("BOTTOMLEFT") border4:SetWidth(2) else + frame.InfoPanel = info; + frame.LossOfControl = CreateFrame("Frame", nil, frame.TextGrip) frame.LossOfControl:SetAllPoints(frame) frame.LossOfControl:SetFrameStrata("DIALOG") diff --git a/Interface/AddOns/SVUI/packages/unit/elements/misc.lua b/Interface/AddOns/SVUI/packages/unit/elements/misc.lua index 0451860..df5bb18 100644 --- a/Interface/AddOns/SVUI/packages/unit/elements/misc.lua +++ b/Interface/AddOns/SVUI/packages/unit/elements/misc.lua @@ -302,37 +302,45 @@ end PLAYER ONLY COMPONENTS ########################################################## ]]-- -function MOD:CreateRestingIndicator(frame) +function MOD:CreatePlayerIndicators(frame) local resting = CreateFrame("Frame",nil,frame) resting:SetFrameStrata("MEDIUM") resting:SetFrameLevel(20) resting:SetSizeToScale(26,26) - resting:SetPointToScale("TOPRIGHT",frame,3,3) + resting:SetPointToScale("BOTTOMRIGHT", frame.Health, "BOTTOMRIGHT", 0, 0) resting.bg = resting:CreateTexture(nil,"OVERLAY",nil,1) resting.bg:SetAllPoints(resting) resting.bg:SetTexture(STATE_ICON_FILE) resting.bg:SetTexCoord(0.5,1,0,0.5) - return resting -end - -function MOD:CreateCombatIndicator(frame) + local combat = CreateFrame("Frame",nil,frame) combat:SetFrameStrata("MEDIUM") combat:SetFrameLevel(30) combat:SetSizeToScale(26,26) - combat:SetPointToScale("TOPRIGHT",frame,3,3) + combat:SetPointToScale("BOTTOMLEFT", frame , "TOPRIGHT", 3, 3) combat.bg = combat:CreateTexture(nil,"OVERLAY",nil,5) combat.bg:SetAllPoints(combat) combat.bg:SetTexture(STATE_ICON_FILE) combat.bg:SetTexCoord(0,0.5,0,0.5) + combat.linked = resting SV.Animate:Pulse(combat) + --IsResting() combat:SetScript("OnShow", function(this) - if not this.anim:IsPlaying() then this.anim:Play() end + if not this.anim:IsPlaying() then this.anim:Play() end + if(resting:IsShown()) then + resting:SetAlpha(0) + end end) - combat:Hide() - return combat -end + combat:SetScript("OnHide", function(this) + if(IsResting()) then + resting:SetAlpha(1) + end + end) + + frame.Resting = resting + frame.Combat = combat +end local ExRep_OnEnter = function(self)if self:IsShown() then UIFrameFadeIn(self,.1,0,1) end end local ExRep_OnLeave = function(self)if self:IsShown() then UIFrameFadeOut(self,.2,1,0) end end @@ -581,7 +589,7 @@ end RESOLVE ########################################################## ]]-- -local resolve +local cached_resolve; local resolveId = GetSpellInfo(158300) local function Short(value) @@ -634,49 +642,56 @@ end local ResolveBar_OnEvent = function(self, event, unit) if(event == 'UNIT_AURA') then local _, _, _, _, _, _, _, _, _, _, _, _, _, _, value, amount = UnitBuff(unit, resolveId) - if resolve ~= amount then - resolve = amount - self:SetValue(value) - self.text:SetText(Short(amount)) + if(value and amount and (cached_resolve ~= amount)) then + cached_resolve = amount + self.bar:SetValue(value) + self.bar.text:SetText(Short(amount)) + self:FadeIn() end else if IsTank() then - if(not self:IsShown()) then + if(not self.bar:IsShown()) then self:RegisterUnitEvent("UNIT_AURA", "player") - self:Show() + self.bar:Show() end else - if(self:IsShown()) then + if(self.bar:IsShown()) then self:UnregisterEvent("UNIT_AURA") - self:Hide() + self.bar:Hide() end end end + if(self.bar:IsShown()) then + if(self.bar.text:GetText() == "0") then + self.bar.text:SetText("") + self:FadeOut() + end + end end function MOD:CreateResolveBar(frame) - local health = frame.Health; - - local resolve = CreateFrame('StatusBar', nil, health) - resolve:SetPoint("BOTTOMLEFT", health, "BOTTOMLEFT", -1, -1) - resolve:SetPoint("BOTTOMRIGHT", health, "BOTTOMRIGHT", 1, -1) - resolve:SetHeight(5) - resolve:SetFrameStrata("LOW") - resolve:SetFrameLevel(11) - resolve:SetStylePanel("Default", "Bar") - resolve:SetStatusBarTexture([[Interface\BUTTONS\WHITE8X8]]) - resolve:SetStatusBarColor(0.15, 0.7, 0.05, 0.9) - resolve:SetMinMaxValues(0, 100) - - resolve.text = resolve:CreateFontString(nil, "OVERLAY") - resolve.text:SetPoint("RIGHT") - resolve.text:FontManager("pixel", "RIGHT") - - resolve:Hide() + local resolve = CreateFrame("Frame", nil, frame) + resolve:SetPointToScale("TOPLEFT", frame.Health, "TOPLEFT", 0, 0) + resolve:SetPointToScale("TOPRIGHT", frame.Health, "TOPRIGHT", 0, 0) + resolve:SetHeight(8) + + local bar = CreateFrame('StatusBar', nil, resolve) + bar:SetAllPointsIn(resolve) + bar:SetStylePanel("Default", "Bar") + bar:SetStatusBarTexture([[Interface\BUTTONS\WHITE8X8]]) + bar:SetStatusBarColor(0.15, 0.7, 0.05, 0.9) + bar:SetMinMaxValues(0, 100) + bar.text = bar:CreateFontString(nil, "OVERLAY") + bar.text:SetPoint("LEFT") + bar.text:FontManager("pixel", "LEFT") + bar.text:SetTextColor(0.8, 0.42, 0.09) + bar:Hide() + resolve.bar = bar; resolve:RegisterEvent("PLAYER_TALENT_UPDATE") resolve:RegisterEvent("PLAYER_ENTERING_WORLD") resolve:SetScript('OnEvent', ResolveBar_OnEvent) - + + ResolveBar_OnEvent(resolve) return resolve end \ No newline at end of file diff --git a/Interface/AddOns/SVUI/packages/unit/frames.lua b/Interface/AddOns/SVUI/packages/unit/frames.lua index 69ed2ad..b01a147 100644 --- a/Interface/AddOns/SVUI/packages/unit/frames.lua +++ b/Interface/AddOns/SVUI/packages/unit/frames.lua @@ -203,41 +203,7 @@ local UpdatePlayerFrame = function(self) pvp:SetPointToScale(db.pvp.position, MASTER_GRIP, db.pvp.position) self:Tag(pvp, db.pvp.tags) end - do - if SV.class == "DRUID" and self.DruidMana then - if db.power.druidMana then - self:EnableElement("DruidMana") - else - self:DisableElement("DruidMana") - self.DruidMana:Hide() - end - end - if SV.class == "MONK" then - local stagger = self.DrunkenMaster; - if db.stagger.enable then - if not self:IsElementEnabled("DrunkenMaster")then - self:EnableElement("DrunkenMaster") - end - else - if self:IsElementEnabled("DrunkenMaster")then - self:DisableElement("DrunkenMaster") - end - end - end - end do - if(self.DrunkenMaster) then - if db.stagger.enable then - if not self:IsElementEnabled("DrunkenMaster")then - self:EnableElement("DrunkenMaster") - end - else - if self:IsElementEnabled("DrunkenMaster")then - self:DisableElement("DrunkenMaster") - end - end - end - if(self.ClassBar) then if USE_CLASSBAR and self.ClassBarRefresh then self.ClassBarRefresh(self) @@ -291,8 +257,7 @@ CONSTRUCTORS["player"] = function(self, unit) MOD:CreateExperienceRepBar(self) self.ClassBar = MOD:CreateClassBar(self) self.RaidIcon = MOD:CreateRaidIcon(self) - self.Resting = MOD:CreateRestingIndicator(self) - self.Combat = MOD:CreateCombatIndicator(self) + MOD:CreatePlayerIndicators(self) self.PvPText = self.TextGrip:CreateFontString(nil,'OVERLAY') self.PvPText:FontManager("dialog") self.Afflicted = MOD:CreateAfflicted(self) diff --git a/Interface/AddOns/SVUI/packages/unit/resources/deathknight.lua b/Interface/AddOns/SVUI/packages/unit/resources/deathknight.lua index 27562a2..ffe5de5 100644 --- a/Interface/AddOns/SVUI/packages/unit/resources/deathknight.lua +++ b/Interface/AddOns/SVUI/packages/unit/resources/deathknight.lua @@ -53,7 +53,7 @@ LOCALS SV.SpecialFX:Register("rune_blood", [[Spells\Monk_drunkenhaze_impact.m2]], 0, 0, 0, 0, 0.00001, 0, 0.3) SV.SpecialFX:Register("rune_frost", [[Spells\Ice_cast_low_hand.m2]], 0, 0, 0, 0, 0.00001, -0.2, 0.4) SV.SpecialFX:Register("rune_unholy", [[Spells\Poison_impactdot_med_chest.m2]], 0, 0, 0, 0, 0.13, -0.3, -0.2) -SV.SpecialFX:Register("rune_death", [[Spells\Shadow_strikes_state_hand.m2]], 0, 0, 0, 0, 0.001, 0, -0.35) +SV.SpecialFX:Register("rune_death", [[Spells\Shadow_strikes_state_hand.m2]], 0, 0, 0, 0, 0.001, 0, -0.25) local specEffects = { [1] = "rune_blood", [2] = "rune_blood", @@ -67,7 +67,9 @@ local colors = { {0.1, 0.75, 0}, -- unholy {0, 0.5, 0.75}, -- frost {0.5, 0, 1}, -- death -} +}; +local RUNE_FG = [[Interface\AddOns\SVUI\assets\artwork\Unitframe\Class\RUNES-FG]]; +local RUNE_BG = [[Interface\AddOns\SVUI\assets\artwork\Unitframe\Class\RUNES-BG]]; --[[ ########################################################## POSITIONING @@ -78,6 +80,7 @@ local Reposition = function(self) local bar = self.Necromancy; local max = self.MaxClassPower; local size = db.classbar.height + local inset = size * 0.1 local width = size * max; bar.Holder:SetSizeToScale(width, size) @@ -93,14 +96,16 @@ local Reposition = function(self) bar:SetAllPoints(bar.Holder) for i = 1, max do bar[i]:ClearAllPoints() - bar[i]:SetHeight(size+4) + bar[i]:SetHeight(size + 4) bar[i]:SetWidth(size) bar[i].bar:GetStatusBarTexture():SetHorizTile(false) if i==1 then bar[i]:SetPoint("TOPLEFT", bar, "TOPLEFT", 0, 1) else - bar[i]:SetPointToScale("LEFT", bar[i - 1], "RIGHT", -3, 0) + bar[i]:SetPointToScale("LEFT", bar[i - 1], "RIGHT", -6, 0) end + bar[i].bar:ClearAllPoints() + bar[i].bar:SetAllPointsIn(bgFrame,inset,inset) end if bar.UpdateAllRuneTypes then @@ -135,39 +140,23 @@ function MOD:CreateClassBar(playerFrame) local bgTexture = bgFrame:CreateTexture(nil, "BORDER") bgTexture:SetAllPoints(bgFrame) - bgTexture:SetTexture([[Interface\AddOns\SVUI\assets\artwork\Bars\DEFAULT]]) + bgTexture:SetTexture(RUNE_BG) bgTexture:SetGradientAlpha("VERTICAL",colors[1],colors[2],colors[3],0.75,0,0,0,0.25) - local borderB = bgFrame:CreateTexture(nil,"OVERLAY") - borderB:SetTexture(0,0,0) - borderB:SetPoint("BOTTOMLEFT") - borderB:SetPoint("BOTTOMRIGHT") - borderB:SetHeight(2) - - local borderT = bgFrame:CreateTexture(nil,"OVERLAY") - borderT:SetTexture(0,0,0) - borderT:SetPoint("TOPLEFT") - borderT:SetPoint("TOPRIGHT") - borderT:SetHeight(2) - - local borderL = bgFrame:CreateTexture(nil,"OVERLAY") - borderL:SetTexture(0,0,0) - borderL:SetPoint("TOPLEFT") - borderL:SetPoint("BOTTOMLEFT") - borderL:SetWidth(2) - - local borderR = bgFrame:CreateTexture(nil,"OVERLAY") - borderR:SetTexture(0,0,0) - borderR:SetPoint("TOPRIGHT") - borderR:SetPoint("BOTTOMRIGHT") - borderR:SetWidth(2) - rune.bar = CreateFrame("StatusBar", nil, bgFrame) rune.bar.noupdate = true; - rune.bar:SetAllPointsIn(bgFrame) + rune.bar:SetAllPointsIn(bgFrame,4,4) rune.bar:SetOrientation("HORIZONTAL") rune.bar:SetStatusBarTexture([[Interface\AddOns\SVUI\assets\artwork\Bars\DEFAULT]]) + local fgFrame = CreateFrame("Frame", nil, rune.bar) + fgFrame:SetAllPoints(bgFrame) + + local fgTexture = fgFrame:CreateTexture(nil, "OVERLAY") + fgTexture:SetAllPoints(fgFrame) + fgTexture:SetTexture(RUNE_FG) + fgTexture:SetVertexColor(0.25,0.25,0.25) + local effectName = specEffects[i] SV.SpecialFX:SetFXFrame(rune.bar, effectName) diff --git a/Interface/AddOns/SVUI/packages/unit/resources/mage.lua b/Interface/AddOns/SVUI/packages/unit/resources/mage.lua index 4e1c59d..7f9310d 100644 --- a/Interface/AddOns/SVUI/packages/unit/resources/mage.lua +++ b/Interface/AddOns/SVUI/packages/unit/resources/mage.lua @@ -48,9 +48,16 @@ if(not MOD) then return end local ORB_ICON = [[Interface\AddOns\SVUI\assets\artwork\Unitframe\Class\ORB]]; local ORB_BG = [[Interface\AddOns\SVUI\assets\artwork\Unitframe\Class\ORB-BG]]; -local MAGE_ANIMATION = [[Interface\AddOns\SVUI\assets\artwork\Unitframe\Class\MAGE-BG-ANIMATION]]; +local CHARGE_ICON = [[Interface\AddOns\SVUI\assets\artwork\Unitframe\Class\MAGE-CHARGE]]; +local ICICLE_ICON = [[Interface\AddOns\SVUI\assets\artwork\Unitframe\Class\MAGE-ICICLE]]; +local NO_ART = [[Interface\AddOns\SVUI\assets\artwork\Template\EMPTY]]; SV.SpecialFX:Register("mage_fire", [[Spells\Fill_fire_cast_01.m2]], 2, -2, -2, 2, 0.5, -0.45, 1) local specEffects = { [1] = "arcane", [2] = "mage_fire", [3] = "frost" }; +local specColors = { + [1] = {0.8, 1, 1, 1}, + [2] = {1, 0.2, 0, 0.75}, + [3] = {0.95, 1, 1, 0.75} +}; --[[ ########################################################## POSITIONING @@ -77,11 +84,10 @@ local Reposition = function(self) bar[i]:ClearAllPoints() bar[i]:SetHeight(size) bar[i]:SetWidth(size) - bar[i]:SetStatusBarColor(0.15, 0.65, 0.85) if i==1 then bar[i]:SetPoint("TOPLEFT", bar, "TOPLEFT", 0, 0) else - bar[i]:SetPointToScale("LEFT", bar[i - 1], "RIGHT", -1, 0) + bar[i]:SetPointToScale("LEFT", bar[i - 1], "RIGHT", -3, 0) end end end @@ -94,8 +100,19 @@ local PostTalentUpdate = function(self, spec) if(not self:IsShown()) then self:Show() end - if(spec == 1 or spec == 3) then + local color = specColors[spec] + if(spec == 1) then for i = 1, 5 do + self[i]:SetStatusBarTexture(CHARGE_ICON) + self[i].bg:SetTexture(ORB_BG) + self[i]:SetStatusBarColor(unpack(color)) + self[i].FX:SetEffect(specEffects[spec]) + end + elseif(spec == 3) then + for i = 1, 5 do + self[i]:SetStatusBarTexture(ICICLE_ICON.."-"..i) + self[i].bg:SetTexture(ICICLE_ICON.."-"..i) + self[i]:SetStatusBarColor(unpack(color)) self[i].FX:SetEffect(specEffects[spec]) end else @@ -106,29 +123,27 @@ end function MOD:CreateClassBar(playerFrame) local max = 5 local spec = GetSpecialization() + local color = specColors[spec] local effectName = specEffects[spec] local bar = CreateFrame("Frame",nil,playerFrame) bar:SetFrameLevel(playerFrame.TextGrip:GetFrameLevel() + 30) for i = 1, max do bar[i] = CreateFrame("StatusBar", nil, bar) - bar[i]:SetStatusBarTexture(ORB_ICON) + bar[i]:SetStatusBarTexture(CHARGE_ICON) bar[i]:GetStatusBarTexture():SetHorizTile(false) bar[i]:SetOrientation("VERTICAL") + bar[i]:SetStatusBarColor(unpack(color)) bar[i].noupdate = true; bar[i].bg = bar[i]:CreateTexture(nil, "BACKGROUND") bar[i].bg:SetAllPoints(bar[i]) bar[i].bg:SetTexture(ORB_BG); - - bar[i].fg = bar[i]:CreateTexture(nil, "OVERLAY") - bar[i].fg:SetAllPoints(bar[i]) - bar[i].fg:SetTexture(MAGE_ANIMATION) - bar[i].fg:SetBlendMode("ADD") - bar[i].fg:SetVertexColor(0.5,0.6,0.6) - bar[i].fg:SetTexCoord(0,0.25,0,1) + bar[i].bg:SetVertexColor(0.25,0.5,0.5) SV.SpecialFX:SetFXFrame(bar[i], effectName) + --bar[i].FX:SetFrameLevel(0) + bar[i].FX:SetAlpha(0.5) end local bgFrame = CreateFrame("Frame", nil, bar) diff --git a/Interface/AddOns/SVUI/packages/unit/resources/monk.lua b/Interface/AddOns/SVUI/packages/unit/resources/monk.lua index e172bd7..f3aa043 100644 --- a/Interface/AddOns/SVUI/packages/unit/resources/monk.lua +++ b/Interface/AddOns/SVUI/packages/unit/resources/monk.lua @@ -109,7 +109,7 @@ MONK HARMONY ]]-- function MOD:CreateClassBar(playerFrame) local max = 6 - local bar = CreateFrame("Frame",nil,playerFrame) + local bar = CreateFrame("Frame", nil, playerFrame) bar:SetFrameLevel(playerFrame.TextGrip:GetFrameLevel() + 30) for i=1, max do local coords = CHI_COORDS[i] @@ -127,7 +127,7 @@ function MOD:CreateClassBar(playerFrame) bar[i].glow:SetTexture(CHI_FILE) bar[i].glow:SetTexCoord(coords[1],coords[2],coords[3],coords[4]) - bar[i].overlay = bar[i]:CreateTexture(nil, "OVERLAY", nil, 1) + bar[i].overlay = bar[i]:CreateTexture(nil, "OVERLAY", nil, 7) bar[i].overlay:SetAllPoints(bar[i]) bar[i].overlay:SetTexture(CHI_FILE) bar[i].overlay:SetTexCoord(coords[1],coords[2],coords[3],coords[4]) @@ -137,30 +137,31 @@ function MOD:CreateClassBar(playerFrame) bar[i]:SetScript("OnHide", StopFlash) SV.SpecialFX:SetFXFrame(bar[i], "chi") + bar[i].FX:SetFrameLevel(bar[i]:GetFrameLevel()) end local stagger = CreateFrame("Statusbar",nil,playerFrame) - stagger:SetSize(45,90) - stagger:SetPointToScale('BOTTOMLEFT', playerFrame, 'BOTTOMRIGHT', 6, 0) + stagger:SetPointToScale('TOPLEFT', playerFrame, 'TOPRIGHT', 3, 0) + stagger:SetPointToScale('BOTTOMLEFT', playerFrame, 'BOTTOMRIGHT', 3, 0) + stagger:SetWidth(10) + stagger:SetStylePanel("Default", "Bar") stagger:SetOrientation("VERTICAL") - stagger:SetStatusBarTexture(STAGGER_BAR) - stagger:GetStatusBarTexture():SetHorizTile(false) + stagger:SetStatusBarTexture([[Interface\AddOns\SVUI\assets\artwork\Bars\DEFAULT]]) + --stagger:GetStatusBarTexture():SetHorizTile(false) stagger.bg = stagger:CreateTexture(nil,'BORDER',nil,1) stagger.bg:SetAllPoints(stagger) - stagger.bg:SetTexture(STAGGER_BG) - stagger.bg:SetVertexColor(1,1,1,0.6) + stagger.bg:SetTexture([[Interface\AddOns\SVUI\assets\artwork\Bars\DEFAULT]]) + stagger.bg:SetVertexColor(0,0,0,0.33) - stagger.overlay = stagger:CreateTexture(nil,'OVERLAY') - stagger.overlay:SetAllPoints(stagger) - stagger.overlay:SetTexture(STAGGER_FG) - stagger.overlay:SetVertexColor(1,1,1) + -- stagger.overlay = stagger:CreateTexture(nil,'OVERLAY') + -- stagger.overlay:SetAllPoints(stagger) + -- stagger.overlay:SetTexture(STAGGER_FG) + -- stagger.overlay:SetVertexColor(1,1,1) - stagger.icon = stagger:CreateTexture(nil,'OVERLAY') - stagger.icon:SetAllPoints(stagger) - stagger.icon:SetTexture(STAGGER_ICON) - - stagger:Hide() + -- stagger.icon = stagger:CreateTexture(nil,'OVERLAY') + -- stagger.icon:SetAllPoints(stagger) + -- stagger.icon:SetTexture(STAGGER_ICON) bar.DrunkenMaster = stagger diff --git a/Interface/AddOns/SVUI/packages/unit/resources/warrior.lua b/Interface/AddOns/SVUI/packages/unit/resources/warrior.lua index 194d588..19a6da2 100644 --- a/Interface/AddOns/SVUI/packages/unit/resources/warrior.lua +++ b/Interface/AddOns/SVUI/packages/unit/resources/warrior.lua @@ -50,17 +50,18 @@ local Reposition = function(self) local max = self.MaxClassPower; local size = db.classbar.height local width = size * max; + bar.Holder:SetSizeToScale(width, size) - if(not db.classbar.detachFromFrame) then - SV.Mentalo:Reset(L["Classbar"]) - end - local holderUpdate = bar.Holder:GetScript('OnSizeChanged') - if holderUpdate then - holderUpdate(bar.Holder) - end - - bar:ClearAllPoints() - bar:SetAllPoints(bar.Holder) + if(not db.classbar.detachFromFrame) then + SV.Mentalo:Reset(L["Classbar"]) + end + local holderUpdate = bar.Holder:GetScript('OnSizeChanged') + if holderUpdate then + holderUpdate(bar.Holder) + end + + bar:ClearAllPoints() + bar:SetAllPoints(bar.Holder) end local EffectModel_OnShow = function(self) @@ -68,72 +69,70 @@ local EffectModel_OnShow = function(self) end function MOD:CreateClassBar(playerFrame) - return -end --- function MOD:CreateClassBar(playerFrame) --- local max = 6 --- local bar = CreateFrame("Frame",nil,playerFrame) - --- bar:SetFrameLevel(playerFrame.TextGrip:GetFrameLevel() + 30) --- --SV.SpecialFX:SetFXFrame(bar, "conqueror") --- --bar.FX:SetFrameStrata("BACKGROUND") --- --bar.FX:SetFrameLevel(playerFrame.TextGrip:GetFrameLevel() + 1) - --- local bgFrame = CreateFrame("Frame", nil, bar) --- bgFrame:SetAllPointsIn(bar, 1, 4) --- SV.SpecialFX:SetFXFrame(bgFrame, "conqueror") - --- local bgTexture = bgFrame:CreateTexture(nil, "BACKGROUND") --- bgTexture:SetAllPoints(bgFrame) --- bgTexture:SetTexture(0.2,0,0,0.5) - --- local borderB = bgFrame:CreateTexture(nil,"OVERLAY") --- borderB:SetTexture(0,0,0) --- borderB:SetPoint("BOTTOMLEFT") --- borderB:SetPoint("BOTTOMRIGHT") --- borderB:SetHeight(2) - --- local borderT = bgFrame:CreateTexture(nil,"OVERLAY") --- borderT:SetTexture(0,0,0) --- borderT:SetPoint("TOPLEFT") --- borderT:SetPoint("TOPRIGHT") --- borderT:SetHeight(2) - --- local borderL = bgFrame:CreateTexture(nil,"OVERLAY") --- borderL:SetTexture(0,0,0) --- borderL:SetPoint("TOPLEFT") --- borderL:SetPoint("BOTTOMLEFT") --- borderL:SetWidth(2) - --- local borderR = bgFrame:CreateTexture(nil,"OVERLAY") --- borderR:SetTexture(0,0,0) --- borderR:SetPoint("TOPRIGHT") --- borderR:SetPoint("BOTTOMRIGHT") --- borderR:SetWidth(2) - --- bar.bg = bgTexture; - --- local enrage = CreateFrame("StatusBar", nil, bgFrame) --- enrage.noupdate = true; --- enrage:SetAllPointsIn(bgFrame) --- enrage:SetOrientation("HORIZONTAL") --- enrage:SetStatusBarTexture(SV.Media.bar.glow) --- enrage:SetStatusBarColor(1, 0.2, 0, 0.75) - --- --SV.SpecialFX:SetFXFrame(enrage, "conqueror", true) --- --enrage.FX:SetScript("OnShow", EffectModel_OnShow) --- bar.Enrage = enrage; - - --- local classBarHolder = CreateFrame("Frame", "Player_ClassBar", bar) --- classBarHolder:SetPointToScale("TOPLEFT", playerFrame, "BOTTOMLEFT", 0, -2) --- bar:SetPoint("TOPLEFT", classBarHolder, "TOPLEFT", 0, 0) --- bar.Holder = classBarHolder --- SV.Mentalo:Add(bar.Holder, L["Classbar"]) - --- playerFrame.MaxClassPower = max --- playerFrame.ClassBarRefresh = Reposition - --- playerFrame.Conqueror = bar --- return 'Conqueror' --- end \ No newline at end of file + local max = 6 + local bar = CreateFrame("Frame",nil,playerFrame) + + bar:SetFrameLevel(playerFrame.TextGrip:GetFrameLevel() + 30) + --SV.SpecialFX:SetFXFrame(bar, "conqueror") + --bar.FX:SetFrameStrata("BACKGROUND") + --bar.FX:SetFrameLevel(playerFrame.TextGrip:GetFrameLevel() + 1) + + local bgFrame = CreateFrame("Frame", nil, bar) + bgFrame:SetAllPointsIn(bar, 1, 4) + SV.SpecialFX:SetFXFrame(bgFrame, "conqueror") + + local bgTexture = bgFrame:CreateTexture(nil, "BACKGROUND") + bgTexture:SetAllPoints(bgFrame) + bgTexture:SetTexture(0.2,0,0,0.5) + + local borderB = bgFrame:CreateTexture(nil,"OVERLAY") + borderB:SetTexture(0,0,0) + borderB:SetPoint("BOTTOMLEFT") + borderB:SetPoint("BOTTOMRIGHT") + borderB:SetHeight(2) + + local borderT = bgFrame:CreateTexture(nil,"OVERLAY") + borderT:SetTexture(0,0,0) + borderT:SetPoint("TOPLEFT") + borderT:SetPoint("TOPRIGHT") + borderT:SetHeight(2) + + local borderL = bgFrame:CreateTexture(nil,"OVERLAY") + borderL:SetTexture(0,0,0) + borderL:SetPoint("TOPLEFT") + borderL:SetPoint("BOTTOMLEFT") + borderL:SetWidth(2) + + local borderR = bgFrame:CreateTexture(nil,"OVERLAY") + borderR:SetTexture(0,0,0) + borderR:SetPoint("TOPRIGHT") + borderR:SetPoint("BOTTOMRIGHT") + borderR:SetWidth(2) + + bar.bg = bgTexture; + + local enrage = CreateFrame("StatusBar", nil, bgFrame) + enrage.noupdate = true; + enrage:SetAllPointsIn(bgFrame) + enrage:SetOrientation("HORIZONTAL") + enrage:SetStatusBarTexture(SV.Media.bar.glow) + enrage:SetStatusBarColor(1, 0, 0, 0.75) + + bgFrame.bar = enrage; + --SV.SpecialFX:SetFXFrame(enrage, "conqueror", true) + --enrage.FX:SetScript("OnShow", EffectModel_OnShow) + bar.Enrage = bgFrame; + + + local classBarHolder = CreateFrame("Frame", "Player_ClassBar", bar) + classBarHolder:SetPointToScale("TOPLEFT", playerFrame, "BOTTOMLEFT", 0, -2) + bar:SetPoint("TOPLEFT", classBarHolder, "TOPLEFT", 0, 0) + bar.Holder = classBarHolder + SV.Mentalo:Add(bar.Holder, L["Classbar"]) + + playerFrame.MaxClassPower = max + playerFrame.ClassBarRefresh = Reposition + + playerFrame.Conqueror = bar + return 'Conqueror' +end \ No newline at end of file diff --git a/Interface/AddOns/SVUI/setup/presets.lua b/Interface/AddOns/SVUI/setup/presets.lua index 81c10dd..15be2ac 100644 --- a/Interface/AddOns/SVUI/setup/presets.lua +++ b/Interface/AddOns/SVUI/setup/presets.lua @@ -98,8 +98,8 @@ local function LoadPresetData() ["unitframes"] = { ["buff_bars"] = {.91, .91, .31, 1}, ["health"] = {.1, .6, .02, 1}, - ["casting"] = {.91, .91, .31, 1}, - ["spark"] = {1, .72, 0, 1}, + ["casting"] = {0, 0.92, 1, 1}, + ["spark"] = {0, 0.42, 1, 1}, }, }, ["kaboom"] = { @@ -116,8 +116,8 @@ local function LoadPresetData() ["unitframes"] = { ["buff_bars"] = {.51, .79, 0, 1}, ["health"] = {.16, .86, .22, 1}, - ["casting"] = {.91, .91, 0, 1}, - ["spark"] = {1, .72, 0, 1}, + ["casting"] = {0, 0.92, 1, 1}, + ["spark"] = {0, 0.42, 1, 1}, }, }, ["classy"] = { @@ -134,8 +134,8 @@ local function LoadPresetData() ["unitframes"] = { ["buff_bars"] = {scc.r, scc.g, scc.b, 1}, ["health"] = {.16, .86, .22, 1}, - ["casting"] = {.91, .91, 0, 1}, - ["spark"] = {1, .72, 0, 1}, + ["casting"] = {0, 0.92, 1, 1}, + ["spark"] = {0, 0.42, 1, 1}, }, }, ["dark"] = { @@ -152,8 +152,8 @@ local function LoadPresetData() ["unitframes"] = { ["buff_bars"] = {.45, .55, .15, 1}, ["health"] = {.06, .06, .06, 1}, - ["casting"] = {.8, .8, 0, 1}, - ["spark"] = {1, .72, 0, 1}, + ["casting"] = {0, 0.92, 1, 1}, + ["spark"] = {0, 0.42, 1, 1}, }, }, }, diff --git a/Interface/AddOns/SVUI/system/core.lua b/Interface/AddOns/SVUI/system/core.lua index 56bccc1..5680946 100644 --- a/Interface/AddOns/SVUI/system/core.lua +++ b/Interface/AddOns/SVUI/system/core.lua @@ -125,12 +125,26 @@ local function _sendmessage(msg, prefix) end end +local function _explode(this, delim) + local pattern = string.format("([^%s]+)", delim) + local res = {} + for line in string.gmatch(this, pattern) do + tinsert(res, line) + end + return res +end local function _needsupdate(value, lowest) local minimumVersion = 5; --print(table.dump(self.safedata)) local version = value or '0.0'; - local vt = version:explode(".") + if(version and type(version) ~= string) then + version = tostring(version) + end + if(not version) then + return true + end + local vt = _explode(version, ".") local MAJOR,MINOR,PATCH = unpack(vt) if(MAJOR) then if(type(MAJOR) == "string") then diff --git a/Interface/AddOns/SVUI/system/media.lua b/Interface/AddOns/SVUI/system/media.lua index f253a3e..3e254c4 100644 --- a/Interface/AddOns/SVUI/system/media.lua +++ b/Interface/AddOns/SVUI/system/media.lua @@ -174,9 +174,11 @@ do ["default"] = {0.2, 0.2, 0.2, 1}, ["special"] = {.37, .32, .29, 1}, ["specialdark"] = {.23, .22, .21, 1}, - ["unique"] = {0.32, 0.258, 0.21, 1}, + ["unique"] = {0.32, 0.258, 0.21, 1}, + ["container"] = {.28, .27, .26, 1}, ["class"] = {r1, g1, b1, 1}, ["bizzaro"] = {ir1, ig1, ib1, 1}, + ["medium"] = {0.47, 0.47, 0.47}, ["dark"] = {0, 0, 0, 1}, ["darkest"] = {0, 0, 0, 1}, ["light"] = {0.95, 0.95, 0.95, 1}, @@ -190,10 +192,32 @@ do ["gold"] = {1, 0.68, 0.1, 1}, ["transparent"] = {0, 0, 0, 0.5}, ["hinted"] = {0, 0, 0, 0.35}, - ["invisible"] = {0, 0, 0, 0}, + ["invisible"] = {0, 0, 0, 0}, ["white"] = {1, 1, 1, 1}, } + SV.Media["gradient"] = { + ["default"] = {"VERTICAL", 0.08, 0.08, 0.08, 0.22, 0.22, 0.22}, + ["special"] = {"VERTICAL", 0.33, 0.25, 0.13, 0.47, 0.39, 0.27}, + ["specialdark"] = {"VERTICAL", 0.23, 0.15, 0.03, 0.33, 0.25, 0.13}, + ["container"] = {"VERTICAL", 0.12, 0.11, 0.1, 0.22, 0.21, 0.2}, + ["class"] = {"VERTICAL", r2, g2, b2, r1, g1, b1}, + ["bizzaro"] = {"VERTICAL", ir2, ig2, ib2, ir1, ig1, ib1}, + ["medium"] = {"VERTICAL", 0.22, 0.22, 0.22, 0.47, 0.47, 0.47}, + ["dark"] = {"VERTICAL", 0.02, 0.02, 0.02, 0.22, 0.22, 0.22}, + ["darkest"] = {"VERTICAL", 0.15, 0.15, 0.15, 0, 0, 0}, + ["darkest2"] = {"VERTICAL", 0, 0, 0, 0.12, 0.12, 0.12}, + ["light"] = {"VERTICAL", 0.65, 0.65, 0.65, 0.95, 0.95, 0.95}, + ["highlight"] = {"VERTICAL", 0.3, 0.8, 1, 0.1, 0.9, 1}, + ["green"] = {"VERTICAL", 0.08, 0.9, 0.25, 0.25, 0.9, 0.08}, + ["red"] = {"VERTICAL", 0.5, 0, 0, 0.9, 0.08, 0.08}, + ["yellow"] = {"VERTICAL", 1, 0.3, 0, 1, 1, 0}, + ["tan"] = {"VERTICAL", 0.15, 0.08, 0, 0.37, 0.22, 0.1}, + ["inverse"] = {"VERTICAL", 0.25, 0.25, 0.25, 0.12, 0.12, 0.12}, + ["icon"] = {"VERTICAL", 0.5, 0.53, 0.55, 0.8, 0.8, 1}, + ["white"] = {"VERTICAL", 0.75, 0.75, 0.75, 1, 1, 1}, + } + SV.Media["font"] = { ["default"] = Shared:Fetch("font", "SVUI Default Font"), ["combat"] = Shared:Fetch("font", "SVUI Combat Font"), @@ -224,25 +248,6 @@ do ["unitlarge"] = Shared:Fetch("background", "SVUI Unit BG 3"), ["unitsmall"] = Shared:Fetch("background", "SVUI Small BG 3") } - - SV.Media["gradient"] = { - ["default"] = {"VERTICAL", 0.08, 0.08, 0.08, 0.22, 0.22, 0.22}, - ["special"] = {"VERTICAL", 0.33, 0.25, 0.13, 0.47, 0.39, 0.27}, - ["class"] = {"VERTICAL", r2, g2, b2, r1, g1, b1}, - ["bizzaro"] = {"VERTICAL", ir2, ig2, ib2, ir1, ig1, ib1}, - ["dark"] = {"VERTICAL", 0.02, 0.02, 0.02, 0.22, 0.22, 0.22}, - ["darkest"] = {"VERTICAL", 0.15, 0.15, 0.15, 0, 0, 0}, - ["darkest2"] = {"VERTICAL", 0, 0, 0, 0.12, 0.12, 0.12}, - ["light"] = {"VERTICAL", 0.65, 0.65, 0.65, 0.95, 0.95, 0.95}, - ["highlight"] = {"VERTICAL", 0.3, 0.8, 1, 0.1, 0.9, 1}, - ["green"] = {"VERTICAL", 0.08, 0.9, 0.25, 0.25, 0.9, 0.08}, - ["red"] = {"VERTICAL", 0.5, 0, 0, 0.9, 0.08, 0.08}, - ["yellow"] = {"VERTICAL", 1, 0.3, 0, 1, 1, 0}, - ["tan"] = {"VERTICAL", 0.15, 0.08, 0, 0.37, 0.22, 0.1}, - ["inverse"] = {"VERTICAL", 0.25, 0.25, 0.25, 0.12, 0.12, 0.12}, - ["icon"] = {"VERTICAL", 0.5, 0.53, 0.55, 0.8, 0.8, 1}, - ["white"] = {"VERTICAL", 0.75, 0.75, 0.75, 1, 1, 1}, - } end --[[ ########################################################## diff --git a/Interface/AddOns/SVUI_ChatOMatic/SVUI_ChatOMatic.toc b/Interface/AddOns/SVUI_ChatOMatic/SVUI_ChatOMatic.toc index 77bd7a0..3989d2c 100644 --- a/Interface/AddOns/SVUI_ChatOMatic/SVUI_ChatOMatic.toc +++ b/Interface/AddOns/SVUI_ChatOMatic/SVUI_ChatOMatic.toc @@ -1,6 +1,6 @@ ## Interface: 60000 ## Author: Munglunch -## Version: 5.4.15 +## Version: 5.4.16 ## Title: |cffFF9900SVUI |r|cffFFEF00Chat-O-Matic|r ## Notes: Supervillain UI [|cff9911FFVarious Chat Gadgets|r] ## SavedVariables: ChatOMatic_Data diff --git a/Interface/AddOns/SVUI_ConfigOMatic/SVUI_ConfigOMatic.lua b/Interface/AddOns/SVUI_ConfigOMatic/SVUI_ConfigOMatic.lua index ee718e8..d1ebd5e 100644 --- a/Interface/AddOns/SVUI_ConfigOMatic/SVUI_ConfigOMatic.lua +++ b/Interface/AddOns/SVUI_ConfigOMatic/SVUI_ConfigOMatic.lua @@ -183,17 +183,24 @@ SV.Options.args.common = { LoginMessage = { order = 4, type = 'toggle', - name = L['Login Message'], + name = L['Login Messages'], get = function(j)return SV.db.general.loginmessage end, set = function(j,value)SV.db.general.loginmessage = value end }, - scaleAdjust = { + questTracker = { order = 5, + type = 'toggle', + name = L['Custom Quest Tracker'], + get = function(j) return SV.db.SVQuest.enable end, + set = function(j,value) SV.db.SVQuest.enable = value end + }, + scaleAdjust = { + order = 6, name = L["Base Scale"], desc = L["You can use this to adjust the base value applied to auto-scaling."], type = "range", width = "full", - min = 0.64, + min = 0.5, max = 1, step = 0.01, get = function(j)return SV.db.general.scaleAdjust end, diff --git a/Interface/AddOns/SVUI_ConfigOMatic/SVUI_ConfigOMatic.toc b/Interface/AddOns/SVUI_ConfigOMatic/SVUI_ConfigOMatic.toc index 24d8ae4..2df861f 100644 --- a/Interface/AddOns/SVUI_ConfigOMatic/SVUI_ConfigOMatic.toc +++ b/Interface/AddOns/SVUI_ConfigOMatic/SVUI_ConfigOMatic.toc @@ -1,6 +1,6 @@ ## Interface: 60000 ## Author: Munglunch -## Version: 5.4.15 +## Version: 5.4.16 ## Title: |cffFF9900SVUI |r|cffFFEF00Config-O-Matic|r ## Notes: Supervillain UI [|cff9911FFConfig Options|r] ## RequiredDeps: SVUI diff --git a/Interface/AddOns/SVUI_CraftOMatic/SVUI_CraftOMatic.toc b/Interface/AddOns/SVUI_CraftOMatic/SVUI_CraftOMatic.toc index 795ce94..91e0c0c 100644 --- a/Interface/AddOns/SVUI_CraftOMatic/SVUI_CraftOMatic.toc +++ b/Interface/AddOns/SVUI_CraftOMatic/SVUI_CraftOMatic.toc @@ -1,6 +1,6 @@ ## Interface: 60000 ## Author: Munglunch -## Version: 5.4.15 +## Version: 5.4.16 ## Title: |cffFF9900SVUI |r|cffFFEF00Craft-O-Matic|r ## Notes: Supervillain UI [|cff9911FFProfession Tools|r]. ## SavedVariablesPerCharacter: CraftOMatic_Profile, CraftOMatic_Cache diff --git a/Interface/AddOns/SVUI_FightOMatic/SVUI_FightOMatic.lua b/Interface/AddOns/SVUI_FightOMatic/SVUI_FightOMatic.lua index cb4b49f..62d6960 100644 --- a/Interface/AddOns/SVUI_FightOMatic/SVUI_FightOMatic.lua +++ b/Interface/AddOns/SVUI_FightOMatic/SVUI_FightOMatic.lua @@ -695,6 +695,15 @@ local onMouseWheel = function(self, delta) end end +local function _explode(this, delim) + local pattern = ("([^%s]+)"):format(delim) + local res = {} + for line in this:gmatch(pattern) do + tinsert(res, line) + end + return res +end + local function MakeLogWindow() local frame = CreateFrame("Frame", nil, UIParent) @@ -720,7 +729,7 @@ local function MakeLogWindow() output:SetInsertMode('TOP') output:SetScript("OnHyperlinkEnter", function(self, linkData, link, button) - local t = link:explode(":") + local t = _explode(link, ":") local name = t[2] or "" SVUI_TargetScanButton:SetAttribute("macrotext", ("/tar %s"):format(name)) SVUI_TargetScanButton:EnableMouse(true) diff --git a/Interface/AddOns/SVUI_FightOMatic/SVUI_FightOMatic.toc b/Interface/AddOns/SVUI_FightOMatic/SVUI_FightOMatic.toc index 16bc0cc..7c5a172 100644 --- a/Interface/AddOns/SVUI_FightOMatic/SVUI_FightOMatic.toc +++ b/Interface/AddOns/SVUI_FightOMatic/SVUI_FightOMatic.toc @@ -1,6 +1,6 @@ ## Interface: 60000 ## Author: Munglunch -## Version: 5.4.15 +## Version: 5.4.16 ## Title: |cffFF9900SVUI |r|cffFFEF00Fight-O-Matic|r ## Notes: Supervillain UI [|cff9911FFPvP Tools|r]. ## SavedVariablesPerCharacter: FightOMatic_Profile, FightOMatic_Cache diff --git a/Interface/AddOns/SVUI_LogOMatic/SVUI_LogOMatic.toc b/Interface/AddOns/SVUI_LogOMatic/SVUI_LogOMatic.toc index 004f01b..4d8b641 100644 --- a/Interface/AddOns/SVUI_LogOMatic/SVUI_LogOMatic.toc +++ b/Interface/AddOns/SVUI_LogOMatic/SVUI_LogOMatic.toc @@ -1,6 +1,6 @@ ## Interface: 60000 ## Author: Munglunch -## Version: 5.4.15 +## Version: 5.4.16 ## Title: |cffFF9900SVUI |r|cffFFEF00Log-O-Matic|r ## Notes: Supervillain UI [|cff9911FFData Logging|r]. ## SavedVariables: LogOMatic_Data diff --git a/Interface/AddOns/SVUI_StyleOMatic/SVUI_StyleOMatic.toc b/Interface/AddOns/SVUI_StyleOMatic/SVUI_StyleOMatic.toc index ecaf9f3..26778e0 100644 --- a/Interface/AddOns/SVUI_StyleOMatic/SVUI_StyleOMatic.toc +++ b/Interface/AddOns/SVUI_StyleOMatic/SVUI_StyleOMatic.toc @@ -1,6 +1,6 @@ ## Interface: 60000 ## Author: Munglunch, Azilroka, Sortokk -## Version: 5.4.15 +## Version: 5.4.16 ## Title: |cffFF9900SVUI |r|cffFFEF00Style-O-Matic|r ## Notes: Supervillain UI [|cff9911FFAddon Skins|r]. ## SavedVariables: StyleOMatic_Global diff --git a/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/auctionhouse.lua b/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/auctionhouse.lua index a56be8e..271893a 100644 --- a/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/auctionhouse.lua +++ b/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/auctionhouse.lua @@ -108,18 +108,7 @@ local function AuctionStyle() ShowOnPlayerCheckButton:SetStylePanel("Checkbox", true) --ExactMatchCheckButton:SetStylePanel("Checkbox", true) - - SideDressUpFrame:RemoveTextures(true) - SideDressUpFrame:ClearAllPoints() - SideDressUpFrame:SetSizeToScale(300, 400) - SideDressUpFrame:SetPoint("LEFT", AuctionFrame, "RIGHT", 16, 0) - SideDressUpFrame.SetPoint = SV.fubar - SideDressUpModel:RemoveTextures(true) - SideDressUpModel:SetAllPoints(SideDressUpFrame) - SideDressUpModel:SetStylePanel("Fixed", "ModelBorder") - SideDressUpModelResetButton:SetStylePanel("Button") - SideDressUpModelResetButton:SetPoint("BOTTOM", SideDressUpModel, "BOTTOM", 0, 20) - PLUGIN:ApplyCloseButtonStyle(SideDressUpModelCloseButton) + --SideDressUpFrame:SetPoint("LEFT", AuctionFrame, "RIGHT", 16, 0) AuctionProgressFrame:RemoveTextures() AuctionProgressFrame:SetStylePanel("Fixed", "Transparent", true) diff --git a/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/character.lua b/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/character.lua index 904f081..5eb2164 100644 --- a/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/character.lua +++ b/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/character.lua @@ -106,13 +106,13 @@ local function StyleCharacterSlots() if(not charSlot.Panel) then charSlot:RemoveTextures() charSlot.ignoreTexture:SetTexture([[Interface\PaperDollInfoFrame\UI-GearManager-LeaveItem-Transparent]]) - charSlot:SetStylePanel("Slot", true, 2, 0, 0) + charSlot:SetStylePanel("Slot", true, 1, 0, 0) local iconTex = _G[globalName.."IconTexture"] if(iconTex) then iconTex:SetTexCoord(0.1, 0.9, 0.1, 0.9) + iconTex:SetAllPointsIn(charSlot) iconTex:SetParent(charSlot.Panel) - iconTex:SetAllPointsIn(charSlot.Panel, 2, 2) end end diff --git a/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/system.lua b/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/system.lua index b9510ab..54c0ea8 100644 --- a/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/system.lua +++ b/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/system.lua @@ -719,9 +719,18 @@ local function SystemPanelQue() ReportPlayerNameDialogCommentFrameEditBox:SetStylePanel("Editbox") ReportPlayerNameDialog:SetStylePanel("Fixed", "Transparent", true) ReportPlayerNameDialogReportButton:SetStylePanel("Button") - ReportPlayerNameDialogCancelButton:SetStylePanel("Button") - PLUGIN:ApplyCloseButtonStyle(SideDressUpModelCloseButton) + ReportPlayerNameDialogCancelButton:SetStylePanel("Button") + + + SideDressUpFrame:RemoveTextures(true) + SideDressUpFrame:SetSizeToScale(300, 400) + SideDressUpModel:RemoveTextures(true) + SideDressUpModel:SetAllPoints(SideDressUpFrame) + SideDressUpModel:SetStylePanel("Fixed", "ModelBorder") SideDressUpModelResetButton:SetStylePanel("Button") + SideDressUpModelResetButton:SetPoint("BOTTOM", SideDressUpModel, "BOTTOM", 0, 20) + PLUGIN:ApplyCloseButtonStyle(SideDressUpModelCloseButton) + PLUGIN:ApplyCloseButtonStyle(SideDressUpModelCloseButton) end --[[ ########################################################## diff --git a/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/voidstorage.lua b/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/voidstorage.lua index f592e92..329f532 100644 --- a/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/voidstorage.lua +++ b/Interface/AddOns/SVUI_StyleOMatic/components/blizzard/voidstorage.lua @@ -30,6 +30,8 @@ local Schema = PLUGIN.Schema; HELPERS ########################################################## ]]-- +local NO_TEXTURE = [[Interface\AddOns\SVUI\assets\artwork\Template\EMPTY]]; + local VoidStorageList = { "VoidStorageBorderFrame", "VoidStorageDepositFrame", @@ -89,17 +91,36 @@ local function ChangeTabHelper(this) this:SetPointToScale(a,b,c,1,e) end +local SlotBorderColor_Hook = function(self, ...) + local parent = self:GetParent() + if(parent) then + parent:SetBackdropBorderColor(...) + end +end +local SlotBorder_OnHide = function(self, ...) + local parent = self:GetParent() + if(parent) then + parent:SetBackdropBorderColor(0,0,0,0.5) + end +end + local function VoidSlotStyler(name, index) local gName = ("%sButton%d"):format(name, index) local button = _G[gName] local icon = _G[gName .. "IconTexture"] local bg = _G[gName .. "Bg"] if(button) then + local border = button.IconBorder if(bg) then bg:Hide() end button:SetStylePanel("Slot", true, 2, 0, 0) if(icon) then icon:SetTexCoord(0.1, 0.9, 0.1, 0.9) - icon:SetAllPointsIn() + icon:SetAllPointsIn(button) + end + if(border) then + border:SetTexture(NO_TEXTURE) + hooksecurefunc(border, "Hide", SlotBorder_OnHide) + hooksecurefunc(border, "SetVertexColor", SlotBorderColor_Hook) end end end @@ -140,7 +161,7 @@ local function VoidStorageStyle() VoidItemSearchBox.Panel:SetPointToScale("TOPLEFT", 10, -1) VoidItemSearchBox.Panel:SetPointToScale("BOTTOMRIGHT", 4, 1) - for i=1, 9 do + for i = 1, 9 do VoidSlotStyler("VoidStorageDeposit", i) VoidSlotStyler("VoidStorageWithdraw", i) end diff --git a/Interface/AddOns/SVUI_TrackOMatic/SVUI_TrackOMatic.toc b/Interface/AddOns/SVUI_TrackOMatic/SVUI_TrackOMatic.toc index a234f2b..ae18787 100644 --- a/Interface/AddOns/SVUI_TrackOMatic/SVUI_TrackOMatic.toc +++ b/Interface/AddOns/SVUI_TrackOMatic/SVUI_TrackOMatic.toc @@ -1,6 +1,6 @@ ## Interface: 60000 ## Author: Munglunch -## Version: 5.4.15 +## Version: 5.4.16 ## Title: |cffFF9900SVUI |r|cffFFEF00Track-O-Matic|r ## Notes: Supervillain UI [|cff9911FFRaid & Party Member Tracking|r]. ## SavedVariables: TrackOMatic_Global -- 1.7.9.5