cgaddmousetozonehandler.cpp

来自「dk1游戏的原代码文件,完整.编译系统redhat7.3,mysql 3.23 」· 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 + -
显示快捷键?