cgadditemtoitemhandler.cpp
来自「天之炼狱1服务器端源文件游戏服务端不完整」· 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 + -
显示快捷键?