cguseitemfromgearhandler.cpp
来自「dk1游戏的原代码文件,完整.编译系统redhat7.3,mysql 3.23 」· C++ 代码 · 共 236 行
CPP
236 行
//////////////////////////////////////////////////////////////////////////////// Filename : CGUseItemFromGearHandler.cpp// Written By : // Description : //////////////////////////////////////////////////////////////////////////////#include "CGUseItemFromGear.h"#ifdef __GAME_SERVER__ #include "GamePlayer.h" #include "Zone.h" #include "Creature.h" #include "PlayerCreature.h" #include "Slayer.h" #include "Vampire.h" #include "Ousters.h" #include "Item.h" #include "ItemInfo.h" #include "ItemInfoManager.h" #include "ItemFactoryManager.h" #include "ItemUtil.h" #include "CreatureUtil.h" #include "PCFinder.h" #include "EffectLoveChain.h" #include "PKZoneInfoManager.h" #include <stdio.h> #include "VariableManager.h" #include "DB.h" #include "item/CoupleRingBase.h" #include "Gpackets/GCCannotUse.h" #include "Gpackets/GCUseOK.h" #include "SystemAvailabilitiesManager.h"#endif////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGUseItemFromGearHandler::execute(CGUseItemFromGear* pPacket, Player* pPlayer) throw (ProtocolException, Error){ __BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__ //cout << "CGUseItemFromGearHandler " << 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); Zone* pZone = pPC->getZone(); Assert(pZone != NULL); Item* pItem; if ( pCreature->isSlayer() ) { Slayer* pSlayer = dynamic_cast<Slayer*>(pPC); pItem = pSlayer->getWearItem( (Slayer::WearPart)(pPacket->getPart()) ); } else if ( pCreature->isVampire() ) { Vampire* pVampire = dynamic_cast<Vampire*>(pPC); pItem = pVampire->getWearItem( (Vampire::WearPart)(pPacket->getPart()) ); } else if ( pCreature->isOusters() ) { Ousters* pOusters = dynamic_cast<Ousters*>(pPC); pItem = pOusters->getWearItem( (Ousters::WearPart)(pPacket->getPart()) ); } else { Assert(false); } if ( pItem == NULL ) { GCCannotUse _GCCannotUse; _GCCannotUse.setObjectID(pPacket->getObjectID()); pGamePlayer->sendPacket(&_GCCannotUse); return; } ObjectID_t ItemObjectID = pItem->getObjectID(); // OID啊 老摹窍瘤 臼芭唱, 荤侩且 荐 绝绰 酒捞袍捞扼搁 俊矾促. if (ItemObjectID != pPacket->getObjectID() || !isUsableItem(pItem, pCreature)) { GCCannotUse _GCCannotUse; _GCCannotUse.setObjectID(pPacket->getObjectID()); pGamePlayer->sendPacket(&_GCCannotUse); return; } // 酒捞袍狼 辆幅俊 蝶扼, 贸府 窃荐甫 盒扁矫难 霖促. //cout << pItem->getItemClass() << endl; switch (pItem->getItemClass()) { case Item::ITEM_CLASS_COUPLE_RING: case Item::ITEM_CLASS_VAMPIRE_COUPLE_RING: SYSTEM_ASSERT( SYSTEM_COUPLE ); executeCoupleRing(pPacket, pGamePlayer); break; default: Assert(false); break; }#endif __END_DEBUG_EX __END_CATCH}//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGUseItemFromGearHandler::executeCoupleRing(CGUseItemFromGear* pPacket, GamePlayer* pGamePlayer) throw (ProtocolException, Error){ __BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__ //cout << pPacket->toString().c_str() << endl; Assert(pPacket != NULL); Assert(pGamePlayer != NULL); // 惑困 窃荐俊辑 俊矾 眉农甫 腹捞 沁扁 锭巩俊, // 俊矾 眉农甫 措气 绵家茄促. Creature* pCreature = pGamePlayer->getCreature(); PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature); CoupleRingBase* pCoupleRing = NULL; Zone* pZone = pPC->getZone(); Assert( pZone != NULL ); if ( pCreature->isSlayer() ) { Slayer* pSlayer = dynamic_cast<Slayer*>(pPC); pCoupleRing = dynamic_cast<CoupleRingBase*>(pSlayer->getWearItem( (Slayer::WearPart)(pPacket->getPart()) )); } else if ( pCreature->isVampire() ) { Vampire* pVampire = dynamic_cast<Vampire*>(pPC); pCoupleRing = dynamic_cast<CoupleRingBase*>(pVampire->getWearItem( (Vampire::WearPart)(pPacket->getPart()) )); } else { Assert(false); } if ( pCreature->isFlag( Effect::EFFECT_CLASS_HAS_FLAG ) || pCreature->isFlag( Effect::EFFECT_CLASS_HAS_SWEEPER) ) return; Assert( pCoupleRing != NULL ); string targetName = pCoupleRing->getName(); Creature* pTargetCreature = NULL; bool bValidZone = false; // trace 窍绰 何盒 __ENTER_CRITICAL_SECTION((*g_pPCFinder)) pTargetCreature = g_pPCFinder->getCreature_LOCKED(targetName); if (pTargetCreature==NULL) { GCCannotUse _GCCannotUse; _GCCannotUse.setObjectID(pPacket->getObjectID()); pGamePlayer->sendPacket(&_GCCannotUse); g_pPCFinder->unlock(); return; } Zone* pTargetZone = pTargetCreature->getZone(); if ( pTargetZone != NULL ) { // 具傈荤飞何, 矫寇胞瘤开, 捞亥飘版扁厘, 捞亥飘OX 粮, 付胶磐饭绢, 己瘤, PK粮栏肺绰 哎 荐 绝促. bValidZone = pTargetZone->getZoneID() != 2101 && pTargetZone->getZoneID() != 2102 && pTargetZone->getZoneID() != 1005 && pTargetZone->getZoneID() != 1006 && pTargetZone->getZoneID() != 1122 && pTargetZone->getZoneID() != 1131 && pTargetZone->getZoneID() != 1132 && pTargetZone->getZoneID() != 1133 && pTargetZone->getZoneID() != 1134 && !pTargetZone->isMasterLair() && !pTargetZone->isHolyLand() && !pTargetZone->isCastle() && !g_pPKZoneInfoManager->isPKZone( pTargetZone->getZoneID() ); } __LEAVE_CRITICAL_SECTION((*g_pPCFinder)) // 哎 荐 绝绰 镑捞扼搁 角菩促. if ( !bValidZone ) { GCCannotUse _GCCannotUse; _GCCannotUse.setObjectID(pPacket->getObjectID()); pGamePlayer->sendPacket(&_GCCannotUse); return; } // 10 檬 悼救 框流老 荐 绝档废 捞棋飘甫 嘿牢促. EffectLoveChain* pEffect= new EffectLoveChain(pPC); pEffect->setItemObjectID( pPacket->getObjectID() ); pEffect->setDeadline(100); pEffect->setTargetName( targetName ); pEffect->setZone( pZone ); ObjectRegistry & objectregister = pZone->getObjectRegistry(); objectregister.registerObject(pEffect); pZone->addEffect(pEffect); pPC->setFlag(Effect::EFFECT_CLASS_LOVE_CHAIN); GCUseOK gcUseOK; gcUseOK.addShortData(MODIFY_EFFECT_STAT, Effect::EFFECT_CLASS_LOVE_CHAIN); pGamePlayer->sendPacket( &gcUseOK );#endif __END_DEBUG_EX __END_CATCH}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?