cgaddmousetozonehandler.cpp
来自「天之炼狱1服务器端源文件游戏服务端不完整」· C++ 代码 · 共 344 行
CPP
344 行
//////////////////////////////////////////////////////////////////////////////// Filename : CGAddMouseToZoneHandler.cc// Written By : elca@ewestsoft.com// Description ://////////////////////////////////////////////////////////////////////////////#include "CGAddMouseToZone.h"#ifdef __GAME_SERVER__ #include "GamePlayer.h" #include "Zone.h" #include "Slayer.h" #include "Vampire.h" #include "Ousters.h" #include "Inventory.h" #include "Item.h" #include "ItemInfo.h" #include "ItemUtil.h" #include "ItemInfoManager.h" #include "LogClient.h" #include "ZoneGroupManager.h" #include "StringStream.h" #include "CreatureUtil.h" #include "StringPool.h" #include "Relic.h" #include "RelicUtil.h" #include "ZoneInfoManager.h" #include "EffectHasSlayerRelic.h" #include "EffectHasVampireRelic.h" #include "EffectRelicLock.h" #include "EffectRelicPosition.h" #include "Belt.h" #include "Sweeper.h" #include "OustersArmsband.h" #include "Gpackets/GCAddNewItemToZone.h" #include "Gpackets/GCCannotAdd.h" #include "Gpackets/GCRemoveEffect.h" #include "Gpackets/GCSystemMessage.h" #include "Gpackets/GCDeleteObject.h" #include <stdio.h>#endif////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGAddMouseToZoneHandler::execute (CGAddMouseToZone* 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(); bool Success = false; //EffectHasRelic* pEffect = NULL; Zone* pZone = pCreature->getZone(); PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature); InventorySlot* pExtraInventorySlot = pPC->getExtraInventorySlot(); Item* pItem = pExtraInventorySlot->getItem(); if (pItem == NULL) { //throw ProtocolException("CGAddMouseToZoneHandler::execute() : 粮俊 冻绢哆府妨 窍绰 酒捞袍捞 粮犁窍瘤 臼嚼聪促."); GCCannotAdd _GCCannotAdd; _GCCannotAdd.setObjectID(pPacket->getObjectID()); pPlayer->sendPacket(&_GCCannotAdd); return; } if (pCreature->isSlayer()) { Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature); if (pSlayer->hasRideMotorcycle()) { GCCannotAdd _GCCannotAdd; _GCCannotAdd.setObjectID(pPacket->getObjectID()); pPlayer->sendPacket(&_GCCannotAdd); return; } } if (pCreature->isOusters()) { Ousters* pOusters = dynamic_cast<Ousters*>(pCreature); if (pOusters->isFlag(Effect::EFFECT_CLASS_SUMMON_SYLPH)) { GCCannotAdd _GCCannotAdd; _GCCannotAdd.setObjectID(pPacket->getObjectID()); pPlayer->sendPacket(&_GCCannotAdd); return; } } ObjectID_t ItemObjectID = pItem->getObjectID();/* if ( pItem->isQuestItem() ) { pPC->deleteItemFromExtraInventorySlot(); // ItemTrace 甫 巢变促 if ( pItem != NULL && pItem->isTraceItem() ) { remainTraceLog( pItem, pCreature->getName(), "DropQuestItem", ITEM_LOG_DELETE, DETAIL_DROP); } pItem->destroy(); SAFE_DELETE( pItem ); Success = true; }*/ if (ItemObjectID == pPacket->getObjectID() && canDropToZone( pPC, pItem ) ) { // Item阑 Zone俊 Access 茄促. // 老窜 磊脚狼 困摹俊 Item阑 冻绢 飘赴促. // 唱吝浚 酒捞袍捞 冻绢柳 Tile阑 茫酒具 茄促. // CREATE_TYPE_GAME牢 酒捞袍篮 10檬 饶 荤扼瘤霸 茄促. Turn_t decayTurn = 0; if (pItem->getCreateType()==Item::CREATE_TYPE_GAME) decayTurn = 100; TPOINT pt = pZone->addItem(pItem, pCreature->getX(), pCreature->getY(), true, decayTurn); if (pt.x != -1) { pItem->whenPCLost(pPC); //pItem->save("", STORAGE_ZONE, pZone->getZoneID(), pt.x, pt.y); // item历厘 弥利拳. by sigi. 2002.5.13 char pField[80]; sprintf(pField, "OwnerID='', Storage=%d, StorageID=%u, X=%d, Y=%d", (int)STORAGE_ZONE, pZone->getZoneID(), pt.x, pt.y); pItem->tinysave(pField); // belt老 版快 骇飘 救狼 酒捞袍甸档 葛滴 林牢捞 绝绢廉具 茄促. 2003.3.22 by Sequoia if ( pItem->getItemClass() == Item::ITEM_CLASS_BELT ) { sprintf(pField, "OwnerID=''"); Belt* pBelt = dynamic_cast<Belt*>( pItem ); Assert( pBelt != NULL ); Inventory* pBeltInventory = pBelt->getInventory(); PocketNum_t num = pBelt->getPocketCount(); for ( SlotID_t count = 0 ; count < num ; ++count ) { Item* pBeltItem = pBeltInventory->getItem( count, 0 ); if ( pBeltItem != NULL ) { pBeltItem->tinysave( pField ); } } } // 鞠胶龟靛老 版快 救狼 酒捞袍甸档 葛滴 林牢捞 绝绢廉具 茄促. 2003.3.22 by Sequoia if ( pItem->getItemClass() == Item::ITEM_CLASS_OUSTERS_ARMSBAND ) { sprintf(pField, "OwnerID=''"); OustersArmsband* pOustersArmsband = dynamic_cast<OustersArmsband*>( pItem ); Assert( pOustersArmsband != NULL ); Inventory* pOustersArmsbandInventory = pOustersArmsband->getInventory(); PocketNum_t num = pOustersArmsband->getPocketCount(); for ( SlotID_t count = 0 ; count < num ; ++count ) { Item* pOustersArmsbandItem = pOustersArmsbandInventory->getItem( count, 0 ); if ( pOustersArmsbandItem != NULL ) { pOustersArmsbandItem->tinysave( pField ); } } } pPC->deleteItemFromExtraInventorySlot(); if ( pItem->isFlagItem() ) { Effect* pEffect = pPC->findEffect(Effect::EFFECT_CLASS_HAS_FLAG); if ( pEffect != NULL ) pEffect->setDeadline(0); if (!pItem->isFlag( Effect::EFFECT_CLASS_RELIC_LOCK )) { EffectRelicLock* pLock = new EffectRelicLock(pItem); pLock->setDeadline( 10*10 ); // 10檬 pItem->setFlag( Effect::EFFECT_CLASS_RELIC_LOCK ); pItem->getEffectManager().addEffect( pLock ); } } if ( pItem->getItemClass() == Item::ITEM_CLASS_SWEEPER ) { Effect* pEffect = pPC->findEffect( Effect::EFFECT_CLASS_HAS_SWEEPER ); if ( pEffect != NULL ) pEffect->setDeadline(0); if (!pItem->isFlag( Effect::EFFECT_CLASS_RELIC_LOCK )) { EffectRelicLock* pLock = new EffectRelicLock(pItem); pLock->setDeadline( 10*10 ); // 10檬 pItem->setFlag( Effect::EFFECT_CLASS_RELIC_LOCK ); pItem->getEffectManager().addEffect( pLock ); } // 冻绢哆赴 吧 粮俊 谎妨霖促. char race[15]; if ( pCreature->isSlayer() ) { sprintf( race, g_pStringPool->c_str( STRID_SLAYER ) ); } else if ( pCreature->isVampire() ) { sprintf( race, g_pStringPool->c_str( STRID_VAMPIRE ) ); } else if ( pCreature->isOusters() ) { sprintf( race, g_pStringPool->c_str( STRID_OUSTERS ) ); } else { Assert(false); } const SweeperInfo* pSweeperInfo = dynamic_cast<SweeperInfo*>(g_pSweeperInfoManager->getItemInfo(pItem->getItemType())); char msg[100]; sprintf( msg , g_pStringPool->c_str( STRID_DROP_SWEEPER ) , pSweeperInfo->getName().c_str(), pCreature->getName().c_str(), race ); GCSystemMessage gcSystemMessage; gcSystemMessage.setMessage( msg ); pZone->broadcastPacket( &gcSystemMessage ); } // Relic 阑 官蹿俊 初绰 版快扼搁 Effect甫 绝局霖促. if ( isRelicItem( pItem )) { deleteRelicEffect( pPC, pItem ); // 茄悼救 林匡 荐 绝档废 捞棋飘甫 嘿牢促. if (!pItem->isFlag( Effect::EFFECT_CLASS_RELIC_LOCK )) { EffectRelicLock* pLock = new EffectRelicLock(pItem); pLock->setDeadline( 10*10 ); // 10檬 pItem->setFlag( Effect::EFFECT_CLASS_RELIC_LOCK ); pItem->getEffectManager().addEffect( pLock ); } else { // 扁粮俊波 茫酒辑 矫埃 疵妨霖促. } // Relic捞 冻绢柳 镑狼 沥焊甫 拼拼洒 舅妨林档废 茄促./* if (!pItem->isFlag( Effect::EFFECT_CLASS_RELIC_POSITION)) { EffectRelicPosition* pPosition = new EffectRelicPosition(pItem); pPosition->setNextTime(10); // 1檬 饶 皋技瘤 谎赴促. pPosition->setTick( 1*60*10 ); // 1盒付促 茄锅究 舅赴促. pPosition->setZoneID( pZone->getZoneID() ); pPosition->setX( pt.x ); pPosition->setY( pt.y ); pPosition->setPart( pItem->getItemType() ); pItem->setFlag( Effect::EFFECT_CLASS_RELIC_POSITION ); pItem->getEffectManager().addEffect( pPosition ); } else { // 扁粮俊波 茫酒辑 蔼阑 官层霖促. }*/ // 傈眉 荤侩磊俊霸 Relic 捞 冻绢脸促绰 皋矫瘤甫 焊辰促. /* ZoneInfo* pZoneInfo = g_pZoneInfoManager->getZoneInfo( pZone->getZoneID() ); Assert( pZoneInfo != NULL ); StringStream msg; msg << pRelicInfo->getName() << " 己拱捞 " << pZoneInfo->getFullName() << " ( " << pt.x << " , " << pt.y << " ) 俊 冻绢脸嚼聪促."; GCSystemMessage message; message.setMessage( msg.toString() ); g_pZoneGroupManager->broadcast( &message ); */ } log(LOG_DROP_ITEM, pCreature->getName(), "", pItem->toString()); // ItemTrace 甫 巢变促 if ( pItem != NULL && pItem->isTraceItem() ) { char zoneName[15]; sprintf(zoneName, "%4d%3d%3d", pZone->getZoneID(), pt.x, pt.y); remainTraceLog( pItem, pCreature->getName(), zoneName, ITEM_LOG_MOVE, DETAIL_DROP); } Success = true; if ( pItem->isQuestItem() || ( pItem->getItemClass()==Item::ITEM_CLASS_MOON_CARD && pItem->getItemType()==2 ) ) { // 涅胶飘 酒捞袍老 版快 官肺 瘤款促. // 官焊 努扼捞攫飘 锭巩俊 付快胶俊 乐绰芭 官肺 给 瘤款促. // 弊贰辑 捞犯霸 贸府茄促. pZone->deleteItem(pItem , pt.x, pt.y); GCDeleteObject gcDeleteObject; gcDeleteObject.setObjectID( pItem->getObjectID() ); pZone->broadcastPacket( pt.x, pt.y, &gcDeleteObject ); } } else { Success = false; } } // Adding阑 角菩窍看阑锭. if (!Success) { GCCannotAdd _GCCannotAdd; _GCCannotAdd.setObjectID(pPacket->getObjectID()); pPlayer->sendPacket(&_GCCannotAdd); }#endif // __GAME_SERVER__ __END_DEBUG_EX __END_CATCH}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?