Not sure if something like this has been posted before, but since i couldn't find anything, i guess i might be the first one with something "new".
This is mostly dedicated to private server, but might aswell come in handy when you decide to "pretty up" some NPCs you seriously don't like.
Screenshot at the bottom 
Foreword:
I've been fiddling the past hours on making a displayID to replace the "Test Illusion" Spell forms into something new, fresh. My goal was to turn a Highelf DisplayID into a player-usable, clothable one. This succeeded after quite some fiddling, BUT, the character had the paint-on texture as bodyskin, instead of a bikini texture. I realized that i had to replace the Baked Texture with a new one, which gave me a grand idea.
Do note that i don't usually write guides, so if i am unclear somewhere, just comment it and tell me how to improve it.
This is all based on 3-4 hours of client-side modding, so it might not be a perfectly-accurate guide, but it should be working out just right even for hobby modders (which i am :P)
Tutorial: Customizing a NPC displayID
Category: Client-Side Modification
Tools required: (no links, sorry, they are listed up here in the modding section, tho)
- WoW ( hah! )
- Model Edit Fix (depending on WoW version, 3.2.0 might not need it anymore)
- MPQ Viewer (personally using Ladik's one, never failed me)
- DBCUtil (DBC converter)
- CSVed (or any other free CSV viewer)
- BLPConverter (use the one with THIS name, the Java one messes up the textures if you don't reduce them to 256 colors)
- WoWModelViewer (depending on WoW version)
- Paintshop/Photoshop/etc if you need to tweak something
Step 1:
Find a displayID you want to replace, i recommend you replace Elves with Elves, Orcs with Orcs, etc... for starters. it's easier to "train".
If you don't have alot of knowledge and your NPC is unique (like Lady Liadrin, for example) you can use Wowhead: The one thing on which Ninjas and Pirates agree., search for the NPC, then right-click somewhere on the page and choose the option to view the source. Search in it for "displayId" and it should show you something like this:
Code:
ModelViewer.show({ type: 1, typeId: 17076, displayId: 16820, humanoid: 1 })
write the number down.
Step 2:
Open your WoW data/enUS subfolder, and open the patch-enUS-2.MPQ (or patch-enUS.MPQ, incase the first doesn't have the file we're looking for) and extract the "DBFilesClient/CreatureDisplayInfo.dbc" and "DBFilesClient/CreatureDisplayInfoExtra.dbc" files.
Step 3:
Drag-and-drop the two files on the DBCUtil.exe to convert them into a readable format.
Step 4:
Open the converted files in CSVed
In CreatureDisplayInfo, search for the ID you wrote down
Here's a small cutout from my time studying this file:
Code:
Entry 01 = DisplayID
Entry 02 = M2 Model ID (eg: 2209 = Bloodelf Female, edit this if you want to replace races)
Entry 03 = ??
Entry 04 = Extra Info Lookup Index (Lookup Index inside 'CreatureDisplayInfoExtra', defines appearance for character-type models)
Entry 05 = Scale
Entry 06 = Alpha ( 0 = invisible, 255 = 100% visible )
Entry 07 = Mob-Skin Part1 (used for creature-type models)
Entry 08 = Mob-Skin Part2 (used for creature-type models)
Entry 09 = Mob-Skin Part3 (used for creature-type models)
Entry 10 = Mob-Skin Part4 (used for creature-type models)
Entry 11 = Flag? (-1,0,1) - (dunno)
So, we go to the 4th column/entry, and copy the value. This value we will now search in the CreatureDisplayInfoExtra file.
Once we have it, you should see loooong list of different values scattered across. Here is a list i figured out, with one or two fields that aren't properly identified yet.
Do notice, that the values in these are the same as in WoWModelviewer, so you should have a easy time to setup hair and accessories.
Code:
Entry 01 = Index referenced by 'CreatureDisplayInfo' Entry 04.
Entry 02 = ??
Entry 03 = Hide Hair Flag (1 = Hidden, don't use numbers above 1 or you'll get the neon-green color bug on the skull and eyebrows)
Entry 04 = Skin (Ignore, it gets replaced by the baked texture)
Entry 05 = Face (Ignore, it gets replaced by the baked texture)
Entry 06 = Hairstyle
Entry 07 = Haircolor
Entry 08 = Earrings/etc
Entry 09 = Head
Entry 10 = Shoulder
Entry 11 = Shirt (**)
Entry 12 = Chest (**)
Entry 13 = Belt (**)
Entry 14 = Legs (**)
Entry 15 = Boots (**)
Entry 16 = Bracers (*)
Entry 17 = Gloves (**)
Entry 18 = Tabard (**)
Entry 19 = Cape
Entry 20 = Flag "Use Player Skin" - Disable to use the Baked Texture
Entry 21 = BakedTexture, This has the whole body texture on it.
Entry 22 = ?? (it's always empty)
* = will be overwritten by the baked texture
** = only model will be used, baked texture is slapped over this
As you see, the design is kinda how WoWModelViewer's entries are ordered, right?
Step 5:
Okay, so now that you got the fields, you need to make a set of armor.
Open WoWModelviewer, load a character of your choice, as if creating a new character ingame, and put up a decent outfit together (without weapons) you CAN use Deathknight and NPC skins from the list (WotLK-only)
Depending on what Version of WoWModelViewer you have, it should show you the displayIDs for the armor behind their name, or not.
In case it does, write down the first number behind the item name.
In case it does not, go to WoW-V - DisplayID Finder, enter the ID or name of the item, and get the display ID for it. - This, obviously, doesn't allow you to use NPC armor pieces =/
Step 6:
With the numbers for the armor in hand, go back to the CreatureDisplayInfoExtra.
What we do now is copy-paste the whole line of values from the Extra info into notepad/wordpad/etc. Then we add a new entry to the table and place the values we have copied in there DO NOT leave any field empty, or all player-character NPCs will have no white textures and all model meshes activated.
Why do we add a new entry? It's easier to undo changes that way, or delete the entry altogether when we mess up after making a few changes to different NPCs. Just out of convenience.
Now go ahead and place the information for the hairstyle, color, accessories and armor into their corresponding fields.
Go to the last last filled column (baked texture, usually shows a long string of letters and numbers), and delete what's there. Replace it with something simple, like "Liadrin_Sexy.blp" or something, without the quotes. It's just a name, don't sweat about the details :P
Save the file, and then drag the CSV files over the DBCUtil. Hit enter to overwrite the original file. Presto, the text-based part is done.
Step 7:
Go back to WoWModelViewer. Remove the character's shoulder, cape and helmet (otherwise the program might crash, just warning you). Now Go to File->Export (use whatever you got there) and save the 3d Model. It won't be useful for us, but it's the only way to make a baked texture. You'll now get several PNG/TGA files (one for the body, one for the hair) and two other files. Delete those and the hair texture, leaving only one file remaining, which is the baked texture of the body.
Now, Open the TGA/PNG file you created, edit it to your liking (you're the texture artists here, so don't ask me WHAT to do :P) and save it as a PNG file of 256x256, or 512x512, (or maybe even 1024x1024), if you feel like touching it up and make it pretty. I did that for one character.
Step 8: Drag the edited texture over your BLPConverter to make the BLP. Now go to your MPQ Viewer's "Work" Directory (where you extracted the two DBC files). you should see the folder called "DBCFilesClient". Make a new folder called "textures", and open it. Make a folder called "BakedNpcTextures", open it again. Now, place the BLP file you created here, and name it to the exact name you put in the CreatureDisplayInfoExtra.
Step 9: Use MPQ Viewer to pack up the DBCFilesClient and Textures folder into a New MPQ, keep the usual naming convention.
Step 10: Load up WoW and check for the result.
Known Problems:
P: WoW closes when i open it with the patch.
S: You used a wrong DBC converter, messing up the format. Try to find DBCUtil.exe
P: NPCs skin will turn black as you get further away from it.
S: You used a wrong BLP converter. Happened to the Java-based converter for me.
P: I did as you wrote, but there's a 0 in field 4 of the CreatureDisplayInfo instead of a number
S: The NPC you try to change is a creature, not a character. You solve this by copy-pasting a line from a character-type NPC here. Do note that editing it now will affect both this displayID, aswell as the one you copy from (use a obsolete or never-seen NPC, preferably)
-DONE!-
here are some screenshots of NPCs i made from my characters.
My GM char and a NPC based on my normal player character (different shirts used on the NPC here)

And another one with the other NPC i made.

If you get stuck or need any help, i'll gladly assist. Good Luck