View Single Post
02-12-17, 09:28 PM   #7
Layback_
An Onyxian Warder
Join Date: Feb 2016
Posts: 358
Hi Briskman3000,

Thank you for your suggestion and example code

Here's my edited version of Experience.lua:
Lua Code:
  1. local LSM = LibStub("LibSharedMedia-3.0");
  2. local font = LSM:Fetch("font", "MeatEdition");
  3.  
  4. local E, L = unpack(select(2, ...));
  5.  
  6. local Experience = E:NewModule("Experience", "AceEvent-3.0");
  7.  
  8. Experience.Frame = CreateFrame("Frame", nil, UIParent);
  9. Experience.Frame:SetMovable(true);
  10. Experience.Frame:EnableMouse(true);
  11. Experience.Frame:RegisterForDrag("LeftButton");
  12. Experience.Frame:SetScript("OnDragStart", Experience.Frame.StartMoving);
  13. Experience.Frame:SetScript("OnDragStop", Experience.Frame.StopMovingOrSizing);
  14. Experience.Frame:SetSize(280, 50);
  15.  
  16. Experience.Frame:SetTemplate(true); -- custom function
  17. local r, g, b = Experience.Frame.template:GetBackdropColor();
  18. Experience.Frame.template:SetBackdropColor(r, g, b, 0.7);
  19.  
  20. local _, class = UnitClass("player");
  21. local color = RAID_CLASS_COLORS[class];
  22.  
  23. Frame.NameText = Experience.Frame:CreateFontString(nil, "OVERLAY");
  24. Frame.NameText:SetFont(font, 16, "OUTLINE");
  25. Frame.NameText:SetPoint("TOP", 0, -5);
  26. Frame.NameText:SetTextColor(color.r, color.g, color.b);
  27. Frame.NameText:SetText("");
  28.  
  29. Frame.ExpText = Experience.Frame:CreateFontString(nil, "OVERLAY");
  30. Frame.ExpText:SetFont(font, 14, "OUTLINE");
  31. Frame.ExpText:SetPoint("BOTTOM", 0, 5);
  32. Frame.ExpText:SetTextColor(1, 1, 1);
  33. Frame.ExpText:SetFormattedText("Level: %d, Exp: %d / %d (%.2f%%)", 0, 0, 0, 0);
  34.  
  35. local function CommaValue(value)
  36.     local left, num, right = string.match(value, '^([^%d]*%d)(%d*)(.-)$');
  37.  
  38.     return left .. (num:reverse():gsub('(%d%d%d)', '%1,'):reverse()) .. right;
  39. end
  40.  
  41. function Experience:UpdateText()
  42.     local level = UnitLevel("player");
  43.     local curXP, maxXP = UnitXP("player"), UnitXPMax("player");
  44.     local perXP = curXP / maxXP * 100;
  45.  
  46.     self.Frame.NameText:SetText(UnitName("player"));
  47.     self.Frame.ExpText:SetFormattedText("|cffeda900Level:|r %d, |cffeda900Exp:|r %s / %s (%.2f%%)", level, CommaValue(curXP), CommaValue(maxXP), perXP);
  48. end
  49.  
  50. function Experience:PLAYER_LOGIN()
  51.     local point, relativeFrame, relativePoint, ofsx, ofsy;
  52.        
  53.     if E.db.pos then
  54.         point, relativeFrame, relativePoint, ofsx, ofsy = unpack(E.db.pos);
  55.     else
  56.         point, relativeFrame, relativePoint, ofsx, ofsy = "CENTER", "UIParent", "CENTER", 0, 200;
  57.     end
  58.  
  59.     self.Frame:SetPoint(point, relativeFrame, relativePoint, ofsx, ofsy);
  60.  
  61.     self:UpdateText();
  62. end
  63.  
  64. function Experience:PLAYER_XP_UPDATE()
  65.     self:UpdateText();
  66. end
  67.  
  68. function Experience:PLAYER_LOGOUT()
  69.     local point, relativeFrame, relativePoint, ofsx, ofsy = self.Frame:GetPoint();
  70.  
  71.     if relativeFrame == UIParent then
  72.         relativeFrame = "UIParent";
  73.     end
  74.  
  75.     E.db.pos = {
  76.         point,
  77.         relativeFrame,
  78.         relativePoint,
  79.         ofsx,
  80.         ofsy,
  81.     }
  82. end
  83.  
  84. Experience:RegisterEvent("PLAYER_LOGIN");
  85. Experience:RegisterEvent("PLAYER_XP_UPDATE");
  86. Experience:RegisterEvent("PLAYER_LOGOUT");

I tried to get rid of ADDON_LOADED function, but once I remove that function, it won't be able to access db as it recognize db as 'nil'

EDIT: Got rid of ADDON_LOADED function and immigrated stuffs into PLAYER_LOGIN function due to db issue.

Last edited by Layback_ : 02-12-17 at 09:50 PM.
  Reply With Quote