Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void Actor_Hooked::SwapWeaponParent_Hooked(TESObjectWEAP * weapon, UInt8 unsheathe, NiNode * skeleton, UInt8 keep)
- {
- if(weapon)
- {
- if(skeleton)
- {
- BSFixedString nodeName;
- UInt8 type = weapon->gameData.type;
- if(type == TESObjectWEAP::GameData::kType_Bow || type == TESObjectWEAP::GameData::kType_CrossBow)
- {
- if(!unsheathe)
- {
- if(!keep)
- {
- if(type == TESObjectWEAP::GameData::kType_CrossBow)
- nodeName = GetBoneNames()->rMagicNode;
- else
- nodeName = GetBoneNames()->weapon;
- NiAVObject * weaponNode = GetNodeByName(skeleton, nodeName, 1);
- if(weaponNode)
- {
- NiNode * niNode = weaponNode->GetAsNiNode();
- if(niNode)
- {
- if(niNode->m_children.m_emptyRunStart > 0)
- {
- for(UInt32 i = 0 ; i < niNode->m_children.m_emptyRunStart; i++)
- {
- NiAVObject * child = niNode->m_children.m_data[i];
- if(child) {
- CALL_MEMBER_FN(GarbageCollector::GetSingleton(), AddNiAVObject)(child);
- niNode->RemoveAt(i);
- }
- }
- }
- }
- }
- }
- }
- }
- // Problem...
- nodeName = GetNodeNameByWeaponType(type); //CALL_MEMBER_FN(this, GetNodeNameByWeaponType1)(type);
- if(nodeName.data && nodeName.data[0] != 0)
- {
- if(keep)
- {
- nodeName = GetBoneNames()->shield;
- NiAVObject * shieldNode = GetNodeByName(skeleton, nodeName, 1);
- if(shieldNode)
- {
- NiNode * niNode = shieldNode->GetAsNiNode();
- if(niNode)
- {
- if(niNode->m_children.m_emptyRunStart > 0)
- {
- if(niNode->m_children.m_data) {
- NiAVObject * child = niNode->m_children.m_data[0];
- if(child) {
- if(unsheathe == 0)
- child->m_flags |= 1;
- else
- child->m_flags &= ~1;
- }
- }
- }
- }
- }
- }
- else
- {
- if(type == TESObjectWEAP::GameData::kType_Staff)
- {
- nodeName = GetBoneNames()->weapon;
- NiAVObject * weaponNode = GetNodeByName(skeleton, nodeName, 1);
- if(weaponNode)
- {
- NiNode * niNode = weaponNode->GetAsNiNode();
- if(niNode)
- {
- if(niNode->m_children.m_emptyRunStart > 0)
- {
- if(niNode->m_children.m_data) {
- NiAVObject * child = niNode->m_children.m_data[0];
- if(child) {
- if(unsheathe == 0)
- child->m_flags |= 1;
- else
- child->m_flags &= ~1;
- }
- }
- }
- }
- }
- }
- else
- {
- if(unsheathe)
- {
- BSFixedString destination = GetInternalNode(type, 0); // Problem...
- SwapNodeParent(skeleton, nodeName, destination, 0);
- }
- else
- {
- BSFixedString source = GetInternalNode(type, 0); // Problem...
- SwapNodeParent(skeleton, source, nodeName, 0);
- }
- }
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement