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

📄 acideruption.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
字号:
//////////////////////////////////////////////////////////////////////////////// Filename    : AcidEruption.cpp// Written by  : excel96// Description : //////////////////////////////////////////////////////////////////////////////#include "AcidEruption.h"#include "RankBonus.h"#include "EffectAcidEruption.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"//////////////////////////////////////////////////////////////////////////////// 轨颇捞绢 坷宏璃飘 勤甸矾//////////////////////////////////////////////////////////////////////////////void AcidEruption::execute(Vampire* pVampire, ObjectID_t TargetObjectID, VampireSkillSlot* pVampireSkillSlot, CEffectID_t CEffectID)	throw(Error){	__BEGIN_TRY	Assert(pVampire != NULL);	Assert(pVampireSkillSlot != NULL);	try 	{		Player* pPlayer = pVampire->getPlayer();		Zone* pZone = pVampire->getZone();		Assert(pPlayer != NULL);		Assert(pZone != NULL);		Creature* pTargetCreature = pZone->getCreature(TargetObjectID);		SkillType_t SkillType = pVampireSkillSlot->getSkillType();		// NPC绰 傍拜且 荐啊 绝促.		if (pTargetCreature==NULL			|| pTargetCreature->isFlag(Effect::EFFECT_CLASS_NO_DAMAGE)			|| pTargetCreature->isNPC())		{			executeSkillFailException(pVampire, SkillType);			return;		}		GCSkillToObjectOK1 _GCSkillToObjectOK1;		GCSkillToObjectOK2 _GCSkillToObjectOK2;		GCSkillToObjectOK3 _GCSkillToObjectOK3;		GCSkillToObjectOK4 _GCSkillToObjectOK4;		GCSkillToObjectOK5 _GCSkillToObjectOK5;		GCSkillToObjectOK6 _GCSkillToObjectOK6;		SkillInfo* pSkillInfo = g_pSkillInfoManager->getSkillInfo(SkillType);		int HitBonus = 0;		if ( pVampire->hasRankBonus( RankBonus::RANK_BONUS_KNOWLEDGE_OF_ACID ) )		{			RankBonus* pRankBonus = pVampire->getRankBonus( RankBonus::RANK_BONUS_KNOWLEDGE_OF_ACID );			Assert( pRankBonus != NULL );			HitBonus = pRankBonus->getPoint();		}		int  RequiredMP  = decreaseConsumeMP(pVampire, pSkillInfo);		bool bManaCheck  = hasEnoughMana(pVampire, RequiredMP);		bool bTimeCheck  = verifyRunTime(pVampireSkillSlot);		bool bRangeCheck = verifyDistance(pVampire, pTargetCreature, pSkillInfo->getRange());		bool bHitRoll    = HitRoll::isSuccessMagic(pVampire, pSkillInfo, pVampireSkillSlot, HitBonus);		bool bCanHit     = canHit(pVampire, pTargetCreature, SkillType);		bool bPK         = verifyPK(pVampire, pTargetCreature);		bool bEffected   = pTargetCreature->isFlag(Effect::EFFECT_CLASS_ACID_ERUPTION);		if (bManaCheck && bTimeCheck && bRangeCheck && bHitRoll && bCanHit && bPK && !bEffected)		{			ZoneCoord_t vampX   = pVampire->getX();			ZoneCoord_t vampY   = pVampire->getY();			ZoneCoord_t targetX = pTargetCreature->getX();			ZoneCoord_t targetY = pTargetCreature->getY();			decreaseMana(pVampire, RequiredMP, _GCSkillToObjectOK1);			bool bCanSeeCaster = canSee(pTargetCreature, pVampire);			SkillInput input(pVampire);			SkillOutput output;			computeOutput(input, output);			EffectAcidEruption* pEffect = new EffectAcidEruption( pTargetCreature );			pEffect->setDamage( computeMagicDamage( pTargetCreature, output.Damage, SKILL_ACID_ERUPTION, true ) );			pEffect->setTimes(5);			pEffect->setTick(5);			pEffect->setNextTime(5);			pEffect->setCasterOID( pVampire->getObjectID() );			pTargetCreature->addEffect( pEffect );			pTargetCreature->setFlag( pEffect->getEffectClass() );			_GCSkillToObjectOK1.setSkillType(SkillType);			_GCSkillToObjectOK1.setCEffectID(CEffectID);			_GCSkillToObjectOK1.setTargetObjectID(TargetObjectID);			_GCSkillToObjectOK1.setDuration(0);					_GCSkillToObjectOK2.setObjectID(pVampire->getObjectID());			_GCSkillToObjectOK2.setSkillType(SkillType);			_GCSkillToObjectOK2.setDuration(0);						_GCSkillToObjectOK3.setObjectID(pVampire->getObjectID());			_GCSkillToObjectOK3.setSkillType(SkillType);			_GCSkillToObjectOK3.setTargetXY(targetX, targetY);					_GCSkillToObjectOK4.setSkillType(SkillType);			_GCSkillToObjectOK4.setTargetObjectID(TargetObjectID);			_GCSkillToObjectOK5.setObjectID(pVampire->getObjectID());			_GCSkillToObjectOK5.setTargetObjectID(TargetObjectID);			_GCSkillToObjectOK5.setSkillType(SkillType);						_GCSkillToObjectOK6.setXY(vampX, vampY);			_GCSkillToObjectOK6.setSkillType(SkillType);			_GCSkillToObjectOK6.setDuration(0);			pPlayer->sendPacket(&_GCSkillToObjectOK1);					Player* pTargetPlayer = NULL;			if (pTargetCreature->isPC()) 			{				pTargetPlayer = pTargetCreature->getPlayer();				Assert(pTargetPlayer != NULL);				if (bCanSeeCaster) pTargetPlayer->sendPacket(&_GCSkillToObjectOK2);				else pTargetPlayer->sendPacket(&_GCSkillToObjectOK6);			} 			else 			{				Monster* pMonster = dynamic_cast<Monster*>(pTargetCreature);				pMonster->addEnemy(pVampire);			}			list<Creature*> cList;			cList.push_back(pVampire);			cList.push_back(pTargetCreature);			cList = pZone->broadcastSkillPacket(vampX, vampY, targetX, targetY, &_GCSkillToObjectOK5, cList);						pZone->broadcastPacket(vampX, vampY,  &_GCSkillToObjectOK3 , cList);			pZone->broadcastPacket(targetX, targetY,  &_GCSkillToObjectOK4 , cList);			pVampireSkillSlot->setRunTime(output.Delay);		}		else 		{			executeSkillFailNormal(pVampire, getSkillType(), pTargetCreature);		}	} 	catch (Throwable & t) 	{		executeSkillFailException(pVampire, getSkillType());	}	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// 阁胶磐 坷宏璃飘 勤甸矾//////////////////////////////////////////////////////////////////////////////void AcidEruption::execute(Monster* pMonster, Creature* pEnemy)	throw(Error){	__BEGIN_TRY	Assert(pMonster != NULL);	Assert(pEnemy != NULL);	try 	{		Zone* pZone = pMonster->getZone();		Assert(pZone != NULL);		GCSkillToObjectOK2 _GCSkillToObjectOK2;		GCSkillToObjectOK3 _GCSkillToObjectOK3;		GCSkillToObjectOK4 _GCSkillToObjectOK4;		GCSkillToObjectOK5 _GCSkillToObjectOK5;		GCSkillToObjectOK6 _GCSkillToObjectOK6;		SkillType_t SkillType  = getSkillType();		SkillInfo*  pSkillInfo = g_pSkillInfoManager->getSkillInfo(SkillType);		bool bRangeCheck = verifyDistance(pMonster, pEnemy, pSkillInfo->getRange());		bool bHitRoll    = HitRoll::isSuccessMagic(pMonster, pSkillInfo);		bool bEffected   = pEnemy->isFlag(Effect::EFFECT_CLASS_ACID_ERUPTION);		ZoneCoord_t vampX   = pMonster->getX();		ZoneCoord_t vampY   = pMonster->getY();		ZoneCoord_t targetX = pEnemy->getX();		ZoneCoord_t targetY = pEnemy->getY();		if (bRangeCheck && bHitRoll && !bEffected)		{			bool bCanSeeCaster = canSee(pEnemy, pMonster);			SkillInput input(pMonster);			SkillOutput output;			computeOutput(input, output);			Damage_t Damage = computeMagicDamage(pEnemy, output.Damage, SkillType);			// 捞棋飘 坷宏璃飘甫 积己秦辑 嘿牢促.			EffectAcidEruption* pEffectAcidEruption = new EffectAcidEruption(pEnemy);			pEffectAcidEruption->setDamage(Damage);			pEffectAcidEruption->setTick(5);			pEffectAcidEruption->setNextTime(5);			pEffectAcidEruption->setTimes(5);			pEffectAcidEruption->setCasterOID( pMonster->getObjectID() );			pEnemy->addEffect(pEffectAcidEruption);			pEnemy->setFlag( pEffectAcidEruption->getEffectClass() );			// 捞棋飘啊 嘿菌栏聪, 嘿菌促绊 宏肺靛某胶泼秦霖促./*			GCAddEffect gcAddEffect;			gcAddEffect.setObjectID(pEnemy->getObjectID());			gcAddEffect.setEffectID(pEffectAcidEruption->getSendEffectClass());			gcAddEffect.setDuration(output.Duration);			pZone->broadcastPacket(targetX, targetY, &gcAddEffect);*/			if (bCanSeeCaster)			{				decreaseDurability(pMonster, pEnemy, pSkillInfo->getPoint(), NULL, &_GCSkillToObjectOK2);			}			else			{				decreaseDurability(pMonster, pEnemy, pSkillInfo->getPoint(), NULL, &_GCSkillToObjectOK6);			}			_GCSkillToObjectOK2.setObjectID(pMonster->getObjectID());			_GCSkillToObjectOK2.setSkillType(SkillType);			_GCSkillToObjectOK2.setDuration(output.Duration);														_GCSkillToObjectOK3.setObjectID(pMonster->getObjectID());			_GCSkillToObjectOK3.setSkillType(SkillType);			_GCSkillToObjectOK3.setTargetXY(targetX, targetY);																		_GCSkillToObjectOK4.setSkillType(SkillType);			_GCSkillToObjectOK4.setTargetObjectID(pEnemy->getObjectID());			_GCSkillToObjectOK5.setObjectID(pMonster->getObjectID());			_GCSkillToObjectOK5.setTargetObjectID(pEnemy->getObjectID());			_GCSkillToObjectOK5.setSkillType(SkillType);			_GCSkillToObjectOK5.setDuration(output.Duration);			_GCSkillToObjectOK6.setXY(vampX, vampY);			_GCSkillToObjectOK6.setSkillType(SkillType);			_GCSkillToObjectOK6.setDuration(output.Duration);			if (pEnemy->isPC())			{				Player* pTargetPlayer = pEnemy->getPlayer();				if (pTargetPlayer == NULL)				{					//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " end " << endl;					return;				}				if (bCanSeeCaster) pTargetPlayer->sendPacket(&_GCSkillToObjectOK2);				else pTargetPlayer->sendPacket(&_GCSkillToObjectOK6);			}			else			{				Monster* pTargetMonster = dynamic_cast<Monster*>(pEnemy);				pTargetMonster->addEnemy(pMonster);			}			list<Creature*> cList;			cList.push_back(pMonster);			cList.push_back(pEnemy);			cList = pZone->broadcastSkillPacket(vampX, vampY, targetX, targetY, &_GCSkillToObjectOK5, cList);			pZone->broadcastPacket(vampX, vampY,  &_GCSkillToObjectOK3 , cList);			pZone->broadcastPacket(targetX, targetY,  &_GCSkillToObjectOK4 , cList);		} 		else		{			executeSkillFailNormal(pMonster, getSkillType(), pEnemy);		}	} 	catch(Throwable & t) 	{		executeSkillFailException(pMonster, getSkillType());	}	__END_CATCH}AcidEruption g_AcidEruption;

⌨️ 快捷键说明

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