📄 soulchain.cpp
字号:
{ // Target 眉农 // 鞍篮 辆练捞绢具 茄促. bool bVampire = pTarget->isVampire(); // 老馆 蜡历捞咯具 等促. bool bPLAYER = pTarget->getCompetence() == PLAYER; // 付胶磐 饭绢肺绰 捞悼且 荐 绝促. bool bMasterLair = pTargetZone->isMasterLair(); // 蜡丰 辑厚胶 荤侩捞 啊瓷茄啊? bool bValidPay = pGamePlayer->loginPayPlay( pGamePlayer->getSocket()->getHost(), pGamePlayer->getID() ) || pGamePlayer->isFamilyFreePass() || !g_pZoneInfoManager->getZoneInfo( pTargetZone->getZoneID() )->isPayPlay(); // 具傈荤飞何, 矫寇胞瘤开, 捞亥飘版扁厘, 捞亥飘OX, 抛皋府俊肺绰 哎 荐 绝促. bool bValidZone = pTargetZone->getZoneID() != 2101 && pTargetZone->getZoneID() != 2102 && pTargetZone->getZoneID() != 1005 && pTargetZone->getZoneID() != 1006 && pTargetZone->getZoneID() != 1122 && pTargetZone->getZoneID() != 1131 && pTargetZone->getZoneID() != 1132 && pTargetZone->getZoneID() != 1133 && pTargetZone->getZoneID() != 1134 && !pTargetZone->isHolyLand() && !pTargetZone->isCastle() && !pTargetZone->isMasterLair() && !g_pPKZoneInfoManager->isPKZone( pTargetZone->getZoneID() ); bValidTarget = bVampire && bPLAYER && !bMasterLair && bValidPay && bValidZone; } } __LEAVE_CRITICAL_SECTION( (*g_pPCFinder) ) int RequiredMP = decreaseConsumeMP(pVampire, pSkillInfo); bool bManaCheck = hasEnoughMana(pVampire, RequiredMP); bool bTimeCheck = verifyRunTime(pSkillSlot);// bool bRangeCheck = checkZoneLevelToUseSkill(pVampire);// bool bHitRoll = HitRoll::isSuccessMagic(pVampire, pSkillInfo, pSkillSlot); bool bEffected = pVampire->isFlag(Effect::EFFECT_CLASS_SOUL_CHAIN) || pVampire->hasRelicItem() || pVampire->isFlag(Effect::EFFECT_CLASS_HAS_FLAG) || pVampire->isFlag(Effect::EFFECT_CLASS_HAS_SWEEPER); if (bManaCheck && bTimeCheck && !bEffected && bValidTarget) { decreaseMana(pVampire, RequiredMP, _GCSkillToSelfOK1); SkillInput input(pVampire); SkillOutput output; computeOutput(input, output); // 10 檬 悼救 框流老 荐 绝档废 捞棋飘甫 嘿牢促. EffectSoulChain* pEffect = new EffectSoulChain( pVampire ); pEffect->setDuration(output.Duration); pEffect->setDeadline(100); pEffect->setTargetName( targetName ); pEffect->setZone( pZone ); ObjectRegistry & objectregister = pZone->getObjectRegistry(); objectregister.registerObject(pEffect); pZone->addEffect(pEffect); pVampire->setFlag(Effect::EFFECT_CLASS_SOUL_CHAIN); _GCSkillToSelfOK1.setSkillType(SkillType); _GCSkillToSelfOK1.setCEffectID(CEffectID); _GCSkillToSelfOK1.setDuration(0); _GCSkillToSelfOK1.addShortData(MODIFY_EFFECT_STAT, Effect::EFFECT_CLASS_SOUL_CHAIN); _GCSkillToSelfOK2.setObjectID(pVampire->getObjectID()); _GCSkillToSelfOK2.setSkillType(SkillType); _GCSkillToSelfOK2.setDuration(0); // Send Packet pPlayer->sendPacket(&_GCSkillToSelfOK1); pZone->broadcastPacket(x, y, &_GCSkillToSelfOK2, pVampire); pSkillSlot->setRunTime(output.Delay); } else { executeSkillFailNormal(pVampire, getSkillType(), NULL); } } catch(Throwable & t) { executeSkillFailException(pVampire, getSkillType()); } //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End" << endl; __END_CATCH}//////////////////////////////////////////////////////////////////////////////// 酒快胶磐令 伎橇//////////////////////////////////////////////////////////////////////////////void SoulChain::execute(Ousters* pOusters, const string& targetName, OustersSkillSlot* pSkillSlot, CEffectID_t CEffectID) throw(Error){ __BEGIN_TRY //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " Begin" << endl; Assert(pOusters != NULL); Assert(pSkillSlot != NULL); try { Player* pPlayer = pOusters->getPlayer(); Zone* pZone = pOusters->getZone(); Assert(pPlayer != NULL); Assert(pZone != NULL); GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer); Assert(pGamePlayer != NULL); if ( pOusters->isFlag(Effect::EFFECT_CLASS_HAS_FLAG) || pOusters->isFlag(Effect::EFFECT_CLASS_HAS_SWEEPER) ) { executeSkillFailNormal(pOusters, getSkillType(), NULL); return; } GCSkillToSelfOK1 _GCSkillToSelfOK1; GCSkillToSelfOK2 _GCSkillToSelfOK2; SkillType_t SkillType = pSkillSlot->getSkillType(); SkillInfo* pSkillInfo = g_pSkillInfoManager->getSkillInfo(SkillType); ZoneCoord_t x = pOusters->getX(); ZoneCoord_t y = pOusters->getY(); bool bValidTarget = false; __ENTER_CRITICAL_SECTION( (*g_pPCFinder) ) Creature* pTarget = g_pPCFinder->getCreature_LOCKED( targetName ); if ( pTarget != NULL ) { Zone* pTargetZone = pTarget->getZone(); if ( pTargetZone != NULL ) { // Target 眉农 // 鞍篮 辆练捞绢具 茄促. bool bOusters = pTarget->isOusters(); // 老馆 蜡历捞咯具 等促. bool bPLAYER = pTarget->getCompetence() == PLAYER; // 付胶磐 饭绢肺绰 捞悼且 荐 绝促. bool bMasterLair = pTargetZone->isMasterLair(); // 蜡丰 辑厚胶 荤侩捞 啊瓷茄啊? bool bValidPay = pGamePlayer->loginPayPlay( pGamePlayer->getSocket()->getHost(), pGamePlayer->getID() ) || pGamePlayer->isFamilyFreePass() || !g_pZoneInfoManager->getZoneInfo( pTargetZone->getZoneID() )->isPayPlay(); // 具傈荤飞何, 矫寇胞瘤开, 捞亥飘版扁厘, 捞亥飘OX, 抛皋府俊肺绰 哎 荐 绝促. bool bValidZone = pTargetZone->getZoneID() != 2101 && pTargetZone->getZoneID() != 2102 && pTargetZone->getZoneID() != 1005 && pTargetZone->getZoneID() != 1006 && pTargetZone->getZoneID() != 1122 && pTargetZone->getZoneID() != 1131 && pTargetZone->getZoneID() != 1132 && pTargetZone->getZoneID() != 1133 && pTargetZone->getZoneID() != 1134 && !pTargetZone->isHolyLand() && !pTargetZone->isCastle() && !pTargetZone->isMasterLair() && !g_pPKZoneInfoManager->isPKZone( pTargetZone->getZoneID() ); bValidTarget = bOusters && bPLAYER && !bMasterLair && bValidPay && bValidZone; } } __LEAVE_CRITICAL_SECTION( (*g_pPCFinder) ) int RequiredMP = pSkillInfo->getConsumeMP(); bool bManaCheck = hasEnoughMana(pOusters, RequiredMP); bool bTimeCheck = verifyRunTime(pSkillSlot);// bool bRangeCheck = checkZoneLevelToUseSkill(pOusters);// bool bHitRoll = HitRoll::isSuccessMagic(pOusters, pSkillInfo, pSkillSlot); bool bEffected = pOusters->isFlag(Effect::EFFECT_CLASS_SOUL_CHAIN) || pOusters->hasRelicItem() || pOusters->isFlag(Effect::EFFECT_CLASS_HAS_FLAG) || pOusters->isFlag(Effect::EFFECT_CLASS_HAS_SWEEPER); if (bManaCheck && bTimeCheck && !bEffected && bValidTarget) { decreaseMana(pOusters, RequiredMP, _GCSkillToSelfOK1); SkillInput input(pOusters, pSkillSlot); SkillOutput output; computeOutput(input, output); // 10 檬 悼救 框流老 荐 绝档废 捞棋飘甫 嘿牢促. EffectSoulChain* pEffect = new EffectSoulChain( pOusters ); pEffect->setDuration(output.Duration); pEffect->setDeadline(100); pEffect->setTargetName( targetName ); pEffect->setZone( pZone ); ObjectRegistry & objectregister = pZone->getObjectRegistry(); objectregister.registerObject(pEffect); pZone->addEffect(pEffect); pOusters->setFlag(Effect::EFFECT_CLASS_SOUL_CHAIN); _GCSkillToSelfOK1.setSkillType(SkillType); _GCSkillToSelfOK1.setCEffectID(CEffectID); _GCSkillToSelfOK1.setDuration(0); _GCSkillToSelfOK1.addShortData(MODIFY_EFFECT_STAT, Effect::EFFECT_CLASS_SOUL_CHAIN); _GCSkillToSelfOK2.setObjectID(pOusters->getObjectID()); _GCSkillToSelfOK2.setSkillType(SkillType); _GCSkillToSelfOK2.setDuration(0); // Send Packet pPlayer->sendPacket(&_GCSkillToSelfOK1); pZone->broadcastPacket(x, y, &_GCSkillToSelfOK2, pOusters); pSkillSlot->setRunTime(output.Delay); } else { executeSkillFailNormal(pOusters, getSkillType(), NULL); } } catch(Throwable & t) { executeSkillFailException(pOusters, getSkillType()); } //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End" << endl; __END_CATCH}SoulChain g_SoulChain;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -