📄 curepoison.cpp
字号:
//////////////////////////////////////////////////////////////////////////////// Filename : CurePoison.cpp// Written by : elca@ewestsoft.com// Description : //////////////////////////////////////////////////////////////////////////////#include "CurePoison.h"#include "EffectPoison.h"#include "EffectYellowPoisonToCreature.h"#include "EffectDarkBluePoison.h"#include "EffectGreenStalker.h"#include "Gpackets/GCSkillToObjectOK1.h"#include "Gpackets/GCSkillToObjectOK2.h"#include "Gpackets/GCSkillToObjectOK3.h"#include "Gpackets/GCSkillToObjectOK4.h"#include "Gpackets/GCSkillToObjectOK5.h"#include "Gpackets/GCSkillToSelfOK1.h"#include "Gpackets/GCSkillToSelfOK2.h"#include "Gpackets/GCRemoveEffect.h"//////////////////////////////////////////////////////////////////////////////// 浇饭捞绢 坷宏璃飘 勤甸矾//////////////////////////////////////////////////////////////////////////////void CurePoison::execute(Slayer* pSlayer, ObjectID_t TargetObjectID, SkillSlot* pSkillSlot, CEffectID_t CEffectID) throw(Error){ __BEGIN_TRY //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " Begin" << endl; Assert(pSlayer != NULL); Assert(pSkillSlot != NULL); try { Player* pPlayer = pSlayer->getPlayer(); Zone* pZone = pSlayer->getZone(); Assert(pPlayer != NULL); Assert(pZone != NULL); Creature* pTargetCreature = pZone->getCreature(TargetObjectID); //Assert(pTargetCreature != NULL); // NoSuch力芭. by sigi. 2002.5.2 // 浇饭捞绢 寇俊绰 摹丰且 荐 绝促. if (pTargetCreature==NULL || pTargetCreature->isSlayer() == false) { executeSkillFailException(pSlayer, getSkillType()); //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End" << endl; return; } GCSkillToObjectOK1 _GCSkillToObjectOK1; GCSkillToObjectOK2 _GCSkillToObjectOK2; GCSkillToObjectOK3 _GCSkillToObjectOK3; GCSkillToObjectOK4 _GCSkillToObjectOK4; GCSkillToObjectOK5 _GCSkillToObjectOK5; SkillType_t SkillType = pSkillSlot->getSkillType(); SkillInfo* pSkillInfo = g_pSkillInfoManager->getSkillInfo(SkillType); SkillDomainType_t DomainType = pSkillInfo->getDomainType(); // by sigi. 2002.12.3 SkillLevel_t SkillLevel = pSlayer->getINT()/2; //pSkillSlot->getExpLevel(); bool bGreenPoison = false; // GreenPoison阑 摹丰且鳖狼 咯何 bool bYellowPoison = false; // YellowPoison阑 摹丰且鳖狼 咯何 bool bDarkBluePoison = false; // DarkBluePoison阑 摹丰且鳖狼 咯何 bool bGreenStalker = false; // GreenStalker甫 摹丰且鳖狼 咯何 bool bEffected = false; // 酒公 刀捞唱 吧妨乐栏搁 囊促. EffectPoison* pEffectPoison = NULL; EffectYellowPoisonToCreature* pEffectYellowPoisonToCreature = NULL; EffectDarkBluePoison* pEffectDBP = NULL; EffectGreenStalker* pEffectGreenStalker = NULL; if (pTargetCreature->isEffect(Effect::EFFECT_CLASS_POISON)) { pEffectPoison = (EffectPoison*)pTargetCreature->findEffect(Effect::EFFECT_CLASS_POISON); Assert(pEffectPoison != NULL); bGreenPoison = HitRoll::isSuccessCurePoison(60, SkillLevel, 10, pEffectPoison->getLevel()); bEffected = true; } if (pTargetCreature->isEffect(Effect::EFFECT_CLASS_YELLOW_POISON_TO_CREATURE)) { pEffectYellowPoisonToCreature = (EffectYellowPoisonToCreature*)pTargetCreature->findEffect(Effect::EFFECT_CLASS_YELLOW_POISON_TO_CREATURE); Assert(pEffectYellowPoisonToCreature != NULL); bYellowPoison = HitRoll::isSuccessCurePoison(60, SkillLevel, 20, pEffectYellowPoisonToCreature->getLevel()); bEffected = true; } if (pTargetCreature->isEffect(Effect::EFFECT_CLASS_DARKBLUE_POISON)) { pEffectDBP = (EffectDarkBluePoison*)pTargetCreature->findEffect(Effect::EFFECT_CLASS_DARKBLUE_POISON); Assert(pEffectDBP != NULL); bDarkBluePoison = HitRoll::isSuccessCurePoison(60, SkillLevel, 30, pEffectDBP->getLevel()); bEffected = true; } if (pTargetCreature->isEffect(Effect::EFFECT_CLASS_GREEN_STALKER)) { pEffectGreenStalker = (EffectGreenStalker*)pTargetCreature->findEffect(Effect::EFFECT_CLASS_GREEN_STALKER); Assert(pEffectGreenStalker != NULL); bGreenStalker = HitRoll::isSuccessCurePoison(60, SkillLevel, 40, pEffectGreenStalker->getLevel()); bEffected = true; } int RequiredMP = (int)pSkillInfo->getConsumeMP(); bool bManaCheck = hasEnoughMana(pSlayer, RequiredMP); bool bTimeCheck = verifyRunTime(pSkillSlot); bool bRangeCheck = verifyDistance(pSlayer, pTargetCreature, pSkillInfo->getRange()); // 付唱啊 乐绊, 矫埃捞 灯绊, 芭府啊 利寸窍哥, // 刀捞 窍唱扼档 吧妨乐绢具 茄促. if (bManaCheck && bTimeCheck && bRangeCheck && bEffected) { decreaseMana(pSlayer, RequiredMP, _GCSkillToObjectOK1); SkillInput input(pSlayer, pSkillSlot); SkillOutput output; computeOutput(input, output); // 阿阿狼 刀付促 摹丰甫 窍绊, // 菩哦俊促 捞棋飘 昏力窍扼绊 歹茄促. GCRemoveEffect gcRemoveEffect; gcRemoveEffect.setObjectID(pTargetCreature->getObjectID()); if (bGreenPoison) { pEffectPoison->setDeadline(0); pTargetCreature->removeFlag(Effect::EFFECT_CLASS_POISON); gcRemoveEffect.addEffectList(Effect::EFFECT_CLASS_POISON); } if (bYellowPoison) { pEffectYellowPoisonToCreature->setDeadline(0); pTargetCreature->removeFlag(Effect::EFFECT_CLASS_YELLOW_POISON_TO_CREATURE); gcRemoveEffect.addEffectList(Effect::EFFECT_CLASS_YELLOW_POISON_TO_CREATURE); } if (bDarkBluePoison) { pEffectDBP->setDeadline(0); pTargetCreature->removeFlag(Effect::EFFECT_CLASS_DARKBLUE_POISON); gcRemoveEffect.addEffectList(Effect::EFFECT_CLASS_DARKBLUE_POISON); } if (bGreenStalker) { pEffectGreenStalker->setDeadline(0); pTargetCreature->removeFlag(Effect::EFFECT_CLASS_GREEN_STALKER); gcRemoveEffect.addEffectList(Effect::EFFECT_CLASS_GREEN_STALKER); } // 版氰摹甫 棵赴促. SkillGrade Grade = g_pSkillInfoManager->getGradeByDomainLevel(pSlayer->getSkillDomainLevel(DomainType)); Exp_t ExpUp = 10*(Grade+1); shareAttrExp(pSlayer, ExpUp, 1, 1, 8, _GCSkillToObjectOK1); increaseDomainExp(pSlayer, DomainType, pSkillInfo->getPoint(), _GCSkillToObjectOK1); increaseSkillExp(pSlayer, DomainType, pSkillSlot, pSkillInfo, _GCSkillToObjectOK1); ZoneCoord_t myX = pSlayer->getX(); ZoneCoord_t myY = pSlayer->getY(); ZoneCoord_t targetX = pTargetCreature->getX(); ZoneCoord_t targetY = pTargetCreature->getY(); _GCSkillToObjectOK1.setSkillType(SkillType); _GCSkillToObjectOK1.setCEffectID(CEffectID); _GCSkillToObjectOK1.setTargetObjectID(TargetObjectID); _GCSkillToObjectOK1.setDuration(0); _GCSkillToObjectOK2.setObjectID(pSlayer->getObjectID()); _GCSkillToObjectOK2.setSkillType(SkillType); _GCSkillToObjectOK2.setDuration (0); _GCSkillToObjectOK3.setObjectID(pSlayer->getObjectID()); _GCSkillToObjectOK3.setSkillType(SkillType); _GCSkillToObjectOK3.setTargetXY(targetX, targetY); _GCSkillToObjectOK4.setSkillType(SkillType); _GCSkillToObjectOK4.setTargetObjectID(TargetObjectID); _GCSkillToObjectOK5.setObjectID(pSlayer->getObjectID()); _GCSkillToObjectOK5.setSkillType(SkillType); _GCSkillToObjectOK5.setTargetObjectID (TargetObjectID); _GCSkillToObjectOK5.setDuration (0); // Send Packet pPlayer->sendPacket(&_GCSkillToObjectOK1); if (pTargetCreature->isPC()) { Player* pTargetPlayer = pTargetCreature->getPlayer(); pTargetPlayer->sendPacket(&_GCSkillToObjectOK2); } pZone->broadcastPacket(targetX, targetY, &gcRemoveEffect); list< Creature*> cList; cList.push_back(pSlayer); cList.push_back(pTargetCreature); cList = pZone->broadcastSkillPacket(myX, myY, targetX, targetY, &_GCSkillToObjectOK5 , cList); pZone->broadcastPacket(myX, myY, &_GCSkillToObjectOK3 , cList); pZone->broadcastPacket(targetX, targetY, &_GCSkillToObjectOK4 , cList); pSkillSlot->setRunTime(output.Delay); } else { executeSkillFailNormal(pSlayer, getSkillType(), pTargetCreature); } } catch(Throwable & t) { executeSkillFailException(pSlayer, getSkillType()); } //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End" << endl; __END_CATCH}//////////////////////////////////////////////////////////////////////////////// 浇饭捞绢 伎橇 勤甸矾//////////////////////////////////////////////////////////////////////////////void CurePoison::execute(Slayer* pSlayer, SkillSlot* pSkillSlot, CEffectID_t CEffectID) throw(Error){ __BEGIN_TRY //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " Begin" << endl; Assert(pSlayer != NULL); Assert(pSkillSlot != NULL); try { Player* pPlayer = pSlayer->getPlayer(); Zone* pZone = pSlayer->getZone(); Assert(pPlayer != NULL); Assert(pZone != NULL); GCSkillToSelfOK1 _GCSkillToSelfOK1; GCSkillToSelfOK2 _GCSkillToSelfOK2; SkillType_t SkillType = pSkillSlot->getSkillType(); SkillInfo* pSkillInfo = g_pSkillInfoManager->getSkillInfo(SkillType); SkillDomainType_t DomainType = pSkillInfo->getDomainType(); // by sigi. 2002.12.3 //SkillLevel_t SkillLevel = pSkillSlot->getExpLevel(); SkillLevel_t SkillLevel = pSlayer->getINT()/2; //pSkillSlot->getExpLevel(); bool bGreenPoison = false; // GreenPoison阑 摹丰且鳖狼 咯何 bool bYellowPoison = false; // YellowPoison阑 摹丰且鳖狼 咯何 bool bDarkBluePoison = false; // DarkBluePoison阑 摹丰且鳖狼 咯何 bool bGreenStalker = false; // GreenStalker甫 摹丰且鳖狼 咯何 bool bEffected = false; // 酒公 刀捞唱 吧妨乐栏搁 囊促. EffectPoison* pEffectPoison = NULL; EffectYellowPoisonToCreature* pEffectYellowPoisonToCreature = NULL; EffectDarkBluePoison* pEffectDBP = NULL; EffectGreenStalker* pEffectGreenStalker = NULL; if (pSlayer->isEffect(Effect::EFFECT_CLASS_POISON)) { pEffectPoison = (EffectPoison*)pSlayer->findEffect(Effect::EFFECT_CLASS_POISON); Assert(pEffectPoison != NULL); bGreenPoison = HitRoll::isSuccessCurePoison(75, SkillLevel, 10, pEffectPoison->getLevel()); bEffected = true; } if (pSlayer->isEffect(Effect::EFFECT_CLASS_YELLOW_POISON_TO_CREATURE)) { pEffectYellowPoisonToCreature = (EffectYellowPoisonToCreature*)pSlayer->findEffect(Effect::EFFECT_CLASS_YELLOW_POISON_TO_CREATURE); Assert(pEffectYellowPoisonToCreature != NULL); bYellowPoison = HitRoll::isSuccessCurePoison(75, SkillLevel, 20, pEffectYellowPoisonToCreature->getLevel()); bEffected = true; } if (pSlayer->isEffect(Effect::EFFECT_CLASS_DARKBLUE_POISON)) { pEffectDBP = (EffectDarkBluePoison*)pSlayer->findEffect(Effect::EFFECT_CLASS_DARKBLUE_POISON); Assert(pEffectDBP != NULL); bDarkBluePoison = HitRoll::isSuccessCurePoison(75, SkillLevel, 30, pEffectDBP->getLevel()); bEffected = true; } if (pSlayer->isEffect(Effect::EFFECT_CLASS_GREEN_STALKER)) { pEffectGreenStalker = (EffectGreenStalker*)pSlayer->findEffect(Effect::EFFECT_CLASS_GREEN_STALKER); Assert(pEffectGreenStalker != NULL); bGreenStalker = HitRoll::isSuccessCurePoison(75, SkillLevel, 40, pEffectGreenStalker->getLevel()); bEffected = true; } int RequiredMP = (int)pSkillInfo->getConsumeMP(); bool bManaCheck = hasEnoughMana(pSlayer, RequiredMP); bool bTimeCheck = verifyRunTime(pSkillSlot); bool bRangeCheck = checkZoneLevelToUseSkill(pSlayer); // 付唱啊 乐绊, 矫埃捞 灯绊, 芭府啊 利寸窍哥, // 刀捞 窍唱扼档 吧妨乐绢具 茄促. if (bManaCheck && bTimeCheck && bRangeCheck && bEffected) { decreaseMana(pSlayer, RequiredMP, _GCSkillToSelfOK1); SkillInput input(pSlayer, pSkillSlot); SkillOutput output; computeOutput(input, output); // 阿阿狼 刀付促 摹丰甫 窍绊, // 菩哦俊促 捞棋飘 昏力窍扼绊 歹茄促. GCRemoveEffect gcRemoveEffect; gcRemoveEffect.setObjectID(pSlayer->getObjectID()); if (bGreenPoison) { pEffectPoison->setDeadline(0); pSlayer->removeFlag(Effect::EFFECT_CLASS_POISON); gcRemoveEffect.addEffectList(Effect::EFFECT_CLASS_POISON); } if (bYellowPoison) { pEffectYellowPoisonToCreature->setDeadline(0); pSlayer->removeFlag(Effect::EFFECT_CLASS_YELLOW_POISON_TO_CREATURE); gcRemoveEffect.addEffectList(Effect::EFFECT_CLASS_YELLOW_POISON_TO_CREATURE); } if (bDarkBluePoison) { pEffectDBP->setDeadline(0); pSlayer->removeFlag(Effect::EFFECT_CLASS_DARKBLUE_POISON); gcRemoveEffect.addEffectList(Effect::EFFECT_CLASS_DARKBLUE_POISON); } if (bGreenStalker) { pEffectGreenStalker->setDeadline(0); pSlayer->removeFlag(Effect::EFFECT_CLASS_GREEN_STALKER); gcRemoveEffect.addEffectList(Effect::EFFECT_CLASS_GREEN_STALKER); } // 版氰摹甫 棵赴促. SkillGrade Grade = g_pSkillInfoManager->getGradeByDomainLevel(pSlayer->getSkillDomainLevel(DomainType)); Exp_t ExpUp = 10* (Grade + 1); shareAttrExp(pSlayer, ExpUp, 1, 1, 8, _GCSkillToSelfOK1); increaseDomainExp(pSlayer, DomainType, pSkillInfo->getPoint(), _GCSkillToSelfOK1); increaseSkillExp(pSlayer, DomainType, pSkillSlot, pSkillInfo, _GCSkillToSelfOK1); ZoneCoord_t myX = pSlayer->getX(); ZoneCoord_t myY = pSlayer->getY(); _GCSkillToSelfOK1.setSkillType(SkillType); _GCSkillToSelfOK1.setCEffectID(CEffectID); _GCSkillToSelfOK1.setDuration(0); _GCSkillToSelfOK2.setObjectID(pSlayer->getObjectID()); _GCSkillToSelfOK2.setSkillType(SkillType); _GCSkillToSelfOK2.setDuration (0); // Send Packet pPlayer->sendPacket(&_GCSkillToSelfOK1); pZone->broadcastPacket(myX, myY, &_GCSkillToSelfOK2 , pSlayer); // 扁贱捞 钱啡促绰 巴阑 舅妨霖促酒. pZone->broadcastPacket(myX, myY, &gcRemoveEffect); pSkillSlot->setRunTime(output.Delay); } else { executeSkillFailNormal(pSlayer, getSkillType(), NULL); } } catch(Throwable & t) { executeSkillFailException(pSlayer, getSkillType()); } //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End" << endl; __END_CATCH}CurePoison g_CurePoison;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -