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

📄 causecriticalwounds.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
字号:
//////////////////////////////////////////////////////////////////////////////// Filename    : CauseCriticalWounds.cpp// Written by  : // Description : //////////////////////////////////////////////////////////////////////////////#include "CauseCriticalWounds.h"#include "EffectCauseCriticalWounds.h"#include "RankBonus.h"#include "Gpackets/GCSkillToObjectOK1.h"#include "Gpackets/GCSkillToObjectOK2.h"#include "Gpackets/GCSkillToObjectOK3.h"#include "Gpackets/GCSkillToObjectOK4.h"#include "Gpackets/GCSkillToObjectOK5.h"#include "Gpackets/GCSkillToObjectOK6.h"#include "Gpackets/GCAddEffect.h"#include "SimpleMissileSkill.h"//////////////////////////////////////////////////////////////////////////////// 浇饭捞绢 坷宏璃飘 勤甸矾//////////////////////////////////////////////////////////////////////////////void CauseCriticalWounds::execute(Slayer* pSlayer, ObjectID_t TargetObjectID, SkillSlot * pSkillSlot, CEffectID_t CEffectID)	throw(Error){	__BEGIN_TRY	//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " Begin(slayer)" << endl;	Assert( pSlayer != NULL );	Assert( pSkillSlot != NULL );	try {		Player* pPlayer = pSlayer->getPlayer();		Zone* pZone = pSlayer->getZone();		Assert( pPlayer != NULL );		Assert( pZone != NULL );		Creature* pTargetCreature = pZone->getCreature( TargetObjectID );		// NPC 甫 傍拜且 荐 绝促		// 搁开捞芭唱.. by sigi. 2002.9.13		// NoSuch力芭. by sigi. 2002.5.5		if ( pTargetCreature==NULL			|| pTargetCreature->isFlag(Effect::EFFECT_CLASS_IMMUNE_TO_PARALYZE)			|| pTargetCreature->isFlag(Effect::EFFECT_CLASS_NO_DAMAGE) // by sigi. 2002.10.30			|| pTargetCreature->isNPC() )		{			executeSkillFailException( pSlayer, getSkillType() );			return;		}		SkillType_t SkillType = pSkillSlot->getSkillType();		SkillInfo* pSkillInfo = g_pSkillInfoManager->getSkillInfo( SkillType );		SkillDomainType_t DomainType = pSkillInfo->getDomainType();		Tile& rTile = pZone->getTile( pTargetCreature->getX(), pTargetCreature->getY() );		// 胶懦 荤侩捞 啊瓷茄瘤 眉农茄促		int	RequiredMP = (int)pSkillInfo->getConsumeMP();		bool bManaCheck = hasEnoughMana( pSlayer, RequiredMP );		bool bTimeCheck = verifyRunTime( pSkillSlot );		bool bRangeCheck = verifyDistance( pSlayer, pTargetCreature, pSkillInfo->getRange() );		bool bHitRoll = HitRoll::isSuccessMagic( pSlayer, pSkillInfo, pSkillSlot );		bool bCanHit = canHit( pSlayer, pTargetCreature, SkillType );		bool bEffected = pTargetCreature->isFlag( Effect::EFFECT_CLASS_CAUSE_CRITICAL_WOUNDS ) || rTile.getEffect(Effect::EFFECT_CLASS_TRYING_POSITION)!=NULL;		bool bPK = verifyPK( pSlayer, pTargetCreature );		if ( bManaCheck && bTimeCheck && bRangeCheck && bHitRoll && bCanHit && !bEffected && bPK )		{			// packet			GCSkillToObjectOK1 _GCSkillToObjectOK1;			GCSkillToObjectOK2 _GCSkillToObjectOK2;			GCSkillToObjectOK3 _GCSkillToObjectOK3;			GCSkillToObjectOK4 _GCSkillToObjectOK4;			GCSkillToObjectOK5 _GCSkillToObjectOK5;			GCSkillToObjectOK6 _GCSkillToObjectOK6;			ZoneCoord_t prayerX = pSlayer->getX();			ZoneCoord_t prayerY = pSlayer->getY();			ZoneCoord_t targetX = pTargetCreature->getX();			ZoneCoord_t targetY = pTargetCreature->getY();			// 胶懦狼 damage, delay, duration阑 拌魂			SkillInput input( pSlayer, pSkillSlot );			SkillOutput output;			computeOutput( input, output );			// Soul Smashing 捞 乐促搁 单固瘤 10% 刘啊			if ( pSlayer->hasRankBonus( RankBonus::RANK_BONUS_SOUL_SMASHING ) )			{				RankBonus* pRankBonus = pSlayer->getRankBonus( RankBonus::RANK_BONUS_SOUL_SMASHING );				Assert( pRankBonus != NULL );				output.Damage += pRankBonus->getPoint();			}			// 付唱甫 临牢促			decreaseMana( pSlayer, RequiredMP, _GCSkillToObjectOK1 );			// 单固瘤甫 啊窍绊, 郴备档甫 冻绢哆赴促. 傍拜措惑捞 浇饭捞绢啊 酒聪骨肺 alignment, PK 眉农且 鞘夸啊 绝促			setDamage( pTargetCreature, output.Damage, pSlayer, SkillType, &_GCSkillToObjectOK2, &_GCSkillToObjectOK1 );			computeAlignmentChange( pTargetCreature, output.Damage, pSlayer, &_GCSkillToObjectOK2, &_GCSkillToObjectOK1 );			decreaseDurability( pSlayer, pTargetCreature, 1, &_GCSkillToObjectOK1, &_GCSkillToObjectOK2 );			// 鸥百捞 浇饭捞绢啊 酒囱 版快俊父			// 版氰摹甫 棵赴促			// Effect甫 嘿牢促			// Effect甫 宏肺靛 某胶泼 茄促			if ( !pTargetCreature->isSlayer() )			{				SkillGrade Grade = g_pSkillInfoManager->getGradeByDomainLevel( pSlayer->getSkillDomainLevel( DomainType ) );				Exp_t ExpUp = 10 * ( Grade + 1 );				shareAttrExp( pSlayer, ExpUp, 1, 1, 8, _GCSkillToObjectOK1 );				increaseDomainExp( pSlayer, DomainType, pSkillInfo->getPoint(), _GCSkillToObjectOK1 );				increaseSkillExp( pSlayer, DomainType, pSkillSlot, pSkillInfo, _GCSkillToObjectOK1 );				increaseAlignment( pSlayer, pTargetCreature, _GCSkillToObjectOK1 );				// Effect甫 积己秦辑 嘿牢促				EffectCauseCriticalWounds* pEffectCauseCriticalWounds = new EffectCauseCriticalWounds( pTargetCreature );				pEffectCauseCriticalWounds->setDeadline( output.Duration );				pTargetCreature->addEffect( pEffectCauseCriticalWounds );				pTargetCreature->setFlag( Effect::EFFECT_CLASS_CAUSE_CRITICAL_WOUNDS );				// Effect 甫 宏肺靛 某胶泼 茄促				GCAddEffect gcAddEffect;				gcAddEffect.setObjectID( pTargetCreature->getObjectID() );				gcAddEffect.setEffectID( Effect::EFFECT_CLASS_CAUSE_CRITICAL_WOUNDS );				gcAddEffect.setDuration( output.Duration );				pZone->broadcastPacket( targetX, targetY, &gcAddEffect );			}			else // 浇饭捞绢 老 版快			{				// 浇饭捞绢 老 版快 Duration阑 0栏肺 技泼茄促. 付厚绰 窍瘤 臼绊 单固瘤父 利侩茄促.				output.Duration = 0;			}			bool bCanSeePrayer = canSee( pTargetCreature, pSlayer );			// 胶懦阑 荤侩茄 荤恩俊霸			_GCSkillToObjectOK1.setSkillType( SkillType );			_GCSkillToObjectOK1.setCEffectID( CEffectID );			_GCSkillToObjectOK1.setTargetObjectID( TargetObjectID );			_GCSkillToObjectOK1.setDuration( output.Duration );			// 胶懦狼 措惑磊俊霸			_GCSkillToObjectOK2.setObjectID( pSlayer->getObjectID() );			_GCSkillToObjectOK2.setSkillType( SkillType );			_GCSkillToObjectOK2.setDuration( output.Duration );			// 胶懦阑 荤侩茄 荤恩父 杭 荐 乐绰 荤恩俊霸			_GCSkillToObjectOK3.setObjectID( pSlayer->getObjectID() );			_GCSkillToObjectOK3.setSkillType( SkillType );			_GCSkillToObjectOK3.setTargetXY( targetX, targetY );			// 胶懦狼 措惑磊父 阂 荐 乐绰 荤恩俊霸			_GCSkillToObjectOK4.setSkillType( SkillType );			_GCSkillToObjectOK4.setTargetObjectID( TargetObjectID );			// 胶懦 荤侩磊客 措惑磊 葛滴 杭 荐 乐绰 荤恩俊霸			_GCSkillToObjectOK5.setObjectID( pSlayer->getObjectID() );			_GCSkillToObjectOK5.setTargetObjectID( TargetObjectID );			_GCSkillToObjectOK5.setSkillType( SkillType );			_GCSkillToObjectOK5.setDuration( output.Duration );			// 胶懦 措惑磊啊 胶懦 荤侩磊甫 杭 荐 绝阑 锭			_GCSkillToObjectOK6.setXY( prayerX, prayerY );			_GCSkillToObjectOK6.setSkillType( SkillType );			_GCSkillToObjectOK6.setDuration( output.Duration );			pPlayer->sendPacket( &_GCSkillToObjectOK1 );			if ( pTargetCreature->isPC() )			{				Player* pTargetPlayer = pTargetCreature->getPlayer();				Assert( pTargetPlayer != NULL );				if ( bCanSeePrayer )					pTargetPlayer->sendPacket( &_GCSkillToObjectOK2 );				else					pTargetPlayer->sendPacket( &_GCSkillToObjectOK6 );			}			else			{				Monster* pTargetMonster = dynamic_cast<Monster*>(pTargetCreature);				Assert( pTargetMonster != NULL );				pTargetMonster->addEnemy( pSlayer );			}			list<Creature*> cList;			cList.push_back( pSlayer );			cList.push_back( pTargetCreature );			cList = pZone->broadcastSkillPacket( prayerX, prayerY, targetX, targetY, &_GCSkillToObjectOK5, cList );			pZone->broadcastPacket( prayerX, prayerY, &_GCSkillToObjectOK3, cList );			pZone->broadcastPacket( targetX, targetY, &_GCSkillToObjectOK4, cList );			pSkillSlot->setRunTime( output.Delay );		}		else		{			executeSkillFailNormal( pSlayer, getSkillType(), pTargetCreature );		}	}	catch ( Throwable& t )	{		executeSkillFailException( pSlayer, getSkillType() );	}	//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End(slayer)" << endl;	__END_CATCH}CauseCriticalWounds g_CauseCriticalWounds;

⌨️ 快捷键说明

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