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

📄 energydrop.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 2 页
字号:
////////////////////////////////////////////////////////////////////////////////// Project     : DARKEDEN// Module      : Skill - Effect// File Name   : EffectEnergyDrop.h// Writer      : 厘全芒// Date        : 2002.3.28// Description ://               Energy Drop篮 --storm幅狼 扁贱苞 悼老茄 规侥栏肺 备泅登绰//               Slayer狼 扁贱捞促.//               扁贱阑 荤侩窍霸 登搁, 扁贱 矫傈 瘤开阑 吝缴栏肺 3x3狼 康开俊//               EffectEnergyDrop Effect啊 嘿霸 等促. EffectEnergyDrop Effect//               绰 刀磊利栏肺 单固瘤甫 啊窍绰 扁贱捞 酒聪扼.//               秦寸 瘤开狼 Creature俊霸 EffectEnergyDropToCreature Effect甫//               嘿捞绊 荤扼柳促. EffectEnergyDropToCreature绰 EnergyDrop狼//               傈眉 单固瘤狼 1/3俊 秦寸窍绰 Damage甫 3锅 楷加栏肺 秦寸 //               Creature俊霸 啊窍绊 荤扼柳促. //     // History//     DATE      WRITER         DESCRIPTION// =========== =========== =====================================================// 2002.3.28    厘全芒      header file 累己////////////////////////////////////////////////////////////////////////////////////#include "EnergyDrop.h"#include "EffectEnergyDrop.h"#include "RankBonus.h"#include "Gpackets/GCSkillToTileOK1.h"#include "Gpackets/GCSkillToTileOK2.h"#include "Gpackets/GCSkillToTileOK3.h"#include "Gpackets/GCSkillToTileOK4.h"#include "Gpackets/GCSkillToTileOK5.h"#include "Gpackets/GCSkillToTileOK6.h"#include "Gpackets/GCAddEffect.h"#include "Gpackets/GCAddEffectToTile.h"//////////////////////////////////////////////////////////////////////////////// 轨颇捞绢 坷宏璃飘 勤甸矾//////////////////////////////////////////////////////////////////////////////void EnergyDrop::execute(Slayer* pSlayer, ObjectID_t TargetObjectID, SkillSlot* pSkillSlot, CEffectID_t CEffectID)    throw(Error){    __BEGIN_TRY	//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << "begin " << endl;	// Slayer Object Assertion	Assert(pSlayer != NULL);	Assert(pSkillSlot != NULL);    try    {		Zone* pZone = pSlayer->getZone();		Assert(pZone != NULL);		Creature* pTargetCreature = pZone->getCreature(TargetObjectID);		//Assert(pTargetCreature != NULL);		// NoSuch力芭. by sigi. 2002.5.2		if (pTargetCreature==NULL			|| pTargetCreature->isFlag(Effect::EFFECT_CLASS_NO_DAMAGE) // by sigi. 2002.10.30			|| pTargetCreature->isNPC())		{			executeSkillFailException(pSlayer, getSkillType());		    			return;		}		execute(pSlayer, pTargetCreature->getX(), pTargetCreature->getY(), pSkillSlot, CEffectID);    } 	catch (Throwable & t) 	{		executeSkillFailException(pSlayer, getSkillType());        //cout << t.toString() << endl;    }	//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " end " << endl;    __END_CATCH}//////////////////////////////////////////////////////////////////////////////// 轨颇捞绢 鸥老 勤甸矾//  轨颇捞绢啊 Energy Drop Skill阑 Tile俊 荤侩沁阑锭 荤侩窍绰 Handler//////////////////////////////////////////////////////////////////////////////void EnergyDrop::execute(Slayer* pSlayer, ZoneCoord_t X, ZoneCoord_t Y, SkillSlot* pSkillSlot, CEffectID_t CEffectID)	throw(Error){	__BEGIN_TRY	//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << "begin " << endl;	EffectEnergyDrop * pEffect = NULL;	EffectEnergyDrop * pEffect2 = NULL;	try	{		Player* pPlayer = pSlayer->getPlayer();		Zone* pZone = pSlayer->getZone();		Assert(pPlayer != NULL);		Assert(pZone != NULL);		GCSkillToTileOK1 _GCSkillToTileOK1;		GCSkillToTileOK2 _GCSkillToTileOK2;		GCSkillToTileOK3 _GCSkillToTileOK3;		GCSkillToTileOK4 _GCSkillToTileOK4;		GCSkillToTileOK5 _GCSkillToTileOK5;		GCSkillToTileOK6 _GCSkillToTileOK6;		SkillType_t SkillType = pSkillSlot->getSkillType();		SkillInfo*  pSkillInfo =  g_pSkillInfoManager->getSkillInfo(SkillType);		SkillDomainType_t DomainType = pSkillInfo->getDomainType();		ZoneCoord_t myX = pSlayer->getX();		ZoneCoord_t myY = pSlayer->getY();		int  RequiredMP = (int)pSkillInfo->getConsumeMP();		bool bManaCheck = hasEnoughMana(pSlayer, RequiredMP);		bool bTimeCheck = verifyRunTime(pSkillSlot);		bool bRangeCheck = verifyDistance(pSlayer, X, Y, pSkillInfo->getRange());		bool bHitRoll = HitRoll::isSuccessMagic(pSlayer, pSkillInfo, pSkillSlot);		bool bTileCheck = false;		VSRect rect(0, 0, pZone->getWidth()-1, pZone->getHeight()-1);		if(rect.ptInRect(X, Y))		{			Tile& tile = pZone->getTile(X, Y);			if (tile.canAddEffect()) bTileCheck = true;		}		if (bManaCheck && bTimeCheck && bRangeCheck && bHitRoll && bTileCheck)		{			decreaseMana(pSlayer, RequiredMP, _GCSkillToTileOK1);			// calculate damage and duration time			SkillInput input(pSlayer, pSkillSlot);			SkillOutput output;			computeOutput(input, output);			// Holy Smashing 捞 乐促搁 单固瘤 10% 刘啊			if ( pSlayer->hasRankBonus( RankBonus::RANK_BONUS_HOLY_SMASHING ) )			{				RankBonus* pRankBonus = pSlayer->getRankBonus( RankBonus::RANK_BONUS_HOLY_SMASHING );				Assert( pRankBonus != NULL );				output.Damage += pRankBonus->getPoint();			}			Range_t Range = 3;			// 扁粮俊 鞍篮 捞棋飘啊 鸥老俊 乐促搁 瘤快绊 货肺 汲沥茄促.			Tile& tile = pZone->getTile(X, Y);			Effect* pOldEffect = tile.getEffect(Effect::EFFECT_CLASS_ENERGY_DROP);			if(pOldEffect != NULL)			{				ObjectID_t effectID = pOldEffect->getObjectID();				pZone->deleteEffect(effectID);			}			// 捞棋飘 坷宏璃飘甫 积己秦辑 鸥老俊 嘿牢促. 			//cout << "make EffectObject to Tile" << X << " " << Y << endl;			pEffect = new EffectEnergyDrop(pZone, X, Y);			pEffect->setUserObjectID( pSlayer->getObjectID() );//			pEffect->setCasterName(pSlayer->getName());//			pEffect->setPartyID(pSlayer->getPartyID());			pEffect->setDeadline(output.Duration);			pEffect->setNextTime(0);			pEffect->setTick(output.Tick);			pEffect->setDamage(output.Damage);			pEffect->setLevel(pSkillInfo->getLevel()/2);			//			//ObjectRegistry& objectregister = pZone->getObjectRegistry();			//objectregister.registerObject(pEffect);			//			//			//pZone->addEffect(pEffect);			//tile.addEffect(pEffect);			// 捞棋飘 坷宏璃飘甫 积己秦辑 鸥老俊 嘿牢促. 			pEffect2 = new EffectEnergyDrop(pZone, X, Y);			pEffect2->setUserObjectID( pSlayer->getObjectID() );			pEffect2->setDeadline(output.Duration);			pEffect2->setNextTime(0);			pEffect2->setTick(output.Tick);			pEffect2->setDamage(output.Damage * 30 / 100 );			pEffect2->setLevel(pSkillInfo->getLevel()/2);			// 捞棋飘 裹困郴狼 葛电 Creature俊霸 effect甫 嘿咯霖促.			// Slayer啊 扁贱阑 荤侩茄 版快 鞍篮 Slayer俊霸绰			// 秦寸窍瘤 臼绰促.			bool bEffected = false;			bool bHit = false;			Creature* pTargetCreature;			list<Creature*> cList;			cList.push_back(pSlayer);			int oX, oY;			for(oX = -2; oX <= 2; oX++)			for(oY = -2; oY <= 2; oY++)			{				int tileX = X+oX;				int tileY = Y+oY;				if (!rect.ptInRect(tileX, tileY)) continue;				Tile& tile = pZone->getTile(tileX, tileY);		    	if (!tile.canAddEffect()) continue; 				pTargetCreature = NULL;				if(tile.hasCreature(Creature::MOVE_MODE_WALKING))					pTargetCreature = tile.getCreature(Creature::MOVE_MODE_WALKING);				EffectEnergyDrop * pTempEffect = NULL;				if( oX == 2 || oX == -2 || oY == 2 || oY == -2 ) pTempEffect = pEffect2;				else pTempEffect = pEffect;				if(pTargetCreature != NULL)				{					if(pTargetCreature->isVampire()||pTargetCreature->isOusters())					{						if(pTempEffect->affectCreature(pTargetCreature, false) == true)						{							//cout << "EnergyDrop to Slayer Success" << endl;							Player* pTargetPlayer = pTargetCreature->getPlayer();							bEffected = true;							bHit = true;							bool bCanSee = canSee(pTargetCreature, pSlayer);							_GCSkillToTileOK1.addCListElement(pTargetCreature->getObjectID());							_GCSkillToTileOK4.addCListElement(pTargetCreature->getObjectID());							_GCSkillToTileOK5.addCListElement(pTargetCreature->getObjectID());							cList.push_back(pTargetCreature);							if (bCanSee)							{								// 傍拜阑 寸茄 荤恩俊霸 								_GCSkillToTileOK2.setObjectID(pSlayer->getObjectID());								_GCSkillToTileOK2.setSkillType(SkillType);								_GCSkillToTileOK2.setX(X);								_GCSkillToTileOK2.setY(Y);								_GCSkillToTileOK2.setDuration(output.Duration);								_GCSkillToTileOK2.setRange(Range);								pTargetPlayer->sendPacket(&_GCSkillToTileOK2);							}						}						else						{							//cout << "EnergyDrop to Vampire fail" << endl;						}					}					else if(pTargetCreature->isMonster())					{						if(pTempEffect->affectCreature(pTargetCreature, false) == true)						{							//cout << "EnergyDrop to Monster Success" << endl;							bHit = true;							Monster* pMonster = dynamic_cast<Monster*>(pTargetCreature);							pMonster->addEnemy(pSlayer);							// 付瘤阜 锭赴 局啊 浇饭捞绢扼绊 汲沥茄促. by sigi. 2002.6.21							pMonster->setLastHitCreatureClass(Creature::CREATURE_CLASS_SLAYER);						}						else						{							//cout << "EnergyDrop to Monster Falis" << endl;						}					}				} // if(pTargetCreature!= NULL)			}

⌨️ 快捷键说明

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