cgtradepreparehandler.cpp

来自「dk1游戏的原代码文件,完整.编译系统redhat7.3,mysql 3.23 」· C++ 代码 · 共 270 行

CPP
270
字号
//////////////////////////////////////////////////////////////////////////////// Filename    : CGTradePrepareHandler.cpp// Written By  : excel96// Description : //////////////////////////////////////////////////////////////////////////////#include "CGTradePrepare.h"#ifdef __GAME_SERVER__	#include "GamePlayer.h"	#include "Slayer.h"	#include "Vampire.h"	#include "Ousters.h"	#include "TradeManager.h"	#include "ZoneUtil.h"	#include "StringStream.h"	#include "Gpackets/GCTradePrepare.h"	#include "Gpackets/GCTradeError.h"	#include "Gpackets/GCTradeVerify.h"#endif////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGTradePrepareHandler::execute (CGTradePrepare* pPacket , Player* pPlayer)	 throw (ProtocolException , Error){	__BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__	Assert(pPacket != NULL);	Assert(pPlayer != NULL);	ObjectID_t     TargetOID   = pPacket->getTargetObjectID();	BYTE           CODE        = pPacket->getCode();	GamePlayer*    pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer);	GCTradePrepare gcTradePrepare;	Creature* pSender = pGamePlayer->getCreature();	Assert(pSender != NULL);	Zone* pZone = pSender->getZone();	Assert(pZone != NULL);	TradeManager* pTradeManager = pZone->getTradeManager();	Assert(pTradeManager != NULL);	// 背券 惑措磊甫 粮俊辑 茫酒夯促.	Creature* pReceiver = NULL;	/*	try { pReceiver = pZone->getCreature(TargetOID); }	catch (NoSuchElementException) { pReceiver = NULL; }	*/	// NoSuch力芭. by sigi. 2002.5.2	pReceiver = pZone->getCreature(TargetOID);	// 背券阑 且 仇捞 粮犁窍瘤 臼绰促搁 寸楷洒 背券且 荐 绝促.	if (pReceiver == NULL)	{		pTradeManager->cancelTrade(pSender);		executeError(pPacket, pPlayer, GC_TRADE_ERROR_CODE_TARGET_NOT_EXIST);		return;	}	// 背券阑 且 仇苞 罐阑 仇狼 捞抚捞 鞍促搁, 溜 鞍篮 某腐捞扼搁 立加阑 肋扼滚赴促.	// 角力肺 捞繁 版快啊 惯积沁促. 掂倔 立加牢 巴 鞍篮单... 2002-03-04 辫己刮	if (pSender->getName() == pReceiver->getName())	{		StringStream msg;		msg << "CGTradePrepare : Error, Same Creature!!! Name[" << pSender->getName() << "]";		filelog("TradeError.log", "%s", msg.toString().c_str());		throw ProtocolException(msg.toString());	}	// 背券阑 且 仇捞 PC啊 酒聪芭唱, 辆练捞 促福促搁 背券阑 且 荐啊 绝促.	if (!pReceiver->isPC() || !isSameRace(pSender, pReceiver))	{		pTradeManager->cancelTrade(pSender);		executeError(pPacket, pPlayer, GC_TRADE_ERROR_CODE_RACE_DIFFER);		return;	}	// 笛 促 救傈 瘤措俊 乐绰瘤 眉农甫 茄促.	if (!isInSafeZone(pSender) || !isInSafeZone(pReceiver))	{		pTradeManager->cancelTrade(pSender);		executeError(pPacket, pPlayer, GC_TRADE_ERROR_CODE_NOT_SAFE);		return;	}	// 坷配官捞甫 鸥绊 乐促搁 俊矾促.	if (pSender->isSlayer() && pReceiver->isSlayer())	{		Slayer* pSlayer1 = dynamic_cast<Slayer*>(pSender);		Slayer* pSlayer2 = dynamic_cast<Slayer*>(pReceiver);		if (pSlayer1->hasRideMotorcycle() || pSlayer2->hasRideMotorcycle())		{			pTradeManager->cancelTrade(pSender);			executeError(pPacket, pPlayer, GC_TRADE_ERROR_CODE_MOTORCYCLE);			return;		}	}	if (pSender->isOusters() && pReceiver->isOusters())	{		Ousters* pOusters1 = dynamic_cast<Ousters*>(pSender);		Ousters* pOusters2 = dynamic_cast<Ousters*>(pReceiver);		if ( pOusters1->isFlag(Effect::EFFECT_CLASS_SUMMON_SYLPH)			|| pOusters2->isFlag(Effect::EFFECT_CLASS_SUMMON_SYLPH)		)		{			pTradeManager->cancelTrade(pSender);			executeError(pPacket, pPlayer, GC_TRADE_ERROR_CODE_MOTORCYCLE);			return;		}	}	TradeInfo* pInfo1          = pTradeManager->getTradeInfo(pSender->getName());	TradeInfo* pInfo2          = pTradeManager->getTradeInfo(pReceiver->getName());	Player*    pReceiverPlayer = pReceiver->getPlayer();	// A啊 B俊霸 背券阑 力老 贸澜 夸备沁促...	switch (CODE)	{		////////////////////////////////////////////////////////////		// A啊 B俊霸 背券阑 夸备沁栏骨肺,		// B俊霸 A啊 背券阑 夸备窍绊 乐促绰 荤角阑 舅妨霖促.		////////////////////////////////////////////////////////////		case CG_TRADE_PREPARE_CODE_REQUEST:			// 背券阑 夸备茄 仇捞 背券 吝捞扼搁... -_-			if (pInfo1 != NULL)			{				pTradeManager->cancelTrade(pSender);				executeError(pPacket, pPlayer, GC_TRADE_ERROR_CODE_ALREADY_TRADING);				return;			}			// 背券阑 夸备罐篮 仇捞 背券 吝捞扼搁,			// 官悔聪鳖 背券俊 览且 荐 绝促.			if (pInfo2 != NULL)			{				gcTradePrepare.setTargetObjectID(pPacket->getTargetObjectID());				gcTradePrepare.setCode(GC_TRADE_PREPARE_CODE_BUSY);				pPlayer->sendPacket(&gcTradePrepare);				return;			}			   			// 菩哦阑 焊郴霖促.			gcTradePrepare.setTargetObjectID(pSender->getObjectID());			gcTradePrepare.setCode(GC_TRADE_PREPARE_CODE_REQUEST);			pReceiverPlayer->sendPacket(&gcTradePrepare);			// 笛 促 背券 葛靛肺 甸绢艾栏骨肺, TradeInfo甫 积己秦 霖促.			pTradeManager->initTrade(pSender, pReceiver);			break;		////////////////////////////////////////////////////////////		////////////////////////////////////////////////////////////		case CG_TRADE_PREPARE_CODE_CANCEL:			// 背券 吝牢瘤甫 眉农茄促.			if (pTradeManager->isTrading(pSender, pReceiver))			{				gcTradePrepare.setTargetObjectID(pSender->getObjectID());				gcTradePrepare.setCode(GC_TRADE_PREPARE_CODE_CANCEL);				pReceiverPlayer->sendPacket(&gcTradePrepare);				// 背券阑 芭何沁栏骨肺, TradeInfo甫 昏力秦 霖促.				pTradeManager->cancelTrade(pSender, pReceiver);			}			else			{				executeError(pPacket, pPlayer, GC_TRADE_ERROR_CODE_NOT_TRADING);				return;			}			break;		////////////////////////////////////////////////////////////		// B啊 背券俊 览茄促绰 荤角阑 A俊霸 舅妨霖促.		////////////////////////////////////////////////////////////		case CG_TRADE_PREPARE_CODE_ACCEPT:			// 背券 吝牢瘤甫 眉农茄促.			if (pTradeManager->isTrading(pSender, pReceiver))			{				gcTradePrepare.setTargetObjectID(pSender->getObjectID());				gcTradePrepare.setCode(GC_TRADE_PREPARE_CODE_ACCEPT);				pReceiverPlayer->sendPacket(&gcTradePrepare);			}			else			{				executeError(pPacket, pPlayer, GC_TRADE_ERROR_CODE_NOT_TRADING);				return;			}			break;		////////////////////////////////////////////////////////////		// B啊 背券阑 芭何茄促绰 荤角阑 A俊霸 舅妨霖促.		////////////////////////////////////////////////////////////		case CG_TRADE_PREPARE_CODE_REJECT:			// 背券 吝牢瘤甫 眉农茄促.			if (pTradeManager->isTrading(pSender, pReceiver))			{				gcTradePrepare.setTargetObjectID(pSender->getObjectID());				gcTradePrepare.setCode(GC_TRADE_PREPARE_CODE_REJECT);				pReceiverPlayer->sendPacket(&gcTradePrepare);				// 背券阑 芭何沁栏骨肺, TradeInfo甫 昏力秦 霖促.				pTradeManager->cancelTrade(pSender, pReceiver);			}			else			{				executeError(pPacket, pPlayer, GC_TRADE_ERROR_CODE_NOT_TRADING);				return;			}			break;		////////////////////////////////////////////////////////////		// B啊 泅犁 背券俊 览且 荐 绝绰 惑怕(惑痢俊 乐绰 版快)扼绰 		// 巴阑 A俊霸 舅妨霖促. 		////////////////////////////////////////////////////////////		case CG_TRADE_PREPARE_CODE_BUSY:			if (pTradeManager->isTrading(pSender, pReceiver))			{				// 菩哦阑 焊郴霖促.				gcTradePrepare.setTargetObjectID(pSender->getObjectID());				gcTradePrepare.setCode(GC_TRADE_PREPARE_CODE_BUSY);				pReceiverPlayer->sendPacket(&gcTradePrepare);				// 背券阑 芭何沁栏骨肺, TradeInfo甫 昏力秦霖促.				pTradeManager->cancelTrade(pSender, pReceiver);			}			else			{				executeError(pPacket, pPlayer, GC_TRADE_ERROR_CODE_NOT_TRADING);				return;			}			break;		// 舅荐 绝绰 内靛促...		default:			throw ProtocolException("CGTradePrepare::execute() : 舅 荐 绝绰 内靛");	}#endif	__END_DEBUG_EX __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGTradePrepareHandler::executeError (CGTradePrepare* pPacket , Player* pPlayer, BYTE ErrorCode)	 throw (ProtocolException , Error){	__BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__	GCTradeError gcTradeError;	gcTradeError.setTargetObjectID(pPacket->getTargetObjectID());	gcTradeError.setCode(ErrorCode);	pPlayer->sendPacket(&gcTradeError);#endif	__END_DEBUG_EX __END_CATCH}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?