Thread Tools Display Modes
Prev Previous Post   Next Post Next
12-15-16, 11:44 AM   #1
millanzarreta
A Deviate Faerie Dragon
 
millanzarreta's Avatar
AddOn Author - Click to view addons
Join Date: Dec 2010
Posts: 11
[LUA] How to do this library works for more than 1 addon at the same time

Hi, I create a new library with the purpose to track some units to check what talents are they using (enemy units), but I have one problem to separate the dates from the diferents addons that use it.

When I started to create it, I believed all addons that use it would retrieve a different "copy" of my addon library, but no, using LibStub only one Library object it's created and used on all addons (this make sense to save resources, but I had not noticed...)

My code looks similar to this (example code to show concept):

Lua Code:
  1. local LIB_MAJOR, LIB_MINOR = "LibTalentsTrack-1.0", 1
  2.  
  3. local LibTalentsTrack = LibStub:NewLibrary(LIB_MAJOR, LIB_MINOR)
  4. if not LibTalentsTrack then return end
  5.  
  6. local libUnitsToTrack = {}  -- the variable that saves the units to track and their info
  7.  
  8. function LibTalentsTrack:RegisterUnit(unitName) do
  9.     -- ... do stuff
  10.     ...
  11.     libUnitsToTrack[unitName] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} --the 0s are the talents tiers and pvp talents tiers
  12.     return 0
  13. end
  14.  
  15. function LibTalentsTrack:UnregisterUnit(unitName) do
  16.     -- ... do stuff
  17.     ...
  18.     libUnitsToTrack[unitName] = nil
  19.     return 0
  20. end
  21.  
  22. function LibTalentsTrack:UnregisterAllUnits(unitName) do
  23.     -- ... do stuff
  24.     ...
  25.     for k, v in pairs(libUnitsToTrack) do
  26.         self:UnregisterUnit(unitName)
  27.     end
  28.     return 0
  29. end
  30.  
  31. -- more functions etc...
  32. ...

The problem it's all addons have the same object, so, for example, if addon #1 register some units, and addon #2 register other units, and addon #2 then calls UnregisterAllUnits, this action deletes all the units (including units registered by addon #1 and #2). My intention is if the addon #2 calls UnregisterAllUnits only addon #2 unit's should be removed.

Ok, how can I deal with this? For the data variable "libUnitsToTrack" I know that I can do a structure like this:

Lua Code:
  1. libUnitsToTrack[addonName][unitName] =  = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}

or like this:

Lua Code:
  1. libUnitsToTrack[unitName] = {{}, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
  2. --where:
  3. libUnitsToTrack[unitName][1] = {addon1, addon2, addon3, ...}  -- In this [1] I store the addons that tracks this unit

instead of the actual:

Lua Code:
  1. libUnitsToTrack[unitName] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}

But the problem it's how I can easy manage this since the addon part, I don't like add one more argument (the addon name) for all "RegisterUnit" and "UnregisterUnit" functions. I really have many functions to register and unregister units (allowing the addon that use this library register units by unitId, unitName, unitGUID, etc...). I prefer a solution more simplest and more transparent for the user. I like some like this but I don't know how I can do this:

Lua Code:
  1. -- this it's the addon code that wants use my lib
  2. local LibTalentsTrack = LibStub("LibTalentsTrack-1.0")
  3. IDKWhatShouldReturnHere = LibTalentsTrack:RegisterNewAddon("MyAddonName")
  4.  
  5. -- and now the addon can use the functions without pass the addon name as argument, and the library function know what addon call's the function
  6. LibTalentsTrack:RegisterUnit(unitName)
  7.  
  8. ...

Some way to do this? I don't know if I have explained well :S

Thanks for the help!

TL;DR: I am doing a library. I am looking for some way to use a global library object in diferents addons and I wants the library functions know the addon that which were called.
  Reply With Quote
 

WoWInterface » Developer Discussions » Lua/XML Help » [LUA] How to do this library works for more than 1 addon at the same time


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