cguseitemfrominventoryhandler.cpp

来自「天之炼狱1服务器端源文件游戏服务端不完整」· C++ 代码 · 共 2,063 行 · 第 1/5 页

CPP
2,063
字号
		char query[25];		sprintf( query, "SkinColor=%u", color );		pSlayer->tinysave( query );		return true;	}	else if ( pPC->isVampire() )	{		Vampire* pVampire = dynamic_cast<Vampire*>(pPC);		Assert( pVampire != NULL );		if ( pVampire->getSkinColor() == color ) return false;		pVampire->setSkinColor( color );		char query[25];		sprintf( query, "SkinColor=%u", color );		pVampire->tinysave( query );		return true;	}	return false;}bool sendCannotUse( CGUseItemFromInventory* pPacket, Player* pPlayer ){	GCCannotUse _GCCannotUse;	_GCCannotUse.setObjectID(pPacket->getObjectID());	pPlayer->sendPacket(&_GCCannotUse);	return true;}#endifvoid CGUseItemFromInventoryHandler::executeResurrectItem(CGUseItemFromInventory* 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);	ResurrectItemInfo*	pItemInfo	 = dynamic_cast<ResurrectItemInfo*>(g_pItemInfoManager->getItemInfo( pItem->getItemClass(), pItem->getItemType() ));	//cout << "Resurrection 酒捞袍阑 荤侩窃 : " << pPC->getName() << " : " << pItem->getItemType() << endl;	if ( pItem->getObjectID() != pPacket->getObjectID() ||		pItemInfo == NULL )	{		//cout << "酒袍 坷宏璃飘 酒叼啊 撇覆" << endl;		sendCannotUse( pPacket, pPlayer );		return;	}	if ( !pPC->isFlag(Effect::EFFECT_CLASS_COMA) )	{		//cout << "磷篮 惑怕啊 酒丛" << endl;		sendCannotUse( pPacket, pPlayer );		return;	}	Slayer* pSlayer = NULL;	Vampire* pVampire = NULL;	Ousters* pOusters = NULL;	if ( pPC->isSlayer() ) pSlayer = dynamic_cast<Slayer*>(pPC);	else if ( pPC->isVampire() ) pVampire = dynamic_cast<Vampire*>(pPC);	else if ( pPC->isOusters() ) pOusters = dynamic_cast<Ousters*>(pPC);	ResurrectItemInfo::ResurrectType type = pItemInfo->getResurrectType();	HP_t hp = 0;	GCModifyInformation gcMI;	GCRemoveEffect gcRemoveEffect;	gcRemoveEffect.setObjectID( pPC->getObjectID() );	switch ( type )	{		case ResurrectItemInfo::HP_1:			{				if ( pPC->isSlayer() )				{					Assert( pSlayer != NULL );					pSlayer->setHP(1);					hp = 1;					gcMI.addShortData(MODIFY_CURRENT_HP,hp);				}				else if ( pPC->isVampire() )				{					Assert( pVampire != NULL );					pVampire->setHP(1);					hp = 1;					gcMI.addShortData(MODIFY_CURRENT_HP,hp);				}				else if ( pPC->isOusters() )				{					Assert( pOusters != NULL );					pOusters->setHP(1);					hp = 1;					gcMI.addShortData(MODIFY_CURRENT_HP,hp);				}				else				{					sendCannotUse( pPacket, pPlayer );					return;				}			}			break;		case ResurrectItemInfo::HP_FULL:			{				if ( pPC->isSlayer() )				{					Assert( pSlayer != NULL );					pSlayer->setHP( pSlayer->getHP(ATTR_MAX) );					hp = pSlayer->getHP();					gcMI.addShortData(MODIFY_CURRENT_HP,hp);					if ( pSlayer->getMP() < pSlayer->getMP(ATTR_MAX) )					{						pSlayer->setMP(pSlayer->getMP(ATTR_MAX));						gcMI.addShortData(MODIFY_CURRENT_MP,pSlayer->getMP());					}					Effect* pEffect = pSlayer->getEffectManager()->findEffect(Effect::EFFECT_CLASS_BLOOD_DRAIN);					if ( pEffect != NULL )					{						pEffect->destroy(pSlayer->getName());						pSlayer->getEffectManager()->deleteEffect(pSlayer, Effect::EFFECT_CLASS_BLOOD_DRAIN);						gcRemoveEffect.addEffectList(Effect::EFFECT_CLASS_BLOOD_DRAIN);						// 软趋 酒福官捞飘甫 规瘤窍扁 困茄 饶蜡刘 捞棋飘甫 嘿咯霖促.						if (pSlayer->isFlag(Effect::EFFECT_CLASS_AFTERMATH))						{							Effect* pEffect = pSlayer->getEffectManager()->findEffect(Effect::EFFECT_CLASS_AFTERMATH);							EffectAftermath* pEffectAftermath = dynamic_cast<EffectAftermath*>(pEffect);							pEffectAftermath->setDeadline(5*600); // 5盒 悼救 瘤加等促.						}						else						{							EffectAftermath* pEffectAftermath = new EffectAftermath(pSlayer);							pEffectAftermath->setDeadline(5*600); // 5盒 悼救 瘤加等促.							pSlayer->getEffectManager()->addEffect(pEffectAftermath);							pSlayer->setFlag(Effect::EFFECT_CLASS_AFTERMATH);							pEffectAftermath->create(pSlayer->getName());						}						// 软趋阑 摹丰窍搁 瓷仿摹啊 函拳窍霸 等促.						SLAYER_RECORD prev;						pSlayer->getSlayerRecord(prev);						pSlayer->initAllStat();						pSlayer->addModifyInfo(prev, gcMI);						pSlayer->sendRealWearingInfo();					}				}				else if ( pPC->isVampire() )				{					Assert( pVampire != NULL );					pVampire->setSilverDamage(0);					pVampire->setHP( pVampire->getHP(ATTR_MAX) );					hp = pVampire->getHP();					gcMI.addShortData(MODIFY_CURRENT_HP,hp);					gcMI.addShortData(MODIFY_SILVER_DAMAGE,0);				}				else if ( pPC->isOusters() )				{					Assert( pOusters != NULL );					pOusters->setSilverDamage(0);					pOusters->setHP( pOusters->getHP(ATTR_MAX) );					hp = pOusters->getHP();					gcMI.addShortData(MODIFY_CURRENT_HP,hp);				}				else				{					sendCannotUse( pPacket, pPlayer );					return;				}			}			break;		default:			sendCannotUse( pPacket, pPlayer );			return;	}	pPC->deleteEffect(Effect::EFFECT_CLASS_COMA);	pPC->removeFlag(Effect::EFFECT_CLASS_COMA);		gcRemoveEffect.addEffectList( (EffectID_t)Effect::EFFECT_CLASS_COMA );	pZone->broadcastPacket( pPC->getX(), pPC->getY(), &gcRemoveEffect );	pPC->getEffectManager()->sendEffectInfo( pPC, pZone, pPC->getX(), pPC->getY() );	GCStatusCurrentHP gcHP;	gcHP.setObjectID( pPC->getObjectID() );	gcHP.setCurrentHP( hp );	pZone->broadcastPacket( pPC->getX(), pPC->getY(), &gcHP, pPC );	pPlayer->sendPacket( &gcMI );	GCUseOK gcUseOK;	pPlayer->sendPacket( &gcUseOK );	if (isStackable(pItem))	{		decreaseItemNum(pItem, pInventory, pCreature->getName(), STORAGE_INVENTORY, 0, InvenX, InvenY);	}	else 	{		// 阶捞瘤 臼绰 酒捞袍篮 官肺官肺 昏力秦霖促.		pInventory->deleteItem(InvenX, InvenY);		pItem->destroy();		SAFE_DELETE(pItem);	}#endif    __END_DEBUG_EX __END_CATCH}void CGUseItemFromInventoryHandler::executeTranslator(CGUseItemFromInventory* 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);	ItemInfo*		pItemInfo	 = g_pItemInfoManager->getItemInfo( pItem->getItemClass(), pItem->getItemType() );		if ( pItem->getObjectID() != pPacket->getObjectID() ||		pItemInfo == NULL ||		pPC->isFlag( Effect::EFFECT_CLASS_TRANSLATION ) )	{		////cout << "酒袍 坷宏璃飘 酒叼啊 撇覆" << endl;		sendCannotUse( pPacket, pPlayer );		return;	}	EffectTranslation* pEffect = new EffectTranslation(pPC);	Assert( pEffect != NULL );	pEffect->setDeadline( 6000 );	// 10盒	pPC->addEffect(pEffect);	pPC->setFlag( Effect::EFFECT_CLASS_TRANSLATION );	GCAddEffect gcAddEffect;	gcAddEffect.setObjectID( pPC->getObjectID() );	gcAddEffect.setEffectID( pEffect->getSendEffectClass() );	gcAddEffect.setDuration( 6000 );	pZone->broadcastPacket( pPC->getX(), pPC->getY(), &gcAddEffect );	GCUseOK gcUseOK;	pPlayer->sendPacket( &gcUseOK );	if (isStackable(pItem))	{		decreaseItemNum(pItem, pInventory, pCreature->getName(), STORAGE_INVENTORY, 0, InvenX, InvenY);	}	else 	{		// 阶捞瘤 臼绰 酒捞袍篮 官肺官肺 昏力秦霖促.		pInventory->deleteItem(InvenX, InvenY);		pItem->destroy();		SAFE_DELETE(pItem);	}#endif    __END_DEBUG_EX __END_CATCH}void CGUseItemFromInventoryHandler::executeEffectItem(CGUseItemFromInventory* 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);	EffectItemInfo*	pItemInfo	 = dynamic_cast<EffectItemInfo*>(g_pItemInfoManager->getItemInfo( pItem->getItemClass(), pItem->getItemType() ));	if ( pItem->getObjectID() != pPacket->getObjectID() || pItemInfo == NULL ||		pPC->isFlag( pItemInfo->getEffectClass() )	)	{		sendCannotUse( pPacket, pPlayer );		return;	}	SimpleCreatureEffect* pEffect = new SimpleCreatureEffect( pItemInfo->getEffectClass(), pPC );	Assert( pEffect != NULL );	pEffect->setDeadline( (WORD)pItemInfo->getDuration()*10 );	pPC->addEffect( pEffect );	pPC->setFlag( pEffect->getEffectClass() );	GCAddEffect gcAddEffect;	gcAddEffect.setObjectID( pPC->getObjectID() );	gcAddEffect.setEffectID( pEffect->getSendEffectClass() );	gcAddEffect.setDuration( (WORD)pItemInfo->getDuration()*10 );	pZone->broadcastPacket( pPC->getX(), pPC->getY(), &gcAddEffect );	GCUseOK gcUseOK;	pPlayer->sendPacket( &gcUseOK );	if (isStackable(pItem))	{		decreaseItemNum(pItem, pInventory, pCreature->getName(), STORAGE_INVENTORY, 0, InvenX, InvenY);	}	else 	{		// 阶捞瘤 臼绰 酒捞袍篮 官肺官肺 昏力秦霖促.		pInventory->deleteItem(InvenX, InvenY);		pItem->destroy();		SAFE_DELETE(pItem);	}	#endif	__END_DEBUG_EX __END_CATCH}void CGUseItemFromInventoryHandler::executePetItem(CGUseItemFromInventory* pPacket, Player* pPlayer)	throw(ProtocolException, Error){	__BEGIN_TRY#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);//	Zone*			pZone		 = pPC->getZone();	Inventory*      pInventory   = pPC->getInventory();	CoordInven_t    InvenX       = pPacket->getX();	CoordInven_t    InvenY       = pPacket->getY();	Item*           pItem        = pInventory->getItem(InvenX, InvenY);	if ( pPC == NULL )	{		sendCannotUse( pPacket, pPlayer );		return;	}	if ( pPC != NULL && pPC->isSlayer() )	{		Slayer* pSlayer = dynamic_cast<Slayer*>(pPC);		if ( pSlayer->hasRideMotorcycle() )		{			sendCannotUse( pPacket, pPlayer );			return;		}	}	if ( pPC != NULL &&		(pPC->isFlag( Effect::EFFECT_CLASS_TRANSFORM_TO_BAT ) || pPC->isFlag( Effect::EFFECT_CLASS_TRANSFORM_TO_WOLF )		 || pPC->isFlag( Effect::EFFECT_CLASS_SUMMON_SYLPH ))	)	{		sendCannotUse( pPacket, pPlayer );		return;	}	PetItem* pPetItem = dynamic_cast<PetItem*>(pItem);	if ( pPetItem != NULL )	{		PetInfo* pTargetPetInfo = pPetItem->getPetInfo();		if ( pTargetPetInfo->

⌨️ 快捷键说明

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