BiSTracker is an addon for World of Warcraft: The War Within season 1. It is a front-end that displays per-class and per-spec "best in slot" information from any datasource such as WoWHead in a highly functional and aesthetically pleasing manner. It also includes optional integration with RCLootCouncil.
I created this addon as a deep dive learning experience into Lua scripting and WoW addon development; I never had the goal of maintaning this addon beyond its current state. To solidify that stance, this repository will be archived. If you are interested in using this project as a learning resource or maintaning it beyond its current state, you can check the documentation below.
Each major functionality of the addon is broken up into a corresponding Lua module. We'll go over a brief overview of each module:
db/database.lua
This is the dataset the addon works from. WoW's Lua implementation is missing the I/O library, so the dataset is created before packaging the addon and it is loaded at runtime as a Lua module.
The dataset is broken up into two sections: trinkets and other gear peices. The data structure is as follows:
context.database = {
trinkets = {
sourceName = {
["itemId"] = {
["className/SpecName"] = "tierString",
...
},
...
},
...
},
gear = {
sourceName = {
["itemId"] = {
["className/SpecName"] = {
"best in slot type string, i.e. overall",
"from M+",
"from raid",
},
...
},
...
},
...
}
}
A conversion script was written in Python to pull item data from a closed-source WoWHead scraper named bislist. It uses the luadata package to output the scraped data as a Lua module. See db/converter.py for more details.
addon/data.lua
The data module contains misc. helper functions for searching the database module.
addon/utils.lua
The utils module contains just a few utility functions, dump() for debugging and and implementation of SplitString() for string manipulation.
addon/events.lua
The events module handles all events that the addon uses to function. It is the main entry point for the addon.
addon/tooltips.lua
The tooltips module handles drawing best in slot information to item tooltips.
addon/icons.lua
The icons module handles drawing best in slot information to item icons in various locations, the inventory, bank, character panel, inspect, warband bank, and weekly vault frames.
addon/player.lua
The player module provides helper functions for getting the current class name and specializations of the local player or another on-screen unit.
The character panel module handles drawing best in slot information to either the local player's character panel or player inspect frame.
addon/commands.lua
The commands module handles all command functions. In the addon's current state, there is only one registered command, /bis, which provides a run-down of the player's best in slot progress and gives tips on tasks that could help their progress.
addon/rclootconcil.lua
The RCLootCouncil module handles integration with RCLootCouncil. In its current state, it only provides best in slot information via tooltip to a council member's voting frame.