Thread Tools Display Modes
07-03-11, 04:49 AM   #1
Tadedra
A Cliff Giant
Join Date: Dec 2010
Posts: 70
Baud Error Frame

I use Baud Error Frame for my bug finding but it seems to have one as well. I know it's not really being maintained that I could find but I was wondering if anyone could tell me how to fix a call error:

[string "<unnamed>:OnShow"]:4: attempt to concatenate local 'name' (a nil value)
Count: 1

Call Stack:
[C]: ?
[string "*:OnShow"]:4: in function <[string "*:OnShow"]:1>

The code is this:
Code:
local SelectedError = 1;
local ErrorList = {};
local SoundTime = 0;
local QueueError = {};
local Config;
local SoundEditBox;
local ClearFocus = CreateFrame("EditBox");
ClearFocus:SetAutoFocus(nil);
ClearFocus:SetScript("OnEditFocusGained", function(self)
  self:ClearFocus();
end);


local DefaultSound = "Sound\\Character\\PlayerExertions\\GnomeMaleFinal\\GnomeMaleMainDeathA.wav";

local CheckButtons = {
  {Text="Show Chat Message", SavedVar="Messages", Default=true},
  {Text="Show \"Action Blocked\" Errors (Taint)", SavedVar="Taint", Default=true},
  {Text="Play Sound", SavedVar="PlaySound", Default=true},
};

local EventFuncs;
EventFuncs = {
  VARIABLES_LOADED = function()
    EventFuncs.VARIABLES_LOADED = nil;
    Config = BaudErrorFrameConfig;
    if(type(Config)~="table")then
      Config = {};
      BaudErrorFrameConfig = Config;
    end
    if(Config.Sound == nil)then
      --Backwards compatability
      Config.Sound = BaudErrorFrameSound or DefaultSound;
    end
    SoundEditBox:SetText(Config.Sound);
    SoundEditBox:SetCursorPosition(0);
    SoundEditBox:SetScript("OnChar", function(self)
      Config.Sound = self:GetText();
    end);

    for Key, Value in ipairs(CheckButtons)do
      if(Config[Value.SavedVar]==nil)then
        Config[Value.SavedVar] = Value.Default;
      end
      Value.Button:SetChecked(Config[Value.SavedVar]);
    end

    for Key, Value in ipairs(QueueError)do
      BaudErrorFrameShowError(Value);
    end
    QueueError = nil;
  end,

  ADDON_ACTION_BLOCKED = function(AddOn, FuncName)
    if Config.Taint then
      BaudErrorFrameAdd(arg1.." blocked from using "..FuncName,4);
    end
  end,

  MACRO_ACTION_BLOCKED = function(FuncName)
    if Config.Taint then
      BaudErrorFrameAdd("Macro blocked from using "..FuncName,4);
    end
  end,

  ADDON_ACTION_FORBIDDEN = function(AddOn,FuncName)
    if Config.Taint then
      BaudErrorFrameAdd(AddOn.." forbidden from using "..FuncName.." (Only usable by Blizzard)",4);
    end
  end,

  MACRO_ACTION_FORBIDDEN = function(FuncName)
    if Config.Taint then
      BaudErrorFrameAdd("Macro forbidden from using "..FuncName.." (Only usable by Blizzard)",4);
    end
  end,
};


function BaudErrorFrame_OnLoad(self)
  tinsert(UISpecialFrames, self:GetName());
  self:RegisterForDrag("LeftButton");
  self:RegisterForClicks("LeftButtonUp","RightButtonUp");
  self:SetScript("OnClick", function()
    ClearFocus:SetFocus();
  end);

  for Key, Value in pairs(EventFuncs)do
    self:RegisterEvent(Key);
  end
  self:SetScript("OnEvent", function(self, event, ...)
    EventFuncs[event](...);
  end);
  seterrorhandler(BaudErrorFrameHandler);
end


function BaudErrorFrameMinimapButton_OnLoad(self)
  self:RegisterForClicks("LeftButtonUp","RightButtonUp");
  self:RegisterForDrag("LeftButton");
  self:SetFrameLevel(self:GetFrameLevel()+1);
  self:SetScript("OnClick", BaudErrorFrameMinimapButton_OnClick);
  self:SetScript("OnEnter", BaudErrorFrameMinimapButton_OnEnter);
  self:SetScript("OnLeave", BaudErrorFrameMinimapButton_OnLeave);
  self:SetScript("OnDragStart", BaudErrorFrameMinimapButton_OnDragStart);
  self:SetScript("OnDragStop", BaudErrorFrameMinimapButton_OnDragStop);
end


function BaudErrorFrameMinimapButton_OnClick(self, button)
  if(button=="LeftButton")then
    BaudErrorFrame:Show();
  else
    InterfaceOptionsFrame_OpenToCategory("Baud Error Frame");
  end
end


function BaudErrorFrameMinimapButton_OnEnter(self)
  if self.Dragging then
    return;
  end
  GameTooltip:SetOwner(self, "ANCHOR_TOPRIGHT");
  GameTooltip:AddLine("Baud Error Frame");
  GameTooltip:AddLine("Left-Click to view errors.",1,1,1);
  GameTooltip:AddLine("Right-Click for options.",1,1,1);
  GameTooltip:AddLine("Shift-drag to move button.",1,1,1);
  GameTooltip:Show();
end


function BaudErrorFrameMinimapButton_OnLeave()
  GameTooltip:Hide();
end


function BaudErrorFrameMinimapButton_OnDragStart(self)
  MinimapButton_OnMouseUp(self);
  if IsShiftKeyDown()then
    self:SetScript("OnUpdate", BaudErrorFrameMinimapButton_OnUpdate);
    self.Dragging = true;
    BaudErrorFrameMinimapButton_OnLeave(self);
  end
end


function BaudErrorFrameMinimapButton_OnDragStop(self)
  if self.Dragging then
    self:SetScript("OnUpdate", nil);
    self:StopMovingOrSizing();
    self.Dragging = nil;
    self.Moving = nil;
  end
end


function BaudErrorFrameMinimapButton_OnUpdate(self)
  local MapScale = Minimap:GetEffectiveScale();
  local CX, CY = GetCursorPosition();
  local X, Y = (Minimap:GetRight() - 70) * MapScale, (Minimap:GetTop() - 70) * MapScale;
  local Dist = sqrt(math.pow(X - CX, 2) + math.pow(Y - CY, 2)) / MapScale;
  local Scale = self:GetEffectiveScale();
  if(Dist <= 90)and Minimap:IsVisible()then
    if self.Moving then
      self:StopMovingOrSizing();
      self.Moving = nil;
    end
    local Angle = atan2(CY - Y, X - CX) - 90;
    self:ClearAllPoints();
    self:SetPoint("CENTER", Minimap, "TOPRIGHT", (sin(Angle) * 80 - 70) * MapScale / Scale, (cos(Angle) * 77 - 73) * MapScale / Scale);

  elseif not self.Moving then
    self:ClearAllPoints();
    self:SetPoint("CENTER", UIParent, "BOTTOMLEFT",CX / Scale, CY / Scale);
    self:StartMoving();
    self.Moving = true;
  end
end


function BaudErrorFrameHandler(Error)
  BaudErrorFrameAdd(Error,3);
end


function BaudErrorFrameShowError(Error)
  if Config.Messages then
    DEFAULT_CHAT_FRAME:AddMessage(Error,0.8,0.1,0.1);
  end
  if(GetTime() > SoundTime)and Config.PlaySound then
    PlaySoundFile(Config.Sound);
    SoundTime = GetTime() + 1;
  end
end


function BaudErrorFrameAdd(Error, Retrace)
  for Key, Value in pairs(ErrorList)do
    if(Value.Error==Error)then
      if(Value.Count < 99)then
        Value.Count = Value.Count + 1;
        BaudErrorFrameEditBoxUpdate();
      end
      return;
    end
  end
  if Config then
    BaudErrorFrameShowError(Error);
  else
    tinsert(QueueError, Error);
  end
  tinsert(ErrorList,{Error=Error,Count=1,Stack=debugstack(Retrace)});
  BaudErrorFrameMinimapCount:SetText(#ErrorList);
  BaudErrorFrameMinimapButton:Show();
  BaudErrorFrameScrollBar_Update();
end


function BaudErrorFrame_Select(Index)
  SelectedError = Index;
  BaudErrorFrameScrollBar_Update();
  BaudErrorFrameDetailScrollFrameScrollBar:SetValue(0);
end


function BaudErrorFrame_OnShow(self)
  PlaySound("gsTitleOptionExit");
  self:SetPoint("CENTER");
  BaudErrorFrameScrollBar_Update();
end


function BaudErrorFrame_OnHide()
  PlaySound("gsTitleOptionExit");
end


function BaudErrorFrameEntry_OnClick(self)
  BaudErrorFrame_Select(self:GetID());
end


function BaudErrorFrameClearButton_OnClick(self)
  ErrorList = {};
  BaudErrorFrameMinimapButton:Hide();
  self:GetParent():Hide();
end


function BaudErrorFrameScrollBar_Update()
  if not BaudErrorFrame:IsShown()then
    return;
  end
  local Index, Button, ButtonText, Text;

  local Frame = BaudErrorFrameListScrollBox;
  local FrameName = Frame:GetName();
  local ScrollBar = getglobal(FrameName.."ScrollBar");
  local Highlight = getglobal(FrameName.."Highlight");
  local Total = #ErrorList;
  FauxScrollFrame_Update(ScrollBar,Total,Frame.Entries,16);
  Highlight:Hide();
  for Line = 1, Frame.Entries do
    Index = Line + FauxScrollFrame_GetOffset(ScrollBar);
    Button = getglobal(FrameName.."Entry"..Line);
    ButtonText = getglobal(FrameName.."Entry"..Line.."Text");
    if(Index <= Total)then
      Button:SetID(Index);
      ButtonText:SetText(ErrorList[Index].Error);
      Button:Show();
      if(Index==SelectedError)then
        Highlight:SetPoint("TOP",Button);
        Highlight:Show();
      end
    else
      Button:Hide();
    end
  end
  BaudErrorFrameEditBoxUpdate();
end


function BaudErrorFrameEditBoxUpdate()
  if ErrorList[SelectedError]then
    BaudErrorFrameEditBox.TextShown = ErrorList[SelectedError].Error.."\nCount: "..ErrorList[SelectedError].Count.."\n\nCall Stack:\n"..ErrorList[SelectedError].Stack;
  else
    BaudErrorFrameEditBox.TextShown = "";
  end
  BaudErrorFrameEditBox:SetText(BaudErrorFrameEditBox.TextShown);
--  BaudErrorFrameDetailScrollFrame:UpdateScrollChildRect();
end


function BaudErrorFrameEditBox_OnTextChanged(self)
  if(self:GetText()~=self.TextShown)then
    self:SetText(self.TextShown);
    self:ClearFocus();
    return;
  end
  BaudErrorFrameDetailScrollFrame:UpdateScrollChildRect();
end


function BaudErrorFrameOptions_OnLoad(self)
  local Text = self:CreateFontString(nil, "BACKGROUND", "GameFontNormalSmall");
  Text:SetPoint("BOTTOMRIGHT",-13,13);
  Text:SetText("Version "..GetAddOnMetadata("!BaudErrorFrame","Version"));

  self.name = "Baud Error Frame";
  self.default = function()
    for Key, Value in ipairs(CheckButtons)do
      Config[Value.SavedVar] = Value.Default;
      Value.Button:SetChecked(Value.Default);
    end
    Config.Sound = DefaultSound;
    ClearFocus:SetFocus();
    SoundEditBox:SetText(Config.Sound);
    SoundEditBox:SetCursorPosition(0);
  end
  --self.refresh = BaudManifestOptions_OnShow;
  InterfaceOptions_AddCategory(self);

  SlashCmdList["BaudErrorFrame"] = function()
    InterfaceOptionsFrame_OpenToCategory("Baud Error Frame");
  end
  SLASH_BaudErrorFrame1 = "/bauderrorframe";
  SLASH_BaudErrorFrame2 = "/bauderror";

  SoundEditBox = BaudErrorFrameSoundEditBox;

  local Func = function(self)
    Config[self.SavedVar] = self:GetChecked()and true or false;
    if self:GetChecked()then
      PlaySound("igMainMenuOptionCheckBoxOn");
    else
      PlaySound("igMainMenuOptionCheckBoxOff");
    end
    ClearFocus:SetFocus();
  end
  for Key, Value in ipairs(CheckButtons)do
    Button = CreateFrame("CheckButton", "BaudErrorFrameCheck"..Key, self, "OptionsCheckButtonTemplate");
    Value.Button = Button;
    Button.SavedVar = Value.SavedVar;
    getglobal(Button:GetName().."Text"):SetText(Value.Text);
    Button:SetPoint("TOPLEFT", 25, -25 * Key);
    Button:SetScript("OnClick", Func);
  end
end


function BaudErrorFrameTestSound()
  PlaySoundFile(Config.Sound);
  ClearFocus:SetFocus();
end
Any info on what that means would be helpful. I'm trying to learn some of this stuff but I'm not that intuitive with it.
  Reply With Quote

WoWInterface » AddOns, Compilations, Macros » AddOn Help/Support » Baud Error Frame


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off