📄 attackarms.cpp
字号:
{ knockbackCreature(pZone, pEnemy, myX, myY); } // 鸥百捞 浇饭捞绢啊 酒匆 版快俊父 版氰摹甫 棵妨霖促. if (!pTargetCreature->isSlayer()) { bHit = true; } } } if (bHit) { shareAttrExp(pSlayer, Damage, 1, 8, 1, _GCSkillToTileOK1); increaseDomainExp(pSlayer, DomainType, 1, _GCSkillToTileOK1); } // 醚舅 箭磊甫 临捞绊, 醚舅 箭磊甫 历厘窍绊, 巢篮 醚舅 箭磊甫 罐篮 促澜俊 郴备仿阑 冻绢哆赴促. _GCSkillToTileOK1.addShortData(MODIFY_BULLET, RemainBullet); decreaseDurability(pSlayer, NULL, 1, &_GCSkillToTileOK1, NULL); _GCSkillToTileOK1.setSkillType(SKILL_MULTI_SHOT); _GCSkillToTileOK1.setCEffectID(0); _GCSkillToTileOK1.setX(targetX); _GCSkillToTileOK1.setY(targetX); _GCSkillToTileOK1.setRange(dir); _GCSkillToTileOK1.setDuration(0); _GCSkillToTileOK2.setObjectID(pSlayer->getObjectID()); _GCSkillToTileOK2.setSkillType(SKILL_MULTI_SHOT); _GCSkillToTileOK2.setX(targetX); _GCSkillToTileOK2.setY(targetY); _GCSkillToTileOK2.setRange(dir); _GCSkillToTileOK2.setDuration(0); _GCSkillToTileOK3.setObjectID(pSlayer->getObjectID()); _GCSkillToTileOK3.setSkillType(SKILL_MULTI_SHOT); _GCSkillToTileOK3.setX(targetX); _GCSkillToTileOK3.setY(targetY); _GCSkillToTileOK4.setSkillType(SKILL_MULTI_SHOT); _GCSkillToTileOK4.setX(targetX); _GCSkillToTileOK4.setY(targetY); _GCSkillToTileOK4.setDuration(0); _GCSkillToTileOK4.setRange(dir); _GCSkillToTileOK5.setObjectID(pSlayer->getObjectID()); _GCSkillToTileOK5.setSkillType(SKILL_MULTI_SHOT); _GCSkillToTileOK5.setX(targetX); _GCSkillToTileOK5.setY(targetY); _GCSkillToTileOK5.setRange(dir); _GCSkillToTileOK5.setDuration(0); pPlayer->sendPacket(&_GCSkillToTileOK1); // 捞 扁贱俊 狼秦 康氢阑 罐绰 仇甸俊霸 菩哦阑 焊郴拎具 茄促. for(list<Creature*>::const_iterator itr = cList.begin(); itr != cList.end(); itr++) { Creature* pVictim = *itr; Assert(pVictim != NULL); if (pVictim->isPC()) { _GCSkillToTileOK2.clearList(); HP_t targetHP = 0; if (pVictim->isSlayer()) { targetHP = (dynamic_cast<Slayer*>(pVictim))->getHP(ATTR_CURRENT); } else if (pVictim->isVampire()) { targetHP = (dynamic_cast<Vampire*>(pVictim))->getHP(ATTR_CURRENT); } else if (pVictim->isOusters()) { targetHP = (dynamic_cast<Ousters*>(pVictim))->getHP(ATTR_CURRENT); } else continue; _GCSkillToTileOK2.addShortData(MODIFY_CURRENT_HP, targetHP); decreaseDurability(NULL, pVictim, 1, NULL, &_GCSkillToTileOK2); Player* pPlayer = pVictim->getPlayer(); Assert(pPlayer != NULL); pPlayer->sendPacket(&_GCSkillToTileOK2); } else if (pVictim->isMonster()) { Monster* pMonster = dynamic_cast<Monster*>(pVictim); pMonster->addEnemy(pSlayer); } } cList.push_back(pSlayer); cList = pZone->broadcastSkillPacket(myX, myY, targetX, targetY, &_GCSkillToTileOK5, cList); pZone->broadcastPacket(myX, myY, &_GCSkillToTileOK3, cList); pZone->broadcastPacket(targetX, targetY, &_GCSkillToTileOK4, cList); } pSkillSlot->setRunTime(); } else { executeSkillFailNormalWithGun(pSlayer, getSkillType(), pTargetCreature, RemainBullet); } } catch (Throwable &t) { executeSkillFailException(pSlayer, getSkillType()); //cerr << t.toString() << endl; } //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End(slayer)" << endl; __END_DEBUG __END_CATCH}//////////////////////////////////////////////////////////////////////////////// 阁胶磐 坷宏璃飘 勤甸矾//////////////////////////////////////////////////////////////////////////////void AttackArms::execute(Monster* pMonster, Creature* pEnemy) throw(Error){ __BEGIN_TRY //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " Begin(monster)" << endl; Assert(pMonster != NULL); Assert(pEnemy != NULL); try { Zone* pZone = pMonster->getZone(); Assert(pZone != NULL); if (pMonster->isFlag(Effect::EFFECT_CLASS_HIDE)) { //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " end(monster)" << endl; return; } if (pMonster->isFlag(Effect::EFFECT_CLASS_INVISIBILITY)) { addVisibleCreature(pZone, pMonster, true); } GCAttackArmsOK2 _GCAttackArmsOK2; GCAttackArmsOK3 _GCAttackArmsOK3; GCAttackArmsOK4 _GCAttackArmsOK4; GCAttackArmsOK5 _GCAttackArmsOK5; _GCAttackArmsOK5.setSkillSuccess(false); if (HitRoll::isSuccess(pMonster, pEnemy) && verifyDistance(pMonster, pEnemy, pMonster->getMissileRange())) { bool bCriticalHit = false; Damage_t Damage = computeDamage(pMonster, pEnemy, 0, bCriticalHit); setDamage(pEnemy, Damage, pMonster, SKILL_ATTACK_ARMS, &_GCAttackArmsOK2, NULL); // 农府萍拿 洒飘扼搁 惑措规阑 第肺 拱矾唱霸 茄促. if (bCriticalHit) { knockbackCreature(pZone, pEnemy, pMonster->getX(), pMonster->getY()); } _GCAttackArmsOK5.setSkillSuccess(true); if (pEnemy->isPC()) { Player* pTargetPlayer = pEnemy->getPlayer(); if (pTargetPlayer != NULL) { _GCAttackArmsOK2.setObjectID(pMonster->getObjectID()); pTargetPlayer->sendPacket(&_GCAttackArmsOK2); } } else if (pEnemy->isMonster()) { Monster* pTargetMonster = dynamic_cast<Monster*>(pEnemy); pTargetMonster->addEnemy(pMonster); // 付胶磐绰 掉饭捞绝促. if (!pMonster->isMaster()#ifdef __UNDERWORLD__ && !pMonster->isUnderworld() && pMonster->getMonsterType() != 599#endif ) { Timeval NextTurn = pMonster->getNextTurn(); Timeval DelayTurn; DelayTurn.tv_sec = 0; DelayTurn.tv_usec = 200000; Timeval NewTurn = NextTurn + DelayTurn; pTargetMonster->setNextTurn(NewTurn); } } // 傍拜磊客 惑措狼 酒捞袍 郴备己 冻绢飘覆. decreaseDurability(pMonster, pEnemy, 1, NULL, &_GCAttackArmsOK2); ZoneCoord_t targetX = pEnemy->getX(); ZoneCoord_t targetY = pEnemy->getY(); ZoneCoord_t myX = pMonster->getX(); ZoneCoord_t myY = pMonster->getY(); _GCAttackArmsOK3.setObjectID(pMonster->getObjectID()); _GCAttackArmsOK3.setTargetXY (targetX, targetY); _GCAttackArmsOK4.setTargetObjectID (pEnemy->getObjectID()); _GCAttackArmsOK5.setObjectID(pMonster->getObjectID()); _GCAttackArmsOK5.setTargetObjectID (pEnemy->getObjectID()); list<Creature *> cList; cList.push_back(pEnemy); cList.push_back(pMonster); cList = pZone->broadcastSkillPacket(myX, myY, targetX, targetY, &_GCAttackArmsOK5, cList); pZone->broadcastPacket(myX, myY, &_GCAttackArmsOK3, cList); pZone->broadcastPacket(targetX, targetY, &_GCAttackArmsOK4, cList); } else { executeSkillFailNormal(pMonster, getSkillType(), pEnemy); } } catch (Throwable& t) { executeSkillFailException(pMonster, getSkillType()); } //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End(monster)" << endl; __END_CATCH}AttackArms g_AttackArms;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -