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