📄 powerofland.cpp
字号:
////////////////////////////////////////////////////////////////////////////////// Project : DARKEDEN// Module : Skill - Effect// File Name : PowerOfLand.cpp////////////////////////////////////////////////////////////////////////////////#include "PowerOfLand.h"#include "EffectTileStorm.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 PowerOfLand::execute(Slayer* pSlayer, ObjectID_t TargetObjectID, 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); 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(pSlayer, getSkillType()); return; } execute(pSlayer, pTargetCreature->getX(), pTargetCreature->getY(), pSkillSlot, CEffectID); } catch (Throwable & t) { executeSkillFailException(pSlayer, getSkillType()); //cout << t.toString() << endl; } //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " end " << endl; __END_CATCH}//////////////////////////////////////////////////////////////////////////////// 浇饭捞绢 鸥老 勤甸矾// 浇饭捞绢啊 Wide Lightning Skill阑 Tile俊 荤侩沁阑锭 荤侩窍绰 Handler//////////////////////////////////////////////////////////////////////////////void PowerOfLand::execute(Slayer* pSlayer, ZoneCoord_t X, ZoneCoord_t Y, SkillSlot* pSkillSlot, CEffectID_t CEffectID) throw(Error){ __BEGIN_TRY //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << "begin " << endl; try { Player* pPlayer = pSlayer->getPlayer(); Zone* pZone = pSlayer->getZone(); Assert(pPlayer != NULL); Assert(pZone != NULL); GCSkillToTileOK1 _GCSkillToTileOK1; GCSkillToTileOK2 _GCSkillToTileOK2; GCSkillToTileOK3 _GCSkillToTileOK3; GCSkillToTileOK4 _GCSkillToTileOK4; GCSkillToTileOK5 _GCSkillToTileOK5; GCSkillToTileOK6 _GCSkillToTileOK6; SkillType_t SkillType = pSkillSlot->getSkillType(); SkillInfo* pSkillInfo = g_pSkillInfoManager->getSkillInfo(SkillType); ZoneCoord_t myX = pSlayer->getX(); ZoneCoord_t myY = pSlayer->getY(); int RequiredMP = (int)pSkillInfo->getConsumeMP(); bool bManaCheck = hasEnoughMana(pSlayer, RequiredMP); bool bTimeCheck = verifyRunTime(pSkillSlot); bool bRangeCheck = verifyDistance(pSlayer, X, Y, pSkillInfo->getRange()); // 老窜 扁贱篮 己傍窍绰 巴栏肺 窍绊 单固瘤甫 拌魂且锭(EffectTileStorm::affect()) // 农府媚 喊肺 促脚 拌魂窍绰 吧肺 茄促. // 2003.1.8 by bezz //bool bHitRoll = HitRoll::isSuccessMagic(pSlayer, pSkillInfo, pSkillSlot); bool bTileCheck = false; Tile& tile = pZone->getTile(X, Y); VSRect rect(0, 0, pZone->getWidth()-1, pZone->getHeight()-1); if(rect.ptInRect(X, Y)) { if (tile.canAddEffect()) bTileCheck = true; } if (bManaCheck && bTimeCheck && bRangeCheck && bTileCheck) { decreaseMana(pSlayer, RequiredMP, _GCSkillToTileOK1); // calculate damage and duration time SkillInput input(pSlayer, pSkillSlot); SkillOutput output; computeOutput(input, output); Range_t Range = 5; EffectTileStorm* pEffect = new EffectTileStorm( pZone, X, Y ); pEffect->setUserObjectID( pSlayer->getObjectID() ); pEffect->setDamage( output.Damage ); pEffect->setSkillType( SkillType ); pEffect->setStormTime( 1 ); pEffect->setTick( output.Tick ); pEffect->setNextTime( output.Tick ); ObjectRegistry& objectregister = pZone->getObjectRegistry(); objectregister.registerObject(pEffect); pZone->addEffect(pEffect); tile.addEffect(pEffect); // 扁贱阑 荤侩茄 荤恩甸俊霸 _GCSkillToTileOK1.setSkillType(SkillType); _GCSkillToTileOK1.setCEffectID(CEffectID); _GCSkillToTileOK1.setX(X); _GCSkillToTileOK1.setY(Y); _GCSkillToTileOK1.setDuration(output.Duration); _GCSkillToTileOK1.setRange(Range); // 扁贱阑 敬 荤恩父 杭 荐 乐绰 荤恩甸俊霸 _GCSkillToTileOK3.setObjectID(pSlayer->getObjectID()); _GCSkillToTileOK3.setSkillType(SkillType); _GCSkillToTileOK3.setX(X); _GCSkillToTileOK3.setY(Y); //_GCSkillToTileOK3.setRange(Range); // 扁贱阑 寸茄 荤恩父 杭 荐 乐绰 荤恩甸俊霸 _GCSkillToTileOK4.setSkillType(SkillType); _GCSkillToTileOK4.setX(X); _GCSkillToTileOK4.setY(Y); _GCSkillToTileOK4.setDuration(output.Duration); _GCSkillToTileOK4.setRange(Range); //扁贱阑 敬 荤恩苞 寸茄 荤恩阑 葛滴 杭 荐 乐绰 荤恩甸俊霸 _GCSkillToTileOK5.setObjectID(pSlayer->getObjectID()); _GCSkillToTileOK5.setSkillType(SkillType); _GCSkillToTileOK5.setX(X); _GCSkillToTileOK5.setY(Y); _GCSkillToTileOK5.setDuration(output.Duration); _GCSkillToTileOK5.setRange(Range); // 扁贱阑 荤侩茄 荤恩俊霸 packet 傈崔 pPlayer->sendPacket(&_GCSkillToTileOK1); // 扁贱阑 镜 荤恩苞 寸茄 荤恩阑 葛滴 杭 荐 乐绰 荤恩甸俊霸 broadcasing // broadcasting饶 5锅OK甫 罐篮 荤恩阑 扁废茄促. // 咯扁俊 扁废等 荤恩篮 瞒饶 broadcasting俊辑 力寇等促. list<Creature*> cList; cList.push_back( pSlayer ); cList = pZone->broadcastSkillPacket(myX, myY, X, Y, &_GCSkillToTileOK5, cList); // 扁贱阑 敬 荤恩阑 杭 荐 乐绰 荤恩甸俊霸 broadcasting pZone->broadcastPacket(myX, myY, &_GCSkillToTileOK3, cList); // 扁贱阑 寸茄 荤恩阑 杭 荐 乐绰 荤恩甸俊霸 broadcasting pZone->broadcastPacket(X, Y, &_GCSkillToTileOK4, cList); // 扁贱 delay setting pSkillSlot->setRunTime(output.Delay); } else { executeSkillFailNormal(pSlayer, getSkillType(), NULL); } } catch(Throwable& t) { executeSkillFailException(pSlayer, getSkillType()); } //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " end " << endl; __END_CATCH}PowerOfLand g_PowerOfLand;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -