cgtraderemoveitemhandler.cpp

来自「天之炼狱1服务器端源文件游戏服务端不完整」· C++ 代码 · 共 392 行

CPP
392
字号
//////////////////////////////////////////////////////////////////////////////// Filename    : CGTradeRemoveItemHandler.cpp// Written By  : 辫己刮// Description : //////////////////////////////////////////////////////////////////////////////#include "CGTradeRemoveItem.h"#ifdef __GAME_SERVER__	#include "GamePlayer.h"	#include "Slayer.h"	#include "Vampire.h"	#include "Ousters.h"	#include "Item.h"	#include "Inventory.h"	#include "TradeManager.h"	#include "ZoneUtil.h"	#include "Gpackets/GCTradeError.h"	#include "Gpackets/GCTradeRemoveItem.h"	#include "Gpackets/GCTradeVerify.h"#endif////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGTradeRemoveItemHandler::execute (CGTradeRemoveItem* 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();	GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer);	Creature* pPC = pGamePlayer->getCreature();	Assert(pPC != NULL);	Zone* pZone = pPC->getZone();	Assert(pZone != NULL);	TradeManager* pTradeManager = pZone->getTradeManager();	Assert(pTradeManager != NULL);	// 背券阑 盔窍绰 惑措规阑 粮俊辑 茫酒夯促.	Creature* pTargetPC = NULL;	/*	try { pTargetPC = pZone->getCreature(TargetOID); } 	catch (NoSuchElementException) { pTargetPC = NULL; }	*/	// NoSuch力芭. by sigi. 2002.5.2	pTargetPC = pZone->getCreature(TargetOID);	// 背券 惑措啊 绝芭唱, 鞍篮 辆练捞 酒聪扼搁 俊矾促	if (pTargetPC == NULL)	{		pTradeManager->cancelTrade(pPC);		executeError(pPacket, pPlayer, GC_TRADE_ERROR_CODE_TARGET_NOT_EXIST);		return;	}	// 背券 惑措啊 荤恩捞 酒聪芭唱, 鞍篮 辆练捞 酒聪扼搁 俊矾促.	if (!pTargetPC->isPC() || !isSameRace(pTargetPC, pPC))	{		pTradeManager->cancelTrade(pPC);		executeError(pPacket, pPlayer, GC_TRADE_ERROR_CODE_RACE_DIFFER);		return;	}	// 笛 促 救傈 瘤措俊 乐绰瘤 眉农甫 茄促.	if (!isInSafeZone(pPC) || !isInSafeZone(pTargetPC))	{		pTradeManager->cancelTrade(pPC);		executeError(pPacket, pPlayer, GC_TRADE_ERROR_CODE_NOT_SAFE);		return;	}	// 坷配官捞甫 鸥绊 乐促搁 俊矾促.	if (pPC->isSlayer() && pTargetPC->isSlayer())	{		Slayer* pSlayer1 = dynamic_cast<Slayer*>(pPC);		Slayer* pSlayer2 = dynamic_cast<Slayer*>(pTargetPC);		if (pSlayer1->hasRideMotorcycle() || pSlayer2->hasRideMotorcycle())		{			pTradeManager->cancelTrade(pPC);			executeError(pPacket, pPlayer, GC_TRADE_ERROR_CODE_MOTORCYCLE);			return;		}	}	if (pPC->isOusters() && pTargetPC->isOusters())	{		Ousters* pOusters1 = dynamic_cast<Ousters*>(pPC);		Ousters* pOusters2 = dynamic_cast<Ousters*>(pTargetPC);		if ( pOusters1->isFlag(Effect::EFFECT_CLASS_SUMMON_SYLPH)			|| pOusters2->isFlag(Effect::EFFECT_CLASS_SUMMON_SYLPH)		)		{			pTradeManager->cancelTrade(pPC);			executeError(pPacket, pPlayer, GC_TRADE_ERROR_CODE_MOTORCYCLE);			return;		}	}	// 笛捞辑 背券阑 窍绊 乐绰 惑怕啊 酒聪扼搁 俊矾促.	if (!pTradeManager->isTrading(pPC, pTargetPC))	{		pTradeManager->cancelTrade(pPC);		executeError(pPacket, pPlayer, GC_TRADE_ERROR_CODE_NOT_TRADING);		return;	}	if (pPC->isSlayer()) executeSlayer(pPacket, pPlayer);	else if (pPC->isVampire()) executeVampire(pPacket, pPlayer);	else if (pPC->isOusters()) executeOusters(pPacket, pPlayer);	else throw ProtocolException("CGTradeRemoveItem::execute() : 舅 荐 绝绰 敲饭捞绢 农府媚");#endif	__END_DEBUG_EX __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGTradeRemoveItemHandler::executeSlayer (CGTradeRemoveItem* pPacket, Player* pPlayer)	 throw (ProtocolException , Error){	__BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__	// 惑困 窃荐俊辑 俊矾甫 八荤沁扁 锭巩俊 	// 咯扁辑绰 器牢磐啊 澄牢瘤甫 八荤窍瘤 臼绰促.	ObjectID_t  TargetOID   = pPacket->getTargetObjectID();	ObjectID_t  ItemOID     = pPacket->getItemObjectID();	GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer);	Creature*   pPC         = pGamePlayer->getCreature();	Zone*       pZone       = pPC->getZone();	Creature*   pTargetPC   = pZone->getCreature(TargetOID);	// NoSuch力芭. by sigi. 2002.5.2	if (pTargetPC==NULL) return;	Slayer*     pSender     = dynamic_cast<Slayer*>(pPC);	// 背券 措惑俊 眠啊且 酒捞袍狼 器牢磐甫 掘绢辰促.	CoordInven_t X, Y;	Inventory*   pInventory     = pSender->getInventory();	Item*        pItem          = pInventory->findItemOID(ItemOID, X, Y);	TradeManager* pTradeManager = pZone->getTradeManager();	Assert(pTradeManager != NULL);	// 哗具且 酒捞袍捞 绝促搁 寸楷洒 歹 捞惑 贸府啊 阂啊瓷窍促.	if (pItem == NULL)	{		pTradeManager->cancelTrade(pPC);		executeError(pPacket, pPlayer, GC_TRADE_ERROR_CODE_REMOVE_ITEM);		return;	}	TradeInfo* pInfo1 = pTradeManager->getTradeInfo(pSender->getName());	TradeInfo* pInfo2 = pTradeManager->getTradeInfo(pTargetPC->getName());	// TradeManager俊辑 背券 措惑栏肺 甸绢啊 乐带 酒捞袍阑 力芭茄促.	//Assert(pInfo1->removeItem(pItem));	pInfo1->removeItem(pItem);	Timeval currentTime;	getCurrentTime(currentTime);	pInfo1->setNextTime(currentTime);	// 泅犁 OK甫 穿弗 惑怕扼搁, 努扼捞攫飘俊霸 牢刘 菩哦阑 焊郴拎具 茄促.	if (pInfo1->getStatus() == TRADE_FINISH)	{		//cout << "CGTradeRemoveItem [" << pSender->getName() << "]狼 惑怕啊 TRADE_FINISH捞骨肺, 牢刘 菩哦阑 焊郴霖促." << endl;		// 牢刘菩哦阑 朝妨霖促.		GCTradeVerify gcTradeVerify;		gcTradeVerify.setCode(GC_TRADE_VERIFY_CODE_REMOVE_ITEM);		pPlayer->sendPacket(&gcTradeVerify);	}	else	{		//cout << "CGTradeRemoveItem [" << pSender->getName() << "]狼 惑怕啊 TRADE_FINISH啊 酒聪骨肺, 牢刘 菩哦 朝府瘤 臼绰促." << endl;	}	// 酒捞袍阑 歹窍芭唱 滑 版快, 惑怕啊 TRADE_FINISH扼搁 	// TRADE_TRADING栏肺 官层拎具 茄促.	pInfo1->setStatus(TRADE_TRADING);	pInfo2->setStatus(TRADE_TRADING);	// 惑措规俊霸辑 朝妨临 酒捞袍 沥焊甫 备己茄促.	GCTradeRemoveItem gcTradeRemoveItem;	gcTradeRemoveItem.setTargetObjectID(pSender->getObjectID());	gcTradeRemoveItem.setItemObjectID(pItem->getObjectID());	// 惑措规俊霸 哗具且 酒捞袍狼 沥焊甫 朝妨霖促.	Player* pTargetPlayer = pTargetPC->getPlayer();	pTargetPlayer->sendPacket(&gcTradeRemoveItem);#endif	__END_DEBUG_EX __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGTradeRemoveItemHandler::executeVampire (CGTradeRemoveItem* pPacket , Player* pPlayer)	 throw (ProtocolException , Error){	__BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__	// 惑困 窃荐俊辑 俊矾甫 八荤沁扁 锭巩俊 	// 咯扁辑绰 器牢磐啊 澄牢瘤甫 八荤窍瘤 臼绰促.	ObjectID_t  TargetOID   = pPacket->getTargetObjectID();	ObjectID_t  ItemOID     = pPacket->getItemObjectID();	GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer);	Creature*   pPC         = pGamePlayer->getCreature();	Zone*       pZone       = pPC->getZone();	Creature*   pTargetPC  = pZone->getCreature(TargetOID);	// NoSuch力芭. by sigi. 2002.5.2	if (pTargetPC==NULL) return;	Vampire*    pSender    = dynamic_cast<Vampire*>(pPC);	TradeManager* pTradeManager = pZone->getTradeManager();	Assert(pTradeManager != NULL);	// 背券 措惑俊 眠啊且 酒捞袍狼 器牢磐甫 掘绢辰促.	CoordInven_t X, Y;	Inventory*   pInventory     = pSender->getInventory();	Item*        pItem          = pInventory->findItemOID(ItemOID, X, Y);	// 哗具且 酒捞袍捞 绝促搁 寸楷洒 歹 捞惑 贸府啊 阂啊瓷窍促.	if (pItem == NULL)	{		pTradeManager->cancelTrade(pPC);		executeError(pPacket, pPlayer, GC_TRADE_ERROR_CODE_REMOVE_ITEM);		return;	}	TradeInfo* pInfo1 = pTradeManager->getTradeInfo(pSender->getName());	TradeInfo* pInfo2 = pTradeManager->getTradeInfo(pTargetPC->getName());	// TradeManager俊辑 背券 措惑栏肺 甸绢啊 乐带 酒捞袍阑 力芭茄促.	//Assert(pInfo1->removeItem(pItem));	pInfo1->removeItem(pItem);	// 泅犁 OK甫 穿弗 惑怕扼搁, 努扼捞攫飘俊霸 牢刘 菩哦阑 焊郴拎具 茄促.	if (pInfo1->getStatus() == TRADE_FINISH)	{		//cout << "CGTradeRemoveItem [" << pSender->getName() << "]狼 惑怕啊 TRADE_FINISH捞骨肺, 牢刘 菩哦阑 焊郴霖促." << endl;		// 牢刘菩哦阑 朝妨霖促.		GCTradeVerify gcTradeVerify;		gcTradeVerify.setCode(GC_TRADE_VERIFY_CODE_REMOVE_ITEM);		pPlayer->sendPacket(&gcTradeVerify);	}	else	{		//cout << "CGTradeRemoveItem [" << pSender->getName() << "]狼 惑怕啊 TRADE_FINISH啊 酒聪骨肺, 牢刘 菩哦 朝府瘤 臼绰促." << endl;	}	// 酒捞袍阑 歹窍芭唱 滑 版快, 惑怕啊 TRADE_FINISH扼搁 	// TRADE_TRADING栏肺 官层拎具 茄促.	pInfo1->setStatus(TRADE_TRADING);	pInfo2->setStatus(TRADE_TRADING);	// 惑措规俊霸辑 朝妨临 酒捞袍 沥焊甫 备己茄促.	GCTradeRemoveItem gcTradeRemoveItem;	gcTradeRemoveItem.setTargetObjectID(pSender->getObjectID());	gcTradeRemoveItem.setItemObjectID(pItem->getObjectID());	// 惑措规俊霸 哗具且 酒捞袍狼 沥焊甫 朝妨霖促.	Player* pTargetPlayer = pTargetPC->getPlayer();	pTargetPlayer->sendPacket(&gcTradeRemoveItem);#endif	__END_DEBUG_EX __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGTradeRemoveItemHandler::executeOusters (CGTradeRemoveItem* pPacket , Player* pPlayer)	 throw (ProtocolException , Error){	__BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__	// 惑困 窃荐俊辑 俊矾甫 八荤沁扁 锭巩俊 	// 咯扁辑绰 器牢磐啊 澄牢瘤甫 八荤窍瘤 臼绰促.	ObjectID_t  TargetOID   = pPacket->getTargetObjectID();	ObjectID_t  ItemOID     = pPacket->getItemObjectID();	GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer);	Creature*   pPC         = pGamePlayer->getCreature();	Zone*       pZone       = pPC->getZone();	Creature*   pTargetPC  = pZone->getCreature(TargetOID);	// NoSuch力芭. by sigi. 2002.5.2	if (pTargetPC==NULL) return;	Ousters*    pSender    = dynamic_cast<Ousters*>(pPC);	TradeManager* pTradeManager = pZone->getTradeManager();	Assert(pTradeManager != NULL);	// 背券 措惑俊 眠啊且 酒捞袍狼 器牢磐甫 掘绢辰促.	CoordInven_t X, Y;	Inventory*   pInventory     = pSender->getInventory();	Item*        pItem          = pInventory->findItemOID(ItemOID, X, Y);	// 哗具且 酒捞袍捞 绝促搁 寸楷洒 歹 捞惑 贸府啊 阂啊瓷窍促.	if (pItem == NULL)	{		pTradeManager->cancelTrade(pPC);		executeError(pPacket, pPlayer, GC_TRADE_ERROR_CODE_REMOVE_ITEM);		return;	}	TradeInfo* pInfo1 = pTradeManager->getTradeInfo(pSender->getName());	TradeInfo* pInfo2 = pTradeManager->getTradeInfo(pTargetPC->getName());	// TradeManager俊辑 背券 措惑栏肺 甸绢啊 乐带 酒捞袍阑 力芭茄促.	//Assert(pInfo1->removeItem(pItem));	pInfo1->removeItem(pItem);	// 泅犁 OK甫 穿弗 惑怕扼搁, 努扼捞攫飘俊霸 牢刘 菩哦阑 焊郴拎具 茄促.	if (pInfo1->getStatus() == TRADE_FINISH)	{		//cout << "CGTradeRemoveItem [" << pSender->getName() << "]狼 惑怕啊 TRADE_FINISH捞骨肺, 牢刘 菩哦阑 焊郴霖促." << endl;		// 牢刘菩哦阑 朝妨霖促.		GCTradeVerify gcTradeVerify;		gcTradeVerify.setCode(GC_TRADE_VERIFY_CODE_REMOVE_ITEM);		pPlayer->sendPacket(&gcTradeVerify);	}	else	{		//cout << "CGTradeRemoveItem [" << pSender->getName() << "]狼 惑怕啊 TRADE_FINISH啊 酒聪骨肺, 牢刘 菩哦 朝府瘤 臼绰促." << endl;	}	// 酒捞袍阑 歹窍芭唱 滑 版快, 惑怕啊 TRADE_FINISH扼搁 	// TRADE_TRADING栏肺 官层拎具 茄促.	pInfo1->setStatus(TRADE_TRADING);	pInfo2->setStatus(TRADE_TRADING);	// 惑措规俊霸辑 朝妨临 酒捞袍 沥焊甫 备己茄促.	GCTradeRemoveItem gcTradeRemoveItem;	gcTradeRemoveItem.setTargetObjectID(pSender->getObjectID());	gcTradeRemoveItem.setItemObjectID(pItem->getObjectID());	// 惑措规俊霸 哗具且 酒捞袍狼 沥焊甫 朝妨霖促.	Player* pTargetPlayer = pTargetPC->getPlayer();	pTargetPlayer->sendPacket(&gcTradeRemoveItem);#endif	__END_DEBUG_EX __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGTradeRemoveItemHandler::executeError (CGTradeRemoveItem* 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 + -
显示快捷键?