WoWInterface

WoWInterface (https://www.wowinterface.com/forums/index.php)
-   Legion Beta archived threads (https://www.wowinterface.com/forums/forumdisplay.php?f=177)
-   -   PlayerModel:SetDisplayInfo (https://www.wowinterface.com/forums/showthread.php?t=53428)

maqjav 05-13-16 10:56 AM

PlayerModel:SetDisplayInfo
 
Hello.

I'm testing PlayerModel:SetDisplayInfo and it seems it doesn't show the model any longer if you haven't seen the npc before. Once it's in your cache it does work as expected. Is there any new method to achieve this?

Thanks

semlar 05-13-16 11:00 AM

SetDisplayInfo was added specifically to display models without requiring them to be cached; what code are you using to test this?

maqjav 05-13-16 11:23 AM

Quote:

Originally Posted by semlar (Post 314721)
SetDisplayInfo was added specifically to display models without requiring them to be cached; what code are you using to test this?


Hello, I was just playing with the next code:
Code:

myFrame:modelFrame = _G.CreateFrame("PlayerModel", "mxpplayermodel", myFrame)
myFrame.modelFrame:SetHeight(120)
myFrame.modelFrame:SetDisplayInfo(26711)
myFrame.modelFrame:Show()

The ID 26711 belongs to the Time-Lost Proto-Drake.

It didn't work before, but after restarting the game it started working. I've used different IDs and it seems to work only sometimes, perhaps it's a little bit buggy right now?

False alarm though :)

semlar 05-13-16 11:31 AM

I doubt it's bugged, you probably just aren't displaying your frame correctly. The model needs a height, a width, an anchor, and a visible parent to be shown.

You only have a height listed there, no anchor and we can't tell what condition "myFrame" is in.

If you open your character pane you can just type /run CharacterModelFrame:SetDisplayInfo(26711) to test whether the function is actually functioning.

myrroddin 05-13-16 12:08 PM

Assuming a copy & paste, your first line has a typo. You have a : where instead you should have a . like your other lines.

MunkDev 05-13-16 06:06 PM

It might actually be bugged. I have a PlayerModel frame just for some extra effect, and if I assign the points to match the parent on creation it doesn't seem to show the model frame. Assigning the points in the show script of the parent shows the model, but I'm not entirely sure why this is happening.

Lua Code:
  1. Frame:HookScript("OnShow", function(self)
  2.     self.Model:ClearAllPoints()
  3.     self.Model:SetAllPoints()
  4. end)

zork 05-14-16 06:09 AM

I installed my model viewer just now. Need to fix some stuff but my murloc is showing fine.

My problem is that self:GetModel() does not work. Seems to be removed.

Uploaded the model viewer for Legion beta.

http://www.wowinterface.com/download...delViewer.html

Resike 05-14-16 11:26 AM

How can you get the model path then?

semlar 05-14-16 11:38 AM

Quote:

Originally Posted by Resike (Post 314763)
How can you get the model path then?

You can't, they aren't using paths internally any more.

Resike 05-14-16 02:24 PM

Quote:

Originally Posted by semlar (Post 314766)
You can't, they aren't using paths internally any more.

It makes no fucken sense. We are forced to build a id-path table for 500k models then?

TOM_RUS 05-14-16 02:28 PM

Why you need path?

Resike 05-15-16 04:40 AM

Quote:

Originally Posted by TOM_RUS (Post 314775)
Why you need path?

I don't need the path specifically, i need some id or whatever based on what i can load a saved model. And since not every model have a id for SetDisplayInfo() and SetModel() requires a path, it would makes sense the path would be the best.

It's like removing GetTexture().

Resike 05-15-16 05:37 AM

I also have some other questions about other model functions. Why do the models look so blurry on the beta? Also what changed with SetLight()? Seems like the parameters did'nt changes however the same code which runs flawlessly on live drops an error in the beta.

MunkDev 05-15-16 05:44 AM

Quote:

Originally Posted by Resike (Post 314812)
I also have some other questions about other model functions. Why do the models look so blurry on the beta? Also what changed with SetLight()? Seems like the parameters did'nt changes however the same code which runs flawlessly on live drops an error in the beta.

First two arguments are boolean now, instead of 0-1 range.

TOM_RUS 05-15-16 06:10 AM

Quote:

Originally Posted by Resike (Post 314810)
I don't need the path specifically, i need some id or whatever based on what i can load a saved model. And since not every model have a id for SetDisplayInfo() and SetModel() requires a path, it would makes sense the path would be the best.

There's also SetCreature, SetItem, SetItemAppearance, SetDisplayInfo along with SetModel. Those API's cover a broad range of models. Also you don't need any GetXXX API's at all, since that widget only displays whatever you set to it, just store that information yourself somewhere.

Resike 05-15-16 08:46 AM

Quote:

Originally Posted by TOM_RUS (Post 314815)
There's also SetCreature, SetItem, SetItemAppearance, SetDisplayInfo along with SetModel. Those API's cover a broad range of models. Also you don't need any GetXXX API's at all, since that widget only displays whatever you set to it, just store that information yourself somewhere.

The issue is that you won't be able to pair DisplayIDs with their proper model paths like this:

Lua Code:
  1. local function ExtractModelData()
  2.     index = index + 1
  3.     print("Model: ", index)
  4.     model:ClearModel()
  5.     model:SetDisplayInfo(index)
  6.     if model:GetModel() and model:GetModel() ~= "" then
  7.         modelData[index] = model:GetModel()
  8.     end
  9. end

Which kills the ability to categorize/use/select multi textured models.

ceylina 05-18-16 08:07 AM

Looks from another link that getModel is now GetModelAlpha?

Resike 05-18-16 08:13 AM

Quote:

Originally Posted by ceylina (Post 314927)
Looks from another link that getModel is now GetModelAlpha?

Nope, thats the model's alpha.

ceylina 05-18-16 08:44 AM

Quote:

Originally Posted by Resike (Post 314928)
Nope, thats the model's alpha.

Got it from this

https://www.diffchecker.com/il1di4ac

playermodel, methods, getmodel is now mapped to getModelAlpha. Doesn't make sense but neither does half the changes they are making.

Resike 05-18-16 09:57 AM

Quote:

Originally Posted by ceylina (Post 314929)
Got it from this

https://www.diffchecker.com/il1di4ac

playermodel, methods, getmodel is now mapped to getModelAlpha. Doesn't make sense but neither does half the changes they are making.

No it's not. Log in on the beta and check the return values it's gonna be a number from 0-1.

ceylina 05-18-16 10:43 AM

Quote:

Originally Posted by Resike (Post 314931)
No it's not. Log in on the beta and check the return values it's gonna be a number from 0-1.

well then it no longer exists so like hinted it, it's a dumb change

Resike 05-18-16 10:53 AM

Quote:

Originally Posted by ceylina (Post 314933)
well then it no longer exists so like hinted it, it's a dumb change

There is not a single programming language that could show a model/texture without pointing to the the file itself. They don't gain any performace by hiding the path to the files or storing them in a different database file. They just simply don't wanna bypass that value to the lua machine, which is dumb on so many levels. (The thing they have done with the casting parameters is pretty dumb too, but at least that could save a lot of server load for them, however it's not so good for the client itself.) I've already made a suggestion report about it, but i doubt it's gonna make any difference.

Simca 05-20-16 02:00 AM

Quote:

Originally Posted by Resike (Post 314934)
There is not a single programming language that could show a model/texture without pointing to the the file itself. They don't gain any performace by hiding the path to the files or storing them in a different database file. They just simply don't wanna bypass that value to the lua machine, which is dumb on so many levels. (The thing they have done with the casting parameters is pretty dumb too, but at least that could save a lot of server load for them, however it's not so good for the client itself.) I've already made a suggestion report about it, but i doubt it's gonna make any difference.

They don't store filenames at all now, Resike. Even if you had complete access to their C code from the Lua environment, you couldn't retrieve filenames for any file outside of Interface\* (it still knows those names through a separate database called ManifestInterfaceData).

You're right that there is no language that can show a model or texture without pointing to the file itself, but those pointers are no longer names - they're namehashes.

What used to be "Character\Scourge\Male\ScourgeMale.m2" is now known to the client as E69ABF2F3DAFC6FF, for example.

Resike 05-20-16 02:05 AM

Why stop here then? Remove GetName(), GetFont() and so on.

Simca 05-20-16 02:12 AM

It is quite possible for a user to make a library to do this for the game, though. As of present, they are still shipping a file called FileDataComplete.db2 that has a complete listing of the game's internal FileDataIDs to real filenames. Why they are shipping it is a bit of a mystery because the client actually does -not- read the file. Maybe they are trying to help the community? IDK.

It would be a really intense library though... FileDataComplete is 27 MB of strings.

Resike 05-20-16 02:56 AM

How can i get access to this file? I can't find it on the casc.

Resike 05-20-16 06:41 AM

I went out and saved what i could can from the live realms:
https://raw.githubusercontent.com/Re...%20(21742).lua

Contains every: modelDisplayID - modelPath, up to date.

zork 05-20-16 08:57 AM

When I updated the model viewer valid displayids went up to 73900 I think. GetModel() not returning any values is actually kind of bad. Because up until now you could categorize models by extracting the model path.

MunkDev 05-20-16 10:32 AM

Quote:

Originally Posted by zork (Post 315021)
GetModel() not returning any values is actually kind of bad. Because up until now you could categorize models by extracting the model path.

Storyline is completely broken because of this. I wonder if we'll see any changes to alleviate this pretty significant issue.

ceylina 05-20-16 11:08 AM

Dumb question but has anyone written about this on the official beta forums? If they become aware just how disruptive this is, I am sure they can at least offer alternatives.

Resike 05-20-16 11:58 AM

Quote:

Originally Posted by zork (Post 315021)
When I updated the model viewer valid displayids went up to 73900 I think. GetModel() not returning any values is actually kind of bad. Because up until now you could categorize models by extracting the model path.

I went up to 100k, 68kish the last return values, it makes sense since they added the BabyWinston pet last.

Simca 05-20-16 12:24 PM

Quote:

Originally Posted by Resike (Post 315012)
How can i get access to this file? I can't find it on the casc.

It's under DBFilesClient\FileDataComplete.db2, but it's in the new WDB5 format, you'll need a WDB5 reader to read it properly.

The latest version (in a Lua format) I just posted here: http://www.mediafire.com/download/kv...j/FileData.lua

Not even sure how the game would handle a 49 MB Lua file though, honestly. It could be wildly stripped down by removing development files (FileDataComplete is literally -complete- in that it includes huge swaths of files that are shipped with the client and only exist on developer's PCs and servers) and by eliminating things that aren't textures or models.

Edit: Making those changes cuts the file size in half, down to 25 MB. That's a lot, but not enough. I wonder about restricting it further so that it only contains A) Models and B) Textures in Interface\*

Resike 05-20-16 01:00 PM

Quote:

Originally Posted by Simca (Post 315038)
It's under DBFilesClient\FileDataComplete.db2, but it's in the new WDB5 format, you'll need a WDB5 reader to read it properly.

The latest version (in a Lua format) I just posted here: http://www.mediafire.com/download/kv...j/FileData.lua

Not even sure how the game would handle a 49 MB Lua file though, honestly. It could be wildly stripped down by removing development files (FileDataComplete is literally -complete- in that it includes huge swaths of files that are shipped with the client and only exist on developer's PCs and servers) and by eliminating things that aren't textures or models.

Edit: Making those changes cuts the file size in half, down to 25 MB. That's a lot, but not enough. I wonder about restricting it further so that it only contains A) Models and B) Textures in Interface\*

Is this real? Are they really calling that fd table a million times, instead of putting the values directly into the table?

Simca 05-20-16 01:05 PM

Quote:

Originally Posted by Resike (Post 315039)
Is this real? Are they really calling that fd table a million times, instead of putting the values directly into the table?

No, I just made it in 3 minutes with Excel after converting their DB2 to CSV, and it was easier that way (every row in Excel became a row in Lua). Just a proof of concept.

Resike 05-20-16 01:13 PM

Quote:

Originally Posted by Simca (Post 315040)
No, I just made it in 3 minutes with Excel after converting their DB2 to CSV, and it was easier that way (every row in Excel became a row in Lua). Just a proof of concept.

Oh okay, i still can't find the original file in the dbfilesclient tho.

Nevcairiel 05-20-16 05:46 PM

Quote:

Originally Posted by ceylina (Post 315031)
Dumb question but has anyone written about this on the official beta forums? If they become aware just how disruptive this is, I am sure they can at least offer alternatives.

The game doesnt use file paths anymore, and the file Simca references is more likely to vanish eventually than be offered up through APIs.

So in short, the game can't give you any information it doesn't have, and its extremely unlikely they add extra information just for some addons. Addons will be able to update to the new system eventually, just don't stick to the mentality "its entirely broken", instead think about how you can fix it without relying on Blizzard to fix it for you.

We have asked Guill on IRC the other day, and the answer was quite simple: They are trying to use file IDs exclusively in the game.

Resike 05-20-16 06:15 PM

Quote:

Originally Posted by Nevcairiel (Post 315049)
The game doesnt use file paths anymore, and the file Simca references is more likely to vanish eventually than be offered up through APIs.

So in short, the game can't give you any information it doesn't have, and its extremely unlikely they add extra information just for some addons. Addons will be able to update to the new system eventually, just don't stick to the mentality "its entirely broken", instead think about how you can fix it without relying on Blizzard to fix it for you.

We have asked Guill on IRC the other day, and the answer was quite simple: They are trying to use file IDs exclusively in the game.

Of course we can create a workaround, if we break the tos a hundred times. Also memory sniffing or file monitoring casc files then converting them back to their original file name is not something you want to do one by one in 70.000 models.

Also they added GetDisplayInfo() which does exactly the same thing as GetModel() did, reading table indexes from a db file. Too bad GetDisplayInfo is completely useless, since it doesn't return anything that you don't know.

Simca 05-21-16 03:04 AM

I have to agree with nevcariel - from what conversation I've had with the devs on the subject over IRC and Twitter, it seems extremely unlikely that they are going to offer us an alternative.

If they readded parsing FileDataComplete to the game, for example, it would be a performance hit. In its most compact uncompressed form (if you split up filenames into 'names' and 'paths' and deduplicate), it is still 27 MB of raw strings. The performance hit would be extremely minor (probably under a second during load time), but they just aren't going to be willing to make -any- performance hit for specific features of optional addons.

Memory sniffing is not involved here (like I said, the client doesn't even know what you're looking for - it can't help with this), and if reading CASC data is against the ToS, then so was reading MPQ data (it's the same concept) and everyone here has broken it hundred times over already. :p

I'm just trying to help offer productive solutions because I know Blizzard isn't going to do anything about this.

Resike 05-21-16 07:04 AM

Quote:

Originally Posted by Simca (Post 315062)
I have to agree with nevcariel - from what conversation I've had with the devs on the subject over IRC and Twitter, it seems extremely unlikely that they are going to offer us an alternative.

If they readded parsing FileDataComplete to the game, for example, it would be a performance hit. In its most compact uncompressed form (if you split up filenames into 'names' and 'paths' and deduplicate), it is still 27 MB of raw strings. The performance hit would be extremely minor (probably under a second during load time), but they just aren't going to be willing to make -any- performance hit for specific features of optional addons.

Memory sniffing is not involved here (like I said, the client doesn't even know what you're looking for - it can't help with this), and if reading CASC data is against the ToS, then so was reading MPQ data (it's the same concept) and everyone here has broken it hundred times over already. :p

I'm just trying to help offer productive solutions because I know Blizzard isn't going to do anything about this.

Makes no sense. A model set with displayID needs to know which .m2 file needs to be loaded, as soon as you create the model itself. It also need to know which skin file needs to be loaded. So there needs to be a table somewhere which holds this informations, i just couln't find it. (I found the skinfile-displayid references on live, if you open the CreatureDisplayInfo.db2 you can see which skin files are compatible whit which displayID in the 8-9-10 table.)

And yes you can sniff this out easily just load the model ingame, check which file gets loaded in the casc, export that file make the casc listfile conversion and shazam you get the model's path. But it's just not really the ideal thing.

ceylina 05-21-16 07:22 AM

So just to understand, unlike keeping the way resike explains, you now would update models based on targeting and events and store the set model in a variable to be used to maintain a model's 3d portrait/display so long as said model was or is used on say a unit frame/ tooltip or other frame like how the storyline addon displays 3d models?

If that is the case and you use a combination of event triggers then I suppose this would cut down on bloat, resource usage, and potential errors?

Resike 05-21-16 08:26 AM

Quote:

Originally Posted by ceylina (Post 315077)
So just to understand, unlike keeping the way resike explains, you now would update models based on targeting and events and store the set model in a variable to be used to maintain a model's 3d portrait/display so long as said model was or is used on say a unit frame/ tooltip or other frame like how the storyline addon displays 3d models?

If that is the case and you use a combination of event triggers then I suppose this would cut down on bloat, resource usage, and potential errors?

Not it has 0 affect in performance.

TOM_RUS 05-21-16 09:42 AM

Quote:

Originally Posted by Resike (Post 315075)
I found the skinfile-displayid references on live, if you open the CreatureDisplayInfo.db2 you can see which skin files are compatible whit which displayID in the 8-9-10 table.

Are you talking about actual *.skin files or *.blp textures? Because *.skin files were never referenced in CreatureDisplayInfo.db2. Also it still works exact same way in legion, except there's now filedataid's instead of plain strings... Also I don't understand how that *.blp files are useful for anything, as you can't use them anyway (there's no model->settexture() or anything like that as far I know).

Resike 05-21-16 10:20 AM

Quote:

Originally Posted by TOM_RUS (Post 315082)
Are you talking about actual *.skin files or *.blp textures? Because *.skin files were never referenced in CreatureDisplayInfo.db2. Also it still works exact same way in legion, except there's now filedataid's instead of plain strings... Also I don't understand how that *.blp files are useful for anything, as you can't use them anyway (there's no model->settexture() or anything like that as far I know).

It's blp files, but i guess the skin files use those blps anyway.
You can iterate over every displayModel, exrtact their proper modelpath via GetModel(), then you can arrange a table for every model and all of it's reskinned blp/skin and use those displayIDs to recolor a model like this:

https://youtu.be/egzorLE4h8E?t=47

TOM_RUS 05-21-16 10:29 AM

So the only difference is that you can no longer group models by m2 file? It's not a big deal I think. You can still do everything else as before. You can also try to suggest them to add GetModel that returns filedataid back, probably not super hard to implement, as they lookup that id anyway...

Resike 05-21-16 10:42 AM

Quote:

Originally Posted by TOM_RUS (Post 315084)
So the only difference is that you can no longer group models by m2 file? It's not a big deal I think. You can still do everything else as before. You can also try to suggest them to add GetModel that returns filedataid back, probably not super hard to implement, as they lookup that id anyway...

Yes. It just makes no sense, they added the GetDisplayInfo() when GetModel() was removed, which is probably is the same table lookup method as GetModel() was, but this one returns an useless value.

I'm also not sure how could i get the modelpath with the filedataid, without using another external very big lookup table. The old GetModel() was perfect.

TOM_RUS 05-21-16 10:45 AM

Quote:

Originally Posted by Resike (Post 315085)
I'm also not sure how could i get the modelpath with the filedataid, without using another external very big lookup table. The old GetModel() was perfect.

You don't need modelpath if you have filedataid, they are essentially same thing, just different representation (string vs integer).

Resike 05-21-16 11:33 AM

Quote:

Originally Posted by TOM_RUS (Post 315086)
You don't need modelpath if you have filedataid, they are essentially same thing, just different representation (string vs integer).

I see. 10Char

TOM_RUS 05-21-16 01:47 PM

CreatureDisplayInfo id to FileData id as lua table: click.

Resike 05-21-16 02:06 PM

Quote:

Originally Posted by TOM_RUS (Post 315094)
CreatureDisplayInfo id to FileData id as lua table: click.

Thanks, that look solid, how did you got this info? Is it in any of the db files?

TOM_RUS 05-21-16 03:49 PM

Quote:

Originally Posted by Resike (Post 315095)
Thanks, that look solid, how did you got this info? Is it in any of the db files?

Code:

foreach (auto cdi in CreatureDisplayInfo.db2)
{
  auto cmd = CreatureModelData.db2[cdi->m_modelID];
  printf("[%u] = %u,", cdi->m_ID, cmd->m_FileDataId);
}


Resike 05-21-16 04:39 PM

Quote:

Originally Posted by TOM_RUS (Post 315098)
Code:

foreach (auto cdi in CreatureDisplayInfo.db2)
{
  auto cmd = CreatureModelData.db2[cdi->m_modelID];
  printf("[%u] = %u,", cdi->m_ID, cmd->m_FileDataId);
}


Sneaky, thanks for your help.

zork 05-22-16 03:02 PM

The following list contains my favorite displayids from my latest search (51000-73000)
http://imgur.com/a/34ce7

This one stands out:
http://imgur.com/xEKgYj2

I will make myself an afk addon because of it.

Resike 05-22-16 03:24 PM

Quote:

Originally Posted by zork (Post 315114)
The following list contains my favorite displayids from my latest search (51000-73000)
http://imgur.com/a/34ce7

This one stands out:
http://imgur.com/xEKgYj2

I will make myself an afk addon because of it.

How is that bucket is one of your favourite? xD

I think this function is gonna be pretty intresting ApplySpellVisualKit(), i guess you will be able to spawn spell effect on models, like shield wall, bloodlust, etc?

zork 05-22-16 04:17 PM

semlar posted in irc that you can extract animation ids from any model.
Lua Code:
  1. for i = 0,  1103 do if model:HasAnimation(i) end

Code:

[0] = "Stand",
[1] = "Death",
[2] = "Spell",
[3] = "Stop",
[4] = "Walk",
[5] = "Run",
[6] = "Dead",
[7] = "Rise",
[8] = "StandWound",
[9] = "CombatWound",
[10] = "CombatCritical",
[11] = "ShuffleLeft",
[12] = "ShuffleRight",
[13] = "Walkbackwards",
[14] = "Stun",
[15] = "HandsClosed",
[16] = "AttackUnarmed",
[17] = "Attack1H",
[18] = "Attack2H",
[19] = "Attack2HL",
[20] = "ParryUnarmed",
[21] = "Parry1H",
[22] = "Parry2H",
[23] = "Parry2HL",
[24] = "ShieldBlock",
[25] = "ReadyUnarmed",
[26] = "Ready1H",
[27] = "Ready2H",
[28] = "Ready2HL",
[29] = "ReadyBow",
[30] = "Dodge",
[31] = "SpellPrecast",
[32] = "SpellCast",
[33] = "SpellCastArea",
[34] = "NPCWelcome",
[35] = "NPCGoodbye",
[36] = "Block",
[37] = "JumpStart",
[38] = "Jump",
[39] = "JumpEnd",
[40] = "Fall",
[41] = "SwimIdle",
[42] = "Swim",
[43] = "SwimLeft",
[44] = "SwimRight",
[45] = "SwimBackwards",
[46] = "AttackBow",
[47] = "FireBow",
[48] = "ReadyRifle",
[49] = "AttackRifle",
[50] = "Loot",
[51] = "ReadySpellDirected",
[52] = "ReadySpellOmni",
[53] = "SpellCastDirected",
[54] = "SpellCastOmni",
[55] = "BattleRoar",
[56] = "ReadyAbility",
[57] = "Special1H",
[58] = "Special2H",
[59] = "ShieldBash",
[60] = "EmoteTalk",
[61] = "EmoteEat",
[62] = "EmoteWork",
[63] = "EmoteUseStanding",
[64] = "EmoteTalkExclamation",
[65] = "EmoteTalkQuestion",
[66] = "EmoteBow",
[67] = "EmoteWave",
[68] = "EmoteCheer",
[69] = "EmoteDance",
[70] = "EmoteLaugh",
[71] = "EmoteSleep",
[72] = "EmoteSitGround",
[73] = "EmoteRude",
[74] = "EmoteRoar",
[75] = "EmoteKneel",
[76] = "EmoteKiss",
[77] = "EmoteCry",
[78] = "EmoteChicken",
[79] = "EmoteBeg",
[80] = "EmoteApplaud",
[81] = "EmoteShout",
[82] = "EmoteFlex",
[83] = "EmoteShy",
[84] = "EmotePoint",
[85] = "Attack1HPierce",
[86] = "Attack2HLoosePierce",
[87] = "AttackOff",
[88] = "AttackOffPierce",
[89] = "Sheath",
[90] = "HipSheath",
[91] = "Mount",
[92] = "RunRight",
[93] = "RunLeft",
[94] = "MountSpecial",
[95] = "Kick",
[96] = "SitGroundDown",
[97] = "SitGround",
[98] = "SitGroundUp",
[99] = "SleepDown",
[100] = "Sleep",
[101] = "SleepUp",
[102] = "SitChairLow",
[103] = "SitChairMed",
[104] = "SitChairHigh",
[105] = "LoadBow",
[106] = "LoadRifle",
[107] = "AttackThrown",
[108] = "ReadyThrown",
[109] = "HoldBow",
[110] = "HoldRifle",
[111] = "HoldThrown",
[112] = "LoadThrown",
[113] = "EmoteSalute",
[114] = "KneelStart",
[115] = "KneelLoop",
[116] = "KneelEnd",
[117] = "AttackUnarmedOff",
[118] = "SpecialUnarmed",
[119] = "StealthWalk",
[120] = "StealthStand",
[121] = "Knockdown",
[122] = "EatingLoop",
[123] = "UseStandingLoop",
[124] = "ChannelCastDirected",
[125] = "ChannelCastOmni",
[126] = "Whirlwind",
[127] = "Birth",
[128] = "UseStandingStart",
[129] = "UseStandingEnd",
[130] = "CreatureSpecial",
[131] = "Drown",
[132] = "Drowned",
[133] = "FishingCast",
[134] = "FishingLoop",
[135] = "Fly",
[136] = "EmoteWorkNoSheathe",
[137] = "EmoteStunNoSheathe",
[138] = "EmoteUseStandingNoSheathe",
[139] = "SpellSleepDown",
[140] = "SpellKneelStart",
[141] = "SpellKneelLoop",
[142] = "SpellKneelEnd",
[143] = "Sprint",
[144] = "InFlight",
[145] = "Spawn",
[146] = "Close",
[147] = "Closed",
[148] = "Open",
[149] = "Opened",
[150] = "Destroy",
[151] = "Destroyed",
[152] = "Rebuild",
[153] = "Custom0",
[154] = "Custom1",
[155] = "Custom2",
[156] = "Custom3",
[157] = "Despawn",
[158] = "Hold",
[159] = "Decay",
[160] = "BowPull",
[161] = "BowRelease",
[162] = "ShipStart",
[163] = "ShipMoving",
[164] = "ShipStop",
[165] = "GroupArrow",
[166] = "Arrow",
[167] = "CorpseArrow",
[168] = "GuideArrow",
[169] = "Sway",
[170] = "DruidCatPounce",
[171] = "DruidCatRip",
[172] = "DruidCatRake",
[173] = "DruidCatRavage",
[174] = "DruidCatClaw",
[175] = "DruidCatCower",
[176] = "DruidBearSwipe",
[177] = "DruidBearBite",
[178] = "DruidBearMaul",
[179] = "DruidBearBash",
[180] = "DragonTail",
[181] = "DragonStomp",
[182] = "DragonSpit",
[183] = "DragonSpitHover",
[184] = "DragonSpitFly",
[185] = "EmoteYes",
[186] = "EmoteNo",
[187] = "JumpLandRun",
[188] = "LootHold",
[189] = "LootUp",
[190] = "StandHigh",
[191] = "Impact",
[192] = "LiftOff",
[193] = "Hover",
[194] = "SuccubusEntice",
[195] = "EmoteTrain",
[196] = "EmoteDead",
[197] = "EmoteDanceOnce",
[198] = "Deflect",
[199] = "EmoteEatNoSheathe",
[200] = "Land",
[201] = "Submerge",
[202] = "Submerged",
[203] = "Cannibalize",
[204] = "ArrowBirth",
[205] = "GroupArrowBirth",
[206] = "CorpseArrowBirth",
[207] = "GuideArrowBirth",
[208] = "EmoteTalkNoSheathe",
[209] = "EmotePointNoSheathe",
[210] = "EmoteSaluteNoSheathe",
[211] = "EmoteDanceSpecial",
[212] = "Mutilate",
[213] = "CustomSpell01",
[214] = "CustomSpell02",
[215] = "CustomSpell03",
[216] = "CustomSpell04",
[217] = "CustomSpell05",
[218] = "CustomSpell06",
[219] = "CustomSpell07",
[220] = "CustomSpell08",
[221] = "CustomSpell09",
[222] = "CustomSpell10",
[223] = "StealthRun",
[224] = "Emerge",
[225] = "Cower",
[226] = "Grab",
[227] = "GrabClosed",
[228] = "GrabThrown",
[229] = "FlyStand",
[230] = "FlyDeath",
[231] = "FlySpell",
[232] = "FlyStop",
[233] = "FlyWalk",
[234] = "FlyRun",
[235] = "FlyDead",
[236] = "FlyRise",
[237] = "FlyStandWound",
[238] = "FlyCombatWound",
[239] = "FlyCombatCritical",
[240] = "FlyShuffleLeft",
[241] = "FlyShuffleRight",
[242] = "FlyWalkbackwards",
[243] = "FlyStun",
[244] = "FlyHandsClosed",
[245] = "FlyAttackUnarmed",
[246] = "FlyAttack1H",
[247] = "FlyAttack2H",
[248] = "FlyAttack2HL",
[249] = "FlyParryUnarmed",
[250] = "FlyParry1H",
[251] = "FlyParry2H",
[252] = "FlyParry2HL",
[253] = "FlyShieldBlock",
[254] = "FlyReadyUnarmed",
[255] = "FlyReady1H",
[256] = "FlyReady2H",
[257] = "FlyReady2HL",
[258] = "FlyReadyBow",
[259] = "FlyDodge",
[260] = "FlySpellPrecast",
[261] = "FlySpellCast",
[262] = "FlySpellCastArea",
[263] = "FlyNPCWelcome",
[264] = "FlyNPCGoodbye",
[265] = "FlyBlock",
[266] = "FlyJumpStart",
[267] = "FlyJump",
[268] = "FlyJumpEnd",
[269] = "FlyFall",
[270] = "FlySwimIdle",
[271] = "FlySwim",
[272] = "FlySwimLeft",
[273] = "FlySwimRight",
[274] = "FlySwimBackwards",
[275] = "FlyAttackBow",
[276] = "FlyFireBow",
[277] = "FlyReadyRifle",
[278] = "FlyAttackRifle",
[279] = "FlyLoot",
[280] = "FlyReadySpellDirected",
[281] = "FlyReadySpellOmni",
[282] = "FlySpellCastDirected",
[283] = "FlySpellCastOmni",
[284] = "FlyBattleRoar",
[285] = "FlyReadyAbility",
[286] = "FlySpecial1H",
[287] = "FlySpecial2H",
[288] = "FlyShieldBash",
[289] = "FlyEmoteTalk",
[290] = "FlyEmoteEat",
[291] = "FlyEmoteWork",
[292] = "FlyEmoteUseStanding",
[293] = "FlyEmoteTalkExclamation",
[294] = "FlyEmoteTalkQuestion",
[295] = "FlyEmoteBow",
[296] = "FlyEmoteWave",
[297] = "FlyEmoteCheer",
[298] = "FlyEmoteDance",
[299] = "FlyEmoteLaugh",
[300] = "FlyEmoteSleep",
[301] = "FlyEmoteSitGround",
[302] = "FlyEmoteRude",
[303] = "FlyEmoteRoar",
[304] = "FlyEmoteKneel",
[305] = "FlyEmoteKiss",
[306] = "FlyEmoteCry",
[307] = "FlyEmoteChicken",
[308] = "FlyEmoteBeg",
[309] = "FlyEmoteApplaud",
[310] = "FlyEmoteShout",
[311] = "FlyEmoteFlex",
[312] = "FlyEmoteShy",
[313] = "FlyEmotePoint",
[314] = "FlyAttack1HPierce",
[315] = "FlyAttack2HLoosePierce",
[316] = "FlyAttackOff",
[317] = "FlyAttackOffPierce",
[318] = "FlySheath",
[319] = "FlyHipSheath",
[320] = "FlyMount",
[321] = "FlyRunRight",
[322] = "FlyRunLeft",
[323] = "FlyMountSpecial",
[324] = "FlyKick",
[325] = "FlySitGroundDown",
[326] = "FlySitGround",
[327] = "FlySitGroundUp",
[328] = "FlySleepDown",
[329] = "FlySleep",
[330] = "FlySleepUp",
[331] = "FlySitChairLow",
[332] = "FlySitChairMed",
[333] = "FlySitChairHigh",
[334] = "FlyLoadBow",
[335] = "FlyLoadRifle",
[336] = "FlyAttackThrown",
[337] = "FlyReadyThrown",
[338] = "FlyHoldBow",
[339] = "FlyHoldRifle",
[340] = "FlyHoldThrown",
[341] = "FlyLoadThrown",
[342] = "FlyEmoteSalute",
[343] = "FlyKneelStart",
[344] = "FlyKneelLoop",
[345] = "FlyKneelEnd",
[346] = "FlyAttackUnarmedOff",
[347] = "FlySpecialUnarmed",
[348] = "FlyStealthWalk",
[349] = "FlyStealthStand",
[350] = "FlyKnockdown",
[351] = "FlyEatingLoop",
[352] = "FlyUseStandingLoop",
[353] = "FlyChannelCastDirected",
[354] = "FlyChannelCastOmni",
[355] = "FlyWhirlwind",
[356] = "FlyBirth",
[357] = "FlyUseStandingStart",
[358] = "FlyUseStandingEnd",
[359] = "FlyCreatureSpecial",
[360] = "FlyDrown",
[361] = "FlyDrowned",
[362] = "FlyFishingCast",
[363] = "FlyFishingLoop",
[364] = "FlyFly",
[365] = "FlyEmoteWorkNoSheathe",
[366] = "FlyEmoteStunNoSheathe",
[367] = "FlyEmoteUseStandingNoSheathe",
[368] = "FlySpellSleepDown",
[369] = "FlySpellKneelStart",
[370] = "FlySpellKneelLoop",
[371] = "FlySpellKneelEnd",
[372] = "FlySprint",
[373] = "FlyInFlight",
[374] = "FlySpawn",
[375] = "FlyClose",
[376] = "FlyClosed",
[377] = "FlyOpen",
[378] = "FlyOpened",
[379] = "FlyDestroy",
[380] = "FlyDestroyed",
[381] = "FlyRebuild",
[382] = "FlyCustom0",
[383] = "FlyCustom1",
[384] = "FlyCustom2",
[385] = "FlyCustom3",
[386] = "FlyDespawn",
[387] = "FlyHold",
[388] = "FlyDecay",
[389] = "FlyBowPull",
[390] = "FlyBowRelease",
[391] = "FlyShipStart",
[392] = "FlyShipMoving",
[393] = "FlyShipStop",
[394] = "FlyGroupArrow",
[395] = "FlyArrow",
[396] = "FlyCorpseArrow",
[397] = "FlyGuideArrow",
[398] = "FlySway",
[399] = "FlyDruidCatPounce",
[400] = "FlyDruidCatRip",
[401] = "FlyDruidCatRake",
[402] = "FlyDruidCatRavage",
[403] = "FlyDruidCatClaw",
[404] = "FlyDruidCatCower",
[405] = "FlyDruidBearSwipe",
[406] = "FlyDruidBearBite",
[407] = "FlyDruidBearMaul",
[408] = "FlyDruidBearBash",
[409] = "FlyDragonTail",
[410] = "FlyDragonStomp",
[411] = "FlyDragonSpit",
[412] = "FlyDragonSpitHover",
[413] = "FlyDragonSpitFly",
[414] = "FlyEmoteYes",
[415] = "FlyEmoteNo",
[416] = "FlyJumpLandRun",
[417] = "FlyLootHold",
[418] = "FlyLootUp",
[419] = "FlyStandHigh",
[420] = "FlyImpact",
[421] = "FlyLiftOff",
[422] = "FlyHover",
[423] = "FlySuccubusEntice",
[424] = "FlyEmoteTrain",
[425] = "FlyEmoteDead",
[426] = "FlyEmoteDanceOnce",
[427] = "FlyDeflect",
[428] = "FlyEmoteEatNoSheathe",
[429] = "FlyLand",
[430] = "FlySubmerge",
[431] = "FlySubmerged",
[432] = "FlyCannibalize",
[433] = "FlyArrowBirth",
[434] = "FlyGroupArrowBirth",
[435] = "FlyCorpseArrowBirth",
[436] = "FlyGuideArrowBirth",
[437] = "FlyEmoteTalkNoSheathe",
[438] = "FlyEmotePointNoSheathe",
[439] = "FlyEmoteSaluteNoSheathe",
[440] = "FlyEmoteDanceSpecial",
[441] = "FlyMutilate",
[442] = "FlyCustomSpell01",
[443] = "FlyCustomSpell02",
[444] = "FlyCustomSpell03",
[445] = "FlyCustomSpell04",
[446] = "FlyCustomSpell05",
[447] = "FlyCustomSpell06",
[448] = "FlyCustomSpell07",
[449] = "FlyCustomSpell08",
[450] = "FlyCustomSpell09",
[451] = "FlyCustomSpell10",
[452] = "FlyStealthRun",
[453] = "FlyEmerge",
[454] = "FlyCower",
[455] = "FlyGrab",
[456] = "FlyGrabClosed",
[457] = "FlyGrabThrown",
[458] = "ToFly",
[459] = "ToHover",
[460] = "ToGround",
[461] = "FlyToFly",
[462] = "FlyToHover",
[463] = "FlyToGround",
[464] = "Settle",
[465] = "FlySettle",
[466] = "DeathStart",
[467] = "DeathLoop",
[468] = "DeathEnd",
[469] = "FlyDeathStart",
[470] = "FlyDeathLoop",
[471] = "FlyDeathEnd",
[472] = "DeathEndHold",
[473] = "FlyDeathEndHold",
[474] = "Strangulate",
[475] = "FlyStrangulate",
[476] = "ReadyJoust",
[477] = "LoadJoust",
[478] = "HoldJoust",
[479] = "FlyReadyJoust",
[480] = "FlyLoadJoust",
[481] = "FlyHoldJoust",
[482] = "AttackJoust",
[483] = "FlyAttackJoust",
[484] = "ReclinedMount",
[485] = "FlyReclinedMount",
[486] = "ToAltered",
[487] = "FromAltered",
[488] = "FlyToAltered",
[489] = "FlyFromAltered",
[490] = "InStocks",
[491] = "FlyInStocks",
[492] = "VehicleGrab",
[493] = "VehicleThrow",
[494] = "FlyVehicleGrab",
[495] = "FlyVehicleThrow",
[496] = "ToAlteredPostSwap",
[497] = "FromAlteredPostSwap",
[498] = "FlyToAlteredPostSwap",
[499] = "FlyFromAlteredPostSwap",
[500] = "ReclinedMountPassenger",
[501] = "FlyReclinedMountPassenger",
[502] = "Carry2H",
[503] = "Carried2H",
[504] = "FlyCarry2H",
[505] = "FlyCarried2H",
[506] = "EmoteSniff",
[507] = "EmoteFlySniff",
[508] = "AttackFist1H",
[509] = "FlyAttackFist1H",
[510] = "AttackFist1HOff",
[511] = "FlyAttackFist1HOff",
[512] = "ParryFist1H",
[513] = "FlyParryFist1H",
[514] = "ReadyFist1H",
[515] = "FlyReadyFist1H",
[516] = "SpecialFist1H",
[517] = "FlySpecialFist1H",
[518] = "EmoteReadStart",
[519] = "FlyEmoteReadStart",
[520] = "EmoteReadLoop",
[521] = "FlyEmoteReadLoop",
[522] = "EmoteReadEnd",
[523] = "FlyEmoteReadEnd",
[524] = "SwimRun",
[525] = "FlySwimRun",
[526] = "SwimWalk",
[527] = "FlySwimWalk",
[528] = "SwimWalkBackwards",
[529] = "FlySwimWalkBackwards",
[530] = "SwimSprint",
[531] = "FlySwimSprint",
[532] = "MountSwimIdle",
[533] = "FlyMountSwimIdle",
[534] = "MountSwimBackwards",
[535] = "FlyMountSwimBackwards",
[536] = "MountSwimLeft",
[537] = "FlyMountSwimLeft",
[538] = "MountSwimRight",
[539] = "FlyMountSwimRight",
[540] = "MountSwimRun",
[541] = "FlyMountSwimRun",
[542] = "MountSwimSprint",
[543] = "FlyMountSwimSprint",
[544] = "MountSwimWalk",
[545] = "FlyMountSwimWalk",
[546] = "MountSwimWalkBackwards",
[547] = "FlyMountSwimWalkBackwards",
[548] = "MountFlightIdle",
[549] = "FlyMountFlightIdle",
[550] = "MountFlightBackwards",
[551] = "FlyMountFlightBackwards",
[552] = "MountFlightLeft",
[553] = "FlyMountFlightLeft",
[554] = "MountFlightRight",
[555] = "FlyMountFlightRight",
[556] = "MountFlightRun",
[557] = "FlyMountFlightRun",
[558] = "MountFlightSprint",
[559] = "FlyMountFlightSprint",
[560] = "MountFlightWalk",
[561] = "FlyMountFlightWalk",
[562] = "MountFlightWalkBackwards",
[563] = "FlyMountFlightWalkBackwards",
[564] = "MountFlightStart",
[565] = "FlyMountFlightStart",
[566] = "MountSwimStart",
[567] = "FlyMountSwimStart",
[568] = "MountSwimLand",
[569] = "FlyMountSwimLand",
[570] = "MountSwimLandRun",
[571] = "FlyMountSwimLandRun",
[572] = "MountFlightLand",
[573] = "FlyMountFlightLand",
[574] = "MountFlightLandRun",
[575] = "FlyMountFlightLandRun",
[576] = "ReadyBlowDart",
[577] = "FlyReadyBlowDart",
[578] = "LoadBlowDart",
[579] = "FlyLoadBlowDart",
[580] = "HoldBlowDart",
[581] = "FlyHoldBlowDart",
[582] = "AttackBlowDart",
[583] = "FlyAttackBlowDart",
[584] = "CarriageMount",
[585] = "FlyCarriageMount",
[586] = "CarriagePassengerMount",
[587] = "FlyCarriagePassengerMount",
[588] = "CarriageMountAttack",
[589] = "FlyCarriageMountAttack",
[590] = "BarTendStand",
[591] = "FlyBarTendStand",
[592] = "BarServerWalk",
[593] = "FlyBarServerWalk",
[594] = "BarServerRun",
[595] = "FlyBarServerRun",
[596] = "BarServerShuffleLeft",
[597] = "FlyBarServerShuffleLeft",
[598] = "BarServerShuffleRight",
[599] = "FlyBarServerShuffleRight",
[600] = "BarTendEmoteTalk",
[601] = "FlyBarTendEmoteTalk",
[602] = "BarTendEmotePoint",
[603] = "FlyBarTendEmotePoint",
[604] = "BarServerStand",
[605] = "FlyBarServerStand",
[606] = "BarSweepWalk",
[607] = "FlyBarSweepWalk",
[608] = "BarSweepRun",
[609] = "FlyBarSweepRun",
[610] = "BarSweepShuffleLeft",
[611] = "FlyBarSweepShuffleLeft",
[612] = "BarSweepShuffleRight",
[613] = "FlyBarSweepShuffleRight",
[614] = "BarSweepEmoteTalk",
[615] = "FlyBarSweepEmoteTalk",
[616] = "BarPatronSitEmotePoint",
[617] = "FlyBarPatronSitEmotePoint",
[618] = "MountSelfIdle",
[619] = "FlyMountSelfIdle",
[620] = "MountSelfWalk",
[621] = "FlyMountSelfWalk",
[622] = "MountSelfRun",
[623] = "FlyMountSelfRun",
[624] = "MountSelfSprint",
[625] = "FlyMountSelfSprint",
[626] = "MountSelfRunLeft",
[627] = "FlyMountSelfRunLeft",
[628] = "MountSelfRunRight",
[629] = "FlyMountSelfRunRight",
[630] = "MountSelfShuffleLeft",
[631] = "FlyMountSelfShuffleLeft",
[632] = "MountSelfShuffleRight",
[633] = "FlyMountSelfShuffleRight",
[634] = "MountSelfWalkBackwards",
[635] = "FlyMountSelfWalkBackwards",
[636] = "MountSelfSpecial",
[637] = "FlyMountSelfSpecial",
[638] = "MountSelfJump",
[639] = "FlyMountSelfJump",
[640] = "MountSelfJumpStart",
[641] = "FlyMountSelfJumpStart",
[642] = "MountSelfJumpEnd",
[643] = "FlyMountSelfJumpEnd",
[644] = "MountSelfJumpLandRun",
[645] = "FlyMountSelfJumpLandRun",
[646] = "MountSelfStart",
[647] = "FlyMountSelfStart",
[648] = "MountSelfFall",
[649] = "FlyMountSelfFall",
[650] = "Stormstrike",
[651] = "FlyStormstrike",
[652] = "ReadyJoustNoSheathe",
[653] = "FlyReadyJoustNoSheathe",
[654] = "Slam",
[655] = "FlySlam",
[656] = "DeathStrike",
[657] = "FlyDeathStrike",
[658] = "SwimAttackUnarmed",
[659] = "FlySwimAttackUnarmed",
[660] = "SpinningKick",
[661] = "FlySpinningKick",
[662] = "RoundHouseKick",
[663] = "FlyRoundHouseKick",
[664] = "RollStart",
[665] = "FlyRollStart",
[666] = "Roll",
[667] = "FlyRoll",
[668] = "RollEnd",
[669] = "FlyRollEnd",
[670] = "PalmStrike",
[671] = "FlyPalmStrike",
[672] = "MonkOffenseAttackUnarmed",
[673] = "FlyMonkOffenseAttackUnarmed",
[674] = "MonkOffenseAttackUnarmedOff",
[675] = "FlyMonkOffenseAttackUnarmedOff",
[676] = "MonkOffenseParryUnarmed",
[677] = "FlyMonkOffenseParryUnarmed",
[678] = "MonkOffenseReadyUnarmed",
[679] = "FlyMonkOffenseReadyUnarmed",
[680] = "MonkOffenseSpecialUnarmed",
[681] = "FlyMonkOffenseSpecialUnarmed",
[682] = "MonkDefenseAttackUnarmed",
[683] = "FlyMonkDefenseAttackUnarmed",
[684] = "MonkDefenseAttackUnarmedOff",
[685] = "FlyMonkDefenseAttackUnarmedOff",
[686] = "MonkDefenseParryUnarmed",
[687] = "FlyMonkDefenseParryUnarmed",
[688] = "MonkDefenseReadyUnarmed",
[689] = "FlyMonkDefenseReadyUnarmed",
[690] = "MonkDefenseSpecialUnarmed",
[691] = "FlyMonkDefenseSpecialUnarmed",
[692] = "MonkHealAttackUnarmed",
[693] = "FlyMonkHealAttackUnarmed",
[694] = "MonkHealAttackUnarmedOff",
[695] = "FlyMonkHealAttackUnarmedOff",
[696] = "MonkHealParryUnarmed",
[697] = "FlyMonkHealParryUnarmed",
[698] = "MonkHealReadyUnarmed",
[699] = "FlyMonkHealReadyUnarmed",
[700] = "MonkHealSpecialUnarmed",
[701] = "FlyMonkHealSpecialUnarmed",
[702] = "FlyingKick",
[703] = "FlyFlyingKick",
[704] = "FlyingKickStart",
[705] = "FlyFlyingKickStart",
[706] = "FlyingKickEnd",
[707] = "FlyFlyingKickEnd",
[708] = "CraneStart",
[709] = "FlyCraneStart",
[710] = "CraneLoop",
[711] = "FlyCraneLoop",
[712] = "CraneEnd",
[713] = "FlyCraneEnd",
[714] = "Despawned",
[715] = "FlyDespawned",
[716] = "ThousandFists",
[717] = "FlyThousandFists",
[718] = "MonkHealReadySpellDirected",
[719] = "FlyMonkHealReadySpellDirected",
[720] = "MonkHealReadySpellOmni",
[721] = "FlyMonkHealReadySpellOmni",
[722] = "MonkHealSpellCastDirected",
[723] = "FlyMonkHealSpellCastDirected",
[724] = "MonkHealSpellCastOmni",
[725] = "FlyMonkHealSpellCastOmni",
[726] = "MonkHealChannelCastDirected",
[727] = "FlyMonkHealChannelCastDirected",
[728] = "MonkHealChannelCastOmni",
[729] = "FlyMonkHealChannelCastOmni",
[730] = "Torpedo",
[731] = "FlyTorpedo",
[732] = "Meditate",
[733] = "FlyMeditate",
[734] = "BreathOfFire",
[735] = "FlyBreathOfFire",
[736] = "RisingSunKick",
[737] = "FlyRisingSunKick",
[738] = "GroundKick",
[739] = "FlyGroundKick",
[740] = "KickBack",
[741] = "FlyKickBack",
[742] = "PetBattleStand",
[743] = "FlyPetBattleStand",
[744] = "PetBattleDeath",
[745] = "FlyPetBattleDeath",
[746] = "PetBattleRun",
[747] = "FlyPetBattleRun",
[748] = "PetBattleWound",
[749] = "FlyPetBattleWound",
[750] = "PetBattleAttack",
[751] = "FlyPetBattleAttack",
[752] = "PetBattleReadySpell",
[753] = "FlyPetBattleReadySpell",
[754] = "PetBattleSpellCast",
[755] = "FlyPetBattleSpellCast",
[756] = "PetBattleCustom0",
[757] = "FlyPetBattleCustom0",
[758] = "PetBattleCustom1",
[759] = "FlyPetBattleCustom1",
[760] = "PetBattleCustom2",
[761] = "FlyPetBattleCustom2",
[762] = "PetBattleCustom3",
[763] = "FlyPetBattleCustom3",
[764] = "PetBattleVictory",
[765] = "FlyPetBattleVictory",
[766] = "PetBattleLoss",
[767] = "FlyPetBattleLoss",
[768] = "PetBattleStun",
[769] = "FlyPetBattleStun",
[770] = "PetBattleDead",
[771] = "FlyPetBattleDead",
[772] = "PetBattleFreeze",
[773] = "FlyPetBattleFreeze",
[774] = "MonkOffenseAttackWeapon",
[775] = "FlyMonkOffenseAttackWeapon",
[776] = "BarTendEmoteWave",
[777] = "FlyBarTendEmoteWave",
[778] = "BarServerEmoteTalk",
[779] = "FlyBarServerEmoteTalk",
[780] = "BarServerEmoteWave",
[781] = "FlyBarServerEmoteWave",
[782] = "BarServerPourDrinks",
[783] = "FlyBarServerPourDrinks",
[784] = "BarServerPickup",
[785] = "FlyBarServerPickup",
[786] = "BarServerPutDown",
[787] = "FlyBarServerPutDown",
[788] = "BarSweepStand",
[789] = "FlyBarSweepStand",
[790] = "BarPatronSit",
[791] = "FlyBarPatronSit",
[792] = "BarPatronSitEmoteTalk",
[793] = "FlyBarPatronSitEmoteTalk",
[794] = "BarPatronStand",
[795] = "FlyBarPatronStand",
[796] = "BarPatronStandEmoteTalk",
[797] = "FlyBarPatronStandEmoteTalk",
[798] = "BarPatronStandEmotePoint",
[799] = "FlyBarPatronStandEmotePoint",
[800] = "CarrionSwarm",
[801] = "FlyCarrionSwarm",
[802] = "WheelLoop",
[803] = "FlyWheelLoop",
[804] = "StandCharacterCreate",
[805] = "FlyStandCharacterCreate",
[806] = "MountChopper",
[807] = "FlyMountChopper",
[808] = "FacePose",
[809] = "FlyFacePose",
[810] = "CombatAbility2HBig01",
[811] = "FlyCombatAbility2HBig01",
[812] = "CombatAbility2H01",
[813] = "FlyCombatAbility2H01",
[814] = "CombatWhirlwind",
[815] = "FlyCombatWhirlwind",
[816] = "CombatChargeLoop",
[817] = "FlyCombatChargeLoop",
[818] = "CombatAbility1H01",
[819] = "FlyCombatAbility1H01",
[820] = "CombatChargeEnd",
[821] = "FlyCombatChargeEnd",
[822] = "CombatAbility1H02",
[823] = "FlyCombatAbility1H02",
[824] = "CombatAbility1HBig01",
[825] = "FlyCombatAbility1HBig01",
[826] = "CombatAbility2H02",
[827] = "FlyCombatAbility2H02",
[828] = "ShaSpellPrecastBoth",
[829] = "FlyShaSpellPrecastBoth",
[830] = "ShaSpellCastBothFront",
[831] = "FlyShaSpellCastBothFront",
[832] = "ShaSpellCastLeftFront",
[833] = "FlyShaSpellCastLeftFront",
[834] = "ShaSpellCastRightFront",
[835] = "FlyShaSpellCastRightFront",
[836] = "ReadyCrossbow",
[837] = "FlyReadyCrossbow",
[838] = "LoadCrossbow",
[839] = "FlyLoadCrossbow",
[840] = "AttackCrossbow",
[841] = "FlyAttackCrossbow",
[842] = "HoldCrossbow",
[843] = "FlyHoldCrossbow",
[844] = "CombatAbility2HL01",
[845] = "FlyCombatAbility2HL01",
[846] = "CombatAbility2HL02",
[847] = "FlyCombatAbility2HL02",
[848] = "CombatAbility2HLBig01",
[849] = "FlyCombatAbility2HLBig01",
[850] = "CombatUnarmed01",
[851] = "FlyCombatUnarmed01",
[852] = "CombatStompLeft",
[853] = "FlyCombatStompLeft",
[854] = "CombatStompRight",
[855] = "FlyCombatStompRight",
[856] = "CombatLeapLoop",
[857] = "FlyCombatLeapLoop",
[858] = "CombatLeapEnd",
[859] = "FlyCombatLeapEnd",
[860] = "ShaReadySpellCast",
[861] = "FlyShaReadySpellCast",
[862] = "ShaSpellPrecastBothChannel",
[863] = "FlyShaSpellPrecastBothChannel",
[864] = "ShaSpellCastBothUp",
[865] = "FlyShaSpellCastBothUp",
[866] = "ShaSpellCastBothUpChannel",
[867] = "FlyShaSpellCastBothUpChannel",
[868] = "ShaSpellCastBothFrontChannel",
[869] = "FlyShaSpellCastBothFrontChannel",
[870] = "ShaSpellCastLeftFrontChannel",
[871] = "FlyShaSpellCastLeftFrontChannel",
[872] = "ShaSpellCastRightFrontChannel",
[873] = "FlyShaSpellCastRightFrontChannel",
[874] = "PriReadySpellCast",
[875] = "FlyPriReadySpellCast",
[876] = "PriSpellPrecastBoth",
[877] = "FlyPriSpellPrecastBoth",
[878] = "PriSpellPrecastBothChannel",
[879] = "FlyPriSpellPrecastBothChannel",
[880] = "PriSpellCastBothUp",
[881] = "FlyPriSpellCastBothUp",
[882] = "PriSpellCastBothFront",
[883] = "FlyPriSpellCastBothFront",
[884] = "PriSpellCastLeftFront",
[885] = "FlyPriSpellCastLeftFront",
[886] = "PriSpellCastRightFront",
[887] = "FlyPriSpellCastRightFront",
[888] = "PriSpellCastBothUpChannel",
[889] = "FlyPriSpellCastBothUpChannel",
[890] = "PriSpellCastBothFrontChannel",
[891] = "FlyPriSpellCastBothFrontChannel",
[892] = "PriSpellCastLeftFrontChannel",
[893] = "FlyPriSpellCastLeftFrontChannel",
[894] = "PriSpellCastRightFrontChannel",
[895] = "FlyPriSpellCastRightFrontChannel",
[896] = "MagReadySpellCast",
[897] = "FlyMagReadySpellCast",
[898] = "MagSpellPrecastBoth",
[899] = "FlyMagSpellPrecastBoth",
[900] = "MagSpellPrecastBothChannel",
[901] = "FlyMagSpellPrecastBothChannel",
[902] = "MagSpellCastBothUp",
[903] = "FlyMagSpellCastBothUp",
[904] = "MagSpellCastBothFront",
[905] = "FlyMagSpellCastBothFront",
[906] = "MagSpellCastLeftFront",
[907] = "FlyMagSpellCastLeftFront",
[908] = "MagSpellCastRightFront",
[909] = "FlyMagSpellCastRightFront",
[910] = "MagSpellCastBothUpChannel",
[911] = "FlyMagSpellCastBothUpChannel",
[912] = "MagSpellCastBothFrontChannel",
[913] = "FlyMagSpellCastBothFrontChannel",
[914] = "MagSpellCastLeftFrontChannel",
[915] = "FlyMagSpellCastLeftFrontChannel",
[916] = "MagSpellCastRightFrontChannel",
[917] = "FlyMagSpellCastRightFrontChannel",
[918] = "LocReadySpellCast",
[919] = "FlyLocReadySpellCast",
[920] = "LocSpellPrecastBoth",
[921] = "FlyLocSpellPrecastBoth",
[922] = "LocSpellPrecastBothChannel",
[923] = "FlyLocSpellPrecastBothChannel",
[924] = "LocSpellCastBothUp",
[925] = "FlyLocSpellCastBothUp",
[926] = "LocSpellCastBothFront",
[927] = "FlyLocSpellCastBothFront",
[928] = "LocSpellCastLeftFront",
[929] = "FlyLocSpellCastLeftFront",
[930] = "LocSpellCastRightFront",
[931] = "FlyLocSpellCastRightFront",
[932] = "LocSpellCastBothUpChannel",
[933] = "FlyLocSpellCastBothUpChannel",
[934] = "LocSpellCastBothFrontChannel",
[935] = "FlyLocSpellCastBothFrontChannel",
[936] = "LocSpellCastLeftFrontChannel",
[937] = "FlyLocSpellCastLeftFrontChannel",
[938] = "LocSpellCastRightFrontChannel",
[939] = "FlyLocSpellCastRightFrontChannel",
[940] = "DruReadySpellCast",
[941] = "FlyDruReadySpellCast",
[942] = "DruSpellPrecastBoth",
[943] = "FlyDruSpellPrecastBoth",
[944] = "DruSpellPrecastBothChannel",
[945] = "FlyDruSpellPrecastBothChannel",
[946] = "DruSpellCastBothUp",
[947] = "FlyDruSpellCastBothUp",
[948] = "DruSpellCastBothFront",
[949] = "FlyDruSpellCastBothFront",
[950] = "DruSpellCastLeftFront",
[951] = "FlyDruSpellCastLeftFront",
[952] = "DruSpellCastRightFront",
[953] = "FlyDruSpellCastRightFront",
[954] = "DruSpellCastBothUpChannel",
[955] = "FlyDruSpellCastBothUpChannel",
[956] = "DruSpellCastBothFrontChannel",
[957] = "FlyDruSpellCastBothFrontChannel",
[958] = "DruSpellCastLeftFrontChannel",
[959] = "FlyDruSpellCastLeftFrontChannel",
[960] = "DruSpellCastRightFrontChannel",
[961] = "FlyDruSpellCastRightFrontChannel",
[962] = "ArtMainLoop",
[963] = "FlyArtMainLoop",
[964] = "ArtDualLoop",
[965] = "FlyArtDualLoop",
[966] = "ArtFistsLoop",
[967] = "FlyArtFistsLoop",
[968] = "ArtBowLoop",
[969] = "FlyArtBowLoop",
[970] = "CombatAbility1H01Off",
[971] = "FlyCombatAbility1H01Off",
[972] = "CombatAbility1H02Off",
[973] = "FlyCombatAbility1H02Off",
[974] = "CombatFuriousStrike01",
[975] = "FlyCombatFuriousStrike01",
[976] = "CombatFuriousStrike02",
[977] = "FlyCombatFuriousStrike02",
[978] = "CombatFuriousStrikes",
[979] = "FlyCombatFuriousStrikes",
[980] = "CombatReadySpellCast",
[981] = "FlyCombatReadySpellCast",
[982] = "CombatShieldThrow",
[983] = "FlyCombatShieldThrow",
[984] = "PalSpellCast1HUp",
[985] = "FlyPalSpellCast1HUp",
[986] = "CombatReadyPostSpellCast",
[987] = "FlyCombatReadyPostSpellCast",
[988] = "PriReadyPostSpellCast",
[989] = "FlyPriReadyPostSpellCast",
[990] = "DHCombatRun",
[991] = "FlyDHCombatRun",
[992] = "CombatShieldBash",
[993] = "FlyCombatShieldBash",
[994] = "CombatThrow",
[995] = "FlyCombatThrow",
[996] = "CombatAbility1HPierce",
[997] = "FlyCombatAbility1HPierce",
[998] = "CombatAbility1HOffPierce",
[999] = "FlyCombatAbility1HOffPierce",
[1000] = "CombatMutilate",
[1001] = "FlyCombatMutilate",
[1002] = "CombatBladeStorm",
[1003] = "FlyCombatBladeStorm",
[1004] = "CombatFinishingMove",
[1005] = "FlyCombatFinishingMove",
[1006] = "CombatLeapStart",
[1007] = "FlyCombatLeapStart",
[1008] = "GlvThrowMain",
[1009] = "FlyGlvThrowMain",
[1010] = "GlvThrownOff",
[1011] = "FlyGlvThrownOff",
[1012] = "DHCombatSprint",
[1013] = "FlyDHCombatSprint",
[1014] = "CombatAbilityGlv01",
[1015] = "FlyCombatAbilityGlv01",
[1016] = "CombatAbilityGlv02",
[1017] = "FlyCombatAbilityGlv02",
[1018] = "CombatAbilityGlvOff01",
[1019] = "FlyCombatAbilityGlvOff01",
[1020] = "CombatAbilityGlvOff02",
[1021] = "FlyCombatAbilityGlvOff02",
[1022] = "CombatAbilityGlvBig01",
[1023] = "FlyCombatAbilityGlvBig01",
[1024] = "CombatAbilityGlvBig02",
[1025] = "FlyCombatAbilityGlvBig02",
[1026] = "ReadyGlv",
[1027] = "FlyReadyGlv",
[1028] = "CombatAbilityGlvBig03",
[1029] = "FlyCombatAbilityGlvBig03",
[1030] = "DoubleJumpStart",
[1031] = "FlyDoubleJumpStart",
[1032] = "DoubleJump",
[1033] = "FlyDoubleJump",
[1034] = "CombatEviscerate",
[1035] = "FlyCombatEviscerate",
[1036] = "DoubleJumpLandRun",
[1037] = "FlyDoubleJumpLandRun",
[1038] = "BackFlipStart",
[1039] = "FlyBackFlipStart",
[1040] = "BackFlipLoop",
[1041] = "FlyBackFlipLoop",
[1042] = "FelRushLoop",
[1043] = "FlyFelRushLoop",
[1044] = "FelRushEnd",
[1045] = "FlyFelRushEnd",
[1046] = "DHToAlteredStart",
[1047] = "FlyDHToAlteredStart",
[1048] = "DHToAlteredEnd",
[1049] = "FlyDHToAlteredEnd",
[1050] = "DHGlide",
[1051] = "FlyDHGlide",
[1052] = "FanOfKnives",
[1053] = "FlyFanOfKnives",
[1054] = "SingleJumpStart",
[1055] = "FlySingleJumpStart",
[1056] = "DHBladeDance1",
[1057] = "FlyDHBladeDance1",
[1058] = "DHBladeDance2",
[1059] = "FlyDHBladeDance2",
[1060] = "DHBladeDance3",
[1061] = "FlyDHBladeDance3",
[1062] = "DHMeteorStrike",
[1063] = "FlyDHMeteorStrike",
[1064] = "CombatExecute",
[1065] = "FlyCombatExecute",
[1066] = "ArtLoop",
[1067] = "FlyArtLoop",
[1068] = "ParryGlv",
[1069] = "FlyParryGlv",
[1070] = "CombatUnarmed02",
[1071] = "FlyCombatUnarmed02",
[1072] = "CombatPistolShot",
[1073] = "FlyCombatPistolShot",
[1074] = "CombatPistolShotOff",
[1075] = "FlyCombatPistolShotOff",
[1076] = "Monk2HLIdle",
[1077] = "FlyMonk2HLIdle",
[1078] = "ArtShieldLoop",
[1079] = "FlyArtShieldLoop",
[1080] = "CombatAbility2H03",
[1081] = "FlyCombatAbility2H03",
[1082] = "CombatStomp",
[1083] = "FlyCombatStomp",
[1084] = "CombatRoar",
[1085] = "FlyCombatRoar",
[1086] = "PalReadySpellCast",
[1087] = "FlyPalReadySpellCast",
[1088] = "PalSpellPrecastRight",
[1089] = "FlyPalSpellPrecastRight",
[1090] = "PalSpellPrecastRightChannel",
[1091] = "FlyPalSpellPrecastRightChannel",
[1092] = "PalSpellCastRightFront",
[1093] = "FlyPalSpellCastRightFront",
[1094] = "ShaSpellCastBothOut",
[1095] = "FlyShaSpellCastBothOut",
[1096] = "AttackWeapon",
[1097] = "FlyAttackWeapon",
[1098] = "ReadyWeapon",
[1099] = "FlyReadyWeapon",
[1100] = "AttackWeaponOff",
[1101] = "FlyAttackWeaponOff",
[1102] = "SpecialDual",
[1103] = "FlySpecialDual",


Simca 05-27-16 11:49 PM

As an update to this, they removed FileDataComplete.db2 in yesterday's build (21796), so we will no longer know future file paths without guessing and bruteforcing.*

* There are a few exceptions: File paths in Interface\* are in ManifestInterfaceData. File paths in Shaders\* are hardcoded into the game client. Other than that, everything will be bruteforcing, guesswork, and extrapolating from adt, wmo, and m2 files (which use both filedataIDs and file paths, despite the redundancy).

Resike 05-28-16 10:43 AM

Quote:

Originally Posted by Simca (Post 315281)
As an update to this, they removed FileDataComplete.db2 in yesterday's build (21796), so we will no longer know future file paths without guessing and bruteforcing.*

* There are a few exceptions: File paths in Interface\* are in ManifestInterfaceData. File paths in Shaders\* are hardcoded into the game client. Other than that, everything will be bruteforcing, guesswork, and extrapolating from adt, wmo, and m2 files (which use both filedataIDs and file paths, despite the redundancy).

I don't see how could they do this without a filepath table. Maybe there is a table, but they moved it up to the C code?

Simca 05-28-16 10:58 AM

Quote:

Originally Posted by Resike (Post 315294)
I don't see how could they do this without a filepath table. Maybe there is a table, but they moved it up to the C code?

CASC files are indexed by FileDataID and NameHash. All the client needs to get a pointer to a file is a FileDataID.

Ketho 07-02-16 05:21 PM

I'm a complete noob with models and got no clue what the FileDataID and NameHash stuff is :confused:
Recently heard on #wowuidev that the reason for the change could be a combination of performance and memory

But my question is, why does playermodel:GetDisplayInfo() return 0 after running playermodel:SetUnit("target") ?
Is it even possible to get a displayId from a specific unitId?

Maybe then it would be possible to get the modelpath from Resike's AllModels.lua if it was put in a library

It could help the Storyline addon if that was possible. There also was a recent reddit post about it
https://www.reddit.com/r/wow/comment...xt_in_the_post



Lua Code:
  1. -- from CreatureDisplayInfo.db2 or CreatureModelData.db2 (?)
  2. local paths = {
  3.     [0] = "none",
  4.     [32806] = "character\\human\\female\\humanfemale_hd.m2", -- Vanessa VanCleef
  5. }
  6.  
  7. local m = CreateFrame("PlayerModel")
  8. m:SetPoint("CENTER")
  9. m:SetSize(500, 500)
  10.  
  11. local function GetDisplayId(unit)
  12.     m:SetUnit(unit)
  13.     return m:GetDisplayInfo() -- always returns 0 ...
  14. end
  15.  
  16. -- test target
  17. local displayId = GetDisplayId("target")
  18. local modelpath = paths[displayId]
  19. print(modelpath) -- prints "none"
  20.  
  21. -- test vancleef
  22. m:SetDisplayInfo(32806)
  23. local displayId = m:GetDisplayInfo() -- gets 32806
  24. local modelpath = paths[displayId]
  25. print(modelpath) -- prints "character\\human\\female\\humanfemale_hd.m2"

semlar 07-02-16 06:38 PM

Quote:

Originally Posted by Ketho (Post 316126)
But my question is, why does playermodel:GetDisplayInfo() return 0 after running playermodel:SetUnit("target") ?
Is it even possible to get a displayId from a specific unitId?

GetDisplayInfo returns the value of SetDisplayInfo. You can't get a displayID from a unit because they don't have one, or at least not in the same sense as that api function.

I only skimmed over that giant block of text they wrote because I'm practically illiterate, but if I understand the gist of the problem they can't scale the model properly because they don't know what it is since blizzard removed GetModel, which is absurd because they have the unitID and can get the race from that.

I'm not sure why they need the animation lengths as I've never used the addon, but you can just tell the model to play a specific animation with PlayAnimKit and it will play it through.

Actually PlayAnimKit appears to be broken at the moment, but you can use FreezeAnimation and SetSequence to do the same thing.

Resike 07-03-16 02:49 AM

Quote:

Originally Posted by semlar (Post 316127)
I only skimmed over that giant block of text they wrote because I'm practically illiterate, but if I understand the gist of the problem they can't scale the model properly because they don't know what it is since blizzard removed GetModel, which is absurd because they have the unitID and can get the race from that.

How is that gonna help on a totally random model i want to draw ont he screen? Also every model has different camera postions, i just want to get the proper values to manipulate the camera angles further.

Lua Code:
  1. function GetBaseCameraTarget(model)
  2.     local modelfile = model:GetModel()
  3.     if modelfile and modelfile ~= "" then
  4.         local tempmodel = CreateFrame("PlayerModel", nil, UIParent)
  5.         tempmodel:SetModel(modelfile)
  6.         tempmodel:SetCustomCamera(1)
  7.         local x, y, z = tempmodel:GetCameraTarget()
  8.         tempmodel:ClearModel()
  9.         return x, y, z
  10.     end
  11. end


All times are GMT -6. The time now is 04:25 PM.

vBulletin © 2024, Jelsoft Enterprises Ltd
© 2004 - 2022 MMOUI