cgmixitemhandler.cpp

来自「dk1游戏的原代码文件,完整.编译系统redhat7.3,mysql 3.23 」· C++ 代码 · 共 586 行 · 第 1/2 页

CPP
586
字号
				sendCannotUse( pPacket, pPlayer );				return;			}	}	GCAddItemToItemVerify gcVerify;	const list<OptionType_t>& oList1 = pTargetItem1->getOptionTypeList();	Assert( !oList1.empty() );	OptionType_t option1 = oList1.front();	OptionInfo* pOptionInfo1 = g_pOptionInfoManager->getOptionInfo( option1 );	const list<OptionType_t>& oList2 = pTargetItem2->getOptionTypeList();	Assert( !oList2.empty() );	OptionType_t option2 = oList2.front();	OptionInfo* pOptionInfo2 = g_pOptionInfoManager->getOptionInfo( option2 );	if ( g_pOptionInfoManager->getOptionClassInfo( pOptionInfo1->getClass() )->getOptionGroup() ==		 g_pOptionInfoManager->getOptionClassInfo( pOptionInfo2->getClass() )->getOptionGroup() )	{//		sendCannotUse(pPacket, pPlayer);		gcVerify.setCode(ADD_ITEM_TO_ITEM_VERIFY_MIXING_FAILED_SAME_OPTION_GROUP);		pPlayer->sendPacket(&gcVerify);		return;	}	pTargetItem1->addOptionType( option2 );	// pTargetItem1 捞唱 pTargetItem2 吝 窍唱扼档 巢扁绰 芭搁 父甸绢瘤绰 巴档 巢变促	pTargetItem1->setTraceItem(pTargetItem1->isTraceItem() || pTargetItem2->isTraceItem() );	pTargetItem1->setGrade( TargetGrade );	string optionfield = "";	setOptionTypeToField( pTargetItem1->getOptionTypeList(), optionfield );	char query[100];	if ( TargetGrade == -1 )		sprintf( query, "OptionType='%s'", optionfield.c_str() );	else		sprintf( query, "OptionType='%s', Grade=%d", optionfield.c_str(), pTargetItem1->getGrade() );	pTargetItem1->tinysave(query);	sprintf( query, "%ld", pTargetItem1->getItemID() );	pInventory->deleteItem( pTargetItem2->getObjectID() );	if ( pTargetItem2->isTraceItem() )	{		remainTraceLog( pTargetItem2, pPC->getName(), query, ITEM_LOG_DELETE, DETAIL_ENCHANT );	}	pTargetItem2->destroy();	SAFE_DELETE( pTargetItem2 );	if ( pItem->isTraceItem() )	{		remainTraceLog( pItem, pPC->getName(), "Mixing Forge", ITEM_LOG_DELETE, DETAIL_ENCHANT );	}	if ( isStackable(pItem) )	{		decreaseItemNum( pItem, pInventory, pCreature->getName(), STORAGE_INVENTORY, 0, InvenX, InvenY);	}	else 	{		pInventory->deleteItem( pItem->getObjectID() );		pItem->destroy();		SAFE_DELETE( pItem );	}	gcVerify.setCode( ADD_ITEM_TO_ITEM_VERIFY_MIXING_OK );	uint param = 0;	param = ( ( ((int)option1) << 16 ) | option2 );	printf("Param:%x\n", param);	gcVerify.setParameter( param );	pPlayer->sendPacket( &gcVerify );	GCUseOK gcUseOK;	pPlayer->sendPacket(&gcUseOK);	__END_CATCH}void CGMixItemHandler::executeDetach(CGMixItem* pPacket, Player* pPlayer, Item* pItem) throw(Error){	__BEGIN_TRY	Assert(pPacket != NULL);	Assert(pPlayer != NULL);	GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer);	Assert(pGamePlayer != NULL);	Creature* pCreature = pGamePlayer->getCreature();	Assert(pCreature != NULL);	Assert(pCreature->isPC());	PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature);	Assert(pPC != NULL);	Inventory* pInventory = pPC->getInventory();	Zone*      pZone      = pPC->getZone();	Assert(pInventory != NULL);	Assert(pZone != NULL);	Item *pTargetItem = NULL;	CoordInven_t dummy;	pTargetItem = pInventory->findItemOID( pPacket->getTargetObjectID(0), dummy, dummy );	uint optionNo = (uint)pPacket->getTargetObjectID(1);	if ( pTargetItem == NULL || optionNo >= 2 || pItem->getNum() != 1)	{		sendCannotUse( pPacket, pPlayer );		return;	}	ItemInfo* pTargetInfo = g_pItemInfoManager->getItemInfo( pTargetItem->getItemClass(), pTargetItem->getItemType() );	if ( pTargetInfo->isUnique() || pTargetItem->isTimeLimitItem() || pTargetItem->getOptionTypeSize() != 2 )	{		sendCannotUse( pPacket, pPlayer );		return;	}	MixingItemInfo* pInfo = dynamic_cast<MixingItemInfo*>(g_pItemInfoManager->getItemInfo( pItem->getItemClass(), pItem->getItemType() ));	Assert( pInfo != NULL );	MixingItemInfo::Target target = pInfo->getTarget();	switch ( target )	{		case MixingItemInfo::MIXING_WEAPON:			{				if ( isSlayerWeapon( pTargetItem->getItemClass() ) ) 				{					if ( pTargetItem->getItemType() > pInfo->getSlayerLevel() )					{						sendCannotUse( pPacket, pPlayer );						return;					}				}				else if ( isVampireWeapon( pTargetItem->getItemClass() ) )				{					if ( pTargetItem->getItemType() > pInfo->getVampireLevel() )					{						sendCannotUse( pPacket, pPlayer );						return;					}				}				else if ( isOustersWeapon( pTargetItem->getItemClass() ) )				{					if ( pTargetItem->getItemType() > pInfo->getOustersLevel() )					{						sendCannotUse( pPacket, pPlayer );						return;					}				}				else				{					sendCannotUse( pPacket, pPlayer );					return;				}			}			break;		case MixingItemInfo::MIXING_ARMOR:			{				if ( isSlayerArmor( pTargetItem->getItemClass() ) ) 				{					if ( pTargetItem->getItemType() > pInfo->getSlayerLevel() )					{						sendCannotUse( pPacket, pPlayer );						return;					}				}				else if ( isVampireArmor( pTargetItem->getItemClass() ) )				{					if ( pTargetItem->getItemType() > pInfo->getVampireLevel() )					{						sendCannotUse( pPacket, pPlayer );						return;					}				}				else if ( isOustersArmor( pTargetItem->getItemClass() ) )				{					if ( pTargetItem->getItemType() > pInfo->getOustersLevel() )					{						sendCannotUse( pPacket, pPlayer );						return;					}				}				else				{					sendCannotUse( pPacket, pPlayer );					return;				}			}			break;		case MixingItemInfo::MIXING_ACCESSORY:			{				if ( isSlayerAccessory( pTargetItem->getItemClass() ) ) 				{					if ( pTargetItem->getItemType() > pInfo->getSlayerLevel() )					{						sendCannotUse( pPacket, pPlayer );						return;					}				}				else if ( isVampireAccessory( pTargetItem->getItemClass() ) )				{					if ( pTargetItem->getItemType() > pInfo->getVampireLevel() )					{						sendCannotUse( pPacket, pPlayer );						return;					}				}				else if ( isOustersAccessory( pTargetItem->getItemClass() ) )				{					if ( pTargetItem->getItemClass() != Item::ITEM_CLASS_OUSTERS_STONE && pTargetItem->getItemType() > pInfo->getOustersLevel() )//					if ( pTargetItem->getItemType() > pInfo->getOustersLevel() )					{						sendCannotUse( pPacket, pPlayer );						return;					}				}				else				{					sendCannotUse( pPacket, pPlayer );					return;				}			}			break;		default:			{				sendCannotUse( pPacket, pPlayer );				return;			}	}	list<OptionType_t> oList = pTargetItem->getOptionTypeList();	Assert( oList.size() == 2 );	// optionNo绰 0 酒聪搁 1捞促. (困俊辑 眉农沁促.)	if ( optionNo == 0 ) oList.pop_front(); else oList.pop_back();	pTargetItem->setOptionType( oList );	string optionfield = "";	setOptionTypeToField( pTargetItem->getOptionTypeList(), optionfield );	char query[100];	sprintf( query, "OptionType='%s'", optionfield.c_str() );	pTargetItem->tinysave(query);	pTargetItem->setTraceItem( bTraceLog( pTargetItem ) );//	pInventory->deleteItem( pItem->getObjectID() );	Assert( pItem == pPC->getExtraInventorySlotItem() );	// 可记 都郴绰 酒袍篮 付快胶 困俊 乐促. 绝澜富绊	pPC->deleteItemFromExtraInventorySlot();	if ( pItem->isTraceItem() )	{		remainTraceLog( pItem, pPC->getName(), "Furitas", ITEM_LOG_DELETE, DETAIL_ENCHANT );	}	pItem->destroy();	SAFE_DELETE( pItem );	GCAddItemToItemVerify gcVerify;	gcVerify.setCode( ADD_ITEM_TO_ITEM_VERIFY_DETACHING_OK );	OptionType_t finalOption = oList.front();	gcVerify.setParameter(finalOption);	pPlayer->sendPacket( &gcVerify );//	GCUseOK gcUseOK;//	pPlayer->sendPacket(&gcUseOK);	__END_CATCH}void sendCannotUse(CGMixItem* pPacket, Player* pPlayer){	GCCannotUse _GCCannotUse;	_GCCannotUse.setObjectID(pPacket->getObjectID());	pPlayer->sendPacket(&_GCCannotUse);	return;}#endif

⌨️ 快捷键说明

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