From ec61fa02b6dc812ccf16c7d2e2e912a231759bc3 Mon Sep 17 00:00:00 2001 From: kaetemi Date: Fri, 17 Apr 2020 20:25:41 +0800 Subject: [PATCH] Fix hand slots for fauna, ref kaetemi/ryzomclassic#125 --- ryzom/client/src/character_cl.cpp | 13 +++++++------ .../client/src/client_sheets/character_sheet.cpp | 15 +++++++++++++++ ryzom/client/src/entity_cl.cpp | 2 ++ 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/ryzom/client/src/character_cl.cpp b/ryzom/client/src/character_cl.cpp index 447ce8e3d..76263ee56 100644 --- a/ryzom/client/src/character_cl.cpp +++ b/ryzom/client/src/character_cl.cpp @@ -1120,7 +1120,7 @@ void CCharacterCL::computeAnimSet() // Use the generic method to compute the animation set. if(!::computeAnimSet(_CurrentAnimSet[MOVE], _Mode, _Sheet->getAnimSetBaseName(), _Items[SLOTTYPE::LEFT_HAND_SLOT].Sheet, _Items[SLOTTYPE::RIGHT_HAND_SLOT].Sheet, !modeWithHiddenItems())) { - //nlwarning("CH:computeAnimSet:%d: pb when trying to compute the animset. Sheet Id '%u(%s)'.", _Slot, _SheetId.asInt(), _SheetId.toString().c_str()); + nlwarning("CH:computeAnimSet:%d: pb when trying to compute the animset. Sheet Id '%u(%s)'.", _Slot, _SheetId.asInt(), _SheetId.toString().c_str()); } }// computeAnimSet // @@ -3360,7 +3360,7 @@ void CCharacterCL::showOrHideBodyParts( bool objectsVisible ) lHandInstIdx = SLOTTYPE::LEFT_HAND_SLOT; // hide gloves(armor) if player has magician amplifier - if( _Items[rHandInstIdx].Sheet && (_Items[rHandInstIdx].Sheet->ItemType == ITEM_TYPE::MAGICIAN_STAFF) ) + if( _Items[SLOTTYPE::RIGHT_HAND_SLOT].Sheet && (_Items[SLOTTYPE::RIGHT_HAND_SLOT].Sheet->ItemType == ITEM_TYPE::MAGICIAN_STAFF) ) { if( !_Instances[SLOTTYPE::HANDS_SLOT].Current.empty() ) _Instances[SLOTTYPE::HANDS_SLOT].Current.hide(); @@ -3378,8 +3378,9 @@ void CCharacterCL::showOrHideBodyParts( bool objectsVisible ) if( !objectsVisible ) { // Right Hand + nlassert(SLOTTYPE::RIGHT_HAND_SLOT < _Items.size() && SLOTTYPE::LEFT_HAND_SLOT < _Items.size()); if(rHandInstIdx<_Instances.size()) - if( !(_Items[rHandInstIdx].Sheet && _Items[rHandInstIdx].Sheet->NeverHideWhenEquipped ) ) + if( !(_Items[SLOTTYPE::RIGHT_HAND_SLOT].Sheet && _Items[SLOTTYPE::RIGHT_HAND_SLOT].Sheet->NeverHideWhenEquipped ) ) if(!_Instances[rHandInstIdx].Current.empty()) { _Instances[rHandInstIdx].Current.hide(); @@ -3387,7 +3388,7 @@ void CCharacterCL::showOrHideBodyParts( bool objectsVisible ) } // Left Hand if(lHandInstIdx <_Instances.size()) - if( !(_Items[lHandInstIdx].Sheet && _Items[lHandInstIdx].Sheet->NeverHideWhenEquipped ) ) + if( !(_Items[SLOTTYPE::LEFT_HAND_SLOT].Sheet && _Items[SLOTTYPE::LEFT_HAND_SLOT].Sheet->NeverHideWhenEquipped ) ) if(!_Instances[lHandInstIdx].Current.empty()) { _Instances[lHandInstIdx].Current.hide(); @@ -9293,14 +9294,14 @@ const char *CCharacterCL::getBoneNameFromBodyPart(BODY::TBodyPart part, BODY::TS const CItemSheet *CCharacterCL::getRightHandItemSheet() const { if (_RHandInstIdx == CEntityCL::BadIndex) return NULL; - return _Items[_RHandInstIdx].Sheet; + return _Items[SLOTTYPE::RIGHT_HAND_SLOT].Sheet; } // ********************************************************************************************* const CItemSheet *CCharacterCL::getLeftHandItemSheet() const { if (_LHandInstIdx == CEntityCL::BadIndex) return NULL; - return _Items[_LHandInstIdx].Sheet; + return _Items[SLOTTYPE::LEFT_HAND_SLOT].Sheet; } // *************************************************************************** diff --git a/ryzom/client/src/client_sheets/character_sheet.cpp b/ryzom/client/src/client_sheets/character_sheet.cpp index ab935268b..e6e5cbd00 100644 --- a/ryzom/client/src/client_sheets/character_sheet.cpp +++ b/ryzom/client/src/client_sheets/character_sheet.cpp @@ -213,6 +213,21 @@ void CCharacterSheet::build(const NLGEORGES::UFormElm &item) // IN LEFT HAND readEquipment(item, "Basics.Equipment.HandL", ObjectInLeftHand); + if (!ObjectInRightHand.IdItem) + { + std::string right; + item.getValueByName(right, "item_right"); + if (!right.empty()) + ObjectInRightHand.IdItem = ClientSheetsStrings.add(NLMISC::toLower(right)); + } + + if (!ObjectInLeftHand.IdItem) + { + std::string left; + item.getValueByName(left, "item_left"); + if (!left.empty()) + ObjectInLeftHand.IdItem = ClientSheetsStrings.add(NLMISC::toLower(left)); + } // Get the animation set Base Name. string AnimSetBaseName; diff --git a/ryzom/client/src/entity_cl.cpp b/ryzom/client/src/entity_cl.cpp index 14f3a1769..10d1573cf 100644 --- a/ryzom/client/src/entity_cl.cpp +++ b/ryzom/client/src/entity_cl.cpp @@ -378,6 +378,8 @@ void CEntityCL::SInstanceCL::updateCurrentFromLoading(NL3D::USkeleton Skeleton) sint stickID = Skeleton.getBoneIdByName(StickPoint); if(stickID != -1) Skeleton.stickObject(Current, stickID); + else + nlwarning("Skeleton '%s' is missing bone '%s' for object attachment.", Skeleton.getShapeName().c_str(), StickPoint.c_str()); } }