cgusemessageitemfrominventoryhandler.cpp
来自「天之炼狱1服务器端源文件游戏服务端不完整」· C++ 代码 · 共 247 行
CPP
247 行
//////////////////////////////////////////////////////////////////////////////// Filename : CGUseMessageItemFromInventoryHandler.cpp// Written By : elca@ewestsoft.com// Description : //////////////////////////////////////////////////////////////////////////////#include "CGUseMessageItemFromInventory.h"#ifdef __GAME_SERVER__ #include "GamePlayer.h" #include "Zone.h" #include "PlayerCreature.h" #include "Slayer.h" #include "Vampire.h" #include "MonsterCorpse.h" #include "Inventory.h" #include "Item.h" #include "ItemInfo.h" #include "ItemInfoManager.h" #include "ItemUtil.h" #include "CreatureUtil.h" #include "ZoneUtil.h" #include "VariableManager.h" #include "CastleInfoManager.h" #include "DB.h" #include "Gpackets/GCCannotUse.h" #include "Gpackets/GCUseOK.h"#endif////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGUseMessageItemFromInventoryHandler::execute(CGUseMessageItemFromInventory* pPacket, Player* pPlayer) throw (ProtocolException, Error){ __BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__ 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(); // 牢亥配府 谅钎甫 逞绢啊绰 康开捞扼搁 救 等促. if (InvenX >= pInventory->getWidth() || InvenY >= pInventory->getHeight()) { GCCannotUse _GCCannotUse; _GCCannotUse.setObjectID(pPacket->getObjectID()); pGamePlayer->sendPacket(&_GCCannotUse); return; } // 牢亥配府俊 弊 酒捞袍捞 绝促搁 俊矾促. Item* pItem = pInventory->getItem(InvenX, InvenY); if (pItem == NULL) { GCCannotUse _GCCannotUse; _GCCannotUse.setObjectID(pPacket->getObjectID()); pGamePlayer->sendPacket(&_GCCannotUse); return; } // 牢亥配府俊 乐绰 酒捞袍狼 Object甫 罐绰促. ObjectID_t ItemObjectID = pItem->getObjectID(); // OID啊 老摹窍瘤 臼芭唱, 荤侩且 荐 绝绰 酒捞袍捞扼搁 俊矾促. if (ItemObjectID != pPacket->getObjectID() || !isUsableItem(pItem, pCreature)) { GCCannotUse _GCCannotUse; _GCCannotUse.setObjectID(pPacket->getObjectID()); pGamePlayer->sendPacket(&_GCCannotUse); return; } // 酒捞袍狼 辆幅俊 蝶扼, 贸府 窃荐甫 盒扁矫难 霖促. switch (pItem->getItemClass()) { case Item::ITEM_CLASS_EVENT_TREE: executeEventTree(pPacket, pPlayer); break; default: { //Assert(false); // by sigi. 2002.12.25 filelog("useItemError.txt", "[CGUseMessageItemFromInventory] No Such ItemClassHandler=%s, owner=%s", ItemClass2ShortString[pItem->getItemClass()].c_str(), pCreature->getName().c_str()); GCCannotUse _GCCannotUse; _GCCannotUse.setObjectID(pPacket->getObjectID()); pGamePlayer->sendPacket(&_GCCannotUse); } return; }#endif __END_DEBUG_EX __END_CATCH}void CGUseMessageItemFromInventoryHandler::executeEventTree(CGUseMessageItemFromInventory* pPacket, Player* pPlayer) throw(ProtocolException, Error){ __BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__ Assert(pPacket != NULL); Assert(pPlayer != NULL); // 惑困 窃荐俊辑 俊矾 眉农甫 腹捞 沁扁 锭巩俊, // 俊矾 眉农甫 措气 绵家茄促. GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer); Creature* pCreature = pGamePlayer->getCreature(); PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature); Inventory* pInventory = pPC->getInventory(); Zone* pZone = pPC->getZone(); CoordInven_t InvenX = pPacket->getX(); CoordInven_t InvenY = pPacket->getY(); Item* pItem = pInventory->getItem(InvenX, InvenY); ObjectID_t ItemObjectID = pItem->getObjectID(); MonsterType_t MType = 0; int time = 0; switch ( pItem->getItemType() ) { case 12: MType = 482; time = g_pVariableManager->getVariable( CHRISTMAS_TREE_DECAY_TIME ) / 10; break; case 26: MType = 650; time = 21600; break; case 27: MType = 650; time = 43200; break; case 28: MType = 650; time = 86400; break; default: { filelog("EventTree.log", "捞惑茄 酒袍阑 借促. : %s 啊 %d", pPC->getName().c_str(), pItem->getItemType() ); GCCannotUse _GCCannotUse; _GCCannotUse.setObjectID(pPacket->getObjectID()); pGamePlayer->sendPacket(&_GCCannotUse); } return; } // 鸥老俊 胶懦阑 静绰 巴捞扼绊 焊绊 镜 荐 乐绰瘤甫 眉农茄促. // 救傈瘤措俊辑绰 荤侩且 荐 绝促. // 镜 荐 乐绰 酒捞袍 鸥涝牢瘤 课牢茄促. ItemType 捞 12牢 巴父 荤侩且 荐 乐促. // 辟贸俊(敲饭捞绢 林困狼 5x5鸥老 捞郴) 促弗 飘府啊 乐促搁 荤侩且 荐 绝促. if ( !isAbleToUseTileSkill( pCreature ) || pZone->isMasterLair() || ItemObjectID != pPacket->getObjectID() || checkCorpse( pZone, MType, pPC->getX() - 2, pPC->getY() - 2, pPC->getX() + 2, pPC->getY() + 2 ) ) { GCCannotUse _GCCannotUse; _GCCannotUse.setObjectID(pPacket->getObjectID()); pGamePlayer->sendPacket(&_GCCannotUse); return; } // 己捞搁 己林 辨靛盔父 镜 荐 乐促. if ( !pPC->isGOD() ) { if ( pZone->isCastle() ) { if ( !g_pCastleInfoManager->isCastleMember( pZone->getZoneID(), pPC ) ) { GCCannotUse _GCCannotUse; _GCCannotUse.setObjectID(pPacket->getObjectID()); pGamePlayer->sendPacket(&_GCCannotUse); return; } } // 己捞 酒囱 镑狼 救傈瘤措俊急 例措 给 敬促. else if (pZone->getZoneLevel(pCreature->getX(), pCreature->getY()) & SAFE_ZONE) { GCCannotUse _GCCannotUse; _GCCannotUse.setObjectID(pPacket->getObjectID()); pGamePlayer->sendPacket(&_GCCannotUse); return; } }/* // 飘府甫 粮俊 眠啊茄促. (飘府绰 阁胶磐 矫眉甫 捞侩茄促) MonsterCorpse* pMonsterCorpse = new MonsterCorpse( 482, pPacket->getMessage(), 2 ); Assert(pMonsterCorpse!=NULL); pZone->getObjectRegistry().registerObject( pMonsterCorpse ); // 积己等 矫眉甫 粮俊 眠啊茄促. int delayTime = g_pVariableManager->getVariable( CHRISTMAS_TREE_DECAY_TIME ); // by sigi. 2002.12.17 TPOINT pt = pZone->addItem( pMonsterCorpse, pPC->getX(), pPC->getY(), true, delayTime ); // 6矫埃 第俊 飘府(矫眉)啊 荤扼柳促. if (pt.x == -1)*/ if ( !createBulletinBoard( pZone, pPC->getX(), pPC->getY(), MType, pPacket->getMessage(), VSDateTime::currentDateTime().addSecs( time ) ) ) { GCCannotUse _GCCannotUse; _GCCannotUse.setObjectID(pPacket->getObjectID()); pGamePlayer->sendPacket(&_GCCannotUse); return; } // 荤侩茄 酒捞袍捞骨肺 瘤况霖促. pInventory->deleteItem(InvenX, InvenY); pItem->destroy(); SAFE_DELETE( pItem ); // 酒捞袍阑 荤侩沁促绊 努扼捞攫飘俊 舅赴促. GCUseOK gcUseOK; pGamePlayer->sendPacket( &gcUseOK ); //pZone->broadcastPacket( pCreature->getX(), pCreature->getY(), &gcAddEffectToTile );#endif __END_DEBUG_EX __END_CATCH}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?