Advertisement
expired6978

WeaponSwap

Feb 24th, 2014
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.92 KB | None | 0 0
  1. void Actor_Hooked::SwapWeaponParent_Hooked(TESObjectWEAP * weapon, UInt8 unsheathe, NiNode * skeleton, UInt8 keep)
  2. {
  3.     if(weapon)
  4.     {
  5.         if(skeleton)
  6.         {
  7.             BSFixedString nodeName;
  8.             UInt8 type = weapon->gameData.type;
  9.             if(type == TESObjectWEAP::GameData::kType_Bow || type == TESObjectWEAP::GameData::kType_CrossBow)
  10.             {
  11.                 if(!unsheathe)
  12.                 {
  13.                     if(!keep)
  14.                     {
  15.                        
  16.                         if(type == TESObjectWEAP::GameData::kType_CrossBow)
  17.                             nodeName = GetBoneNames()->rMagicNode;
  18.                         else
  19.                             nodeName = GetBoneNames()->weapon;
  20.  
  21.                         NiAVObject * weaponNode = GetNodeByName(skeleton, nodeName, 1);
  22.                         if(weaponNode)
  23.                         {
  24.                             NiNode * niNode = weaponNode->GetAsNiNode();
  25.                             if(niNode)
  26.                             {
  27.                                 if(niNode->m_children.m_emptyRunStart > 0)
  28.                                 {
  29.                                     for(UInt32 i = 0 ; i < niNode->m_children.m_emptyRunStart; i++)
  30.                                     {
  31.                                         NiAVObject * child = niNode->m_children.m_data[i];
  32.                                         if(child) {
  33.                                             CALL_MEMBER_FN(GarbageCollector::GetSingleton(), AddNiAVObject)(child);
  34.                                             niNode->RemoveAt(i);
  35.                                         }
  36.                                     }
  37.                                 }
  38.                             }
  39.                         }
  40.                     }
  41.                 }
  42.             }
  43.  
  44.             // Problem...
  45.             nodeName = GetNodeNameByWeaponType(type); //CALL_MEMBER_FN(this, GetNodeNameByWeaponType1)(type);
  46.             if(nodeName.data && nodeName.data[0] != 0)
  47.             {
  48.                 if(keep)
  49.                 {
  50.                     nodeName = GetBoneNames()->shield;
  51.                     NiAVObject * shieldNode = GetNodeByName(skeleton, nodeName, 1);
  52.                     if(shieldNode)
  53.                     {
  54.                         NiNode * niNode = shieldNode->GetAsNiNode();
  55.                         if(niNode)
  56.                         {
  57.                             if(niNode->m_children.m_emptyRunStart > 0)
  58.                             {
  59.                                 if(niNode->m_children.m_data) {
  60.                                     NiAVObject * child = niNode->m_children.m_data[0];
  61.                                     if(child) {
  62.                                         if(unsheathe == 0)
  63.                                             child->m_flags |= 1;
  64.                                         else
  65.                                             child->m_flags &= ~1;
  66.                                     }
  67.                                 }
  68.                             }
  69.                         }
  70.                     }
  71.                 }
  72.                 else
  73.                 {
  74.                     if(type == TESObjectWEAP::GameData::kType_Staff)
  75.                     {
  76.                         nodeName = GetBoneNames()->weapon;
  77.                         NiAVObject * weaponNode = GetNodeByName(skeleton, nodeName, 1);
  78.                         if(weaponNode)
  79.                         {
  80.                             NiNode * niNode = weaponNode->GetAsNiNode();
  81.                             if(niNode)
  82.                             {
  83.                                 if(niNode->m_children.m_emptyRunStart > 0)
  84.                                 {
  85.                                     if(niNode->m_children.m_data) {
  86.                                         NiAVObject * child = niNode->m_children.m_data[0];
  87.                                         if(child) {
  88.                                             if(unsheathe == 0)
  89.                                                 child->m_flags |= 1;
  90.                                             else
  91.                                                 child->m_flags &= ~1;
  92.                                         }
  93.                                     }
  94.                                 }
  95.                             }
  96.                         }
  97.                     }
  98.                     else
  99.                     {
  100.                         if(unsheathe)
  101.                         {
  102.                             BSFixedString destination = GetInternalNode(type, 0); // Problem...
  103.                             SwapNodeParent(skeleton, nodeName, destination, 0);
  104.                         }
  105.                         else
  106.                         {
  107.                             BSFixedString source = GetInternalNode(type, 0); // Problem...
  108.                             SwapNodeParent(skeleton, source, nodeName, 0);
  109.                         }
  110.                     }
  111.                 }
  112.             }
  113.         }
  114.     }
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement