I have my own workaround for this issue of getting good and animation capable model.
First import all hair models and hide their meshes (except one).
Then unlink "Dummy_neck" bone, because for hairs parent bone is "Dummy_hair" - this is wrong and makes troubles in attaching parts (also causes animation bug).
Next step - clone Dummy_hair bone and rename this cloned bone to "Dummy_face".
Link "Dummy_face" and "Dummy_hair" to "Dummy_neck", so "Dummy_neck" is root parent for skeleton.
Then import face model, hairs must automagically allign to right place, because cloned Dummy_neck from hair bones replaced by Dummy_neck from face ones.
Select and clone "Dummy_face" and "Dummy_neck", then rename to "Bip01-Head" and "Bip01-Neck" respectively.
Link "Dummy_neck" to "Bip01-Neck", "Dummy_face" to "Bip01-Neck", "Dummy_hair" to "Bip01_Head", so "Bip01_Neck" is root parent at end.
Finally import body, hand, legs parts - head automagically jump in correct place because cloned bones replaced by main skel bones with same names.
Link "Bip01-Neck" to "Bip01-Spine3" (if i remember name correctly) and you have full skeleton with one root, ready for animation.
Then i hide bones, save model, delete body, hands, legs meshes, import another body, hands, legs and "save as.." with new name - etc.
There's an example of final model (specular and normal maps is removed from archive for size reduce), with samples of "run" animations.
Check out skeleton structure, maybe i forget something.
Animations can be added through "File>Merge Animation..." dialog. Open .max file with animation, check "extend frames" box, click lower button between lists of bones and merge. Repeat same steps for face, hair, and attribute animations.
Some tips and tricks:
You can add support for PNG textures to importer:
-------------------------------------------------------------------------------
-- Loading materials
-------------------------------------------------------------------------------
fn axFindTexture texDir baseName =
(
-- DDS
foundTex = axFindFile texDir (baseName + ".dds") recurse:g_texRecurse
if foundTex != undefined then return foundTex
-- PNG
foundTex = axFindFile texDir (baseName + ".png") recurse:g_texRecurse
if foundTex != undefined then return foundTex
-- TGA
foundTex = axFindFile texDir (baseName + ".tga") recurse:g_texRecurse
-- if foundTex != undefined then return foundTex
-- other formats?
return foundTex
)
I convert all extracted textures from tga to png (with "deep exploration") for lossless size reduce and place textures, meshes and material files to same folder before import, so models already textured in viewport after i import's them.
Head bones have different bind poses and face meshes degrade if you import them one-by-one like i did in example model (i didn't figure out that before i grouped HighElf_F faces - it's horrible), so model can have all hair variants but only one face (
Before batch export hair animations, delete neck bone to prevent bugs.
Models with _H (heavy) uses Class02 and Class04 animations, _L (leather) - Class01, Class03, Class06 and _R (robes) Class05, Class07, Class08.
I hope you can decrypt my runglish here