📄 blooddrain.cpp
字号:
} if (pMonster->isFlag(Effect::EFFECT_CLASS_INVISIBILITY)) { addVisibleCreature(pZone, pMonster, true); } // 付胶磐 : 堡开 软趋 - -; if (pMonster->isMaster()#ifdef __UNDERWORLD__ || pMonster->isUnderworld() || pMonster->getMonsterType() == 599#endif ) { int x = pMonster->getX(); int y = pMonster->getY(); int Splash = 3 + rand()%5; // 3~7 付府 int range = 5; // 11 x 11 list<Creature*> creatureList; getSplashVictims(pMonster->getZone(), x, y, Creature::CREATURE_CLASS_MAX, creatureList, Splash, range); list<Creature*>::iterator itr = creatureList.begin(); for (; itr != creatureList.end(); itr++) { Creature* pTargetCreature = (*itr); Assert(pTargetCreature != NULL); if (pMonster!=pTargetCreature) { //cout << "BloodDrain: " << pTargetCreature->getName().c_str() << endl; executeMonster(pMonster, pTargetCreature); } } } // 老馆 各 : 茄 付府 else { if (executeMonster(pMonster, pEnemy)) { bSuccess = true; } else { executeSkillFailNormal(pMonster, getSkillType(), pEnemy); } } } catch (Throwable & t) { executeSkillFailException(pMonster, getSkillType()); } // 己傍捞电 角菩电 阁胶磐俊霸 掉饭捞绰 吧绢霖促. Timeval NextTurn = pMonster->getNextTurn(); Timeval DelayTurn; DelayTurn.tv_sec = (bSuccess? 4 : 1); // 己傍苞 角菩狼 delay甫 促福霸 茄促. by sigi. 2002.9.14 DelayTurn.tv_usec = 500000; pMonster->addAccuDelay(DelayTurn); //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End(monster)" << endl; __END_CATCH}bool BloodDrain::executeMonster(Monster* pMonster, Creature* pEnemy) throw (Error){ __BEGIN_TRY bool isMaster = pMonster->isMaster()#ifdef __UNDERWORLD__ || pMonster->isUnderworld() || pMonster->getMonsterType() == 599#endif ; // 磷菌栏搁 软趋 给窍绊.. // 付胶磐绰 酒公唱 促 湖促 - -; // 措惑捞 磷菌栏搁 给 湖促. if (pMonster->isDead() || pMonster->isFlag(Effect::EFFECT_CLASS_COMA) || !pMonster->isEnemyToAttack(pEnemy) && !isMaster || pEnemy->isDead() || pEnemy->isFlag(Effect::EFFECT_CLASS_COMA)) { return false; } Zone* pZone = pMonster->getZone(); Assert(pZone != NULL); GCBloodDrainOK1 _GCBloodDrainOK1; GCBloodDrainOK2 _GCBloodDrainOK2; GCBloodDrainOK3 _GCBloodDrainOK3; // 付胶磐绰 眉仿 100% 扼档 巩促. int HPMultiplier = (isMaster? 1 : 3); // 泅犁 HP啊 1/1, 1/3 bool bHitRoll = HitRoll::isSuccessBloodDrain(pMonster, pEnemy, HPMultiplier); bool bCanHit = canHit(pMonster, pEnemy, SKILL_BLOOD_DRAIN); // 付胶磐绰 芭府俊 包拌绝捞 巩促~ bool bRangeCheck = isMaster || verifyDistance(pMonster, pEnemy, 1); // 软趋 搁开 惑怕. by sigi. 2002.9.13 bool bEffected = pEnemy->isFlag(Effect::EFFECT_CLASS_IMMUNE_TO_BLOOD_DRAIN); if (bHitRoll && bCanHit && bRangeCheck && !bEffected) { if (pEnemy->isSlayer()) { // Set EffectBloodDrain // 付胶磐搁 救扒促. if (!isMaster) { EffectBloodDrain* pEffectBloodDrain = new EffectBloodDrain(pEnemy); pEffectBloodDrain->setLevel(pMonster->getLevel()); pEffectBloodDrain->setDeadline(BLOODDRAIN_DURATION); // 霸烙矫埃栏肺 3老 沥档 pEnemy->addEffect(pEffectBloodDrain); pEffectBloodDrain->create(pEnemy->getName()); _GCBloodDrainOK2.addShortData(MODIFY_EFFECT_STAT, Effect::EFFECT_CLASS_BLOOD_DRAIN); pEnemy->setFlag(Effect::EFFECT_CLASS_BLOOD_DRAIN); Slayer* pTargetSlayer = dynamic_cast<Slayer*>(pEnemy); SLAYER_RECORD prev; pTargetSlayer->getSlayerRecord(prev); pTargetSlayer->initAllStat(); pTargetSlayer->sendRealWearingInfo(); pTargetSlayer->addModifyInfo(prev, _GCBloodDrainOK2); } // 肺弊甫 巢变促. log(LOG_BLOODDRAINED, pEnemy->getName(), "霸烙 郴狼 阁胶磐"); } // 酒快胶磐令狼 版快浚..... -_-; 力茄矫埃 绝绰 捞棋飘甫 积己茄促. 决剐洒 富秦 力茄矫埃捞 绝绰 扒 酒聪瘤父..// else if ( pEnemy->isOusters() && !isMaster )// {// EffectBloodDrain* pEffectBloodDrain = new EffectBloodDrain(pEnemy);// pEffectBloodDrain->setLevel(pMonster->getLevel());// pEnemy->addEffect(pEffectBloodDrain);// pEffectBloodDrain->create(pEnemy->getName());// _GCBloodDrainOK2.addShortData(MODIFY_EFFECT_STAT, Effect::EFFECT_CLASS_BLOOD_DRAIN);//// pEnemy->setFlag(Effect::EFFECT_CLASS_BLOOD_DRAIN);//// Sight_t oldSight = pEnemy->getSight();// Sight_t newSight = pEnemy->getEffectedSight();//// if ( oldSight != newSight )// {// pEnemy->setSight(newSight);// pZone->updateScan(pEnemy, oldSight, pEnemy->getSight());// _GCBloodDrainOK2.addShortData(MODIFY_VISION, pEnemy->getSight());//// GCChangeDarkLight gcChangeDarkLight;// gcChangeDarkLight.setDarkLevel(15);// gcChangeDarkLight.setLightLevel(newSight);// pEnemy->getPlayer()->sendPacket(&gcChangeDarkLight);// }// } _GCBloodDrainOK3.setObjectID(pMonster->getObjectID()); _GCBloodDrainOK3.setTargetObjectID (pEnemy->getObjectID()); // 鸥百捞 构电 敲贰弊绰 扒促. // 付胶磐搁 救扒促. if (!isMaster) { pEnemy->setFlag(Effect::EFFECT_CLASS_BLOOD_DRAIN); } if (pEnemy != NULL && pEnemy->isPC()) { Player* pTargetPlayer = pEnemy->getPlayer(); if (pTargetPlayer != NULL) { _GCBloodDrainOK2.setObjectID(pMonster->getObjectID()); if (!isMaster) { _GCBloodDrainOK2.addLongData(MODIFY_DURATION, BLOODDRAIN_DURATION); } pTargetPlayer->sendPacket(&_GCBloodDrainOK2); } } // target int targetLevel = 0; int targetMaxHP = 0; if (pEnemy->isSlayer()) { Slayer* pTargetSlayer = dynamic_cast<Slayer*>(pEnemy); targetLevel = pTargetSlayer->getHighestSkillDomainLevel(); targetMaxHP = pTargetSlayer->getHP(ATTR_MAX); } else if (pEnemy->isVampire()) { Vampire* pTargetVampire = dynamic_cast<Vampire*>(pEnemy); targetLevel = pTargetVampire->getLevel(); targetMaxHP = pTargetVampire->getHP(ATTR_MAX); } else if (pEnemy->isOusters()) { Ousters* pTargetOusters = dynamic_cast<Ousters*>(pEnemy); targetLevel = pTargetOusters->getLevel(); targetMaxHP = pTargetOusters->getHP(ATTR_MAX); } else if (pEnemy->isMonster()) { Monster* pEnemyMonster = dynamic_cast<Monster*>(pEnemy); // 软趋寸窍绰 阁胶磐茄抛 掉饭捞 吧绢霖促. Timeval DelayTurn; DelayTurn.tv_sec = 4; DelayTurn.tv_usec = 500000; pEnemyMonster->addAccuDelay(DelayTurn); if ( ( pMonster->isMaster()#ifdef __UNDERWORLD__ || pMonster->isUnderworld() || pMonster->getMonsterType() == 599 #endif ) && pMonster->getClanType()==pEnemyMonster->getClanType()) { // 鞍篮 clan狼 付胶磐捞搁 乔 惑吵捞扼绊 杭 荐 乐阑鳖 -_-; } else { pEnemyMonster->addEnemy(pMonster); } targetLevel = pEnemyMonster->getLevel(); targetMaxHP = pEnemyMonster->getHP(ATTR_MAX); } // 磊脚捞唱 惑措规 吝.. HP啊 腹篮 率狼 15~25% HP_t maxHP = max((int)pMonster->getHP(ATTR_MAX), targetMaxHP); HP_t drainHP = maxHP*(rand()%11+15)/100; // 15~25% // 茄锅俊 1000捞惑 救 蛮促. drainHP = min((int)drainHP, 1000); // 阁胶磐狼 HP甫 棵妨霖促. HP_t CurrentHP = pMonster->getHP(); HP_t MaxHP = pMonster->getHP(ATTR_MAX); HP_t NewHP = min((int)MaxHP , (int)CurrentHP + (int)drainHP); // 轨颇捞绢狼 HP甫 技泼茄促. pMonster->setHP(NewHP); GCStatusCurrentHP gcStatusCurrentHP; gcStatusCurrentHP.setObjectID(pMonster->getObjectID()); gcStatusCurrentHP.setCurrentHP(NewHP); pZone->broadcastPacket(pMonster->getX(), pMonster->getY(), &gcStatusCurrentHP); // 软趋 寸茄 局狼 HP甫 临牢促. // 措惑捞 郴 饭骇焊促 臭促搁.. MaxHP狼 10~15% damage // by sigi. 2002.9.14 int drainDamage = 0; int myLevel = pMonster->getLevel(); if (targetLevel > myLevel) { drainDamage = targetMaxHP * (rand()%6+10) / 100; } else { // 饭骇 5瞒捞付促 1%究 歹~ int damagePercent = min(30, (rand()%6+10+(myLevel-targetLevel))); drainDamage = targetMaxHP * damagePercent / 100; } if (drainDamage > 0) { //decreaseHP(pZone, pEnemy, drainDamage); EffectDecreaseHP* pEffect = new EffectDecreaseHP(pEnemy); pEffect->setPoint(drainDamage); pEffect->setDeadline( 20 ); // 2檬 饶 pEffect->setUserObjectID( pMonster->getObjectID() ); pEnemy->addEffect(pEffect); pEnemy->setFlag(Effect::EFFECT_CLASS_DECREASE_HP); } // 软趋 葛嚼 焊捞霸.. list<Creature *> cList; cList.push_back(pEnemy); cList.push_back(pMonster); pZone->broadcastPacket(pMonster->getX(), pMonster->getY(), &_GCBloodDrainOK3 , cList); // 软趋 己傍 return true; } __END_CATCH return false;}BloodDrain g_BloodDrain;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -