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 + -
显示快捷键?