cgadditemtoitemhandler.cpp

来自「天之炼狱1服务器端源文件游戏服务端不完整」· C++ 代码 · 共 1,320 行 · 第 1/3 页

CPP
1,320
字号
						downgradeOptionType( pItem, currentOptionType, pOptionInfo );						OptionType_t previousOptionType = pOptionInfo->getPreviousType();						optionChange = (currentOptionType << (shiftValue+8)) | (previousOptionType << shiftValue);					}				}			}			else			{				impossibleCount ++;			}			shiftValue -= 16;		}*/		{			// 甸绊 乐绰 喊 昏力			pPC->deleteItemFromExtraInventorySlot();			// DB俊辑 昏力			pMouseItem->destroy();			// 皋葛府俊辑 昏力			SAFE_DELETE(pMouseItem);			// 搬苞 菩哦 焊郴扁			sendEnchantOK(pGamePlayer, optionChange);		}		__END_CATCH	}	void executeEnchantOption(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();		// Item狼 OptionInfo甫 掘绢柯促.		OptionType_t currentOptionType = //pItem->getFirstOptionType();										pItem->getRandomOptionType();		int optionSize = pItem->getOptionTypeSize();		// 角菩且 犬伏篮 itemType俊 狼秦辑 搬沥等促.		const ItemInfo* pItemInfo = g_pItemInfoManager->getItemInfo( 													pItem->getItemClass(), 													pItem->getItemType() );		// 牢忙飘 且妨绰 酒捞袍捞 公可捞芭唱		// 饭绢 酒捞袍捞芭唱		// 蜡聪农 酒捞袍牢 版快		if (optionSize!=1			|| pItemInfo->isUnique())		{			//cout << "no Option " << endl;			sendEnchantImpossible( pGamePlayer );			return;		}		OptionInfo* pOptionInfo = getOptionInfo( currentOptionType );		if (pOptionInfo==NULL)		{			sendEnchantImpossible( pGamePlayer );			return;		}		// 可记捞 咯矾俺牢 版快绰 阂啊瓷窍瘤绰 臼促绊 焊绊..		// 甸绊 乐绰 酒捞袍捞 嘎绰瘤 犬牢窍绊		// upgrade啊瓷茄 option牢 版快俊...		bool bUpgradePossible = pOptionInfo->isUpgradePossible();		if (optionSize>1 || bUpgradePossible)		{			//---------------------------------------------------------			// item俺荐啊 1俺牢 版快父 且 荐 乐档废 秦敌促.			// 咯矾俺牢 版快档 啊瓷窍霸 窍妨搁			// 酒捞袍 俺荐甫 临咯具摆瘤.. client档 荐沥秦具 茄促.			// upgrade 己傍且鳖?			//---------------------------------------------------------			// 可记犬伏 * 鸥蕾犬伏 / 10000			int succeedRatio = 0;			if ( pMouseItem->getItemType() == 15 )			{				// 喉风 靛酚 2~ 2003.5.11				succeedRatio = pOptionInfo->getUpgradeSecondRatio() * pItemInfo->getUpgradeRatio();			}			else			{				// 扁粮 牢忙飘 酒袍甸				succeedRatio = pOptionInfo->getUpgradeRatio() * pItemInfo->getUpgradeRatio();			}//			cout << "可记 " << pOptionInfo->getHName() << " 牢忙飘 犬伏 : " << succeedRatio << endl;						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;			// 可记捞 咯矾俺 嘿绢乐绰 版快俊 泅犁 瘤沥茄 可记捞 upgrade啊 阂啊瓷窍促搁 角菩肺 夯促.			// 困狼 if俊辑 optionSize>1 阑 眉农沁扁 锭巩俊.. bUpgradePossible牢 版快啊 酒聪搁,			// optionSize>1 捞扼绊 魄窜且 荐 乐促.			if (bUpgradePossible				&& pMouseItem->getNum()==1				&& bSucceed)			{//				cout << "牢忙飘 己傍" << endl;				processUpgradeOptionType( pItem, currentOptionType, pOptionInfo );				OptionType_t upgradeOptionType = pOptionInfo->getUpgradeType();				uint optionChange = (currentOptionType << 24) | (upgradeOptionType << 16);				sendEnchantOK( pGamePlayer, optionChange );				//cout << gcAddItemToItemVerify.toString().c_str() << endl;			}			//---------------------------------------------------------			// upgrade 角菩			//---------------------------------------------------------			else			{				//cout << "Failed!" << endl;				bool bCrashItem = pItemInfo->isUpgradeCrash();				// 角菩 packet : 酒捞袍捞 何辑瘤绰瘤 酒囱瘤 搬沥				GCAddItemToItemVerify gcAddItemToItemVerify;				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.setCode( ADD_ITEM_TO_ITEM_VERIFY_ENCHANT_FAIL_CRASH );					//cout << "Broken" << endl;				}				else				{					downgradeOptionType( pItem, currentOptionType, pOptionInfo );					OptionType_t previousOptionType = pOptionInfo->getPreviousType();					uint optionChange = (currentOptionType << 24) | (previousOptionType << 16);					gcAddItemToItemVerify.setCode( ADD_ITEM_TO_ITEM_VERIFY_ENCHANT_FAIL_DECREASE );					gcAddItemToItemVerify.setParameter( optionChange );				}				pGamePlayer->sendPacket( &gcAddItemToItemVerify );				//cout << "Upgrade Failed " << (bCrashItem? ": Crash!":" ") << endl;			}			// 甸绊 乐绰 喊 昏力			pPC->deleteItemFromExtraInventorySlot();			// DB俊辑 昏力			pMouseItem->destroy();			// 皋葛府俊辑 昏力			SAFE_DELETE(pMouseItem);		}		else		{			sendEnchantImpossible( pGamePlayer );			//cout << "upgrade impossible" << endl;		}		__END_CATCH	}	// 公可 酒捞袍俊 可记阑 眠啊矫挪促.	void executeAddOption(GamePlayer* pGamePlayer, Item* pMouseItem, Item* pItem, OptionType_t addOptionType)		throw (Error)	{		__BEGIN_TRY		Creature*  		pCreature   = pGamePlayer->getCreature();		PlayerCreature* pPC         = dynamic_cast<PlayerCreature*>(pCreature);		// 橇府固决 辑厚胶啊 酒囱 版快绰 救登瘤..		if (!pGamePlayer->isPayPlaying()			&& !pGamePlayer->isPremiumPlay())		{			//cout << "no Option " << endl;			GCAddItemToItemVerify gcAddItemToItemVerify;			gcAddItemToItemVerify.setCode( ADD_ITEM_TO_ITEM_VERIFY_ENCHANT_IMPOSSIBLE_NO_PREMIUM );			pGamePlayer->sendPacket( &gcAddItemToItemVerify );			return;		}		// 捞 努贰胶俊 嘿阑 荐 乐绰 可记努贰胶捞绊..		// 可记捞 绝绊		// 蜡聪农啊 酒聪绊		// 付快胶俊 茄俺父 甸绊 窍绰 版快俊 可记 眠啊啊 啊瓷窍促.		if (isPossibleOptionItemClass(pItem->getItemClass())			&& pItem->getOptionTypeSize()==0 			&& !pItem->isUnique()			&& pMouseItem->getNum()==1)		{			// 可记 函版			pItem->addOptionType( addOptionType );						string optionField;			setOptionTypeToField( pItem->getOptionTypeList(), optionField );			// DB函版			char pField[80];			sprintf(pField, "OptionType='%s'", optionField.c_str());			pItem->tinysave(pField);			uint optionChange = addOptionType;			// 甸绊 乐绰 喊 昏力			pPC->deleteItemFromExtraInventorySlot();			pMouseItem->destroy(); 					// DB俊辑 昏力			SAFE_DELETE(pMouseItem); 				// 皋葛府俊辑 昏力			// 己傍packet : upgrade瞪 option阑 持绢霖促.			GCAddItemToItemVerify gcAddItemToItemVerify;			gcAddItemToItemVerify.setCode( ADD_ITEM_TO_ITEM_VERIFY_ENCHANT_OK );			gcAddItemToItemVerify.setParameter( optionChange );			pGamePlayer->sendPacket( &gcAddItemToItemVerify );			//cout << gcAddItemToItemVerify.toString().c_str() << endl;		}		else		{			//cout << "Enchant Impossible" << endl;			//cout << "impossibleOption : " << (int)currentOptionType << endl;			// upgrade 且 荐 绝绰 option捞促.			// 阂啊 packet			GCAddItemToItemVerify gcAddItemToItemVerify;			gcAddItemToItemVerify.setCode( ADD_ITEM_TO_ITEM_VERIFY_ENCHANT_IMPOSSIBLE );			pGamePlayer->sendPacket( &gcAddItemToItemVerify );			//cout << "upgrade impossible" << endl;		}		__END_CATCH	}	void executeTransKit(GamePlayer* pGamePlayer, Item* pMouseItem, Item* pItem) throw(Error)	{		__BEGIN_TRY		GCAddItemToItemVerify gcResult;		uint optionChange;		ItemInfo* pItemInfo = g_pItemInfoManager->getItemInfo( pItem->getItemClass(), pItem->getItemType() );		if ( pItemInfo->getReqGender() == GENDER_BOTH || pItemInfo->getReqGender() == GENDER_MAX			|| pItemInfo->isUnique() 			|| pMouseItem->getNum() != 1 )		{			gcResult.setCode( ADD_ITEM_TO_ITEM_VERIFY_TRANS_IMPOSSIBLE );			pGamePlayer->sendPacket(&gcResult);			return;		}		ItemType_t newItemType = pItem->getItemType() ^ 1;		optionChange = ( pItem->getItemType() << 16 ) | newItemType;		pItem->setItemType( newItemType );		char query[50];		sprintf(query, "ItemType=%u", newItemType );		pItem->tinysave(query);		gcResult.setCode( ADD_ITEM_TO_ITEM_VERIFY_TRANS_OK );		gcResult.setParameter( optionChange );		pGamePlayer->sendPacket(&gcResult);		Creature*  		pCreature   = pGamePlayer->getCreature();		PlayerCreature* pPC         = dynamic_cast<PlayerCreature*>(pCreature);		pPC->deleteItemFromExtraInventorySlot();		pMouseItem->destroy();		SAFE_DELETE(pMouseItem);		__END_CATCH	}	OptionInfo* getOptionInfo(OptionType_t optionType)	{		OptionInfo* pOptionInfo = NULL;		try {			pOptionInfo = g_pOptionInfoManager->getOptionInfo( optionType );			if (pOptionInfo==NULL)			{				filelog("optionError.txt", "CGAddItemToItemHandler: no option [%d]", optionType);				return NULL;			}		} catch (NoSuchElementException& t) {			filelog("optionError.txt", "CGAddItemToItemHandler: no option [%d]", optionType);			return NULL;		}		return pOptionInfo;	}	void	processUpgradeOptionType(					Item* pItem,					OptionType_t currentOptionType,					OptionInfo* pOptionInfo)		throw (Error)	{		__BEGIN_TRY		//cout << "Succeed!" << endl;		// upgrage瞪 option		OptionType_t upgradeOptionType = pOptionInfo->getUpgradeType();		// 可记 函版		pItem->changeOptionType( currentOptionType, upgradeOptionType );		//cout << "Succeed = " << getOptionTypeToString( pItem->getOptionTypeList() );				string optionField;		setOptionTypeToField( pItem->getOptionTypeList(), optionField );		//list<OptionType_t> op;		//setOptionTypeFromField( op, optionField );		//cout << "Check = " << getOptionTypeToString( op ) << endl;		// DB函版		char pField[80];		sprintf(pField, "OptionType='%s'", optionField.c_str());		pItem->tinysave(pField);		__END_CATCH	}	void	crashItem(Item* pItem, Inventory* pInventory, CoordInven_t invenX, CoordInven_t invenY)		throw (Error)	{		__BEGIN_TRY		// inventory俊辑 酒捞袍 力芭		pInventory->deleteItem( invenX, invenY );		// DB俊辑 力芭		pItem->destroy();		// 皋葛府俊辑 力芭		SAFE_DELETE(pItem);		__END_CATCH	}	void	downgradeOptionType(					Item* pItem,					OptionType_t currentOptionType,					OptionInfo* pOptionInfo)		throw (Error)	{		__BEGIN_TRY		// 酒捞袍狼 可记阑 茄窜拌 冻绢哆赴促.		OptionType_t previousOptionType = pOptionInfo->getPreviousType();		//cout << "FailBefore : " << getOptionTypeToString(pItem->getOptionTypeList()) << endl;		// 可记 函版		// 捞傈 可记捞 绝促搁 酒抗 可记阑 绝矩促.		if (previousOptionType==0)		{			pItem->removeOptionType( currentOptionType );			//cout << "Remove = " << getOptionTypeToString( pItem->getOptionTypeList() ) << endl;		}		else		{			pItem->changeOptionType( currentOptionType, previousOptionType );			//cout << "Down = " << getOptionTypeToString( pItem->getOptionTypeList() ) << endl;		}		// DB函版		string optionField;		setOptionTypeToField( pItem->getOptionTypeList(), optionField );		//cout << "FailAfter : " << getOptionTypeToString(pItem->getOptionTypeList()) << endl;		char pField[80];		sprintf(pField, "OptionType='%s'", optionField.c_str());		pItem->tinysave(pField);		__END_CATCH	}	void	sendEnchantImpossible(GamePlayer* pGamePlayer)		throw (Error)	{		__BEGIN_TRY		GCAddItemToItemVerify gcAddItemToItemVerify;		gcAddItemToItemVerify.setCode( ADD_ITEM_TO_ITEM_VERIFY_ENCHANT_IMPOSSIBLE );		pGamePlayer->sendPacket( &gcAddItemToItemVerify );		__END_CATCH	}	void	sendEnchantOK(GamePlayer* pGamePlayer, DWORD optionChange)		throw (Error)	{		__BEGIN_TRY		GCAddItemToItemVerify gcAddItemToItemVerify;		gcAddItemToItemVerify.setCode( ADD_ITEM_TO_ITEM_VERIFY_ENCHANT_OK );		gcAddItemToItemVerify.setParameter( optionChange );		pGamePlayer->sendPacket( &gcAddItemToItemVerify );		__END_CATCH	}#endif

⌨️ 快捷键说明

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