📄 vigordrop-old.cpp
字号:
////////////////////////////////////////////////////////////////////////////////// Project : DARKEDEN// Module : Skill - Effect// File Name : EffectVigorDrop.h// Writer : 厘全芒// Date : 2002.3.28// Description :// Vigor Drop篮 --storm幅狼 扁贱苞 悼老茄 规侥栏肺 备泅登绰// Slayer狼 扁贱捞促.// 扁贱阑 荤侩窍霸 登搁, 扁贱 矫傈 瘤开阑 吝缴栏肺 3x3狼 康开俊// EffectVigorDrop Effect啊 嘿霸 等促. EffectVigorDrop Effect// 绰 刀磊利栏肺 单固瘤甫 啊窍绰 扁贱捞 酒聪扼.// 秦寸 瘤开狼 Creature俊霸 EffectVigorDropToCreature Effect甫// 嘿捞绊 荤扼柳促. EffectVigorDropToCreature绰 VigorDrop狼// 傈眉 单固瘤狼 1/3俊 秦寸窍绰 Damage甫 3锅 楷加栏肺 秦寸 // Creature俊霸 啊窍绊 荤扼柳促. // // History// DATE WRITER DESCRIPTION// =========== =========== =====================================================// 2002.3.28 厘全芒 header file 累己////////////////////////////////////////////////////////////////////////////////////#include "VigorDrop.h"#include "EffectVigorDrop.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 VigorDrop::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}//////////////////////////////////////////////////////////////////////////////// 轨颇捞绢 鸥老 勤甸矾// 轨颇捞绢啊 Vigor Drop Skill阑 Tile俊 荤侩沁阑锭 荤侩窍绰 Handler//////////////////////////////////////////////////////////////////////////////void VigorDrop::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; // Skillype阑 啊瘤绊 // SkillInfo // SkillDomainInfo沥焊甫 啊廉柯促. // SkillDomain沥焊绰 扁贱捞 己傍沁阑 版快 秦寸 拌凯狼 版氰摹甫 棵府扁 困茄 巴捞促. SkillType_t SkillType = pSkillSlot->getSkillType(); SkillInfo* pSkillInfo = g_pSkillInfoManager->getSkillInfo(SkillType); SkillDomainType_t DomainType = pSkillInfo->getDomainType(); 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()); bool bHitRoll = HitRoll::isSuccessMagic(pSlayer, pSkillInfo, pSkillSlot); bool bTileCheck = false; VSRect rect(0, 0, pZone->getWidth()-1, pZone->getHeight()-1); if(rect.ptInRect(X, Y)) { Tile& tile = pZone->getTile(X, Y); if (tile.canAddEffect()) bTileCheck = true; } if (bManaCheck && bTimeCheck && bRangeCheck && bHitRoll && bTileCheck) { decreaseMana(pSlayer, RequiredMP, _GCSkillToTileOK1); // calculate damage and duration time SkillInput input(pSlayer, pSkillSlot); SkillOutput output; computeOutput(input, output); Range_t Range = 3; // 扁粮俊 鞍篮 捞棋飘啊 鸥老俊 乐促搁 瘤快绊 货肺 汲沥茄促. Tile& tile = pZone->getTile(X, Y); Effect* pOldEffect = tile.getEffect(Effect::EFFECT_CLASS_VIGOR_DROP); if(pOldEffect != NULL) { ObjectID_t effectID = pOldEffect->getObjectID(); pZone->deleteEffect(effectID); } // 捞棋飘 坷宏璃飘甫 积己秦辑 鸥老俊 嘿牢促. //cout << "make EffectObject to Tile" << X << " " << Y << endl; EffectVigorDrop* pEffect = new EffectVigorDrop(pZone, X, Y); // 快急鼻 矫胶袍阑 困窍咯 捞抚苞 颇萍 酒捞叼甫 持绰促. pEffect->setCasterName(pSlayer->getName()); pEffect->setPartyID(pSlayer->getPartyID()); pEffect->setDeadline(output.Duration); pEffect->setNextTime(0); pEffect->setTick(output.Tick); pEffect->setDamage(output.Damage); pEffect->setLevel(pSkillInfo->getLevel()/2); // ObjectRegistry& objectregister = pZone->getObjectRegistry(); objectregister.registerObject(pEffect); // // //pZone->addEffect(pEffect); //tile.addEffect(pEffect); // 捞棋飘 裹困郴狼 葛电 Creature俊霸 effect甫 嘿咯霖促. // Slayer啊 扁贱阑 荤侩茄 版快 鞍篮 Slayer俊霸绰 // 秦寸窍瘤 臼绰促. bool bEffected = false; bool bHit = false; Creature* pTargetCreature; list<Creature*> cList; cList.push_back(pSlayer); int oX, oY; for(oX = -2; oX <= 2; oX++) for(oY = -2; oY <= 2; oY++) { int tileX = X+oX; int tileY = Y+oY; if (!rect.ptInRect(tileX, tileY)) continue; Tile& tile = pZone->getTile(tileX, tileY); if (!tile.canAddEffect()) continue; pTargetCreature = NULL; if(tile.hasCreature(Creature::MOVE_MODE_WALKING)) pTargetCreature = tile.getCreature(Creature::MOVE_MODE_WALKING); if(pTargetCreature != NULL) { if(pTargetCreature->isVampire()) { if(pEffect->affectCreature(pTargetCreature, false) == true) { //cout << "VigorDrop to Slayer Success" << endl; Player* pTargetPlayer = pTargetCreature->getPlayer(); bEffected = true; // 版氰摹 惑铰阑 困秦辑 Hit/Don'tHie甫 扁废茄促. bHit = true; bool bCanSee = canSee(pTargetCreature, pSlayer); _GCSkillToTileOK1.addCListElement(pTargetCreature->getObjectID()); _GCSkillToTileOK4.addCListElement(pTargetCreature->getObjectID()); _GCSkillToTileOK5.addCListElement(pTargetCreature->getObjectID()); cList.push_back(pTargetCreature); if (bCanSee) { // 傍拜阑 寸茄 荤恩俊霸 _GCSkillToTileOK2.setObjectID(pSlayer->getObjectID()); _GCSkillToTileOK2.setSkillType(SkillType); _GCSkillToTileOK2.setX(X); _GCSkillToTileOK2.setY(Y); _GCSkillToTileOK2.setDuration(output.Duration); _GCSkillToTileOK2.setRange(Range); pTargetPlayer->sendPacket(&_GCSkillToTileOK2); } } else { //cout << "VigorDrop to creature fail" << endl; } } else if(pTargetCreature->isMonster()) { if(pEffect->affectCreature(pTargetCreature, false) == true) { //cout << "VigorDrop to Monster Success" << endl; bHit = true; Monster* pMonster = dynamic_cast<Monster*>(pTargetCreature); pMonster->addEnemy(pSlayer); // 付瘤阜 锭赴 局啊 浇饭捞绢扼绊 汲沥茄促. by sigi. 2002.6.21 pMonster->setLastHitCreatureClass(Creature::CREATURE_CLASS_SLAYER); } } } // if(pTargetCreature!= NULL) }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -