cgrelictoobjecthandler.cpp

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

CPP
753
字号
//////////////////////////////////////////////////////////////////////////////// Filename    : CGRelicToObjectHandler.cc// Written By  : elca@ewestsoft.com// Description ://////////////////////////////////////////////////////////////////////////////#include "CGRelicToObject.h"#ifdef __GAME_SERVER__	#include "GamePlayer.h"	#include "Zone.h"	#include "Slayer.h"	#include "Vampire.h"	#include "Corpse.h"	#include "Relic.h"	#include "Monster.h"	#include "MonsterCorpse.h"	#include "EffectPrecedence.h"	#include "EffectIncreaseAttr.h"	#include "EffectRelicTable.h"	#include "EffectHasSlayerRelic.h"	#include "EffectHasVampireRelic.h"	#include "EffectSlayerRelic.h"	#include "EffectVampireRelic.h"	#include "CombatInfoManager.h"	#include "ZoneGroupManager.h"	#include "ZoneUtil.h"	#include "VariableManager.h"	#include "SkillUtil.h"	#include "RelicUtil.h"	#include "ShrineInfoManager.h"	#include "CastleShrineInfoManager.h"	#include "StringPool.h"	#include "LevelWarManager.h"	#include "Sweeper.h"	#include "ctf/FlagManager.h"	#include "Gpackets/GCCannotAdd.h"	#include "Gpackets/GCAddEffect.h"	#include "Gpackets/GCSystemMessage.h"	#include "Gpackets/GCDeleteObject.h"	#include "Gpackets/GCDeleteInventoryItem.h"	#include <stdio.h>#endif	// __GAME_SERVER__////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGRelicToObjectHandler::execute (CGRelicToObject* pPacket , Player* pPlayer)	 throw (Error){	__BEGIN_TRY __BEGIN_DEBUG_EX		#ifdef __GAME_SERVER__	//cout << "CGRelicToObject start" << endl;	//cout << "罐篮 菩哦(酒捞袍 坷宏璃飘)" << pPacket->getItemObjectID()	//	 << "罐篮 菩哦(己拱 焊包窃)"  << pPacket->getObjectID() << endl;	Assert(pPacket != NULL);	Assert(pPlayer != NULL);	// 芳腐阑 秦寸 己拱焊包窃俊 持阑锭.. 	GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer);	Creature*   pCreature 	= pGamePlayer->getCreature();	// 己拱 焊包措俊 捞固 笛 促 乐绰 版快	// 己拱 焊包措俊 Slayer己拱捞 乐绊 pItem捞 Slayer己拱牢 版快	PlayerCreature* pPlayerCreature = dynamic_cast<PlayerCreature*>(pCreature);	// 泅犁 甸绊 乐绰 酒捞袍 == Relic ?	InventorySlot* 	pExtraInventorySlot = pPlayerCreature->getExtraInventorySlot();	Item*   		pItem   			= pExtraInventorySlot->getItem();	if (pItem==NULL		|| (!isRelicItem( pItem )&&!pItem->isFlagItem() && !pItem->isSweeper()))	{		GCCannotAdd _GCCannotAdd;		_GCCannotAdd.setObjectID(pPacket->getObjectID());		pPlayer->sendPacket(&_GCCannotAdd);		return;	}	if (pItem->getItemClass()==Item::ITEM_CLASS_RELIC)	{		executeRelic( pPacket, pPlayer );	}	else if (pItem->getItemClass()==Item::ITEM_CLASS_BLOOD_BIBLE)	{		executeBloodBible( pPacket, pPlayer );	}	else if (pItem->getItemClass()==Item::ITEM_CLASS_CASTLE_SYMBOL)	{		executeCastleSymbol( pPacket, pPlayer );	}	else if ( pItem->isFlagItem() )	{		//cout << "标惯 才扁!" << endl;		executeFlag( pPacket, pPlayer );	}	else if (pItem->getItemClass()==Item::ITEM_CLASS_SWEEPER)	{		executeSweeper( pPacket, pPlayer );	}	else	{		throw DisconnectException("钧蹲茄芭 甸绊 RelicToObject焊郴瘤付");	}#endif	__END_DEBUG_EX __END_CATCH}void CGRelicToObjectHandler::executeRelic(CGRelicToObject* pPacket , Player* pPlayer)	 throw (Error){	__BEGIN_TRY#ifdef __GAME_SERVER__	// 芳腐阑 秦寸 己拱焊包窃俊 持阑锭.. 	GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer);	Creature*   pCreature 	= pGamePlayer->getCreature();	// 己拱 焊包措俊 捞固 笛 促 乐绰 版快	// 己拱 焊包措俊 Slayer己拱捞 乐绊 pItem捞 Slayer己拱牢 版快	PlayerCreature* pPlayerCreature = dynamic_cast<PlayerCreature*>(pCreature);	// 泅犁 甸绊 乐绰 酒捞袍 == Relic ?	InventorySlot* 	pExtraInventorySlot = pPlayerCreature->getExtraInventorySlot();	Item*   		pItem   			= pExtraInventorySlot->getItem();	Zone*	 	pZone		= pCreature->getZone();	Assert(pZone!=NULL);	bool        Success   = false;	Item* pTableItem = pZone->getItem( pPacket->getObjectID() );	// 弊繁 item捞 绝芭唱	// 矫眉啊 酒聪芭唱	// Monster矫眉啊 酒聪搁 己拱焊包措啊 酒聪促.	if (pTableItem==NULL 		|| pTableItem->getItemClass()!=Item::ITEM_CLASS_CORPSE		|| pTableItem->getItemType()!=MONSTER_CORPSE)	{		GCCannotAdd _GCCannotAdd;		_GCCannotAdd.setObjectID(pPacket->getObjectID());		pPlayer->sendPacket(&_GCCannotAdd);		//cout << "return: not RelicTable" << endl;		return;	}	// 己拱 焊包措	MonsterCorpse* pCorpse = dynamic_cast<MonsterCorpse*>(pTableItem);	Assert(pCorpse!=NULL);	// 2鸥老 救俊 乐绢具 等促.	if (!verifyDistance(pCreature, pCorpse->getX(), pCorpse->getY(), 2))	{		GCCannotAdd _GCCannotAdd;		_GCCannotAdd.setObjectID(pPacket->getObjectID());		pPlayer->sendPacket(&_GCCannotAdd);		//cout << "return: not in 2 tile" << endl;		return;	}	// Relic 家蜡 咯何甫 眉农茄促.	bool bPlayerHasSlayerRelic 	= pCreature->isFlag(Effect::EFFECT_CLASS_HAS_SLAYER_RELIC);	bool bPlayerHasVampireRelic = pCreature->isFlag(Effect::EFFECT_CLASS_HAS_VAMPIRE_RELIC);	bool bTableHasSlayerRelic 	= pCorpse->isFlag(Effect::EFFECT_CLASS_SLAYER_RELIC);	bool bTableHasVampireRelic 	= pCorpse->isFlag(Effect::EFFECT_CLASS_VAMPIRE_RELIC);	bool bSlayerRelicTable 		= pCorpse->isFlag(Effect::EFFECT_CLASS_SLAYER_RELIC_TABLE);	bool bVampireRelicTable 	= pCorpse->isFlag(Effect::EFFECT_CLASS_VAMPIRE_RELIC_TABLE);	// 捞固 滴 己拱捞 促 乐芭唱	// Player啊 滴 己拱捞 促 绝芭唱	// item捞 绝绰 版快?	// 己拱捞 酒聪芭唱	if (bTableHasSlayerRelic && bTableHasVampireRelic		|| !bPlayerHasSlayerRelic && !bPlayerHasVampireRelic		|| pItem==NULL		|| pItem->getItemClass() != Item::ITEM_CLASS_RELIC)	{		GCCannotAdd _GCCannotAdd;		_GCCannotAdd.setObjectID(pPacket->getObjectID());		pPlayer->sendPacket(&_GCCannotAdd);		//cout << "return: Cannot add" << endl;		return;	}	ItemType_t 		relicIndex 			= pItem->getItemType();	// RelicInfo甫 掘绰促.	const RelicInfo* pRelicInfo = dynamic_cast<RelicInfo*>(g_pRelicInfoManager->getItemInfo(relicIndex));	if ( pRelicInfo == NULL )	{		filelog( "relic.log", "no such relic index(%d)", relicIndex );		GCCannotAdd _GCCannotAdd;		_GCCannotAdd.setObjectID(pPacket->getObjectID());		pPlayer->sendPacket(&_GCCannotAdd);		return;	}	bool bSlayer = pCreature->isSlayer();	bool bVampire = pCreature->isVampire();	// itemObjectID啊 肋给登菌芭唱	// 甸绊 乐绰 酒捞袍捞 绝芭唱	// 巢狼 焊包措捞芭唱	// 捞固 鞍篮 辆练狼 己拱捞 乐促搁 持阑 荐 绝促.	if (pItem->getObjectID() != pPacket->getItemObjectID()		|| bSlayer && bVampireRelicTable		|| bVampire && bSlayerRelicTable		|| bTableHasSlayerRelic && pRelicInfo->relicType==RELIC_TYPE_SLAYER		|| bTableHasVampireRelic && pRelicInfo->relicType==RELIC_TYPE_VAMPIRE)	{		GCCannotAdd _GCCannotAdd;		_GCCannotAdd.setObjectID(pPacket->getObjectID());		pPlayer->sendPacket(&_GCCannotAdd);		//cout << "return: Cannot Add2" << endl;		return;	}	// 浇饭捞绢牢 版快绰 坷配官捞, 胶唱捞俏惑怕 捞搁 救登绊	// 轨颇捞绢牢 版快绰 函脚惑怕, 捧疙惑怕捞搁 救等促.	if (bSlayer)	{		Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature);		// 坷配官捞甫 鸥绊 乐栏搁 阂啊瓷窍促.		if (!pSlayer->hasRideMotorcycle()			&& !pSlayer->isFlag(Effect::EFFECT_CLASS_SNIPING_MODE))		{			// Effect甫 嘿牢促.			Success = true;		}	}	else if (bVampire)	{		if (!pCreature->isFlag(Effect::EFFECT_CLASS_TRANSFORM_TO_BAT)			&& !pCreature->isFlag(Effect::EFFECT_CLASS_TRANSFORM_TO_WOLF)			&& !pCreature->isFlag(Effect::EFFECT_CLASS_HIDE)			&& !pCreature->isFlag(Effect::EFFECT_CLASS_INVISIBILITY)			&& !pCreature->isFlag(Effect::EFFECT_CLASS_FADE_OUT))		{			Success = true;		}	}	// 己拱焊包措俊 己拱阑 持阑 荐 乐绰 版快	if (Success)	{		// Mouse俊辑 酒捞袍阑 瘤快绊		pPlayerCreature->deleteItemFromExtraInventorySlot();		// 己拱阑 己拱 焊包措俊 眠啊茄促.		pCorpse->addTreasure( pItem );/*		StringStream msg;		msg << pPlayerCreature->getName() << " 丛捞 己拱 焊包措俊 "			<< "己拱(" << pRelicInfo->getName() << ")阑 持菌嚼聪促."; */        char msg[100];        sprintf( msg, g_pStringPool->c_str( STRID_PUT_RELIC_TO_RELIC_TABLE ),                        pPlayerCreature->getName().c_str(),                        pRelicInfo->getName().c_str() );		GCSystemMessage gcSystemMessage;		gcSystemMessage.setMessage( msg );		g_pZoneGroupManager->broadcast( &gcSystemMessage );		Effect::EffectClass effectClass;		Effect::EffectClass effectClassTable;		// Creature俊辑 Effect甫 力芭窍绊		if (pRelicInfo->relicType==RELIC_TYPE_SLAYER)		{			effectClass 		= Effect::EFFECT_CLASS_HAS_SLAYER_RELIC;			effectClassTable 	= Effect::EFFECT_CLASS_SLAYER_RELIC;		}		else		{			effectClass 		= Effect::EFFECT_CLASS_HAS_VAMPIRE_RELIC;			effectClassTable 	= Effect::EFFECT_CLASS_VAMPIRE_RELIC;		}		Effect* pEffect = pCreature->findEffect( effectClass );		Assert(pEffect!=NULL);		// Creature狼 flag甫 掺绊		// GCRemoveEffect甫 焊郴霸 等促.		pEffect->unaffect();			pCreature->deleteEffect( effectClass );		// 己拱 焊包措啊 Relic阑 啊脸促绰 Effect甫 嘿咯霖促.		if (pRelicInfo->relicType==RELIC_TYPE_SLAYER)		{			EffectSlayerRelic* pEffect = new EffectSlayerRelic(pCorpse);			pCorpse->getEffectManager().addEffect( pEffect );			pCorpse->setFlag(Effect::EFFECT_CLASS_SLAYER_RELIC);			pEffect->affect(pCorpse);		}		else		{			EffectVampireRelic* pEffect = new EffectVampireRelic(pCorpse);			pCorpse->getEffectManager().addEffect( pEffect );			pCorpse->setFlag(Effect::EFFECT_CLASS_VAMPIRE_RELIC);			pEffect->affect(pCorpse);		}		// 己拱焊包措俊 Effect甫 嘿牢吧 client俊 舅赴促.		GCAddEffect gcAddEffect;		gcAddEffect.setObjectID(pCorpse->getObjectID());		gcAddEffect.setEffectID(effectClassTable);		gcAddEffect.setDuration(65000);		pZone->broadcastPacket(pCorpse->getX(), pCorpse->getY(), &gcAddEffect);		// 己拱 初疽促绊 焊郴霖促.		GCDeleteObject gcDeleteObject;		gcDeleteObject.setObjectID( pItem->getObjectID() );		pPlayer->sendPacket(&gcDeleteObject);		// RelicTable		EffectRelicTable* pTableEffect = NULL;		if (bSlayer)		{			// 己拱狼 家蜡甫 汲沥茄促.			g_pCombatInfoManager->setRelicOwner(relicIndex, CombatInfoManager::RELIC_OWNER_SLAYER);			// 捞棋飘甫 茫绰促.			Effect* pEffect = pCorpse->getEffectManager().findEffect( Effect::EFFECT_CLASS_SLAYER_RELIC_TABLE );			Assert(pEffect!=NULL);			pTableEffect = dynamic_cast<EffectSlayerRelicTable*>(pEffect);			Assert(pTableEffect!=NULL);		}		else		{			// 己拱狼 家蜡甫 汲沥茄促.			g_pCombatInfoManager->setRelicOwner(relicIndex, CombatInfoManager::RELIC_OWNER_VAMPIRE);			// 捞棋飘甫 茫绰促.			Effect* pEffect = pCorpse->getEffectManager().findEffect( Effect::EFFECT_CLASS_VAMPIRE_RELIC_TABLE );			Assert(pEffect!=NULL);			pTableEffect = dynamic_cast<EffectVampireRelicTable*>(pEffect);			Assert(pTableEffect!=NULL);		}		// 己拱捞 窍唱 甸绢啊搁		// 茄 悼救(10檬)篮 己拱阑 哗尘 荐 绝促.		Timeval lockTime;		getCurrentTime(lockTime);		lockTime.tv_sec += 10;		pTableEffect->setLockTime( lockTime );		// 滴 己拱阑 葛滴 爱霸 登绰 版快		if (bTableHasSlayerRelic && pRelicInfo->relicType==RELIC_TYPE_VAMPIRE			|| bTableHasVampireRelic && pRelicInfo->relicType==RELIC_TYPE_SLAYER)

⌨️ 快捷键说明

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