void CPlayerViewAttachmentMgr::CreatePVAttachments( HOBJECT hPVObject )
{
	ASSERT( g_pPlayerMgr->GetMoveMgr() );
	ASSERT( g_pModelButeMgr );

	// No need to recrete the attachments if it's just being added to the same model...

	if( (m_hObject == hPVObject) && !m_lstPVAttachments.empty() )
		return;

	// Start with an empty list...
	
	RemovePVAttachments();
	
	// Get the clients CharacterFX so we know which model we are using...

	CCharacterFX* pCharFX = g_pPlayerMgr->GetMoveMgr()->GetCharacterFX();
	if( !pCharFX )
		return;

	// Check how many player view attachments we need to create...

	ModelId eModelId = pCharFX->GetModelId();
	uint8 nNumPVAttachments = g_pModelButeMgr->GetNumPlayerViewAttachments( eModelId );
	if( nNumPVAttachments == 0 )
		return;

	uint32 dwFlags = 0;
	g_pCommonLT->GetObjectFlags( hPVObject, OFT_Flags, dwFlags );

	// It must be a player view model...

	if( !(dwFlags & FLAG_REALLYCLOSE) )
		return;

	// We need to create attachments so assign the model we are attaching to...

	m_hObject = hPVObject;

	const char *pszPVAttachmentPosition = LTNULL;
	const char *pszPVAttachment = LTNULL;

	for( uint8 i = 0; i < nNumPVAttachments; ++i )
	{
		g_pModelButeMgr->GetPlayerViewAttachment( eModelId, i, pszPVAttachmentPosition, pszPVAttachment );
		
		CreatePVAttachment( pszPVAttachmentPosition, pszPVAttachment );
	}
}