📄 effectmeteorstrike.cpp
字号:
//////////////////////////////////////////////////////////////////////////////// Filename : EffectMeteorStrike.cpp// Written by :// Description : //////////////////////////////////////////////////////////////////////////////#include "EffectMeteorStrike.h"#include "Slayer.h"#include "Vampire.h"#include "Monster.h"#include "GamePlayer.h"#include "SkillUtil.h"#include "Gpackets/GCModifyInformation.h"#include "Gpackets/GCStatusCurrentHP.h"#include "Gpackets/GCSkillToObjectOK2.h"#include "Gpackets/GCSkillToObjectOK4.h"////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////EffectMeteorStrike::EffectMeteorStrike(Zone* pZone, ZoneCoord_t zoneX, ZoneCoord_t zoneY, bool bPlayer) throw(Error){ __BEGIN_TRY m_pZone = pZone; m_X = zoneX; m_Y = zoneY; m_Damage = 0; m_UserObjectID = 0; m_bPlayer = bPlayer; __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void EffectMeteorStrike::affect() throw(Error){ __BEGIN_TRY //cout << "EffectMeteorStrike" << "affect BEGIN" << endl; //setNextTime(m_Delay); //cout << "EffectMeteorStrike" << "affect END" << endl; __END_CATCH }////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void EffectMeteorStrike::affect(Creature* pCreature) throw(Error){ __BEGIN_TRY __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void EffectMeteorStrike::unaffect(Creature* pCreature) throw(Error){ __BEGIN_TRY __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void EffectMeteorStrike::unaffect() throw(Error){ __BEGIN_TRY //cout << "EffectMeteorStrike" << "unaffect BEGIN" << endl; Assert(m_pZone != NULL); // 捞棋飘甫 扒 农府媚甫 啊廉柯促. // !! 粮阑 栋车阑 荐档 乐栏骨肺 NULL 捞 瞪 荐 乐促. Creature* pCastCreature = NULL; if ( m_bPlayer ) { pCastCreature = m_pZone->getCreature( m_UserObjectID ); if ( pCastCreature == NULL ) { Tile& tile = m_pZone->getTile(m_X, m_Y); tile.deleteEffect(m_ObjectID); return; } } VSRect rect(0, 0, m_pZone->getWidth()-1, m_pZone->getHeight()-1); // 泅犁 捞棋飘啊 嘿绢乐绰 鸥老阑 罐酒柯促. // 吝缴鸥老 + 胶敲贰浆 鸥老 for (int x=-2; x<=2; x++) { for (int y=-2; y<=2; y++) { int X = m_X + x; int Y = m_Y + y; if (!rect.ptInRect(X, Y)) continue; Tile& tile = m_pZone->getTile(X, Y); int Damage = 0; int splash = max(abs(x), abs(y)); // 啊款单绰 100% if ( m_bPlayer ) { if ( splash == 0 ) { Damage = m_Damage; } else if ( splash == 1 ) { Damage = getPercentValue( m_Damage, 85 ); } else { Damage = getPercentValue( m_Damage, 70 ); } } else { // 林困俊绰 50% damage if ( splash != 0 ) Damage = m_Damage >> splash; } // 鸥老 救俊 粮犁窍绰 坷宏璃飘甸阑 八祸茄促. const slist<Object*>& oList = tile.getObjectList(); slist<Object*>::const_iterator itr = oList.begin(); for (; itr != oList.end(); itr++) { Assert(*itr != NULL); Object* pObject = *itr; Assert(pObject != NULL); if (pObject->getObjectClass() == Object::OBJECT_CLASS_CREATURE) { Creature* pCreature = dynamic_cast<Creature*>(pObject); Assert(pCreature != NULL); // 磊脚篮 嘎瘤 臼绰促 // 公利惑怕 眉农. by sigi. 2002.9.5 if (pCreature->getObjectID()==m_UserObjectID || pCreature->isFlag(Effect::EFFECT_CLASS_NO_DAMAGE) || pCreature->isFlag(Effect::EFFECT_CLASS_COMA) || !checkZoneLevelToHitTarget( pCreature ) ) { continue; } //GCModifyInformation gcMI; GCModifyInformation gcAttackerMI; GCSkillToObjectOK2 gcSkillToObjectOK2; if (pCreature->isSlayer()) { Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature); ::setDamage( pSlayer, Damage, pCastCreature, SKILL_METEOR_STRIKE, &gcSkillToObjectOK2, &gcAttackerMI);/* Player* pPlayer = pSlayer->getPlayer(); Assert(pPlayer != NULL); pPlayer->sendPacket(&gcMI);*/ } else if (pCreature->isVampire()) { // 轨颇捞绢啊 荤侩沁阑 版快 轨颇捞绢绰 吝缴 鸥老阑 力寇窍绊绰 嘎瘤 臼绰促. if ( m_bPlayer )// && splash != 0 ) continue; Vampire* pVampire = dynamic_cast<Vampire*>(pCreature); ::setDamage( pVampire, Damage, pCastCreature, SKILL_METEOR_STRIKE, &gcSkillToObjectOK2, &gcAttackerMI );/* Player* pPlayer = pVampire->getPlayer(); Assert(pPlayer != NULL); pPlayer->sendPacket(&gcMI);*/ } else if (pCreature->isOusters()) { Ousters* pOusters = dynamic_cast<Ousters*>(pCreature); ::setDamage( pOusters, Damage, pCastCreature, SKILL_METEOR_STRIKE, &gcSkillToObjectOK2, &gcAttackerMI );/* Player* pPlayer = pOusters->getPlayer(); Assert(pPlayer != NULL); pPlayer->sendPacket(&gcMI);*/ } else if (pCreature->isMonster()) { Monster* pMonster = dynamic_cast<Monster*>(pCreature); ::setDamage( pMonster, Damage, pCastCreature, SKILL_METEOR_STRIKE, NULL, &gcAttackerMI ); if ( pCastCreature != NULL ) pMonster->addEnemy( pCastCreature ); } // 惑措啊 磷菌促搁 版氰摹甫 棵妨霖促. if ( pCreature->isDead() ) { if ( pCastCreature != NULL && pCastCreature->isVampire() ) { Vampire* pVampire = dynamic_cast<Vampire*>(pCastCreature); Assert( pVampire != NULL ); int exp = computeCreatureExp(pCreature, KILL_EXP); shareVampExp(pVampire, exp, gcAttackerMI); computeAlignmentChange( pCreature, Damage, pCastCreature, &gcSkillToObjectOK2, &gcAttackerMI ); pVampire->getPlayer()->sendPacket( &gcAttackerMI ); } } // user茄抛绰 嘎绰 葛嚼阑 焊咯霖促. if (pCreature->isPC()) { gcSkillToObjectOK2.setObjectID( 1 ); // 狼固 绝促. gcSkillToObjectOK2.setSkillType( SKILL_ATTACK_MELEE ); gcSkillToObjectOK2.setDuration(0); pCreature->getPlayer()->sendPacket(&gcSkillToObjectOK2); } GCSkillToObjectOK4 gcSkillToObjectOK4; gcSkillToObjectOK4.setTargetObjectID( pCreature->getObjectID() ); gcSkillToObjectOK4.setSkillType( SKILL_ATTACK_MELEE ); gcSkillToObjectOK4.setDuration(0); m_pZone->broadcastPacket(pCreature->getX(), pCreature->getY(), &gcSkillToObjectOK4, pCreature); // m_CasterName捞 pCreature甫 磷牢 版快狼 KillCount 贸府 // by sigi. 2002.8.31 // setDamage 甫 阂矾辑 贸府茄促. 林籍贸府 // by bezz. 2002.12.31/* if (pCreature->isDead()) { Creature* pAttacker = m_pZone->getCreature( m_CasterName ); if (pAttacker!=NULL) { affectKillCount(pAttacker, pCreature); } }*/ } } } } Tile& tile = m_pZone->getTile(m_X, m_Y); tile.deleteEffect(m_ObjectID); //cout << "EffectMeteorStrike" << "unaffect END" << endl; __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////string EffectMeteorStrike::toString() const throw(){ __BEGIN_TRY StringStream msg; msg << "EffectMeteorStrike(" << "ObjectID:" << getObjectID() << ")"; return msg.toString(); __END_CATCH}EffectMeteorStrikeLoader* g_pEffectMeteorStrikeLoader = NULL;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -