View Single Post
04-27-16, 03:06 PM   #1
flow0284
A Cyclonian
Join Date: Jan 2015
Posts: 40
Question "Problem" with LibDataBroker

Hi,

i have a little problem using libdatabroker for a minimap button and interacting with mousebuttons.

first of all here is my code
Lua Code:
  1. addon = LibStub("AceAddon-3.0"):NewAddon("MillButton", "AceConsole-3.0")
  2. local L = LibStub("AceLocale-3.0"):GetLocale("MillButton")
  3. local MillButtonLDB = LibStub("LibDataBroker-1.1"):NewDataObject("MillButtonIcon", {
  4.     type = "data source",
  5.     text = "MillButton",
  6.     icon = "Interface\\Icons\\Ability_Miling",
  7.     OnClick = function(_, button)
  8.         if button == "LeftButton" then
  9.             if InterfaceOptionsFrame:IsVisible() then
  10.                 InterfaceOptionsFrame:Hide()
  11.                 -- Hide the UI panel behind blizz options.
  12.                 HideUIPanel(GameMenuFrame)
  13.             else
  14.             InterfaceOptionsFrame_OpenToCategory("MillButton")
  15.             Options:SetScript("OnShow", nil)
  16.             end
  17.         end
  18.         if button == "RightButton" then
  19.             MillButtonSetup()
  20.         end
  21.     end,
  22.     OnTooltipShow = function(tooltip)
  23.         tooltip:SetText("MillButton")
  24.         tooltip:AddLine(GetAddOnMetadata(ADDON, "Version"),1,1,1)
  25.         tooltip:AddLine(" ")
  26.         tooltip:AddLine(L["r_mouse1"]..": |cFFFFFFFF"..L["r_mouse2"].."|r")
  27.         tooltip:AddLine(L["l_mouse1"]..": |cFFFFFFFF"..L["l_mouse2"].."|r")
  28.         tooltip:Show()
  29.     end
  30. })
  31.  
  32. local icon = LibStub("LibDBIcon-1.0")
  33.  
  34. function addon:OnInitialize()
  35.     self.db = LibStub("AceDB-3.0"):New("MillButtonMinimap", {
  36.         profile = {
  37.             minimap = {
  38.                 hide = false,
  39.             },
  40.         },
  41.     })
  42.     icon:Register("MillButtonIcon", MillButtonLDB, self.db.profile.minimap)
  43.     self:RegisterChatCommand("mbtnmmap", "ComMbtnMiniMapIcn")
  44. end
  45.  
  46. function addon:ComMbtnMiniMapIcn()
  47.     self.db.profile.minimap.hide = not self.db.profile.minimap.hide
  48.     if self.db.profile.minimap.hide then
  49.         icon:Hide("MillButtonIcon")
  50.     else
  51.         icon:Show("MillButtonIcon")
  52.     end
  53. end

in line 19 i will run a function after a rightclick

here the function:
Lua Code:
  1. function MillButtonSetup()
  2.     if ( IsPlayerSpell(51005) ) then
  3.         local bag, slot = findherb()
  4.         if (not bag or not slot) or LootFrame:IsVisible() or CastingBarFrame:IsVisible() or UnitCastingInfo("player") then
  5.         -- do nothing if no herb, if looting or casting
  6.             MillButton:SetAttribute("macrotext","")
  7.             if not bag then
  8.                 DEFAULT_CHAT_FRAME:AddMessage("|cFF00FF00MillButton: |r"..L["error"])
  9.             end
  10.         else
  11.             MillButton:SetAttribute("macrotext","/"..L["macro_cast"].." "..mill_spell.."\n/"..L["macro_use"].." "..bag.." "..slot)
  12.         end
  13.     end
  14.     if not ( IsPlayerSpell(51005) ) then
  15.         local bag, slot = findherb()
  16.         if (not bag or not slot) or LootFrame:IsVisible() or CastingBarFrame:IsVisible() or UnitCastingInfo("player") then
  17.         -- do nothing if no herb, if looting or casting
  18.             MillButton:SetAttribute("macrotext","")
  19.             if not bag then
  20.                 DEFAULT_CHAT_FRAME:AddMessage("|cFF00FF00MillButton: |r"..L["error"])
  21.             end
  22.         else
  23.             MillButton:SetAttribute("macrotext","/"..L["macro_use"].." item:114942".." ".."\n/"..L["macro_use"].." "..bag.." "..slot)
  24.         end
  25.     end
  26. end

so if the player is no scribe (has no spell in his spellbook with the spellid 51005) then i will use the item 114942 (draenic mortar). this doesn't work. the line 23 will not run. there is no lua error. if i run this function via macro ingame it will work but not through the minimapbutton.

later i will add a lookup for the draenic mortar in the players bag to prevent errors if the item is not present in the players bag.
  Reply With Quote