📄 simpletilemissileskill.cpp
字号:
computeCriticalBonus(pOusters, param.SkillType, Damage, bCriticalHit); // 其澄萍绰 扁夯利栏肺 100捞促. Damage = getPercentValue(Damage, penalty); ObjectID_t targetObjectID = pTargetCreature->getObjectID(); cList.push_back(pTargetCreature); _GCSkillToTileOK1.addCListElement(targetObjectID); _GCSkillToTileOK2.addCListElement(targetObjectID); _GCSkillToTileOK5.addCListElement(targetObjectID); // 老窜 嘎绰 仇捞 罐阑 菩哦篮 澄 惑怕肺 茄 盲肺, 单固瘤甫 霖促. setDamage(pTargetCreature, Damage, pOusters, param.SkillType, NULL, &_GCSkillToTileOK1); computeAlignmentChange(pTargetCreature, Damage, pOusters, NULL, &_GCSkillToTileOK1); increaseAlignment(pOusters, pTargetCreature, _GCSkillToTileOK1); // 农府萍拿 洒飘扼搁 惑措规阑 第肺 拱矾唱霸 茄促. if (bCriticalHit || bForceKnockback) { knockbackCreature(pZone, pTargetCreature, pOusters->getX(), pOusters->getY()); } if (pTargetCreature->isDead()) { int exp = computeCreatureExp(pTargetCreature, 100, pOusters); shareOustersExp(pOusters, exp, _GCSkillToTileOK1); } } } } } } // 傍拜磊狼 酒捞袍 郴备己阑 冻绢哆赴促. decreaseDurability(pOusters, NULL, pSkillInfo->getPoint(), &_GCSkillToTileOK1, NULL); _GCSkillToTileOK1.setSkillType(param.SkillType); _GCSkillToTileOK1.setCEffectID(CEffectID); _GCSkillToTileOK1.setX(X); _GCSkillToTileOK1.setY(Y); _GCSkillToTileOK1.setRange(dir); _GCSkillToTileOK1.setDuration(0); _GCSkillToTileOK1.setGrade(param.Grade); _GCSkillToTileOK2.setObjectID(pOusters->getObjectID()); _GCSkillToTileOK2.setSkillType(param.SkillType); _GCSkillToTileOK2.setX(X); _GCSkillToTileOK2.setY(Y); _GCSkillToTileOK2.setRange(dir); _GCSkillToTileOK2.setDuration(0); _GCSkillToTileOK2.setGrade(param.Grade); _GCSkillToTileOK5.setObjectID(pOusters->getObjectID()); _GCSkillToTileOK5.setSkillType(param.SkillType); _GCSkillToTileOK5.setX(X); _GCSkillToTileOK5.setY(Y); _GCSkillToTileOK5.setRange(dir); _GCSkillToTileOK5.setDuration(0); _GCSkillToTileOK5.setGrade(param.Grade); pPlayer->sendPacket(&_GCSkillToTileOK1); // 捞 扁贱俊 狼秦 康氢阑 罐绰 仇甸俊霸 菩哦阑 焊郴拎具 茄促. for (list<Creature*>::const_iterator itr = cList.begin(); itr != cList.end(); itr++) { Creature * pTargetCreature = *itr; Assert(pTargetCreature != NULL); if (pTargetCreature->isPC()) { _GCSkillToTileOK2.clearList(); // HP狼 函版荤亲阑 菩哦俊促 扁废茄促. HP_t targetHP = 0; if (pTargetCreature->isSlayer()) { targetHP = (dynamic_cast<Slayer*>(pTargetCreature))->getHP(ATTR_CURRENT); } else if (pTargetCreature->isVampire()) { targetHP = (dynamic_cast<Vampire*>(pTargetCreature))->getHP(ATTR_CURRENT); } else if (pTargetCreature->isOusters()) { targetHP = (dynamic_cast<Ousters*>(pTargetCreature))->getHP(ATTR_CURRENT); } _GCSkillToTileOK2.addShortData(MODIFY_CURRENT_HP, targetHP); // 酒捞袍狼 郴备仿阑 冻绢哆赴促. decreaseDurability(NULL, pTargetCreature, pSkillInfo->getPoint(), NULL, &_GCSkillToTileOK2); // 菩哦阑 焊郴霖促. pTargetCreature->getPlayer()->sendPacket(&_GCSkillToTileOK2); } else if (pTargetCreature->isMonster()) { // 寸辟 利栏肺 牢侥茄促. Monster* pMonster = dynamic_cast<Monster*>(pTargetCreature); pMonster->addEnemy(pOusters); } } result.targetCreatures = cList; cList.push_back(pOusters); pZone->broadcastPacket(myX, myY, &_GCSkillToTileOK5 , cList); // set Next Run Time pOustersSkillSlot->setRunTime(param.Delay); } else { executeSkillFailNormal(pOusters, param.SkillType, NULL, param.Grade); } } catch (Throwable & t) { executeSkillFailException(pOusters, param.SkillType, param.Grade); } __END_CATCH}void SimpleTileMissileSkill::execute(Monster* pMonster, int X, int Y, const SIMPLE_SKILL_INPUT& param, SIMPLE_SKILL_OUTPUT& result, CEffectID_t CEffectID, bool bForceKnockback) throw (Error){ __BEGIN_TRY try { Zone* pZone = pMonster->getZone(); Assert(pZone != NULL); GCSkillToTileOK2 _GCSkillToTileOK2; GCSkillToTileOK3 _GCSkillToTileOK3; GCSkillToTileOK4 _GCSkillToTileOK4; GCSkillToTileOK5 _GCSkillToTileOK5; GCSkillToTileOK6 _GCSkillToTileOK6; SkillInfo* pSkillInfo = g_pSkillInfoManager->getSkillInfo(param.SkillType); bool bRangeCheck = verifyDistance(pMonster, X, Y, pSkillInfo->getRange()); bool bHitRoll = HitRoll::isSuccessMagic(pMonster, pSkillInfo); if (bRangeCheck && bHitRoll) { // 谅钎客 规氢阑 备茄促. ZoneCoord_t myX = pMonster->getX(); ZoneCoord_t myY = pMonster->getY(); Dir_t dir = calcDirection(myX, myY, X, Y); Damage_t Damage = 0; bool bCriticalHit = false; VSRect rect(1, 1, pZone->getWidth()-2, pZone->getHeight()-2); list<Creature*> cList; list<TILE_MASK>::const_iterator itr = param.MaskList.begin(); for (; itr != param.MaskList.end(); itr++) { TILE_MASK mask = (*itr); int tileX = X + mask.x; int tileY = Y + mask.y; int penalty = mask.penalty; // 泅犁 鸥老捞 粮 郴何捞绊, 救傈瘤措啊 酒聪扼搁 嘎阑 啊瓷己捞 乐促. if (rect.ptInRect(tileX, tileY)) { // 鸥老阑 罐酒柯促. Tile& tile = pZone->getTile(tileX, tileY); list<Creature*> targetList; if (tile.hasCreature(Creature::MOVE_MODE_WALKING)) { Creature* pCreature = tile.getCreature(Creature::MOVE_MODE_WALKING); targetList.push_back(pCreature); } if (tile.hasCreature(Creature::MOVE_MODE_FLYING)) { Creature* pCreature = tile.getCreature(Creature::MOVE_MODE_FLYING); targetList.push_back(pCreature); } if (tile.hasCreature(Creature::MOVE_MODE_BURROWING)) { Creature* pCreature = tile.getCreature(Creature::MOVE_MODE_BURROWING); targetList.push_back(pCreature); } list<Creature*>::iterator itr = targetList.begin(); for(; itr != targetList.end(); itr++) { Creature* pEnemy = (*itr); Assert(pEnemy != NULL); // 傍拜 措惑捞 嘎绰 版快俊.. if (pMonster->isEnemyToAttack( pEnemy )) { bool bPK = verifyPK(pMonster, pEnemy); bool bRaceCheck = !pEnemy->isNPC(); //pEnemy->isSlayer() || pEnemy->isVampire(); bool bZoneLevelCheck = checkZoneLevelToHitTarget(pEnemy); if (bPK && bRaceCheck && bZoneLevelCheck) { Damage = 0; bCriticalHit = false; if (param.bAdd) { Damage += computeDamage(pMonster, pEnemy, 0, bCriticalHit); } //cout << "bAddDamage = " << Damage << endl; if (param.bMagicDamage) { Damage += computeMagicDamage(pEnemy, param.SkillDamage, param.SkillType); //cout << "bMagicDamage = " << Damage << endl; } else { Damage += param.SkillDamage; //cout << "!bMagicDamage = " << Damage << endl; } // 其澄萍绰 扁夯利栏肺 100捞促. Damage = getPercentValue(Damage, penalty); //cout << "bPenaltyDamage = " << Damage << endl; ObjectID_t targetObjectID = pEnemy->getObjectID(); cList.push_back(pEnemy); _GCSkillToTileOK2.addCListElement(targetObjectID); _GCSkillToTileOK5.addCListElement(targetObjectID); // 老窜 嘎绰 仇捞 罐阑 菩哦篮 澄 惑怕肺 茄 盲肺, 单固瘤甫 霖促. setDamage(pEnemy, Damage, pMonster, param.SkillType, NULL, NULL); // 农府萍拿 洒飘扼搁 惑措规阑 第肺 拱矾唱霸 茄促. if (bCriticalHit || bForceKnockback) { knockbackCreature(pZone, pEnemy, pMonster->getX(), pMonster->getY()); } } } } } } _GCSkillToTileOK2.setObjectID(pMonster->getObjectID()); _GCSkillToTileOK2.setSkillType(param.SkillType); _GCSkillToTileOK2.setX(X); _GCSkillToTileOK2.setY(Y); _GCSkillToTileOK2.setRange(dir); _GCSkillToTileOK2.setDuration(0); _GCSkillToTileOK5.setObjectID(pMonster->getObjectID()); _GCSkillToTileOK5.setSkillType(param.SkillType); _GCSkillToTileOK5.setX(X); _GCSkillToTileOK5.setY(Y); _GCSkillToTileOK5.setRange(dir); _GCSkillToTileOK5.setDuration(0); // 捞 扁贱俊 狼秦 康氢阑 罐绰 仇甸俊霸 菩哦阑 焊郴拎具 茄促. for (list<Creature*>::const_iterator itr = cList.begin(); itr != cList.end(); itr++) { Creature * pEnemy = *itr; Assert(pEnemy != NULL); if (pEnemy->isPC()) { _GCSkillToTileOK2.clearList(); // HP狼 函版荤亲阑 菩哦俊促 扁废茄促. HP_t targetHP = 0; if (pEnemy->isSlayer()) { targetHP = (dynamic_cast<Slayer*>(pEnemy))->getHP(ATTR_CURRENT); } else if (pEnemy->isVampire()) { targetHP = (dynamic_cast<Vampire*>(pEnemy))->getHP(ATTR_CURRENT); } else if (pEnemy->isOusters()) { targetHP = (dynamic_cast<Ousters*>(pEnemy))->getHP(ATTR_CURRENT); } _GCSkillToTileOK2.addShortData(MODIFY_CURRENT_HP, targetHP); // 酒捞袍狼 郴备仿阑 冻绢哆赴促. decreaseDurability(NULL, pEnemy, pSkillInfo->getPoint(), NULL, &_GCSkillToTileOK2); // 菩哦阑 焊郴霖促. pEnemy->getPlayer()->sendPacket(&_GCSkillToTileOK2); //cout << "SimpleTileMissibleSkill: " << _GCSkillToTileOK2.toString().c_str() << endl; } else if (pEnemy->isMonster()) { // 寸辟 利栏肺 牢侥茄促. Monster* pTargetMonster = dynamic_cast<Monster*>(pEnemy); pTargetMonster->addEnemy(pMonster); } } result.targetCreatures = cList; cList.push_back(pMonster); pZone->broadcastPacket(myX, myY, &_GCSkillToTileOK5 , cList); } else { executeSkillFailNormal(pMonster, param.SkillType, NULL); } } catch (Throwable & t) { executeSkillFailException(pMonster, param.SkillType); } __END_CATCH}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -