Quantcast
Download
(679 Kb)
Download
Updated: 05/16/20 06:25 PM
Compatibility:
Greymoor (6.0.5)
Harrowstorm (5.3.4)
Dragonhold (5.2.5)
Scalebreaker (5.1.5)
Elsweyr (5.0.5)
Updated:05/16/20 06:25 PM
Created:01/21/19 10:18 AM
Monthly downloads:18,546
Total downloads:483,761
Favorites:280
MD5:
6.0.5
LibSets  Popular! (More than 5000 hits)
Version: 0.2.0
by: Baertram [More]
Attention please - To the addon devs:
DO NOT ACCESS THE PRELOADED TABLES DIRECTLY BUT USE THE API FUNCTIONS like LibSets.GetAll* to READ THE PRELOADED DATA!


LibSets
A library to help with item sets for the following "setTypes":
Code:
LIBSETS_SETTYPE_ITERATION_BEGIN = 1

LIBSETS_SETTYPE_ARENA                           = 1 --"Arena"
LIBSETS_SETTYPE_BATTLEGROUND                    = 2 --"Battleground"
LIBSETS_SETTYPE_CRAFTED                         = 3 --"Crafted"
LIBSETS_SETTYPE_CYRODIIL                        = 4 --"Cyrodiil"
LIBSETS_SETTYPE_DAILYRANDOMDUNGEONANDICREWARD   = 5 --"DailyRandomDungeonAndICReward"
LIBSETS_SETTYPE_DUNGEON                         = 6 --"Dungeon"
LIBSETS_SETTYPE_IMPERIALCITY                    = 7 --"Imperial City"
LIBSETS_SETTYPE_MONSTER                         = 8 --"Monster"
LIBSETS_SETTYPE_OVERLAND                        = 9 --"Overland"
LIBSETS_SETTYPE_SPECIAL                         = 10 --"Special"
LIBSETS_SETTYPE_TRIAL                           = 11 --"Trial"
LIBSETS_SETTYPE_MYTHIC                        = 12 --"Mythic"                           

--Only for iterations from 1 (LIBSETS_SETTYPE_ITERATION_BEGIN ) to the maximum
LIBSETS_SETTYPE_ITERATION_END                   = maximum setType (currently: LIBSETS_SETTYPE_MYTHIC or LIBSETS_SETTYPE_TRIAL) --depending on the games APIVersion
Also provides DLC ids:
Code:
DLC_BASE_GAME 0
DLC_IMPERIAL_CITY 1
DLC_ORSINIUM 2
DLC_THIEVES_GUILD 3
DLC_DARK_BROTHERHOOD 4
DLC_SHADOWS_OF_THE_HIST 5
DLC_MORROWIND 6
DLC_HORNS_OF_THE_REACH 7
DLC_CLOCKWORK_CITY 8
DLC_DRAGON_BONES 9
DLC_SUMMERSET 10
DLC_WOLFHUNTER 11
DLC_MURKMIRE 12
DLC_WRATHSTONE 13
DLC_ELSWEYR 14
DLC_SCALEBREAKER 15
DLC_DRAGONHOLD 16
DLC_HARROWSTORM 17
DLC_GREYMOOR 18

--Iterators
DLC_ITERATION_BEGIN = DLC_BASE_GAME
DLC_ITERATION_END = DLC_GREYMOOR or DLC_HARROWSTORM --depending on the game's APIVersion
And several API functions to read set's drop zone, drop boss, and other info.

Global variable of the library to access it in your code:
LibSets

Please do NOT use LibStub with this library as it will not work!
Simply include the following tag into your addon's manifest txt file:
Code:
##DependsOn: LibSets
This library uses SavedVariables and thus needs it's own LibSets.txt manifest file!
You must not include this library into subfolders of your addon and you must not include it manually into your addon's manifest txt file like
Code:
--This is wrong! Do not include this in your addon's txt file
/libs/LibSets/LibSets_Constants.Lua
/libs/LibSets/LibSets.Lua
...

Supported languages are:
German
English
French
Russian
-> If you want your language supported as well contact me via private message here on www.esoui.com please.

It contains:
-SetId of the set
-Set's itemIds for all set items (to build an itemlink use function LibSets.buildItemLink)
-Name of a set for the supported languages
-Tables which contain the setIds and setData for each setType
-Tables which contain a mapping between the wayshrines and their zoneIds
-Counters to check how many sets of a type exist
-Functions to get & check the set data, get set languages, teleport to craftable set's near wayshrines, open set drop zone on map, open and show wayshrine of set on map, etc.

@developers
Be sure to check if LibSets finished loading the sets properly before accessing it.
Lua Code:
  1. If not LibSets or not LibSets.checkIfSetsAreLoadedProperly() then
  2.      --LibSets is currentls scanning and/or not ready! Abort here
  3.      myAddon.libSetsReady = false
  4.    else
  5.      myAddon.libSetsReady = true
  6.    end
  7.  
  8.     --Wherever you use LibSets check:
  9.    if myAddon.libSetsReady then
  10.       ---do whatever you want with LibSets
  11.    end

Unique setId
The API provides an unique setId for items which belong to a set.
You need an itemLink of the item you would like to check and are able to use the following API function to get the setId and some other parameters as well.
Code:
* GetItemLinkSetInfo(*string* _itemLink_, *bool* _equipped_)
** _Returns:_ *bool* _hasSet_, *string* _setName_, *integer* _numBonuses_, *integer* _numEquipped_, *integer* _maxEquipped_, *integer* _setId_
Important: The data this API function GetItemLinkSetInfo(itemLink) provides is NOT stored redundantly inside the library LibSets!
So please be sure to get the parameters "numBonuses", "numEquipped", "maxEquipped" by help of this ESO API function.

If you need e.g. the "_numEquipped_" parameter info you need to build an itemLink of a set's itemId, like this:
You can use the function LibSets.BuildItemLink(LibSets.GetSetItemId(setId, equipType)) to build the itemLink and then use the API function GetItemLinkSetInfo(itemLink, false) to get this information.

What constants can be used?
The non-API version dependent constants are available within this library's file LibSets_Constants.lua.
-> Please check this file for the possible constants for:
-LibSet tableKeys
-LibSet setTypes & names
-LibSet Undaunted Chest Data & names

All other API-dependent constants are available in the file LibSets_Constants_<APIVersion>.lua (where <APIVersion> is the current game's APIVersion. There might be 2 files, one for the live and another for the PTS server!).
-> Please check this file for the possible constants for:
-LibSet DLCIds & names

Where is the data?
The setsData is stored inside the included excel document LibSets_SetData.xlsx. From this file the lua contents for the following files is created:
The setsData is stored in the file LibSets_Data_<APIVersion>.lua (where <APIVersion> is the current game's APIVersion. There might be 2 files, one for the live and another for the PTS server!)
Inside this file there is a table LibSets.setInfo which provides the set information from the included excel.
And there are 3 pre-loaded (scanned ingame multilingual, shrinked and stored in this lua file) tables for the set itemIds, set names /multi language) and wayshrineNodeIndices mapping to their zoneId.
Both are inside the table LibSets.setDataPreloaded:
-LibSets.setInfo
-LibSets.setDataPreloaded.setItemIds
-LibSets.setDataPreloaded.setNames
-LibSets.setDataPreloaded.wayshrineNodeId2zoneId
-The file itsself got comments to describe how to get the data needed and what format is needed.

DO NOT ACCESS THESE TABLES DIRECTLY BUT USE THE API FUNCTIONS like LibSets.GetAll* to READ THE PRELOADED DATA!
Else you will get error messages as the data is sotmetimes compressed and needs to be decompressed first!

API functions of the library:

Global variable of the library to access it:
Code:
LibSets
PLEASE CHECK THE FILE LibSets.lua for the API functions (starting at "-- Global helper functions")

Below are only some important ones:
Lua Code:
  1. ------------------------------------------------------------------------
  2. --  Global library check functions
  3. ------------------------------------------------------------------------
  4. --Returns a boolean value, true if the sets of the game were already loaded/ false if not
  5. --> Returns:    boolean areSetsLoaded
  6. function lib.AreSetsLoaded()
  7.  
  8. --Returns a boolean value, true if the sets of the game are currently scanned and added/updated/ false if not
  9. --> Returns:    boolean isCurrentlySetsScanning
  10. function lib.IsSetsScanning()
  11.  
  12. --Returns a boolean value, true if the sets database is properly loaded yet and is not currently scanning
  13. --or false if not.
  14. --This functions combines the result values of the functions LibSets.AreSetsLoaded() and LibSets.IsSetsScanning()
  15. function lib.checkIfSetsAreLoadedProperly()

Updating the library with new PTS data:
If you want to know what is to do as the library needs an update with new PTS data, check files "LibSets.lua" AND "LibSets_Debug.lua" at the top and read + understand the steps needed please!

GitHub - If you want to contribute
LibSets on GitHub

Most up 2 date excel document for the LibSets data, like sets, zones, maps, wayshrines, ...
Click the github link above
0.2.0
Fixed function LibSets.GetSetItemId -> returns first found itemId again now

0.1.9
Updated Russian translations -> Thanks to adjutantt

0.1.8
Fixed: AddOnVersion tag in txt file
Fixed: DLCid DLC_BASE_GAME did not return a string for LibSets.GetDLCName -> returns "Elder Scrolls Online" now
Changed: Split up dropMechanic long names into shorter dropMechanic names and tooltips.
Functions like LibSets.GetDropMechanicName and LibSets.GetDropMechanic will return an additional parameter dropMechanicTooltip now

0.1.7
Fixed: SetType translations
Changed: Function to get all setTypes renamed from GetSetTypes to GetAllSetTypes properly
Added: Function GetAllDLCIds() -> Returns the DLCIds

0.1.6
-Updated API for Greymoor
-Added Greymoor sets including the mythic set items
-Added craftable sets wayshrine ids of Greymoor
-Added mythic setType (LIBSETS_TYPE
-Using set's itemIds compressing method by Dolgubon (thanks!) to reduce the filesize of the preloaded data a lot.
-The functions of the LibSets API, using the itemIds, will decompress the itemIds automatically and cache them until a reloadui happens.
Everything should work the same like before.
But only if you were using the API functions to the the itemIds! If you were accessing the itemIds or any other preloaded data directly by accessing LibSets.setInfo or LibSets.setDataPreloaded this will most likely fail now and throw error messages!
So change your addons tro properly use the API functions like LibSets.getAllSetIds(), LibSets.GetAllSetItemIds() and the other LibSets.GetAll* functions!

-Fixed setIds 237 and 238: Exchanged the needed trait count to craft them (thanks to ziggr!)
-Added functions:
--Returns true if the setId provided is a mythic set
--> Parameters: setId number: The set's setId
--> Returns: boolean isMythicSet
function lib.IsMythicSet(setId)


0.1.5
-Fixed Cyordiil setIds 480, 481,482: Settype corrected, traitsNeeeded=3 added. Thanks to snow for the info!

0.1.4
-Added constants: DLC_ITERATION_START (0) and DLC_ITERATION_END (pointing to the currently maximum DLC ID)
-Added API function LibSets.IsCurrentDLC(setId): Returns Boolean if the setId was added with the most current DLCId, or nil if the set got no DLCId assigned
-Function LibSets.GetSetInfo(setId) will return a new table entry "isCurrentDLC" (Boolean) in it's returned table, containing the value true/or false if the set was added with the most current DLCid

0.1.3
-Updated API
-Fixed description texts in files
-Fixed wrong set data
-Added new Harrowstorm set data
-Added preloaded itemIds, zone and wayshrine data multilanguage de, en, fr

0.1.2
-Updated API
-Simplified code of function IsVeteranSet and fixed return value to only be booean (not nilable), thanks to Scootworks!

0.1.1
Updated for PTS APIversion 100029 Dragonhold:
-Added new zones, wayhsrines, collectibleName, sets and constants for the library
-Renamed file with base constants to LibSets_ConstantsLibraryInternal.lua
-Changed loading of old data (no LibSets_data_$(APIVersion).lua needed anymore as one can update the current PTS version in file LibSets_Constants_All.lua in variable "APIVersions["PTS"]" and all data which is only meant to be loaded for this PTS version can be stored between a check function call:
if checkIfPTSAPIVersionIsLive() then ... end
-Moved packages and total a number of loop scans for the setItemIds to file LibSets_ConstantsLibraryInternal.lua, variables:
lib.debugNumItemIdPackages = 55 -- Increase this to find new added set itemIds after and update (last updated APIVersion 100029 Dragonhold)
lib.debugNumItemIdPackageSize = 5000 -- do not increase this or the client may crash!
-Fixed "miliseconds" typo in fileLibSets_Debug.lua, function scanAllSetData(). All setItemIds should be scanned properly now.
-Added "howto" information for an update of this library to file LibSets.lua (At the top)
-Added internal function checkIfSetExists(setId) which will check if a setId given in the preloaded setData tables really exists and will automatically skip the data fopr this set if it does not exist on the current game client (e.g. PTS setData on the live server)

0.1.0
-Removed API100027 files
-Changed data and constants files to use the ALL entry first and then try to find another API dependent filename
-Fixed LibZone debug functions

0.0.9
-Added a mapping table "wayshrineNodeIndex" to "zoneId" to be able to show the wayshrine of a set on the worldmap
-Added new API functions for the wayshrines
Code:
--Open the worldmap and show the map of the zoneId
--> Parameters: zoneId number: The zone's zoneId
function lib.openMapOfZoneId(zoneId)

--Open the worldmap, get the zoneId of the wayshrine wayshrineNodeId and show the wayshrine wayshrineNodeId on the map
--> Parameters: wayshrineNodeId number: The wayshrine's nodeIndex
function lib.showWayshrineNodeIdOnMap(wayshrineNodeId)

--Returns the wayshrineNodeIds's related zoneId, where this wayshrine is located
--> Parameters: wayshrineNodeId number
--> Returns:    zoneId number
function lib.GetWayshrinesZoneId(wayshrineNodeId)
-Changed parameters of the following API function. New 2nd parameter: withRelatedZoneIds boolean
Code:
--Returns the wayshrines as table for the setId. The table contains up to 3 wayshrines for wayshrine nodes in the different factions,
--e.g. wayshrines={382,382,382}. All entries can be the same, or even a negative value which means: No weayshrine is known
--Else the order of the entries is 1=Admeri Dominion, 2=Daggerfall Covenant, 3=Ebonheart Pact
--> Parameters: setId number: The set's setId
-->             withRelatedZoneIds boolean: Also provide a mappingTable as 2nd return value which contains the wayshrine's zoneId
-->             in this format: wayshrineNodsId2ZoneId = { [wayshrineNodeId1]= zoneId1, [wayshrineNodeId2]= zoneId2,... }
--> Returns:    wayshrineNodeIds table
function lib.GetWayshrineIds(setId, withRelatedZoneIds)
0.0.8
-Fixed wrong constants for 2 crafted sets (needed traits to craft), thanks Snow for the info.
-Changed Excel document to use the LibSets DLC_ID instead of plain numbers, for the generated setsData lua tables
-Moved redundant constants to a new file LibSets_Constants.lua, which will always be loaded.
All other API dependent constants remain in the LibSets_Constants_<APIVersion>.lua files

0.0.7
Fixed wrong constants in Scalebreaker set data.

0.0.6
-With version 0.0.6 the library got reworked totally.
Included you'll find an excel file LibSets_SetData.xlsx which contains the actual set data for the library.
The lua code neede dis created from this excel file.
-The SavedVariables ar enot needed anymore for this library (only if you the included debug functions).
All setsData is included, preloaded in the file LibSets_SetData_(APIVersion).lua (where APIVersion is the current game client's APIVersion e.g. 100027 for live's patch "Elsweyr" or 100028 for PTS's patch "Scalebraker").
-The library provides several API functions to get the set data, names, types, itemIds, etc.
-All itemIds of all setIds are included now, and not only 1 itemId (like in the past)
-SetNames for the supported languages come included
-Supported languages so far are: DE, EN, FR
If you want your language to be addded you can contact me via the private message system here on www.esoui.com.
You need to havbe the game client running on this new language and you need to run some debug functions and provide me some data from your SavedVariables afterwards.
-COmpatible with sets of API 100027 Elsweyr and 100028 Scalebreaker

---------------------------------------------------------------------------------
0.0.5
-Updated API to Elsweyr
-Added ##IsLibrary: true tag in manifest txt
-Fixed GetSetInfo function code
-Updated set itemIds with a preloaded table to speed up the scanning at new languages/APIVersions
-> Thanks to silvereyes for both changes!


0.0.4
Fixed "is scanning" and "is loaded" variables to prevent double scans at teh same time.
Added parameter "addonName" to function LibSets.LoadSets(override, addonName).
If you call the function you should specify the parameter "addonName" and pass your addon's name (String) in there so the chat output is able to show which addon called the LibSets.LoadSets function

0.0.3
Fixed lua error messages after sets were loaded.

0.0.2
Fixed:
-Loading of sets will show the updated counter for existing sets, where the localized name got updated, properly now.
-Loaded sets will be automatically scanned and added + saved to the SavedvAriables for each APIVersion + client language now
-After the sets were loaded (watch the chat for update messages during the set scan process) a dialog will ask you to do a reloadui now. If you click "no" the dialog will re-appear every 10 minutes until you click "Yes" or do a manual reloadui

Added:
API functions to check if sets are currently scanning or if the sets data was scanned and is provided (for other addons:
Check if the library is given and the sets were loaded like this
Code:
if LibSets and LibSets.AreSetsLoaded and LibSets.AreSetsLoaded() then --Sets are provided end
Code:
--Returns a boolean value, true if the sets of the game were already loaded/ false if not
--> Returns:    boolean areSetsLoaded
function LibSets.AreSetsLoaded()

--Returns a boolean value, true if the sets of the game are currently scanned and added/updated/ false if not
--> Returns:    boolean isCurrentlySetsScanning
function LibSets.IsSetsScanning()
Optional Files (0)


Archived Files (18)
File Name
Version
Size
Uploader
Date
0.1.9
679kB
Baertram
05/16/20 04:59 AM
0.1.8
679kB
Baertram
05/10/20 02:58 PM
0.1.7
678kB
Baertram
05/10/20 01:42 PM
0.1.6
678kB
Baertram
05/07/20 04:42 PM
0.1.5
837kB
Baertram
03/31/20 03:18 AM
0.1.4
842kB
Baertram
03/27/20 01:40 PM
0.1.3
842kB
Baertram
02/24/20 05:20 AM
0.1.2
841kB
Baertram
11/28/19 02:41 PM
0.1.1
835kB
Baertram
10/12/19 10:49 AM
0.1.0
780kB
Baertram
08/23/19 10:24 AM
0.0.9
936kB
Baertram
07/28/19 09:03 AM
0.0.8
924kB
Baertram
07/27/19 08:30 AM
0.0.6
911kB
Baertram
07/14/19 11:02 AM
0.0.5
14kB
Baertram
05/19/19 06:24 PM
0.0.4
8kB
Baertram
02/03/19 08:21 AM
0.0.3
7kB
Baertram
02/01/19 10:40 AM
0.0.2
7kB
Baertram
01/30/19 04:11 PM
0.0.1
5kB
01/21/19 10:18 AM


Post A Reply Comment Options
Unread 05/04/19, 04:25 PM  
Kyoma
AddOn Author - Click to view AddOns

Forum posts: 121
File comments: 303
Uploads: 10
Originally Posted by NachtkindFX
I always wanted an addon that simply shows me, in the item tool tip, where a set item comes from.

E.g. craftable, dungeon, trial and which one.

Will this be possible in the future?
Sadly there isn't really a way to determine where a specific set comes from outside of hardcoding it (to a certain degree) in the library but I do believe there is an update coming that will allow what you are looking for without much hassle.
Report comment to moderator  
Reply With Quote
Unread 05/04/19, 04:12 PM  
NachtkindFX

Forum posts: 1
File comments: 9
Uploads: 0
I always wanted an addon that simply shows me, in the item tool tip, where a set item comes from.

E.g. craftable, dungeon, trial and which one.

Will this be possible in the future?
Report comment to moderator  
Reply With Quote
Unread 04/16/19, 11:54 AM  
Baertram
 
Baertram's Avatar
AddOn Author - Click to view AddOns

Forum posts: 2976
File comments: 3594
Uploads: 62
Re: Initial scan

Originally Posted by Dueydoodah
When I started my session today (after updates to today's released addons), LibSets scanned the sets as it should. But, it was processor intense and caused the game to hesitate for each set scanned. It made the game unplayable until the scan was complate, at which point it asked to reloadui, which I did. Once it was reloaded, the game seems to be working fine again. Just thought you should know just in case this is unexpected behavior.
t depnds on the power of your CPU. My game is still playable but you'll notice a slightly lag each time the 5000 itemids get scanner, 30 times.
The cha is telling your already that THIS MIGHT HAPPEN! So it's a needed and normal behaviour, thanks for the feedback. There currently is no possibility to get the setData without scanning all itemIds, so this will take 1 to 2 minutes and lag the game during this period. Watch the chat for the initial info as it writes exactly this information into the system chat output. You might need an addon like pChat to show the system chat "BEFORE" addons finally loaded. Or you might not see any chat output before all addons were laoded, where libSets is already "scanning" then.
Report comment to moderator  
Reply With Quote
Unread 04/16/19, 10:41 AM  
Dueydoodah

Forum posts: 6
File comments: 29
Uploads: 0
Initial scan

When I started my session today (after updates to today's released addons), LibSets scanned the sets as it should. But, it was processor intense and caused the game to hesitate for each set scanned. It made the game unplayable until the scan was complate, at which point it asked to reloadui, which I did. Once it was reloaded, the game seems to be working fine again. Just thought you should know just in case this is unexpected behavior.
Report comment to moderator  
Reply With Quote
Post A Reply



Category Jump: