📄 effectcontinualgroundattack.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 + -