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

📄 relicutil.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include "RelicUtil.h"#include "Zone.h"#include "Creature.h"#include "Corpse.h"#include "Effect.h"#include "BloodBible.h"#include "CastleSymbol.h"#include "Inventory.h"#include "Player.h"#include "PlayerCreature.h"#include "ZoneInfoManager.h"#include "ZoneGroupManager.h"#include "CombatInfoManager.h"#include "CastleInfoManager.h"#include "HolyLandManager.h"#include "StringPool.h"#include "EffectHasVampireRelic.h"#include "EffectHasSlayerRelic.h"#include "EffectHasBloodBible.h"#include "EffectHasCastleSymbol.h"#include "EffectRelicPosition.h"#include "EffectRelicLock.h"#include "Gpackets/GCSystemMessage.h"#include "Gpackets/GCAddEffect.h"#include "Gpackets/GCAddEffectToTile.h"#include "Gpackets/GCDeleteInventoryItem.h"#include <stdio.h>voidsendBloodBibleEffect( Object* pObject, Effect::EffectClass EClass )	throw (Error){	__BEGIN_TRY	Assert(pObject!=NULL);	switch (pObject->getObjectClass())	{		case Object::OBJECT_CLASS_CREATURE :		{			Creature* pCreature = dynamic_cast<Creature*>(pObject);			Assert(pCreature!=NULL);			GCAddEffect gcAddEffect;			gcAddEffect.setEffectID( EClass );			gcAddEffect.setObjectID( pCreature->getObjectID() );			pCreature->getZone()->broadcastPacket( pCreature->getX(), pCreature->getY(), &gcAddEffect );		}		break;		case Object::OBJECT_CLASS_ITEM :		{			Item* pItem = dynamic_cast<Item*>(pObject);			Assert(pItem!=NULL);			if ( pItem->getItemClass() == Item::ITEM_CLASS_CORPSE )			{				Corpse* pCorpse = dynamic_cast<Corpse*>(pItem);				Assert(pCorpse!=NULL);				GCAddEffect gcAddEffect;				gcAddEffect.setEffectID( EClass );				gcAddEffect.setObjectID( pCorpse->getObjectID() );				pCorpse->getZone()->broadcastPacket( pCorpse->getX(), pCorpse->getY(), &gcAddEffect );			}		}		break;		default :			return;	}	__END_CATCH}// 	萍葛福巢悼 // 			浇饭捞绢 ( 37, 163 ) //			轨颇捞绢 ( 193, 46 ) ////	酒淬狼 己瘤 悼<轨颇捞绢> ( 239, 134) //	酒淬狼 己瘤 辑<浇饭捞绢> ( 27, 133 ) voidsendHolyLandWarpEffect( Creature* pCreature ) 	throw (Error){	__BEGIN_TRY	Assert(pCreature!=NULL);	bool bSend = false;	Distance_t limitDist = 15;	Effect::EffectClass EClass;	ZoneID_t zoneID = pCreature->getZoneID();	ZoneCoord_t x, y;	if (pCreature->isSlayer()) 	{		const int maxHolyLandWarpSlayer = 1;		static ZONE_COORD HolyLandWarpSlayer[ maxHolyLandWarpSlayer ] = 		{			ZONE_COORD( 53, 37, 163 ), 	// 萍葛福 巢悼//			ZONE_COORD( 73, 27, 133 )	// 酒淬狼 己瘤 辑率		};		for (int i=0; i<maxHolyLandWarpSlayer; i++)		{			const ZONE_COORD& zoneCoord = HolyLandWarpSlayer[i];			x = zoneCoord.x;			y = zoneCoord.y;			if (zoneID == zoneCoord.id				&& pCreature->getDistance(x, y) < limitDist)			{				bSend = true;				break;			}		}		EClass = Effect::EFFECT_CLASS_WARP_HOLY_LAND_SLAYER;	} 	else if (pCreature->isVampire())	{		const int maxHolyLandWarpVampire = 1;		static ZONE_COORD HolyLandWarpVampire[ maxHolyLandWarpVampire ] = 		{			ZONE_COORD( 53, 193, 46 ),	// 萍葛福 巢悼//			ZONE_COORD( 71, 239, 134 )	// 酒淬狼 己瘤 悼率		};		for (int i=0; i<maxHolyLandWarpVampire; i++)		{			const ZONE_COORD& zoneCoord = HolyLandWarpVampire[i];			x = zoneCoord.x;			y = zoneCoord.y;			if (zoneID == zoneCoord.id				&& pCreature->getDistance(x, y) < limitDist)			{				bSend = true;				break;			}		}		EClass = Effect::EFFECT_CLASS_WARP_HOLY_LAND_VAMPIRE;	}	else if (pCreature->isOusters())	{		// 澜衬 攫哩啊 秦拎具 窃 ~_~		// 酒快胶磐令绰 酒淬狼 己瘤 绢叼俊 冻备瘤 ぱ.,ぱ		const int maxHolyLandWarpOusters = 1;		static ZONE_COORD HolyLandWarpOusters[ maxHolyLandWarpOusters ] = 		{			ZONE_COORD( 53, 160, 170 ),	// 萍葛福 巢悼//			ZONE_COORD( 72, 129, 112 )	// 酒淬狼 己瘤 吝居		};		for (int i=0; i<maxHolyLandWarpOusters; i++)		{			const ZONE_COORD& zoneCoord = HolyLandWarpOusters[i];			x = zoneCoord.x;			y = zoneCoord.y;			if (zoneID == zoneCoord.id				&& pCreature->getDistance(x, y) < limitDist)			{				bSend = true;				break;			}		}		EClass = Effect::EFFECT_CLASS_WARP_HOLY_LAND_OUSTERS;	}	if (bSend) 	{		GCAddEffectToTile gcAddEffectToTile;		gcAddEffectToTile.setEffectID( EClass );		gcAddEffectToTile.setObjectID( pCreature->getObjectID() );		gcAddEffectToTile.setXY( x, y );		gcAddEffectToTile.setDuration( 21 );		pCreature->getZone()->broadcastPacket( x, y, &gcAddEffectToTile );	}	__END_CATCH}bool addEffectRelicPosition( Item* pItem, ZoneID_t zoneID, TPOINT pt )	throw(Error){	__BEGIN_TRY	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( zoneID );		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;	}	return false;	__END_CATCH}booldeleteEffectRelicPosition( Item* pItem )	throw (Error){	__BEGIN_TRY	Assert(pItem!=NULL);	// EffectRelicPosition 力芭茄促.	// 己拱 焊包措俊 嘿绢乐带 Effect甫 力芭茄促.	if (pItem->isFlag(Effect::EFFECT_CLASS_RELIC_POSITION))	{		Effect* pPositionEffect = pItem->getEffectManager().findEffect(Effect::EFFECT_CLASS_RELIC_POSITION);		Assert(pPositionEffect != NULL);		pPositionEffect->unaffect();		pItem->removeFlag(Effect::EFFECT_CLASS_RELIC_POSITION);		pItem->getEffectManager().deleteEffect(Effect::EFFECT_CLASS_RELIC_POSITION);		return true;	}	return false;	__END_CATCH}// Corpse嘿篮 pItem苞 包访等 Effect甫 绝局霖促.booldeleteRelicEffect(Corpse* pCorpse, Item* pItem)	throw (Error){	__BEGIN_TRY	Assert(pCorpse!=NULL);	Assert(pItem!=NULL);	Effect::EffectClass EClass;	switch (pItem->getItemClass())	{		case Item::ITEM_CLASS_RELIC :		{			const RelicInfo* pRelicInfo = dynamic_cast<RelicInfo*>(g_pRelicInfoManager->getItemInfo( pItem->getItemType() ) );			Assert( pRelicInfo != NULL );			if ( pRelicInfo->relicType == RELIC_TYPE_SLAYER )				EClass = Effect::EFFECT_CLASS_HAS_SLAYER_RELIC;			else if ( pRelicInfo->relicType == RELIC_TYPE_VAMPIRE )				EClass = Effect::EFFECT_CLASS_HAS_VAMPIRE_RELIC;			else				throw Error("肋给等 Relic Item Type 涝聪促.");		}		break;		case Item::ITEM_CLASS_BLOOD_BIBLE :			EClass = Effect::EFFECT_CLASS_HAS_BLOOD_BIBLE;		break;		case Item::ITEM_CLASS_CASTLE_SYMBOL :			EClass = Effect::EFFECT_CLASS_HAS_CASTLE_SYMBOL;		break;		default :			return false;	}	pCorpse->removeFlag( EClass );	EffectManager& effectManager = pCorpse->getEffectManager();	Effect* pEffect = effectManager.findEffect( EClass );	if (pEffect!=NULL)	{		pEffect->unaffect();		effectManager.deleteEffect( EClass );	}	return true;	__END_CATCH}voidsaveItemInCorpse(Item* pItem, Corpse* pCorpse)	throw (Error){	__BEGIN_TRY	Assert(pItem!=NULL);	Assert(pCorpse!=NULL);	if (pItem->getItemClass()==Item::ITEM_CLASS_BLOOD_BIBLE		|| pItem->getItemClass()==Item::ITEM_CLASS_CASTLE_SYMBOL		|| pItem->isFlagItem() 		|| pItem->getItemClass()==Item::ITEM_CLASS_SWEEPER)	{		Zone* pZone = pCorpse->getZone();		Assert(pZone!=NULL);		char pField[80];		pZone->registerObject( pItem );		sprintf(pField, "ObjectID = %lu, OwnerID='%d', Storage=%d, StorageID=%lu", 						pItem->getObjectID(), (int)pZone->getZoneID(), (int)STORAGE_CORPSE, pCorpse->getObjectID());		pItem->tinysave( pField );	}	__END_CATCH}bool isRelicItem(const Item* pItem){	if (pItem!=NULL)	{		Item::ItemClass IClass = pItem->getItemClass();		return isRelicItem( IClass );	}	return false;}bool isRelicItem(Item::ItemClass IClass){	if (IClass==Item::ITEM_CLASS_RELIC		|| IClass==Item::ITEM_CLASS_BLOOD_BIBLE		|| IClass==Item::ITEM_CLASS_CASTLE_SYMBOL)	{		return true;	}	return false;}// Zone俊 乐绰 pCorpse啊 pItem阑 啊瘤绊 乐促.booladdHasRelicEffect(Zone* pZone, Corpse* pCorpse, Item* pItem)	throw (Error){	__BEGIN_TRY			if (pZone==NULL) return false;		Assert(pCorpse!=NULL);	Assert(pItem!=NULL);	EffectHasRelic* pRelicEffect = NULL;	// 己窜捞 己辑甫 啊瘤绊 乐促绰 钎矫	switch (pItem->getItemClass())	{		case Item::ITEM_CLASS_BLOOD_BIBLE :		{			pRelicEffect = new EffectHasBloodBible( pCorpse );		}		break;		case Item::ITEM_CLASS_CASTLE_SYMBOL :		{			pRelicEffect = new EffectHasCastleSymbol( pCorpse );		}		break;		default :			return false;	}	pRelicEffect->setZone( pZone );	pRelicEffect->setXY( pCorpse->getX(), pCorpse->getY() );	//pRelicEffect->setNextTime( 1*10 );   // 1檬 饶	pRelicEffect->setTick( 1*60*10 );    // 1盒付促 皋技瘤 免仿	pRelicEffect->setPart( pItem->getItemType() );	pRelicEffect->affect();	EffectManager& effectManager = pCorpse->getEffectManager();	pCorpse->setFlag( pRelicEffect->getEffectClass() );	effectManager.addEffect( pRelicEffect );	// 捞棋飘甫 嘿咯林扼绊 茄促.	GCAddEffect gcAddEffect;	gcAddEffect.setObjectID( pCorpse->getObjectID() );	gcAddEffect.setEffectID( pRelicEffect->getSendEffectClass() );	gcAddEffect.setDuration( 65000 );	pZone->broadcastPacket(pCorpse->getX(), pCorpse->getY(), &gcAddEffect);	return true;	__END_CATCH}bool deleteRelicEffect(Creature* pCreature, Item* pItem) 	throw (Error){	__BEGIN_TRY	Assert(pItem!=NULL);	Assert(pCreature!=NULL);	Effect::EffectClass effectClass;	if (pItem->getItemClass()==Item::ITEM_CLASS_RELIC)	{		const RelicInfo* pRelicInfo = dynamic_cast<RelicInfo*>(g_pRelicInfoManager->getItemInfo( pItem->getItemType() ) );		Assert( pRelicInfo != NULL );		if ( pRelicInfo->relicType == RELIC_TYPE_SLAYER )			effectClass = Effect::EFFECT_CLASS_HAS_SLAYER_RELIC;		else if ( pRelicInfo->relicType == RELIC_TYPE_VAMPIRE )			effectClass = Effect::EFFECT_CLASS_HAS_VAMPIRE_RELIC;		else			throw Error("肋给等 Relic Item Type 涝聪促.");	}	else if (pItem->getItemClass()==Item::ITEM_CLASS_BLOOD_BIBLE)	{		effectClass = Effect::EFFECT_CLASS_HAS_BLOOD_BIBLE;	}	else if (pItem->getItemClass()==Item::ITEM_CLASS_CASTLE_SYMBOL)	{		effectClass = Effect::EFFECT_CLASS_HAS_CASTLE_SYMBOL;	}

⌨️ 快捷键说明

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