📄 cureall.cpp
字号:
_GCSkillToObjectOK4.setTargetObjectID(TargetObjectID); _GCSkillToObjectOK5.setObjectID(pSlayer->getObjectID()); _GCSkillToObjectOK5.setSkillType(param.SkillType); _GCSkillToObjectOK5.setTargetObjectID (TargetObjectID); _GCSkillToObjectOK5.setDuration (0); pPlayer->sendPacket(&_GCSkillToObjectOK1); if (pTargetCreature->isPC()) { Player* pTargetPlayer = pTargetCreature->getPlayer(); Assert(pTargetPlayer != NULL); pTargetPlayer->sendPacket(&_GCSkillToObjectOK2); } 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(param.Delay); } else { executeSkillFailNormal(pSlayer, param.SkillType, pTargetCreature); } } catch(Throwable & t) { executeSkillFailException(pSlayer, param.SkillType); } __END_CATCH}//////////////////////////////////////////////////////////////////////////////// 浇饭捞绢 伎橇 勤甸矾//////////////////////////////////////////////////////////////////////////////void CureAll::execute(Slayer* pSlayer, SkillSlot* pSkillSlot, CEffectID_t CEffectID) throw(Error){ __BEGIN_TRY Assert(pSlayer != NULL); Assert(pSkillSlot != NULL); SkillInput input(pSlayer, pSkillSlot); SkillOutput output; input.TargetType = SkillInput::TARGET_SELF; computeOutput(input, output); SIMPLE_SKILL_INPUT param; param.SkillType = getSkillType(); param.SkillDamage = output.Damage; param.Delay = output.Delay; param.STRMultiplier = 1; param.DEXMultiplier = 1; param.INTMultiplier = 8; param.Level = CureAllBloodDrainLevel; try { Player* pPlayer = pSlayer->getPlayer(); Zone* pZone = pSlayer->getZone(); GCSkillToSelfOK1 _GCSkillToSelfOK1; GCSkillToSelfOK2 _GCSkillToSelfOK2; SkillInfo* pSkillInfo = g_pSkillInfoManager->getSkillInfo(param.SkillType); SkillDomainType_t DomainType = pSkillInfo->getDomainType(); Level_t SkillLevel = pSkillSlot->getExpLevel(); int RequiredMP = (int)pSkillInfo->getConsumeMP(); bool bManaCheck = hasEnoughMana(pSlayer, RequiredMP); bool bTimeCheck = verifyRunTime(pSkillSlot); bool bRangeCheck = checkZoneLevelToUseSkill(pSlayer); bool bHitRoll = HitRoll::isSuccessMagic(pSlayer, pSkillInfo, pSkillSlot); bool bHPCheck = false; EffectBloodDrain* pEffectBloodDrain = NULL; bool bEffected = false; // 酒公 历林唱 吧妨 乐栏搁 囊促. if (pSlayer->getHP(ATTR_CURRENT) < pSlayer->getHP(ATTR_MAX)) { bHPCheck = true; } if (pSlayer->isFlag(Effect::EFFECT_CLASS_BLOOD_DRAIN)) { Effect* pEffect = pSlayer->findEffect(Effect::EFFECT_CLASS_BLOOD_DRAIN); pEffectBloodDrain = dynamic_cast<EffectBloodDrain*>(pEffect); Assert(pEffectBloodDrain != NULL); if (pEffectBloodDrain->getLevel() < param.Level) bHPCheck = true; bEffected = true; } bool bDoom = false; bool bBlunting = false; bool bParalyze = false; bool bSeduction = false; EffectDoom* pEffectDoom = NULL; EffectBlunting* pEffectBlunting = NULL; EffectParalyze* pEffectParalyze = NULL; EffectSeduction* pEffectSeduction = NULL; // 历林 拌凯 秦家 if (pSlayer->isEffect(Effect::EFFECT_CLASS_DOOM)) { pEffectDoom = (EffectDoom*)pSlayer->findEffect(Effect::EFFECT_CLASS_DOOM); Assert(pEffectDoom != NULL); bDoom = HitRoll::isSuccessRemoveCurse(75, SkillLevel, 10, pEffectDoom->getLevel(), 25); bEffected = true; bHPCheck = true; } if (pSlayer->isEffect(Effect::EFFECT_CLASS_BLUNTING)) { pEffectBlunting = (EffectBlunting*)pSlayer->findEffect(Effect::EFFECT_CLASS_BLUNTING); Assert(pEffectBlunting != NULL); bBlunting = HitRoll::isSuccessRemoveCurse(75, SkillLevel, 15, pEffectBlunting->getLevel(), 25); bEffected = true; bHPCheck = true; } if (pSlayer->isEffect(Effect::EFFECT_CLASS_PARALYZE)) { pEffectParalyze = (EffectParalyze*)pSlayer->findEffect(Effect::EFFECT_CLASS_PARALYZE); Assert(pEffectParalyze != NULL); bParalyze = HitRoll::isSuccessRemoveCurse(75, SkillLevel, 20, pEffectParalyze->getLevel(), 25); bEffected = true; bHPCheck = true; } if (pSlayer->isEffect(Effect::EFFECT_CLASS_SEDUCTION)) { pEffectSeduction = (EffectSeduction*)pSlayer->findEffect(Effect::EFFECT_CLASS_SEDUCTION); Assert(pEffectSeduction != NULL); bSeduction = HitRoll::isSuccessRemoveCurse(75, SkillLevel, 30, pEffectSeduction->getLevel(), 25); bEffected = true; bHPCheck = true; } // 刀 拌凯 秦家 bool bGreenPoison = false; // GreenPoison阑 摹丰且鳖狼 咯何 bool bYellowPoison = false; // YellowPoison阑 摹丰且鳖狼 咯何 bool bDarkBluePoison = false; // DarkBluePoison阑 摹丰且鳖狼 咯何 bool bGreenStalker = false; // GreenStalker甫 摹丰且鳖狼 咯何 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(), 25); bEffected = true; bHPCheck = 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(), 25); bEffected = true; bHPCheck = 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(), 25); bEffected = true; bHPCheck = 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(), 25); bEffected = true; bHPCheck = true; } if (bManaCheck && bTimeCheck && bRangeCheck && bHitRoll && bHPCheck && pSlayer->isAlive()) { decreaseMana(pSlayer, RequiredMP, _GCSkillToSelfOK1); uint HealPoint = param.SkillDamage; // 软趋寸茄 惑怕扼搁 软趋 惑怕甫 朝妨霖促. if (pEffectBloodDrain != NULL && pEffectBloodDrain->getLevel() < param.Level) { // 软趋 酒福官捞飘甫 规瘤窍扁 困茄 饶蜡刘 捞棋飘甫 嘿咯霖促. if (pSlayer->isFlag(Effect::EFFECT_CLASS_AFTERMATH)) { Effect* pEffect = pSlayer->findEffect(Effect::EFFECT_CLASS_AFTERMATH); EffectAftermath* pEffectAftermath = dynamic_cast<EffectAftermath*>(pEffect); pEffectAftermath->setDeadline(5*600); // 5盒 悼救 瘤加等促. } else { EffectAftermath* pEffectAftermath = new EffectAftermath(pSlayer); pEffectAftermath->setDeadline(5*600); // 5盒 悼救 瘤加等促. pSlayer->addEffect(pEffectAftermath); pSlayer->setFlag(Effect::EFFECT_CLASS_AFTERMATH); pEffectAftermath->create(pSlayer->getName()); } pEffectBloodDrain->destroy(pSlayer->getName()); pSlayer->deleteEffect(Effect::EFFECT_CLASS_BLOOD_DRAIN); SLAYER_RECORD prev; pSlayer->getSlayerRecord(prev); pSlayer->initAllStat(); pSlayer->sendRealWearingInfo(); pSlayer->addModifyInfo(prev, _GCSkillToSelfOK1); GCRemoveEffect gcRemoveEffect; gcRemoveEffect.setObjectID(pSlayer->getObjectID()); gcRemoveEffect.addEffectList((EffectID_t)Effect::EFFECT_CLASS_BLOOD_DRAIN); pZone->broadcastPacket(pSlayer->getX(), pSlayer->getY(), &gcRemoveEffect); } // 阿阿狼 历林甫 昏力窍绊, // 菩哦俊促 捞棋飘 昏力窍扼绊 歹茄促. GCRemoveEffect gcRemoveEffect; gcRemoveEffect.setObjectID(pSlayer->getObjectID()); if (bDoom) { pEffectDoom->setDeadline(0); pSlayer->removeFlag(Effect::EFFECT_CLASS_DOOM); gcRemoveEffect.addEffectList(Effect::EFFECT_CLASS_DOOM); } if (bBlunting) { pEffectBlunting->setDeadline(0); pSlayer->removeFlag(Effect::EFFECT_CLASS_BLUNTING); gcRemoveEffect.addEffectList(Effect::EFFECT_CLASS_BLUNTING); } if (bParalyze) { pEffectParalyze->setDeadline(0); pSlayer->removeFlag(Effect::EFFECT_CLASS_PARALYZE); gcRemoveEffect.addEffectList(Effect::EFFECT_CLASS_PARALYZE); } if (bSeduction) { pEffectSeduction->setDeadline(0); pSlayer->removeFlag(Effect::EFFECT_CLASS_SEDUCTION); gcRemoveEffect.addEffectList(Effect::EFFECT_CLASS_SEDUCTION); } // 阿阿狼 刀付促 摹丰甫 窍绊, // 菩哦俊促 捞棋飘 昏力窍扼绊 歹茄促. 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); } if( bEffected ) { pZone->broadcastPacket(pSlayer->getX(), pSlayer->getY(), &gcRemoveEffect); } // HP甫 技泼茄促. HP_t CurrentHP = pSlayer->getHP(ATTR_CURRENT); HP_t MaxHP = pSlayer->getHP(ATTR_MAX); // 角力 雀汗 荐摹甫 拌魂茄促. int RealHealPoint = 0; if( CurrentHP + HealPoint <= MaxHP ) { RealHealPoint = max( (unsigned int)0, HealPoint ); } else { RealHealPoint = max( 0, MaxHP - CurrentHP ); } // 版氰摹甫 棵妨霖促. shareAttrExp(pSlayer, RealHealPoint, param.STRMultiplier, param.DEXMultiplier, param.INTMultiplier, _GCSkillToSelfOK1); increaseDomainExp(pSlayer, DomainType, pSkillInfo->getPoint(), _GCSkillToSelfOK1); increaseSkillExp(pSlayer, DomainType, pSkillSlot, pSkillInfo, _GCSkillToSelfOK1); CurrentHP = min((int)MaxHP, (int)(CurrentHP + HealPoint)); pSlayer->setHP(CurrentHP , ATTR_CURRENT); // HP甫 宏肺靛某胶泼茄促. GCStatusCurrentHP gcStatusCurrentHP; gcStatusCurrentHP.setObjectID(pSlayer->getObjectID()); gcStatusCurrentHP.setCurrentHP (CurrentHP); pZone->broadcastPacket(pSlayer->getX(), pSlayer->getY(), &gcStatusCurrentHP); ZoneCoord_t myX = pSlayer->getX(); ZoneCoord_t myY = pSlayer->getY(); _GCSkillToSelfOK1.setSkillType(param.SkillType); _GCSkillToSelfOK1.setCEffectID(CEffectID); _GCSkillToSelfOK1.setDuration(0); _GCSkillToSelfOK2.setObjectID(pSlayer->getObjectID()); _GCSkillToSelfOK2.setSkillType(param.SkillType); _GCSkillToSelfOK2.setDuration (0); // Send Packet pPlayer->sendPacket(&_GCSkillToSelfOK1); pZone->broadcastPacket(myX, myY, &_GCSkillToSelfOK2, pSlayer); pSkillSlot->setRunTime(param.Delay); } else { executeSkillFailNormal(pSlayer, param.SkillType, NULL); } } catch(Throwable & t) { executeSkillFailException(pSlayer, param.SkillType); } __END_CATCH}CureAll g_CureAll;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -