cgadditemtoitemhandler.cpp

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

CPP
1,320
字号
						pGamePlayer->sendPacket( &gcCI );						if ( summonPet )						{							pPC->setPetInfo( pPetInfo );							sendPetInfo( pGamePlayer );						}					}					break;					default:					{						GCAddItemToItemVerify gcAddItemToItemVerify;						gcAddItemToItemVerify.setCode( ADD_ITEM_TO_ITEM_VERIFY_ERROR );						pGamePlayer->sendPacket( &gcAddItemToItemVerify );						return;					}				}			}			break;			case Item::ITEM_CLASS_MIXING_ITEM :			{				if ( pItem->getItemClass() != Item::ITEM_CLASS_PET_ITEM )				{					//cout << "脐 酒捞袍俊促啊 茄霸 酒丛促." << endl;					GCAddItemToItemVerify gcAddItemToItemVerify;					gcAddItemToItemVerify.setCode( ADD_ITEM_TO_ITEM_VERIFY_ERROR );					pGamePlayer->sendPacket( &gcAddItemToItemVerify );					return;				}				MixingItemInfo* pItemInfo = dynamic_cast<MixingItemInfo*>(g_pMixingItemInfoManager->getItemInfo( pMouseItem->getItemType() ));				Assert( pItemInfo != NULL );				if ( pItemInfo->getType() != MixingItemInfo::TYPE_DETACH )				{					//cout << "脐 酒捞袍俊促啊 茄霸 酒丛促." << endl;					GCAddItemToItemVerify gcAddItemToItemVerify;					gcAddItemToItemVerify.setCode( ADD_ITEM_TO_ITEM_VERIFY_ERROR );					pGamePlayer->sendPacket( &gcAddItemToItemVerify );					return;				}				PetItem* pPetItem = dynamic_cast<PetItem*>(pItem);				PetInfo* pPetInfo = NULL;				if ( pPetItem == NULL || ( pPetInfo = pPetItem->getPetInfo() ) == NULL || pPetInfo->getPetOption() == 0 )				{					//cout << "脐 酒捞袍捞 酒聪芭唱 脐 酒捞袍俊 脐 惑怕啊 绝嚼聪促." << endl;					GCAddItemToItemVerify gcAddItemToItemVerify;					gcAddItemToItemVerify.setCode( ADD_ITEM_TO_ITEM_VERIFY_ERROR );					pGamePlayer->sendPacket( &gcAddItemToItemVerify );					return;				}				pPC->deleteItemFromExtraInventorySlot();				pMouseItem->destroy();				SAFE_DELETE( pMouseItem );				pPetInfo->setPetOption(0);				pPetItem->tinysave("PetOption=0");				GCAddItemToItemVerify gcAddItemToItemVerify;				gcAddItemToItemVerify.setCode( ADD_ITEM_TO_ITEM_VERIFY_ENCHANT_OK );				gcAddItemToItemVerify.setParameter(0);				pGamePlayer->sendPacket( &gcAddItemToItemVerify );				if ( pPC->getPetInfo() == pPetInfo )				{					//cout << "捞固 阂矾廉乐绢辑 菩哦 焊郴绰 吝涝聪促." << endl;					sendPetInfo( pGamePlayer, true );					pPC->initAllStatAndSend();				}				return;			}			break;			default:			{				//cout << "upgrade error" << endl;				GCAddItemToItemVerify gcAddItemToItemVerify;				gcAddItemToItemVerify.setCode( ADD_ITEM_TO_ITEM_VERIFY_ERROR );				pGamePlayer->sendPacket( &gcAddItemToItemVerify );				return;			}		}	}#endif	// __GAME_SERVER__			__END_DEBUG_EX __END_CATCH}#ifdef __GAME_SERVER__	void executeEnchantRareOption(GamePlayer* pGamePlayer, Item* pMouseItem, Item* pItem, CoordInven_t invenX, CoordInven_t invenY)		throw (Error)	{		__BEGIN_TRY		Creature*  		pCreature   = pGamePlayer->getCreature();		PlayerCreature* pPC         = dynamic_cast<PlayerCreature*>(pCreature);//		Inventory* 		pInventory  = pPC->getInventory();		// 角菩且 犬伏篮 itemType俊 狼秦辑 搬沥等促.		const ItemInfo* pItemInfo = g_pItemInfoManager->getItemInfo( 													pItem->getItemClass(), 													pItem->getItemType() );		// 牢忙飘 且妨绰 酒捞袍狼 泅犁 可记捞 2俺啊 酒聪芭唱		// 蜡聪农 酒捞袍牢 版快		// 趣篮 喊阑 2俺 捞惑 甸绊 牢忙飘且扼绊 且 锭		if (pItem->getOptionTypeSize()!=2			|| pItemInfo->isUnique()			|| pMouseItem->getNum() != 1		)		{			//cout << "no Option " << endl;			sendEnchantImpossible( pGamePlayer );			return;		}		bool bFirstSucceed = false;		uint optionChange = 0;		int  shiftValue = 16;		list<OptionType_t> optionList = pItem->getOptionTypeList();		list<OptionType_t>::const_iterator itr = optionList.begin();		OptionType_t firstOption = *itr++;		OptionType_t secondOption = *itr;		OptionInfo* pFirstOptionInfo = getOptionInfo( firstOption );		OptionInfo* pSecondOptionInfo = getOptionInfo( secondOption );		if ( pFirstOptionInfo == NULL || pSecondOptionInfo == NULL )		{			sendEnchantImpossible( pGamePlayer );			return;		}		bool bFirstUpgradePossible = pFirstOptionInfo->isUpgradePossible();		bool bSecondUpgradePossible = pSecondOptionInfo->isUpgradePossible();		if ( !bFirstUpgradePossible && !bSecondUpgradePossible )		{			sendEnchantImpossible( pGamePlayer );			return;		}		if ( bFirstUpgradePossible )		{			// 霉锅掳 可记狼 牢忙飘 犬伏篮 喉风靛酚 2狼 犬伏俊 蝶弗促.			int succeedRatio = pFirstOptionInfo->getUpgradeSecondRatio() * pItemInfo->getUpgradeRatio();			int dice = rand()%10000;			//cout << "霉锅掳 可记 : " << pFirstOptionInfo->getHName() << " 牢忙飘 犬伏 " << succeedRatio << endl;			if ( dice < succeedRatio )			{				//cout << "牢忙飘 己傍" << endl;				processUpgradeOptionType( pItem, firstOption, pFirstOptionInfo );				OptionType_t upgradeOptionType = pFirstOptionInfo->getUpgradeType();				optionChange = (firstOption << (shiftValue+8)) | (upgradeOptionType << shiftValue);				bFirstSucceed = true;			}			else			{				int noChangeRatio = 33;				int downgradeRatio = pItemInfo->getDowngradeRatio();				dice = rand() % 100;				//cout << "牢忙飘 酒袍 : " << pItemInfo->getName() << " 可记冻绢龙 犬伏 " << downgradeRatio << endl;				if ( dice < noChangeRatio )				{					// 函拳绝澜				}				else if ( dice < noChangeRatio + downgradeRatio )				{					// 可记冻绢咙					downgradeOptionType( pItem, firstOption, pFirstOptionInfo );					OptionType_t previousOptionType = pFirstOptionInfo->getPreviousType();					optionChange = (firstOption << (shiftValue+8)) | (previousOptionType << shiftValue);				}				else				{					// 可记绝绢咙					pItem->removeOptionType( firstOption );					optionChange = (firstOption << (shiftValue+8));					// DB函版					string optionField;					setOptionTypeToField( pItem->getOptionTypeList(), optionField );					char pField[80];					sprintf(pField, "OptionType='%s'", optionField.c_str());					pItem->tinysave(pField);				}			}		}		else		{			OptionType_t prev = pFirstOptionInfo->getPreviousType();			if ( prev != 0 )			{				//可记冻绢龙 犬伏 拌魂秦具 等促.				int noChangeRatio = 33;				int downgradeRatio = pItemInfo->getDowngradeRatio();				int dice = rand() % 100;				//cout << "霉锅掳 可记 : " << pFirstOptionInfo->getHName() << " 可 冻绢龙 犬伏 : " << downgradeRatio << endl;				if ( dice < noChangeRatio )				{					// 函拳绝澜				}				else if ( dice < noChangeRatio + downgradeRatio )				{					// 可记冻绢咙					downgradeOptionType( pItem, firstOption, pFirstOptionInfo );					OptionType_t previousOptionType = pFirstOptionInfo->getPreviousType();					optionChange = (firstOption << (shiftValue+8)) | (previousOptionType << shiftValue);				}				else				{					// 可记绝绢咙					pItem->removeOptionType( firstOption );					optionChange = (firstOption << (shiftValue+8));					// DB函版					string optionField;					setOptionTypeToField( pItem->getOptionTypeList(), optionField );					char pField[80];					sprintf(pField, "OptionType='%s'", optionField.c_str());					pItem->tinysave(pField);				}			}		}		shiftValue -= 16;		if ( bSecondUpgradePossible )		{			// 滴锅掳 可记狼 牢忙飘 犬伏篮 霉锅掳 可记狼 己傍咯何俊 蝶弗促.			int succeedRatio = g_pOptionInfoManager->getRareUpgradeRatio( secondOption, bFirstSucceed ) * pItemInfo->getUpgradeRatio();			int dice = rand() %10000;			//cout << "滴锅掳 可记 : " << pSecondOptionInfo->getHName() << " 牢忙飘 犬伏 " << succeedRatio << endl;			if ( dice < succeedRatio )			{				//cout << "牢忙飘 己傍" << endl;				processUpgradeOptionType( pItem, secondOption, pSecondOptionInfo );				OptionType_t upgradeOptionType = pSecondOptionInfo->getUpgradeType();				optionChange |= (secondOption << (shiftValue+8)) | (upgradeOptionType << shiftValue);				bFirstSucceed = true;			}			else			{				int noChangeRatio = 33;				int downgradeRatio = pItemInfo->getDowngradeRatio();				dice = rand() % 100;				//cout << "牢忙飘 酒袍 : " << pItemInfo->getName() << " 可记冻绢龙 犬伏 " << downgradeRatio << endl;				if ( dice < noChangeRatio )				{					// 函拳绝澜				}				else if ( dice < noChangeRatio + downgradeRatio )				{					// 可记冻绢咙					downgradeOptionType( pItem, secondOption, pSecondOptionInfo );					OptionType_t previousOptionType = pSecondOptionInfo->getPreviousType();					optionChange |= (secondOption << (shiftValue+8)) | (previousOptionType << shiftValue);				}				else				{					// 可记绝绢咙					pItem->removeOptionType( secondOption );					optionChange |= (secondOption << (shiftValue+8));					// DB函版					string optionField;					setOptionTypeToField( pItem->getOptionTypeList(), optionField );					char pField[80];					sprintf(pField, "OptionType='%s'", optionField.c_str());					pItem->tinysave(pField);				}			}		}		else		{			OptionType_t prev = pSecondOptionInfo->getPreviousType();			if ( prev != 0 )			{				//可记冻绢龙 犬伏 拌魂秦具 等促.				int noChangeRatio = 33;				int downgradeRatio = pItemInfo->getDowngradeRatio();				int dice = rand() % 100;				//cout << "滴锅掳 可记 : " << pSecondOptionInfo->getHName() << " 可 冻绢龙 犬伏 : " << downgradeRatio << endl;				if ( dice < noChangeRatio )				{					// 函拳绝澜				}				else if ( dice < noChangeRatio + downgradeRatio )				{					// 可记冻绢咙					downgradeOptionType( pItem, secondOption, pSecondOptionInfo );					OptionType_t previousOptionType = pSecondOptionInfo->getPreviousType();					optionChange |= (secondOption << (shiftValue+8)) | (previousOptionType << shiftValue);				}				else				{					// 可记绝绢咙					pItem->removeOptionType( secondOption );					optionChange |= (secondOption << (shiftValue+8));					// DB函版					string optionField;					setOptionTypeToField( pItem->getOptionTypeList(), optionField );					char pField[80];					sprintf(pField, "OptionType='%s'", optionField.c_str());					pItem->tinysave(pField);				}			}		}/*		// 可记捞 咯矾俺牢 版快绰 阂啊瓷窍瘤绰 臼促绊 焊绊..		// 甸绊 乐绰 酒捞袍捞 嘎绰瘤 犬牢窍绊		// upgrade啊瓷茄 option牢 版快俊...		//const list<OptionType_t>& optionList = pItem->getOptionTypeList();		// 汗荤秦辑 敬促.. 		list<OptionType_t>::const_iterator itr = optionList.begin();		for (; itr!=optionList.end(); itr++)		{			OptionType_t currentOptionType = *itr;			OptionInfo* pOptionInfo = getOptionInfo( currentOptionType );			if (pOptionInfo==NULL)			{				sendEnchantImpossible( pGamePlayer );				return;			}			bool bUpgradePossible = pOptionInfo->isUpgradePossible();			if (bUpgradePossible)			{				//---------------------------------------------------------				// item俺荐啊 1俺牢 版快父 且 荐 乐档废 秦敌促.				// 咯矾俺牢 版快档 啊瓷窍霸 窍妨搁				// 酒捞袍 俺荐甫 临咯具摆瘤.. client档 荐沥秦具 茄促.				// upgrade 己傍且鳖?				//---------------------------------------------------------				// 可记犬伏 * 鸥蕾犬伏 / 10000				//---------------------------------------------------------				// 霉锅掳 可记				//---------------------------------------------------------					// 霉锅掳 可记捞 己傍窍搁 滴锅掳 可记犬伏肺 拌魂茄促.				int upgradeRatio = (bFirstSucceed? pOptionInfo->getUpgradeSecondRatio() 												: pOptionInfo->getUpgradeRatio());				int succeedRatio = upgradeRatio * pItemInfo->getUpgradeRatio();								int dice = rand()%10000;				bool bSucceed = (dice < succeedRatio);				//cout << "EnchantCheck = " 				//	<< pOptionInfo->getUpgradeRatio() << " * "				//	<< pItemInfo->getUpgradeRatio() << " = "				//	<< succeedRatio << ", dice = " << dice << " , succeed=" << (int)bSucceed << endl;				//cout << "Before = " << getOptionTypeToString( pItem->getOptionTypeList() ) << endl;				//cout << "CurrentOptionType = " << (int)currentOptionType << endl;				if (pMouseItem->getNum()==1					&& bSucceed)				{					processUpgradeOptionType( pItem, currentOptionType, pOptionInfo );					OptionType_t upgradeOptionType = pOptionInfo->getUpgradeType();					optionChange = (currentOptionType << (shiftValue+8)) | (upgradeOptionType << shiftValue);					bFirstSucceed = true;					//cout << gcAddItemToItemVerify.toString().c_str() << endl;				}				//---------------------------------------------------------				// upgrade 角菩				//---------------------------------------------------------				else				{					//cout << "Failed!" << endl;					bool bCrashItem = pItemInfo->isUpgradeCrash();					if ( bCrashItem )					{						// 酒捞袍 何荐扁 傈俊 ItemTrace Log 巢扁磊 ぱ.ぱ; 						if ( pItem != NULL && pItem->isTraceItem() )						{							remainTraceLog( pItem, pCreature->getName(), "GOD", ITEM_LOG_DELETE, DETAIL_ENCHANT);						}						crashItem(pItem, pInventory, invenX, invenY);						GCAddItemToItemVerify gcAddItemToItemVerify;						gcAddItemToItemVerify.setCode( ADD_ITEM_TO_ITEM_VERIFY_ENCHANT_FAIL_CRASH );						pGamePlayer->sendPacket( &gcAddItemToItemVerify );						return;					}					else					{						// 困俊辑 list甫 reference肺 静搁 咯扁俊辑 可记捞 力芭瞪 荐 乐栏骨肺						// list iterator啊 促捞~瞪荐档 乐促.

⌨️ 快捷键说明

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