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

📄 paralyze.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//////////////////////////////////////////////////////////////////////////////// Filename    : Paralyze.cpp// Written by  : // Description : //////////////////////////////////////////////////////////////////////////////#include "Paralyze.h"#include "EffectParalyze.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/GCSkillToSelfOK1.h"#include "Gpackets/GCSkillToSelfOK2.h"#include "Gpackets/GCStatusCurrentHP.h"#include "Gpackets/GCAddEffect.h"#include "Gpackets/GCRemoveEffect.h"#include "Vampire.h"#include "Ousters.h"#include "Reflection.h"#include "Tile.h"#include "RankBonus.h"//////////////////////////////////////////////////////////////////////////////// 轨颇捞绢 坷宏璃飘 勤甸矾//////////////////////////////////////////////////////////////////////////////void Paralyze::execute(Vampire* pVampire, ObjectID_t TargetObjectID, VampireSkillSlot* pVampireSkillSlot, CEffectID_t CEffectID)	throw(Error){	__BEGIN_TRY	//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << "begin " << endl;	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绰 傍拜且 荐啊 绝促.		// 搁开捞芭唱. by sigi. 2002.9.13		// NoSuch力芭. by sigi. 2002.5.2		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(pVampire, getSkillType());			//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " end " << endl;			return;		}		GCSkillToObjectOK1 _GCSkillToObjectOK1;		GCSkillToObjectOK2 _GCSkillToObjectOK2;		GCSkillToObjectOK3 _GCSkillToObjectOK3;		GCSkillToObjectOK4 _GCSkillToObjectOK4;		GCSkillToObjectOK5 _GCSkillToObjectOK5;		GCSkillToObjectOK6 _GCSkillToObjectOK6;		SkillInfo* pSkillInfo = g_pSkillInfoManager->getSkillInfo(SkillType);		// Knowledge of Curse 啊 乐促搁 hit bonus 10		int HitBonus = 0;		if ( pVampire->hasRankBonus( RankBonus::RANK_BONUS_KNOWLEDGE_OF_CURSE ) )		{			RankBonus* pRankBonus = pVampire->getRankBonus( RankBonus::RANK_BONUS_KNOWLEDGE_OF_CURSE );			Assert( pRankBonus != NULL );			HitBonus = pRankBonus->getPoint();		}		Tile& rTile = pZone->getTile( pTargetCreature->getX(), pTargetCreature->getY() );		int  RequiredMP  = decreaseConsumeMP(pVampire, pSkillInfo);		bool bManaCheck  = hasEnoughMana(pVampire, RequiredMP);		bool bTimeCheck  = verifyRunTime(pVampireSkillSlot);		bool bRangeCheck = verifyDistance(pVampire, pTargetCreature, pSkillInfo->getRange());		bool bHitRoll    = HitRoll::isSuccessVampireCurse(pSkillInfo->getLevel(), pTargetCreature->getResist(MAGIC_DOMAIN_CURSE));		bool bHitRoll2   = HitRoll::isSuccessMagic(pVampire, pSkillInfo, pVampireSkillSlot, HitBonus);		bool bCanHit     = canHit(pVampire, pTargetCreature, SkillType);		bool bEffected   = pTargetCreature->isFlag(Effect::EFFECT_CLASS_PARALYZE) || rTile.getEffect(Effect::EFFECT_CLASS_TRYING_POSITION)!=NULL;		bool bPK         = verifyPK(pVampire, pTargetCreature);		ZoneCoord_t vampX   = pVampire->getX();		ZoneCoord_t vampY   = pVampire->getY();		ZoneCoord_t targetX = pTargetCreature->getX();		ZoneCoord_t targetY = pTargetCreature->getY();		//if (bManaCheck && bTimeCheck && bRangeCheck && bHitRoll && bHitRoll2 && bCanHit && !bEffected && bPK)		if (bManaCheck && bTimeCheck && bRangeCheck && bHitRoll && bHitRoll2 && bCanHit && !bEffected && bPK && pTargetCreature->getCompetence() == 3)		{			decreaseMana(pVampire, RequiredMP, _GCSkillToObjectOK1);			bool bCanSeeCaster = canSee(pTargetCreature, pVampire);			SkillInput input(pVampire);			SkillOutput output;			computeOutput(input, output);			// Wisdom of Silence 捞 乐促搁 瘤加矫埃 20% 刘啊			if ( pVampire->hasRankBonus( RankBonus::RANK_BONUS_WISDOM_OF_SILENCE ) )			{				RankBonus* pRankBonus = pVampire->getRankBonus( RankBonus::RANK_BONUS_WISDOM_OF_SILENCE );				Assert( pRankBonus != NULL );				output.Duration += getPercentValue( output.Duration, pRankBonus->getPoint() );			}			// pTargetCreature啊 历林付过阑 馆荤窍绰 版快			if (CheckReflection(pVampire, pTargetCreature, getSkillType()))			{				pTargetCreature = (Creature*)pVampire;				TargetObjectID = pVampire->getObjectID();			}			Resist_t resist = pTargetCreature->getResist( MAGIC_DOMAIN_CURSE );			if ( resist > output.Duration ) resist = output.Duration;			output.Duration -= resist;			if ( output.Duration < 20 ) output.Duration = 20;			// 捞棋飘 坷宏璃飘甫 积己秦辑 嘿牢促.			EffectParalyze* pEffectParalyze = new EffectParalyze(pTargetCreature);			pEffectParalyze->setLevel(pSkillInfo->getLevel()/2);//			pEffectParalyze->setDefensePenalty(output.Damage);			pEffectParalyze->setDeadline(output.Duration);			pTargetCreature->addEffect(pEffectParalyze);			pTargetCreature->setFlag(Effect::EFFECT_CLASS_PARALYZE);			// 历林俊 吧府搁 叼奇胶啊 冻绢柳促.			// 叼奇胶 其澄萍啊 绝绢咙. 2002.05.09 - by bezz/*			if (pTargetCreature->isSlayer()) 			{				Slayer* pTargetSlayer = dynamic_cast<Slayer*>(pTargetCreature);				SLAYER_RECORD prev;				pTargetSlayer->getSlayerRecord(prev);				pTargetSlayer->initAllStat();				pTargetSlayer->addModifyInfo(prev, _GCSkillToObjectOK2);			} 			else if (pTargetCreature->isVampire()) 			{				Vampire* pTargetVampire = dynamic_cast<Vampire*>(pTargetCreature);				VAMPIRE_RECORD prev;				pTargetVampire->getVampireRecord(prev);				pTargetVampire->initAllStat();				pTargetVampire->addModifyInfo(prev, _GCSkillToObjectOK2);			} 			else if (pTargetCreature->isMonster())			{				Monster* pTargetMonster = dynamic_cast<Monster*>(pTargetCreature);				pTargetMonster->initAllStat();			}			else Assert(false);*/			// 捞棋飘啊 嘿菌促绰 巴阑 宏肺靛某胶泼秦霖促.			GCAddEffect gcAddEffect;			gcAddEffect.setObjectID(pTargetCreature->getObjectID());			gcAddEffect.setEffectID(Effect::EFFECT_CLASS_PARALYZE);			gcAddEffect.setDuration(output.Duration);			pZone->broadcastPacket(targetX, targetY, &gcAddEffect);			_GCSkillToObjectOK1.setSkillType(SkillType);			_GCSkillToObjectOK1.setCEffectID(CEffectID);			_GCSkillToObjectOK1.setTargetObjectID(TargetObjectID);			_GCSkillToObjectOK1.setDuration(output.Duration);						_GCSkillToObjectOK2.setObjectID(pVampire->getObjectID());			_GCSkillToObjectOK2.setSkillType(SkillType);			_GCSkillToObjectOK2.setDuration(output.Duration);														_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);			_GCSkillToObjectOK5.setDuration(output.Duration);			_GCSkillToObjectOK6.setXY(vampX, vampY);			_GCSkillToObjectOK6.setSkillType(SkillType);			_GCSkillToObjectOK6.setDuration(output.Duration);			if (bCanSeeCaster) // 10篮 东户 荐摹促.			{				computeAlignmentChange(pTargetCreature, 10, pVampire, &_GCSkillToObjectOK2, &_GCSkillToObjectOK1);			}			else // 10篮 东户 荐摹促.			{				computeAlignmentChange(pTargetCreature, 10, pVampire, &_GCSkillToObjectOK6, &_GCSkillToObjectOK1);			}			pPlayer->sendPacket(&_GCSkillToObjectOK1);			if (pTargetCreature->isPC())			{				Player* pTargetPlayer = pTargetCreature->getPlayer();				Assert(pTargetPlayer != NULL);				if (bCanSeeCaster) pTargetPlayer->sendPacket(&_GCSkillToObjectOK2);				else pTargetPlayer->sendPacket(&_GCSkillToObjectOK6);			}			else			{				Monster* pTargetMonster = dynamic_cast<Monster*>(pTargetCreature);				pTargetMonster->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

⌨️ 快捷键说明

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