📄 illusionofavenge.cpp
字号:
////////////////////////////////////////////////////////////////////////////////// Project : DARKEDEN// Module : Skill - Effect// File Name : IllusionOfAvenge.cpp////////////////////////////////////////////////////////////////////////////////#include "IllusionOfAvenge.h"#include "SkillUtil.h"#include "Gpackets/GCSkillToSelfOK1.h"#include "Gpackets/GCSkillToSelfOK2.h"#include "Gpackets/GCSkillToObjectOK2.h"#include "Gpackets/GCSkillToObjectOK4.h"#include "Gpackets/GCModifyInformation.h"#include "Gpackets/GCStatusCurrentHP.h"//////////////////////////////////////////////////////////////////////////////// 浇饭捞绢 坷宏璃飘 勤甸矾//////////////////////////////////////////////////////////////////////////////void IllusionOfAvenge::execute(Slayer * pSlayer, 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); Player* pPlayer = pSlayer->getPlayer(); Assert( pPlayer != NULL ); GCSkillToSelfOK1 _GCSkillToSelfOK1; GCSkillToSelfOK2 _GCSkillToSelfOK2; SkillType_t SkillType = pSkillSlot->getSkillType(); SkillInfo* pSkillInfo = g_pSkillInfoManager->getSkillInfo(SkillType); SkillDomainType_t DomainType = pSkillInfo->getDomainType(); ZoneCoord_t X = pSlayer->getX(); ZoneCoord_t Y = pSlayer->getY(); int RequiredMP = (int)pSkillInfo->getConsumeMP(); bool bManaCheck = hasEnoughMana(pSlayer, RequiredMP); bool bTimeCheck = verifyRunTime(pSkillSlot); bool bRangeCheck = verifyDistance(pSlayer, X, Y, pSkillInfo->getRange()) && checkZoneLevelToUseSkill(pSlayer); bool bHitRoll = HitRoll::isSuccessIllusionOfAvenge(pSlayer); VSRect rect(0, 0, pZone->getWidth()-1, pZone->getHeight()-1); // calculate damage and duration time SkillInput input(pSlayer, pSkillSlot); SkillOutput output; computeOutput(input, output); if (bManaCheck && bTimeCheck && bRangeCheck && bHitRoll) { decreaseMana(pSlayer, RequiredMP, _GCSkillToSelfOK1); bool bHit = false; int oX, oY; for(oX = -2; oX <= 2; oX++) for(oY = -2; oY <= 2; oY++) { int tileX = X+oX; int tileY = Y+oY; if ( oX == 0 && oY == 0 ) continue; if (!rect.ptInRect(tileX, tileY)) continue; Tile& tile = pZone->getTile(tileX, tileY); // 鸥老俊 乐绰 农府贸甸阑 府胶飘肺 父电促. list<Creature*> targetList; if(tile.hasCreature(Creature::MOVE_MODE_WALKING)) { Creature* pCreature = tile.getCreature(Creature::MOVE_MODE_WALKING); targetList.push_back( pCreature ); } if(tile.hasCreature(Creature::MOVE_MODE_FLYING)) { Creature* pCreature = tile.getCreature(Creature::MOVE_MODE_FLYING); targetList.push_back( pCreature ); } if(tile.hasCreature(Creature::MOVE_MODE_BURROWING)) { Creature* pCreature = tile.getCreature(Creature::MOVE_MODE_BURROWING); targetList.push_back( pCreature ); } list<Creature*>::iterator itr = targetList.begin(); for ( ; itr != targetList.end(); itr++ ) { Creature* pTargetCreature = (*itr); Assert( pTargetCreature != NULL ); if( !pTargetCreature->isSlayer() && !pTargetCreature->isFlag( Effect::EFFECT_CLASS_COMA) ) { if(pTargetCreature->isVampire()) { Player* pTargetPlayer = pTargetCreature->getPlayer(); bHit = true; Vampire* pVampire = dynamic_cast<Vampire*>(pTargetCreature); // 单固瘤甫 利侩矫挪促. GCModifyInformation gcMI; ::setDamage( pVampire, output.Damage, pSlayer, pSkillSlot->getSkillType(), &gcMI ); // HP 啊 函沁促绊 寸荤磊俊霸 焊辰促. pTargetPlayer->sendPacket(&gcMI); GCSkillToObjectOK2 gcSkillToObjectOK2; gcSkillToObjectOK2.setObjectID( 1 ); // 狼固 绝促. gcSkillToObjectOK2.setSkillType( SKILL_ATTACK_MELEE ); gcSkillToObjectOK2.setDuration(14); } else if(pTargetCreature->isMonster()) { Monster* pMonster = dynamic_cast<Monster*>(pTargetCreature); bHit = true; ::setDamage( pMonster, output.Damage, pSlayer, pSkillSlot->getSkillType() ); } GCSkillToObjectOK4 gcSkillToObjectOK4; gcSkillToObjectOK4.setTargetObjectID( pTargetCreature->getObjectID() ); gcSkillToObjectOK4.setSkillType( SKILL_ATTACK_MELEE ); gcSkillToObjectOK4.setDuration(14); pZone->broadcastPacket(pTargetCreature->getX(), pTargetCreature->getY(), &gcSkillToObjectOK4 ); // 己氢阑 棵赴促. increaseAlignment( pSlayer, pTargetCreature, _GCSkillToSelfOK1 ); } } }/* if(bHit) { //cout << "Skill Succesfully Attacked(" << output.Damage << ")" << endl; shareAttrExp(pSlayer, output.Damage, 1, 1, 8, _GCSkillToSelfOK1); increaseDomainExp(pSlayer, DomainType, pSkillInfo->getPoint(), _GCSkillToSelfOK1); increaseSkillExp(pSlayer, DomainType, pSkillSlot, pSkillInfo, _GCSkillToSelfOK1); }*/ // 菩哦阑 父甸绢 焊辰促. _GCSkillToSelfOK1.setSkillType(SkillType); _GCSkillToSelfOK1.setCEffectID(CEffectID); _GCSkillToSelfOK1.setDuration(14); _GCSkillToSelfOK2.setObjectID(pSlayer->getObjectID()); _GCSkillToSelfOK2.setSkillType(SkillType); _GCSkillToSelfOK2.setDuration(14); // 扁贱阑 荤侩茄 荤恩俊霸 packet 傈崔 pPlayer->sendPacket(&_GCSkillToSelfOK1); pZone->broadcastPacket(X, Y, &_GCSkillToSelfOK2, pSlayer); } else { executeSkillFailNormal(pSlayer, getSkillType(), NULL); } // 扁贱 delay setting if ( bTimeCheck ) pSkillSlot->setRunTime(output.Delay); } catch(Throwable& t) { executeSkillFailException(pSlayer, getSkillType()); } //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " end " << endl; __END_CATCH}IllusionOfAvenge g_IllusionOfAvenge;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -