⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 relicutil.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	else	{		return false;	}	// has relic 捞棋飘甫 茫酒辑 捞棋飘甫 瘤况霖促.	Effect* pEffect = pCreature->findEffect( effectClass );	if ( pEffect != NULL )	{		pCreature->removeFlag( effectClass );		pEffect->unaffect();		pCreature->deleteEffect( effectClass );		return true;	}	return false;	__END_CATCH}booladdRelicEffect(Creature* pCreature, Item* pItem)	throw (Error){	__BEGIN_TRY	Assert(pCreature!=NULL);	Assert(pItem!=NULL);	// 己拱阑 啊脸促绰 捞棋飘甫 嘿牢促.	Effect::EffectClass effectClass;	Effect::EffectClass effectClassSend;	Item::ItemClass itemclass 	= pItem->getItemClass();	ItemType_t		itemtype	= pItem->getItemType();	if (itemclass == Item::ITEM_CLASS_RELIC)	{		const RelicInfo* pRelicInfo = dynamic_cast<RelicInfo*>(g_pRelicInfoManager->getItemInfo(itemtype));		if (pRelicInfo->relicType==RELIC_TYPE_SLAYER)		{			effectClassSend = effectClass = Effect::EFFECT_CLASS_HAS_SLAYER_RELIC;			EffectHasRelic* pEffect = new EffectHasSlayerRelic(pCreature);			//pEffect->setNextTime( 1*10 );	// 10檬 饶			pEffect->setTick( 1*60*10 );	// 1盒付促 皋技瘤 免仿			pCreature->addEffect( pEffect );			pEffect->affect();		}		else		{			effectClassSend = effectClass = Effect::EFFECT_CLASS_HAS_VAMPIRE_RELIC;			EffectHasRelic* pEffect = new EffectHasVampireRelic(pCreature);			//pEffect->setNextTime( 1*10 );	// 10檬 饶			pEffect->setTick( 1*60*10 );	// 1盒付促 皋技瘤 免仿			pCreature->addEffect( pEffect );			pEffect->affect();		}	}	else if (itemclass == Item::ITEM_CLASS_BLOOD_BIBLE)	{		effectClass = Effect::EFFECT_CLASS_HAS_BLOOD_BIBLE;		effectClassSend = (Effect::EffectClass)((int)Effect::EFFECT_CLASS_HAS_BLOOD_BIBLE + itemtype);		EffectHasRelic* pEffect = new EffectHasBloodBible(pCreature);		//pEffect->setNextTime( 1*10 );	// 10檬 饶		pEffect->setTick( 1*60*10 );	// 1盒付促 皋技瘤 免仿		pEffect->setPart( itemtype );		pCreature->addEffect( pEffect );		pEffect->affect();	}	else if (itemclass == Item::ITEM_CLASS_CASTLE_SYMBOL)	{		effectClass = Effect::EFFECT_CLASS_HAS_CASTLE_SYMBOL;		effectClassSend = (Effect::EffectClass)((int)Effect::EFFECT_CLASS_HAS_CASTLE_SYMBOL + itemtype);		EffectHasRelic* pEffect = new EffectHasCastleSymbol(pCreature);		//pEffect->setNextTime( 1*10 );	// 10檬 饶		pEffect->setTick( 1*60*10 );	// 1盒付促 皋技瘤 免仿		pEffect->setPart( itemtype );		pCreature->addEffect( pEffect );		pEffect->affect();	}	else	{		return false;	}	pCreature->setFlag( effectClass );	// Effect嘿看促绊 舅妨霖促.	GCAddEffect gcAddEffect;	gcAddEffect.setObjectID( pCreature->getObjectID() );	gcAddEffect.setEffectID( effectClassSend );	gcAddEffect.setDuration( 65000 );	pCreature->getZone()->broadcastPacket(pCreature->getX(), pCreature->getY(), &gcAddEffect);	return true;	__END_CATCH}bool dropRelicToZone(PlayerCreature* pPC, Item* pItem)	throw (Error){	Zone* pZone = pPC->getZone();	Assert(pZone!=NULL);	// 老窜 酒捞袍阑 官蹿俊 冻绢哆赴促.	// 矫眉客 般磨 荐档 乐栏骨肺.. 某腐磐啊 绝绰 镑俊 冻绢哆赴促.	TPOINT pt = pZone->addItem( pItem, pPC->getX(), pPC->getY(), false );	if ( pt.x != -1 )           // 冻绢哆府绰单 己傍沁促搁	{		char pField[80];		sprintf(pField, "OwnerID='', Storage=%d, StorageID=%u, X=%d, Y=%d", STORAGE_ZONE, pZone->getZoneID(), pt.x, pt.y);		pItem->tinysave(pField);		// 牢亥配府俊辑 猾促.		//pInventory->deleteItem( pItem->getObjectID() );		deleteRelicEffect( pPC, pItem );		// Relic捞 冻绢柳 镑狼 沥焊甫 拼拼洒 舅妨林档废 茄促./*		if (!pItem->isFlag( Effect::EFFECT_CLASS_RELIC_POSITION))		{			EffectRelicPosition* pPosition = new EffectRelicPosition(pItem);			//pPosition->setNextTime(10);     // 1檬 饶 皋技瘤 谎赴促.			pPosition->setTick( 1*60*10 );  // 1盒付促 茄锅究 舅赴促.			pPosition->setZoneID( pZone->getZoneID() );			pPosition->setX( pt.x );			pPosition->setY( pt.y );			pPosition->setPart( pItem->getItemType() );			pItem->setFlag( Effect::EFFECT_CLASS_RELIC_POSITION );			pItem->getEffectManager().addEffect( pPosition );			pPosition->affect();		}*/		// 傈眉 荤侩磊俊霸 Relic 捞 冻绢脸促绰 皋矫瘤甫 焊辰促.		/*		ZoneInfo* pZoneInfo = g_pZoneInfoManager->getZoneInfo( pZone->getZoneID() );		Assert( pZoneInfo != NULL );		StringStream msg;		msg << pRelicInfo->getName() << " 己拱捞 " << pZoneInfo->getFullName() << " ( " << pt.x << " , " << pt.y << " ) 俊 冻绢脸嚼聪促.";		GCSystemMessage message;		message.setMessage( msg.toString() );		g_pZoneGroupManager->broadcast( &message );		*/		if (!pItem->isFlag( Effect::EFFECT_CLASS_RELIC_LOCK ))		{			EffectRelicLock* pLock = new EffectRelicLock(pItem);			pLock->setDeadline( 10*10 ); // 10檬			pItem->setFlag( Effect::EFFECT_CLASS_RELIC_LOCK );			pItem->getEffectManager().addEffect( pLock );		}	}	else	{		throw Error("Logout窍绰单 己拱 冻绢哆副 磊府啊 绝促");		//return false;	}	return true;}bool dropRelicToZone(Creature* pCreature, bool bSendPacket)	throw (Error){	__BEGIN_TRY	bool bDrop = false;	///////////////////////////////////////////////////////////////////	// 磷阑 锭 Relic Item阑 啊瘤绊 乐促搁 官蹿俊 冻绢哆赴促.	///////////////////////////////////////////////////////////////////	if ( pCreature->hasRelicItem())	{		PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature);		Assert( pPC != NULL );		// mouse俊 relic捞 乐绰瘤 眉农		Item* pSlotItem = pPC->getExtraInventorySlotItem();		if (pSlotItem!=NULL 			&& isRelicItem( pSlotItem ))		{			if (dropRelicToZone( pPC, pSlotItem ))			{				pPC->deleteItemFromExtraInventorySlot();				// player狼 mouse俊辑 力芭茄促.				// client俊辑 捞 菩哦阑 罐栏搁				// mouse俊辑档 窃 眉农秦林霸 沁促.				if (bSendPacket)				{					GCDeleteInventoryItem gcDeleteInventoryItem;					gcDeleteInventoryItem.setObjectID( pSlotItem->getObjectID() );					pPC->getPlayer()->sendPacket( &gcDeleteInventoryItem );				}				bDrop = true;			}		}		Zone* pZone = pPC->getZone();		Assert( pZone != NULL );		Inventory* pInventory = pPC->getInventory();		Assert( pInventory != NULL );				ZoneInfo* pZoneInfo = g_pZoneInfoManager->getZoneInfo( pZone->getZoneID() );		Assert( pZoneInfo != NULL );		// 牢亥配府俊辑 Relic Item阑 茫酒夯促.		for ( CoordInven_t y = 0; y < pInventory->getHeight(); y++ )		{			for ( CoordInven_t x = 0; x < pInventory->getWidth(); x++ )			{				Item* pItem = pInventory->getItem( x, y );				if ( pItem != NULL 					&& isRelicItem( pItem ))				{					// 老窜 酒捞袍阑 官蹿俊 冻绢哆赴促.					if (dropRelicToZone(pPC, pItem))					{						// 牢亥配府俊辑 猾促.						pInventory->deleteItem( pItem->getObjectID() );						// player狼 inventory俊辑 力芭茄促.						if (bSendPacket)						{							GCDeleteInventoryItem gcDeleteInventoryItem;							gcDeleteInventoryItem.setObjectID( pItem->getObjectID() );							pPC->getPlayer()->sendPacket( &gcDeleteInventoryItem );						}						bDrop = true;					}				}			}		}	}	return bDrop;	__END_CATCH}// 矫眉俊辑 RelicItem捞 唱坷绰巴 贸府booldissectionRelicItem( Corpse* pCorpse, Item* pItem, const TPOINT& pt )	throw (Error){	__BEGIN_TRY	if (!isRelicItem( pItem ))		return false;	switch (pItem->getItemClass())	{		//----------------------------------------------------------------------				//		// 							Relic		//		//----------------------------------------------------------------------				case Item::ITEM_CLASS_RELIC :		{			// 父距 酒捞袍捞 窍唱档 巢瘤 臼疽促搁(付瘤阜 酒捞袍捞菌促搁, EffectRelic阑 昏力秦 霖促)			try {				int relicIndex = pItem->getItemType();				const RelicInfo* pRelicInfo = dynamic_cast<RelicInfo*>(g_pRelicInfoManager->getItemInfo( pItem->getItemType() ) );				deleteRelicEffect( pCorpse, pItem );				g_pCombatInfoManager->setRelicOwner(relicIndex, CombatInfoManager::RELIC_OWNER_NULL);                char msg[50];                sprintf( msg, g_pStringPool->c_str( STRID_RELIC_FROM_RELIC_TABLE ),                                pRelicInfo->getName().c_str() );//				StringStream msg;//				msg << "己拱 焊包措俊辑 "//					<< "己拱(" << pRelicInfo->getName() << ")捞 唱吭嚼聪促.";				GCSystemMessage gcSystemMessage;				gcSystemMessage.setMessage( msg );				g_pZoneGroupManager->broadcast( &gcSystemMessage );				// relic捞 己拱焊包措俊辑 狐廉唱吭扁 锭巩俊				// 焊呈胶/菩澄萍甫 促矫 炼沥秦霖促.				g_pCombatInfoManager->computeModify();			} catch (Throwable& t) {				cout << t.toString().c_str() << endl;				throw;			}		}		return true;		//----------------------------------------------------------------------				//		// 							BloodBible		//		//----------------------------------------------------------------------				case Item::ITEM_CLASS_BLOOD_BIBLE :		{			//deleteRelicEffect( pCorpse, pItem );			const BloodBibleInfo* pBloodBibleInfo = dynamic_cast<BloodBibleInfo*>(g_pBloodBibleInfoManager->getItemInfo( pItem->getItemType() ) );//			StringStream msg;//			msg << "乔狼 己辑 炼阿(" << pBloodBibleInfo->getName() << ")捞 唱吭嚼聪促.";			char msg[200];			sprintf( msg, g_pStringPool->c_str( STRID_BLOOD_BIBLE_FROM_SHRINE ),							pBloodBibleInfo->getName().c_str() );			GCSystemMessage gcSystemMessage;			gcSystemMessage.setMessage( msg );			//g_pZoneGroupManager->broadcast( &gcSystemMessage );			g_pHolyLandManager->broadcast( &gcSystemMessage );			// 己辑 炼阿 酒捞袍 困摹 函版			if (!pItem->isFlag( Effect::EFFECT_CLASS_RELIC_POSITION))			{				EffectRelicPosition* pPosition = new EffectRelicPosition(pItem);				//pPosition->setNextTime(10);     // 1檬 饶 皋技瘤 谎赴促.				pPosition->setTick( 1*60*10 );  // 1盒付促 茄锅究 舅赴促.				pPosition->setZoneID( pCorpse->getZone()->getZoneID() );				pPosition->setX( pt.x );				pPosition->setY( pt.y );				pPosition->setPart( pItem->getItemType() );				pItem->setFlag( Effect::EFFECT_CLASS_RELIC_POSITION );				pItem->getEffectManager().addEffect( pPosition );				pPosition->affect();			}		}		return true;		//----------------------------------------------------------------------				//		// 							CastleSymbol		//		//----------------------------------------------------------------------				case Item::ITEM_CLASS_CASTLE_SYMBOL :		{			//deleteRelicEffect( pCorpse, pItem );			const CastleSymbolInfo* pCastleSymbolInfo = dynamic_cast<const CastleSymbolInfo*>(g_pCastleSymbolInfoManager->getItemInfo( pItem->getItemType() ) );			if ( pCastleSymbolInfo != NULL )			{//				StringStream msg;//				msg << "己 惑隆拱(" << pCastleSymbolInfo->getName() << ")捞 唱吭嚼聪促.";				char msg[200];				sprintf( msg, g_pStringPool->c_str( STRID_CASTLE_SYMBOL_FROM_SHRINE ),								pCastleSymbolInfo->getName().c_str() );				GCSystemMessage gcSystemMessage;				gcSystemMessage.setMessage( msg );				//g_pZoneGroupManager->broadcast( &gcSystemMessage );				g_pCastleInfoManager->broadcastShrinePacket( pItem->getItemType(), &gcSystemMessage );				// 己辑 炼阿 酒捞袍 困摹 函版				if (!pItem->isFlag( Effect::EFFECT_CLASS_RELIC_POSITION))				{					EffectRelicPosition* pPosition = new EffectRelicPosition(pItem);					//pPosition->setNextTime(10);     // 1檬 饶 皋技瘤 谎赴促.					pPosition->setTick( 1*60*10 );  // 1盒付促 茄锅究 舅赴促.					pPosition->setZoneID( pCorpse->getZone()->getZoneID() );					pPosition->setX( pt.x );					pPosition->setY( pt.y );					pPosition->setPart( pItem->getItemType() );					pItem->setFlag( Effect::EFFECT_CLASS_RELIC_POSITION );					pItem->getEffectManager().addEffect( pPosition );					pPosition->affect();				}			}		}		return true;		default :			return false;	}	return false;	__END_CATCH}// Relic捞 pCorpse俊辑 绢凋啊肺 warp登菌促绊 且锭// pCorpse俊 Effect甫 嘿咯霖促.voidsendRelicWarpEffect(Corpse* pCorpse)	throw (Error){	__BEGIN_TRY	Assert(pCorpse!=NULL);	if (pCorpse->isFlag(Effect::EFFECT_CLASS_SHRINE_GUARD))	{		sendBloodBibleEffect( pCorpse, Effect::EFFECT_CLASS_SHRINE_GUARD_WARP );	}	else if (pCorpse->isFlag(Effect::EFFECT_CLASS_SHRINE_HOLY))	{		sendBloodBibleEffect( pCorpse, Effect::EFFECT_CLASS_SHRINE_HOLY_WARP );	}	else 	{		ZoneID_t relicZoneID = pCorpse->getZone()->getZoneID();		ZoneID_t castleZoneID;		bool isCastle = g_pCastleInfoManager->getCastleZoneID( relicZoneID, castleZoneID );		if (!isCastle)			return;		CastleInfo* pCastleInfo = g_pCastleInfoManager->getCastleInfo( castleZoneID );		Assert( pCastleInfo != NULL );		if (pCastleInfo->getRace()==RACE_SLAYER)		{			sendBloodBibleEffect( pCorpse, Effect::EFFECT_CLASS_CASTLE_SHRINE_SLAYER_WARP );		}		else		{			sendBloodBibleEffect( pCorpse, Effect::EFFECT_CLASS_CASTLE_SHRINE_VAMPIRE_WARP );		}	}	__END_CATCH}

⌨️ 快捷键说明

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