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

📄 effectcontinualgroundattack.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
字号:
//----------------------------------------------------------------------//// Filename    : EffectContinualGroundAttack.cpp// Written by  : elca////----------------------------------------------------------------------// include files#include "Assert.h"#include "EffectContinualGroundAttack.h"#include "EffectGroundAttack.h"#include "EffectMeteorStrike.h"#include "MonsterManager.h"#include "PCManager.h"#include "Zone.h"#include "ZoneUtil.h"#include "SkillUtil.h"#include "Gpackets/GCAddEffectToTile.h"//----------------------------------------------------------------------// constructor//----------------------------------------------------------------------EffectContinualGroundAttack::EffectContinualGroundAttack (Zone* pZone , EffectClass attackEffect, Turn_t delay) 	throw (Error){	__BEGIN_TRY	Assert(pZone!=NULL);	m_pZone = pZone;	m_AttackEffect = attackEffect;	m_Delay = delay;	setNextTime(10);	// 1檬 饶 矫累	setDeadline(delay);	m_MinNumber = 1;	m_MaxNumber = 1;	// 辑滚 傈侩 Effect捞促. by sigi. 2002.11.14	m_bBroadcastingEffect = false;	__END_CATCH}//----------------------------------------------------------------------// destructor//----------------------------------------------------------------------EffectContinualGroundAttack::~EffectContinualGroundAttack () 	throw (Error){	__BEGIN_TRY	__END_CATCH}void EffectContinualGroundAttack::affect()	throw(Error){	__BEGIN_TRY	Assert(m_pZone!=NULL);	int creatureNum = m_pZone->getPCManager()->getSize()						+ m_pZone->getMonsterManager()->getSize();	// 何窍甫 炼陛捞扼档 临捞扁 困秦辑..	// 粮俊 傍拜罐阑 某腐磐啊 乐绢具瘤 effect甫 嘿捞瘤..	if (creatureNum > 0)	{		// zone狼 漂沥 困摹俊 effect甫 免仿窍绊 damage甫 霖促.		int range = min(100, (m_MaxNumber-m_MinNumber));		// 悼矫俊 1~100荤捞		int number = (range>0? m_MinNumber + rand()%range : m_MinNumber);		//cout << "EffectContinualGroundAttack: " << (int)m_pZone->getZoneID() << ", num= " << number << endl;		VSRect rect(0, 0, m_pZone->getWidth()-1, m_pZone->getHeight()-1);		// m_MinNumber ~ m_MaxNumber 俺狼 傍拜		for (int i=0; i<number; i++)		{			const BPOINT& pt = m_pZone->getRandomEmptyTilePosition();			if (!rect.ptInRect(pt.x, pt.y)) continue;			// 吝缴 鸥老 眉农			Tile& tile = m_pZone->getTile(pt.x, pt.y);			int X = pt.x;			int Y = pt.y;			if (!tile.canAddEffect()) continue;			int	DamagePercent = 100;					// 捞棋飘 坷宏璃飘甫 积己茄促.			Effect* pAttackEffect = NULL;			switch (m_AttackEffect)			{				case EFFECT_CLASS_GROUND_ATTACK :				{					// 鞍篮 捞棋飘啊 捞固 粮犁茄促搁 歹 诫 damage肺 汲沥茄促.					Effect* pOldEffect = tile.getEffect(Effect::EFFECT_CLASS_GROUND_ATTACK);					if (pOldEffect != NULL)					{						EffectGroundAttack* pGAEffect = dynamic_cast<EffectGroundAttack*>(pOldEffect);						pGAEffect->setDamagePercent( max(DamagePercent, pGAEffect->getDamagePercent()) );						continue;					}					EffectGroundAttack* pEffect = new EffectGroundAttack(m_pZone, X, Y);					pEffect->setDeadline( 22 ); // 2檬+舅颇					pEffect->setDamagePercent( DamagePercent );					pAttackEffect = pEffect;				}				break;				case EFFECT_CLASS_METEOR_STRIKE :				{					// 鞍篮 捞棋飘啊 乐促搁 昏力茄促.					Effect* pOldEffect = tile.getEffect(Effect::EFFECT_CLASS_METEOR_STRIKE);					if ( pOldEffect != NULL )					{						ObjectID_t effectID = pOldEffect->getObjectID();						m_pZone->deleteEffect(effectID);					}					EffectMeteorStrike* pEffect = new EffectMeteorStrike(m_pZone, X, Y);					pEffect->setDeadline( 10 ); // 1檬					// 400 ~ 600 100%					// 200 ~ 300 50%					// 100 ~ 150 25%					pEffect->setDamage( 400+rand()%200 );					pAttackEffect = pEffect;				}				break;				default :				break;			}			if (pAttackEffect!=NULL)			{				// 鸥老俊 嘿篮 捞棋飘绰 OID甫 罐酒具 茄促.				ObjectRegistry & objectregister = m_pZone->getObjectRegistry();				objectregister.registerObject(pAttackEffect);							// 粮 棺 鸥老俊促啊 捞棋飘甫 眠啊茄促.				m_pZone->addEffect(pAttackEffect);					tile.addEffect(pAttackEffect);				// 啊款单波父 捞棋飘甫 焊咯霖促.				GCAddEffectToTile gcAddEffectToTile;				gcAddEffectToTile.setEffectID( pAttackEffect->getEffectClass() );				gcAddEffectToTile.setObjectID( pAttackEffect->getObjectID());				gcAddEffectToTile.setXY(X, Y);				gcAddEffectToTile.setDuration( 20 );	// 2檬				m_pZone->broadcastPacket(X, Y, &gcAddEffectToTile);			}		}	}	setNextTime(m_Delay);		__END_CATCH}//--------------------------------------------------------------------// unaffect()//--------------------------------------------------------------------void EffectContinualGroundAttack::unaffect()	throw(Error){	__BEGIN_TRY	__END_CATCH}//----------------------------------------------------------------------// get debug string//----------------------------------------------------------------------string EffectContinualGroundAttack::toString () const 	throw (){	StringStream msg;	if (m_pZone) 	{		msg << "EffectContinualGroundAttack("				<< "ZoneID:" << (int)m_pZone->getZoneID();	}	msg << ",Delay:" << (int)m_Delay		<< ",Deadline:" << (int)m_Deadline.tv_sec 			<< "." << (int)m_Deadline.tv_usec			<< ")";	return msg.toString();}

⌨️ 快捷键说明

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