Hi! I tried to put a new Shield to my files (Vs2017 Source) this shield was working fine on my old vs2003 source. Can anyone who can give me idea why my neuz crash?
DEBUG SCREENSHOT:
MoverEquip.cpp -> CMover::UpdateParts
void CMover::UpdateParts( int nSex, int nSkinSet, int nFace, int nHairMesh, int nHeadMesh, PEQUIP_INFO pEquipInfo, CModelObject* pModel, CItemContainer< CItemElem >* pInventory, BOOL bIfParts, CMover* pMover )
{
if( pModel == NULL )
{
LPCTSTR szErr = Error( "CMover::UpdateParts : pModel is NULL" );
ADDERRORMSG( szErr );
return;
}
// ±âº» ºÎÀ§(¼Ó»ì, Çì¾î, µîµî)À» ¼¼ÆÃÇÑ´Ù.
//LPSKINSET lpSkinset = prj.m_PartsMng.GetSkinSet( nSex, nSkinSet );
//LPCTSTR lpHair = prj.m_PartsMng.GetHairMeshName( nSex, nHairMesh );
TCHAR lpszTemp[ 64 ];
if( bIfParts )
{
// Hair
_stprintf( lpszTemp, PARTSMESH_HAIR( nSex ), nHairMesh + 1 );
pModel->LoadElement( lpszTemp, PARTS_HAIR );
// Head
_stprintf( lpszTemp, PARTSMESH_HEAD( nSex ), nHeadMesh + 1 );
pModel->LoadElement( lpszTemp, PARTS_HEAD );
}
// ¸ÕÀú ÀͽºÅ©·ç½Ãºê ¿ÀºêÁ§Æ®¸¦ TakeOffÇÑ´Ù.
BOOL abExclusiveParts[ MAX_HUMAN_PARTS ];
ZeroMemory( abExclusiveParts, sizeof( abExclusiveParts ) );
for( int i = 0; i < MAX_HUMAN_PARTS; i++ )
{
if( i == PARTS_HAIR || i == PARTS_HEAD )//|| i == PARTS_CAP || i == PARTS_HAND || i == PARTS_FOOT )
continue;
DWORD dwParts = -1;
CItemElem* pItemElem = NULL;
ItemProp* pItemProp = NULL;
// ÇÁ·ÎÆÛƼ ²¨³¿
pItemProp = GetInventoryProp( pEquipInfo, pInventory, i );
if( pItemProp )
{
if( pInventory )
{
CItemElem* pItemElem = pInventory->GetAt( i + pInventory->GetSize() );
if( pItemElem->IsFlag( CItemElem::expired ) )
pItemProp = NULL;
}
else
{
if( pEquipInfo[i].byFlag & CItemElem::expired )
pItemProp = NULL;
}
}
// ÀͽºÅ¬·ç½Ãºê°¡ ÀÖÀ»¶§
if( pItemProp && pItemProp->dwExclusive != NULL_ID )
{
pModel->TakeOffParts( pItemProp->dwExclusive ); // ÀͽºÅ¬·ç½Ãºê¸¦ Á¦°Å
abExclusiveParts[ pItemProp->dwExclusive ] = TRUE; // ÀͽºÅ¬·ç½Ãºê µÈ³ÑÀ» ±â¾ï.
}
}
// ÀåÂøºÎÀ§¸¦ ¼¼ÆÃÇÑ´Ù.
for( int i = 0; i < MAX_HUMAN_PARTS; i++ )
{
if( i == PARTS_HAIR || i == PARTS_HEAD )//|| i == PARTS_CAP || i == PARTS_HAND || i == PARTS_FOOT )
continue;
DWORD dwParts = -1;
CItemElem* pItemElem = NULL;
ItemProp* pItemProp = NULL;
if( pInventory == NULL ) // fake only
{
if( pEquipInfo[i].dwId != NULL_ID )
{
if( ( pEquipInfo[i].byFlag & CItemElem::expired ) != CItemElem::expired )
pItemProp = prj.GetItemProp( pEquipInfo[i].dwId );
}
}
else
{
pItemElem = pInventory->GetEquip( i );//AtId( padwEquipment[ i ] );
if( pItemElem )
{
if( !pItemElem->IsFlag( CItemElem::expired ) )
pItemProp = pItemElem->GetProp();
}
}
TCHAR szPartsName[ 32 ];
// °¢ ÆÄÃ÷ÀÇ o3d¸¦ ·Îµù.
if( pItemProp )
{
#ifdef __MODEL_CHANGE
if(pItemElem && pItemElem->m_dwnewID)
{
ItemProp * prop = prj.GetItemProp(pItemElem->m_dwnewID);//prevent model neuz crashes
if( pItemElem && pItemElem->m_dwnewID != NULL && pItemElem->m_dwnewID != NULL_ID && pItemProp )
{
if( pItemProp->bPartsFile == TRUE )
prj.m_modelMng.MakePartsName( szPartsName, _T( "part" ), pItemElem->m_dwnewID, nSex );
else
prj.m_modelMng.MakeModelName( szPartsName, OT_ITEM, pItemElem->m_dwnewID );
}
else
{
if( pItemProp->bPartsFile == TRUE )
prj.m_modelMng.MakePartsName( szPartsName, _T( "part" ), pItemProp->dwID, nSex );
else
prj.m_modelMng.MakeModelName( szPartsName, OT_ITEM, pItemProp->dwID );
}
}
else
{
if( pItemProp->bPartsFile == TRUE )
prj.m_modelMng.MakePartsName( szPartsName, _T( "part" ), pItemProp->dwID, nSex );
else
prj.m_modelMng.MakeModelName( szPartsName, OT_ITEM, pItemProp->dwID );
}
#else //__MODEL_CHANGE
if( pItemProp->bPartsFile == TRUE )
prj.m_modelMng.MakePartsName( szPartsName, _T( "part" ), pItemProp->dwID, nSex );
else
prj.m_modelMng.MakeModelName( szPartsName, OT_ITEM, pItemProp->dwID );
//prj.m_modelMng.MakePartsName( szPartsName, _T( "item" ), pItemProp->dwID );
#endif
if( bIfParts || ( i == PARTS_RWEAPON || i == PARTS_LWEAPON || i == PARTS_SHIELD ) )
{
pModel->LoadElement( szPartsName, i /*pItemProp->dwParts*/ );
}
}
if( abExclusiveParts[ i ] == FALSE )
{
switch( i )
{
case PARTS_RWEAPON:
// º¯½Å ij¸¯ÅÍ´Â ÀåÂø ¹«±â¸¦ º¼ ¼ö ¾ø°Ô ÇÏÀÚ(ÆÄÃ÷ ÀåÂø¸¸ ¸øÇÔ. ¼öÄ¡ °è»êÀº Àû¿ëµÊ)
if( pItemProp && ( pMover == NULL || ( pMover && pMover->IsDisguise() == FALSE ) ) )
{
switch( pItemProp->dwItemKind3 )
{
case IK3_KNUCKLEHAMMER:
((CModelObject*)pModel)->SetParent( PARTS_RWEAPON, ((CModelObject*)pModel)->GetRArmIdx() );
break;
case IK3_BOW:
((CModelObject*)pModel)->SetParent( PARTS_RWEAPON, ((CModelObject*)pModel)->GetLHandIdx() );
break;
case IK3_YOYO:
((CModelObject*)pModel)->SetParent( PARTS_RWEAPON, ((CModelObject*)pModel)->GetRHandIdx() );
pModel->LoadElement( szPartsName, PARTS_LWEAPON );
((CModelObject*)pModel)->SetParent( PARTS_LWEAPON, ((CModelObject*)pModel)->GetLHandIdx() );
break;
default:
((CModelObject*)pModel)->SetParent( PARTS_RWEAPON, ((CModelObject*)pModel)->GetRHandIdx() );
}
// if( pItemProp->dwItemKind3 == IK3_KNUCKLEHAMMER )
// ((CModelObject*)pModel)->SetParent( PARTS_RWEAPON, ((CModelObject*)pModel)->GetRArmIdx() );
// else
// ((CModelObject*)pModel)->SetParent( PARTS_RWEAPON, ((CModelObject*)pModel)->GetRHandIdx() );
}
else
pModel->TakeOffParts( i );
break;
case PARTS_LWEAPON:
// º¯½Å ij¸¯ÅÍ´Â ÀåÂø ¹«±â¸¦ º¼ ¼ö ¾ø°Ô ÇÏÀÚ(ÆÄÃ÷ ÀåÂø¸¸ ¸øÇÔ. ¼öÄ¡ °è»êÀº Àû¿ëµÊ)
if( pItemProp && ( pMover == NULL || ( pMover && pMover->IsDisguise() == FALSE ) ) )
{
((CModelObject*)pModel)->SetParent( PARTS_LWEAPON, ((CModelObject*)pModel)->GetLHandIdx() );
}
else
pModel->TakeOffParts( i );
break;
case PARTS_SHIELD:
// º¯½Å ij¸¯ÅÍ´Â ÀåÂø ¹«±â¸¦ º¼ ¼ö ¾ø°Ô ÇÏÀÚ(ÆÄÃ÷ ÀåÂø¸¸ ¸øÇÔ. ¼öÄ¡ °è»êÀº Àû¿ëµÊ)
if( pItemProp && ( pMover == NULL || ( pMover && pMover->IsDisguise() == FALSE ) ) )
((CModelObject*)pModel)->SetParent( PARTS_SHIELD, ((CModelObject*)pModel)->GetLArmIdx() );
else
pModel->TakeOffParts( i );
break;
case PARTS_UPPER_BODY:
if( bIfParts )
if( pItemProp == NULL )
pModel->LoadElement( PARTSMESH_UPPER( nSex ), PARTS_UPPER_BODY );
break;
case PARTS_LOWER_BODY:
if( bIfParts )
if( pItemProp == NULL )
pModel->LoadElement( PARTSMESH_LOWER( nSex ), PARTS_LOWER_BODY );
break;
case PARTS_HAND:
if( bIfParts )
if( pItemProp == NULL )
pModel->LoadElement( PARTSMESH_HAND( nSex ), PARTS_HAND );
break;
case PARTS_FOOT:
if( bIfParts )
if( pItemProp == NULL )
pModel->LoadElement( PARTSMESH_FOOT( nSex ), PARTS_FOOT );
break;
default:
if( bIfParts )
{
if( pItemProp == NULL )
pModel->TakeOffParts( i );
}
}
}
}
}
Resource Example of Shield (the one that crash)
Spec_item.txt
Code:
7 II_ARM_ARM_SHI_HEVAG "Shinny Shield" 1 1 IK1_ARMOR IK2_ARMOR IK3_SHIELD JOB_VAGRANT TRUE = = 1 6570000 100 180 HD_ONE 4 PARTS_SHIELD = 0 = = 130 200 = 1 = = = 595 597 _NONE 0 0 0 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 5000 = = 0 0 0 0 0 0 = = = = = = = = = = = = 75 = = = """shinnyshield.png""" 0 """""" IDS_PROPITEM_TXT_014897 1 300 0 0 1 0 0 0 0 0 2 = = = = = = = = = = 1 1 1 1 1 0
mdlyna.inc
Code:
"ArmShishield_healer_pvp_c_01" II_ARM_ARM_SHI_HEVAG MODELTYPE_MESH "" 0 MD_NEAR 0 1.0f 0 1 ATEX_NONE 1
I already tried to remove the model change but still crashing my neuz
file of model/texture:
@
: Neuz Crash when you equip or view it on model viewer (on wiki system)