From 1109d19bb511a45030e89c2063fd8bfa6f450ba8 Mon Sep 17 00:00:00 2001 From: sindoring Date: Wed, 8 Apr 2026 09:50:06 +0400 Subject: [PATCH] =?UTF-8?q?dragon=20ui=20+=20aio=20=D0=B2=20=D0=B1=D0=B0?= =?UTF-8?q?=D0=B7=D0=BE=D0=B2=D1=8B=D0=B9=20=D0=BA=D0=BE=D0=BC=D0=BF=D0=BB?= =?UTF-8?q?=D0=B5=D0=BA=D1=82=20=D0=BF=D0=BE=D1=81=D1=82=D0=B0=D0=B2=D0=BA?= =?UTF-8?q?=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Interface/AddOns/AIO_Client/AIO.lua | 1313 ++++++ .../AddOns/AIO_Client/AIO_Client.toc | 16 + .../Changelog-LibWindow-1.1-r12.txt | 13 + .../AIO_Client/Dep_LibWindow-1.1/LibStub.lua | 51 + .../Dep_LibWindow-1.1/LibWindow-1.1.toc | 16 + .../LibWindow-1.1/LibWindow-1.1.lua | 317 ++ .../AIO_Client/Dep_Smallfolk/LICENSE.md | 20 + .../AddOns/AIO_Client/Dep_Smallfolk/README.md | 97 + .../AIO_Client/Dep_Smallfolk/smallfolk.lua | 218 + .../AddOns/AIO_Client/lualzw-zeros/LICENSE | 21 + .../AddOns/AIO_Client/lualzw-zeros/README.md | 72 + .../AddOns/AIO_Client/lualzw-zeros/lualzw.lua | 166 + .../Interface/AddOns/AIO_Client/queue.lua | 83 + .../Interface/AddOns/DragonUI/Atlas.lua | 708 ++++ .../Interface/AddOns/DragonUI/DragonUI.toc | 38 + .../Interface/AddOns/DragonUI/DragonUI.xml | 25 + .../AddOns/DragonUI/Locales/Load_Locales.xml | 16 + .../AddOns/DragonUI/Locales/deDE.lua | 408 ++ .../AddOns/DragonUI/Locales/enUS.lua | 412 ++ .../AddOns/DragonUI/Locales/esES.lua | 408 ++ .../AddOns/DragonUI/Locales/esMX.lua | 408 ++ .../AddOns/DragonUI/Locales/frFR.lua | 40 + .../AddOns/DragonUI/Locales/koKR.lua | 409 ++ .../AddOns/DragonUI/Locales/ptBR.lua | 40 + .../AddOns/DragonUI/Locales/ruRU.lua | 408 ++ .../AddOns/DragonUI/Locales/zhCN.lua | 40 + .../AddOns/DragonUI/Locales/zhTW.lua | 40 + .../AddOns/DragonUI/Textures/CastbarMask.blp | Bin 0 -> 175972 bytes .../DragonUI/Textures/CastbarNormal.blp | Bin 0 -> 23156 bytes .../DragonUI/Textures/CastbarNormal2.blp | Bin 0 -> 23156 bytes .../CastbarOriginal/CastingBarBackground2.blp | Bin 0 -> 23156 bytes .../CastbarOriginal/CastingBarChannel.tga | Bin 0 -> 65580 bytes .../CastbarOriginal/CastingBarFrame2.blp | Bin 0 -> 23156 bytes .../CastingBarInterrupted2.tga | Bin 0 -> 65580 bytes .../CastbarOriginal/CastingBarMask.blp | Bin 0 -> 23156 bytes .../CastbarOriginal/CastingBarSpark.tga | Bin 0 -> 4140 bytes .../CastingBarStandard2-channelfix.blp | Bin 0 -> 23156 bytes .../CastbarOriginal/CastingBarStandard2.tga | Bin 0 -> 65580 bytes .../Textures/CastbarOriginal/uicastingbar.blp | Bin 0 -> 525460 bytes .../CastbarOriginal/uicastingbar2x.blp | Bin 0 -> 2098324 bytes .../CastbarOriginal/uicastingbarfx.blp | Bin 0 -> 525460 bytes .../uicastingbarstandardflipbook.blp | Bin 0 -> 263316 bytes .../Textures/ClassIcons/DEATHKNIGHT.blp | Bin 0 -> 23060 bytes .../DragonUI/Textures/ClassIcons/DRUID.blp | Bin 0 -> 23060 bytes .../DragonUI/Textures/ClassIcons/HUNTER.blp | Bin 0 -> 23060 bytes .../DragonUI/Textures/ClassIcons/MAGE.blp | Bin 0 -> 23060 bytes .../DragonUI/Textures/ClassIcons/PALADIN.blp | Bin 0 -> 23060 bytes .../DragonUI/Textures/ClassIcons/PRIEST.blp | Bin 0 -> 23060 bytes .../DragonUI/Textures/ClassIcons/ROGUE.blp | Bin 0 -> 23060 bytes .../DragonUI/Textures/ClassIcons/SHAMAN.blp | Bin 0 -> 23060 bytes .../DragonUI/Textures/ClassIcons/WARLOCK.blp | Bin 0 -> 23060 bytes .../DragonUI/Textures/ClassIcons/WARRIOR.blp | Bin 0 -> 23060 bytes .../DragonUI/Textures/Editmode/editmodeui.blp | Bin 0 -> 33940 bytes .../editmodeuihighlightbackground.blp | Bin 0 -> 2196 bytes .../Editmode/editmodeuiselectedbackground.blp | Bin 0 -> 2196 bytes .../Textures/Editmode/editmodeuivertical.blp | Bin 0 -> 9364 bytes .../ui-friendsframe-onlinedivider.blp | Bin 0 -> 4004 bytes .../DragonUI/Textures/Micromenu/micropvp.blp | Bin 0 -> 88596 bytes .../Textures/Micromenu/uimicromenu2x.blp | Bin 0 -> 2098324 bytes .../Micromenu/uimicromenuportraitmask2x.blp | Bin 0 -> 33940 bytes .../DragonUI/Textures/Minimap/Calendar.blp | Bin 0 -> 88596 bytes .../Minimap/EyeGroupFinderFlipbook.blp | Bin 0 -> 175972 bytes .../DragonUI/Textures/Minimap/GuildBanner.blp | Bin 0 -> 88596 bytes .../Textures/Minimap/MinimapBorder.blp | Bin 0 -> 88596 bytes .../DragonUI/Textures/MinimapBorder.blp | Bin 0 -> 23060 bytes ...-UnitFrame-Party-PortraitOn-Bar-Energy.tga | Bin 0 -> 4140 bytes ...D-UnitFrame-Party-PortraitOn-Bar-Focus.tga | Bin 0 -> 4140 bytes ...Frame-Party-PortraitOn-Bar-Health-Mask.blp | Bin 0 -> 3972 bytes ...ame-Party-PortraitOn-Bar-Health-Status.tga | Bin 0 -> 4140 bytes ...-UnitFrame-Party-PortraitOn-Bar-Health.tga | Bin 0 -> 4140 bytes ...itFrame-Party-PortraitOn-Bar-Mana-Mask.blp | Bin 0 -> 2676 bytes ...Frame-Party-PortraitOn-Bar-Mana-Status.blp | Bin 0 -> 2676 bytes ...UD-UnitFrame-Party-PortraitOn-Bar-Mana.tga | Bin 0 -> 4140 bytes ...UD-UnitFrame-Party-PortraitOn-Bar-Rage.tga | Bin 0 -> 4140 bytes ...tFrame-Party-PortraitOn-Bar-RunicPower.tga | Bin 0 -> 4140 bytes ...me-Party-PortraitOn-Vehicle-Bar-Energy.blp | Bin 0 -> 2676 bytes ...ame-Party-PortraitOn-Vehicle-Bar-Focus.blp | Bin 0 -> 2676 bytes ...rty-PortraitOn-Vehicle-Bar-Health-Mask.blp | Bin 0 -> 3220 bytes ...me-Party-PortraitOn-Vehicle-Bar-Health.blp | Bin 0 -> 2676 bytes ...Party-PortraitOn-Vehicle-Bar-Mana-Mask.blp | Bin 0 -> 3220 bytes ...rty-PortraitOn-Vehicle-Bar-Mana-Status.blp | Bin 0 -> 2676 bytes ...rame-Party-PortraitOn-Vehicle-Bar-Mana.blp | Bin 0 -> 2676 bytes ...rame-Party-PortraitOn-Vehicle-Bar-Rage.blp | Bin 0 -> 2676 bytes ...arty-PortraitOn-Vehicle-Bar-RunicPower.blp | Bin 0 -> 2676 bytes ...me-Party-PortraitOn-Vehicle-Bar-Status.blp | Bin 0 -> 2676 bytes ...UnitFrame-Target-PortraitOn-BACKGROUND.blp | Bin 0 -> 44900 bytes ...HUD-UnitFrame-Target-PortraitOn-BORDER.blp | Bin 0 -> 44900 bytes .../DragonUI/Textures/Partyframe/energy.blp | Bin 0 -> 6676 bytes .../DragonUI/Textures/Partyframe/lfgrole.blp | Bin 0 -> 2596 bytes .../Partyframe/ui-group-masterlooter.blp | Bin 0 -> 1540 bytes .../Textures/Partyframe/uipartyframe.blp | Bin 0 -> 263316 bytes .../uiunitframeplayerportraitmask.blp | Bin 0 -> 5268 bytes .../PlayerFrame/ClassOverlayComboPoints.BLP | Bin 0 -> 9364 bytes .../ClassOverlayDeathKnightRunes.BLP | Bin 0 -> 17556 bytes .../Textures/PlayerFrame/LFGRoleIcons.blp | Bin 0 -> 3220 bytes .../PlayerFrame/PlayerRestFlipbook.blp | Bin 0 -> 350740 bytes .../Textures/TargetFrame/BossFrame.blp | Bin 0 -> 1049748 bytes .../Textures/TargetFrame/NameBackground.tga | Bin 0 -> 8236 bytes ...Player-PortraitOff-Bar-Health-Status32.blp | Bin 0 -> 6676 bytes ...UnitFrame-Player-PortraitOn-BACKGROUND.blp | Bin 0 -> 44900 bytes ...UnitFrame-Player-PortraitOn-BORDER-Fat.blp | Bin 0 -> 44900 bytes ...HUD-UnitFrame-Player-PortraitOn-BORDER.blp | Bin 0 -> 44900 bytes ...Frame-Target-PortraitOn-BACKGROUND-Fat.blp | Bin 0 -> 44900 bytes ...UnitFrame-Target-PortraitOn-BACKGROUND.blp | Bin 0 -> 44900 bytes ...UnitFrame-Target-PortraitOn-BORDER-Fat.blp | Bin 0 -> 44900 bytes ...HUD-UnitFrame-Target-PortraitOn-BORDER.blp | Bin 0 -> 44900 bytes ...e-TargetofTarget-PortraitOn-BACKGROUND.blp | Bin 0 -> 12132 bytes ...Frame-TargetofTarget-PortraitOn-BORDER.blp | Bin 0 -> 12132 bytes .../AddOns/DragonUI/Textures/UI/ActionBar.blp | Bin 0 -> 4195476 bytes .../Textures/UI/ActionBarHorizontal.blp | Bin 0 -> 4195476 bytes .../Textures/UI/ActionBarVertical.blp | Bin 0 -> 66708 bytes .../AddOns/DragonUI/Textures/UI/BagSlots.blp | Bin 0 -> 263316 bytes .../DragonUI/Textures/UI/BagSlotsKey.blp | Bin 0 -> 23060 bytes .../DragonUI/Textures/UI/CastingBar.blp | Bin 0 -> 175972 bytes .../DragonUI/Textures/UI/CollapseButton.blp | Bin 0 -> 6676 bytes .../DragonUI/Textures/UI/EditorGrid.blp | Bin 0 -> 2580 bytes .../DragonUI/Textures/UI/ExperienceBar.blp | Bin 0 -> 525460 bytes .../AddOns/DragonUI/Textures/UI/MicroMenu.blp | Bin 0 -> 350740 bytes .../AddOns/DragonUI/Textures/UI/Minimap.blp | Bin 0 -> 525460 bytes .../DragonUI/Textures/UI/QuestTracker.BLP | Bin 0 -> 2098324 bytes .../AddOns/DragonUI/Textures/UI/UnitFrame.blp | Bin 0 -> 700260 bytes .../Textures/UnitFrameLayers/Absorb-Edge.blp | Bin 0 -> 1556 bytes .../UnitFrameLayers/Absorb-Overabsorb.blp | Bin 0 -> 1892 bytes .../UnitFrameLayers/PlayerFrameFX.blp | Bin 0 -> 12132 bytes .../Textures/UnitFrameLayers/Shield-Fill.blp | Bin 0 -> 2580 bytes .../UnitFrameLayers/Shield-Overlay.blp | Bin 0 -> 2580 bytes .../UnitFrameLayers/Shield-Overshield.blp | Bin 0 -> 1892 bytes ...e-Player-PortraitOff-Bar-Health-Status.tga | Bin 0 -> 12306 bytes ...Player-PortraitOff-Bar-Health-Status32.blp | Bin 0 -> 6676 bytes ...nitFrame-Player-PortraitOff-Bar-Health.tga | Bin 0 -> 12306 bytes ...-UnitFrame-Player-PortraitOff-Bar-Mana.tga | Bin 0 -> 6162 bytes ...-UnitFrame-Player-PortraitOff-Bar-Rage.tga | Bin 0 -> 6162 bytes ...rame-Player-PortraitOff-Bar-RunicPower.tga | Bin 0 -> 6162 bytes ...UnitFrame-Player-PortraitOn-Bar-Energy.tga | Bin 0 -> 6162 bytes ...-UnitFrame-Player-PortraitOn-Bar-Focus.tga | Bin 0 -> 6162 bytes ...me-Player-PortraitOn-Bar-Health-Status.tga | Bin 0 -> 12306 bytes ...UnitFrame-Player-PortraitOn-Bar-Health.tga | Bin 0 -> 12306 bytes ...rame-Player-PortraitOn-Bar-Mana-Status.tga | Bin 0 -> 6162 bytes ...D-UnitFrame-Player-PortraitOn-Bar-Mana.tga | Bin 0 -> 6162 bytes ...D-UnitFrame-Player-PortraitOn-Bar-Rage.tga | Bin 0 -> 6162 bytes ...Frame-Player-PortraitOn-Bar-RunicPower.tga | Bin 0 -> 6162 bytes ...D-UnitFrame-Player-PortraitOn-InCombat.blp | Bin 0 -> 44900 bytes ...HUD-UnitFrame-Player-PortraitOn-Status.blp | Bin 0 -> 44900 bytes ...-MinusMob-PortraitOn-Bar-Health-Status.tga | Bin 0 -> 6162 bytes ...-Target-MinusMob-PortraitOn-Bar-Health.tga | Bin 0 -> 6162 bytes ...et-MinusMob-PortraitOn-Bar-Mana-Status.tga | Bin 0 -> 6162 bytes ...UnitFrame-Target-PortraitOn-Bar-Energy.blp | Bin 0 -> 3972 bytes ...UnitFrame-Target-PortraitOn-Bar-Energy.tga | Bin 0 -> 6162 bytes ...-UnitFrame-Target-PortraitOn-Bar-Focus.blp | Bin 0 -> 3972 bytes ...-UnitFrame-Target-PortraitOn-Bar-Focus.tga | Bin 0 -> 6162 bytes ...me-Target-PortraitOn-Bar-Health-Status.tga | Bin 0 -> 12306 bytes ...UnitFrame-Target-PortraitOn-Bar-Health.tga | Bin 0 -> 12306 bytes ...rame-Target-PortraitOn-Bar-Mana-Status.tga | Bin 0 -> 6162 bytes ...D-UnitFrame-Target-PortraitOn-Bar-Mana.blp | Bin 0 -> 3972 bytes ...D-UnitFrame-Target-PortraitOn-Bar-Mana.tga | Bin 0 -> 6162 bytes ...D-UnitFrame-Target-PortraitOn-Bar-Rage.blp | Bin 0 -> 3972 bytes ...D-UnitFrame-Target-PortraitOn-Bar-Rage.tga | Bin 0 -> 6162 bytes ...Frame-Target-PortraitOn-Bar-RunicPower.blp | Bin 0 -> 3972 bytes ...Frame-Target-PortraitOn-Bar-RunicPower.tga | Bin 0 -> 6162 bytes ...D-UnitFrame-Target-PortraitOn-InCombat.blp | Bin 0 -> 44900 bytes ...I-HUD-UnitFrame-Target-PortraitOn-Type.tga | Bin 0 -> 6162 bytes ...e-TargetofTarget-PortraitOn-Bar-Energy.tga | Bin 0 -> 8236 bytes ...me-TargetofTarget-PortraitOn-Bar-Focus.tga | Bin 0 -> 8236 bytes ...tofTarget-PortraitOn-Bar-Health-Status.tga | Bin 0 -> 8236 bytes ...e-TargetofTarget-PortraitOn-Bar-Health.tga | Bin 0 -> 8236 bytes ...getofTarget-PortraitOn-Bar-Mana-Status.tga | Bin 0 -> 8236 bytes ...ame-TargetofTarget-PortraitOn-Bar-Mana.tga | Bin 0 -> 8236 bytes ...ame-TargetofTarget-PortraitOn-Bar-Rage.tga | Bin 0 -> 8236 bytes ...rgetofTarget-PortraitOn-Bar-RunicPower.tga | Bin 0 -> 8236 bytes ...nitframe-target-portraiton-incombat-2x.blp | Bin 0 -> 175972 bytes .../AddOns/DragonUI/Textures/roleicons.blp | Bin 0 -> 3220 bytes .../DragonUI/Textures/tot-BACKGROUND.blp | Bin 0 -> 12132 bytes .../AddOns/DragonUI/Textures/tot-BORDER.blp | Bin 0 -> 12132 bytes .../DragonUI/Textures/ui-chaticon-hots.blp | Bin 0 -> 2564 bytes .../DragonUI/Textures/uicastingbar2x.blp | Bin 0 -> 2098324 bytes .../DragonUI/Textures/uiunitframe-fat.blp | Bin 0 -> 700260 bytes .../AddOns/DragonUI/Textures/uiunitframe.blp | Bin 0 -> 2098324 bytes .../DragonUI/Textures/uiunitframeboss2x.blp | Bin 0 -> 1049748 bytes .../Textures/uiunitframerestingflipbook.blp | Bin 0 -> 525460 bytes .../DragonUI/assets/INV_Misc_Bag_08.blp | Bin 0 -> 23060 bytes .../AddOns/DragonUI/assets/bagslotCutout.blp | Bin 0 -> 23060 bytes .../AddOns/DragonUI/assets/bagslots2key.tga | Bin 0 -> 66075 bytes .../AddOns/DragonUI/assets/bagslots2x.blp | Bin 0 -> 263316 bytes .../AddOns/DragonUI/assets/border_buttons.tga | Bin 0 -> 16923 bytes .../AddOns/DragonUI/assets/expressway.ttf | Bin 0 -> 119384 bytes .../AddOns/DragonUI/assets/gamemenu_btn.tga | Bin 0 -> 32786 bytes .../AddOns/DragonUI/assets/gryphon_flying.tga | 1 + .../AddOns/DragonUI/assets/gryphon_new.tga | 1 + .../AddOns/DragonUI/assets/gryphon_old.tga | 1 + .../AddOns/DragonUI/assets/mainmenubar.blp | Bin 0 -> 263316 bytes .../AddOns/DragonUI/assets/mechanical2.blp | Bin 0 -> 263316 bytes .../AddOns/DragonUI/assets/objecticons.tga | Bin 0 -> 262683 bytes .../AddOns/DragonUI/assets/poi-corpse.tga | Bin 0 -> 16923 bytes .../AddOns/DragonUI/assets/poi-guard.tga | Bin 0 -> 16923 bytes .../AddOns/DragonUI/assets/poi-player.tga | Bin 0 -> 16923 bytes .../AddOns/DragonUI/assets/poi-static.tga | Bin 0 -> 16923 bytes .../AddOns/DragonUI/assets/reputation/Rep.tga | Bin 0 -> 65580 bytes .../DragonUI/assets/reputation/RepBlue.tga | Bin 0 -> 65580 bytes .../DragonUI/assets/reputation/RepGreen.tga | Bin 0 -> 65580 bytes .../DragonUI/assets/reputation/RepOrange.tga | Bin 0 -> 65580 bytes .../DragonUI/assets/reputation/RepRed.tga | Bin 0 -> 65580 bytes .../DragonUI/assets/reputation/RepYellow.tga | Bin 0 -> 131116 bytes .../AddOns/DragonUI/assets/statusbarfill.tga | Bin 0 -> 33307 bytes .../assets/ui-mainmenubar-performancebar.blp | Bin 0 -> 2556 bytes .../AddOns/DragonUI/assets/uiactionbar.blp | Bin 0 -> 1049748 bytes .../AddOns/DragonUI/assets/uiactionbar2x.blp | Bin 0 -> 4195476 bytes .../AddOns/DragonUI/assets/uiactionbar2x_.blp | Bin 0 -> 4195476 bytes .../DragonUI/assets/uiactionbar2x_flying.blp | Bin 0 -> 2098324 bytes .../DragonUI/assets/uiactionbar2x_new.blp | Bin 0 -> 4195476 bytes .../assets/uiactionbarbackground2x.blp | Bin 0 -> 2196 bytes .../DragonUI/assets/uiactionbariconframe.tga | Bin 0 -> 16923 bytes .../assets/uiactionbariconframehighlight.tga | Bin 0 -> 16923 bytes .../DragonUI/assets/uiactionbarvertical.blp | Bin 0 -> 33940 bytes .../DragonUI/assets/uiactionbarvertical2x.blp | Bin 0 -> 66708 bytes .../DragonUI/assets/uibattlefieldicon.tga | Bin 0 -> 66075 bytes .../AddOns/DragonUI/assets/uicalendar.blp | Bin 0 -> 66708 bytes .../DragonUI/assets/uicollapsebutton.tga | Bin 0 -> 8731 bytes .../DragonUI/assets/uiexperiencebar.blp | Bin 0 -> 525460 bytes .../assets/uigroupfinderflipbookeye.tga | Bin 0 -> 524827 bytes .../AddOns/DragonUI/assets/uimicromenu.blp | Bin 0 -> 132244 bytes .../AddOns/DragonUI/assets/uimicromenu2x.blp | Bin 0 -> 525460 bytes .../AddOns/DragonUI/assets/uiminimap2x.blp | Bin 0 -> 525460 bytes .../DragonUI/assets/uiminimapborder.tga | Bin 0 -> 262683 bytes .../AddOns/DragonUI/assets/uiminimapmask.tga | Bin 0 -> 262683 bytes .../AddOns/DragonUI/assets/xp/Background.tga | Bin 0 -> 262188 bytes .../AddOns/DragonUI/assets/xp/Main.tga | Bin 0 -> 131116 bytes .../AddOns/DragonUI/assets/xp/Overlay.tga | Bin 0 -> 262188 bytes .../AddOns/DragonUI/assets/xp/Rested.tga | Bin 0 -> 131116 bytes .../DragonUI/assets/xp/RestedBackground.tga | Bin 0 -> 131116 bytes .../Interface/AddOns/DragonUI/config.lua | 139 + .../Interface/AddOns/DragonUI/core.lua | 156 + .../Interface/AddOns/DragonUI/core/api.lua | 1634 ++++++++ .../AddOns/DragonUI/core/commands.lua | 437 ++ .../Interface/AddOns/DragonUI/core/core.xml | 13 + .../Interface/AddOns/DragonUI/core/fonts.lua | 76 + .../AddOns/DragonUI/core/module_base.lua | 494 +++ .../Interface/AddOns/DragonUI/core/movers.lua | 499 +++ .../Interface/AddOns/DragonUI/database.lua | 716 ++++ .../AbsorbsMonitor-1.0/AbsorbsMonitor-1.0.lua | 2322 +++++++++++ .../AbsorbsMonitor-1.0/AbsorbsMonitor-1.0.xml | 4 + .../libs/AceAddon-3.0/AceAddon-3.0.lua | 642 +++ .../libs/AceAddon-3.0/AceAddon-3.0.xml | 4 + .../libs/AceBucket-3.0/AceBucket-3.0.lua | 293 ++ .../libs/AceBucket-3.0/AceBucket-3.0.xml | 4 + .../DragonUI/libs/AceComm-3.0/AceComm-3.0.lua | 309 ++ .../DragonUI/libs/AceComm-3.0/AceComm-3.0.xml | 5 + .../libs/AceComm-3.0/ChatThrottleLib.lua | 503 +++ .../libs/AceConsole-3.0/AceConsole-3.0.lua | 250 ++ .../libs/AceConsole-3.0/AceConsole-3.0.xml | 4 + .../DragonUI/libs/AceDB-3.0/AceDB-3.0.lua | 728 ++++ .../DragonUI/libs/AceDB-3.0/AceDB-3.0.xml | 4 + .../libs/AceEvent-3.0/AceEvent-3.0.lua | 126 + .../libs/AceEvent-3.0/AceEvent-3.0.xml | 4 + .../DragonUI/libs/AceHook-3.0/AceHook-3.0.lua | 514 +++ .../DragonUI/libs/AceHook-3.0/AceHook-3.0.xml | 4 + .../libs/AceLocale-3.0/AceLocale-3.0.lua | 136 + .../libs/AceLocale-3.0/AceLocale-3.0.xml | 4 + .../AceSerializer-3.0/AceSerializer-3.0.lua | 281 ++ .../AceSerializer-3.0/AceSerializer-3.0.xml | 4 + .../libs/AceTab-3.0/AceConfigTab-3.0.lua | 105 + .../DragonUI/libs/AceTab-3.0/AceTab-3.0.lua | 443 +++ .../DragonUI/libs/AceTab-3.0/AceTab-3.0.xml | 5 + .../libs/AceTimer-3.0/AceTimer-3.0.lua | 473 +++ .../libs/AceTimer-3.0/AceTimer-3.0.xml | 4 + .../CallbackHandler-1.0.lua | 240 ++ .../CallbackHandler-1.0.xml | 4 + .../DragonUI/libs/LibDeflate/LibDeflate.lua | 3536 +++++++++++++++++ .../libs/LibHealComm-4.0/ChatThrottleLib.lua | 503 +++ .../libs/LibHealComm-4.0/LibHealComm-4.0.lua | 2784 +++++++++++++ .../libs/LibHealComm-4.0/LibHealComm-4.0.xml | 5 + .../LibItemSearch-1.0/LibItemSearch-1.0.lua | 444 +++ .../libs/LibKeyBound-1.0/LibKeyBound-1.0.lua | 720 ++++ .../libs/LibKeyBound-1.0/Locale-deDE.lua | 87 + .../libs/LibKeyBound-1.0/Locale-enUS.lua | 161 + .../libs/LibKeyBound-1.0/Locale-esES.lua | 92 + .../libs/LibKeyBound-1.0/Locale-esMX.lua | 87 + .../libs/LibKeyBound-1.0/Locale-frFR.lua | 87 + .../libs/LibKeyBound-1.0/Locale-koKR.lua | 87 + .../libs/LibKeyBound-1.0/Locale-ruRU.lua | 87 + .../libs/LibKeyBound-1.0/Locale-zhCN.lua | 88 + .../libs/LibKeyBound-1.0/Locale-zhTW.lua | 87 + .../DragonUI/libs/LibKeyBound-1.0/lib.xml | 13 + .../AddOns/DragonUI/libs/LibStub/LibStub.lua | 30 + .../AddOns/DragonUI/modules/BuffFrame.lua | 731 ++++ .../modules/actionbars/actionbars.xml | 16 + .../DragonUI/modules/actionbars/multicast.lua | 588 +++ .../DragonUI/modules/actionbars/petbar.lua | 672 ++++ .../DragonUI/modules/actionbars/stance.lua | 756 ++++ .../DragonUI/modules/actionbars/vehicle.lua | 1317 ++++++ .../AddOns/DragonUI/modules/bagsort.lua | 1333 +++++++ .../AddOns/DragonUI/modules/buttons.lua | 838 ++++ .../AddOns/DragonUI/modules/castbar.lua | 2397 +++++++++++ .../AddOns/DragonUI/modules/chatmods.lua | 1173 ++++++ .../DragonUI/modules/combuctor/combuctor.lua | 2949 ++++++++++++++ .../DragonUI/modules/combuctor/combuctor.xml | 398 ++ .../AddOns/DragonUI/modules/compatibility.lua | 1401 +++++++ .../AddOns/DragonUI/modules/cooldowns.lua | 267 ++ .../AddOns/DragonUI/modules/darkmode.lua | 1132 ++++++ .../AddOns/DragonUI/modules/editor_mode.lua | 432 ++ .../AddOns/DragonUI/modules/gamemenu.lua | 466 +++ .../AddOns/DragonUI/modules/itemquality.lua | 667 ++++ .../AddOns/DragonUI/modules/keybinding.lua | 311 ++ .../AddOns/DragonUI/modules/lootroll.lua | 353 ++ .../AddOns/DragonUI/modules/mainbars.lua | 3093 ++++++++++++++ .../AddOns/DragonUI/modules/micromenu.lua | 2675 +++++++++++++ .../AddOns/DragonUI/modules/minimap.lua | 2508 ++++++++++++ .../AddOns/DragonUI/modules/modules.xml | 57 + .../AddOns/DragonUI/modules/noop.lua | 208 + .../AddOns/DragonUI/modules/questtracker.lua | 691 ++++ .../DragonUI/modules/rage_indicator.lua | 280 ++ .../AddOns/DragonUI/modules/tooltip.lua | 525 +++ .../DragonUI/modules/unitframes/boss.lua | 1244 ++++++ .../DragonUI/modules/unitframes/focus.lua | 221 ++ .../DragonUI/modules/unitframes/party.lua | 2294 +++++++++++ .../DragonUI/modules/unitframes/pet.lua | 742 ++++ .../DragonUI/modules/unitframes/player.lua | 2964 ++++++++++++++ .../modules/unitframes/small_frame.lua | 1048 +++++ .../DragonUI/modules/unitframes/target.lua | 462 +++ .../modules/unitframes/target_style.lua | 1227 ++++++ .../modules/unitframes/text_system.lua | 419 ++ .../DragonUI/modules/unitframes/tof.lua | 54 + .../DragonUI/modules/unitframes/tot.lua | 57 + .../DragonUI/modules/unitframes/uf_core.lua | 418 ++ .../modules/unitframes/uf_layers_deps.lua | 622 +++ .../modules/unitframes/unitframe_layers.lua | 919 +++++ .../modules/unitframes/unitframe_layers.xml | 219 + .../modules/unitframes/unitframes.xml | 32 + .../Interface/AddOns/DragonUI/utils/atlas.lua | 188 + .../AddOns/DragonUI/utils/atlas_backup.lua | 184 + .../Interface/AddOns/DragonUI/utils/core.lua | 206 + .../AddOns/DragonUI/utils/events.lua | 40 + .../AddOns/DragonUI/utils/formatting.lua | 56 + .../AddOns/DragonUI/utils/nineslice.lua | 196 + .../Interface/AddOns/DragonUI/utils/utils.xml | 287 ++ .../DragonUI_Options/DragonUI_Options.toc | 67 + .../DragonUI_Options/Locales/Load_Locales.xml | 18 + .../AddOns/DragonUI_Options/Locales/deDE.lua | 963 +++++ .../AddOns/DragonUI_Options/Locales/enUS.lua | 985 +++++ .../AddOns/DragonUI_Options/Locales/esES.lua | 963 +++++ .../AddOns/DragonUI_Options/Locales/esMX.lua | 963 +++++ .../AddOns/DragonUI_Options/Locales/frFR.lua | 94 + .../AddOns/DragonUI_Options/Locales/koKR.lua | 966 +++++ .../AddOns/DragonUI_Options/Locales/ptBR.lua | 92 + .../AddOns/DragonUI_Options/Locales/ruRU.lua | 963 +++++ .../AddOns/DragonUI_Options/Locales/zhCN.lua | 961 +++++ .../AddOns/DragonUI_Options/Locales/zhTW.lua | 963 +++++ .../AddOns/DragonUI_Options/actionbars.lua | 9 + .../AddOns/DragonUI_Options/castbars.lua | 9 + .../AddOns/DragonUI_Options/core.lua | 119 + .../DragonUI_Options/fonts/PTSansNarrow.ttf | Bin 0 -> 316044 bytes .../AddOns/DragonUI_Options/general.lua | 9 + .../libs/AceConfig-3.0/AceConfig-3.0.lua | 57 + .../libs/AceConfig-3.0/AceConfig-3.0.xml | 8 + .../AceConfigCmd-3.0/AceConfigCmd-3.0.lua | 787 ++++ .../AceConfigCmd-3.0/AceConfigCmd-3.0.xml | 4 + .../AceConfigDialog-3.0.lua | 1901 +++++++++ .../AceConfigDialog-3.0.xml | 4 + .../AceConfigRegistry-3.0.lua | 346 ++ .../AceConfigRegistry-3.0.xml | 4 + .../AceDBOptions-3.0/AceDBOptions-3.0.lua | 420 ++ .../AceDBOptions-3.0/AceDBOptions-3.0.xml | 4 + .../libs/AceGUI-3.0/AceGUI-3.0.lua | 805 ++++ .../libs/AceGUI-3.0/AceGUI-3.0.xml | 28 + .../AceGUIContainer-BlizOptionsGroup.lua | 133 + .../widgets/AceGUIContainer-DropDownGroup.lua | 157 + .../widgets/AceGUIContainer-Frame.lua | 298 ++ .../widgets/AceGUIContainer-InlineGroup.lua | 102 + .../widgets/AceGUIContainer-ScrollFrame.lua | 204 + .../widgets/AceGUIContainer-SimpleGroup.lua | 69 + .../widgets/AceGUIContainer-TabGroup.lua | 348 ++ .../widgets/AceGUIContainer-TreeGroup.lua | 670 ++++ .../widgets/AceGUIContainer-Window.lua | 331 ++ .../widgets/AceGUIWidget-Button.lua | 92 + .../widgets/AceGUIWidget-CheckBox.lua | 289 ++ .../widgets/AceGUIWidget-ColorPicker.lua | 186 + .../widgets/AceGUIWidget-DropDown-Items.lua | 465 +++ .../widgets/AceGUIWidget-DropDown.lua | 707 ++++ .../widgets/AceGUIWidget-EditBox.lua | 228 ++ .../widgets/AceGUIWidget-Heading.lua | 78 + .../AceGUI-3.0/widgets/AceGUIWidget-Icon.lua | 144 + .../widgets/AceGUIWidget-InteractiveLabel.lua | 101 + .../widgets/AceGUIWidget-Keybinding.lua | 230 ++ .../AceGUI-3.0/widgets/AceGUIWidget-Label.lua | 162 + .../widgets/AceGUIWidget-MultiLineEditBox.lua | 283 ++ .../widgets/AceGUIWidget-Slider.lua | 281 ++ .../CallbackHandler-1.0.lua | 240 ++ .../CallbackHandler-1.0.xml | 4 + .../DragonUI_Options/libs/LibStub/LibStub.lua | 30 + .../AddOns/DragonUI_Options/micromenu.lua | 9 + .../AddOns/DragonUI_Options/minimap.lua | 9 + .../AddOns/DragonUI_Options/modules.lua | 9 + .../AddOns/DragonUI_Options/options.xml | 58 + .../DragonUI_Options/panel/controls.lua | 785 ++++ .../AddOns/DragonUI_Options/panel/panel.lua | 532 +++ .../DragonUI_Options/panel/tab_actionbars.lua | 681 ++++ .../panel/tab_additionalbars.lua | 127 + .../DragonUI_Options/panel/tab_auras.lua | 95 + .../DragonUI_Options/panel/tab_bags.lua | 441 ++ .../DragonUI_Options/panel/tab_castbars.lua | 272 ++ .../DragonUI_Options/panel/tab_chat.lua | 152 + .../panel/tab_enhancements.lua | 311 ++ .../DragonUI_Options/panel/tab_general.lua | 601 +++ .../DragonUI_Options/panel/tab_micromenu.lua | 87 + .../DragonUI_Options/panel/tab_minimap.lua | 195 + .../DragonUI_Options/panel/tab_modules.lua | 254 ++ .../DragonUI_Options/panel/tab_profiles.lua | 199 + .../panel/tab_questtracker.lua | 53 + .../DragonUI_Options/panel/tab_unitframes.lua | 707 ++++ .../DragonUI_Options/panel/tab_xprepbars.lua | 137 + .../AddOns/DragonUI_Options/profiles.lua | 9 + .../AddOns/DragonUI_Options/questtracker.lua | 9 + .../AddOns/DragonUI_Options/unitframes.lua | 9 + .../Interface/GlueXML/AddonList.lua | 412 ++ 413 files changed, 93117 insertions(+) create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/AIO.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/AIO_Client.toc create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/Dep_LibWindow-1.1/Changelog-LibWindow-1.1-r12.txt create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/Dep_LibWindow-1.1/LibStub.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/Dep_LibWindow-1.1/LibWindow-1.1.toc create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/Dep_LibWindow-1.1/LibWindow-1.1/LibWindow-1.1.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/Dep_Smallfolk/LICENSE.md create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/Dep_Smallfolk/README.md create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/Dep_Smallfolk/smallfolk.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/lualzw-zeros/LICENSE create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/lualzw-zeros/README.md create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/lualzw-zeros/lualzw.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/queue.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Atlas.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/DragonUI.toc create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/DragonUI.xml create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Locales/Load_Locales.xml create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Locales/deDE.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Locales/enUS.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Locales/esES.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Locales/esMX.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Locales/frFR.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Locales/koKR.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Locales/ptBR.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Locales/ruRU.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Locales/zhCN.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Locales/zhTW.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/CastbarMask.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/CastbarNormal.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/CastbarNormal2.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/CastbarOriginal/CastingBarBackground2.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/CastbarOriginal/CastingBarChannel.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/CastbarOriginal/CastingBarFrame2.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/CastbarOriginal/CastingBarInterrupted2.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/CastbarOriginal/CastingBarMask.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/CastbarOriginal/CastingBarSpark.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/CastbarOriginal/CastingBarStandard2-channelfix.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/CastbarOriginal/CastingBarStandard2.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/CastbarOriginal/uicastingbar.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/CastbarOriginal/uicastingbar2x.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/CastbarOriginal/uicastingbarfx.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/CastbarOriginal/uicastingbarstandardflipbook.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/ClassIcons/DEATHKNIGHT.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/ClassIcons/DRUID.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/ClassIcons/HUNTER.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/ClassIcons/MAGE.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/ClassIcons/PALADIN.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/ClassIcons/PRIEST.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/ClassIcons/ROGUE.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/ClassIcons/SHAMAN.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/ClassIcons/WARLOCK.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/ClassIcons/WARRIOR.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Editmode/editmodeui.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Editmode/editmodeuihighlightbackground.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Editmode/editmodeuiselectedbackground.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Editmode/editmodeuivertical.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Editmode/ui-friendsframe-onlinedivider.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Micromenu/micropvp.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Micromenu/uimicromenu2x.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Micromenu/uimicromenuportraitmask2x.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Minimap/Calendar.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Minimap/EyeGroupFinderFlipbook.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Minimap/GuildBanner.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Minimap/MinimapBorder.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/MinimapBorder.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Partyframe/UI-HUD-UnitFrame-Party-PortraitOn-Bar-Energy.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Partyframe/UI-HUD-UnitFrame-Party-PortraitOn-Bar-Focus.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Partyframe/UI-HUD-UnitFrame-Party-PortraitOn-Bar-Health-Mask.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Partyframe/UI-HUD-UnitFrame-Party-PortraitOn-Bar-Health-Status.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Partyframe/UI-HUD-UnitFrame-Party-PortraitOn-Bar-Health.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Partyframe/UI-HUD-UnitFrame-Party-PortraitOn-Bar-Mana-Mask.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Partyframe/UI-HUD-UnitFrame-Party-PortraitOn-Bar-Mana-Status.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Partyframe/UI-HUD-UnitFrame-Party-PortraitOn-Bar-Mana.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Partyframe/UI-HUD-UnitFrame-Party-PortraitOn-Bar-Rage.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Partyframe/UI-HUD-UnitFrame-Party-PortraitOn-Bar-RunicPower.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Partyframe/UI-HUD-UnitFrame-Party-PortraitOn-Vehicle-Bar-Energy.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Partyframe/UI-HUD-UnitFrame-Party-PortraitOn-Vehicle-Bar-Focus.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Partyframe/UI-HUD-UnitFrame-Party-PortraitOn-Vehicle-Bar-Health-Mask.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Partyframe/UI-HUD-UnitFrame-Party-PortraitOn-Vehicle-Bar-Health.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Partyframe/UI-HUD-UnitFrame-Party-PortraitOn-Vehicle-Bar-Mana-Mask.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Partyframe/UI-HUD-UnitFrame-Party-PortraitOn-Vehicle-Bar-Mana-Status.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Partyframe/UI-HUD-UnitFrame-Party-PortraitOn-Vehicle-Bar-Mana.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Partyframe/UI-HUD-UnitFrame-Party-PortraitOn-Vehicle-Bar-Rage.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Partyframe/UI-HUD-UnitFrame-Party-PortraitOn-Vehicle-Bar-RunicPower.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Partyframe/UI-HUD-UnitFrame-Party-PortraitOn-Vehicle-Bar-Status.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Partyframe/UI-HUD-UnitFrame-Target-PortraitOn-BACKGROUND.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Partyframe/UI-HUD-UnitFrame-Target-PortraitOn-BORDER.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Partyframe/energy.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Partyframe/lfgrole.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Partyframe/ui-group-masterlooter.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Partyframe/uipartyframe.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Partyframe/uiunitframeplayerportraitmask.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/PlayerFrame/ClassOverlayComboPoints.BLP create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/PlayerFrame/ClassOverlayDeathKnightRunes.BLP create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/PlayerFrame/LFGRoleIcons.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/PlayerFrame/PlayerRestFlipbook.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/TargetFrame/BossFrame.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/TargetFrame/NameBackground.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/UI-HUD-UnitFrame-Player-PortraitOff-Bar-Health-Status32.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/UI-HUD-UnitFrame-Player-PortraitOn-BACKGROUND.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/UI-HUD-UnitFrame-Player-PortraitOn-BORDER-Fat.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/UI-HUD-UnitFrame-Player-PortraitOn-BORDER.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/UI-HUD-UnitFrame-Target-PortraitOn-BACKGROUND-Fat.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/UI-HUD-UnitFrame-Target-PortraitOn-BACKGROUND.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/UI-HUD-UnitFrame-Target-PortraitOn-BORDER-Fat.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/UI-HUD-UnitFrame-Target-PortraitOn-BORDER.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/UI-HUD-UnitFrame-TargetofTarget-PortraitOn-BACKGROUND.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/UI-HUD-UnitFrame-TargetofTarget-PortraitOn-BORDER.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/UI/ActionBar.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/UI/ActionBarHorizontal.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/UI/ActionBarVertical.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/UI/BagSlots.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/UI/BagSlotsKey.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/UI/CastingBar.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/UI/CollapseButton.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/UI/EditorGrid.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/UI/ExperienceBar.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/UI/MicroMenu.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/UI/Minimap.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/UI/QuestTracker.BLP create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/UI/UnitFrame.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/UnitFrameLayers/Absorb-Edge.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/UnitFrameLayers/Absorb-Overabsorb.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/UnitFrameLayers/PlayerFrameFX.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/UnitFrameLayers/Shield-Fill.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/UnitFrameLayers/Shield-Overlay.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/UnitFrameLayers/Shield-Overshield.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-Player-PortraitOff-Bar-Health-Status.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-Player-PortraitOff-Bar-Health-Status32.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-Player-PortraitOff-Bar-Health.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-Player-PortraitOff-Bar-Mana.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-Player-PortraitOff-Bar-Rage.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-Player-PortraitOff-Bar-RunicPower.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-Player-PortraitOn-Bar-Energy.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-Player-PortraitOn-Bar-Focus.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-Player-PortraitOn-Bar-Health-Status.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-Player-PortraitOn-Bar-Health.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-Player-PortraitOn-Bar-Mana-Status.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-Player-PortraitOn-Bar-Mana.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-Player-PortraitOn-Bar-Rage.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-Player-PortraitOn-Bar-RunicPower.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-Player-PortraitOn-InCombat.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-Player-PortraitOn-Status.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-Target-MinusMob-PortraitOn-Bar-Health-Status.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-Target-MinusMob-PortraitOn-Bar-Health.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-Target-MinusMob-PortraitOn-Bar-Mana-Status.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-Target-PortraitOn-Bar-Energy.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-Target-PortraitOn-Bar-Energy.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-Target-PortraitOn-Bar-Focus.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-Target-PortraitOn-Bar-Focus.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-Target-PortraitOn-Bar-Health-Status.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-Target-PortraitOn-Bar-Health.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-Target-PortraitOn-Bar-Mana-Status.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-Target-PortraitOn-Bar-Mana.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-Target-PortraitOn-Bar-Mana.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-Target-PortraitOn-Bar-Rage.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-Target-PortraitOn-Bar-Rage.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-Target-PortraitOn-Bar-RunicPower.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-Target-PortraitOn-Bar-RunicPower.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-Target-PortraitOn-InCombat.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-Target-PortraitOn-Type.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-TargetofTarget-PortraitOn-Bar-Energy.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-TargetofTarget-PortraitOn-Bar-Focus.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-TargetofTarget-PortraitOn-Bar-Health-Status.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-TargetofTarget-PortraitOn-Bar-Health.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-TargetofTarget-PortraitOn-Bar-Mana-Status.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-TargetofTarget-PortraitOn-Bar-Mana.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-TargetofTarget-PortraitOn-Bar-Rage.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe/UI-HUD-UnitFrame-TargetofTarget-PortraitOn-Bar-RunicPower.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/Unitframe2x/ui-hud-unitframe-target-portraiton-incombat-2x.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/roleicons.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/tot-BACKGROUND.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/tot-BORDER.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/ui-chaticon-hots.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/uicastingbar2x.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/uiunitframe-fat.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/uiunitframe.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/uiunitframeboss2x.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Textures/uiunitframerestingflipbook.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/INV_Misc_Bag_08.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/bagslotCutout.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/bagslots2key.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/bagslots2x.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/border_buttons.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/expressway.ttf create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/gamemenu_btn.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/gryphon_flying.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/gryphon_new.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/gryphon_old.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/mainmenubar.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/mechanical2.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/objecticons.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/poi-corpse.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/poi-guard.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/poi-player.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/poi-static.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/reputation/Rep.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/reputation/RepBlue.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/reputation/RepGreen.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/reputation/RepOrange.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/reputation/RepRed.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/reputation/RepYellow.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/statusbarfill.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/ui-mainmenubar-performancebar.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/uiactionbar.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/uiactionbar2x.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/uiactionbar2x_.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/uiactionbar2x_flying.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/uiactionbar2x_new.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/uiactionbarbackground2x.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/uiactionbariconframe.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/uiactionbariconframehighlight.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/uiactionbarvertical.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/uiactionbarvertical2x.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/uibattlefieldicon.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/uicalendar.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/uicollapsebutton.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/uiexperiencebar.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/uigroupfinderflipbookeye.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/uimicromenu.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/uimicromenu2x.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/uiminimap2x.blp create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/uiminimapborder.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/uiminimapmask.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/xp/Background.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/xp/Main.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/xp/Overlay.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/xp/Rested.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/assets/xp/RestedBackground.tga create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/config.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/core.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/core/api.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/core/commands.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/core/core.xml create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/core/fonts.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/core/module_base.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/core/movers.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/database.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/AbsorbsMonitor-1.0/AbsorbsMonitor-1.0.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/AbsorbsMonitor-1.0/AbsorbsMonitor-1.0.xml create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/AceAddon-3.0/AceAddon-3.0.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/AceAddon-3.0/AceAddon-3.0.xml create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/AceBucket-3.0/AceBucket-3.0.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/AceBucket-3.0/AceBucket-3.0.xml create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/AceComm-3.0/AceComm-3.0.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/AceComm-3.0/AceComm-3.0.xml create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/AceComm-3.0/ChatThrottleLib.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/AceConsole-3.0/AceConsole-3.0.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/AceConsole-3.0/AceConsole-3.0.xml create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/AceDB-3.0/AceDB-3.0.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/AceDB-3.0/AceDB-3.0.xml create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/AceEvent-3.0/AceEvent-3.0.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/AceEvent-3.0/AceEvent-3.0.xml create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/AceHook-3.0/AceHook-3.0.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/AceHook-3.0/AceHook-3.0.xml create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/AceLocale-3.0/AceLocale-3.0.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/AceLocale-3.0/AceLocale-3.0.xml create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/AceSerializer-3.0/AceSerializer-3.0.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/AceSerializer-3.0/AceSerializer-3.0.xml create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/AceTab-3.0/AceConfigTab-3.0.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/AceTab-3.0/AceTab-3.0.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/AceTab-3.0/AceTab-3.0.xml create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/AceTimer-3.0/AceTimer-3.0.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/AceTimer-3.0/AceTimer-3.0.xml create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/CallbackHandler-1.0/CallbackHandler-1.0.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/CallbackHandler-1.0/CallbackHandler-1.0.xml create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/LibDeflate/LibDeflate.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/LibHealComm-4.0/ChatThrottleLib.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/LibHealComm-4.0/LibHealComm-4.0.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/LibHealComm-4.0/LibHealComm-4.0.xml create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/LibItemSearch-1.0/LibItemSearch-1.0.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/LibKeyBound-1.0/LibKeyBound-1.0.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/LibKeyBound-1.0/Locale-deDE.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/LibKeyBound-1.0/Locale-enUS.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/LibKeyBound-1.0/Locale-esES.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/LibKeyBound-1.0/Locale-esMX.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/LibKeyBound-1.0/Locale-frFR.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/LibKeyBound-1.0/Locale-koKR.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/LibKeyBound-1.0/Locale-ruRU.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/LibKeyBound-1.0/Locale-zhCN.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/LibKeyBound-1.0/Locale-zhTW.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/LibKeyBound-1.0/lib.xml create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/libs/LibStub/LibStub.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/BuffFrame.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/actionbars/actionbars.xml create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/actionbars/multicast.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/actionbars/petbar.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/actionbars/stance.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/actionbars/vehicle.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/bagsort.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/buttons.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/castbar.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/chatmods.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/combuctor/combuctor.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/combuctor/combuctor.xml create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/compatibility.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/cooldowns.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/darkmode.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/editor_mode.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/gamemenu.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/itemquality.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/keybinding.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/lootroll.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/mainbars.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/micromenu.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/minimap.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/modules.xml create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/noop.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/questtracker.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/rage_indicator.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/tooltip.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/unitframes/boss.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/unitframes/focus.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/unitframes/party.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/unitframes/pet.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/unitframes/player.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/unitframes/small_frame.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/unitframes/target.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/unitframes/target_style.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/unitframes/text_system.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/unitframes/tof.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/unitframes/tot.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/unitframes/uf_core.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/unitframes/uf_layers_deps.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/unitframes/unitframe_layers.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/unitframes/unitframe_layers.xml create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/modules/unitframes/unitframes.xml create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/utils/atlas.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/utils/atlas_backup.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/utils/core.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/utils/events.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/utils/formatting.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/utils/nineslice.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/utils/utils.xml create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/DragonUI_Options.toc create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/Locales/Load_Locales.xml create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/Locales/deDE.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/Locales/enUS.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/Locales/esES.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/Locales/esMX.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/Locales/frFR.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/Locales/koKR.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/Locales/ptBR.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/Locales/ruRU.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/Locales/zhCN.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/Locales/zhTW.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/actionbars.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/castbars.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/core.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/fonts/PTSansNarrow.ttf create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/general.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/libs/AceConfig-3.0/AceConfig-3.0.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/libs/AceConfig-3.0/AceConfig-3.0.xml create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/libs/AceConfig-3.0/AceConfigCmd-3.0/AceConfigCmd-3.0.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/libs/AceConfig-3.0/AceConfigCmd-3.0/AceConfigCmd-3.0.xml create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/libs/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/libs/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.xml create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/libs/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/libs/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.xml create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/libs/AceDBOptions-3.0/AceDBOptions-3.0.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/libs/AceDBOptions-3.0/AceDBOptions-3.0.xml create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/libs/AceGUI-3.0/AceGUI-3.0.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/libs/AceGUI-3.0/AceGUI-3.0.xml create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/libs/AceGUI-3.0/widgets/AceGUIContainer-BlizOptionsGroup.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/libs/AceGUI-3.0/widgets/AceGUIContainer-DropDownGroup.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/libs/AceGUI-3.0/widgets/AceGUIContainer-Frame.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/libs/AceGUI-3.0/widgets/AceGUIContainer-InlineGroup.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/libs/AceGUI-3.0/widgets/AceGUIContainer-ScrollFrame.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/libs/AceGUI-3.0/widgets/AceGUIContainer-SimpleGroup.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/libs/AceGUI-3.0/widgets/AceGUIContainer-TabGroup.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/libs/AceGUI-3.0/widgets/AceGUIContainer-TreeGroup.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/libs/AceGUI-3.0/widgets/AceGUIContainer-Window.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/libs/AceGUI-3.0/widgets/AceGUIWidget-Button.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/libs/AceGUI-3.0/widgets/AceGUIWidget-CheckBox.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/libs/AceGUI-3.0/widgets/AceGUIWidget-ColorPicker.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown-Items.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/libs/AceGUI-3.0/widgets/AceGUIWidget-EditBox.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/libs/AceGUI-3.0/widgets/AceGUIWidget-Heading.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/libs/AceGUI-3.0/widgets/AceGUIWidget-Icon.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/libs/AceGUI-3.0/widgets/AceGUIWidget-InteractiveLabel.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/libs/AceGUI-3.0/widgets/AceGUIWidget-Keybinding.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/libs/AceGUI-3.0/widgets/AceGUIWidget-Label.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/libs/AceGUI-3.0/widgets/AceGUIWidget-MultiLineEditBox.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/libs/AceGUI-3.0/widgets/AceGUIWidget-Slider.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/libs/CallbackHandler-1.0/CallbackHandler-1.0.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/libs/CallbackHandler-1.0/CallbackHandler-1.0.xml create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/libs/LibStub/LibStub.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/micromenu.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/minimap.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/modules.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/options.xml create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/panel/controls.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/panel/panel.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/panel/tab_actionbars.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/panel/tab_additionalbars.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/panel/tab_auras.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/panel/tab_bags.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/panel/tab_castbars.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/panel/tab_chat.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/panel/tab_enhancements.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/panel/tab_general.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/panel/tab_micromenu.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/panel/tab_minimap.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/panel/tab_modules.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/panel/tab_profiles.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/panel/tab_questtracker.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/panel/tab_unitframes.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/panel/tab_xprepbars.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/profiles.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/questtracker.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI_Options/unitframes.lua create mode 100644 src/Data/ruRU/patch-ruRU-5/Interface/GlueXML/AddonList.lua diff --git a/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/AIO.lua b/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/AIO.lua new file mode 100644 index 0000000..ba283b3 --- /dev/null +++ b/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/AIO.lua @@ -0,0 +1,1313 @@ +--[[ + Copyright (C) 2014- Rochet2 + + This program is free software you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +]] + +--[=[ +-- #API +-- For example scripts see the Examples folder. The example files are named according to their final execution location. To run the examples place all of their files to `server_root/lua_scripts/`. + +-- AIO is required this way due to server and client differences with require function +local AIO = AIO or require("AIO") + +-- Returns true if we are on server side, false if we are on client side +isServer = AIO.IsServer() + +-- Returns true if we are on main state, true if we are on client side +isMainState = AIO.IsMainState() + +-- Returns AIO version - note the type is not guaranteed to be a number +version = AIO.GetVersion() + +-- Adds the file at given path to files to send to players if called on server side in main state. +-- The addon code is trimmed according to settings in AIO.lua. +-- The addon is cached on client side and will be updated only when needed. +-- Returns false on client side and true on server side. By default the +-- path is the current file's path and name is the file's name +-- 'path' is relative to worldserver.exe but an absolute path can also be given. +-- You should call this function only on startup to ensure everyone gets the same +-- addons and no addon is duplicate. +added = AIO.AddAddon([path, name]) +-- The way this is designed to be used is at the top of an addon file so that the +-- file is added and not run if we are on server, and just run if we are on client: +if AIO.AddAddon() then + return +end + +-- Similar to AddAddon - Adds 'code' to the addons sent to players. The code is trimmed +-- according to settings in AIO.lua. The addon is cached on client side and will +-- be updated only when needed. 'name' is an unique name for the addon, usually +-- you can use the file name or addon name there. Do note that short names are +-- better since they are sent back and forth to indentify files. +-- The function only exists on server side. Only on main lua state. +-- You should call this function only on startup to ensure everyone gets the same +-- addons and no addon is duplicate. +AIO.AddAddonCode(name, code) + +-- Triggers the handler function that has the name 'handlername' from the handlertable +-- added with AIO.AddHandlers(name, handlertable) for the 'name'. +-- Can also trigger a function registered with AIO.RegisterEvent(name, func) +-- All triggered handlers have parameters handler(player, ...) where varargs are +-- the varargs in AIO.Handle or msg.Add +-- This function is a shorthand for AIO.Msg():Add(name, handlername, ...):Send() +-- For efficiency favour creating messages once and sending them rather than creating +-- them over and over with AIO.Handle(). +-- The server side version. +AIO.Handle(player, name, handlername[, ...]) +-- The client side version. +AIO.Handle(name, handlername[, ...]) + +-- Only on main lua state. +-- Adds a table of handler functions for the specified 'name'. When a message like: +-- AIO.Handle(name, "HandlerName", ...) is received, the handlertable["HandlerName"] +-- will be called with player and varargs as parameters. +-- Returns the passed 'handlertable'. +-- AIO.AddHandlers uses AIO.RegisterEvent internally, so same name can not be used on both. +handlertable = AIO.AddHandlers(name, handlertable) + +-- Only on main lua state. +-- Adds a new callback function that is called if a message with the given +-- name is recieved. All parameters the sender sends in the message will +-- be passed to func when called. +-- Example message: AIO.Msg():Add(name, ...):Send() +-- AIO.AddHandlers uses AIO.RegisterEvent internally, so same name can not be used on both. +AIO.RegisterEvent(name, func) + +-- Adds a new function that is called when the initial message is sent to the player. +-- The function is called before sending and the initial message is passed to it +-- along with the player if available: func(msg[, player]) +-- In the function you can modify the passed msg and/or return a new one to be +-- used as initial message. Only on server side. Only on main lua state. +-- This can be used to send for example initial values (like player stats) for the addons. +-- If dynamic loading is preferred, you can use the messaging API to request the values +-- on demand also. +AIO.AddOnInit(func) + +-- Key is a key for a variable in the global table _G. +-- The variable is stored when the player logs out and will be restored +-- when he logs back in before the addon codes are run. +-- These variables are account bound. +-- Only exists on client side and you should call it only once per key. +-- All saved data is saved to client side. +AIO.AddSavedVar(key) + +-- Key is a key for a variable in the global table _G. +-- The variable is stored when the player logs out and will be restored +-- when he logs back in before the addon codes are run. +-- These variables are character bound. +-- Only exists on client side and you should call it only once per key. +-- All saved data is saved to client side. +AIO.AddSavedVarChar(key) + +-- Makes the addon frame save it's position and restore it on login. +-- If char is true, the position saving is character bound, otherwise account bound. +-- Only exists on client side and you should call it only once per frame. +-- All saved data is saved to client side. +AIO.SavePosition(frame[, char]) + +-- AIO message class: +-- Creates and returns a new AIO message that you can append stuff to and send to +-- client or server. Example: AIO.Msg():Add("MyHandlerName", param1, param2):Send(player) +-- These messages handle all client-server communication. +msg = AIO.Msg() + +-- The name is used to identify the handler function on receiving end. +-- A handler function registered with AIO.RegisterEvent(name, func) +-- will be called on receiving end with the varargs. +function msgmt:Add(name, ...) + +-- Appends messages to eachother, returns self +msg = msg:Append(msg2) + +-- Sends the message, returns self +-- Server side version - sends to all players passed +msg = msg:Send(player, ...) +-- Client side version - sends to server +msg = msg:Send() + +-- Returns true if the message has something in it +hasmsg = msg:HasMsg() + +-- Returns the message as a string +msgstr = msg:ToString() + +-- Erases the so far built message and returns self +msg = msg:Clear() + +-- Assembles the message string from added and appended data. Mainly for internal use. +-- Returns self +msg = msg:Assemble() +]=] + +-- Try to avoid multiple versions of AIO +assert(not AIO, "AIO is already loaded. Possibly different versions!") + +---------------------------------- +-- Server-Client messaging config: +---------------------------------- + +-- When developing an addon it is advised to set AIO_ENABLE_PCALL false and AIO_CODE_OBFUSCATE to false +-- Or alternatively set AIO_ENABLE_PCALL true, AIO_ENABLE_TRACEBACK to true and AIO_CODE_OBFUSCATE to false +-- The defaults are recommended for normal use + +-- Enables some additional prints for debugging +local AIO_ENABLE_DEBUG_MSGS = false -- default false + +-- Enables pcall to silence errors and continue running normally when an error occurs +-- If AIO_ENABLE_PCALL is true, errors are printed and running is continued +-- If AIO_ENABLE_PCALL is false, pcall is not used and errors occur normally +-- Erroring out can be useful for debugging scripts +local AIO_ENABLE_PCALL = true -- default true + +-- Enables using debug.traceback as the error handler to help locating errors +-- on server side. Make sure you have default Eluna extensions in place. +-- On client side uses _ERRORMESSAGE function to output errors with trace. +-- Requires AIO_ENABLE_PCALL to be true +local AIO_ENABLE_TRACEBACK = false -- default false + +-- prints all messages +local AIO_ENABLE_MSGPRINT = false -- default false + +-- Max VM instructions to do before timeout +-- Attempts to avoid server freeze on bad code and or user +-- Use 0 to disable timeout +-- Server side only +local AIO_TIMEOUT_INSTRUCTIONCOUNT = 1e8 -- default 1e8 + +-- Amount of data to store per character at maximum +-- Attempts to avoid consuming ram +-- Server side only +local AIO_MSG_CACHE_SPACE = 5e5 -- bytes -- default 5e5 + +-- Time to wait for a message to arrive +-- Attempts to avoid consuming ram and storing incomplete messages +local AIO_MSG_CACHE_TIME = 15*1000 -- ms -- default 15*1000 + +-- Delay between checking for outdated messages +local AIO_MSG_CACHE_DELAY = 5*1000 -- ms -- default 5*1000 + +-- Delay between possible sending of full addon code +-- User can potentially request the full addon list repeatedly +-- this limits the ability to do that (avoid lagging from bad user) +-- Server side only +local AIO_UI_INIT_DELAY = 5*1000 -- ms -- default 5*1000 + +-- Setting to enable and disable LZW compressing for addons +-- Server side only +local AIO_MSG_COMPRESS = true -- default true + +-- Setting to enable and disable obfuscation for code to reduce size +-- Note that error messages will not have correct line numbers since obfuscation rearranage the code +-- for debugging purposes it is recommended to disable this option +-- Server side only +local AIO_CODE_OBFUSCATE = true -- default true + +-- Setting to send client errors to server +-- Client must have AIO_ENABLE_PCALL enabled +-- Client side only +local AIO_ERROR_LOG = false -- default false + +---------------------------------- + +---------------------------------- + +local assert = assert +local type = type +local tostring = tostring +local pairs = pairs +local ipairs = ipairs +local ssub = string.sub +local match = string.match +local ceil = ceil or math.ceil +local floor = floor or math.floor +local sbyte = strbyte or string.byte +local schar = string.char +local tconcat = table.concat +local select = select +local pcall = pcall +local xpcall = xpcall +-- Some lua compatibility between 5.1 and 5.2 +local loadstring = loadstring or load -- loadstring name varies with lua 5.1 and 5.2 +local unpack = unpack or table.unpack -- unpack place varies with lua 5.1 and 5.2 +-- server client compatibility +local AIO_GetTime = os and os.time or function() return GetTime()*1000 end +local AIO_GetTimeDiff = os and os.difftime or function(_now, _then) return _now-_then end + +-- boolean value to define whether we are on server or client side +local AIO_SERVER = type(GetLuaEngine) == "function" +-- boolean value to define if we are on main lua state (eluna multistate support) +local AIO_MAIN_LUA_STATE = not AIO_SERVER or not GetStateMapId or GetStateMapId() == -1 +-- Client must have same version (basically same AIO file) +local AIO_VERSION = 1.75 +-- ID characters for client-server messaging +local AIO_ShortMsg = schar(1)..schar(1) +local AIO_Compressed = 'C' +local AIO_Uncompressed = 'U' +local AIO_Prefix = "AIO" +AIO_Prefix = ssub((AIO_Prefix), 1, 16) -- shorten to max allowed +local AIO_ServerPrefix = ssub(("S"..AIO_Prefix), 1, 16) +local AIO_ClientPrefix = ssub(("C"..AIO_Prefix), 1, 16) +assert(#AIO_ServerPrefix == #AIO_ClientPrefix) +-- Client can send only 255 max size messages, but server can send more +-- on different patches the limit varies, on 3.3.5 it is exactly 3004 and on cataclysm 2^23 +-- thus we use 2560 that is about 10 times more data and below both max values. Too high value can crash client. +-- Change if you need to :) +local AIO_MsgLen = (AIO_SERVER and 2560 or 255) -1 -#AIO_ServerPrefix -#AIO_ShortMsg -- remove \t, prefix, msg ID +local MSG_MIN = 1 +local MSG_MAX = 2^16-767 + +-- AIO main table +AIO = +{ + -- AIO flavour functions + unpack = unpack, +} + +local AIO = AIO +-- Client side table containing frames that need to have their position saved +local AIO_SAVEDFRAMES = {} +-- Client side tables that contain keys to _G table for saved variables +-- you should add your variables here with AIO.AddSavedVar(key) or AIO.AddSavedVarChar(key) +local AIO_SAVEDVARS = {} +local AIO_SAVEDVARSCHAR = {} +-- Client side flag for noting if the client has been inited or not +local AIO_INITED = false +-- Server and Client side functions to execute on AIO messages +local AIO_HANDLERS = AIO_MAIN_LUA_STATE and {} or nil +-- Server side functions to execute when an init msg is received +local AIO_INITHOOKS = AIO_MAIN_LUA_STATE and {} or nil +-- Server and Client side custom coded handlers for incoming data +local AIO_BLOCKHANDLES = AIO_MAIN_LUA_STATE and {} or nil +-- A server side table for correct order of addons to send +-- you should add all addon code here with AIO.AddAddon +local AIO_ADDONSORDER = AIO_MAIN_LUA_STATE and {} or nil + +-- Dependencies +local LibWindow +local LuaSrcDiet +local NewQueue = NewQueue or require("queue") +local Smallfolk = Smallfolk or require("smallfolk") +local lualzw = lualzw or require("lualzw") +if AIO_SERVER then + if AIO_MAIN_LUA_STATE then + LuaSrcDiet = require("LuaSrcDiet") + end +else + LibWindow = LibStub("LibWindow-1.1") +end + +-- Returns true if we are on server +function AIO.IsServer() + return AIO_SERVER +end + +-- Returns true if we are on client, returns true if we are on main state on server and false otherwise +function AIO.IsMainState() + return AIO_MAIN_LUA_STATE +end + +-- Returns AIO version - note the type is not guaranteed to be a number +function AIO.GetVersion() + return AIO_VERSION +end + +-- Converts an uint16 number to string (2 chars) +-- Note that this escapes using \0 character so the full uint16 range is not usable +local function AIO_16tostring(uint16) + -- split 16bit to 2 8bit parts but without \0 + assert(uint16 <= 2^16-767, "Too high value") + assert(uint16 >= 0, "Negative value") + local high = floor(uint16 / 254) + local l = high +1 + local r = uint16 - high * 254 +1 + return schar(l)..schar(r) +end + +-- Converts a string (2 chars) to uint16 number +-- Note that the chars can not be \0 character so the full uint16 range is not usable +local function AIO_stringto16(str) + local l = sbyte(ssub(str, 1,1)) -1 + local r = sbyte(ssub(str, 2,2)) -1 + local val = l*254 + r + assert(val <= 2^16-767, "Too high value") + assert(val >= 0, "Negative value") + return val +end + +-- Resets AIO saved variables on client side +local AIO_RESET +if not AIO_SERVER then + function AIO_RESET() + AIO_SAVEDVARS = nil + AIO_SAVEDVARSCHAR = nil + AIO_sv_Addons = nil + AIO_SAVEDFRAMES = {} + end +end + +-- Used to print debug messages if AIO_ENABLE_DEBUG_MSGS is true +function AIO_debug(...) + if AIO_ENABLE_DEBUG_MSGS then + print("AIO:", ...) + end +end + +-- returns the amount of varargs from passed varargs +local function AIO_extractN(...) + return select("#", ...), ... +end + +-- Calls function f with parameters ... with pcall +-- Shows errors with print or AIO_debug +local function AIO_pcall(f, ...) + assert(type(f) == 'function') + if not AIO_ENABLE_PCALL then + return f(...) + end + local data + if AIO_SERVER and AIO_ENABLE_TRACEBACK and debug.traceback then + data = {AIO_extractN(xpcall(f, debug.traceback, ...))} + else + data = {AIO_extractN(pcall(f, ...))} + end + if not data[2] then + if AIO_SERVER then + AIO_debug(data[3]) + else + if AIO_ERROR_LOG then + AIO.Handle("AIO", "Error", data[3]) + end + if AIO_ENABLE_TRACEBACK then + _ERRORMESSAGE(data[3]) + else + print(data[3]) + end + end + return + end + return unpack(data, 3, data[1]+1) +end + +-- Reads a file at given absolute or relative to server root path +-- and returns the full file contents as a string +local function AIO_ReadFile(path) + AIO_debug("Reading a file") + assert(type(path) == 'string', "#1 string expected") + local f = assert(io.open(path, "rb")) + local str = f:read("*all") + f:close() + return str +end + +-- player data handler +local plrdata = {} +local removeque = NewQueue() +local function RemoveData(guid, msgid) + local pdata = plrdata[guid] + if pdata then + if msgid then + local data = pdata[msgid] + if data then + pdata[msgid] = nil + pdata.ramque:gettable()[data.ramquepos] = nil + removeque:gettable()[data.remquepos] = nil + end + else + local que = pdata.ramque:gettable() + local l, r = pdata.ramque:getrange() + for i = l, r do + if que[i] then + removeque:gettable()[que[i].remquepos] = nil + end + end + plrdata[guid] = nil + end + end +end +local function ProcessRemoveQue() + if removeque:empty() then + return + end + local now = AIO_GetTime() + local l, r = removeque:getrange() + for i = l, r do + local v = removeque:popleft() + if v then + if AIO_GetTimeDiff(now, v.stamp) < AIO_MSG_CACHE_TIME then + AIO_debug("removing outdated incomplete message") + removeque:pushleft(v) + break + end + RemoveData(v.guid, v.id) + end + end +end +if AIO_SERVER then + if AIO_MAIN_LUA_STATE then + CreateLuaEvent(ProcessRemoveQue, AIO_MSG_CACHE_DELAY, 0) + end +else + local frame = CreateFrame("Frame") + local timer = AIO_MSG_CACHE_DELAY + local function ONUPDATE(self, diff) + if timer > diff then + timer = timer - diff + else + ProcessRemoveQue() + timer = AIO_MSG_CACHE_DELAY + end + end + frame:SetScript("OnUpdate", ONUPDATE) +end +-- Erase data on logout +if AIO_SERVER and AIO_MAIN_LUA_STATE then + local function Erase(event, player) + RemoveData(player:GetGUIDLow()) + end + RegisterPlayerEvent(4, Erase) +end + +-- Selects a method to send the string to the player depending on whether +-- running on client or server side. From client to server no player needed +local function AIO_SendAddonMessage(msg, player) + if AIO_SERVER then + -- server -> client + player:SendAddonMessage(AIO_ServerPrefix, msg, 7, player) + else + -- client -> server + SendAddonMessage(AIO_ClientPrefix, msg, "WHISPER", UnitName("player")) + end +end + +-- Sends a string to given players (vararg). +-- Can have one or more receiver players (no receivers when sending from client -> server) +-- Splits too long messages into smaller pieces +local function AIO_Send(msg, player, ...) + assert(type(msg) == "string", "#1 string expected") + assert(not AIO_SERVER or type(player) == 'userdata', "#2 player expected") + + AIO_debug("Sending message length:", #msg) + if AIO_ENABLE_MSGPRINT then + print("sent:", msg) + end + + -- split message to 255 character packets if needed (send long message) + if #msg <= AIO_MsgLen then + -- Send short <= AIO_MsgLen msg + AIO_SendAddonMessage(AIO_ShortMsg..msg, player) + else + -- Send long > AIO_MsgLen msg + + local guid = AIO_SERVER and player:GetGUIDLow() or 1 + if not plrdata[guid] then + plrdata[guid] = { + stored = 0, + ramque = NewQueue(), + MSG_GUID = MSG_MIN, + } + end + local pdata = plrdata[guid] + + -- the chars can not contain \0 + -- 16bit -> Message ID -- 0 reserved for identifying short msg + -- 16bit -> Number of parts (should be > 1) + -- 16bit -> Part ID + -- Rest -> Message String + + -- msglen - 4 bits for header data, messageid is already substracted + local msglen = (AIO_MsgLen-4) + -- Calculate amount of messages to send + local parts = ceil(#msg / msglen) + -- assemble header + local header = AIO_16tostring(pdata.MSG_GUID)..AIO_16tostring(parts) + + -- update guid + if pdata.MSG_GUID >= MSG_MAX then + pdata.MSG_GUID = MSG_MIN + else + pdata.MSG_GUID = pdata.MSG_GUID+1 + end + + -- send messages + for i = 1, parts do + AIO_SendAddonMessage(header..AIO_16tostring(i)..ssub(msg, ((i-1)*msglen)+1, (i*msglen)), player) + end + end + + -- More than one receiver, mass send message + if ... then + for i = 1, select('#',...) do + AIO_Send(msg, select(i, ...)) + end + end +end + +-- Message class metatable +local msgmt = {} +function msgmt.__index(tbl, key) + return msgmt[key] +end + +-- Add a new block to message and returns self +-- A block is a chunk of data identified by a string name +-- blocks are sent between server and client and handled on the receiving end +-- by block handlers. Blockhandlers are functions you can assign to +-- a specific name as a handler with AIO.RegisterEvent(name, func) +-- The All values in the block after it's name will be passed to the handler +-- function in same order. +function msgmt:Add(Name, ...) + assert(Name, "#1 Block must have name") + self.params[#self.params+1] = {select('#', ...), Name, ...} + self.assemble = true + return self +end + +-- Function to append messages together, returns self +-- Example AIO.Msg():Append(msg):Append(msg2):Send(...) +function msgmt:Append(msg2) + assert(type(msg2) == 'table', "#1 table expected") + for i = 1, #msg2.params do + assert(type(msg2.params[i]) == 'table', "#1["..i.."] table expected") + self.params[#self.params+1] = msg2.params[i] + end + self.assemble = true + return self +end + +-- Assembles the message string from stored data +function msgmt:Assemble() + if not self.assemble then + return self + end + self.MSG = Smallfolk.dumps(self.params) + self.assemble = false + return self +end + +-- Function to send the message to given players +function msgmt:Send(player, ...) + assert(not AIO_SERVER or player, "#1 player is nil") + AIO_Send(self:ToString(), player, ...) + return self +end + +-- Erases the so far built message and returns self +function msgmt:Clear() + for i = 1, #self.params do + self.params[i] = nil + end + self.MSG = nil + self.assemble = false + return self +end + +-- Returns the message string or an empty string +function msgmt:ToString() + return self:Assemble().MSG +end + +-- Returns true if the message has something in it +function msgmt:HasMsg() + return #self.params > 0 +end + +-- Creates and returns a new message that you can append stuff to and send to client or server +-- Example: AIO.Msg():Add("MyHandlerName", param1, param2):Send(player) +function AIO.Msg() + local msg = {params = {}, MSG = nil, assemble = false} + setmetatable(msg, msgmt) + return msg +end + +-- Calls the handler for block, see AIO.RegisterEvent +-- for adding handlers for blocks +local preinitblocks = {} +local function AIO_HandleBlock(player, data, skipstored) + local HandleName = data[2] + assert(HandleName, "Invalid handle, no handle name") + + if not AIO_SERVER and not AIO_INITED and (HandleName ~= 'AIO' or data[3] ~= 'Init') then + -- store blocks received before initialization + preinitblocks[#preinitblocks+1] = data + AIO_debug("Received block before Init:", HandleName, data[1], data[3]) + return + end + + local handledata = AIO_BLOCKHANDLES[HandleName] + if not handledata then + error("Unknown AIO block handle: '"..tostring(HandleName).."'") + end + + -- found the block handler and arguments match the format. + -- call the block handler + if AIO_SERVER and data[1] > 15 then + error("Received AIO block with over 15 arguments. Try using tables instead") + return + end + handledata(player, unpack(data, 3, data[1]+2)) + + if not skipstored and not AIO_SERVER and AIO_INITED and HandleName == 'AIO' and data[3] == 'Init' then + -- handle stored blocks after initialization, if they are not init messages + for i = 1, #preinitblocks do + AIO_HandleBlock(player, preinitblocks[i], true) + preinitblocks[i] = nil + end + end +end + +-- Extracts blocks from assembled addon messages +local curmsg = '' +local function AIO_Timeout() + error(string.format("AIO Timeout. Your code ran over %s instructions with message:\n%s", ''..AIO_TIMEOUT_INSTRUCTIONCOUNT, (curmsg or 'nil'))) +end +local function _AIO_ParseBlocks(msg, player) + if AIO_SERVER and AIO_TIMEOUT_INSTRUCTIONCOUNT > 0 then + curmsg = msg + debug.sethook(AIO_Timeout, "", AIO_TIMEOUT_INSTRUCTIONCOUNT) + end + + AIO_debug("Received messagelength:", #msg) + if AIO_ENABLE_MSGPRINT then + print("received:", msg) + end + + -- deserialize the message + local data = AIO_pcall(Smallfolk.loads, msg, #msg) + if not data or type(data) ~= 'table' then + AIO_debug("Received invalid message - data not a table") + return + end + + -- Handle parsing of all blocks + for i = 1, #data do + -- Using pcall here so errors wont stop handling other blocks in the msg + AIO_pcall(AIO_HandleBlock, player, data[i]) + end + + if AIO_SERVER and AIO_TIMEOUT_INSTRUCTIONCOUNT > 0 then + debug.sethook() + end +end +local function AIO_ParseBlocks(msg, player) + AIO_pcall(_AIO_ParseBlocks, msg, player) +end + +-- Handles cleaning and assembling the messages received +-- Messages can be 255 characters long, so big messages will be split +local function _AIO_HandleIncomingMsg(msg, player) + -- Received a long message part (msg split into 255 character parts) + local msgid = ssub(msg, 1,2) + + if msgid == AIO_ShortMsg then + -- Received <= 255 char msg, direct parse, take out the msg tag first + AIO_ParseBlocks(ssub(msg, 3), player) + return + end + + -- the chars can not contain \0 + -- 16bit -> Message ID -- 0 reserved for identifying short msg + -- 16bit -> Number of parts (should be > 1) + -- 16bit -> Part ID + -- Rest -> Message String + + if #msg < 3*2 then + return + end + + local messageId = AIO_stringto16(msgid) + local parts = AIO_stringto16(ssub(msg, 3,4)) + local partId = AIO_stringto16(ssub(msg, 5,6)) + if partId <= 0 or partId > parts then + error("received long message with invalid amount of parts. id, parts: "..partId.." "..parts) + return + end + + msg = ssub(msg, 7) + + -- guid is used to store information about long messages for specific player + local guid = AIO_SERVER and player:GetGUIDLow() or 1 + + if not plrdata[guid] then + plrdata[guid] = { + stored = 0, + ramque = NewQueue(), + MSG_GUID = MSG_MIN, + } + end + local pdata = plrdata[guid] + pdata[messageId] = pdata[messageId] or {} + local data = pdata[messageId] + + -- Different message with same ID, scrap previous message (probably reloaded UI) + -- Or new message so parts is nil + if not data.parts or data.parts.n ~= parts then + if data.parts then + for i = 0, data.parts.n do + data.parts[i] = nil + end + end + data.guid = guid + data.parts = {n=parts} + data.id = messageId + data.stamp = AIO_GetTime() + data.remquepos = removeque:pushright(data) + data.ramquepos = pdata.ramque:pushright(data) + end + + data.parts[partId] = msg + + pdata.stored = pdata.stored + #msg + if AIO_SERVER and pdata.stored > AIO_MSG_CACHE_SPACE then + local l, r = pdata.ramque:getrange() + for i = l, r-1 do -- -1 for leaving at least one message + -- remove message from stores leaving it for GC + local msgdata = pdata.ramque:popleft() + if msgdata then + removeque:gettable()[msgdata.remquepos] = nil + pdata[msgdata.id] = nil + -- count the data it holds and substract from stored data + for j = 1, msgdata.parts.n do + if msgdata.parts[j] then + pdata.stored = pdata.stored - #msgdata.parts[j] + end + end + -- check if enough freed to hold latest message in the cache + if pdata.stored <= AIO_MSG_CACHE_SPACE then + break + end + end + end + -- if still error even though tried freeing all memory possible to free + -- throw error and clear cache + if pdata.stored > AIO_MSG_CACHE_SPACE then + RemoveData(guid) + error("AIO_MSG_CACHE_SPACE is too small for received message") + return + end + end + + -- Has all parts, process + if #data.parts == data.parts.n then + local cat = tconcat(data.parts) + RemoveData(guid, messageId) + AIO_ParseBlocks(cat, player) + end +end +local function AIO_HandleIncomingMsg(msg, player) + AIO_pcall(_AIO_HandleIncomingMsg, msg, player) +end + +if AIO_MAIN_LUA_STATE then + -- Adds a new callback function for AIO that is called if + -- a block with the same name is recieved. + -- All parameters the client sends will be passed to func when called + -- Only one function can be a handler for one name (subject for change) + function AIO.RegisterEvent(name, func) + assert(name ~= nil, "name of the registered event expected not nil") + assert(type(func) == "function", "callback function must be a function") + assert(not AIO_BLOCKHANDLES[name], "an event is already registered for the name: "..name) + AIO_BLOCKHANDLES[name] = func + end + + -- Adds a table of handler functions for the specified name. + -- You can fill a table with functions and use this to add them for a name. + -- Then when a message like AIO.Msg():Add("MyName", "HandlerName"):Send() + -- is received, the handlertable["HandlerName"] will be executed with player and additional params passed to the block. + -- Returns the passed table + function AIO.AddHandlers(name, handlertable) + assert(name ~= nil, "#1 expected not nil") + assert(type(handlertable) == 'table', "#2 a table expected") + + for k,v in pairs(handlertable) do + assert(type(v) == 'function', "#2 a table of functions expected, found a "..type(v).." value") + end + + local function handler(player, key, ...) + if key and handlertable[key] then + handlertable[key](player, ...) + end + end + AIO.RegisterEvent(name, handler) + return handlertable + end +end + +-- Adds the current file as an AIO sent addon if called on server side main state. +-- Can be used from server and client, but on client does nothing. +-- You can provide path and/or name of the lua file to add, but if +-- omitted the file the function is executed in will be used as path +-- and the path's or given path's file name will be used. +-- Returns true if called on server side +function AIO.AddAddon(path, name) + if AIO_SERVER then + if AIO_MAIN_LUA_STATE then + path = path or debug.getinfo(2, 'S').source:sub(2) + name = name or match(path, "([^/]*)$") + local code = AIO_ReadFile(path) + AIO.AddAddonCode(name, code) + AIO_debug("Added addon path&name:", path, name) + end + return true + end +end + +if AIO_SERVER then + -- A shorthand for sending a message for a handler. + function AIO.Handle(player, name, handlername, ...) + assert(type(player) == 'userdata', "#1 player expected") + assert(name ~= nil, "#2 expected not nil") + return AIO.Msg():Add(name, handlername, ...):Send(player) + end + + + if AIO_MAIN_LUA_STATE then + -- Adds the addon code to the sent addons on login. + -- The addon code is trimmed according to settings at top of this file. + -- The addon is cached on client side and will be updated if needed. + -- name is an unique ID for the addon, usually you can use the file name or addon name there + -- Do note that short names are better since they are sent back and forth to indentify files + local crc32 = require("crc32lua").crc32 + function AIO.AddAddonCode(name, code) + assert(type(name) == 'string', "#1 string expected") + assert(type(code) == 'string', "#2 string expected") + if AIO_CODE_OBFUSCATE then + code = LuaSrcDiet(code, 3) + end + if AIO_MSG_COMPRESS then + code = AIO_Compressed..assert(lualzw.compress(code)) + else + code = AIO_Uncompressed..code + end + AIO_ADDONSORDER[#AIO_ADDONSORDER+1] = {name=name, crc=crc32(code), code=code} + end + + -- Adds a new function that is called when an init message + -- is about to be sent by server. The function is called before sending and + -- the message is passed to it along with the player if available: + -- func(msg[, player]) + -- you can modify the passed message and or return a new one + function AIO.AddOnInit(func) + assert(type(func) == 'function', "#1 function expected") + table.insert(AIO_INITHOOKS, func) + end + + -- This restricts player's ability to request the initial UI to some set time delay + local timers = {} + local function RemoveInitTimer(eventid, playerguid) + if type(playerguid) == "number" then + timers[playerguid] = nil + end + end + -- This handles sending initial UI to player. + -- The Client sends a request to the server for the addons along with it's cached addon data. + -- Then the server checks what files it has to send back and what it has to remove from the client's cache. + -- Then after server sends the required data to client, the client will one by one execute the addons + -- in the same order as they are sent from the server. + local versionmsg = AIO.Msg():Add("AIO", "Init", AIO_VERSION) + function AIO_HANDLERS.Init(player, version, clientdata) + -- check that the player is not on cooldown for init calling + local guid = player:GetGUIDLow() + if timers[guid] then + return + end + + -- make a new cooldown for init calling + timers[guid] = CreateLuaEvent(function(e) RemoveInitTimer(e, guid) end, AIO_UI_INIT_DELAY, 1) -- the timer here (AIO_UI_INIT_DELAY) is the min time in ms between inits the player can do + + -- Check for bad version and send version back for error directly + if version ~= AIO_VERSION then + versionmsg:Send(player) + return + end + + local istable = type(clientdata) == 'table' + + local addons = {} + local cached = {} + for i = 1, #AIO_ADDONSORDER do + local data = AIO_ADDONSORDER[i] + local clientcrc = istable and clientdata[data.name] or nil + if clientcrc and clientcrc == data.crc then + -- valid - send name only + cached[i] = data.name + else + -- not cached or outdated - send new + addons[i] = data + end + end + + local initmsg = AIO.Msg():Add("AIO", "Init", AIO_VERSION, #AIO_ADDONSORDER, addons, cached) + + for k,v in ipairs(AIO_INITHOOKS) do + initmsg = v(initmsg, player) or initmsg + end + + initmsg:Send(player) + end + + -- Handler that catches client errors + -- can be used to log client errors to server + function AIO_HANDLERS.Error(player, errmsg) + if not AIO_ERROR_LOG or type(errmsg) ~= 'string' then + return + end + PrintInfo(errmsg) + end + + -- An addon message event handler for the lua engine + -- If the message data is correct, move the message forward to the AIO message handler. + local function ONADDONMSG(event, sender, Type, prefix, msg, target) + if prefix == AIO_ClientPrefix and tostring(sender) == tostring(target) and #msg < 510 then + AIO_HandleIncomingMsg(msg, sender) + end + end + + RegisterServerEvent(30, ONADDONMSG) + + for k,v in ipairs(GetPlayersInWorld()) do + AIO.Handle(v, "AIO", "ForceReload") + end + end + +else + + -- A shorthand for sending a message for a handler. + function AIO.Handle(name, handlername, ...) + assert(name ~= nil, "#1 expected not nil") + return AIO.Msg():Add(name, handlername, ...):Send() + end + + -- Key is a key for a variable in the global table _G + -- The variable is stored when the player logs out and will be restored + -- when he logs back in before the addon codes are run + -- these variables are account bound + function AIO.AddSavedVar(key) + assert(key ~= nil, "#1 table key expected") + AIO_SAVEDVARS[key] = true + end + + -- Key is a key for a variable in the global table _G + -- The variable is stored when the player logs out and will be restored + -- when he logs back in before the addon codes are run + -- these variables are character bound + function AIO.AddSavedVarChar(key) + assert(key ~= nil, "#1 table key expected") + AIO_SAVEDVARSCHAR[key] = true + end + + AIO_FRAMEPOSITIONS = AIO_FRAMEPOSITIONS or {} + AIO.AddSavedVar("AIO_FRAMEPOSITIONS") + AIO_FRAMEPOSITIONSCHAR = AIO_FRAMEPOSITIONSCHAR or {} + AIO.AddSavedVarChar("AIO_FRAMEPOSITIONSCHAR") + -- Makes the frame save it's position over relog + -- If char is true, the position saving is character bound, otherwise account bound + function AIO.SavePosition(frame, char) + assert(frame:GetName(), "Called AIO.SavePosition on a nameless frame") + local store = char and AIO_FRAMEPOSITIONSCHAR or AIO_FRAMEPOSITIONS + if not store[frame:GetName()] then + store[frame:GetName()] = {} + end + LibWindow.RegisterConfig(frame, store[frame:GetName()]) + LibWindow.RestorePosition(frame) + LibWindow.SavePosition(frame) + table.insert(AIO_SAVEDFRAMES, frame) + end + + -- A client side event handler + -- Passes the incoming message to AIO message handler if it is valid + local function ONADDONMSG(self, event, prefix, msg, Type, sender) + if prefix == AIO_ServerPrefix then + if event == "CHAT_MSG_ADDON" and sender == UnitName("player") then + -- Normal AIO message handling from addon messages + AIO_HandleIncomingMsg(msg, sender) + end + end + end + local MsgReceiver = CreateFrame("Frame") + MsgReceiver:RegisterEvent("CHAT_MSG_ADDON") + MsgReceiver:SetScript("OnEvent", ONADDONMSG) + + -- A block handler for Init name, checks the version number and errors out if needed + -- On wrong version prevents handling any more messages + -- Stores new and changed addons to cache and runs the addons from cache + -- Also removes removed and outdated addons + local function RunAddon(name) + -- Check if code is compressed and uncompress if needed + local code = AIO_sv_Addons[name] and AIO_sv_Addons[name].code + assert(code, "Addon doesnt exist") + local compression, compressedcode = ssub(code, 1, 1), ssub(code, 2) + if compression == AIO_Compressed then + compressedcode = assert(lualzw.decompress(compressedcode)) + end + assert(loadstring(compressedcode, name))() + end + function AIO_HANDLERS.Init(player, version, N, addons, cached) + if(AIO_VERSION ~= version) then + AIO_INITED = true + -- stop handling any incoming messages + AIO_HandleBlock = function() end + print("You have AIO version "..AIO_VERSION.." and the server uses "..(version or "nil")..". Get the same version") + return + end + + assert(type(N) == 'number') + assert(type(addons) == 'table') + assert(type(cached) == 'table') + + local validAddons = {} + for i = 1, N do + local name + if addons[i] then + name = addons[i].name + AIO_sv_Addons[name] = addons[i] + validAddons[name] = true + elseif cached[i] then + name = cached[i] + validAddons[name] = true + else + error("Unexpected behavior, try /aio reset") + end + + AIO_pcall(RunAddon, name) + end + + local invalidAddons = {} + for name, data in pairs(AIO_sv_Addons) do + if not validAddons[name] then + invalidAddons[#invalidAddons+1] = name + end + end + + for i = 1, #invalidAddons do + AIO_sv_Addons[invalidAddons[i]] = nil + end + + AIO_INITED = true + print("Initialized AIO version "..AIO_VERSION..". Type '/aio help' for commands") + end + + -- Forces reload of UI for user on next action + function AIO_HANDLERS.ForceReload(player) + local frame = CreateFrame("BUTTON") + frame:SetToplevel(true) + frame:SetFrameStrata("TOOLTIP") + frame:SetFrameLevel(100) + frame:SetAllPoints(WorldFrame) + -- frame.texture = frame:CreateTexture() + -- frame.texture:SetAllPoints(frame) + -- frame.texture:SetTexture(0.1, 0.1, 0.1, 0.5) + frame:SetScript("OnClick", ReloadUI) + print("AIO: Force reloading UI") + message("AIO: Force reloading UI") + end + + -- Forces reset of UI for user on next action + function AIO_HANDLERS.ForceReset(player) + AIO_RESET() + AIO_HANDLERS.ForceReload(player) + end + + local frame = CreateFrame("FRAME") -- Need a frame to respond to events + frame:RegisterEvent("ADDON_LOADED") -- Fired when saved variables are loaded + frame:RegisterEvent("PLAYER_LOGOUT") -- Fired when about to log out + + -- message to request initialization of UI + function frame:OnEvent(event, addon) + if event == "ADDON_LOADED" and addon == "AIO_Client" then + -- Register addon channel on cata+ + local _,_,_, tocversion = GetBuildInfo() + if tocversion and tocversion >= 40100 and RegisterAddonMessagePrefix then + RegisterAddonMessagePrefix("C"..AIO_Prefix) + end + + -- Our saved variables are ready at this point. If there is no save, they will be nil + -- Must be before any other addon action like sending init request + if type(AIO_sv) ~= 'table' then + AIO_sv = {} -- This is the first time this addon is loaded; initialize the var + end + if type(AIO_sv_char) ~= 'table' then + AIO_sv_char = {} -- This is the first time this addon is loaded; initialize the var + end + if type(AIO_sv_Addons) ~= 'table' then + AIO_sv_Addons = {} -- This is the first time this addon is loaded; initialize the var + end + + -- Restore addon saved variables to global namespace + -- Must be before sending init request + for k,v in pairs(AIO_sv) do + if _G[k] then + AIO_debug("Overwriting global var _G["..k.."] with a saved var") + end + _G[k] = v + end + for k,v in pairs(AIO_sv_char) do + if _G[k] then + AIO_debug("Overwriting global var _G["..k.."] with a saved character var") + end + _G[k] = v + end + + -- Request initialization of UI if not done yet + -- works by timer for every second. Timer shut down after inited. + -- initmsg consists of the version and all known crc codes for cached addons. + local rem = {} + local addons = {} + for name, data in pairs(AIO_sv_Addons) do + if type(name) ~= 'string' or type(data) ~= 'table' or type(data.crc) ~= 'number' or type(data.code) ~= 'string' then + table.insert(rem, name) + else + addons[name] = data.crc + end + end + for _,name in ipairs(rem) do + AIO_sv_Addons[name] = nil -- remove invalid addons + end + + local initmsg = AIO.Msg():Add("AIO", "Init", AIO_VERSION, addons) + + local reset = 1 + local timer = reset + local function ONUPDATE(self, diff) + if AIO_INITED then + self:SetScript("OnUpdate", nil) + initmsg = nil + reset = nil + timer = nil + return + end + if timer < diff then + initmsg:Send() + timer = reset + reset = reset * 1.5 + else + timer = timer - diff + end + end + frame:SetScript("OnUpdate", ONUPDATE) + -- initmsg:Send() + elseif event == "PLAYER_LOGOUT" then + -- On logout we must store all global namespace to saved vars + AIO_sv = {} -- discard vars that no longer exist + for key,_ in pairs(AIO_SAVEDVARS or {}) do + AIO_sv[key] = _G[key] + end + AIO_sv_char = {} -- discard vars that no longer exist + for key,_ in pairs(AIO_SAVEDVARSCHAR or {}) do + AIO_sv_char[key] = _G[key] + end + + for k,v in ipairs(AIO_SAVEDFRAMES or {}) do + LibWindow.SavePosition(v) + end + end + end + frame:SetScript("OnEvent", frame.OnEvent) +end + +if AIO_MAIN_LUA_STATE then + -- Adds all handlers from AIO_HANDLERS for the "AIO" msg handler + AIO.AddHandlers("AIO", AIO_HANDLERS) + + -- Tables holding the command functions and the help messages + -- both are indexed by the command name. See below for how to add a command and help + local cmds = {} + local helps = {} + + -- A print selector + local function pprint(player, ...) + if player then + player:SendBroadcastMessage(tconcat({...}, " ")) + else + print(...) + end + end + + if AIO_SERVER then + local function OnCommand(event, player, msg) + msg = msg:lower() + if ssub(msg, 1, 3) ~= 'aio' then + return + end + msg = ssub(msg, 5) + if msg and msg ~= "" then + for k,v in pairs(cmds) do + if k:find(msg, 1, true) == 1 then + v(player) + return false + end + end + end + pprint(player, "Unknown command .aio "..tostring(msg)) + cmds.help(player) + return false + end + RegisterPlayerEvent(42, OnCommand) + else + SLASH_AIO1 = "/aio" + function SlashCmdList.AIO(msg) + local msg = msg:lower() + if msg and msg ~= "" then + for k,v in pairs(cmds) do + if k:find(msg, 1, true) == 1 then + v() + return + end + end + end + print("Unknown command /aio "..tostring(msg)) + cmds.help() + end + end + + -- Define slash commands and helps for them + -- triggered with /aio + helps.help = "prints this list" + function cmds.help(player) + pprint(player, "Available commands:") + for k,v in pairs(cmds) do + pprint(player, (AIO_SERVER and '.' or '/').."aio "..k.." - "..(helps[k] or "no info")) + end + end + if not AIO_SERVER then + helps.reset = "resets local AIO cache - clears saved addons and their saved variables and reloads the UI" + function cmds.reset() + AIO_RESET() + ReloadUI() + end + end + helps.trace = "toggles using debug.traceback or _ERRORMESSAGE" + function cmds.trace(player) + AIO_ENABLE_TRACEBACK = not AIO_ENABLE_TRACEBACK + pprint(player, "using trace is now", AIO_ENABLE_TRACEBACK and "on" or "off") + end + helps.debug = "toggles showing of debug messages" + function cmds.debug(player) + AIO_ENABLE_DEBUG_MSGS = not AIO_ENABLE_DEBUG_MSGS + pprint(player, "showing debug messages is now", AIO_ENABLE_DEBUG_MSGS and "on" or "off") + end + helps.pcall = "toggles using pcall" + function cmds.pcall(player) + AIO_ENABLE_PCALL = not AIO_ENABLE_PCALL + pprint(player, "using pcall is now", AIO_ENABLE_PCALL and "on" or "off") + end + helps.printio = "toggles printing all sent and received messages" + function cmds.printio(player) + AIO_ENABLE_MSGPRINT = not AIO_ENABLE_MSGPRINT + pprint(player, "printing IO is now", AIO_ENABLE_MSGPRINT and "on" or "off") + end +end + +return AIO diff --git a/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/AIO_Client.toc b/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/AIO_Client.toc new file mode 100644 index 0000000..28ae884 --- /dev/null +++ b/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/AIO_Client.toc @@ -0,0 +1,16 @@ +## Interface: 30300 +## Title: AIO +## Notes: Allows sending addons from server to client and allows client-server communication. +## Author: Rochet2 +## SavedVariables: AIO_sv, AIO_sv_Addons +## SavedVariablesPerCharacter: AIO_sv_char + +#dependencies +Dep_LibWindow-1.1\LibStub.lua +Dep_LibWindow-1.1\LibWindow-1.1\LibWindow-1.1.lua +Dep_Smallfolk\smallfolk.lua +lualzw-zeros\lualzw.lua +queue.lua + +#core +AIO.lua diff --git a/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/Dep_LibWindow-1.1/Changelog-LibWindow-1.1-r12.txt b/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/Dep_LibWindow-1.1/Changelog-LibWindow-1.1-r12.txt new file mode 100644 index 0000000..6cccdaf --- /dev/null +++ b/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/Dep_LibWindow-1.1/Changelog-LibWindow-1.1-r12.txt @@ -0,0 +1,13 @@ +------------------------------------------------------------------------ +r12 | nevcairiel | 2014-10-14 19:12:48 +0000 (Tue, 14 Oct 2014) | 1 line +Changed paths: + M /trunk/LibWindow-1.1.toc + +Update TOC +------------------------------------------------------------------------ +r11 | mikk | 2013-03-10 14:27:14 +0000 (Sun, 10 Mar 2013) | 1 line +Changed paths: + M /trunk/LibWindow-1.1.toc + +TOC 50200 +------------------------------------------------------------------------ diff --git a/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/Dep_LibWindow-1.1/LibStub.lua b/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/Dep_LibWindow-1.1/LibStub.lua new file mode 100644 index 0000000..ae1900e --- /dev/null +++ b/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/Dep_LibWindow-1.1/LibStub.lua @@ -0,0 +1,51 @@ +-- $Id: LibStub.lua 76 2007-09-03 01:50:17Z mikk $ +-- LibStub is a simple versioning stub meant for use in Libraries. http://www.wowace.com/wiki/LibStub for more info +-- LibStub is hereby placed in the Public Domain +-- Credits: Kaelten, Cladhaire, ckknight, Mikk, Ammo, Nevcairiel, joshborke +local LIBSTUB_MAJOR, LIBSTUB_MINOR = "LibStub", 2 -- NEVER MAKE THIS AN SVN REVISION! IT NEEDS TO BE USABLE IN ALL REPOS! +local LibStub = _G[LIBSTUB_MAJOR] + +-- Check to see is this version of the stub is obsolete +if not LibStub or LibStub.minor < LIBSTUB_MINOR then + LibStub = LibStub or {libs = {}, minors = {} } + _G[LIBSTUB_MAJOR] = LibStub + LibStub.minor = LIBSTUB_MINOR + + -- LibStub:NewLibrary(major, minor) + -- major (string) - the major version of the library + -- minor (string or number ) - the minor version of the library + -- + -- returns nil if a newer or same version of the lib is already present + -- returns empty library object or old library object if upgrade is needed + function LibStub:NewLibrary(major, minor) + assert(type(major) == "string", "Bad argument #2 to `NewLibrary' (string expected)") + minor = assert(tonumber(strmatch(minor, "%d+")), "Minor version must either be a number or contain a number.") + + local oldminor = self.minors[major] + if oldminor and oldminor >= minor then return nil end + self.minors[major], self.libs[major] = minor, self.libs[major] or {} + return self.libs[major], oldminor + end + + -- LibStub:GetLibrary(major, [silent]) + -- major (string) - the major version of the library + -- silent (boolean) - if true, library is optional, silently return nil if its not found + -- + -- throws an error if the library can not be found (except silent is set) + -- returns the library object if found + function LibStub:GetLibrary(major, silent) + if not self.libs[major] and not silent then + error(("Cannot find a library instance of %q."):format(tostring(major)), 2) + end + return self.libs[major], self.minors[major] + end + + -- LibStub:IterateLibraries() + -- + -- Returns an iterator for the currently registered libraries + function LibStub:IterateLibraries() + return pairs(self.libs) + end + + setmetatable(LibStub, { __call = LibStub.GetLibrary }) +end diff --git a/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/Dep_LibWindow-1.1/LibWindow-1.1.toc b/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/Dep_LibWindow-1.1/LibWindow-1.1.toc new file mode 100644 index 0000000..780baa7 --- /dev/null +++ b/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/Dep_LibWindow-1.1/LibWindow-1.1.toc @@ -0,0 +1,16 @@ +## Interface: 60000 +## LoadOnDemand: 1 +## Title: Lib: Window-1.1 +## Version: 1.1.12 +## Notes: A library that handles the basics of "window" style frames +## Author: Mikk +## eMail: dpsgnome@mail.com +## X-Category: Library +## X-License: Public Domain +## X-Curse-Packaged-Version: r12 +## X-Curse-Project-Name: LibWindow-1.1 +## X-Curse-Project-ID: libwindow-1-1 +## X-Curse-Repository-ID: wow/libwindow-1-1/mainline + +LibStub.lua +LibWindow-1.1\LibWindow-1.1.lua diff --git a/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/Dep_LibWindow-1.1/LibWindow-1.1/LibWindow-1.1.lua b/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/Dep_LibWindow-1.1/LibWindow-1.1/LibWindow-1.1.lua new file mode 100644 index 0000000..169c94e --- /dev/null +++ b/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/Dep_LibWindow-1.1/LibWindow-1.1/LibWindow-1.1.lua @@ -0,0 +1,317 @@ +--[[ +Name: LibWindow-1.1 +Revision: $Rev: 8 $ +Author(s): Mikk (dpsgnome@mail.com) +Website: http://old.wowace.com/wiki/LibWindow-1.1 +Documentation: http://old.wowace.com/wiki/LibWindow-1.1 +SVN: http://svn.wowace.com/root/trunk/WindowLib/Window-1.0 +Description: A library that handles the basics of "window" style frames: scaling, smart position saving, dragging.. +Dependencies: none +License: Public Domain +]] + +local MAJOR = "LibWindow-1.1" +local MINOR = tonumber(("$Revision: 8 $"):match("(%d+)")) + +local lib = LibStub:NewLibrary(MAJOR,MINOR) +if not lib then return end + +local min,max,abs = min,max,abs +local pairs = pairs +local tostring = tostring +local UIParent,GetScreenWidth,GetScreenHeight,IsAltKeyDown = UIParent,GetScreenWidth,GetScreenHeight,IsAltKeyDown +-- GLOBALS: error, ChatFrame1, assert + +local function print(msg) ChatFrame1:AddMessage(MAJOR..": "..tostring(msg)) end + +lib.utilFrame = lib.utilFrame or CreateFrame("Frame") +lib.delayedSavePosition = lib.delayedSavePosition or {} +lib.windowData = lib.windowData or {} + --[frameref]={ + -- names={optional names data from .RegisterConfig()} + -- storage= -- tableref where config data is read/written + -- altEnable=true/false + --} + + +lib.embeds = lib.embeds or {} + +local mixins = {} -- "FuncName"=true + + + +--------------------------------------------------------- +-- UTILITIES +--------------------------------------------------------- + + +local function getStorageName(frame, name) + local names = lib.windowData[frame].names + if names then + if names[name] then + return names[name] + end + if names.prefix then + return names.prefix .. name; + end + end + return name; +end + +local function setStorage(frame, name, value) + lib.windowData[frame].storage[getStorageName(frame, name)] = value +end + +local function getStorage(frame, name) + return lib.windowData[frame].storage[getStorageName(frame, name)] +end + + +lib.utilFrame:SetScript("OnUpdate", function(this) + this:Hide() + for frame,_ in pairs(lib.delayedSavePosition) do + lib.delayedSavePosition[frame] = nil + lib.SavePosition(frame) + end +end) + +local function queueSavePosition(frame) + lib.delayedSavePosition[frame] = true + lib.utilFrame:Show() +end + + +--------------------------------------------------------- +-- IMPORTANT APIS +--------------------------------------------------------- + +mixins["RegisterConfig"]=true +function lib.RegisterConfig(frame, storage, names) + if not lib.windowData[frame] then + lib.windowData[frame] = {} + end + lib.windowData[frame].names = names + lib.windowData[frame].storage = storage + + --[[ debug + frame.tx = frame:CreateTexture() + frame.tx:SetTexture(0,0,0, 0.4) + frame.tx:SetAllPoints(frame) + frame.tx:Show() + ]] +end + + + + +--------------------------------------------------------- +-- POSITIONING AND SCALING +--------------------------------------------------------- + +local nilParent = { + GetWidth = function() + return GetScreenWidth() * UIParent:GetScale() + end, + GetHeight = function() + return GetScreenHeight() * UIParent:GetScale() + end, + GetScale = function() + return 1 + end, +} + +mixins["SavePosition"]=true +function lib.SavePosition(frame) + local parent = frame:GetParent() or nilParent + -- No, this won't work very well with frames that aren't parented to nil or UIParent + local s = frame:GetScale() + local left,top = frame:GetLeft()*s, frame:GetTop()*s + local right,bottom = frame:GetRight()*s, frame:GetBottom()*s + local pwidth, pheight = parent:GetWidth(), parent:GetHeight() + + local x,y,point; + if left < (pwidth-right) and left < abs((left+right)/2 - pwidth/2) then + x = left; + point="LEFT"; + elseif (pwidth-right) < abs((left+right)/2 - pwidth/2) then + x = right-pwidth; + point="RIGHT"; + else + x = (left+right)/2 - pwidth/2; + point=""; + end + + if bottom < (pheight-top) and bottom < abs((bottom+top)/2 - pheight/2) then + y = bottom; + point="BOTTOM"..point; + elseif (pheight-top) < abs((bottom+top)/2 - pheight/2) then + y = top-pheight; + point="TOP"..point; + else + y = (bottom+top)/2 - pheight/2; + -- point=""..point; + end + + if point=="" then + point = "CENTER" + end + + setStorage(frame, "x", x) + setStorage(frame, "y", y) + setStorage(frame, "point", point) + setStorage(frame, "scale", s) + + frame:ClearAllPoints() + frame:SetPoint(point, frame:GetParent(), point, x/s, y/s); +end + + +mixins["RestorePosition"]=true +function lib.RestorePosition(frame) + local x = getStorage(frame, "x") + local y = getStorage(frame, "y") + local point = getStorage(frame, "point") + + local s = getStorage(frame, "scale") + if s then + (frame.lw11origSetScale or frame.SetScale)(frame,s) + else + s = frame:GetScale() + end + + if not x or not y then -- nothing stored in config yet, smack it in the center + x=0; y=0; point="CENTER" + end + + x = x/s + y = y/s + + frame:ClearAllPoints() + if not point and y==0 then -- errr why did i do this check again? must have been a reason, but i can't remember it =/ + point="CENTER" + end + + if not point then -- we have position, but no point, which probably means we're going from data stored by the addon itself before LibWindow was added to it. It was PROBABLY topleft->bottomleft anchored. Most do it that way. + frame:SetPoint("TOPLEFT", frame:GetParent(), "BOTTOMLEFT", x, y) + -- make it compute a better attachpoint (on next update) + queueSavePosition(frame) + return + end + + frame:SetPoint(point, frame:GetParent(), point, x, y) +end + + +mixins["SetScale"]=true +function lib.SetScale(frame, scale) + setStorage(frame, "scale", scale); + (frame.lw11origSetScale or frame.SetScale)(frame,scale) + lib.RestorePosition(frame) +end + + + +--------------------------------------------------------- +-- DRAG SUPPORT +--------------------------------------------------------- + + +function lib.OnDragStart(frame) + lib.windowData[frame].isDragging = true + frame:StartMoving() +end + + +function lib.OnDragStop(frame) + frame:StopMovingOrSizing() + lib.SavePosition(frame) + lib.windowData[frame].isDragging = false + if lib.windowData[frame].altEnable and not IsAltKeyDown() then + frame:EnableMouse(false) + end +end + +local function onDragStart(...) return lib.OnDragStart(...) end -- upgradable +local function onDragStop(...) return lib.OnDragStop(...) end -- upgradable + +mixins["MakeDraggable"]=true +function lib.MakeDraggable(frame) + assert(lib.windowData[frame]) + frame:SetMovable(true) + frame:SetScript("OnDragStart", onDragStart) + frame:SetScript("OnDragStop", onDragStop) + frame:RegisterForDrag("LeftButton") +end + + +--------------------------------------------------------- +-- MOUSEWHEEL +--------------------------------------------------------- + +function lib.OnMouseWheel(frame, dir) + local scale = getStorage(frame, "scale") + if dir<0 then + scale=max(scale*0.9, 0.1) + else + scale=min(scale/0.9, 3) + end + lib.SetScale(frame, scale) +end + +local function onMouseWheel(...) return lib.OnMouseWheel(...) end -- upgradable + +mixins["EnableMouseWheelScaling"]=true +function lib.EnableMouseWheelScaling(frame) + frame:SetScript("OnMouseWheel", onMouseWheel) +end + + +--------------------------------------------------------- +-- ENABLEMOUSE-ON-ALT +--------------------------------------------------------- + +lib.utilFrame:SetScript("OnEvent", function(this, event, key, state) + if event=="MODIFIER_STATE_CHANGED" then + if key == "LALT" or key == "RALT" then + for frame,_ in pairs(lib.altEnabledFrames) do + if not lib.windowData[frame].isDragging then -- if it's already dragging, it'll disable mouse on DragStop instead + frame:EnableMouse(state == 1) + end + end + end + end +end) + +mixins["EnableMouseOnAlt"]=true +function lib.EnableMouseOnAlt(frame) + assert(lib.windowData[frame]) + lib.windowData[frame].altEnable = true + frame:EnableMouse(not not IsAltKeyDown()) + if not lib.altEnabledFrames then + lib.altEnabledFrames = {} + lib.utilFrame:RegisterEvent("MODIFIER_STATE_CHANGED") + end + lib.altEnabledFrames[frame] = true +end + + + +--------------------------------------------------------- +-- Embed support (into FRAMES, not addons!) +--------------------------------------------------------- + +function lib:Embed(target) + if not target or not target[0] or not target.GetObjectType then + error("Usage: LibWindow:Embed(frame)", 1) + end + target.lw11origSetScale = target.SetScale + for name, _ in pairs(mixins) do + target[name] = self[name] + end + lib.embeds[target] = true + return target +end + +for target, _ in pairs(lib.embeds) do + lib:Embed(target) +end diff --git a/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/Dep_Smallfolk/LICENSE.md b/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/Dep_Smallfolk/LICENSE.md new file mode 100644 index 0000000..4e1c163 --- /dev/null +++ b/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/Dep_Smallfolk/LICENSE.md @@ -0,0 +1,20 @@ +Copyright (c) 2014 Robin Wellner + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/Dep_Smallfolk/README.md b/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/Dep_Smallfolk/README.md new file mode 100644 index 0000000..2f4688f --- /dev/null +++ b/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/Dep_Smallfolk/README.md @@ -0,0 +1,97 @@ +Smallfolk +========= + +Smallfolk is a reasonably fast, robust, richtly-featured table serialization +library for Lua. It was specifically written to allow complex data structures +to be loaded from unsafe sources for [LÖVE](http://love2d.org/) games, but can +be used anywhere. + +You use, distribute and extend Smallfolk under the terms of the MIT license. + +Usage +----- + +Smallfolk is very simple and easy to use: + +```lua +local smallfolk = require 'smallfolk' + +print(smallfolk.dumps({"Hello", world = true})) +print(smallfolk.loads('{"foo":"bar"}').foo) +-- prints: +-- {"Hello","world":t} +-- bar +``` + +Fast +---- + +Using Serpent's benchmark code, Smallfolk's serialization speed is comparable +to that of Ser (and Ser is 33% faster than Serpent). + +It should be noted that deserialization is much slower in Smallfolk than in +most other serialization libraries, because it parses the input itself instead +of handing it over to Lua. However, if you use LuaJIT this difference is much +less, and it is not noticable for small outputs. By default, Smallfolk rejects +inputs that are too large, to prevent DOS attacks. + +Robust +------ + +Sometimes you have strange, non-euclidean geometries in your table +constructions. It happens, I don't judge. Smallfolk can deal with that, where +some other serialization libraries (or anything that produces JSON) cry "Iä! +Iä! Cthulhu fhtagn!" and give up — or worse, silently produce incorrect +data. + +```lua +local smallfolk = require 'smallfolk' + +local cthulhu = {{}, {}, {}} +cthulhu.fhtagn = cthulhu +cthulhu[1][cthulhu[2]] = cthulhu[3] +cthulhu[2][cthulhu[1]] = cthulhu[2] +cthulhu[3][cthulhu[3]] = cthulhu +print(smallfolk.dumps(cthulhu)) +-- prints: +-- {{{@2:@3}:{@4:@1}},@3,@4,"fhtagn":@1} +``` + +Secure +------ + +Smallfolk doesn't run arbitrary Lua code, so you can safely use it when you +want to read data from an untrusted source. + +Compact +------- + +Smallfolk creates really small output files compared to something like Ser when +it encounters a lot of non-tree-like data, by using numbered references rather +than item assignment. + +Tested +------ + +Check out `tests.lua` to see how Smallfolk behaves with all kinds of inputs. + +Reference +--------- + +###`smallfolk.dumps(object)` + +Returns an 8-bit string representation of `object`. Throws an error if `object` +contains any types that cannot be serialised (userdata, functions and threads). + +###`smallfolk.loads(string[, maxsize=10000])` + +Returns an object whose representation would be `string`. If the length of +`string` is larger than `maxsize`, no deserialization is attempted and instead +an error is thrown. If `string` is not a valid representation of any object, +an error is thrown. + +See also +-------- + +* [Ser](https://github.com/gvx/Ser): for trusted-source serialization +* [Lady](https://github.com/gvx/Lady): for trusted-source savegames diff --git a/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/Dep_Smallfolk/smallfolk.lua b/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/Dep_Smallfolk/smallfolk.lua new file mode 100644 index 0000000..e5c2a55 --- /dev/null +++ b/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/Dep_Smallfolk/smallfolk.lua @@ -0,0 +1,218 @@ +local M = {} +Smallfolk = M +local expect_object, dump_object +local error, tostring, pairs, type, floor, huge, concat = error, tostring, pairs, type, math.floor, math.huge, table.concat + +local dump_type = {} + +function dump_type:string(nmemo, memo, acc) + local nacc = #acc + acc[nacc + 1] = '"' + acc[nacc + 2] = self:gsub('"', '""') + acc[nacc + 3] = '"' + return nmemo +end + +function dump_type:number(nmemo, memo, acc) + acc[#acc + 1] = ("%.17g"):format(self) + return nmemo +end + +function dump_type:table(nmemo, memo, acc) + --[[ + if memo[self] then + acc[#acc + 1] = '@' + acc[#acc + 1] = tostring(memo[self]) + return nmemo + end + nmemo = nmemo + 1 + ]] + memo[self] = nmemo + acc[#acc + 1] = '{' + local nself = #self + for i = 1, nself do -- don't use ipairs here, we need the gaps + nmemo = dump_object(self[i], nmemo, memo, acc) + acc[#acc + 1] = ',' + end + for k, v in pairs(self) do + if type(k) ~= 'number' or floor(k) ~= k or k < 1 or k > nself then + nmemo = dump_object(k, nmemo, memo, acc) + acc[#acc + 1] = ':' + nmemo = dump_object(v, nmemo, memo, acc) + acc[#acc + 1] = ',' + end + end + acc[#acc] = acc[#acc] == '{' and '{}' or '}' + return nmemo +end + +function dump_object(object, nmemo, memo, acc) + if object == true then + acc[#acc + 1] = 't' + elseif object == false then + acc[#acc + 1] = 'f' + elseif object == nil then + acc[#acc + 1] = 'n' + elseif object ~= object then + if (''..object):sub(1,1) == '-' then + acc[#acc + 1] = 'N' + else + acc[#acc + 1] = 'Q' + end + elseif object == huge then + acc[#acc + 1] = 'I' + elseif object == -huge then + acc[#acc + 1] = 'i' + else + local t = type(object) + if not dump_type[t] then + error('cannot dump type ' .. t) + end + return dump_type[t](object, nmemo, memo, acc) + end + return nmemo +end + +function M.dumps(object) + local nmemo = 0 + local memo = {} + local acc = {} + dump_object(object, nmemo, memo, acc) + return concat(acc) +end + +local function invalid(i) + error('invalid input at position ' .. i) +end + +local nonzero_digit = {['1'] = true, ['2'] = true, ['3'] = true, ['4'] = true, ['5'] = true, ['6'] = true, ['7'] = true, ['8'] = true, ['9'] = true} +local is_digit = {['0'] = true, ['1'] = true, ['2'] = true, ['3'] = true, ['4'] = true, ['5'] = true, ['6'] = true, ['7'] = true, ['8'] = true, ['9'] = true} +local function expect_number(string, start) + local i = start + local head = string:sub(i, i) + if head == '-' then + i = i + 1 + head = string:sub(i, i) + end + if nonzero_digit[head] then + repeat + i = i + 1 + head = string:sub(i, i) + until not is_digit[head] + elseif head == '0' then + i = i + 1 + head = string:sub(i, i) + else + invalid(i) + end + if head == '.' then + local oldi = i + repeat + i = i + 1 + head = string:sub(i, i) + until not is_digit[head] + if i == oldi + 1 then + invalid(i) + end + end + if head == 'e' or head == 'E' then + i = i + 1 + head = string:sub(i, i) + if head == '+' or head == '-' then + i = i + 1 + head = string:sub(i, i) + end + if not is_digit[head] then + invalid(i) + end + repeat + i = i + 1 + head = string:sub(i, i) + until not is_digit[head] + end + return tonumber(string:sub(start, i - 1)), i +end + +local expect_object_head = { + t = function(string, i) return true, i end, + f = function(string, i) return false, i end, + n = function(string, i) return nil, i end, + Q = function(string, i) return -(0/0), i end, + N = function(string, i) return 0/0, i end, + I = function(string, i) return 1/0, i end, + i = function(string, i) return -1/0, i end, + ['"'] = function(string, i) + local nexti = i - 1 + repeat + nexti = string:find('"', nexti + 1, true) + 1 + until string:sub(nexti, nexti) ~= '"' + return string:sub(i, nexti - 2):gsub('""', '"'), nexti + end, + ['0'] = function(string, i) + return expect_number(string, i - 1) + end, + ['{'] = function(string, i, tables) + local nt, k, v = {} + local j = 1 + tables[#tables + 1] = nt + if string:sub(i, i) == '}' then + return nt, i + 1 + end + while true do + k, i = expect_object(string, i, tables) + if string:sub(i, i) == ':' then + v, i = expect_object(string, i + 1, tables) + nt[k] = v + else + nt[j] = k + j = j + 1 + end + local head = string:sub(i, i) + if head == ',' then + i = i + 1 + elseif head == '}' then + return nt, i + 1 + else + invalid(i) + end + end + end, + --[[ + ['@'] = function(string, i, tables) + local match = string:match('^%d+', i) + local ref = tonumber(match) + if tables[ref] then + return tables[ref], i + #match + end + invalid(i) + end, + ]] +} +expect_object_head['1'] = expect_object_head['0'] +expect_object_head['2'] = expect_object_head['0'] +expect_object_head['3'] = expect_object_head['0'] +expect_object_head['4'] = expect_object_head['0'] +expect_object_head['5'] = expect_object_head['0'] +expect_object_head['6'] = expect_object_head['0'] +expect_object_head['7'] = expect_object_head['0'] +expect_object_head['8'] = expect_object_head['0'] +expect_object_head['9'] = expect_object_head['0'] +expect_object_head['-'] = expect_object_head['0'] +expect_object_head['.'] = expect_object_head['0'] + +expect_object = function(string, i, tables) + local head = string:sub(i, i) + if expect_object_head[head] then + return expect_object_head[head](string, i + 1, tables) + end + invalid(i) +end + +function M.loads(string, maxsize) + if #string > (maxsize or 10000) then + error 'input too large' + end + return (expect_object(string, 1, {})) +end + +return M diff --git a/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/lualzw-zeros/LICENSE b/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/lualzw-zeros/LICENSE new file mode 100644 index 0000000..a8fc851 --- /dev/null +++ b/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/lualzw-zeros/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2016 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/lualzw-zeros/README.md b/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/lualzw-zeros/README.md new file mode 100644 index 0000000..755dc66 --- /dev/null +++ b/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/lualzw-zeros/README.md @@ -0,0 +1,72 @@ +# lualzw +A relatively fast LZW compression algorithm in pure lua + +# encoding and decoding +Lossless compression for any text. The more repetition in the text, the better. + +16 bit encoding is used. So each 8 bit character is encoded as 16 bit. +This means that the dictionary size is 65280. + +Any special characters like `äöå` that are represented with multiple characters are supported. The special characters are split up into single characters that are then encoded and decoded. + +While compressing, the algorithm checks if the result size gets over the input. If it does, then the input is not compressed and the algorithm returns the input prematurely as the compressed result. + +The `zeros` branch contains a version that does not add additional null `\0` characters to the input when encoding. Any existing null characters in input string are preserved as nulls however so make sure your input does not contain nulls. + +# usage +```lua +local lualzw = require("lualzw") + +local input = "foofoofoofoofoofoofoofoofoo" +local compressed = assert(lualzw.compress(input)) +local decompressed = assert(lualzw.decompress(compressed)) +assert(input == decompressed) +``` + +# errors +Returns nil and an error message when the algorithm fails to compress or decompress. + +# speed +Times are in seconds. +Both have the same generated input. +The values are an average of 10 tries. + +Note that compressing random generated inputs results usually in bigger result than original. In these cases the algorithms do not compress and return input instead and thus compression result is 100% of input. + +lualzw is at an advantage in cases where compression cannot be done as it stops prematurely and LibCompress does not. +Also lualzw is at an advantage in cases where compression can be done as it has a larger dictionary in use. + +Input: 1000000 random generated bytes converted into string + +algorithm|compress|decompress|result % of input +---------|--------|----------|------------- +lualzw|0.6622|0.0003|100 +LibCompress|2.1983|0.0024|100 + +Input: 1000000 random generated bytes in ASCII range converted into string + +algorithm|compress|decompress|result % of input +---------|--------|----------|------------- +lualzw|0.812|0.0022|100 +LibCompress|1.782|0.0007|100 + +Input: 1000000 random generated repeating bytes converted into string + +algorithm|compress|decompress|result % of input +---------|--------|----------|------------- +lualzw|0.3975|0.0262|4.5001 +LibCompress|0.3907|0.0264|6.6997 + +Input: 1000000 of same character + +algorithm|compress|decompress|result % of input +---------|--------|----------|------------- +lualzw|0.7045|0.0026|0.2829 +LibCompress|0.6418|0.0038|0.4241 + +Input: "ymn32h8hm8ekrwjkrn9f" repeated 50000 times. In total 1000000 bytes + +algorithm|compress|decompress|result % of input +---------|--------|----------|------------- +lualzw|0.4788|0.0088|1.2629 +LibCompress|0.4426|0.0093|1.8905 diff --git a/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/lualzw-zeros/lualzw.lua b/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/lualzw-zeros/lualzw.lua new file mode 100644 index 0000000..62a5b32 --- /dev/null +++ b/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/lualzw-zeros/lualzw.lua @@ -0,0 +1,166 @@ +--[[ +MIT License + +Copyright (c) 2016 Rochet2 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +]] + +local char = string.char +local type = type +local select = select +local sub = string.sub +local tconcat = table.concat + +local basedictcompress = {} +local basedictdecompress = {} +for i = 0, 255 do + local ic, iic = char(i), char(i, 1) + basedictcompress[ic] = iic + basedictdecompress[iic] = ic +end + +local function dictAddA(str, dict, a, b) + if a >= 256 then + a, b = 1, b+1 + if b >= 256 then + dict = {} + b = 2 + end + end + dict[str] = char(a,b) + a = a+1 + return dict, a, b +end + +local function compress(input) + if type(input) ~= "string" then + return nil, "string expected, got "..type(input) + end + local len = #input + if len <= 1 then + return "u"..input + end + + local dict = {} + local a, b = 1, 2 + + local result = {"c"} + local resultlen = 1 + local n = 2 + local word = "" + for i = 1, len do + local c = sub(input, i, i) + local wc = word..c + if not (basedictcompress[wc] or dict[wc]) then + local write = basedictcompress[word] or dict[word] + if not write then + return nil, "algorithm error, could not fetch word" + end + result[n] = write + resultlen = resultlen + #write + n = n+1 + if len <= resultlen then + return "u"..input + end + dict, a, b = dictAddA(wc, dict, a, b) + word = c + else + word = wc + end + end + result[n] = basedictcompress[word] or dict[word] + resultlen = resultlen+#result[n] + n = n+1 + if len <= resultlen then + return "u"..input + end + return tconcat(result) +end + +local function dictAddB(str, dict, a, b) + if a >= 256 then + a, b = 1, b+1 + if b >= 256 then + dict = {} + b = 2 + end + end + dict[char(a,b)] = str + a = a+1 + return dict, a, b +end + +local function decompress(input) + if type(input) ~= "string" then + return nil, "string expected, got "..type(input) + end + + if #input < 1 then + return nil, "invalid input - not a compressed string" + end + + local control = sub(input, 1, 1) + if control == "u" then + return sub(input, 2) + elseif control ~= "c" then + return nil, "invalid input - not a compressed string" + end + input = sub(input, 2) + local len = #input + + if len < 2 then + return nil, "invalid input - not a compressed string" + end + + local dict = {} + local a, b = 1, 2 + + local result = {} + local n = 1 + local last = sub(input, 1, 2) + result[n] = basedictdecompress[last] or dict[last] + n = n+1 + for i = 3, len, 2 do + local code = sub(input, i, i+1) + local lastStr = basedictdecompress[last] or dict[last] + if not lastStr then + return nil, "could not find last from dict. Invalid input?" + end + local toAdd = basedictdecompress[code] or dict[code] + if toAdd then + result[n] = toAdd + n = n+1 + dict, a, b = dictAddB(lastStr..sub(toAdd, 1, 1), dict, a, b) + else + local tmp = lastStr..sub(lastStr, 1, 1) + result[n] = tmp + n = n+1 + dict, a, b = dictAddB(tmp, dict, a, b) + end + last = code + end + return tconcat(result) +end + +lualzw = { + compress = compress, + decompress = decompress, +} +return lualzw diff --git a/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/queue.lua b/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/queue.lua new file mode 100644 index 0000000..3184165 --- /dev/null +++ b/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/AIO_Client/queue.lua @@ -0,0 +1,83 @@ +local Queue = {} +function Queue.__index(que, key) + return Queue[key] +end + +function NewQueue() + local t = {first = 0, last = -1} + setmetatable(t, Queue) + return t +end + +function Queue.pushleft(que, value) + local first = que.first - 1 + que.first = first + que[first] = value + return first +end + +function Queue.pushright(que, value) + local last = que.last + 1 + que.last = last + que[last] = value + return last +end + +function Queue.popleft(que) + local first = que.first + if first > que.last then error("que is empty") end + local value = que[first] + que[first] = nil -- to allow garbage collection + que.first = first + 1 + return value +end + +function Queue.popright(que) + local last = que.last + if que.first > last then error("que is empty") end + local value = que[last] + que[last] = nil -- to allow garbage collection + que.last = last - 1 + return value +end + +function Queue.peekleft(que) + return que[que.first] +end + +function Queue.peekright(que) + return que[que.last] +end + +function Queue.empty(que) + return que.last < que.first +end + +function Queue.size(que) + return que.last - que.first + 1 +end + +function Queue.clear(que) + local l, r = self:getrange() + for i = l, r do + que[idx] = nil + end + que.first, que.last = 0, -1 +end + +function Queue.get(que, idx) + if idx < que.first or idx > que.last then + return + end + return que[idx] +end + +function Queue.getrange(que) + return que.first, que.last +end + +function Queue.gettable(que) + return que +end + +return NewQueue diff --git a/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Atlas.lua b/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Atlas.lua new file mode 100644 index 0000000..3e5301c --- /dev/null +++ b/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/Atlas.lua @@ -0,0 +1,708 @@ +-- ============================================================================ +-- DragonUI - Atlas Texture Definitions +-- Original texture atlas system by Dmitriy (RetailUI), MIT License. +-- Maps sprite names to texture coordinates for the custom UI assets. +-- ============================================================================ + +local addonPath = 'Interface\\AddOns\\DragonUI\\' + +local UnitFrameAsset = { path = addonPath .. 'Textures\\UI\\UnitFrame.blp', width = 1024, height = 512 } +local CastingBarAsset = { path = addonPath .. 'Textures\\UI\\CastingBar.blp', width = 512, height = 256 } +local CollapseButtonAsset = { path = addonPath .. 'Textures\\UI\\CollapseButton.blp', width = 64, height = 64 } +local MinimapAsset = { path = addonPath .. 'Textures\\UI\\Minimap.blp', width = 512, height = 1024 } +local ActionBarHorizontalAsset = { path = addonPath .. 'Textures\\UI\\ActionBarHorizontal.blp', width = 512, height = 2048 } +local ActionBarVerticalAsset = { path = addonPath .. 'Textures\\UI\\ActionBarVertical.blp', width = 256, height = 64 } +local ExperienceBar = { path = addonPath .. 'Textures\\UI\\ExperienceBar.blp', width = 2048, height = 64 } +local BagSlotsAsset = { path = addonPath .. 'Textures\\UI\\BagSlots.blp', width = 512, height = 128 } +local BagSlotsKeyAsset = { path = addonPath .. 'Textures\\UI\\BagSlotsKey.blp', width = 128, height = 128 } +local MicroMenuAsset = { path = addonPath .. 'Textures\\UI\\MicroMenu.blp', width = 512, height = 512 } +local CalendarAsset = { path = addonPath .. 'Textures\\Minimap\\Calendar.blp', width = 256, height = 256 } +local BattlefieldAsset = { path = addonPath .. 'assets\\uibattlefieldicon.tga', width = 256, height = 64 } +local LFGRoleAsset = { path = addonPath .. 'Textures\\PlayerFrame\\LFGRoleIcons.blp', width = 256, height = 256 } +local QuestTrackerAsset = { path = addonPath .. 'Textures\\UI\\QuestTracker.BLP', width = 1024, height = 512 } +local GuildBannerAsset = { path = addonPath .. 'Textures\\Minimap\\GuildBanner.BLP', width = 256, height = 256 } + + +local atlasTextures = { + ['Minimap-GuildBanner-Normal'] = { + asset = GuildBannerAsset, texcoord = { 1, 68, 76, 145 } + }, + ['Minimap-GuildBanner-Heroic'] = { + asset = GuildBannerAsset, texcoord = { 75, 141, 76, 145 } + }, + + ['QuestTracker-Header'] = { + asset = QuestTrackerAsset, texcoord = { 11, 571, 247, 317 } + }, + + ['LFGRole-Tank'] = { + asset = LFGRoleAsset, texcoord = { 35, 53, 0, 17 } + }, + ['LFGRole-Healer'] = { + asset = LFGRoleAsset, texcoord = { 18, 35, 0, 18 } + }, + ['LFGRole-Damage'] = { + asset = LFGRoleAsset, texcoord = { 0, 17, 0, 17 } + }, + + ['TargetFrame-TextureFrame-Normal'] = { + asset = UnitFrameAsset, texcoord = { 423, 633, 0, 89 } + }, + ['TargetFrame-TextureFrame-Vehicle'] = { + asset = UnitFrameAsset, texcoord = { 636, 846, 91, 181 } + }, + ['TargetFrame-TextureFrame-Elite'] = { + asset = UnitFrameAsset, texcoord = { 211, 421, 0, 89 } + }, + ['TargetFrame-TextureFrame-Rare'] = { + asset = UnitFrameAsset, texcoord = { 0, 209, 0, 89 } + }, + ['TargetFrame-TextureFrame-RareElite'] = { + asset = UnitFrameAsset, texcoord = { 0, 222, 91, 181 } + }, + ['TargetFrame-StatusBar-Health'] = { + asset = UnitFrameAsset, texcoord = { 3, 128, 459, 481 } + }, + ['TargetFrame-StatusBar-Mana'] = { + asset = UnitFrameAsset, texcoord = { 130, 264, 459, 471 } + }, + ['TargetFrame-Status'] = { + asset = UnitFrameAsset, texcoord = { 0, 209, 275, 365 } + }, + ['TargetFrame-Flash'] = { + asset = UnitFrameAsset, texcoord = { 211, 422, 275, 365 } + }, + ['TargetFrame-HighLevelIcon'] = { + asset = UnitFrameAsset, texcoord = { 252, 262, 490, 503 } + }, + + ['PlayerFrame-TextureFrame-Normal'] = { + asset = UnitFrameAsset, texcoord = { 423, 633, 91, 181 } + }, + ['PlayerFrame-TextureFrame-Vehicle'] = { + asset = UnitFrameAsset, texcoord = { 636, 845, 0, 89 } + }, + ['PlayerFrame-StatusBar-Health'] = { + asset = UnitFrameAsset, texcoord = { 3, 128, 483, 505 } + }, + ['PlayerFrame-StatusBar-Mana'] = { + asset = UnitFrameAsset, texcoord = { 130, 256, 474, 485 } + }, + ['PlayerFrame-Flash'] = { + asset = UnitFrameAsset, texcoord = { 212, 421, 184, 273 } + }, + ['PlayerFrame-Status'] = { + asset = UnitFrameAsset, texcoord = { 0, 209, 184, 273 } + }, + ['PlayerFrame-GroupIndicator'] = { + asset = UnitFrameAsset, texcoord = { 131, 203, 491, 505 } + }, + ['PlayerFrame-AttackIcon'] = { + asset = UnitFrameAsset, texcoord = { 269, 288, 490, 504 } + }, + + ['PartyFrame-TextureFrame-Normal'] = { + asset = UnitFrameAsset, texcoord = { 848, 968, 0, 47 } + }, + ['PartyFrame-StatusBar-Health'] = { + asset = UnitFrameAsset, texcoord = { 259, 330, 474, 485 } + }, + ['PartyFrame-StatusBar-Mana'] = { + asset = UnitFrameAsset, texcoord = { 267, 341, 460, 469 } + }, + ['PartyFrame-Flash'] = { + asset = UnitFrameAsset, texcoord = { 848, 968, 50, 97 } + }, + ['PartyFrame-Status'] = { + asset = UnitFrameAsset, texcoord = { 848, 968, 184, 147 } + }, + + ['CastingBar-Background'] = { + asset = CastingBarAsset, texcoord = { 0, 417, 95, 122 } + }, + ['CastingBar-Border'] = { + asset = CastingBarAsset, texcoord = { 0, 423, 63, 90 } + }, + ['CastingBar-MainBackground'] = { + asset = CastingBarAsset, texcoord = { 0, 419, 0, 56 } + }, + ['CastingBar-StatusBar-Casting'] = { + asset = CastingBarAsset, texcoord = { 0, 418, 149, 170 } + }, + ['CastingBar-StatusBar-Channeling'] = { + asset = CastingBarAsset, texcoord = { 0, 417, 124, 146 } + }, + ['CastingBar-StatusBar-Failed'] = { + asset = CastingBarAsset, texcoord = { 0, 417, 173, 196 } + }, + ['CastingBar-Spark'] = { + asset = CastingBarAsset, texcoord = { 423, 430, 97, 150 } + }, + ['CastingBar-BorderShield'] = { + asset = CastingBarAsset, texcoord = { 437, 509, 1, 87 } + }, + + ['CollapseButton-Left'] = { + asset = CollapseButtonAsset, texcoord = { 4, 22, 0, 31 } + }, + ['CollapseButton-Right'] = { + asset = CollapseButtonAsset, texcoord = { 5, 22, 31, 62 } + }, + ['CollapseButton-Up'] = { + asset = CollapseButtonAsset, texcoord = { 31, 63, 10, 27 } + }, + ['CollapseButton-Down'] = { + asset = CollapseButtonAsset, texcoord = { 31, 62, 37, 54 } + }, + + ['Minimap-Border'] = { + asset = MinimapAsset, texcoord = { 0, 438, 60, 506 } + }, + ['Minimap-Border-Top'] = { + asset = MinimapAsset, texcoord = { 105, 360, 609, 636 } + }, + ['Minimap-Mail-Normal'] = { + asset = MinimapAsset, texcoord = { 42, 80, 521, 548 } + }, + ['Minimap-Mail-Highlight'] = { + asset = MinimapAsset, texcoord = { 1, 39, 521, 548 } + }, + ['Minimap-Calendar-Normal'] = { + asset = CalendarAsset, texcoord = { 0.18359375 * 256, 0.265625 * 256, 0.00390625 * 256, 0.078125 * 256 } + }, + ['Minimap-Calendar-Highlight'] = { + asset = CalendarAsset, texcoord = { 0.09375 * 256, 0.17578125 * 256, 0.00390625 * 256, 0.078125 * 256 } + }, + ['Minimap-Calendar-Pushed'] = { + asset = CalendarAsset, texcoord = { 0.00390625 * 256, 0.0859375 * 256, 0.00390625 * 256, 0.078125 * 256 } + }, + ['Minimap-Tracking-Background'] = { + asset = MinimapAsset, texcoord = { 441, 480, 402, 440 } + }, + ['Minimap-Tracking-Normal'] = { + asset = MinimapAsset, texcoord = { 149, 179, 520, 548 } + }, + ['Minimap-Tracking-Highlight'] = { + asset = MinimapAsset, texcoord = { 117, 147, 520, 548 } + }, + ['Minimap-Tracking-Pushed'] = { + asset = MinimapAsset, texcoord = { 83, 115, 520, 550 } + }, + ['Minimap-ZoomIn-Normal'] = { + asset = MinimapAsset, texcoord = { 1, 35, 552, 586 } + }, + ['Minimap-ZoomIn-Highlight'] = { + asset = MinimapAsset, texcoord = { 1, 35, 624, 658 } + }, + ['Minimap-ZoomIn-Pushed'] = { + asset = MinimapAsset, texcoord = { 1, 35, 588, 622 } + }, + ['Minimap-ZoomOut-Normal'] = { + asset = MinimapAsset, texcoord = { 181, 215, 520, 538 } + }, + ['Minimap-ZoomOut-Highlight'] = { + asset = MinimapAsset, texcoord = { 253, 287, 520, 538 } + }, + ['Minimap-ZoomOut-Pushed'] = { + asset = MinimapAsset, texcoord = { 217, 251, 520, 538 } + }, + ['Minimap-Calendar-1-Normal'] = { + asset = CalendarAsset, texcoord = { 47, 68, 1, 20 } + }, + ['Minimap-Calendar-1-Highlight'] = { + asset = CalendarAsset, texcoord = { 24, 45, 1, 20 } + }, + ['Minimap-Calendar-1-Pushed'] = { + asset = CalendarAsset, texcoord = { 1, 22, 1, 20 } + }, + ['Minimap-Calendar-2-Normal'] = { + asset = CalendarAsset, texcoord = { 93, 114, 43, 62 } + }, + ['Minimap-Calendar-2-Highlight'] = { + asset = CalendarAsset, texcoord = { 70, 91, 43, 62 } + }, + ['Minimap-Calendar-2-Pushed'] = { + asset = CalendarAsset, texcoord = { 47, 68, 43, 62 } + }, + ['Minimap-Calendar-3-Normal'] = { + asset = CalendarAsset, texcoord = { 70, 91, 85, 104 } + }, + ['Minimap-Calendar-3-Highlight'] = { + asset = CalendarAsset, texcoord = { 47, 68, 232, 251 } + }, + ['Minimap-Calendar-3-Pushed'] = { + asset = CalendarAsset, texcoord = { 47, 68, 211, 230 } + }, + ['Minimap-Calendar-4-Normal'] = { + asset = CalendarAsset, texcoord = { 70, 91, 127, 146 } + }, + ['Minimap-Calendar-4-Highlight'] = { + asset = CalendarAsset, texcoord = { 70, 91, 106, 125 } + }, + ['Minimap-Calendar-4-Pushed'] = { + asset = CalendarAsset, texcoord = { 231, 252, 85, 104 } + }, + ['Minimap-Calendar-5-Normal'] = { + asset = CalendarAsset, texcoord = { 70, 91, 190, 209 } + }, + ['Minimap-Calendar-5-Highlight'] = { + asset = CalendarAsset, texcoord = { 70, 91, 169, 188 } + }, + ['Minimap-Calendar-5-Pushed'] = { + asset = CalendarAsset, texcoord = { 70, 91, 148, 167 } + }, + ['Minimap-Calendar-6-Normal'] = { + asset = CalendarAsset, texcoord = { 93, 114, 106, 125 } + }, + ['Minimap-Calendar-6-Highlight'] = { + asset = CalendarAsset, texcoord = { 70, 91, 232, 251 } + }, + ['Minimap-Calendar-6-Pushed'] = { + asset = CalendarAsset, texcoord = { 70, 91, 211, 230 } + }, + ['Minimap-Calendar-7-Normal'] = { + asset = CalendarAsset, texcoord = { 162, 183, 106, 125 } + }, + ['Minimap-Calendar-7-Highlight'] = { + asset = CalendarAsset, texcoord = { 139, 160, 106, 125 } + }, + ['Minimap-Calendar-7-Pushed'] = { + asset = CalendarAsset, texcoord = { 116, 137, 106, 125 } + }, + ['Minimap-Calendar-8-Normal'] = { + asset = CalendarAsset, texcoord = { 231, 252, 106, 125 } + }, + ['Minimap-Calendar-8-Highlight'] = { + asset = CalendarAsset, texcoord = { 208, 229, 106, 125 } + }, + ['Minimap-Calendar-8-Pushed'] = { + asset = CalendarAsset, texcoord = { 185, 206, 106, 125 } + }, + ['Minimap-Calendar-9-Normal'] = { + asset = CalendarAsset, texcoord = { 93, 114, 169, 188 } + }, + ['Minimap-Calendar-9-Highlight'] = { + asset = CalendarAsset, texcoord = { 93, 114, 169, 188 } + }, + ['Minimap-Calendar-9-Pushed'] = { + asset = CalendarAsset, texcoord = { 93, 114, 127, 146 } + }, + ['Minimap-Calendar-10-Normal'] = { + asset = CalendarAsset, texcoord = { 116, 137, 1, 20 } + }, + ['Minimap-Calendar-10-Highlight'] = { + asset = CalendarAsset, texcoord = { 93, 114, 1, 20 } + }, + ['Minimap-Calendar-10-Pushed'] = { + asset = CalendarAsset, texcoord = { 70, 91, 1, 20 } + }, + ['Minimap-Calendar-11-Normal'] = { + asset = CalendarAsset, texcoord = { 185, 206, 1, 20 } + }, + ['Minimap-Calendar-11-Highlight'] = { + asset = CalendarAsset, texcoord = { 162, 183, 1, 20 } + }, + ['Minimap-Calendar-11-Pushed'] = { + asset = CalendarAsset, texcoord = { 139, 160, 1, 20 } + }, + ['Minimap-Calendar-12-Normal'] = { + asset = CalendarAsset, texcoord = { 1, 22, 22, 41 } + }, + ['Minimap-Calendar-12-Highlight'] = { + asset = CalendarAsset, texcoord = { 231, 252, 1, 20 } + }, + ['Minimap-Calendar-12-Pushed'] = { + asset = CalendarAsset, texcoord = { 208, 229, 1, 20 } + }, + ['Minimap-Calendar-13-Normal'] = { + asset = CalendarAsset, texcoord = { 70, 91, 22, 41 } + }, + ['Minimap-Calendar-13-Highlight'] = { + asset = CalendarAsset, texcoord = { 47, 68, 22, 41 } + }, + ['Minimap-Calendar-13-Pushed'] = { + asset = CalendarAsset, texcoord = { 24, 45, 22, 41 } + }, + ['Minimap-Calendar-14-Normal'] = { + asset = CalendarAsset, texcoord = { 139, 160, 22, 41 } + }, + ['Minimap-Calendar-14-Highlight'] = { + asset = CalendarAsset, texcoord = { 116, 137, 22, 41 } + }, + ['Minimap-Calendar-14-Pushed'] = { + asset = CalendarAsset, texcoord = { 93, 114, 22, 41 } + }, + ['Minimap-Calendar-15-Normal'] = { + asset = CalendarAsset, texcoord = { 208, 229, 22, 41 } + }, + ['Minimap-Calendar-15-Highlight'] = { + asset = CalendarAsset, texcoord = { 185, 206, 22, 41 } + }, + ['Minimap-Calendar-15-Pushed'] = { + asset = CalendarAsset, texcoord = { 162, 183, 22, 41 } + }, + ['Minimap-Calendar-16-Normal'] = { + asset = CalendarAsset, texcoord = { 1, 22, 64, 83 } + }, + ['Minimap-Calendar-16-Highlight'] = { + asset = CalendarAsset, texcoord = { 1, 22, 43, 62 } + }, + ['Minimap-Calendar-16-Pushed'] = { + asset = CalendarAsset, texcoord = { 231, 252, 22, 41 } + }, + ['Minimap-Calendar-17-Normal'] = { + asset = CalendarAsset, texcoord = { 1, 22, 127, 146 } + }, + ['Minimap-Calendar-17-Highlight'] = { + asset = CalendarAsset, texcoord = { 1, 22, 106, 125 } + }, + ['Minimap-Calendar-17-Pushed'] = { + asset = CalendarAsset, texcoord = { 1, 22, 85, 104 } + }, + ['Minimap-Calendar-18-Normal'] = { + asset = CalendarAsset, texcoord = { 1, 22, 190, 209 } + }, + ['Minimap-Calendar-18-Highlight'] = { + asset = CalendarAsset, texcoord = { 1, 22, 169, 188 } + }, + ['Minimap-Calendar-18-Pushed'] = { + asset = CalendarAsset, texcoord = { 1, 22, 148, 167 } + }, + ['Minimap-Calendar-19-Normal'] = { + asset = CalendarAsset, texcoord = { 24, 45, 43, 62 } + }, + ['Minimap-Calendar-19-Highlight'] = { + asset = CalendarAsset, texcoord = { 1, 22, 232, 251 } + }, + ['Minimap-Calendar-19-Pushed'] = { + asset = CalendarAsset, texcoord = { 1, 22, 211, 230 } + }, + ['Minimap-Calendar-20-Normal'] = { + asset = CalendarAsset, texcoord = { 162, 183, 43, 62 } + }, + ['Minimap-Calendar-20-Highlight'] = { + asset = CalendarAsset, texcoord = { 139, 160, 43, 62 } + }, + ['Minimap-Calendar-20-Pushed'] = { + asset = CalendarAsset, texcoord = { 116, 137, 43, 62 } + }, + ['Minimap-Calendar-21-Normal'] = { + asset = CalendarAsset, texcoord = { 231, 252, 43, 62 } + }, + ['Minimap-Calendar-21-Highlight'] = { + asset = CalendarAsset, texcoord = { 208, 229, 43, 62 } + }, + ['Minimap-Calendar-21-Pushed'] = { + asset = CalendarAsset, texcoord = { 185, 206, 43, 62 } + }, + ['Minimap-Calendar-22-Normal'] = { + asset = CalendarAsset, texcoord = { 24, 45, 106, 125 } + }, + ['Minimap-Calendar-22-Highlight'] = { + asset = CalendarAsset, texcoord = { 24, 45, 85, 104 } + }, + ['Minimap-Calendar-22-Pushed'] = { + asset = CalendarAsset, texcoord = { 24, 45, 64, 83 } + }, + ['Minimap-Calendar-23-Normal'] = { + asset = CalendarAsset, texcoord = { 24, 45, 169, 188 } + }, + ['Minimap-Calendar-23-Highlight'] = { + asset = CalendarAsset, texcoord = { 24, 45, 148, 167 } + }, + ['Minimap-Calendar-23-Pushed'] = { + asset = CalendarAsset, texcoord = { 24, 45, 127, 146 } + }, + ['Minimap-Calendar-24-Normal'] = { + asset = CalendarAsset, texcoord = { 24, 45, 232, 251 } + }, + ['Minimap-Calendar-24-Highlight'] = { + asset = CalendarAsset, texcoord = { 24, 45, 211, 230 } + }, + ['Minimap-Calendar-24-Pushed'] = { + asset = CalendarAsset, texcoord = { 24, 45, 190, 209 } + }, + ['Minimap-Calendar-25-Normal'] = { + asset = CalendarAsset, texcoord = { 93, 114, 64, 83 } + }, + ['Minimap-Calendar-25-Highlight'] = { + asset = CalendarAsset, texcoord = { 70, 91, 64, 83 } + }, + ['Minimap-Calendar-25-Pushed'] = { + asset = CalendarAsset, texcoord = { 47, 68, 64, 83 } + }, + ['Minimap-Calendar-26-Normal'] = { + asset = CalendarAsset, texcoord = { 162, 183, 64, 83 } + }, + ['Minimap-Calendar-26-Highlight'] = { + asset = CalendarAsset, texcoord = { 139, 160, 64, 83 } + }, + ['Minimap-Calendar-26-Pushed'] = { + asset = CalendarAsset, texcoord = { 116, 137, 64, 83 } + }, + ['Minimap-Calendar-27-Normal'] = { + asset = CalendarAsset, texcoord = { 231, 252, 64, 83 } + }, + ['Minimap-Calendar-27-Highlight'] = { + asset = CalendarAsset, texcoord = { 208, 229, 64, 83 } + }, + ['Minimap-Calendar-27-Pushed'] = { + asset = CalendarAsset, texcoord = { 185, 206, 64, 83 } + }, + ['Minimap-Calendar-28-Normal'] = { + asset = CalendarAsset, texcoord = { 47, 68, 127, 146 } + }, + ['Minimap-Calendar-28-Highlight'] = { + asset = CalendarAsset, texcoord = { 47, 68, 106, 125 } + }, + ['Minimap-Calendar-28-Pushed'] = { + asset = CalendarAsset, texcoord = { 47, 68, 85, 104 } + }, + ['Minimap-Calendar-29-Normal'] = { + asset = CalendarAsset, texcoord = { 47, 68, 190, 209 } + }, + ['Minimap-Calendar-29-Highlight'] = { + asset = CalendarAsset, texcoord = { 47, 68, 169, 188 } + }, + ['Minimap-Calendar-29-Pushed'] = { + asset = CalendarAsset, texcoord = { 47, 68, 148, 167 } + }, + ['Minimap-Calendar-30-Normal'] = { + asset = CalendarAsset, texcoord = { 139, 160, 85, 104 } + }, + ['Minimap-Calendar-30-Highlight'] = { + asset = CalendarAsset, texcoord = { 116, 137, 85, 104 } + }, + ['Minimap-Calendar-30-Pushed'] = { + asset = CalendarAsset, texcoord = { 93, 114, 85, 104 } + }, + ['Minimap-Calendar-31-Normal'] = { + asset = CalendarAsset, texcoord = { 208, 229, 85, 104 } + }, + ['Minimap-Calendar-31-Highlight'] = { + asset = CalendarAsset, texcoord = { 185, 206, 85, 104 } + }, + ['Minimap-Calendar-31-Pushed'] = { + asset = CalendarAsset, texcoord = { 162, 183, 85, 104 } + }, + + ['ActionBar-LeftCap-Alliance'] = { + asset = ActionBarHorizontalAsset, texcoord = { 1, 357, 209, 543 } + }, + ['ActionBar-RightCap-Alliance'] = { + asset = ActionBarHorizontalAsset, texcoord = { 1, 357, 545, 879 } + }, + ['ActionBar-LeftCap-Horde'] = { + asset = ActionBarHorizontalAsset, texcoord = { 1, 357, 881, 1215 } + }, + ['ActionBar-RightCap-Horde'] = { + asset = ActionBarHorizontalAsset, texcoord = { 1, 357, 1217, 1551 } + }, + ['ActionBar-ButtonUp-Normal'] = { + asset = ActionBarHorizontalAsset, texcoord = { 359, 393, 833, 861 } + }, + ['ActionBar-ButtonUp-Highlight'] = { + asset = ActionBarHorizontalAsset, texcoord = { 453, 487, 709, 737 } + }, + ['ActionBar-ButtonUp-Pushed'] = { + asset = ActionBarHorizontalAsset, texcoord = { 453, 487, 679, 707 } + }, + ['ActionBar-ButtonDown-Normal'] = { + asset = ActionBarHorizontalAsset, texcoord = { 463, 497, 605, 633 } + }, + ['ActionBar-ButtonDown-Highlight'] = { + asset = ActionBarHorizontalAsset, texcoord = { 463, 497, 575, 603 } + }, + ['ActionBar-ButtonDown-Pushed'] = { + asset = ActionBarHorizontalAsset, texcoord = { 463, 497, 545, 573 } + }, + ['ActionBar-ActionButton-Highlight'] = { + asset = ActionBarHorizontalAsset, texcoord = { 359, 451, 1065, 1155 } + }, + ['ActionBar-ActionButton-Pushed'] = { + asset = ActionBarHorizontalAsset, texcoord = { 359, 451, 881, 971 } + }, + ['ActionBar-ActionButton-Flash'] = { + asset = ActionBarHorizontalAsset, texcoord = { 359, 451, 973, 1063 } + }, + ['ActionBar-ActionButton-Border'] = { + asset = ActionBarHorizontalAsset, texcoord = { 359, 451, 649, 739 } + }, + ['ActionBar-ActionButton-Background'] = { + asset = ActionBarHorizontalAsset, texcoord = { 359, 487, 209, 333 } + }, + + ['ExperienceBar-Background'] = { + asset = ExperienceBar, texcoord = { 0.00088878125, 570, 20, 29 } + }, + ['ExperienceBar-Border'] = { + asset = ExperienceBar, texcoord = { 1, 572, 1, 18 } + }, + + ['BagsBar-SlotButton-Highlight'] = { + asset = BagSlotsAsset, texcoord = { 358, 419, 1, 62 } + }, + ['BagsBar-SlotButton-Border'] = { + asset = BagSlotsAsset, texcoord = { 295, 356, 1, 62 } + }, + ['BagsBar-KeySlot-Normal'] = { + asset = BagSlotsKeyAsset, texcoord = { 3, 63, 64, 125 } + }, + ['BagsBar-MainSlot-Normal'] = { + asset = BagSlotsAsset, texcoord = { 1, 97, 1, 97 } + }, + ['BagsBar-MainSlot-Highlight'] = { + asset = BagSlotsAsset, texcoord = { 99, 195, 1, 97 } + }, + + ['MicroMenu-Spellbook-Normal'] = { + asset = MicroMenuAsset, texcoord = { 389, 440, 312, 382 } + }, + ['MicroMenu-Spellbook-Highlight'] = { + asset = MicroMenuAsset, texcoord = { 334, 385, 312, 382 } + }, + ['MicroMenu-Spellbook-Pushed'] = { + asset = MicroMenuAsset, texcoord = { 280, 331, 312, 382 } + }, + ['MicroMenu-Talent-Normal'] = { + asset = MicroMenuAsset, texcoord = { 170, 221, 312, 382 } + }, + ['MicroMenu-Talent-Highlight'] = { + asset = MicroMenuAsset, texcoord = { 116, 167, 312, 382 } + }, + ['MicroMenu-Talent-Pushed'] = { + asset = MicroMenuAsset, texcoord = { 63, 114, 312, 382 } + }, + ['MicroMenu-Talent-Disabled'] = { + asset = MicroMenuAsset, texcoord = { 6, 57, 312, 382 } + }, + ['MicroMenu-LFD-Normal'] = { + asset = MicroMenuAsset, texcoord = { 387, 438, 158, 229 } + }, + ['MicroMenu-LFD-Highlight'] = { + asset = MicroMenuAsset, texcoord = { 331, 382, 158, 229 } + }, + ['MicroMenu-LFD-Pushed'] = { + asset = MicroMenuAsset, texcoord = { 277, 328, 158, 229 } + }, + ['MicroMenu-LFD-Disabled'] = { + asset = MicroMenuAsset, texcoord = { 222, 273, 158, 229 } + }, + ['MicroMenu-MainMenu-Normal'] = { + asset = MicroMenuAsset, texcoord = { 387, 438, 235, 305 } + }, + ['MicroMenu-MainMenu-Highlight'] = { + asset = MicroMenuAsset, texcoord = { 278, 329, 235, 305 } + }, + ['MicroMenu-MainMenu-Pushed'] = { + asset = MicroMenuAsset, texcoord = { 333, 383, 235, 305 } + }, + ['MicroMenu-Help-Normal'] = { + asset = MicroMenuAsset, texcoord = { 169, 219, 158, 228 } + }, + ['MicroMenu-Help-Highlight'] = { + asset = MicroMenuAsset, texcoord = { 115, 166, 158, 228 } + }, + ['MicroMenu-Help-Pushed'] = { + asset = MicroMenuAsset, texcoord = { 60, 111, 158, 228 } + }, + ['MicroMenu-Socials-Normal'] = { + asset = MicroMenuAsset, texcoord = { 169, 220, 235, 305 } + }, + ['MicroMenu-Socials-Highlight'] = { + asset = MicroMenuAsset, texcoord = { 115, 166, 235, 305 } + }, + ['MicroMenu-Socials-Pushed'] = { + asset = MicroMenuAsset, texcoord = { 61, 112, 235, 305 } + }, + ['MicroMenu-Achievement-Normal'] = { + asset = MicroMenuAsset, texcoord = { 383, 433, 4, 74 } + }, + ['MicroMenu-Achievement-Highlight'] = { + asset = MicroMenuAsset, texcoord = { 329, 380, 4, 74 } + }, + ['MicroMenu-Achievement-Pushed'] = { + asset = MicroMenuAsset, texcoord = { 274, 325, 4, 74 } + }, + ['MicroMenu-Achievement-Disabled'] = { + asset = MicroMenuAsset, texcoord = { 220, 271, 4, 74 } + }, + ['MicroMenu-QuestLog-Normal'] = { + asset = MicroMenuAsset, texcoord = { 166, 217, 4, 74 } + }, + ['MicroMenu-QuestLog-Highlight'] = { + asset = MicroMenuAsset, texcoord = { 112, 164, 4, 74 } + }, + ['MicroMenu-QuestLog-Pushed'] = { + asset = MicroMenuAsset, texcoord = { 58, 109, 4, 74 } + }, + ['MicroMenu-QuestLog-Disabled'] = { + asset = MicroMenuAsset, texcoord = { 4, 55, 4, 74 } + }, + ['MicroMenu-Empty'] = { + asset = MicroMenuAsset, texcoord = { 384, 435, 82, 151 } + }, + + ['ActionMainBar-TopLeft'] = { + asset = ActionBarHorizontalAsset, texcoord = { 464, 500, 475, 508 } + }, + ['ActionMainBar-TopRight'] = { + asset = ActionBarHorizontalAsset, texcoord = { 461, 497, 442, 473 } + }, + ['ActionMainBar-BottomLeft'] = { + asset = ActionBarHorizontalAsset, texcoord = { 466, 502, 388, 420 } + }, + ['ActionMainBar-BottomRight'] = { + asset = ActionBarHorizontalAsset, texcoord = { 464, 499, 339, 372 } + }, + ['ActionMainBar-Top'] = { + asset = ActionBarHorizontalAsset, texcoord = { 445, 465, 145, 154 } + }, + ['ActionMainBar-Bottom'] = { + asset = ActionBarHorizontalAsset, texcoord = { 445, 465, 145, 152 } + }, + ['ActionMainBar-Left'] = { + asset = ActionBarVerticalAsset, texcoord = { 144, 151, 22, 34 } + }, + ['ActionMainBar-Right'] = { + asset = ActionBarVerticalAsset, texcoord = { 144, 150, 22, 34 } + }, + + ['ActionMainBar-GapDown'] = { + asset = ActionBarHorizontalAsset, texcoord = { 396, 415, 831, 864 } + }, + ['ActionMainBar-GapUp'] = { + asset = ActionBarHorizontalAsset, texcoord = { 422, 441, 831, 861 } + }, + ['ActionMainBar-GapCenter'] = { + asset = ActionBarVerticalAsset, texcoord = { 143, 152, 22, 34 } + }, + ['Minimap-PVP-alliance-Normal'] = { + asset = BattlefieldAsset, texcoord = { 72, 126, 5, 58 } + }, + ['Minimap-PVP-alliance-Pushed'] = { + asset = BattlefieldAsset, texcoord = { 17, 71, 5, 58 } + }, + ['Minimap-PVP-horde-Normal'] = { + asset = BattlefieldAsset, texcoord = { 181, 235, 5, 58 } + }, + ['Minimap-PVP-horde-Pushed'] = { + asset = BattlefieldAsset, texcoord = { 127, 182, 5, 58 } + }, + + +} + +function SetAtlasTexture(texture, textureName) + local atlasInfo = atlasTextures[textureName] + if not atlasInfo then return false end + local assetInfo = atlasInfo.asset + + local texCoordInfo = atlasInfo.texcoord + local left, right, top, bottom = unpack(texCoordInfo) + + texture:SetTexture(assetInfo.path) + texture:SetTexCoord(left / assetInfo.width, right / assetInfo.width, top / assetInfo.height, bottom / assetInfo.height) + texture:SetSize(right - left, bottom - top) + return true +end diff --git a/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/DragonUI.toc b/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/DragonUI.toc new file mode 100644 index 0000000..663f2e6 --- /dev/null +++ b/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/DragonUI.toc @@ -0,0 +1,38 @@ +## Interface: 30300 +## Title: |cff1784d1DragonUI|r +## Notes: |cffcaf7faDragonflight-style UI for 3.3.5a with mixed third-party licensing|r +## Version: 2.4.1 +## Author: NeticSoul +## SavedVariables: DragonUIDB +## OptionalDeps: Blizzard_TimeManager, Blizzard_PartyUI +## X-License: MIT for project-authored code; bundled dependencies retain their own licenses + +Atlas.lua + +# Core libraries (always loaded) +libs\LibStub\LibStub.lua +libs\CallbackHandler-1.0\CallbackHandler-1.0.xml +libs\LibKeyBound-1.0\lib.xml +libs\AceAddon-3.0\AceAddon-3.0.xml +libs\AceEvent-3.0\AceEvent-3.0.xml +libs\AceTimer-3.0\AceTimer-3.0.xml +libs\AceBucket-3.0\AceBucket-3.0.xml +libs\AceHook-3.0\AceHook-3.0.xml +libs\AceDB-3.0\AceDB-3.0.xml +libs\AceLocale-3.0\AceLocale-3.0.xml +libs\AceConsole-3.0\AceConsole-3.0.xml +libs\AceComm-3.0\AceComm-3.0.xml +libs\AceTab-3.0\AceTab-3.0.xml +libs\AceSerializer-3.0\AceSerializer-3.0.xml +libs\LibDeflate\LibDeflate.lua +libs\LibItemSearch-1.0\LibItemSearch-1.0.lua +libs\LibHealComm-4.0\LibHealComm-4.0.xml +libs\AbsorbsMonitor-1.0\AbsorbsMonitor-1.0.xml + +# Note: AceConfig-3.0, AceGUI-3.0, AceDBOptions-3.0 moved to DragonUI_Options + +# Localization (must load after AceLocale and before DragonUI.xml) +Locales\Load_Locales.xml + +DragonUI.xml + diff --git a/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/DragonUI.xml b/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/DragonUI.xml new file mode 100644 index 0000000..5964e00 --- /dev/null +++ b/src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/DragonUI.xml @@ -0,0 +1,25 @@ + + + + + +