cgmixitemhandler.cpp
来自「dk1游戏的原代码文件,完整.编译系统redhat7.3,mysql 3.23 」· C++ 代码 · 共 586 行 · 第 1/2 页
CPP
586 行
//////////////////////////////////////////////////////////////////////////////// Filename : CGMixItemHandler.cpp// Written By : elca@ewestsoft.com// Description : //////////////////////////////////////////////////////////////////////////////#include "CGMixItem.h"#ifdef __GAME_SERVER__#include <cstdio>#include "GamePlayer.h"#include "Inventory.h"#include "PlayerCreature.h"#include "Item.h"#include "MixingItem.h"#include "ItemUtil.h"#include "ItemInfoManager.h"#include "OptionInfo.h"#include "Gpackets/GCCannotUse.h"#include "Gpackets/GCUseOK.h"#include "Gpackets/GCAddItemToItemVerify.h"void sendCannotUse(CGMixItem* pPacket, Player* pPlayer);#endif////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGMixItemHandler::execute(CGMixItem* pPacket, Player* pPlayer) throw (ProtocolException, Error){ __BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__ ////cout << "CGMixItemHandler " << endl; 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); CoordInven_t InvenX = pPacket->getX(); CoordInven_t InvenY = pPacket->getY(); //cout << "菩哦朝扼咳 : " << pPacket->toString() << endl; // 牢亥配府 谅钎甫 逞绢啊绰 康开捞扼搁 救 等促. if (InvenX >= pInventory->getWidth() || InvenY >= pInventory->getHeight()) { sendCannotUse( pPacket, pPlayer ); return; } Item* pItem = pPC->findItemOID( pPacket->getObjectID() );// // 牢亥配府俊 弊 酒捞袍捞 绝促搁 俊矾促.// Item* pItem = pInventory->getItem(InvenX, InvenY); if (pItem == NULL) { sendCannotUse( pPacket, pPlayer ); return; } // 牢亥配府俊 乐绰 酒捞袍狼 Object甫 罐绰促.// ObjectID_t ItemObjectID = pItem->getObjectID(); // OID啊 老摹窍瘤 臼芭唱, 荤侩且 荐 绝绰 酒捞袍捞扼搁 俊矾促.// if (ItemObjectID != pPacket->getObjectID())// {// //cout << "酒袍 荤侩 阂啊. 可璃飘 酒叼啊 救 嘎带啊..." << endl;// sendCannotUse( pPacket, pPlayer );// return;// } // 雇教 器瘤啊 酒聪搁 救等促 -_- if ( pItem->getItemClass() != Item::ITEM_CLASS_MIXING_ITEM ) { sendCannotUse( pPacket, pPlayer ); return; } MixingItemInfo* pInfo = dynamic_cast<MixingItemInfo*>(g_pItemInfoManager->getItemInfo( pItem->getItemClass(), pItem->getItemType() )); Assert( pInfo != NULL ); switch ( pInfo->getType() ) { case MixingItemInfo::TYPE_MIX: { Item* pTempItem = pInventory->getItem(InvenX, InvenY); if ( pTempItem == NULL || pTempItem->getObjectID() != pItem->getObjectID() ) { sendCannotUse( pPacket, pPlayer ); return; } executeMix( pPacket, pPlayer, pItem ); } break; case MixingItemInfo::TYPE_DETACH: executeDetach( pPacket, pPlayer, pItem ); break; default: sendCannotUse( pPacket, pPlayer ); break; }#endif __END_DEBUG_EX __END_CATCH}#ifdef __GAME_SERVER__void CGMixItemHandler::executeMix(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(); CoordInven_t InvenX = pPacket->getX(); CoordInven_t InvenY = pPacket->getY(); Assert(pInventory != NULL); Assert(pZone != NULL); Item *pTargetItem1 = NULL; Item *pTargetItem2 = NULL; CoordInven_t dummy; pTargetItem1 = pInventory->findItemOID( pPacket->getTargetObjectID(0), dummy, dummy ); pTargetItem2 = pInventory->findItemOID( pPacket->getTargetObjectID(1), dummy, dummy ); if ( pTargetItem1 == NULL || pTargetItem2 == NULL ) { sendCannotUse( pPacket, pPlayer ); return; } ItemInfo* pInfo1 = g_pItemInfoManager->getItemInfo( pTargetItem1->getItemClass(), pTargetItem1->getItemType() ); int GradeDiff = pTargetItem1->getGrade() - pTargetItem2->getGrade(); Grade_t TargetGrade = ( pTargetItem1->getGrade() > pTargetItem2->getGrade() )?pTargetItem1->getGrade():pTargetItem2->getGrade(); if ( pTargetItem1->getItemClass() != pTargetItem2->getItemClass() || pTargetItem1->getItemType() != pTargetItem2->getItemType() || pTargetItem1->getOptionTypeSize() != 1 || pTargetItem2->getOptionTypeSize() != 1 || pTargetItem1->isTimeLimitItem() || pTargetItem2->isTimeLimitItem() || pInfo1->isUnique() || GradeDiff < -2 || GradeDiff > 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( pTargetItem1->getItemClass() ) ) { if ( pTargetItem1->getItemType() > pInfo->getSlayerLevel() ) { sendCannotUse( pPacket, pPlayer ); return; } } else if ( isVampireWeapon( pTargetItem1->getItemClass() ) ) { if ( pTargetItem1->getItemType() > pInfo->getVampireLevel() ) { sendCannotUse( pPacket, pPlayer ); return; } } else if ( isOustersWeapon( pTargetItem1->getItemClass() ) ) { if ( pTargetItem1->getItemType() > pInfo->getOustersLevel() ) { sendCannotUse( pPacket, pPlayer ); return; } } else { sendCannotUse( pPacket, pPlayer ); return; } } break; case MixingItemInfo::MIXING_ARMOR: { if ( isSlayerArmor( pTargetItem1->getItemClass() ) ) { if ( pTargetItem1->getItemType() > pInfo->getSlayerLevel() ) { sendCannotUse( pPacket, pPlayer ); return; } } else if ( isVampireArmor( pTargetItem1->getItemClass() ) ) { if ( pTargetItem1->getItemType() > pInfo->getVampireLevel() ) { sendCannotUse( pPacket, pPlayer ); return; } } else if ( isOustersArmor( pTargetItem1->getItemClass() ) ) { if ( pTargetItem1->getItemType() > pInfo->getOustersLevel() ) { sendCannotUse( pPacket, pPlayer ); return; } } else { sendCannotUse( pPacket, pPlayer ); return; } } break; case MixingItemInfo::MIXING_ACCESSORY: { if ( isSlayerAccessory( pTargetItem1->getItemClass() ) ) { if ( pTargetItem1->getItemType() > pInfo->getSlayerLevel() ) { sendCannotUse( pPacket, pPlayer ); return; } } else if ( isVampireAccessory( pTargetItem1->getItemClass() ) ) { if ( pTargetItem1->getItemType() > pInfo->getVampireLevel() ) { sendCannotUse( pPacket, pPlayer ); return; } } else if ( isOustersAccessory( pTargetItem1->getItemClass() ) ) { if ( pTargetItem1->getItemClass() != Item::ITEM_CLASS_OUSTERS_STONE && pTargetItem1->getItemType() > pInfo->getOustersLevel() ) { sendCannotUse( pPacket, pPlayer ); return; } } else { sendCannotUse( pPacket, pPlayer ); return; } } break; default: {
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?