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 + -
显示快捷键?