Advertisement
expired6978

Skyrim Dynamic Attach

Apr 5th, 2015
344
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.28 KB | None | 0 0
  1. NiNode * rootNode = NULL;
  2.             NiGeometry * newGeometry = NULL;
  3.  
  4.             UInt8 niStreamMemory[0x5B4];
  5.             memset(niStreamMemory, 0, 0x5B4);
  6.             NiStream * niStream = (NiStream *)niStreamMemory;
  7.             CALL_MEMBER_FN(niStream, ctor)();
  8.  
  9.             BSFixedString armorName("Data\\Meshes\\TERAarmors\\castanic_f_h02\\cuirass_1.nif");
  10.            
  11.             NiNode * loadedRoot = thisObj->loadedState->node;
  12.  
  13.             BSFixedString rootNodeName("NPC Root [Root]");
  14.  
  15.             NiNode * npcRoot = loadedRoot->GetObjectByName(&rootNodeName.data)->GetAsNiNode();
  16.  
  17.             BSResourceNiBinaryStream binaryStream(armorName.data);
  18.             if(binaryStream.IsValid()) {
  19.                 niStream->LoadStream(&binaryStream);
  20.  
  21.                 if(niStream->m_rootObjects.m_data)
  22.                 {
  23.                     rootNode = niStream->m_rootObjects.m_data[0]->GetAsNiNode();
  24.                     if(rootNode) {
  25.                         for(UInt32 i = 0; i < rootNode->m_children.m_emptyRunStart; i++)
  26.                         {
  27.                             NiAVObject * childObject = rootNode->m_children.m_data[i];
  28.                             if(childObject) {
  29.                                 NiTriShape * triShape = childObject->GetAsNiTriShape();
  30.                                 if(triShape) {
  31.  
  32.                                     NiSkinInstance * skinInst = niptr_cast<NiSkinInstance>(triShape->m_spSkinInstance);
  33.                                     if(skinInst) {
  34.                                         NiSkinData * skinData = niptr_cast<NiSkinData>(skinInst->m_spSkinData);
  35.                                         if(skinData) {
  36.                                             for(UInt32 i = 0; i < skinData->m_uiBones; i++) {
  37.                                                 NiAVObject * localBone = skinInst->m_ppkBones[i];
  38.                                                 NiAVObject * boneOnRoot = npcRoot->GetObjectByName(&localBone->m_name);
  39.                                                 if(boneOnRoot) {
  40.                                                     skinInst->m_ppkBones[i] = boneOnRoot;
  41.                                                     skinInst->m_worldTransforms[i] = &boneOnRoot->m_worldTransform;
  42.                                                 } else {
  43.                                                     Console_Print("Bone Error: %s", localBone->m_name);
  44.                                                     skinInst->m_worldTransforms[i] = NULL;
  45.                                                 }
  46.                                             }
  47.  
  48.                                             skinInst->m_uiBoneNodes = skinData->m_uiBones;
  49.                                            
  50.                                         }
  51.  
  52.                                         skinInst->m_pkRootParent = loadedRoot;
  53.                                     }
  54.  
  55.                                     loadedRoot->AttachChild(triShape, true);
  56.  
  57.                                     NiAVObject::ControllerUpdateContext ctx;
  58.                                     CALL_MEMBER_FN(triShape, UpdateNode)(&ctx);
  59.                                 }
  60.                             }
  61.                         }                      
  62.  
  63.                         NiAVObject::ControllerUpdateContext ctx;
  64.                         CALL_MEMBER_FN(loadedRoot, UpdateNode)(&ctx);
  65.                     }
  66.                 }
  67.             }
  68.  
  69.             CALL_MEMBER_FN(niStream, dtor)();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement