cgskilltoobjecthandler.cpp

来自「dk1游戏的原代码文件,完整.编译系统redhat7.3,mysql 3.23 」· C++ 代码 · 共 231 行

CPP
231
字号
//////////////////////////////////////////////////////////////////////////////// Filename    : CGSkillToObjectHandler.cc// Written By  : elca@ewestsoft.com// Description ://////////////////////////////////////////////////////////////////////////////#include "CGSkillToObject.h"#ifdef __GAME_SERVER__	#include "GamePlayer.h"	#include "SkillHandlerManager.h"	#include "ZoneUtil.h"	#include "Effect.h"	#include "skill/Sniping.h"	#include "Gpackets/GCSkillFailed1.h"	//#define __PROFILE_SKILLS__	#ifdef __PROFILE_SKILLS__		#include "Profile.h"	#endif#endif	// __GAME_SERVER__////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGSkillToObjectHandler::execute (CGSkillToObject* pPacket , Player* pPlayer)	 throw (Error){	__BEGIN_TRY __BEGIN_DEBUG_EX		#ifdef __GAME_SERVER__	Assert(pPacket != NULL);	Assert(pPlayer != NULL);	GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer);	Assert(pGamePlayer != NULL);	if (pGamePlayer->getPlayerStatus() != GPS_NORMAL) return;	try 	{		Creature* pCreature = pGamePlayer->getCreature();		Assert(pCreature != NULL);		Zone* pZone = pCreature->getZone();		Assert(pZone != NULL);		SkillType_t SkillType      = pPacket->getSkillType();		// 肯傈 救傈瘤措扼搁 扁贱 荤侩 阂啊. by sigi. 2002.11.14		ZoneLevel_t ZoneLevel = pZone->getZoneLevel(pCreature->getX(), pCreature->getY());		if (ZoneLevel & COMPLETE_SAFE_ZONE)		{			GCSkillFailed1 _GCSkillFailed1;			_GCSkillFailed1.setSkillType(SkillType);			pPlayer->sendPacket(&_GCSkillFailed1);			return;		}				ObjectID_t  TargetObjectID = pPacket->getTargetObjectID();		CEffectID_t EffectID       = pPacket->getCEffectID();				Creature* pTargetCreature = pZone->getCreature(TargetObjectID);		if ( pTargetCreature != NULL && pTargetCreature->getCreatureClass() != pCreature->getCreatureClass() )		{			pCreature->setLastTarget( TargetObjectID );		}		disableFlags( pCreature, pZone, SkillType);		if (pCreature->isSlayer()) 		{			Slayer*    pSlayer    = dynamic_cast<Slayer*>(pCreature);			SkillSlot* pSkillSlot = ((Slayer *)pCreature)->hasSkill(SkillType);			bool       bSuccess   = true;			if (pSkillSlot == NULL) bSuccess = false;			if (!isAbleToUseObjectSkill(pSlayer)) bSuccess = false;/*			if (pSlayer->isFlag(Effect::EFFECT_CLASS_SNIPING_MODE))			{				g_Sniping.checkRevealRatio(pSlayer, 20, 10);			} */			// 父距俊 鞍篮 辆练狼 己拱焊包窃捞扼搁 扁贱捞 荤侩登瘤 臼绰促.		/*	if ( pTargetCreature->isMonster() )			{				Monster* pMonster = dynamic_cast<Monster*>(pTargetCreature);				Assert( pMonster != NULL);				if ( pMonster->getMonsterType() == 371 || pMonster->getMonsterType() == 372 || pMonster->getMonsterType() == 373)					bSuccess = false;			}*/			if (bSuccess) 			{				SkillHandler* SkillHandler = g_pSkillHandlerManager->getSkillHandler(SkillType);				Assert(SkillHandler != NULL);				#ifdef __PROFILE_SKILLS__					beginProfileEx(SkillTypes2String[SkillType]);					SkillHandler->execute(pSlayer, TargetObjectID, pSkillSlot, EffectID);					endProfileEx(SkillTypes2String[SkillType]);				#else					SkillHandler->execute(pSlayer, TargetObjectID, pSkillSlot, EffectID);				#endif			}			else 			{				GCSkillFailed1 _GCSkillFailed1;				_GCSkillFailed1.setSkillType(SkillType);				pPlayer->sendPacket(&_GCSkillFailed1);			}		} 		else if (pCreature->isVampire()) 		{			Vampire*          pVampire          = dynamic_cast<Vampire*>(pCreature);			VampireSkillSlot* pVampireSkillSlot = pVampire->hasSkill(SkillType);			bool              bSuccess          = true;			// BITE OF DEATH 况匡橇 眉农绰 isAbleToUseObjectSkill 救俊辑 茄促.			if (pVampireSkillSlot == NULL && SkillType != SKILL_BITE_OF_DEATH) bSuccess = false;			if (!isAbleToUseObjectSkill(pVampire)) bSuccess = false;/*			if (pVampire->isFlag(Effect::EFFECT_CLASS_INVISIBILITY))			{				addVisibleCreature(pZone, pVampire, true);			} */			// 父距 EXTREME 扁贱阑 荤侩茄 惑怕扼搁 扁贱阑 秦力秦 林绢具 茄促.			// EXTREME 扁贱篮 促弗 扁贱苞 捍青秦辑 荤侩窍瘤 给茄促.			// 捞蜡绰 EXTREME扁贱狼 单固瘤 惑铰捞 呈公 农扁 锭巩捞绊.			// EXTREME扁贱阑 荤侩茄 惑怕俊辑 促弗 扁贱阑 荤侩且锭 Effect啊 绝扁 锭巩捞促.			// 2002.4.1			// EXTREME 扁贱阑 荤侩茄 惑怕俊辑 MELEE Attack俊 措秦辑绰 荤侩啊瓷窍档废 荐沥沁促.			// 盖颊 傍拜父栏肺绰 呈公 何练窍促绰 狼斑锭巩			// EXTREME 扁贱阑 荤侩茄 惑怕俊辑 荤侩且 荐 乐绰 MELEE Skill篮			//  ACID TOUCH, POISONOUS HAND, BLOODY NAIL捞 乐促.			//                                                  /*			if (pVampire->isFlag(Effect::EFFECT_CLASS_EXTREME))			{				if(!(SkillType == SKILL_ACID_TOUCH) && !(SkillType == SKILL_POISONOUS_HANDS) && !(SkillType == SKILL_BLOODY_NAIL))				{					EffectManager * pEffectManager = pVampire->getEffectManager();					Assert( pEffectManager != NULL );					Effect * pEffect = pEffectManager->findEffect( Effect::EFFECT_CLASS_EXTREME );					if ( pEffect != NULL ) {						pEffect->setDeadline(0);					}				}			} */			/*			// 父距俊 鞍篮 辆练狼 己拱焊包窃捞扼搁 扁贱捞 荤侩登瘤 臼绰促.			if ( pTargetCreature->isMonster() )			{				Monster* pMonster = dynamic_cast<Monster*>(pTargetCreature);				Assert( pMonster != NULL);				if ( pMonster->getMonsterType() == 374 || pMonster->getMonsterType() == 375 || pMonster->getMonsterType() == 376)					bSuccess = false;			}			*/			if (bSuccess) 			{				SkillHandler* pSkillHandler = g_pSkillHandlerManager->getSkillHandler(SkillType);				Assert(pSkillHandler != NULL);				#ifdef __PROFILE_SKILLS__					beginProfileEx(SkillTypes2String[SkillType]);					pSkillHandler->execute(pVampire, TargetObjectID, pVampireSkillSlot, EffectID);					endProfileEx(SkillTypes2String[SkillType]);				#else					pSkillHandler->execute(pVampire, TargetObjectID, pVampireSkillSlot, EffectID);				#endif			}			else 			{				GCSkillFailed1 _GCSkillFailed1;				_GCSkillFailed1.setSkillType(SkillType);				pPlayer->sendPacket(&_GCSkillFailed1);			}		} 		else if (pCreature->isOusters()) 		{			Ousters*          pOusters          = dynamic_cast<Ousters*>(pCreature);			OustersSkillSlot* pOustersSkillSlot = pOusters->hasSkill(SkillType);			bool              bSuccess          = true;			if (pOustersSkillSlot == NULL) bSuccess = false;			if (!isAbleToUseObjectSkill(pOusters)) bSuccess = false;			if (bSuccess) 			{				SkillHandler* pSkillHandler = g_pSkillHandlerManager->getSkillHandler(SkillType);				Assert(pSkillHandler != NULL);				#ifdef __PROFILE_SKILLS__					beginProfileEx(SkillTypes2String[SkillType]);					pSkillHandler->execute(pOusters, TargetObjectID, pOustersSkillSlot, EffectID);					endProfileEx(SkillTypes2String[SkillType]);				#else					pSkillHandler->execute(pOusters, TargetObjectID, pOustersSkillSlot, EffectID);				#endif			}			else 			{				GCSkillFailed1 _GCSkillFailed1;				_GCSkillFailed1.setSkillType(SkillType);				pPlayer->sendPacket(&_GCSkillFailed1);			}		} 	} 	catch (Throwable & t) 	{ 		//cout << t.toString() << endl; 	}#endif	// __GAME_SERVER__			__END_DEBUG_EX __END_CATCH}

⌨️ 快捷键说明

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