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

📄 bloodystorm.cpp

📁 dk1游戏的原代码文件,完整.编译系统redhat7.3,mysql 3.23 ,luascript v4.0 support
💻 CPP
字号:
//////////////////////////////////////////////////////////////////////////////// Filename    : BloodyStorm.cpp// Written by  : // Description : //////////////////////////////////////////////////////////////////////////////#include "BloodyStorm.h"#include "EffectBloodyStorm.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 BloodyStorm::execute(Vampire* pVampire, ObjectID_t TargetObjectID, VampireSkillSlot* pVampireSkillSlot, CEffectID_t CEffectID)    throw(Error){    __BEGIN_TRY	//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << "begin " << endl;	// Vampire Object Assertion	Assert(pVampire != NULL);	Assert(pVampireSkillSlot != NULL);    try    {		Zone* pZone = pVampire->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(pVampire, getSkillType());		    			return;		}		execute(pVampire, pTargetCreature->getX(), pTargetCreature->getY(), pVampireSkillSlot, CEffectID);    } 	catch (Throwable & t) 	{		executeSkillFailException(pVampire, getSkillType());        //cout << t.toString() << endl;    }	//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " end " << endl;    __END_CATCH}//////////////////////////////////////////////////////////////////////////////// 轨颇捞绢 鸥老 勤甸矾//////////////////////////////////////////////////////////////////////////////void BloodyStorm::execute(Vampire* pVampire, ZoneCoord_t X, ZoneCoord_t Y, VampireSkillSlot* pVampireSkillSlot, CEffectID_t CEffectID)	throw(Error){	__BEGIN_TRY	//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << "begin " << endl;	try	{		Player* pPlayer = pVampire->getPlayer();		Zone* pZone = pVampire->getZone();		Assert(pPlayer != NULL);		Assert(pZone != NULL);		GCSkillToTileOK1 _GCSkillToTileOK1;		GCSkillToTileOK2 _GCSkillToTileOK2;		GCSkillToTileOK3 _GCSkillToTileOK3;		GCSkillToTileOK4 _GCSkillToTileOK4;		GCSkillToTileOK5 _GCSkillToTileOK5;		GCSkillToTileOK6 _GCSkillToTileOK6;		SkillType_t SkillType = pVampireSkillSlot->getSkillType();		SkillInfo*  pSkillInfo =  g_pSkillInfoManager->getSkillInfo(SkillType);		ZoneCoord_t myX = pVampire->getX();		ZoneCoord_t myY = pVampire->getY();		// Knowledge of Blood 啊 乐促搁 hit bonus 10		int HitBonus = 0;		if ( pVampire->hasRankBonus( RankBonus::RANK_BONUS_KNOWLEDGE_OF_BLOOD ) )		{			RankBonus* pRankBonus = pVampire->getRankBonus( RankBonus::RANK_BONUS_KNOWLEDGE_OF_BLOOD );			Assert( pRankBonus != NULL );			HitBonus = pRankBonus->getPoint();		}		int  RequiredMP = decreaseConsumeMP(pVampire, pSkillInfo);		bool bManaCheck = hasEnoughMana(pVampire, RequiredMP);		bool bTimeCheck = verifyRunTime(pVampireSkillSlot);		bool bRangeCheck = verifyDistance(pVampire, X, Y, pSkillInfo->getRange());		bool bHitRoll = HitRoll::isSuccessMagic(pVampire, pSkillInfo, pVampireSkillSlot, HitBonus);		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(pVampire, RequiredMP, _GCSkillToTileOK1);			// calculate damage and duration time			SkillInput input(pVampire);			SkillOutput output;			computeOutput(input, output);			// Disruption Storm 捞 乐促搁 单固瘤 20% 刘啊			if ( pVampire->hasRankBonus( RankBonus::RANK_BONUS_DISRUPTION_STORM ) )			{				RankBonus* pRankBonus = pVampire->getRankBonus( RankBonus::RANK_BONUS_DISRUPTION_STORM );				Assert( pRankBonus != NULL );				output.Damage += getPercentValue( output.Damage, pRankBonus->getPoint() );			}			Range_t Range = 3;			// 扁粮俊 鞍篮 捞棋飘啊 鸥老俊 乐促搁 瘤快绊 货肺 汲沥茄促.			Tile& tile = pZone->getTile(X, Y);			Effect* pOldEffect = tile.getEffect(Effect::EFFECT_CLASS_BLOODY_STORM);			if(pOldEffect != NULL)			{				ObjectID_t effectID = pOldEffect->getObjectID();				pZone->deleteEffect(effectID);			}			// 捞棋飘 坷宏璃飘甫 积己秦辑 鸥老俊 嘿牢促. 			EffectBloodyStorm* pEffect = new EffectBloodyStorm(pZone, X, Y);			pEffect->setDeadline(output.Duration);			pEffect->setNextTime(0);			pEffect->setTick(output.Tick);			pEffect->setUserObjectID( pVampire->getObjectID() );			pEffect->setDamage(output.Damage);			pEffect->setLevel(pSkillInfo->getLevel()/2);			pEffect->setVampire();			//			ObjectRegistry& objectregister = pZone->getObjectRegistry();			objectregister.registerObject(pEffect);			//			//			pZone->addEffect(pEffect);			tile.addEffect(pEffect);			// 捞棋飘 裹困郴狼 葛电 Creature俊霸 effect甫 嘿咯霖促.			// Vampire啊 扁贱阑 荤侩茄 版快 鞍篮 Vampire俊霸绰			// 秦寸窍瘤 臼绰促.			bool bEffected = false;			Creature* pTargetCreature;			list<Creature*> cList;			cList.push_back(pVampire);			int oX, oY;			for(oX = -2; oX <= 2; oX++)			for(oY = -2; oY <= 2; oY++)			{				int tileX = X+oX;				int tileY = Y+oY;                // 父距 捞棋飘甫 眠啊窍妨绰 镑捞 Zone俊 加秦 乐瘤 臼促搁 逞绢埃

⌨️ 快捷键说明

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