LibGroupInSpecT

Summary

A small library which keeps track of group members and keeps an up-to-date cache of their specialization and talents.

It's similar to the old LibGroupTalents/LibTalentQuery and the LibRaidInspect libraries, but unlike the former it's actually working on 7.0, and unlike the latter it works properly in Battlegrounds. Additionally it has the feature where it communicates spec/talent updates to other LibGroupInSpecT users. This is an important point as of the writing of this there is no way to detect when another player re-specs/talents.

This library started out as a part of RaidChecklist as replacement for LibGroupTalents, but has since been split off into its own project as its usefulness increases the more widespread it is.

To make use of this library you'll need to also have the usual LibStub and LibCallbackHandler libs.

For a real usage example, take a look at the RaidChecklist project.


Events

These events can be registered for using the regular CallbackHandler ways.

Reference

event args
"GroupInSpecT_Update" guid, unit, info
"GroupInSpecT_Remove" guid
"GroupInSpecT_InspectReady" guid, unit

Description

"GroupInSpecT_Update"
Fires when info is ready or has been modified.
"GroupInSpecT_Remove"
Fires when a member leaves the group.
"GroupInSpecT_InspectReady"
Fires during INSPECT_READY so that clients can perform supplemental inspection handling (as of r78).

Example

local LGIST = LibStub:GetLibrary("LibGroupInSpecT-1.1")
LGIST.RegisterCallback(addonObject, "GroupInSpecT_Remove", "UnitRemoved")
function addonObject:UnitRemoved(event, guid)
  -- unit with guid removed
end

API

Functions for external use:

lib:Rescan (guid or nil)
Force a fresh inspection of all group members. As of r76 it accepts an optional guid parameter, to rescan only a particular GUID rather than all group members.
lib:QueuedInspections ()
Returns an array of GUIDs of outstanding inspects.
lib:StaleInspections ()
Returns an array of GUIDs for which the data has been deemed stale and is awaiting an update (no action required, the refresh happens internally).
lib:GetCachedInfo (guid)
Returns the cached info for the given GUID, if available, nil otherwise. Information is cached for current group members only.
lib:GuidToUnit (guid)
Returns the unit id for the given GUID, provided said GUID represents a current group member, else nil.

info table structure

The fields of the table passed as an argument for "GroupInSpecT_Update" callback or returned by one of the API functions (eg. :GetCachedInfo(guid) ). A list of all the global specialization IDs is available here.

Note: Not all fields may be available at all times due to the Blizz API not returning the info at that point. Incremental updates will be sent, so coding with the possibility of nil in mind is highly advised.

Info structure

  .guid
  .name
  .realm
  .race
  .race_localized
  .class
  .class_localized
  .class_id
  .gender -- 2 = male, 3 = female
  .global_spec_id
  .spec_index
  .spec_name_localized
  .spec_description
  .spec_icon
  .spec_background
  .spec_role
  .spec_role_detailed -- "tank", "melee", "ranged" or "healer" (introduced in 1.0.2)
  .spec_group -- active spec group (1/2/nil), introduced in 1.1
  .talents = {
    [<talent_id>] = { -- Note: Since 1.1 this is a talent_id, not a spell_id
      .talent_id -- Introduced in 1.1. This replaces the old 1.0.x .idx entry
      .tier
      .column
      .name_localized
      .icon
      .spell_id
    }
    ...
  }
.pvp_talents = {
[<talent_id>] = {
.talent_id
.name_localized
.icon
.spell_id
}
...
}
.lku -- last known unit id

Usage

Typical usage example.
.pkgmeta

Libs/LibGroupInSpecT-1.1: svn://svn.wowace.com/wow/libgroupinspect/mainline/trunk

.toc

## X-Embeds: LibGroupInSpecT-1.1
## OptionalDeps: LibGroupInSpecT-1.1
#@no-lib-strip@
Libs\LibStub\LibStub.lua
Libs\CallbackHandler-1.0\CallbackHandler-1.0.lua
Libs\LibGroupInSpecT-1.1\LibGroupInSpecT-1.1.lua
#@end-no-lib-strip@

alternatively embeds.xml (referenced in .toc)

<ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/..\FrameXML\UI.xsd">
<!--@no-lib-strip@-->
  <script file="Libs\LibStub\LibStub.lua"/>
  <include file="Libs\CallbackHandler-1.0\CallbackHandler-1.0.xml"/>
  <include file="Libs\LibGroupInSpecT-1.1\lib.xml"/>
<!--@end-no-lib-strip@-->
</ui>

.lua

local LGIST=LibStub:GetLibrary("LibGroupInSpecT-1.1")
LGIST.RegisterCallback(addonObject, "GroupInSpecT_Update", "UpdateHandler")
LGIST.Registercallback(addonObject, "GroupInSpecT_Remove", "RemoveHandler")
function addonObject:UpdateHandler(event, guid, unit, info)
  if info.class and info.class == "DEATHKNIGHT" and info.spec_role and info.spec_role == "TANK" then
    print(UnitName(unit).." is now "..info.spec_name_localized) -- info.name may also be available
  end
end
function addonObject:RemoveHandler(event, guid)
  -- guid no longer a group member
end
local info = LGIST:GetCachedInfo(guid)
local hasFocusingShot = info and next(info.talents) and info.talents[21729] -- focusing shot talent_id

<sub>Main page formatting by Dridzt. Much obliged!</sub>

Download

File Name Status Version Downloads Date
LibGroupInSpecT-1.1-r90-alpha.zip alpha 7.2.5 0 25/04/2018
LibGroupInSpecT-1.1-1.4.0.zip release 8.3.0 0 22/08/2020
LibGroupInSpecT-1.1-r98-alpha.zip alpha 9.0.1 0 18/10/2020
LibGroupInSpecT-1.1-r92-alpha.zip release 7.3.5 0 25/04/2018
LibGroupInSpecT-1.1-r66.zip alpha 6.0.2 0 13/10/2014
LibGroupInSpecT-1.0-1.0.1.zip release 5.0.5 0 24/12/2012
LibGroupInSpecT-1.1-r78.zip alpha 6.0.3 0 21/02/2015
LibGroupInSpecT-1.0-r51.zip alpha 5.1.0 0 03/03/2013
LibGroupInSpecT-1.0-r61.zip alpha 5.2.0 0 18/07/2014
LibGroupInSpecT-1.1-r84.zip alpha 7.0.3 0 30/07/2016
LibGroupInSpecT-1.1-r88-alpha.zip alpha 7.2.0 0 22/04/2017
LibGroupInSpecT-1.1-r63.zip alpha 6.0.1 0 18/09/2014
LibGroupInSpecT 7.3.0 Updating 7.3.0 Updating Updating
LibGroupInSpecT 7.3.2 Updating 7.3.2 Updating Updating
LibGroupInSpecT 8.0.1 Updating 8.0.1 Updating Updating
LibGroupInSpecT 8.1.0 Updating 8.1.0 Updating Updating
LibGroupInSpecT 8.1.5 Updating 8.1.5 Updating Updating
LibGroupInSpecT 8.2.0 Updating 8.2.0 Updating Updating
LibGroupInSpecT 8.2.5 Updating 8.2.5 Updating Updating
LibGroupInSpecT
LibGroupInSpecT

Dear youtuber!
Have you a channel youtube and want to bring your Video to quality visitors?
Do you want your video to appear on our website?
Do you want to become partner with us?
Just 3 steps to become our partner:
Step 1: Make video review for mods, addons, plugins, ... which you like
Step 2: Upload this video to youtube and our link to your video description
Step 3: Send the youtube video link via message to http://fb.com/9lifehack or leave a comment in the post. We will add your video in the our post, it will help you have more view.
JOIN to get more youtube view with us!!!!

Related Posts

Smarty Productivity Happiness

9LifeHack.com - make things smart