Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

lastest tukui build upload to github

  • Loading branch information...
commit f2d612b7a877fcc461986ff0c89d7dc8187ac690 0 parents
@tukz tukz authored
Showing with 16,033 additions and 0 deletions.
  1. BIN  Fonts/ARIALN.ttf
  2. BIN  Fonts/FRIZQT__.ttf
  3. BIN  Fonts/MORPHEUS.ttf
  4. BIN  Fonts/SKURRI.ttf
  5. +525 −0 Interface/AddOns/Tukui/!Tukui.lua
  6. +70 −0 Interface/AddOns/Tukui/!Tukui_AuraWatch.lua
  7. +202 −0 Interface/AddOns/Tukui/!Tukui_config.lua
  8. +62 −0 Interface/AddOns/Tukui/Tukui.toc
  9. +38 −0 Interface/AddOns/Tukui/arena_focus.lua
  10. +12 −0 Interface/AddOns/Tukui/cargbag_Config.lua
  11. +592 −0 Interface/AddOns/Tukui/cargbag_core.lua
  12. +108 −0 Interface/AddOns/Tukui/cargbag_handler.lua
  13. +57 −0 Interface/AddOns/Tukui/cargbag_helpers.lua
  14. +818 −0 Interface/AddOns/Tukui/cargbag_layout.lua
  15. +12 −0 Interface/AddOns/Tukui/combatfont.lua
  16. +33 −0 Interface/AddOns/Tukui/elements/assistant.lua
  17. +328 −0 Interface/AddOns/Tukui/elements/aura.lua
  18. +385 −0 Interface/AddOns/Tukui/elements/castbar.lua
  19. +39 −0 Interface/AddOns/Tukui/elements/cpoints.lua
  20. +50 −0 Interface/AddOns/Tukui/elements/happiness.lua
  21. +140 −0 Interface/AddOns/Tukui/elements/health.lua
  22. +35 −0 Interface/AddOns/Tukui/elements/leader.lua
  23. +47 −0 Interface/AddOns/Tukui/elements/lfdrole.lua
  24. +51 −0 Interface/AddOns/Tukui/elements/masterlooter.lua
  25. +48 −0 Interface/AddOns/Tukui/elements/portraits.lua
  26. +162 −0 Interface/AddOns/Tukui/elements/power.lua
  27. +35 −0 Interface/AddOns/Tukui/elements/pvp.lua
  28. +47 −0 Interface/AddOns/Tukui/elements/range.lua
  29. +39 −0 Interface/AddOns/Tukui/elements/ricons.lua
  30. +155 −0 Interface/AddOns/Tukui/elements/runebar.lua
  31. +66 −0 Interface/AddOns/Tukui/elements/status.lua
  32. +462 −0 Interface/AddOns/Tukui/elements/tags.lua
  33. +59 −0 Interface/AddOns/Tukui/elements/threat.lua
  34. +72 −0 Interface/AddOns/Tukui/elements/vehicle.lua
  35. +40 −0 Interface/AddOns/Tukui/keys/basic.lua
  36. +60 −0 Interface/AddOns/Tukui/keys/tooltip.lua
  37. BIN  Interface/AddOns/Tukui/media/DsmV1.tga
  38. BIN  Interface/AddOns/Tukui/media/Mask-SQUARE.tga
  39. BIN  Interface/AddOns/Tukui/media/Russel Square LT.ttf
  40. BIN  Interface/AddOns/Tukui/media/WHITE64X64.tga
  41. BIN  Interface/AddOns/Tukui/media/aurawatch.tga
  42. BIN  Interface/AddOns/Tukui/media/bnt.ttf
  43. BIN  Interface/AddOns/Tukui/media/border.tga
  44. BIN  Interface/AddOns/Tukui/media/border2.tga
  45. BIN  Interface/AddOns/Tukui/media/bubbleTex.tga
  46. BIN  Interface/AddOns/Tukui/media/button.tga
  47. BIN  Interface/AddOns/Tukui/media/buttonTex.tga
  48. BIN  Interface/AddOns/Tukui/media/button_hover.tga
  49. BIN  Interface/AddOns/Tukui/media/checked.tga
  50. BIN  Interface/AddOns/Tukui/media/checkedlol.tga
  51. BIN  Interface/AddOns/Tukui/media/debuffhighlightTex.tga
  52. BIN  Interface/AddOns/Tukui/media/flash.tga
  53. BIN  Interface/AddOns/Tukui/media/font.TTF
  54. BIN  Interface/AddOns/Tukui/media/frameborder3pff.tga
  55. BIN  Interface/AddOns/Tukui/media/gloss.tga
  56. BIN  Interface/AddOns/Tukui/media/gloss_grey.tga
  57. BIN  Interface/AddOns/Tukui/media/glowTex.tga
  58. BIN  Interface/AddOns/Tukui/media/highlightTex.tga
  59. BIN  Interface/AddOns/Tukui/media/hover.tga
  60. BIN  Interface/AddOns/Tukui/media/indicator.tga
  61. BIN  Interface/AddOns/Tukui/media/innerfire.tga
  62. BIN  Interface/AddOns/Tukui/media/mail.tga
  63. BIN  Interface/AddOns/Tukui/media/neuropol x cd rg.ttf
  64. BIN  Interface/AddOns/Tukui/media/normTex.tga
  65. BIN  Interface/AddOns/Tukui/media/normTexbu.tga
  66. BIN  Interface/AddOns/Tukui/media/pushed.tga
  67. BIN  Interface/AddOns/Tukui/media/statusbar.tga
  68. +280 −0 Interface/AddOns/Tukui/nameplates.lua
  69. +1 −0  Interface/AddOns/Tukui/ncError.lua
  70. +42 −0 Interface/AddOns/Tukui/oUF.xml
  71. +270 −0 Interface/AddOns/Tukui/oUF_AuraWatch.lua
  72. +91 −0 Interface/AddOns/Tukui/oUF_DebuffHighlight.lua
  73. +163 −0 Interface/AddOns/Tukui/oUF_Experience.lua
  74. +362 −0 Interface/AddOns/Tukui/oUF_MoveableFrames.lua
  75. +69 −0 Interface/AddOns/Tukui/oUF_Reputation.lua
  76. +47 −0 Interface/AddOns/Tukui/oUF_Smooth.lua
  77. +91 −0 Interface/AddOns/Tukui/oUF_ThreatBar.lua
  78. +1,339 −0 Interface/AddOns/Tukui/oUF_Tukz_Main.lua
  79. +119 −0 Interface/AddOns/Tukui/oUF_Tukz_Tags.lua
  80. +126 −0 Interface/AddOns/Tukui/oUF_Tukz_WeakenedSoul.lua
  81. +90 −0 Interface/AddOns/Tukui/omnicc.lua
  82. +563 −0 Interface/AddOns/Tukui/ouf.lua
  83. +205 −0 Interface/AddOns/Tukui/plugins/bagbar.lua
  84. +38 −0 Interface/AddOns/Tukui/plugins/databroker.lua
  85. +63 −0 Interface/AddOns/Tukui/plugins/money.lua
  86. +73 −0 Interface/AddOns/Tukui/plugins/purchase.lua
  87. +88 −0 Interface/AddOns/Tukui/plugins/space.lua
  88. +289 −0 Interface/AddOns/Tukui/rActionButtonStyler.lua
  89. +357 −0 Interface/AddOns/Tukui/sGroupLoot.lua
  90. +558 −0 Interface/AddOns/Tukui/tActionBars.lua
  91. +57 −0 Interface/AddOns/Tukui/tAutoAcceptInvite.lua
  92. +10 −0 Interface/AddOns/Tukui/tAutoInvite.LUA
  93. +13 −0 Interface/AddOns/Tukui/tAutoInvite.XML
  94. +90 −0 Interface/AddOns/Tukui/tAutoRepair.lua
  95. +29 −0 Interface/AddOns/Tukui/tAutoSellJunk.lua
  96. +182 −0 Interface/AddOns/Tukui/tBuffs.lua
  97. +396 −0 Interface/AddOns/Tukui/tChat.lua
  98. +107 −0 Interface/AddOns/Tukui/tCombo.lua
  99. +40 −0 Interface/AddOns/Tukui/tCombo.xml
  100. +377 −0 Interface/AddOns/Tukui/tCooldownTracker.lua
  101. +47 −0 Interface/AddOns/Tukui/tInnerFire.lua
  102. +298 −0 Interface/AddOns/Tukui/tLoot.lua
  103. +61 −0 Interface/AddOns/Tukui/tMark.lua
  104. +112 −0 Interface/AddOns/Tukui/tMinimap.lua
  105. +1,247 −0 Interface/AddOns/Tukui/tPanels.lua
  106. +115 −0 Interface/AddOns/Tukui/tTell.lua
  107. +16 −0 Interface/AddOns/Tukui/tTell.xml
  108. +450 −0 Interface/AddOns/Tukui/tTooltip.lua
  109. +225 −0 Interface/AddOns/Tukui/translateplz.lua
  110. +13 −0 Interface/AddOns/Tukui_Dps_Layout/Tukui_Dps_Layout.toc
  111. +171 −0 Interface/AddOns/Tukui_Dps_Layout/oUF_Tukz_Party.lua
  112. +145 −0 Interface/AddOns/Tukui_Dps_Layout/oUF_Tukz_Raid10.lua
  113. +143 −0 Interface/AddOns/Tukui_Dps_Layout/oUF_Tukz_Raid15.lua
  114. +143 −0 Interface/AddOns/Tukui_Dps_Layout/oUF_Tukz_Raid25.lua
  115. +117 −0 Interface/AddOns/Tukui_Dps_Layout/oUF_Tukz_Raid40.lua
  116. +15 −0 Interface/AddOns/Tukui_Heal_Layout/Tukui_Heal_Layout.toc
  117. +375 −0 Interface/AddOns/Tukui_Heal_Layout/oUF_hTukz_Party.lua
  118. +271 −0 Interface/AddOns/Tukui_Heal_Layout/oUF_hTukz_Raid10.lua
  119. +271 −0 Interface/AddOns/Tukui_Heal_Layout/oUF_hTukz_Raid15.lua
  120. +324 −0 Interface/AddOns/Tukui_Heal_Layout/oUF_hTukz_Raid40.lua
  121. BIN  Interface/Buttons/ButtonHilight-Square.blp
  122. BIN  Interface/Buttons/CheckButtonGlow.blp
  123. BIN  Interface/Buttons/CheckButtonHilight.blp
  124. BIN  Interface/Buttons/UI-ActionButton-Border.blp
  125. BIN  Interface/Buttons/UI-CheckBox-Down.blp
  126. BIN  Interface/Buttons/UI-CheckBox-Highlight.blp
  127. BIN  Interface/Buttons/UI-CheckBox-Up.blp
  128. BIN  Interface/Buttons/UI-DialogBox-Button-Disabled.blp
  129. BIN  Interface/Buttons/UI-DialogBox-Button-Down.blp
  130. BIN  Interface/Buttons/UI-DialogBox-Button-Highlight.blp
  131. BIN  Interface/Buttons/UI-DialogBox-Button-Up.blp
  132. BIN  Interface/Buttons/UI-MinusButton-Disabled.blp
  133. BIN  Interface/Buttons/UI-MinusButton-Down.blp
  134. BIN  Interface/Buttons/UI-MinusButton-Up.blp
  135. BIN  Interface/Buttons/UI-Panel-Button-Down.blp
  136. BIN  Interface/Buttons/UI-Panel-Button-Highlight.blp
  137. BIN  Interface/Buttons/UI-Panel-Button-Up.blp
  138. BIN  Interface/Buttons/UI-Panel-MinimizeButton-Disabled.blp
  139. BIN  Interface/Buttons/UI-Panel-MinimizeButton-Down.blp
  140. BIN  Interface/Buttons/UI-Panel-MinimizeButton-Highlight.blp
  141. BIN  Interface/Buttons/UI-Panel-MinimizeButton-Up.blp
  142. BIN  Interface/Buttons/UI-PlusButton-Disabled.blp
  143. BIN  Interface/Buttons/UI-PlusButton-Down.blp
  144. BIN  Interface/Buttons/UI-PlusButton-Up.blp
  145. BIN  Interface/Buttons/UI-Quickslot-Depress.blp
  146. BIN  Interface/Buttons/UI-Quickslot.blp
  147. BIN  Interface/Buttons/UI-Quickslot2.blp
  148. BIN  Interface/Buttons/UI-QuickslotGray.blp
  149. BIN  Interface/Buttons/UI-QuickslotRed.blp
  150. BIN  Interface/Buttons/UI-RotationLeft-Button-Down.blp
  151. BIN  Interface/Buttons/UI-RotationLeft-Button-Up.blp
  152. BIN  Interface/Buttons/UI-RotationRight-Button-Down.blp
  153. BIN  Interface/Buttons/UI-RotationRight-Button-Up.blp
  154. BIN  Interface/Buttons/UI-ScrollBar-Knob.blp
  155. BIN  Interface/Buttons/UI-ScrollBar-ScrollDownButton-Disabled.blp
  156. BIN  Interface/Buttons/UI-ScrollBar-ScrollDownButton-Down.blp
  157. BIN  Interface/Buttons/UI-ScrollBar-ScrollDownButton-Up.blp
  158. BIN  Interface/Buttons/UI-ScrollBar-ScrollUpButton-Disabled.blp
  159. BIN  Interface/Buttons/UI-ScrollBar-ScrollUpButton-Down.blp
  160. BIN  Interface/Buttons/UI-ScrollBar-ScrollUpButton-Up.blp
  161. BIN  Interface/Buttons/UI-SpellbookIcon-NextPage-Disabled.blp
  162. BIN  Interface/Buttons/UI-SpellbookIcon-NextPage-Down.blp
  163. BIN  Interface/Buttons/UI-SpellbookIcon-NextPage-Up.blp
  164. BIN  Interface/Buttons/UI-SpellbookIcon-PrevPage-Disabled.blp
  165. BIN  Interface/Buttons/UI-SpellbookIcon-PrevPage-Down.blp
  166. BIN  Interface/Buttons/UI-SpellbookIcon-PrevPage-Up.blp
  167. BIN  Interface/Minimap/CompassNorthTag.blp
  168. BIN  Interface/Minimap/CompassRing.blp
  169. BIN  Interface/Minimap/MiniMap-TrackingBorder.blp
  170. BIN  Interface/Minimap/MinimapArrow.blp
  171. BIN  Interface/Minimap/UI-Minimap-Background.blp
  172. BIN  Interface/Minimap/UI-Minimap-Border.blp
  173. BIN  Interface/PetActionBar/UI-PetBar.blp
  174. BIN  Interface/ShapeshiftBar/ShapeshiftBar.blp
  175. BIN  Interface/ShapeshiftBar/ShapeshiftBarMiddle.blp
BIN  Fonts/ARIALN.ttf
Binary file not shown
BIN  Fonts/FRIZQT__.ttf
Binary file not shown
BIN  Fonts/MORPHEUS.ttf
Binary file not shown
BIN  Fonts/SKURRI.ttf
Binary file not shown
525 Interface/AddOns/Tukui/!Tukui.lua
@@ -0,0 +1,525 @@
+-- Setup the UI when the user types /configure
+-- This will include:
+---------------------
+-- Fix UI Variables
+-- Setup Chat Frames
+-- Print the current resolution to chat
+-- etc
+
+BLANK_TEXTURE = "Interface\\AddOns\\Tukui\\media\\WHITE64X64"
+
+local L = GetLocale()
+
+-- Function to create "Panels" with the standard color scheme
+function CreatePanel(height, width, x, y, anchorPoint, anchorPointRel, anchor, level, parent, strata)
+ local Panel = CreateFrame("Frame", _, parent)
+ Panel:SetFrameLevel(level)
+ Panel:SetFrameStrata(strata)
+ Panel:SetHeight(height)
+ Panel:SetWidth(width)
+ Panel:SetPoint(anchorPoint, anchor, anchorPointRel, x, y)
+ Panel:SetBackdrop( {
+ bgFile = BLANK_TEXTURE,
+ edgeFile = BLANK_TEXTURE,
+ tile = false, tileSize = 0, edgeSize = 1,
+ insets = { left = -1, right = -1, top = -1, bottom = -1 }
+ })
+ Panel:SetBackdropColor(0.1,0.1,0.1,1)
+ Panel:SetBackdropBorderColor(0.6,0.6,0.6,1)
+end
+
+if(AutoScale==true) then
+ local scalefix = CreateFrame("Frame")
+ scalefix:RegisterEvent("PLAYER_LOGIN")
+ scalefix:SetScript("OnEvent", function()
+ local index = GetCurrentResolution();
+ local resolution = select(index, GetScreenResolutions());
+ if(resolution == "1680x1050" or resolution == "1920x1080" or resolution == "1920x1200" or resolution == "1600x900" or resolution == "2048x1152" or resolution == "1776x1000" or resolution == "2560x1600") then
+ SetCVar("useUiScale", 1)
+ SetCVar("uiScale", 768/string.match(({GetScreenResolutions()})[GetCurrentResolution()], "%d+x(%d+)"));
+ if(LoginMsg==true) then
+ if(L=="ruRU") then
+ print(" ")
+ print("Добро пожаловать в Tukui V8 под патч 3.3! www.tukui.org")
+ print(" ")
+ print("Текущее разрешение:", resolution);
+ print(" ")
+ print("Разрешение вашего экрана поддерживается.. Наслаждайтесь!")
+ print("Не забудьте |cffFF0000/configure|r если это Ваше первое использование!")
+ print(" ")
+ print("Введите |cffFF0000/uihelp|r для большей информации!")
+ print(" ")
+ elseif(L=="frFR") then
+ print("Bienvenue sur Tukui V8 pour le patch 3.3 ! http://www.tukui.org")
+ print(" ")
+ print("Votre résolution:", resolution);
+ print(" ")
+ print("Votre résolution est bonne ... bon jeu !")
+ print("N'oubliez pas de taper /configure si c'est votre première utilisation.")
+ print(" ")
+ print("Pour plus d'informations, tapez /uihelp")
+ print(" ")
+ elseif(L=="deDE") then
+ print(" ")
+ print("Willkommen bei Tukui V8 für Patch 3.3 ! www.tukui.org")
+ print(" ")
+ print("Aktuelle Auflösung:", resolution);
+ print(" ")
+ print("Deine Auflösung wird unterstützt... Viel Spass !")
+ print("Nicht vergessen |cffFF0000/configure|r wenn du diese Meldung das erste mal siehst!")
+ print(" ")
+ print("Für mehr Infos |cffFF0000/uihelp|r eintippen!")
+ print(" ")
+ else
+ print(" ")
+ print("Welcome on Tukui V8 for patch 3.3 ! www.tukui.org")
+ print(" ")
+ print("Current resolution:", resolution);
+ print(" ")
+ print("Your screen resolution is supported... Enjoy !")
+ print("Don't forget to |cffFF0000/configure|r if it's the first time you use it!")
+ print(" ")
+ print("Type |cffFF0000/uihelp|r for more infos!")
+ print(" ")
+ end
+ end
+ else
+ print(resolution);
+ SetCVar("useUiScale", 0)
+ StaticPopup_Show("DISABLE_UI")
+ end
+ end)
+end
+
+local function DisableTukui()
+ DisableAddOn("Tukui");
+ ReloadUI()
+ FCF_ResetChatWindows()
+ SetCVar("chatLocked", 0)
+end
+
+
+--------------------------------------------------------------------
+-- CREDIT : FatalEntity for /configure command
+--------------------------------------------------------------------
+
+local function TukuiConfig()
+ -- Setup Basic InGame settings
+ SetCVar("useUiScale", 1)
+ SetCVar("uiScale", 768/string.match(({GetScreenResolutions()})[GetCurrentResolution()], "%d+x(%d+)"))
+ SetCVar("buffDurations", 1)
+ SetCVar("chatLocked", 1)
+ SetCVar("showClock", 0)
+ SetCVar("lootUnderMouse", 1)
+ SetCVar("scriptErrors", 0)
+ SetCVar("autoSelfCast", 1)
+ SetCVar("secureAbilityToggle", 0)
+
+ SetMultisampleFormat(1)
+
+ FCF_ResetChatWindows()
+ FCF_DockFrame(ChatFrame2)
+ FCF_OpenNewWindow("Spam")
+
+ FCF_OpenNewWindow("Loot")
+ FCF_UnDockFrame(ChatFrame4)
+ FCF_SetLocked(ChatFrame4, 1);
+ ChatFrame4:Show();
+
+
+ -- Show class colors
+ ToggleChatColorNamesByClassGroup(true, "SAY")
+ ToggleChatColorNamesByClassGroup(true, "EMOTE")
+ ToggleChatColorNamesByClassGroup(true, "YELL")
+ ToggleChatColorNamesByClassGroup(true, "GUILD")
+ ToggleChatColorNamesByClassGroup(true, "GUILD_OFFICER")
+ ToggleChatColorNamesByClassGroup(true, "GUILD_ACHIEVEMENT")
+ ToggleChatColorNamesByClassGroup(true, "ACHIEVEMENT")
+ ToggleChatColorNamesByClassGroup(true, "WHISPER")
+ ToggleChatColorNamesByClassGroup(true, "PARTY")
+ ToggleChatColorNamesByClassGroup(true, "PARTY_LEADER")
+ ToggleChatColorNamesByClassGroup(true, "RAID")
+ ToggleChatColorNamesByClassGroup(true, "RAID_LEADER")
+ ToggleChatColorNamesByClassGroup(true, "RAID_WARNING")
+ ToggleChatColorNamesByClassGroup(true, "BATTLEGROUND")
+ ToggleChatColorNamesByClassGroup(true, "BATTLEGROUND_LEADER")
+ ToggleChatColorNamesByClassGroup(true, "CHANNEL1")
+ ToggleChatColorNamesByClassGroup(true, "CHANNEL2")
+ ToggleChatColorNamesByClassGroup(true, "CHANNEL3")
+ ToggleChatColorNamesByClassGroup(true, "CHANNEL4")
+
+ -- Setup chat
+ ChatFrame_RemoveAllMessageGroups(ChatFrame1)
+ ChatFrame_AddChannel(ChatFrame3, "Trade")
+ ChatFrame_AddChannel(ChatFrame3, "General")
+ ChatFrame_AddMessageGroup(ChatFrame1, "SAY")
+ ChatFrame_AddMessageGroup(ChatFrame1, "EMOTE")
+ ChatFrame_AddMessageGroup(ChatFrame1, "YELL")
+ ChatFrame_AddMessageGroup(ChatFrame1, "GUILD")
+ ChatFrame_AddMessageGroup(ChatFrame1, "GUILD_OFFICER")
+ ChatFrame_AddMessageGroup(ChatFrame1, "GUILD_ACHIEVEMENT")
+ ChatFrame_AddMessageGroup(ChatFrame1, "WHISPER")
+ ChatFrame_AddMessageGroup(ChatFrame1, "MONSTER_SAY")
+ ChatFrame_AddMessageGroup(ChatFrame1, "MONSTER_EMOTE")
+ ChatFrame_AddMessageGroup(ChatFrame1, "MONSTER_YELL")
+ ChatFrame_AddMessageGroup(ChatFrame1, "MONSTER_WHISPER")
+ ChatFrame_AddMessageGroup(ChatFrame1, "MONSTER_BOSS_EMOTE")
+ ChatFrame_AddMessageGroup(ChatFrame1, "MONSTER_BOSS_WHISPER")
+ ChatFrame_AddMessageGroup(ChatFrame1, "PARTY")
+ ChatFrame_AddMessageGroup(ChatFrame1, "PARTY_LEADER")
+ ChatFrame_AddMessageGroup(ChatFrame1, "RAID")
+ ChatFrame_AddMessageGroup(ChatFrame1, "RAID_LEADER")
+ ChatFrame_AddMessageGroup(ChatFrame1, "RAID_WARNING")
+ ChatFrame_AddMessageGroup(ChatFrame1, "BATTLEGROUND")
+ ChatFrame_AddMessageGroup(ChatFrame1, "BATTLEGROUND_LEADER")
+ ChatFrame_AddMessageGroup(ChatFrame1, "BG_HORDE")
+ ChatFrame_AddMessageGroup(ChatFrame1, "BG_ALLIANCE")
+ ChatFrame_AddMessageGroup(ChatFrame1, "BG_NEUTRAL")
+ ChatFrame_AddMessageGroup(ChatFrame1, "SYSTEM")
+ ChatFrame_AddMessageGroup(ChatFrame1, "ERRORS")
+ ChatFrame_AddMessageGroup(ChatFrame1, "AFK")
+ ChatFrame_AddMessageGroup(ChatFrame1, "DND")
+ ChatFrame_AddMessageGroup(ChatFrame1, "IGNORED")
+ ChatFrame_AddMessageGroup(ChatFrame1, "ACHIEVEMENT")
+
+ -- Setup the spam chat frame
+ ChatFrame_RemoveAllMessageGroups(ChatFrame3)
+
+ -- Setup the right chat
+ ChatFrame_RemoveAllMessageGroups(ChatFrame4);
+ ChatFrame_AddMessageGroup(ChatFrame4, "COMBAT_XP_GAIN")
+ ChatFrame_AddMessageGroup(ChatFrame4, "COMBAT_HONOR_GAIN")
+ ChatFrame_AddMessageGroup(ChatFrame4, "COMBAT_FACTION_CHANGE")
+ ChatFrame_AddMessageGroup(ChatFrame4, "LOOT")
+ ChatFrame_AddMessageGroup(ChatFrame4, "MONEY")
+
+ -- Setup General, Trade, and LFG colors
+ ChangeChatColor("CHANNEL2", 0/255, 153/255, 204/255)
+ ChangeChatColor("CHANNEL4", 0/255, 153/255, 204/255)
+
+ ReloadUI()
+end
+
+-- Create confirmation popup
+if(L=="ruRU") then
+ StaticPopupDialogs["CONFIGURE_UI"] = {
+ text = "Tukui настройка по умолчанию. Продолжаем?",
+ button1 = ACCEPT,
+ button2 = CANCEL,
+ OnAccept = TukuiConfig,
+ timeout = 0,
+ whileDead = 1,
+ hideOnEscape = 1
+ }
+elseif(L=="frFR") then
+ StaticPopupDialogs["CONFIGURE_UI"] = {
+ text = "Appliquer les paramètres par défaut de Tukui?",
+ button1 = ACCEPT,
+ button2 = CANCEL,
+ OnAccept = TukuiConfig,
+ timeout = 0,
+ whileDead = 1,
+ hideOnEscape = 1
+ }
+elseif(L=="deDE") then
+ StaticPopupDialogs["CONFIGURE_UI"] = {
+ text = "Möchtest du wirklich die Tukui Standard Konfiguration laden?",
+ button1 = ACCEPT,
+ button2 = CANCEL,
+ OnAccept = TukuiConfig,
+ timeout = 0,
+ whileDead = 1,
+ hideOnEscape = 1
+ }
+else
+ StaticPopupDialogs["CONFIGURE_UI"] = {
+ text = "Tukui default configuration. Do you wish to proceed?",
+ button1 = ACCEPT,
+ button2 = CANCEL,
+ OnAccept = TukuiConfig,
+ timeout = 0,
+ whileDead = 1,
+ hideOnEscape = 1
+ }
+end
+
+SLASH_CONFIGURE1 = "/Configure"
+SlashCmdList["CONFIGURE"] = function() StaticPopup_Show("CONFIGURE_UI") end
+
+if(L=="ruRU") then
+ StaticPopupDialogs["DISABLE_UI"] = {
+ text = "Tukui не работает под этим разрешением, отключаем Tukui? (Cancel если желаете попробовать другое разрешение)",
+ button1 = ACCEPT,
+ button2 = CANCEL,
+ OnAccept = DisableTukui,
+ timeout = 0,
+ whileDead = 1,
+ hideOnEscape = 1
+ }
+elseif(L=="frFR") then
+ StaticPopupDialogs["DISABLE_UI"] = {
+ text = "Tukui ne fonctionne pas avec cette résolution, voulez-vous désactiver Tukui? (Annuler si vous souhaitez essayer une autre résolution)",
+ button1 = ACCEPT,
+ button2 = CANCEL,
+ OnAccept = DisableTukui,
+ timeout = 0,
+ whileDead = 1,
+ hideOnEscape = 1
+ }
+elseif(L=="deDE") then
+ StaticPopupDialogs["DISABLE_UI"] = {
+ text = "Tukui läuft nicht auf deiner Auflösung, möchtest du Tukui deaktivieren? (Abbrechen, wenn du eine andere Auflösung testen möchtest)",
+ button1 = ACCEPT,
+ button2 = CANCEL,
+ OnAccept = DisableTukui,
+ timeout = 0,
+ whileDead = 1,
+ hideOnEscape = 1
+ }
+else
+ StaticPopupDialogs["DISABLE_UI"] = {
+ text = "Tukui don't work for this resolution, do you want to disable Tukui? (Cancel if you want to try another resolution)",
+ button1 = ACCEPT,
+ button2 = CANCEL,
+ OnAccept = DisableTukui,
+ timeout = 0,
+ whileDead = 1,
+ hideOnEscape = 1
+ }
+end
+
+
+if(L=="ruRU") then
+ StaticPopupDialogs["DISABLE_RAID"] = {
+ text = "2 активных раскладки рейдовых фреймов, выберите раскладку. Введите /dps для танка/дамагера или /heal для хилера",
+ timeout = 0,
+ whileDead = 1,
+ }
+elseif(L=="frFR") then
+ StaticPopupDialogs["DISABLE_RAID"] = {
+ text = "2 modèles de raid sont actuellement actifs, tapez /dps pour activer le modèle *dps-tank* ou /heal pour activer le modèle *soin*",
+ timeout = 0,
+ whileDead = 1,
+ }
+elseif(L=="deDE") then
+ StaticPopupDialogs["DISABLE_RAID"] = {
+ text = "2 Raid Layouts sind aktiv, bitte wähle ein Layout aus. /dps für das dps-tank Raid Layout oder /heal für das Heiler Raid Layout",
+ timeout = 0,
+ whileDead = 1,
+ }
+else
+ StaticPopupDialogs["DISABLE_RAID"] = {
+ text = "2 raid layouts are active, please select a layout. Type /dps for dps-tank raid layout or /heal for healing raid layout",
+ timeout = 0,
+ whileDead = 1,
+ }
+end
+
+-- tempory fix for an error in tukui since V5
+
+function PetActionButton_OnEvent (self, event, ...)
+if ( event == "UPDATE_BINDINGS" ) then
+-- DO NOTHING, DAM STUPID ERROR THAT I WANT TO DELETE FROM BLIZZARD DEFAULT UI
+return;
+end
+end
+
+-------------------------------------------------------------------
+-- modify position of some frames
+-------------------------------------------------------------------
+
+hooksecurefunc(WatchFrame,"SetPoint",function(_,_,parent) -- quest watch frame
+ if (parent == "MinimapCluster") or (parent == _G["MinimapCluster"]) then
+ WatchFrame:ClearAllPoints();
+ WatchFrame:SetPoint("TOPRIGHT","UIParent","TOPRIGHT",qPosX,qPosY);
+ end
+end);
+
+
+hooksecurefunc(DurabilityFrame,"SetPoint",function(self,_,parent) -- durability frame
+ if (parent == "MinimapCluster") or (parent == _G["MinimapCluster"]) then
+ DurabilityFrame:ClearAllPoints();
+ DurabilityFrame:SetPoint("BOTTOM",UIParent,"BOTTOM",0,160);
+ end
+end);
+
+hooksecurefunc(VehicleSeatIndicator,"SetPoint",function(_,_,parent) -- vehicle seat indicator
+ if (parent == "MinimapCluster") or (parent == _G["MinimapCluster"]) then
+ VehicleSeatIndicator:ClearAllPoints();
+ VehicleSeatIndicator:SetPoint("BOTTOM",UIParent,"BOTTOM",0,160);
+ end
+end);
+
+------------------------------------------------------------------------
+-- UI HELP
+------------------------------------------------------------------------
+
+-- Print Help Messages
+local function UIHelp()
+ if (L=="ruRU") then
+ print(" ")
+ print("|cff00ff00Основные комманды|r")
+ print("|cffFF0000/tcdt|r - Tukui Arena Enemy Cooldown Tracker - Легкий трекер ПвП способностей врага. (Только иконка)")
+ print("|cffFF0000/rl|r - Перезагружает интерфейс пользователя.")
+ print("|cffFF0000/gm|r - Послать запрос ГМу, открывает окно помощи.")
+ print("|cffFF0000/frame|r - Определяет имя выбранного фрейма. (полезно для мододелов)")
+ print("|cffFF0000/abshow|r - Открывает правые панели.")
+ print("|cffFF0000/abhide|r - Прячет правые панели.")
+ print("|cffFF0000/abconfig|r - Показывает все спелл-бары (3, 4, 5 и панель питомца).")
+ print("|cffFF0000/setscale|r - Устанавливает пиксель-идеальный UIScale под Ваше разрешение если автоматический UIScale отключен.")
+ print("|cffFF0000/heal|r - Активирует хилерскую раскладку рейдовых фреймов. (Вам нужны oUF_Tukz_Group_heal с tukui.org для этого)")
+ print("|cffFF0000/dps|r - Активирует танк/дамагер раскладку рейдовых фреймов.")
+ print(" ")
+ print("|cff00ff00Информация:|r")
+ print("|cffFF0000>|r Правый клик по мини-карте для меню отслеживания.")
+ print("|cffFF0000>|r Средний клик по мини-карте для календаря.")
+ print("|cffFF0000>|r Левый клик по состоянию на tPanels для отображения статов персонажа.")
+ print("|cffFF0000>|r Левый клик по деньгам на tPanels для отображения сумок.")
+ print("|cffFF0000>|r Левый клик по времени на tPanels для отображения календаря. Если Вас пригласили на событие то текст времени заменяется приглашением.")
+ print("|cffFF0000>|r Левый клик по Гильдии на tPanels для отображения Гильдии.")
+ print("|cffFF0000>|r Левый клик по друзьям на tPanels для отображения друзей.")
+ print(" ")
+ print("|cff00ff00Первое использование:|r")
+ print("|cffFF0000>|r /configure автоматически настроит Tukui.")
+ elseif(L=="frFR") then
+ print("|cff00ff00Commandes Générales|r")
+ print("|cffFF0000/tcdt|r - Tukui Arena Enemy Cooldown Tracker - Suivi de sort ennemi pour arêne")
+ print("|cffFF0000/rl|r - Recharge votre interface.")
+ print("|cffFF0000/gm|r - Pour parler à un GM.")
+ print("|cffFF0000/frame|r - Détecte le nom de ce que vous pointez avec votre souris")
+ print("|cffFF0000/abshow|r - Affiche les barres de droite selon vos paramètres.")
+ print("|cffFF0000/abhide|r - Cache les barres de droite.")
+ print("|cffFF0000/abconfig|r - Affiche toutes les barres de droite pour une configuration des sorts.")
+ print("|cffFF0000/setscale|r - Change votre échelle d'interface vers une échelle adéquate avec tukui.")
+ print("|cffFF0000/heal|r - Active le modèle raid pour soigneur")
+ print("|cffFF0000/dps|r - Active le modèle raid pour les *DPS* et *Tank*.")
+ print(" ")
+ print("|cff00ff00Informations additionnelles :|r")
+ print("|cffFF0000>|r Clique droit sur la mini-carte pour afficher le menu *Suivi*.")
+ print("|cffFF0000>|r Clique du bouton milieu pour afficher le calendrier.")
+ print(" ")
+ print("|cff00ff00Première utilisation de Tukui? :|r")
+ print("|cffFF0000>|r Tapez /configure pour configurer automatiquement Tukui.")
+ elseif(L=="deDE") then
+ print(" ")
+ print("|cff00ff00Allgemeine Slash Commands|r")
+ print("|cffFF0000/tcdt|r - Tukui Arena Gegner Cooldown Anzeige - Low-memory PVP Gegner Cooldown Anzeige. (Nur Icon)")
+ print("|cffFF0000/rl|r - Läd das Interface erneut.")
+ print("|cffFF0000/gm|r - GM Tickets erstellen oder WoW in-game Hilfe zeigen.")
+ print("|cffFF0000/frame|r - Name des Frames anzeigen, über dem sich deine Maus momentan befindet.")
+ print("|cffFF0000/abshow|r - Zeige die Balken auf der rechten Seite mit deinen Einstellungen.")
+ print("|cffFF0000/abhide|r - Die Balken auf der rechten Seite verstecken.")
+ print("|cffFF0000/abconfig|r - Alle Aktionsleisten anzeigen (Leiste 3,4,5 und die Begleiter Leiste, wenn verfügbar).")
+ print("|cffFF0000/setscale|r - Ein UIScale für das Pixel Perfect Interface und deine momentane Auflösung setzten. (Wenn automatische UI Skalierung ausgeschaltet ist.")
+ print("|cffFF0000/heal|r - Heiler Raid Layout aktivieren.")
+ print("|cffFF0000/dps|r - Schadens/Tank Layout aktivieren.")
+ print(" ")
+ print("|cff00ff00Allgemeine Interface Infos :|r")
+ print("|cffFF0000>|r Rechtsklick auf die Minimap um etwas anderes zu verfolgen.")
+ print("|cffFF0000>|r Mittlere Maustaste auf die Minimap um den Kalender zu öffnen.")
+ print("|cffFF0000>|r Linksklick auf die tPanels Haltbarkeits Anzeige um Character Infos anzuzeigen.")
+ print("|cffFF0000>|r Linksklick auf die tPanels Gold Anzeige um die Taschen zu öffnen.")
+ print("|cffFF0000>|r Linksklick auf die tPanels Zeit Anzeige um den Kalender zu öffnen. Wenn ihr zu einem Ereignis eingeladen wurded, ist die Zeitanzeige mit einem Einladungs Text überschrieben.")
+ print("|cffFF0000>|r Linksklick auf die tPanels Gilden Anzeige um die Gilden-Details zu öffnen.")
+ print("|cffFF0000>|r Linksklick auf die tPanels Freundes Anzeige um die Freundes-Liste zu öffnen.")
+ print(" ")
+ print("|cff00ff00Tukui Anfänger :|r")
+ print("|cffFF0000>|r /configure um Tukui automatisch zu konfigurieren.")
+ else
+ print(" ")
+ print("|cff00ff00General Slash Commands|r")
+ print("|cffFF0000/tcdt|r - Tukui Arena Enemy Cooldown Tracker - Low-memory enemy PVP cooldown tracker. (Icon only)")
+ print("|cffFF0000/rl|r - Reloads your User Interface.")
+ print("|cffFF0000/gm|r - Send GM tickets or show WoW in-game help.")
+ print("|cffFF0000/frame|r - Detect frame name you currently mouseover. (very useful for lua editor)")
+ print("|cffFF0000/abshow|r - Show right panels with your setting.")
+ print("|cffFF0000/abhide|r - Hide right panels.")
+ print("|cffFF0000/abconfig|r - Show all bars to put your spells (bar 3,4,5 and pet if available).")
+ print("|cffFF0000/setscale|r - Set a pixel perfect UIScale for your current resolution if automatic UIScale is turned off.")
+ print("|cffFF0000/heal|r - Enable healing raid layout. (you need oUF_Tukz_Group_heal from tukui.org for this)")
+ print("|cffFF0000/dps|r - Enable Dps/Tank raid layout.")
+ print(" ")
+ print("|cff00ff00General Interface Infos :|r")
+ print("|cffFF0000>|r Rightclick the Minimap to select your current tracking.")
+ print("|cffFF0000>|r Middleclick the Minimap to show calendar.")
+ print("|cffFF0000>|r Leftclick on tPanels durability to show character stats and stuff.")
+ print("|cffFF0000>|r Leftclick on tPanels gold to show bags.")
+ print("|cffFF0000>|r Leftclick on tPanels time to show calendar. If you got an invite for an event, text time is replaced with a calendar invitation string.")
+ print("|cffFF0000>|r Leftclick on tPanels guild to show guild frame.")
+ print("|cffFF0000>|r Leftclick on tPanels friends to show friend frame.")
+ print(" ")
+ print("|cff00ff00First time tukui user :|r")
+ print("|cffFF0000>|r /configure to automatically configure Tukui.")
+ end
+end
+
+SLASH_UIHELP1 = "/UIHelp"
+SlashCmdList["UIHELP"] = UIHelp
+------------------------------------------------------------------------
+-- AUTO SCALING UI
+------------------------------------------------------------------------
+SlashCmdList["TUKZSETSCALE"] = function(scale1) Tukz_SetScale(scale1); end
+SLASH_TUKZSETSCALE1 = "/setscale";
+ function Tukz_SetScale(scale1)
+ scale1 = tonumber(scale1)
+ if (scale1 == nil) then
+ SetCVar("useUIScale",1);
+ SetCVar("uiScale", 768/string.match(({GetScreenResolutions()})[GetCurrentResolution()], "%d+x(%d+)"));
+ else
+ SetCVar("useUIScale",1);
+ SetCVar("uiScale",scale1);
+ end
+ end
+
+
+local function FRAME()
+ ChatFrame1:AddMessage(GetMouseFocus():GetName())
+end
+
+SLASH_FRAME1 = "/frame"
+SlashCmdList["FRAME"] = FRAME
+
+local function HEAL()
+ DisableAddOn("Tukui_Dps_Layout");
+ EnableAddOn("Tukui_Heal_Layout");
+ ReloadUI();
+end
+
+SLASH_HEAL1 = "/heal"
+SlashCmdList["HEAL"] = HEAL
+
+local function DPS()
+ DisableAddOn("Tukui_Heal_Layout");
+ EnableAddOn("Tukui_Dps_Layout");
+ ReloadUI();
+end
+
+SLASH_DPS1 = "/dps"
+SlashCmdList["DPS"] = DPS
+
+local function GM()
+ ToggleHelpFrame()
+end
+
+------------------------------------------------------------------------
+-- Game Master command
+------------------------------------------------------------------------
+
+SLASH_GM1 = "/gm"
+SlashCmdList["GM"] = GM
+
+------------------------------------------------------------------------
+-- ReloadUI command
+------------------------------------------------------------------------
+
+SLASH_RELOADUI1 = "/rl"
+SlashCmdList.RELOADUI = ReloadUI
+
+------------------------------------------------------------------------
+-- GM ticket fix
+------------------------------------------------------------------------
+TicketStatusFrame:ClearAllPoints()
+TicketStatusFrame:SetPoint("TOPLEFT", 0,0)
+
+
+
70 Interface/AddOns/Tukui/!Tukui_AuraWatch.lua
@@ -0,0 +1,70 @@
+
+--[[
+ This file is for adding of deleting a spellID for a specific encounter on Grid layout.
+
+ The best way to add or delete spell is to go at www.wowhead.com, search for a spell :
+ Example : Incinerate Flesh from Lord Jaraxxus -> http://www.wowhead.com/?spell=67049
+ Take the number ID at the end of the URL, and add it to the list
+
+ That's it, That's all!
+
+ Tukz
+--]]
+
+
+--------------------------------------------------------------------------------------------
+-- Grid encounter aura watch for raid
+--------------------------------------------------------------------------------------------
+
+-- Icecrown Citadel "most dangerous" spellID's addition is from Mynd from Last Resort Guild
+if raidunitdebuffwatch == true then
+ spellIDs = {
+
+ --Naxxramas
+ 27808, --Frost Blast
+ 32407, --Strange Aura
+ 28408, --Chains of Kel'Thuzad
+
+ --Ulduar
+ 66313, --Fire Bomb
+ 63134, --Sara's Blessing
+ 62717, --Slag Pot
+ 63018, --Searing Light
+ 64233, --Gravity Bomb
+ 63495, --Static Disruption
+
+ --Trial of the Crusader
+ 66406, --Snobolled!
+ 67574, --Pursued by Anub'arak
+ 68509, --Penetrating Cold
+ 67651, --Arctic Breath
+ 68127, --Legion Flame
+ 67049, --Incinerate Flesh
+ 66869, --Burning Bile
+ 66823, --Paralytic Toxin
+
+ -- Icecrown Citadel
+ 71224, --Mutilated infection
+ 71822, --Shadow resonance
+ 70447, --Ooze root lol
+ 72293, --mark-of-the-fallen-champion
+ 72448, --rune-of-blood
+ 71473, --essence-of-the-vampyr-queen
+ 71624, --delirious-slash
+ 70923, --uncontrollable-frenzy
+ 70588, --suppression
+ 71738, --corrosion
+ 71733, --acid-burst
+ 72108, --death-and-decay
+ 71289, --dominate-mind
+ 69762, --unchained-magic
+ 69651, --wounding-strike
+
+ --Other debuff
+ 6215, --Fear
+ 67479, --Impale
+
+ -- a Testing spell for tukz when coding
+ --552, -- priest abolish disease buff
+ }
+end
202 Interface/AddOns/Tukui/!Tukui_config.lua
@@ -0,0 +1,202 @@
+--[[
+ This is the file where all options is available for Tukui
+ You don't need do relaunch wow.exe after a change, just save the file and /rl in game
+--]]
+
+----------------------------------------------------------------------------------------
+-- UnitFrame options
+----------------------------------------------------------------------------------------
+
+Tukz = {oUF = {
+unitcastbar = true, -- enable castbar
+cblatency = false, -- castbar latency
+cbicons = true, -- castbar icons
+auratimer = false, -- true to enable timer aura on player or target
+auratextscale = 10, -- set font size on aura
+noPlayerAuras = true, -- true to disable oUF buffs/debuffs on the player frame
+noTargetAuras = false, -- true to disable oUF buffs/debuffs on the target frame
+scale = 1, -- scale of the unitframes (dont edit this or pixel perfect is gone)
+lowThreshold = 20, -- low mana threshold for all mana classes
+highThreshold = 80, -- high mana treshold for hunters
+targetpowerpvponly = true, -- mana text on pvp enemy target only
+totdebuffs = false, -- show tot debuff (if true, you need to move pet frame)
+playerdebuffsonly = false, -- my debuff on target only
+showfocustarget = false, -- show focus target
+showtotalhpmp = false, -- show total mana / total hp text on player and target.
+debuffcolorbytype = false, -- debuff by color type
+
+font = [=[Interface\Addons\Tukui\media\Russel Square LT.ttf]=],
+
+coords = {
+ playerX = -225,
+ playerY = 60,
+
+ targetX = 225,
+ targetY = 60,
+
+ totX = 0,
+ totY = 60,
+
+ petX = 0,
+ petY = 104,
+
+ focusX = -34,
+ focusY = 20,
+
+ foctarX = 0,
+ foctarY = 224,
+}}}
+
+-- grid options (healer mode)
+gridposX = 18 -- horizontal unit #1 position value
+gridposY = -290 -- vertical unit #1 position value
+gridposZ = "TOPLEFT" -- position grid X,Y values from
+gridonly = false -- Replace 10, 15 mans default layout by grid layout
+showsymbols = true -- for grid mode only (healer layout only)
+gridaggro = false -- show "aggro" text on grid unit if a player have aggro from a creature.
+raidunitdebuffwatch = false -- show "dangerous unit debuff" in raid on different encounter. (note: PVE SUX LOL)
+gridhealthvertical = true -- set health bar vertically on 25/40 mans layout
+
+-- extra options
+showrange = true -- show range on raid unit
+showsmooth = true -- smooth bar animation
+showthreat = true -- show target threat via tpanels left info bar
+charportrait = false -- enable portrait
+
+-- priest only plugin
+ws_show_time = false -- show time remaining on weakened soul bar
+ws_show_player = true -- show a weakened soul debuff on you
+if_warning = true -- innerfire warning icon when not active and in combat
+
+
+----------------------------------------------------------------------------------------
+-- ARENA
+----------------------------------------------------------------------------------------
+
+-- enemy cooldown tracker (mostly interrupt by default)
+-- spellIDs edit is via tcooldowntracker.lua
+arenatracker = true
+
+-- enable arena enemy unitframe, Alpha, feel free to complete finnish it if you want
+t_arena = true
+
+-- position of arena enemy unitframe (from bottom-middle screen)
+ArenaX = 252 -- position X (left/right) on UI
+ArenaY = 260 -- position Y (up/down) on UI
+
+----------------------------------------------------------------------------------------
+-- Panels config (you can't have more than 6 active panels)
+----------------------------------------------------------------------------------------
+
+-- position legend : [0=disabled] [1=leftbar, left] [2=leftbar, middle] [3=leftbar, right]
+-- position legend : [4=rightbar, left] [5=rightbar, middle] [6=rightbar, right]
+
+local myname, _ = UnitName("player")
+if myname == "Tukz" then
+ fps_ms = 5
+ mem = 4
+ armor = 2
+ gold = 0
+ wowtime = 6
+ friends = 3
+ guild = 1
+ bags = 0
+elseif myname == "Tùkz" then
+ fps_ms = 5
+ mem = 4
+ armor = 2
+ gold = 0
+ wowtime = 6
+ friends = 3
+ guild = 1
+ bags = 0
+else -- default config
+ fps_ms = 0
+ mem = 2
+ armor = 0
+ gold = 5
+ wowtime = 4
+ friends = 1
+ guild = 3
+ bags = 6
+end
+
+tfontsize = 12 -- font size of tpanels stat text
+
+bar345rightpanels = true -- show panels background on buttons, right side
+
+time24 = false -- set the local or server time in 12h or 24h mode
+localtime = true -- set local or server time
+
+tinfowidth = 370 -- set de width of left and right infos bars + chatframe width
+
+----------------------------------------------------------------------------------------
+-- Action bars options
+----------------------------------------------------------------------------------------
+
+ -- use tukz action bars ?
+ tukbars = true
+
+ -- number of bars you want to show on the right side?
+ rightbarnumber = 0 -- (need to be set at : 0, 1, 2 or 3)
+
+ -- right bars and pet on mouseover ?
+ rightbars_on_mouseover = 0 -- 1 if you want mouseover
+
+ -- space between button
+ padding = 4
+ petpadding = -4 --(negative numbers because petbar it set to vertical instead of horizontal)
+ stancepadding = 1
+
+ -- shapeshift
+ move_shapeshift = 1
+ lock_shapeshift = 0
+ hide_shapeshift = 0
+
+ -- scale values
+ bar1scale = 1 * 0.72
+ bar2scale = 1 * 0.72
+ bar3scale = 0.8
+ bar45scale = 0.8
+ petscale = 1
+ shapeshiftscale = 1
+
+ -- hide hot key?
+ hide_hotkey = 1
+
+----------------------------------------------------------------------------------------
+-- Tooltip options
+----------------------------------------------------------------------------------------
+
+mouseover_units = false -- show players, world objects, etc on mouseover
+hide_units = false -- always hide only units (npc, players, etc)
+hide_units_combat = false -- hide units if in combat (useful when mouseover is active)
+hide_all_tooltips = false -- i don't recommend enabling this, this was a only request for a friend
+
+ttposX = -32 -- LEFT(-) and RIGHT(+) position via posZ anchor
+ttposY = 48 -- UP(+) and DOWN(-) position via posZ anchor
+ttposZ = "BOTTOMRIGHT" -- align to
+
+----------------------------------------------------------------------------------------
+-- Minimap options
+----------------------------------------------------------------------------------------
+
+minimapposition = "TOPRIGHT"
+minimapposition_x = -22
+minimapposition_y = -22
+
+----------------------------------------------------------------------------------------
+-- QUEST WATCH FRAME DEFAULT POSITION
+----------------------------------------------------------------------------------------
+
+-- default position from topright
+qPosX = -300
+qPosY = -300
+
+----------------------------------------------------------------------------------------
+-- General options
+----------------------------------------------------------------------------------------
+
+AutoScale = true -- enable auto-scale and auto-detect comptability of Tukui
+LoginMsg = true -- enable login msg
+ChatLock = true -- chat locked with Tukui setting? (you need to restart wow)
62 Interface/AddOns/Tukui/Tukui.toc
@@ -0,0 +1,62 @@
+## Interface: 30300
+## Author: Tukz
+## Version: 8.04
+## Title: |cffC495DDTukui|r
+## Notes: UI of awesomeness!
+## SavedVariables: tCooldownTracker_Saved
+## X-oUF: oUF
+
+translateplz.lua
+!Tukui_config.lua
+!Tukui.lua
+!Tukui_AuraWatch.lua
+combatfont.lua
+nameplates.lua
+cargbag_core.lua
+cargbag_helpers.lua
+cargbag_handler.lua
+keys\basic.lua
+keys\tooltip.lua
+plugins\bagbar.lua
+plugins\databroker.lua
+plugins\money.lua
+plugins\purchase.lua
+plugins\space.lua
+cargbag_Config.lua
+cargbag_layout.lua
+ncError.lua
+omnicc.lua
+oUF.xml
+oUF_Smooth.lua
+oUF_AuraWatch.lua
+oUF_DebuffHighlight.lua
+oUF_Experience.lua
+oUF_MoveableFrames.lua
+oUF_Reputation.lua
+oUF_ThreatBar.lua
+oUF_Tukz_Tags.lua
+oUF_Tukz_Main.lua
+oUF_Tukz_WeakenedSoul.lua
+rActionButtonStyler.lua
+sGroupLoot.lua
+tActionBars.lua
+tAutoAcceptInvite.lua
+tAutoInvite.lua
+tAutoInvite.xml
+tAutoRepair.lua
+tAutoSellJunk.lua
+tBuffs.lua
+tChat.lua
+tCombo.lua
+tCombo.xml
+tCooldownTracker.lua
+tInnerFire.lua
+tLoot.lua
+tMark.lua
+tMinimap.lua
+tPanels.lua
+translateplz.lua
+tTell.lua
+tTell.xml
+tTooltip.lua
+arena_focus.lua
38 Interface/AddOns/Tukui/arena_focus.lua
@@ -0,0 +1,38 @@
+-- this file is to set a focus without always typing /focus on unit.
+-- the main usage for this mini mod is for my ouf_tukz arena, but it also work when you mouseover a target
+
+-- default key to set focus on arena frame or mousever unit is "shift + mouse button 2 (right one)"
+
+local modifier = "shift" -- shift, alt or ctrl
+local mouseButton = "3" -- 1 = left, 2 = right, 3 = middle, 4 and 5 = thumb buttons if there are any
+
+local function SetFocusHotkey(frame)
+ frame:SetAttribute(modifier.."-type"..mouseButton,"focus")
+end
+
+local function CreateFrame_Hook(type, name, parent, template)
+ if template == "SecureUnitButtonTemplate" then
+ SetFocusHotkey(_G[name])
+ end
+end
+
+hooksecurefunc("CreateFrame", CreateFrame_Hook)
+
+-- Keybinding override so that models can be shift/alt/ctrl+clicked
+local f = CreateFrame("CheckButton", "FocuserButton", UIParent, "SecureActionButtonTemplate")
+f:SetAttribute("type1","macro")
+f:SetAttribute("macrotext","/focus mouseover")
+SetOverrideBindingClick(FocuserButton,true,modifier.."-BUTTON"..mouseButton,"FocuserButton")
+
+-- Set the keybindings on the default unit frames since we won't get any CreateFrame notification about them
+local duf = {
+ oUF_Arena1,
+ oUF_Arena2,
+ oUF_Arena3,
+ oUF_Arena4,
+ oUF_Arena5,
+}
+
+for i,frame in pairs(duf) do
+ SetFocusHotkey(frame)
+end
12 Interface/AddOns/Tukui/cargbag_Config.lua
@@ -0,0 +1,12 @@
+cargBags_Gnomed = {}
+cargBags_Gnomed.Config = {
+ ButtonGlow = true,
+ -- Columns
+ KeyringColumns = 8,
+ BankColumns = 14,
+ DefaultColumns = 8,
+ --Scale
+ DefaultScale = 0.8,
+ KeyringScale = 1,
+}
+
592 Interface/AddOns/Tukui/cargbag_core.lua
@@ -0,0 +1,592 @@
+--[[
+ Copyright (C) 2009 Constantin Schomburg
+
+ This file is part of cargBags.
+
+ cargBags 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 3 of the License, or
+ (at your option) any later version.
+
+ cargBags 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 cargBags. If not, see <http://www.gnu.org/licenses/>.
+]]
+
+--[[doc
+cargBags Core
+
+Description:
+ The main core used for bag organizing and filtering, it is the connection between handler, plugins and layout
+
+Spawn with:
+ cargBags:Spawn(name, parentFrame): Create a new bag object
+
+cargBags functions:
+ :Spawn(name, parentFrame): Create a new bag object
+ :RegisterStyle(name, func): Register a new layout for use
+ :SetActiveLayout(name): Set the active layout
+ :RegisterHandler(name, handler, ...): Register a new handler, additional options are passed to handler:Enable()
+ :SetActiveHandler(name, ...): Set the active handler, additional options are passed to handler:Enable()
+ :GetHandler(): Returns the currently active handler
+ :GetItemInfo(bagID, slotID): Returns a table with all item info of the specified slot
+ :RegisterPlugin(name, func): Registers a new plugin, the function is called when the plugin needs to be created
+ :AddCallback(object, func): Registers a callback for an object to be notified when the bags are updated
+
+cargBags properties:
+ .ItemKeys: table of all custom itemdata-functions
+ .PositionEveryTime: Boolean whether UpdateButtonPositions should be called every time (default = nil)
+ .Version: version number of cargBags
+
+cargBags storage tables: (do not modify them!)
+ .Bags: table of all bags, their slots and used buttons
+ .Handler: table of all handlers
+ .Objects: table of all spawned objects
+ .Plugins: table of all plugins
+ .TempButtons: table of all buttons currently unused
+
+cargBags callback functions:
+ :PreUpdateBags(event, bagID, slotID): fired before the objects are updated (filters added, item buttons updated)
+ :PostUpdateBags(event, bagID, slotID): fired after the objects are updated (filters added, item buttons updated)
+ :PreCheckFilters(item, updateType): fired before the filters of an item are checked
+
+Bag object functions:
+ :SpawnPlugin(name, ...): Spawn a plugin for use in the layout, parameters are plugin-specific
+ :IterateButtons(): Creates an iterator over all item buttons for use within a for-loop [overwritable]
+ :GetItemInfo(bagID, slotID): Returns a table with all item info of the specified slot
+ :GetHandler(): Returns the currently active handler, provided from cargBags for convenience
+ :CheckFilters(item): Returns if the item table fits into this bag object [overwritable]
+ :SetFilter(func, state): Sets the state for the filter function (true: enabled, nil: disabled, -1: inverted; Default: nil)
+ :Fire(callback, ...): Fires the function in the object named callback with the arguments
+
+Bag object callback functions:
+ :PostCreateBag(bag, bagID): fired after a bag was created in the object
+ :PostAddButton(button): fired after a button was added/moved to the object
+ :PostRemoveButton(button): fired after a button was removed from the object
+ :UpdateButton(button, item, updateType): fired if a button needs to be updated
+ :UpdateButtonLock(button, i, updateType): fired if a button's lock needs to be updated
+ :UpdateButtonCooldown(button, i, updateType): fired if a button's' cooldown needs to be updated
+ :UpdateButtonPositions(): fired if the button positions need to be updated, typically after adding/removing buttons from the object
+doc]]
+
+local DEBUG = nil
+-- if set to true:
+-- button-history in .History
+-- saved item data in button.i,
+-- button:Recheck() for re-checking the filters
+-- output update time in chat
+
+local _G = getfenv(0)
+local select = select
+local type = type
+
+-- add-on object
+local cargBags = CreateFrame("Frame", "cargBags")
+
+local Prototype = CreateFrame"Button"
+local metatable = {__index = Prototype}
+
+local print = function(a) ChatFrame1:AddMessage("|cffee8800cargBags:|r "..tostring(a)) end
+local error = function(...) print("|cffff0000Error:|r "..string.format(...)) end
+
+local styles, style = {}
+local objects = {}
+local bags = {}
+local handlers, handler = {}
+local tempButtons = {}
+local callbacks = {}
+local plugins = {}
+local init = true
+
+
+
+--[[##############################
+ Callback functions
+ Because programmers are lazy
+################################]]
+
+-- Tries to call an object's function if it exists
+local function fire(object, callback, ...)
+ if(not object or not object[callback]) then return end
+ --debug(object.GetName and object:GetName(), callback)
+ object[callback](object, ...)
+end
+
+-- Tries to call the functions of all objects
+local function fireAll(callback, ...)
+ for _, object in ipairs(objects) do
+ fire(object, callback, ...)
+ end
+end
+
+-- Calls the functions from the callbacks-table
+local function fireCallbacks(...)
+ for object, func in pairs(callbacks) do
+ func(object, ...)
+ end
+end
+
+
+
+--[[##############################
+ Registering/enabling functions
+ Here you can register styles, plugins and handlers
+################################]]
+
+-- Register a style
+function cargBags:RegisterStyle(name, func)
+ if(type(name) ~= "string") then return error("Bad argument #1 to 'RegisterStyle' (string expected, got %s)", type(name)) end
+ if(type(func) ~= "table" and type(getmetatable(func).__call) ~= "function") then return error("Bad argument #2 to 'RegisterStyle' (table expected, got %s)", type(func)) end
+ if(styles[name]) then return error("Style [%s] already registered.", name) end
+ if(not style) then style = name end
+
+ styles[name] = func
+end
+
+-- Set the active style
+function cargBags:SetActiveStyle(name, noVerbose)
+ if(type(name) ~= "string") then return error("Bad argument #1 to 'SetActiveStyle' (string expected, got %s)", type(name)) end
+ if(not styles[name]) then return not noVerbose and error("Style [%s] does not exist.", name) end
+
+ style = name
+ return true
+end
+
+-- Register a handler
+function cargBags:RegisterHandler(name, func, ...)
+ if(type(name) ~= "string") then return error("Bad argument #1 to 'RegisterHandler' (string expected, got %s)", type(name)) end
+ if(type(func) ~= "table") then return error("Bad argument #2 to 'RegisterHandler' (table expected, got %s)", type(func)) end
+ if(handlers[name]) then return error("Handler [%s] already registered.", name) end
+ if(not handler) then
+ handler = func
+ fire(handler, "Enable", ...)
+ end
+
+ handlers[name] = func
+end
+
+-- Set the active handler
+function cargBags:SetActiveHandler(name, noVerbose, ...)
+ if(type(name) ~= "string") then return error("Bad argument #1 to 'SetActiveHandler' (string expected, got %s)", type(name)) end
+ if(not handlers[name]) then return not noVerbose and error("Handler [%s] does not exist.", name) end
+
+ fire(handler, "Disable")
+ handler = handlers[name]
+ fire(handler, "Enable", ...)
+ if(not init) then self:UpdateBags() end
+ return true
+end
+
+-- Register a plugin
+function cargBags:RegisterPlugin(name, func)
+ if(type(name) ~= "string") then return error("Bad argument #1 to 'RegisterPlugin' (string expected, got %s)", type(name)) end
+ if(type(func) ~= "function") then return error("Bad argument #2 to 'RegisterPlugin' (function expected, got %s)", type(func)) end
+ if(plugins[name]) then return error("Plugin [%s] already registered.", name) end
+ plugins[name] = func
+end
+
+-- Spawn a plugin
+function cargBags:SpawnPlugin(name, ...)
+ if(type(name) ~= "string") then return error("Bad argument #1 to 'SpawnPlugin' (string expected, got %s)", type(name)) end
+ local plugin
+ if(plugins[name]) then
+ plugin = plugins[name](self, ...)
+ end
+ if(plugin and not self[name]) then self[name] = plugin end
+ return plugin
+end
+
+-- Add a callback for UpdateBags()
+function cargBags:AddCallback(object, func)
+ if(type(object) ~= "table") then return error("Bad argument #1 to 'AddCallback' (table expected, got %s)", type(name)) end
+ if(type(func) ~= "function") then return error("Bad argument #2 to 'AddCallback' (function expected, got %s)", type(func)) end
+ callbacks[object] = func
+end
+
+-- Get the currently active handler
+function cargBags:GetHandler()
+ return handler
+end
+
+-- Spawn a new bag object
+function cargBags:Spawn(name, ...)
+
+ if(not name) then return error("Unable to create frame. No name was defined.") end
+ if(not style) then return error("Unable to create frame. No styles have been registered.") end
+ if(not handler) then return error("Unable to create frame. No handlers have been registered.") end
+
+ local style = styles[style]
+ local object = CreateFrame("Button", name, parent or UIParent)
+
+ object = setmetatable(object, metatable)
+
+ object.Name = name
+ object.Bags = {}
+ object.Buttons = {}
+ object.NumButtons = 0
+
+ object.Filters = {}
+ object.updateNeeded = true
+ object.Init = true
+
+ style(object, name, ...)
+ fire(handler, "Init", object, name, ...)
+
+ objects[#objects+1] = object
+
+ return object
+end
+
+local Recheck
+if(DEBUG) then
+ Recheck = function(button)
+ if(self.Object) then return self.Object:CheckFilters(self.i) end
+ end
+end
+
+--[[##############################
+ Button-recycling functions
+ where the buttons are created, moved and deleted
+################################]]
+
+-- Remove a button and insert it in the temporary storage
+local function recycleButton(button)
+ if(DEBUG) then tinsert(button.history, "Recycled") end
+ local tpl, bagID, slotID = button.template, button.bagID, button.slotID
+ if(not bags[bagID]) then bags[bagID] = {} end
+ bags[bagID][slotID] = nil
+ button:Hide()
+ if(not tempButtons[tpl]) then tempButtons[tpl] = {} end
+ tinsert(tempButtons[tpl], button)
+end
+
+-- Create a button with the defined template or
+-- fetch it from the temporary storage
+local slots = 0
+local function createButton(tpl, bagID, slotID)
+ local button
+ if(tempButtons[tpl] and #tempButtons[tpl] > 0) then
+ button = tremove(tempButtons[tpl])
+ else
+ slots = slots+1
+ local name = "cargBagsSlot"..slots
+ button = handler:CreateButton(tpl, name)
+ button.Name = name
+ button.template = tpl
+ if(DEBUG) then button.history = { "Created" } button.Recheck = Recheck end
+ end
+
+ button:SetID(slotID)
+ button.slotID = slotID
+ button.bagID = bagID
+ bags[bagID][slotID] = button
+
+ return button
+end
+
+-- Create a 'parent bag' for the bag object
+local function createObjectBag(object, bagID)
+ local bag = CreateFrame("Frame", nil, object)
+ bag.Size = 0
+ bag:SetID(bagID)
+ object.BagsLowest = object.BagsLowest == nil and bagID or min(object.BagsLowest or 0, bagID)
+ object.BagsHighest = object.BagsHighest == nil and bagID or max(object.BagsHighest or 0, bagID)
+ object.Bags[bagID] = bag
+ fire(object, "PostCreateBag", bag, bagID)
+ return bag
+end
+
+-- Move a button to the specified bag object or
+-- recycle it if the object is nil
+local function move(button, object)
+ local bagID, slotID = button.bagID, button.slotID
+ local oldObject = button.Object
+ if(object == oldObject and object ~= nil) then return true end
+ if(DEBUG) then tinsert(button.history, "Moved from "..(oldObject and oldObject.Name or "").." to "..(object and object.Name or "")) end
+
+ if(oldObject) then
+ if(oldObject == object) then return true end
+ oldObject.Buttons[button] = nil
+ oldObject.NumButtons = oldObject.NumButtons - 1
+ oldObject.updateNeeded = true
+ fire(oldObject, "PostRemoveButton", button)
+ end
+
+ button.Object = object
+ if(not object) then return recycleButton(button) end
+
+ local bag = object.Bags[bagID] or createObjectBag(object, bagID)
+ button:SetParent(bag)
+ button:Show()
+ object.Buttons[button] = true
+ object.NumButtons = object.NumButtons + 1
+ object.updateNeeded = true
+ fire(object, "PostAddButton", button)
+ return true
+end
+
+-- get the right button from the button table or create one
+local function getButton(bagID, slotID, noCreate)
+ local tpl = handler:GetButtonTemplateName(bagID, slotID)
+ if(not bags[bagID]) then bags[bagID] = {} end
+ if(bags[bagID][slotID]) then
+ local button = bags[bagID][slotID]
+ if(button.template == tpl) then
+ return button
+ else
+ move(button, nil)
+ end
+ end
+ return not noCreate and createButton(tpl, bagID, slotID)
+end
+
+
+
+--[[##############################
+ Core filter logic
+ Check for filters and update slots
+################################]]
+
+-- Ask all objects if the button can go into them
+-- and move it to the first one where it fits
+local function checkButtonObject(i)
+ local bagID = i.bagID
+ for _, object in ipairs(objects) do
+ if(not (object.Bags[bagID] and object.Bags[bagID].Hidden) and object:CheckFilters(i)) then
+ local button = getButton(bagID, i.slotID)
+ if(DEBUG) then
+ local x = {}
+ for k,v in pairs(i) do x[k] = v end
+ button.i = x
+ x.object = object
+ tinsert(button.history, "Passed filters: "..object.Name)
+ end
+ return move(button, object)
+ end
+ end
+ return nil
+end
+
+local i_keys = {}
+local i = setmetatable({}, {__index = function(i, k) if(i_keys[k]) then return i_keys[k](i, k) end end})
+
+function cargBags:GetItemInfo(bagID, slotID)
+ for k in pairs(i) do i[k] = nil end
+ i.bagID, i.slotID = bagID, slotID
+ handler:LoadItemInfo(i)
+ if(i.clink) then
+ i.name, i.link, i.rarity, i.level, i.minLevel, i.type, i.subType, i.stackCount, i.equipLoc, i.texture, i.sellValue = GetItemInfo(i.clink)
+ end
+ fire(cargBags, "PreCheckFilters", i)
+ return i
+end
+
+local LOCK, CD = 1, 2
+-- First fetch the item data from the handler, then check if the filters
+-- are right, and then let the layout update the button
+local function updateSlot(bagID, slotID, updateType)
+ local button = getButton(bagID, slotID, true)
+ local object = button and button.Object
+ if(object and object.Bags[bagID].Hidden) then
+ return move(button, nil)
+ end
+
+ cargBags:GetItemInfo(bagID, slotID)
+
+ if((updateType and object) or (not updateType and checkButtonObject(i))) then
+ button = getButton(bagID, slotID, true)
+ object = button.Object
+ if(DEBUG and updateType ~= CD) then tinsert(button.history, "Holding: "..(i.link or "")) end
+ if(not updateType) then fire(object, "UpdateButton", button, i, updateType) end
+ if(updateType ~= CD) then fire(object, "UpdateButtonLock", button, i, updateType) end
+ if(updateType ~= LOCK) then fire(object, "UpdateButtonCooldown", button, i, updateType) end
+ fire(object, "PostUpdateButton", button, i, updateType)
+ elseif(button) then
+ move(button, nil)
+ end
+end
+
+-- Update all slots of this bag
+local function updateBag(bagID, updateType)
+ if(not bags[bagID]) then bags[bagID] = {} end
+ local bag = bags[bagID]
+ local prevSlots = bag.slots or 0
+ local numSlots = handler.GetContainerNumSlots(bagID)
+ _, bag.bagType = handler.GetContainerNumFreeSlots(bagID)
+ bag.slots = numSlots
+
+ for slotID=1, max(prevSlots, numSlots) do
+ if(slotID <= numSlots) then
+ updateSlot(bagID, slotID, updateType)
+ elseif(bag[slotID]) then
+ move(bag[slotID], nil)
+ end
+ end
+end
+
+
+
+--[[##############################
+ The main update function
+ Here begins and ends the function-switching
+################################]]
+
+local bagclosed
+local timedBags = {}
+-- Update bags one frame later
+cargBags:SetScript("OnUpdate", function(self)
+ self:Hide()
+ self:UpdateBags("CB_TIMED")
+end)
+
+-- This activates the update checking
+local function timeBag(bagID)
+ timedUpdate = true
+ timedBags[bagID] = true
+ cargBags:Show()
+end
+
+-- The main update routine, handles ... umm... everything
+function cargBags:UpdateBags(event, bagID, slotID)
+ if(init) then init = nil end
+ local start = GetTime()
+ --debug(event, bagID, slotID) end
+
+ -- Some event handling
+ local updateType
+ -- Update either the bank slot or the bank bag
+ if(event == "PLAYERBANKSLOTS_CHANGED") then
+ if(bagID <= NUM_BANKGENERIC_SLOTS) then
+ slotID = bagID
+ bagID = -1
+ else
+ return timeBag(bagID-NUM_BANKGENERIC_SLOTS)
+ end
+ -- Only update item lock info
+ elseif(event == "ITEM_LOCK_CHANGED") then
+ updateType = LOCK
+ -- Only update cooldown info
+ elseif(event == "BAG_UPDATE_COOLDOWN") then
+ updateType = CD
+ -- Only update callbacks
+ elseif(event == "PLAYER_MONEY") then
+ return fireCallbacks(event, bagID, slotID)
+ -- schedule updating after closed bag
+ elseif(event == "BAG_CLOSED") then
+ bagclosed = bagID
+ return
+ elseif(bagclosed) then
+ bagclosed, bagID, slotID = nil
+ -- fake event for hiding bags
+ elseif(event == "CB_BAG_HIDDEN") then
+ bagID.updateNeeded = true -- Well, it's actually an object
+ bagID = slotID
+ slotID = nil
+ elseif(event == "BAG_UPDATE" and bagID) then
+ return timeBag(bagID)
+ elseif(event == "PLAYER_LOGIN") then
+ timeBag(0)
+ timeBag(-2)
+ return fireCallbacks(event, bagID, slotID)
+ end
+
+ -- Now start with updating the bags
+ fireAll("PreUpdateBags", event, bagID, slotID)
+
+ if(bagID and slotID) then
+ updateSlot(bagID, slotID, updateType)
+ elseif(bagID) then
+ updateBag(bagID, updateType)
+ elseif(timedUpdate) then
+ for id, update in pairs(timedBags) do
+ if(update) then
+ updateBag(id)
+ timedBags[id] = nil
+ end
+ end
+ timedUpdate = nil
+ else
+ for i = -2, (NUM_BAG_SLOTS+NUM_BANKBAGSLOTS) do
+ updateBag(i, updateType)
+ end
+ end
+
+ -- Lots of PostUpdate-callbacks
+ for _, object in ipairs(objects) do
+ if(object.updateNeeded or object.PositionEveryTime) then fire(object, "UpdateButtonPositions", event, bagID, slotID) object.updateNeeded = nil end
+ fire(object, "PostUpdateBags", event, bagID, slotID)
+ if(object.Init) then object.Init = nil end
+ end
+
+ -- The plugins want, too
+ fireCallbacks(event, bagID, slotID)
+ if(DEBUG) then print(format("%.3f", GetTime()-start)) end
+end
+
+
+
+--[[##############################
+ Functions of the bag object
+ THEY R EVIL!!!!1111
+################################]]
+
+-- Check if the passed item data can go into this object
+function Prototype:CheckFilters(item)
+ for Filter, enabled in pairs(self.Filters) do
+ if(enabled and (Filter(item, self) ~= true) ~= (enabled == -1)) then
+ return nil
+ end
+ end
+ return true
+end
+
+-- Set a filter for the object
+function Prototype:SetFilter(filter, enabled, noUpdate)
+ self.Filters[filter] = enabled
+ if(not self.Init and not noUpdate) then cargBags:UpdateBags() end
+end
+
+
+-- The function for iterating the bags
+-- it ensures that the buttons are placed in the right order
+-- how they are in the Blizz bags
+local iTable = {}
+local iSort = function(a,b)
+ return a.bagID == b.bagID and a.slotID < b.slotID or a.bagID < b.bagID
+end
+
+-- And now the function returning the iterator
+local dummy = function() end
+function Prototype:IterateButtons(func)
+ local i = 1
+ for button, _ in pairs(self.Buttons) do
+ iTable[i] = button
+ i = i + 1
+ end
+ while(iTable[i]) do
+ iTable[i] = nil
+ i = i + 1
+ end
+ sort(iTable, func or iSort)
+
+ return next, iTable
+end
+
+Prototype.GetItemInfo = cargBags.GetItemInfo
+Prototype.SpawnPlugin = cargBags.SpawnPlugin
+Prototype.GetHandler = cargBags.GetHandler
+Prototype.Fire = fire
+
+cargBags.Bags = bags
+cargBags.Fire = fire
+cargBags.FireAll = fireAll
+cargBags.Handler = handlers
+cargBags.TempButtons = tempButtons
+cargBags.Objects = objects
+cargBags.Plugins = plugins
+cargBags.ItemKeys = i_keys
+cargBags.Version = GetAddOnMetadata("cargBags", "Version")
108 Interface/AddOns/Tukui/cargbag_handler.lua
@@ -0,0 +1,108 @@
+--[[
+ Copyright (C) 2009 Constantin Schomburg
+
+ This file is part of cargBags.
+
+ cargBags 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 3 of the License, or
+ (at your option) any later version.
+
+ cargBags 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 cargBags. If not, see <http://www.gnu.org/licenses/>.
+]]
+
+--[[doc
+Handler: Standard
+
+Description:
+ Provides item and container information for cargBags
+
+Pipe functions:
+ See Blizz-API for complete syntax, you should provide these as default:
+ GetContainerNumSlots
+ GetContainerNumFreeSlots
+ GetContainerItemInfo
+ GetContainerItemLink
+ GetInventoryItemLink
+ GetInventoryItemTexture
+ GetNumBankSlots
+ GetMoney
+
+Callback functions:
+ :Enabled(): called when this handler was enabled
+ :Disable(): called when this handler was disabled
+ template = :GetButtonTemplate(bagID, slotID): Return the needed template for this button
+ button = :CreateButton(template, name): Return an item button with the passed name and template type
+ :LoadItemInfo(item): Write all available item data into the passed table
+ .BagSlotButton_OnEnter(button): called when a bag slot is entered by the mouse cursor
+ success = .PutItemInBag(bagID, slotID): Puts the item from the cursor in the selected container
+ PickupBagFromSlot(bagID, slotID): called when a bag should be picked from its bag slot
+doc]]
+
+local handler = CreateFrame"Frame"
+handler.GetContainerNumSlots = GetContainerNumSlots
+handler.GetContainerNumFreeSlots = GetContainerNumFreeSlots
+handler.GetContainerItemInfo = GetContainerItemInfo
+handler.GetContainerItemLink = GetContainerItemLink
+handler.PutItemInBag = PutItemInBag
+handler.BagSlotButton_OnEnter = BagSlotButton_OnEnter
+handler.PickupBagFromSlot = PickupBagFromSlot
+handler.GetInventoryItemLink = GetInventoryItemLink
+handler.GetInventoryItemTexture = GetInventoryItemTexture
+handler.GetNumBankSlots = GetNumBankSlots
+handler.GetMoney = GetMoney
+
+handler:SetScript("OnEvent", function(self, event, ...) cargBags:UpdateBags(event, ...) end)
+
+-- Enable the handler ...
+function handler:Enable()
+ self:RegisterEvent"PLAYER_LOGIN"
+ self:RegisterEvent"BAG_UPDATE"
+ self:RegisterEvent"ITEM_LOCK_CHANGED"
+ self:RegisterEvent"BAG_UPDATE_COOLDOWN"
+ self:RegisterEvent"BANKFRAME_OPENED"
+ self:RegisterEvent"PLAYERBANKSLOTS_CHANGED"
+ self:RegisterEvent"PLAYERBANKBAGSLOTS_CHANGED"
+ self:RegisterEvent"BAG_CLOSED"
+ self:RegisterEvent"PLAYER_MONEY"
+end
+
+-- ... and disable it
+handler.Disable = handler.UnregisterAllEvents
+
+-- Which button template is needed?
+function handler:GetButtonTemplateName(bagID, slotID)
+ if(bagID == BANK_CONTAINER) then
+ return "BankItemButtonGenericTemplate"
+ else
+ return "ContainerFrameItemButtonTemplate"
+ end
+end
+
+-- Create an item button with the defined template and name
+function handler:CreateButton(template, name)
+ local button = CreateFrame("Button", name, nil, template)
+ button.Count = _G[name.."Count"]
+ button.Icon = _G[name.."IconTexture"]
+ button.Cooldown = _G[name.."Cooldown"]
+ button.NormalTexture = _G[name.."NormalTexture"]
+ button:SetHeight(37)
+ button:SetWidth(37)
+ return button
+end
+
+function handler:LoadItemInfo(i)
+ local bagID, slotID = i.bagID, i.slotID
+ i.clink = GetContainerItemLink(bagID, slotID)
+ i.texture, i.count, i.locked, i.quality, i.readable = GetContainerItemInfo(bagID, slotID)
+ i.cdStart, i.cdFinish, i.cdEnable = GetContainerItemCooldown(bagID, slotID)
+end
+
+-- Register the handler
+cargBags:RegisterHandler("Standard", handler)
57 Interface/AddOns/Tukui/cargbag_helpers.lua
@@ -0,0 +1,57 @@
+--[[
+ Copyright (C) 2009 Constantin Schomburg
+
+ This file is part of cargBags.
+
+ cargBags 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 3 of the License, or
+ (at your option) any later version.
+
+ cargBags 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 cargBags. If not, see <http://www.gnu.org/licenses/>.
+]]
+
+local bagStrings = {
+ ["backpack"] = { 0 },
+ ["bags"] = { 1, 2, 3, 4 },
+ ["backpack+bags"] = { 0, 1, 2, 3, 4, },
+ ["bankframe"] = { -1 },
+ ["bank"] = { 5, 6, 7, 8, 9, 10, 11 },
+ ["bankframe+bank"] = { -1, 5, 6, 7, 8, 9, 10, 11 },
+ ["keyring"] = { -2 },
+}
+cargBags.BagStrings = bagStrings
+
+-- Some helper function for standardized bag-strings
+function cargBags:ParseBags(bags)
+ if(type(bags) == "table") then return bags end
+ if(bagStrings[bags]) then return bagStrings[bags] end
+ local min, max = bags and bags:match("(%d+)-(%d+)")
+ if(min) then
+ local t = {}
+ for i=min, max do
+ t[#t+1] = i
+ end
+ return t
+ end
+ return tonumber(bags) and {tonumber(bags)}
+end
+
+
+
+
+-- ContainerID to InventoryID
+function cargBags.C2I(id)
+ return ContainerIDToInventoryID(id)
+end
+
+-- InventoryID to ContainerID (the hackish way)
+function cargBags.I2C(id)
+ return (id < 24 and id-19) or (id > 67 and id-63)
+end
818 Interface/AddOns/Tukui/cargbag_layout.lua
@@ -0,0 +1,818 @@
+--[[
+TODO
+ -- Bank filtering
+ -- Collapsing if the bag is hidden
+]]--
+
+-- Install the config
+local db = cargBags_Gnomed.Config
+
+
+local L = {}
+local gl = GetLocale()
+if gl == "enGB" or gl == "enUS" then
+ L.Armor = "Armor"
+ L.Weapon = "Weapon"
+ L.Gem = "Gem"
+ L.Trades = "Trade Goods"
+ L.Consumables = "Consumable"
+ L.Quest = "Quest"
+elseif gl == "frFR" then
+ L.Armor = "Armure"
+ L.Weapon = "Arme"
+ L.Gem = "Gemme"
+ L.Trades = "Artisanat"
+ L.Consumables = "Consommable"
+ L.Quest = "Quête"
+elseif gl == "ruRU" then
+ L.Armor = "Доспехи"
+ L.Weapon = "Оружие"
+ L.Gem = "Самоцветы"
+ L.Trades = "Хозяйственные товары"
+ L.Consumables = "Расходуемые"
+ L.Quest = "Задания"
+elseif gl == "zhTW" then
+ L.Armor = "護甲"
+ L.Weapon = "武器"
+ L.Gem = "珠寶"
+ L.Trades = "商品"
+ L.Consumables = "消耗品"
+ L.Quest = "任務"
+elseif gl == "zhCN" then
+ L.Armor = "护甲"
+ L.Weapon = "武器"
+ L.Gem = "珠宝"
+ L.Trades = "商品"
+ L.Consumables = "消耗品"
+ L.Quest = "任务"
+elseif gl == "deDE" then
+ L.Armor = "Rüstung"
+ L.Weapon = "Waffe"
+ L.Gem = "Juwelen"
+ L.Trades = "Handwerkswaren"
+ L.Consumables = "Verbrauchbar"
+ L.Quest = "Quest"
+elseif gl == "koKR" then
+ L.Armor = "방어구"
+ L.Weapon = "무기"
+ L.Gem = "보석"
+ L.Trades = "직업용품"
+ L.Consumables = "소비용품"
+ L.Quest = "퀘스트"
+end
+
+
+-- This function is only used inside the layout, so the cargBags-core doesn't care about it
+-- It creates the border for glowing process in UpdateButton()
+local createGlow = function(button)
+ local glow = button:CreateTexture(nil, "OVERLAY")
+ glow:SetTexture"Interface\\Buttons\\UI-ActionButton-Border"
+ glow:SetBlendMode"ADD"
+ glow:SetAlpha(.8)
+ glow:SetWidth(70)
+ glow:SetHeight(70)
+ glow:SetPoint("CENTER", button)
+ button.Glow = glow
+end
+
+-- The main function for updating an item button,
+-- the item-table holds all data known about the item the button is holding, e.g.
+-- bagID, slotID, texture, count, locked, quality - from GetContainerItemInfo()
+-- link - well, from GetContainerItemLink() ofcourse ;)
+-- name, link, rarity, level, minLevel, type, subType, stackCount, equipLoc - from GetItemInfo()
+-- if you need cooldown item data, use self:RequestCooldownData()
+local UpdateButton = function(self, button, item)
+ button.Icon:SetTexture(item.texture)
+ if IsAddOnLoaded("Tabard-O-Matic") then
+ local slot = button:GetID()
+ --local bag = button:GetBag()
+
+ --local link = self.GetHandler().GetContainerItemLink(item.bagID, slot)
+ link = item.link
+ if (link) then
+ local ItemID = tonumber(link:match("item:(%d+)"))
+ local TabardValue = TabardTextures[ItemID]
+
+ if TabardValue then
+ Tabard_O_Matic:SetTheButtons(button, TabardValue.ItemName)
+ end
+ end
+ end
+ SetItemButtonCount(button, item.count)
+ SetItemButtonDesaturated(button, item.locked, 0.5, 0.5, 0.5)
+
+ -- Color the button's border based on the item's rarity / quality!
+ if db.ButtonGlow == true then
+ if(item.rarity and item.rarity > 1) then
+ if(not button.Glow) then createGlow(button) end
+ button.Glow:SetVertexColor(GetItemQualityColor(item.rarity))
+ button.Glow:Show()
+ else
+ if(button.Glow) then button.Glow:Hide() end
+ end
+ end
+end
+
+-- Updates if the item is locked (currently moved by user)
+-- bagID, slotID, texture, count, locked, quality - from GetContainerItemInfo()
+-- if you need all item data, use self:RequestItemData()
+local UpdateButtonLock = function(self, button, item)
+ SetItemButtonDesaturated(button, item.locked, 0.5, 0.5, 0.5)
+end
+
+-- Updates the item's cooldown
+-- cdStart, cdFinish, cdEnable - from GetContainerItemCooldown()
+-- if you need all item data, use self:RequestItemData()
+local UpdateButtonCooldown = function(self, button, item)
+ if(button.Cooldown) then
+ CooldownFrame_SetTimer(button.Cooldown, item.cdStart, item.cdFinish, item.cdEnable)
+ end
+end
+
+-- The function for positioning the item buttons in the bag object
+local UpdateButtonPositions = function(self)
+ local button
+ local col, row = 0, 0
+ local empty = true
+ for i, button in self:IterateButtons() do
+ button:ClearAllPoints()
+ --local link = GetContainerItemLink(button.bagID, button.slotID)
+ --if(link) then empty = false end
+
+ local xPos = col * 38
+ local yPos = -1 * row * 38
+ if(self.Caption) then yPos = yPos - 20 end -- Spacing for the caption
+
+ button:SetPoint("TOPLEFT", self, "TOPLEFT", xPos, yPos)
+ if(col >= self.Columns-1) then
+ col = 0
+ row = row + 1
+ else
+ col = col + 1
+ end
+ end
+
+ -- Hide if empty
+ --if(empty) then self:Hide() else self:Show() end
+
+ -- This variable stores the size of the item button container
+ if self.Name == "cB_Gnomed_Filters" then
+ --self:SetHeight(40)
+ self.ContainerHeight = 40
+ else
+ self.ContainerHeight = (row + (col>0 and 1 or 0)) * 38
+ end
+
+ if(self.UpdateDimensions) then self:UpdateDimensions() end -- Update the bag's height
+end
+
+-- Function is called after a button was added to an object
+-- We color the borders of the button to see if it is an ammo bag or else
+-- Please note that the buttons are in most cases recycled and not new created
+local PostAddButton = function(self, button, bag)
+ if(not button.NormalTexture) then return end
+
+ local bagType = cargBags.Bags[button.bagID].bagType
+ if(button.bagID == KEYRING_CONTAINER) then
+ button.NormalTexture:SetVertexColor(1, 0.7, 0) -- Key ring
+ elseif(bagType and bagType > 0 and bagType < 8) then
+ button.NormalTexture:SetVertexColor(1, 1, 0) -- Ammo bag
+ elseif(bagType and bagType > 4) then
+ button.NormalTexture:SetVertexColor(0, 1, 0) -- Profession bags
+ else
+ button.NormalTexture:SetVertexColor(1, 1, 1) -- Normal bags
+ end
+end
+
+-- More slot buttons -> more space!
+local UpdateDimensions = function(self)
+ local height = 0 -- Normal margin space
+ if(self.Space) then
+ height = height + 16 -- additional info display space
+ end
+ if(self.Caption) then -- Space for captions
+ height = height + 20
+ end
+ self:SetHeight(self.ContainerHeight + height)
+
+end
+
+
+
+local function createSmallButton(name, parent, ...)
+ local button = CreateFrame("Button", nil, parent)
+ button:SetPoint(...)
+ button:SetNormalFontObject(GameFontHighlight)
+ button:SetText(name)
+ button:SetPoint"CENTER"
+ button:SetWidth(20)
+ button:SetHeight(20)
+ button:SetScript("OnEnter", buttonEnter)
+ button:SetScript("OnLeave", buttonLeave)
+ button:SetHighlightTexture("Interface\\Buttons\\ButtonHilight-Square", "ADD")
+ button:SetBackdrop({
+ bgFile = "Interface\\Tooltips\\UI-Tooltip-Background",
+ edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border",
+ tile = true, tileSize = 16, edgeSize = 16,
+ insets = {left = 4, right = 4, top = 4, bottom = 4},
+ })
+ button:SetBackdropColor(0, 0, 0, 1)
+ button:SetBackdropBorderColor(0.5, 0.5, 0.5, 0.7)
+ return button
+end
+
+-- Animation : Alpha
+local f = CreateFrame"Frame"
+local function OnShow(self)
+ self:SetAlpha(0)
+ self.Fade.min = 0
+ self.Fade.max = 1
+ self.Fade:Play()
+ f.Show(self)
+end
+local function OnHide(self)
+ self:SetAlpha(1)
+ self.Fade.min = 1
+ self.Fade.max = 0
+ self.Fade:Play()
+end
+
+local function OnUpdate(self)
+ self.Parent:SetAlpha(self.min + (self.max - self.min) * self:GetProgress())
+end
+local function OnFinished(self)
+ if(self.max == 0) then f.Hide(self.Parent) end
+end
+
+
+-- Blizzard Equipement manager part
+-- This table will hold information about all items which are part of a set:
+local item2setEM = {}
+
+-- This function will extract the item set data, so it can be
+-- efficiently checked in the filter later:
+local function cacheSetsEM()
+ for k in pairs(item2setEM) do item2setEM[k] = nil end
+ for k = 1, GetNumEquipmentSets() do
+ local sName = GetEquipmentSetInfo(k)
+ local set = GetEquipmentSetItemIDs(sName)
+ for _,item in next, set do
+ -- "item" is simply the item ID here:
+ if item then item2setEM[item] = true end
+ end
+ end
+ cargBags:UpdateBags()
+end
+
+-- This creates an invisible frame to hold the required event handlers:
+local EQ_Event = CreateFrame("Frame")
+EQ_Event:RegisterEvent("PLAYER_LOGIN")
+EQ_Event:RegisterEvent("EQUIPMENT_SETS_CHANGED")
+EQ_Event:SetScript("OnEvent", cacheSetsEM)
+
+local OF = IsAddOnLoaded('Outfitter')
+local item2setOF = {}
+local pLevel = UnitLevel("player")
+-- Outfitter doesn't use item strings or links to identify items by default,
+-- so this is the function to create an item string:
+local function createItemString(i) return "item:"..i.Code..":"..i.EnchantCode..":"..i.JewelCode1..":"..i.JewelCode2..":"..i.JewelCode3..":"..i.JewelCode4..":"..i.SubCode..":"..i.UniqueID..":"..pLevel end
+
+local function cacheSetsOF()
+ for k in pairs(item2setOF) do item2setOF[k] = nil end
+ -- Outfitter grants access to sets via categories,
+ -- so there are two loops here:
+ for _,id in ipairs(Outfitter_GetCategoryOrder()) do
+ local OFsets = Outfitter_GetOutfitsByCategoryID(id)
+ for _,vSet in pairs(OFsets) do
+ for _,item in pairs(vSet.Items) do
+ -- "item" is a table here, and since I don't want to save
+ -- the whole table, I'll create an itemstring out of it:
+ if item then item2setOF[createItemString(item)] = true end
+ end
+ end
+ end
+ cargBags:UpdateBags()
+end
+
+if OF then
+ -- Outfitter supports the needed callbacks by itself:
+ Outfitter_RegisterOutfitEvent("ADD_OUTFIT", cacheSetsOF)
+ Outfitter_RegisterOutfitEvent("DELETE_OUTFIT", cacheSetsOF)
+ Outfitter_RegisterOutfitEvent("EDIT_OUTFIT", cacheSetsOF)
+ if Outfitter:IsInitialized() then
+ cacheSetsOF()
+ else
+ Outfitter_RegisterOutfitEvent('OUTFITTER_INIT', cacheSetsOF)
+ end
+end
+
+local IR = IsAddOnLoaded('ItemRack')
+local item2setIR = {}
+local function cacheSetsIR()
+ for k in pairs(item2setIR) do item2setIR[k] = nil end
+ local IRsets = ItemRackUser.Sets
+ for i in next, IRsets do
+ -- Some internal sets and queues start with one of these
+ -- characters, so let's exclude them:
+ if not string.find(i, "^~") then
+ for _,item in pairs(IRsets[i].equip) do
+ -- "item" is a custom itemstring here:
+ if item then item2setIR[item] = true end
+ end
+ end
+ end
+end
+
+if IR then
+ cacheSetsIR()
+ -- ItemRack doesn't support any callbacks by itself, so we're going to
+ -- hook into the functions we need manually:
+ local function ItemRackOpt_CreateHooks()
+ -- Those are the actual hooks for adding, updating and deleting sets:
+ local IRsaveSet = ItemRackOpt.SaveSet
+ function ItemRackOpt.SaveSet(...) IRsaveSet(...); cacheSetsIR(); cargBags:UpdateBags() end
+ local IRdeleteSet = ItemRackOpt.DeleteSet
+ function ItemRackOpt.DeleteSet(...) IRdeleteSet(...); cacheSetsIR(); cargBags:UpdateBags() end
+ end
+ -- Amusingly, ItemRack puts its set updating functions into a
+ -- load-on-demand module, so we need to hook into the LoD-function first:
+ local IRtoggleOpts = ItemRack.ToggleOptions
+ function ItemRack.ToggleOptions(...) IRtoggleOpts(...) ItemRackOpt_CreateHooks() end
+end
+
+
+
+-- Style of the bag and its contents
+local func = function(settings, self, name)
+ self:EnableMouse(true)
+
+
+ self.UpdateDimensions = UpdateDimensions
+ self.UpdateButtonPositions = UpdateButtonPositions
+ self.UpdateButton = UpdateButton
+ self.UpdateButtonLock = UpdateButtonLock
+ self.UpdateButtonCooldown = UpdateButtonCooldown
+ self.PostAddButton = PostAddButton
+
+ self:SetFrameStrata("HIGH")
+ tinsert(UISpecialFrames, self:GetName()) -- Close on "Esc"
+
+ -- Animation part II
+ -- Temporaly disabled
+ --[[
+ local anim = self:CreateAnimationGroup()
+ local fade = anim:CreateAnimation("Animation")
+ fade:SetDuration(.25)
+ fade:SetSmoothing("IN_OUT")
+ fade.Parent = self
+ fade:SetScript("OnUpdate", OnUpdate)
+ fade:SetScript("OnFinished", OnFinished)
+ self.Show = OnShow
+ self.Hide = OnHide
+ self.Fade = fade ]]
+
+
+
+ -- Make main frames movable
+ if(self.Name == "cB_Gnomed_Bag" or self.Name == "cB_Gnomed_Bank") then
+ self:SetMovable(true)
+ --self:SetUserPlaced(false)
+
+ self:RegisterForClicks("LeftButton", "RightButton");
+ self:SetScript("OnMouseDown", function()
+ self:ClearAllPoints()
+ self:StartMoving()
+ end)
+ self:SetScript("OnMouseUp", self.StopMovingOrSizing)
+ end
+
+ if(self.Name =="cB_Gnomed_Keyring") then
+ self:SetScale(db.KeyringScale) -- Make key ring a bit smaller
+ self.Columns = db.KeyringColumns
+ elseif(self.Name == "cB_Gnomed_Bank") then