LibBodyguard-1.0

12.9k Downloads

Add support for Legion bodyguards

Sharparam opened this issue · 5 comments

commented

ℹ️ This issue will be continously updated as new information is gathered.

TODO

  • Detect if a follower is assigned as a "Combat Ally"
  • Detect if said "Combat Ally" is a proper bodyguard (and not just providing some spell)
  • Update library to handle both WoD and Legion bodyguards

Analysis

The library should support Legion bodyguards.

This might require some reworking in how bodyguards are handled, to account for bodyguards from different expansions (WoD and Legion). Or perhaps there can be a seamless transition?

On my Horde Druid, out of the visible followers, only one can be a bodyguard that follows you around in the world: Broll Bearmantle.

The output of C_Garrison.GetFollowers() gives this (trimmed to only show Broll Bearmantle):

[3]={
  displayHeight=0.5,
  followerTypeID=4,
  zoneSupportSpellID=218603,
  iLevel=760,
  scale=0.60000002384186,
  classAtlas="GarrMission_ClassIcon-Druid-Feral",
  isTroop=false,
  displayIDs={
    [1]={
      followerPageScale=1,
      showWeapon=true,
      id=65529
    }
  },
  displayScale=1,
  status="Combat Ally",
  level=103,
  quality=1,
  portraitIconID=1360256,
  isFavorite=false,
  slotSoundKitID=67139,
  xp=702,
  className="Feral Druid",
  classSpec=112,
  isMaxLevel=false,
  name="Broll Bearmantle",
  followerID="0x00000000023CDF49",
  height=1.3500000238419,
  levelXP=800,
  isCollected=true,
  garrFollowerID=641
},

(The above table is inside the first table returned by the function.)

The entry zoneSupportSpellID=218603 gives information on the "Combat Ally" spell for the follower. The output of GetSpellInfo(218603) is the following:

[1]="Bodyguard",
[2]="",
[3]=571585,
[4]=0,
[5]=0,
[6]=40,
[7]=218603

⚠️ This should be tested to see if all Bodyguard followers share that same spell. ⚠️

@InvisiBilldotnet did some investigating and found the following bodyguard spells:

Class Spec Follower Spell
Death Knight Blood Koltira Deathweaver 222365
Demon Hunter Vengeance Belath Dawnblade 222964
Druid Feral Broll Bearmantle 218603
Hunter Survival Addie Fizzlebog 219995
Hunter Survival Rexxar 220814
Mage Fire Millhouse Manastorm 220212
Mage Frost Archmage Modera 220125
Monk Brewmaster Chen Stormstout 211945
Monk Windwalker The Monkey King 212145
Paladin Protection Vindicator Boros 221625
Paladin Retribution Arator the Redeemer 221713
Priest Holy Sol 222080
Priest Shadow Zabra Hexx 222070
Rogue Outcast Akama 222820
Rogue Outcast Shade of Akama 222842
Rogue Outlaw Vanessa VanCleef 221496
Shaman Enhancement Rehgar Earthfury 217849
Shaman Elemental Stormcaller Mylra 218154
Warlock Destruction Ritssyn Flamescowl 216090
Warrior Fury Dvalen Ironrune 222827
commented

I found 20 Legion Bodyguard spells on Wowhead. The dumped SpellInfo is identical for all of them, other than the SpellID and icon values. Wowhead does list all of them with both Alliance and Horde versions of name/class, but all of the bodyguards have the same info for both sides (not too unexpected, since we all share a Hall).

Here are the SpellID and icon values for each of them:
Chen Stormstout - Brewmaster Monk
211945
611417

The Monkey King - Windwalker Monk
212145
667301

Ritssyn Flamescowl - Destruction Warlock
216090
236297

Rehgar Earthfury - Enhancement Shaman
217849
538568

Stormcaller Mylra - Elemental Shaman
218154
463562

Broll Bearmantle - Feral Druid
218603
571585

Addie Fizzlebog - Survival Hunter
219995
236445

Archmage Modera - Frost Mage
220125
135865

Millhouse Manastorm - Fire Mage
220212
135869

Rexxar - Survival Hunter
220814
132409

Vanessa VanCleef - Outlaw Rogue
221496
135358

Vindicator Boros - Protection Paladin
221625
236256

Arator the Redeemer - Retribution Paladin
221713
1360762

Zabra Hexx - Shadow Priest
222070
1022950

Sol - Holy Priest
222080
458225

Koltira Deathweaver - Blood Death Knight
222365
135770

Akama - Outcast
222820
1305151

Dvalen Ironrune - Fury Warrior
222827
254108

Shade of Akama - Outcast
222842
1305151

Belath Dawnblade - Vengeance Demon Hunter
222964
1355117

When I dumped my follower info, it output so many lines I couldn't see my Bodyguard's entry. If you have an addon that exposes IDs (like idTip or Wowhead Link), you can simply mouse over their Combat Ally ability icon on the Follower screen to get their Bodyguard SpellID.

commented

Thanks for the contribution, @InvisiBilldotnet! Do you by chance play on a non-English version of the WoW client? I need to find out if the return from C_Garrison.GetFollowerStatus() is localized. If you are, can you please run the following and tell me its output?

/dump C_Garrison.GetFollowerStatus(C_Garrison.GetFollowers(LE_FOLLOWER_TYPE_GARRISON_7_0)[1].followerID)
commented

Sorry, I'm en-US. Hopefully someone can get that info. According to https://us.battle.net/support/en/article/changing-language, you can change the game's language in Battle.net, but I haven't tried it myself.

commented

Bummer. It seems to work decently well at the moment at least. The health tracking is a little buggy when the bodyguard dies and respawns because there doesn't seem to be a good way to track that.

For English clients at least the current revision on master branch should work. And mousing over the bodyguard is a quick way to update its data (after it respawns for example).

Once I figure out the localization issue it should be ready for a new beta release of BGH.

commented

@InvisiBilldotnet The latest alpha of LibBodyguard-1.0 and BodyguardHealth should now have preliminary support for Bodyguards. My testing so far has been promising, but more people testing it (with bodyguards other than Broll) is always positive!

Note that you'll have to install the alpha LibBodyguard-1.0 separately along with the alpha version of BodyguardHealth (both from Curse) in order to get the necessary alpha changes in LibBodyguard-1.0.