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

📄 effectspiritguard.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
字号:
//////////////////////////////////////////////////////////////////////////////// Filename    : EffectSpiritGuard.cpp// Written by  : bezz//////////////////////////////////////////////////////////////////////////////#include "EffectSpiritGuard.h"#include "Slayer.h"#include "Vampire.h"#include "Monster.h"#include "GamePlayer.h"#include "PCFinder.h"#include "ZoneUtil.h"#include "ZoneInfoManager.h"#include "SkillUtil.h"#include "Gpackets/GCRemoveEffect.h"#include "Gpackets/GCAddEffectToTile.h"#include "Gpackets/GCSkillToObjectOK2.h"#include "Gpackets/GCSkillToObjectOK4.h"#include "Gpackets/GCStatusCurrentHP.h"#include "SkillInfo.h"#include "SkillSlot.h"////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////EffectSpiritGuard::EffectSpiritGuard(Creature* pCreature)	throw(Error){	__BEGIN_TRY	setTarget(pCreature);	__END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void EffectSpiritGuard::affect()	throw(Error){	__BEGIN_TRY	Creature* pCreature = dynamic_cast<Creature*>(m_pTarget);	// by Sequoia	if ( pCreature != NULL )	{		affect(pCreature);	}		__END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void EffectSpiritGuard::affect(Creature* pCastCreature)	throw(Error){	__BEGIN_TRY	Assert(pCastCreature != NULL);	if ( !pCastCreature->isSlayer() )		return;	Player* pPlayer = dynamic_cast<Player*>(pCastCreature->getPlayer());	Assert( pPlayer != NULL );	Slayer* pSlayer = dynamic_cast<Slayer*>(pCastCreature);	Assert( pSlayer != NULL );	SkillInfo* pSkillInfo = g_pSkillInfoManager->getSkillInfo( SKILL_SPIRIT_GUARD );	if ( pSkillInfo == NULL )	{		return;	}	GCModifyInformation gcAttackerMI;	Zone* pZone = pCastCreature->getZone();	Assert( pZone != NULL );	VSRect rect( 0, 0, pZone->getWidth()-1, pZone->getHeight()-1 );	ZoneCoord_t Cx = pCastCreature->getX();	ZoneCoord_t Cy = pCastCreature->getY();	bool isHit = false;	for ( int x=-1; x<=1; x++ )	{		for ( int y=-1; y<=1; y++ )		{			if ( x == 0 && y == 0 ) continue;			int X = Cx + x;			int Y = Cy + y;			if ( !rect.ptInRect( X, Y ) ) continue;			// 鸥老救俊 粮犁窍绰 坷宏璃飘甫 啊廉柯促.			Tile& tile = pZone->getTile( X, Y );			if( tile.hasCreature(Creature::MOVE_MODE_WALKING) )			{				Creature* pCreature = tile.getCreature(Creature::MOVE_MODE_WALKING);				Assert( pCreature != NULL );				// 磊脚篮 嘎瘤 臼绰促. 公利档 救 嘎绰促. 浇饭捞绢档 救 嘎蠢促.				// 救傈瘤措 眉农				// 2003.1.10 by bezz, Sequoia				if ( pCreature == m_pTarget				  || pCreature->isFlag( Effect::EFFECT_CLASS_NO_DAMAGE )				  || pCreature->isFlag( Effect::EFFECT_CLASS_COMA )				  || pCreature->isSlayer() 				  || pCreature->isNPC()				  || !checkZoneLevelToHitTarget(pCreature)				)				{					continue;				}				isHit = true;				if ( pCreature->isVampire() || pCreature->isOusters() )				{//					Vampire* pVampire = dynamic_cast<Vampire*>(pCreature);					GCModifyInformation gcMI;					::setDamage( pCreature, m_Damage, pCastCreature, SKILL_SPIRIT_GUARD, &gcMI, &gcAttackerMI );					pCreature->getPlayer()->sendPacket( &gcMI );					// 嘎绰 悼累阑 焊咯霖促.					GCSkillToObjectOK2 gcSkillToObjectOK2;					gcSkillToObjectOK2.setObjectID( 1 );    // 狼固 绝促.					gcSkillToObjectOK2.setSkillType( SKILL_ATTACK_MELEE );					gcSkillToObjectOK2.setDuration(0);					pCreature->getPlayer()->sendPacket(&gcSkillToObjectOK2);				}				else if ( pCreature->isMonster() )				{					Monster* pMonster = dynamic_cast<Monster*>(pCreature);					::setDamage( pMonster, m_Damage, pCastCreature, SKILL_SPIRIT_GUARD, NULL, &gcAttackerMI );					pMonster->addEnemy( pCastCreature );				}				else Assert(false);				GCSkillToObjectOK4 gcSkillToObjectOK4;				gcSkillToObjectOK4.setSkillType( SKILL_ATTACK_MELEE );				gcSkillToObjectOK4.setTargetObjectID( pCreature->getObjectID() );				gcSkillToObjectOK4.setDuration(0);				pZone->broadcastPacket( X, Y, &gcSkillToObjectOK4, pCreature );			}		}	}	if ( isHit )	{		SkillDomainType_t DomainType = pSkillInfo->getDomainType();		SkillSlot* pSkillSlot = pSlayer->getSkill( SKILL_SPIRIT_GUARD );		if ( pSkillSlot != NULL )		{			increaseDomainExp(pSlayer, DomainType, pSkillInfo->getPoint(), gcAttackerMI);			increaseSkillExp(pSlayer, DomainType, pSkillSlot, pSkillInfo, gcAttackerMI);		}	}	setNextTime( m_Delay );	__END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void EffectSpiritGuard::unaffect(Creature* pCreature)	throw(Error){	__BEGIN_TRY		// cout << "EffectSpiritGuard " << "unaffect BEGIN" << endl;	Assert(pCreature != NULL);	if ( !pCreature->isSlayer() )		return;	Player* pPlayer = dynamic_cast<Player*>(pCreature->getPlayer());	Assert( pPlayer != NULL );	Zone* pZone = pCreature->getZone();	Assert( pZone != NULL );	// Effect甫 绝局绊 舅赴促.	pCreature->removeFlag( Effect::EFFECT_CLASS_SPIRIT_GUARD_1 );	GCRemoveEffect gcRemoveEffect;	gcRemoveEffect.setObjectID( pCreature->getObjectID() );	gcRemoveEffect.addEffectList( m_EffectClass );	pPlayer->sendPacket( &gcRemoveEffect );	pZone->broadcastPacket( pCreature->getX(), pCreature->getY(), &gcRemoveEffect, pCreature );	__END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void EffectSpiritGuard::unaffect()	throw(Error){	__BEGIN_TRY	Creature* pCreature = dynamic_cast<Creature*>(m_pTarget);	// by Sequoia	if ( pCreature != NULL )	{		unaffect(pCreature);	}		__END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void EffectSpiritGuard::setLevel(SkillLevel_t Level){	if( Level <= GRADE_ADEPT_LIMIT_LEVEL ) m_EffectClass = EFFECT_CLASS_SPIRIT_GUARD_1;	else if( Level <= GRADE_EXPERT_LIMIT_LEVEL ) m_EffectClass = EFFECT_CLASS_SPIRIT_GUARD_2;	else if( Level <= GRADE_MASTER_LIMIT_LEVEL ) m_EffectClass = EFFECT_CLASS_SPIRIT_GUARD_3;	else m_EffectClass = EFFECT_CLASS_SPIRIT_GUARD_4;}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////string EffectSpiritGuard::toString() const 	throw(){	__BEGIN_TRY	StringStream msg;	msg << "EffectSpiritGuard("		<< "Damage:" << (int)m_Damage		<< ", EffectClass:" << (int)m_EffectClass		<< ")";	return msg.toString();	__END_CATCH}

⌨️ 快捷键说明

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