⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 itemmanager_composite.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*
	bCreatedSocket = FALSE;
	switch( pSelectedItemSlot->GetItemInfo()->m_wType )
	{
	// 公扁
	case eITEMTYPE_TWOHANDAXE:	
	case eITEMTYPE_TWOHANDSWORD:	
	case eITEMTYPE_ONEHANDSWORD:
	case eITEMTYPE_SPEAR:
	case eITEMTYPE_WHIP:		
	case eITEMTYPE_ETHERCLAW:	
	case eITEMTYPE_ONEHANDCROSSBOW:
	case eITEMTYPE_ETHERWEAPON:
	case eITEMTYPE_STAFF:
	case eITEMTYPE_ORB:
	// 规绢备
	case eITEMTYPE_ARMOR:
	case eITEMTYPE_PANTS:
	case eITEMTYPE_BOOTS:
	case eITEMTYPE_GLOVE:
		{	
			BYTE SocketNum	= pSelectedItemSlot->GetSocketNum();
			if( (curRank+1) <= RANK_B && SocketNum < 3 )
			{
				ASSERT( pSelectedItemSlot->GetRank() == (curRank+1) );
				BYTE SelectRank	= pSelectedItemSlot->GetRank() - RANK_D;
				seed = random( 1, 100 );
				if( seed <= g_Ratio.m_SocketRatio[SelectRank].Ratio[SocketNum] )
				{
					// 己傍
					pSelectedItemSlot->SetSocketNum(pSelectedItemSlot->GetSocketNum()+1);
					bCreatedSocket = TRUE;
				}
			}
		}break;
	}
*/
	// 昏力且 酒捞袍 昏力
	pInventory->DeleteSlot( DeletedItemPos, NULL );

	// 家葛登绰 捣 家厚
	BOOL ret = m_pPlayer->MinusMoney( RankUpFare );
	ASSERT(ret);

	return RC::RC_ITEM_SUCCESS;
}
/*
RC::eITEM_RESULT ItemManager::RankUp( POSTYPE TargetPos1, POSTYPE TargetPos2, POSTYPE & OUT RankUpItemPos, POSTYPE & OUT DeletedItemPos )
{
	if( !IsPossibleFunction( eFUNCTIONALTYPE_RANKUP ) )
		return RC::RC_ITEM_UNUSABLE_FUNCTION;

	if( !ValidState() ) 
		return RC::RC_ITEM_INVALIDSTATE;
	if( !ValidPos( SI_INVENTORY, TargetPos1 ) )
		return RC::RC_ITEM_INVALIDPOS;
	if( !ValidPos(  SI_INVENTORY, TargetPos2 ) )
		return RC::RC_ITEM_INVALIDPOS;

	if( TargetPos1 == TargetPos2 )
		return RC::RC_ITEM_INVALIDPOS;

	SCSlotContainer * pInventory = GetItemSlotContainer( SI_INVENTORY );
	SCItemSlot & rTargetSlot1 = (SCItemSlot &)pInventory->GetSlot(TargetPos1);
	SCItemSlot & rTargetSlot2 = (SCItemSlot &)pInventory->GetSlot(TargetPos2);

	if( rTargetSlot1.GetCode() != rTargetSlot2.GetCode() ||
		rTargetSlot1.GetRank() != rTargetSlot2.GetRank() )
	{
		return RC::RC_ITEM_INVALID_CONDITION;
	}

	MONEY SpendMoney = rTargetSlot1.GetPriceForBuy()/2;
	// 家葛登绰 捣 眉农
	if( m_pPlayer->GetMoney() < SpendMoney )
	{
		return RC::RC_ITEM_INSUFFICIENT_MONEY;
	}

	// 歹捞惑 珐农 阂啊瓷窍霸
	if( rTargetSlot1.GetRank() == RANK_A )
	{
		return RC::RC_ITEM_NO_MORE_RANK;
	}

	eOPTION_KIND kind;
	switch( rTargetSlot1.GetItemInfo()->m_wType )
	{
	case eITEMTYPE_TWOHANDAXE:	
	case eITEMTYPE_TWOHANDSWORD:	
	case eITEMTYPE_ONEHANDSWORD:
	case eITEMTYPE_SPEAR:
	case eITEMTYPE_WHIP:		
	case eITEMTYPE_ETHERCLAW:	
	case eITEMTYPE_ONEHANDCROSSBOW:
	case eITEMTYPE_ETHERWEAPON:
	case eITEMTYPE_STAFF:
	case eITEMTYPE_ORB:
		{
			if( rTargetSlot1.GetEnchantLV() != rTargetSlot2.GetEnchantLV() )
			{
				return RC::RC_ITEM_INVALID_CONDITION;
			}
			kind = OPTION_KIND_WEAPON;
		}
		break;
	case eITEMTYPE_ARMOR:
	case eITEMTYPE_PROTECTOR:
	case eITEMTYPE_HELMET:
	case eITEMTYPE_PANTS:
	case eITEMTYPE_BOOTS:
	case eITEMTYPE_GLOVE:
	case eITEMTYPE_BELT:
	case eITEMTYPE_SHIRTS:
		{
			if( rTargetSlot1.GetEnchantLV() != rTargetSlot2.GetEnchantLV() )
			{
				return RC::RC_ITEM_INVALID_CONDITION;
			}
			kind = OPTION_KIND_ARMOR;
		}
		break;
	case eITEMTYPE_RING:
		{
			// 厩技辑府
			kind = OPTION_KIND_RING;
		}
		break;
	case eITEMTYPE_NECKLACE:
		{
			// 厩技辑府
			kind = OPTION_KIND_NECKLACE;
		}
		break;
	case eITEMTYPE_BERSERKER_SACCESSORY:	
	case eITEMTYPE_DRAGON_SACCESSORY:		
	case eITEMTYPE_VALKYRIE_SACCESSORY:		
	case eITEMTYPE_SHADOW_SACCESSORY:		
	case eITEMTYPE_ELEMENTALIST_SACCESSORY:	
		{
			//  漂荐 厩技辑府
			// TEMP : ! 泅犁 备泅 救凳!
			return RC::RC_ITEM_CANNT_RANKUP_ITEM;	
		}
		break;
	default:
		return RC::RC_ITEM_CANNT_RANKUP_ITEM;
	}


	// 快急 霉锅掳 酒捞袍阑 珐农诀 酒捞袍栏肺 急琶
	SCItemSlot * pSelectedItemSlot = &rTargetSlot1;
	RankUpItemPos	= rTargetSlot1.GetPos();
	DeletedItemPos	= rTargetSlot2.GetPos();
	int seed = random(0, 99);
	if( seed < 30 )
	{
		// 2锅掳 酒捞袍 急琶
		pSelectedItemSlot	= &rTargetSlot2;
		RankUpItemPos		= rTargetSlot2.GetPos();
		DeletedItemPos		= rTargetSlot1.GetPos();
	}

	// 牢镁飘绰 臭篮 率 傈铰
	if( rTargetSlot1.GetEnchant() >= rTargetSlot2.GetEnchant() )
		pSelectedItemSlot->SetEnchant( rTargetSlot1.GetEnchant() );
	else
		pSelectedItemSlot->SetEnchant( rTargetSlot2.GetEnchant() );

	// 加己 眠啊
	// 犬伏利 加己 急琶
	// 悼老 加己篮 滚覆
	const RANK_ATTR_SELECTOR & rRankAttrSelector = ItemOptionParser::Instance()->GetRankAttrSelector(kind);
	BYTE curRank = pSelectedItemSlot->GetRank();

	seed = random( 0, rRankAttrSelector.m_RankAccCount[curRank+1] );
	eRANK AcqRank	= rRankAttrSelector.pAttrArray[seed].m_Rank;
	BYTE Index		= rRankAttrSelector.pAttrArray[seed].m_AttrIndex;
	BYTE value		= rRankAttrSelector.pAttrArray[seed].m_byValue;

	pSelectedItemSlot->SetRank((eRANK)(curRank+1));
	pSelectedItemSlot->SetRankAttr((eRANK)(curRank+1), AcqRank, Index, value );

	// 鞍篮 可记捞 乐栏搁 绝沮
	for( BYTE i = (eRANK)(RANK_D) ; i < curRank+1 ; ++i )
	{
		if( pSelectedItemSlot->GetRankAttrRank((eRANK)i) == AcqRank &&
			pSelectedItemSlot->GetRankAttrRank((eRANK)i) == Index )
		{
			pSelectedItemSlot->SetRankAttr((eRANK)(curRank+1), RANK_E, 0, 0 );
		}
	}

	// for DEBUG
	DEBUG_CODE(
	if( pSelectedItemSlot->GetRank() >= RANK_MAX )
	{
		SUNLOG( eFULL_LOG,  "[ItemManager::RankUp] 珐农啊 RANK_MAX甫 逞绢脊促." );
	}
	);

	// 家南 俺荐 积己
	// !!! 公扁, 规绢备(快急癌渴)父 秦寸
	BOOL bCreateSocket = FALSE;
	if( (kind == OPTION_KIND_WEAPON ||
		kind == OPTION_KIND_ARMOR) &&
		pSelectedItemSlot->GetRank() <= RANK_B )
	{
		BYTE SelectRank	= pSelectedItemSlot->GetRank() - RANK_D;
		BYTE SocketNum	= pSelectedItemSlot->GetSocketNum();
		ASSERT( rTargetSlot1.GetSocketNum() < 3 );
		seed = random( 1, 100 );
		if( seed <= g_Ratio.m_SocketRatio[SelectRank].Ratio[SocketNum] )
		{
			// 己傍
			pSelectedItemSlot->SetSocketNum(pSelectedItemSlot->GetSocketNum()+1);
			bCreateSocket = TRUE;
		}
	}

	// 昏力且 酒捞袍 昏力
	pInventory->DeleteSlot( DeletedItemPos, NULL );

	// 家葛登绰 捣 家厚
	BOOL ret = m_pPlayer->MinusMoney( SpendMoney );
	ASSERT(ret);

	return RC::RC_ITEM_SUCCESS;
}
*/
RC::eITEM_RESULT ItemManager::FillSocket( POSTYPE SocketItemPos, POSTYPE TargetPos )
{
	if( !IsPossibleFunction( eFUNCTIONALTYPE_FILLSOCKET ) )
		return RC::RC_ITEM_UNUSABLE_FUNCTION;
	if( !ValidState() ) 
		return RC::RC_ITEM_INVALIDSTATE;
	if( !ValidPos( SI_INVENTORY, SocketItemPos ) )
		return RC::RC_ITEM_INVALIDPOS;
	if( !ValidPos(  SI_INVENTORY, TargetPos ) )
		return RC::RC_ITEM_INVALIDPOS;

	SCSlotContainer * pInventory = GetItemSlotContainer( SI_INVENTORY );
	SCItemSlot & rSocketSlot = (SCItemSlot &)pInventory->GetSlot(SocketItemPos);
	SCItemSlot & rTargetSlot = (SCItemSlot &)pInventory->GetSlot(TargetPos);

	if( rSocketSlot.GetItemInfo()->m_wType != eITEMTYPE_SOCKET )
	{
		return RC::RC_ITEM_INVALID_CONDITION;
	}

	// 公扁, 规绢备(癌渴, 秋镐, 官瘤, 厘癌, 何明)父
	if( !rTargetSlot.GetItemInfo()->IsWeapon() &&
		rTargetSlot.GetItemInfo()->m_wType != eITEMTYPE_ARMOR &&
		rTargetSlot.GetItemInfo()->m_wType != eITEMTYPE_HELMET &&
		rTargetSlot.GetItemInfo()->m_wType != eITEMTYPE_PANTS &&
		rTargetSlot.GetItemInfo()->m_wType != eITEMTYPE_BOOTS &&
		rTargetSlot.GetItemInfo()->m_wType != eITEMTYPE_GLOVE )
	{
		return RC::RC_ITEM_INVALID_CONDITION;
	}

	eSOCKET EmptySocket = SOCKET_1;
	if( !rTargetSlot.ExistEmptySocket(EmptySocket) )
	{
		return RC::RC_ITEM_FULLSOCKET;
	}

	// 100%己傍

	const sSOCKETITEM_OPTION * pItemOption = SocketOptionParser::Instance()->GetSocketItemOption( rSocketSlot.GetCode() );
	if( !pItemOption) return RC::RC_ITEM_INVALID_CONDITION;
	const sSOCKET_OPTION * pOption = SocketOptionParser::Instance()->GetSocketOption( pItemOption->m_AttrIndex );
	if( !pOption) return RC::RC_ITEM_INVALID_CONDITION;
	//const SOCKETITEM_OPTION * pOption = ItemOptionParser::Instance()->GetSocketOption(rSocketSlot.GetCode());
	//ASSERT( pOption );

	// 家南 酒捞袍俊 蝶扼 家南 加己苞 加己 蔼阑 持绰促.
	//rTargetSlot.SetSocketAttr( EmptySocket, pOption->m_SocketLevel, pOption->m_AttrIndex, pOption->m_byValue );
	rTargetSlot.SetSocketAttr( EmptySocket, pItemOption->m_SocketLevel, pOption );

	// 家南酒捞袍 力芭 : 俺荐 力芭
	Lose( pInventory, SocketItemPos, 1 );


	return RC::RC_ITEM_SUCCESS;
}

// 焊籍苞 犁丰绰 ItemCompositeParser俊辑 茫扁
RC::eITEM_RESULT ItemManager::ExtractSocket( POSTYPE TargetPos )
{
	if( !IsPossibleFunction( eFUNCTIONALTYPE_EXTRACTSOCKET ) )
		return RC::RC_ITEM_UNUSABLE_FUNCTION;
	if( !ValidState() ) 
		return RC::RC_ITEM_INVALIDSTATE;
	if( !ValidPos(  SI_INVENTORY, TargetPos ) )
		return RC::RC_ITEM_INVALIDPOS;

	SCSlotContainer * pInventory = GetItemSlotContainer( SI_INVENTORY );
	SCItemSlot & rTargetSlot = (SCItemSlot &)pInventory->GetSlot(TargetPos);

	// 家南可记阑 力芭且 可记捞 乐绰啊?
	BOOL bExist = FALSE;
	for( int i = (int)(rTargetSlot.GetSocketNum())-1 ; i >= 0 ; --i )
	{
		if( rTargetSlot.GetSocketAttr((eSOCKET)i) != 0 )
		{
			bExist = TRUE;
			break;
		}
	}
	if( !bExist ) return RC::RC_ITEM_INVALID_CONDITION;

	// 犁丰啊 乐绰瘤俊 措茄 眉农
	// 俺荐 眉农, 捣 眉农
	sITEMCOMPOSITE * pCInfo = ItemCompositeParser::Instance()->GetCompositeInfo(eITEMCOMPOSITE_EXTRACT_SOCKET);
	ASSERT( pCInfo );

	if( m_pPlayer->GetMoney() < pCInfo->m_Money )
		return RC::RC_ITEM_HAVENOTMONEY;

	sITEMCOMPOSITEMATERIAL *  pMaterials = pCInfo->m_sCompositeMaterials;
	for( POSTYPE i = 0 ; i < pCInfo->m_byMatCount ; ++i )
	{
		if( pMaterials[i].m_dwCompositeMaterialCode == 0 ) continue;

		EmptyItemCheck EmptyCheck(pMaterials[i].m_dwCompositeMaterialCode,pMaterials[i].m_bySpendMaterialNum);
		if( !ForeachSlot( SI_INVENTORY, EmptyCheck ) )
			return RC::RC_ITEM_ENCHANT_HAVENOTMETERIALS;
	}
	// 犁丰 绝局扁
	for( POSTYPE i = 0 ; i < pCInfo->m_byMatCount ; ++i )
	{
		if( pMaterials[i].m_dwCompositeMaterialCode == 0 ) continue;

		DeleteItem DeleteOperator(pMaterials[i].m_dwCompositeMaterialCode,pMaterials[i].m_bySpendMaterialNum);
		BOOL rt = ForeachSlot( SI_INVENTORY, DeleteOperator );
		ASSERT(rt);
	}

	// 捣瞒皑
	BOOL ret = m_pPlayer->MinusMoney( pCInfo->m_Money );
	ASSERT(ret);

	// 己傍 犬伏
	int seed = random(0,99);
	if( seed < 75 )
	{
		// 己傍
		// 弥辟 惯积茄 可记 力芭
		for( int i = ((int)rTargetSlot.GetSocketNum())-1 ; i >= 0 ; --i )
		{
			if( rTargetSlot.GetSocketAttr((eSOCKET)i) != 0 )
			{
				//rTargetSlot.SetSocketAttr((eSOCKET)i, SOCKETLV_LOW, 0, 0);
				rTargetSlot.SetSocketAttr((eSOCKET)i, SOCKETLV_LOW, NULL);
				return RC::RC_ITEM_EXTRACTSOCKET_SUCCESS;
			}
		}
	}

	return RC::RC_ITEM_EXTRACTSOCKET_FAILED;

}

RC::eITEM_RESULT ItemManager::CreateAccessory( BYTE Type, POSTYPE SocketItemPos, INVENTORY_TOTAL_INFO * OUT pTotalInfo )
{
	if( !IsPossibleFunction( eFUNCTIONALTYPE_CREATEACCESSORY ) )
		return RC::RC_ITEM_UNUSABLE_FUNCTION;
	if( !ValidState() ) 
		return RC::RC_ITEM_INVALIDSTATE;
	if( !ValidPos(  SI_INVENTORY, SocketItemPos ) )
		return RC::RC_ITEM_INVALIDPOS;

	SCSlotContainer * pInventory = GetItemSlotContainer( SI_INVENTORY );
	SCItemSlot & rSocketItem = (SCItemSlot &)pInventory->GetSlot(SocketItemPos);
	if( rSocketItem.GetItemInfo()->m_wType != eITEMTYPE_SOCKET )
	{
		return RC::RC_ITEM_INVALID_CONDITION;
	}

	// 犁丰啊 乐绰瘤俊 措茄 眉农
	// 俺荐 眉农, 捣 眉农
	sITEMCOMPOSITE * pCInfo = ItemCompositeParser::Instance()->GetCompositeInfo((eITEMCOMPOSITECODE)(eITEMCOMPOSITE_LOW_RING+Type));
	if( !pCInfo )
		return RC::RC_ITEM_INVALIDSTATE;

	sITEMCOMPOSITERESULT * pResultInfo = ItemCompositeParser::Instance()->GetCompositeResultInfo(pCInfo->m_byResult);
	ASSERT( pResultInfo );

	if( m_pPlayer->GetMoney() < pCInfo->m_Money )
		return RC::RC_ITEM_HAVENOTMONEY;

	sITEMCOMPOSITEMATERIAL *  pMaterials = pCInfo->m_sCompositeMaterials;
	for( POSTYPE i = 0 ; i < pCInfo->m_byMatCount ; ++i )
	{
		if( pMaterials[i].m_dwCompositeMaterialCode == 0 ) continue;

		EmptyItemCheck EmptyCheck(pMaterials[i].m_dwCompositeMaterialCode,pMaterials[i].m_bySpendMaterialNum);
		if( !ForeachSlot( SI_INVENTORY, EmptyCheck ) )
			return RC::RC_ITEM_ENCHANT_HAVENOTMETERIALS;
	}

	// 厩技辑府 急琶
	// 后傍埃俊 积己 : 家南俊促啊 绝局绊 且妨绊 沁栏唱, 般摹绰 酒捞袍捞扼辑 阂啊瓷
	int seed = random(0,sITEMCOMPOSITERESULT::MAX_COMPOSITE_RESULT_NUM-1);
	ASSERT( pResultInfo->m_ResultItemCode[seed] != 0 );

	// 货肺 积己登绰 巴捞扁 锭巩
	// 后傍埃 乐绰瘤 眉农
	RC::eITEM_RESULT rt = Obtain( pResultInfo->m_ResultItemCode[seed], 1, pTotalInfo );
	if( rt != RC::RC_ITEM_SUCCESS )
		return RC::RC_ITEM_ISNOTEMPTYSLOT;

	// 犁丰 绝局扁
	for( POSTYPE i = 0 ; i < pCInfo->m_byMatCount ; ++i )
	{
		if( pMaterials[i].m_dwCompositeMaterialCode == 0 ) continue;

		DeleteItem DeleteOperator(pMaterials[i].m_dwCompositeMaterialCode,pMaterials[i].m_bySpendMaterialNum);
		BOOL rt = ForeachSlot( SI_INVENTORY, DeleteOperator );
		ASSERT(rt);
	}

	// 捣瞒皑
	BOOL ret = m_pPlayer->MinusMoney( pCInfo->m_Money );
	ASSERT(ret);

	// 家南酒捞袍 力芭 : 俺荐 力芭
	Lose( pInventory, SocketItemPos, 1 );

	return RC::RC_ITEM_SUCCESS;
}

RC::eITEM_RESULT ItemManager::AddSocket( POSTYPE TargetPos )
{
	if( !IsPossibleFunction( eFUNCTIONALTYPE_ADDSOCKET ) )
		return RC::RC_ITEM_UNUSABLE_FUNCTION;

	return RC::RC_ITEM_SUCCESS;	
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -