📄 attackmelee.cpp
字号:
//////////////////////////////////////////////////////////////////////////////// Filename : AttackMelee.cpp// Written by : elca@ewestsoft.com// Description : 扁夯 傍拜//////////////////////////////////////////////////////////////////////////////#include "AttackMelee.h"#include "CrossCounter.h"#include "EffectPoison.h"#include "EffectProtectionFromPoison.h"#include "Gpackets/GCAttackMeleeOK1.h"#include "Gpackets/GCAttackMeleeOK2.h"#include "Gpackets/GCAttackMeleeOK3.h"#include "Gpackets/GCRemoveEffect.h"#include "Gpackets/GCAddEffect.h"//////////////////////////////////////////////////////////////////////////////// 浇饭捞绢 坷宏璃飘//////////////////////////////////////////////////////////////////////////////void AttackMelee::execute(Slayer* pSlayer, ObjectID_t TargetObjectID) throw(Error){ __BEGIN_TRY //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << "Begin (slayer)" << endl; Assert(pSlayer != NULL); try { Player* pPlayer = pSlayer->getPlayer(); Assert(pPlayer != NULL); Zone* pZone = pSlayer->getZone(); Assert(pZone != NULL); Creature* pTargetCreature = pZone->getCreature(TargetObjectID); //Assert(pTargetCreature != NULL); // NPC甫 傍拜且 荐绰 绝促. if (pTargetCreature==NULL // NoSuch力芭 锭巩俊.. by sigi. 2002.5.2 || pTargetCreature->isNPC()) { executeSkillFailException(pSlayer, getSkillType()); //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End(slayer)" << endl; return; } // 浇饭捞绢绰 盖颊捞搁 傍拜且 荐 绝促. by sigi. 2002.6.29 /* Item* pWeapon = pSlayer->getWearItem(Slayer::WEAR_RIGHTHAND); if (pWeapon==NULL) { executeSkillFailException(pSlayer, getSkillType()); return; } */ bool bIncreaseDomainExp = pSlayer->isRealWearingEx(Slayer::WEAR_RIGHTHAND); // 扁夯 傍拜 胶懦 浇儿阑 罐酒柯促. SkillSlot* pSkillSlot = pSlayer->hasSkill(SKILL_ATTACK_MELEE); Assert(pSkillSlot != NULL); GCAttackMeleeOK1 _GCAttackMeleeOK1; GCAttackMeleeOK2 _GCAttackMeleeOK2; GCAttackMeleeOK3 _GCAttackMeleeOK3; bool bCriticalHit = false; Damage_t Damage = computeDamage(pSlayer, pTargetCreature, 0, bCriticalHit); bool bTimeCheck = verifyRunTime(pSkillSlot); bool bRangeCheck = verifyDistance(pSlayer, pTargetCreature, 1); bool bHitRoll = HitRoll::isSuccess(pSlayer, pTargetCreature); bool bCanHit = canHit(pSlayer, pTargetCreature, SKILL_ATTACK_MELEE); bool bPK = verifyPK(pSlayer, pTargetCreature); if (bTimeCheck && bRangeCheck && bHitRoll && bCanHit && bPK) { CheckCrossCounter(pSlayer, pTargetCreature, Damage); Exp_t Point = 1; // 单固瘤甫 林绊, 酒捞袍 郴备档甫 冻绢哆赴促. setDamage(pTargetCreature, Damage, pSlayer, SKILL_ATTACK_MELEE, &_GCAttackMeleeOK2, &_GCAttackMeleeOK1); computeAlignmentChange(pTargetCreature, Damage, pSlayer, &_GCAttackMeleeOK2, &_GCAttackMeleeOK1); decreaseDurability(pSlayer, pTargetCreature, Point, &_GCAttackMeleeOK1, &_GCAttackMeleeOK2); // 农府萍拿 洒飘扼搁 惑措规阑 第肺 拱矾唱霸 茄促. if (bCriticalHit) { knockbackCreature(pZone, pTargetCreature, pSlayer->getX(), pSlayer->getY()); } // 鸥百捞 浇饭捞绢啊 酒聪扼搁 版氰摹甫 棵妨霖促. if (!pTargetCreature->isSlayer()) { Item* pWeapon = pSlayer->getWearItem(Slayer::WEAR_RIGHTHAND); if (pWeapon != NULL) { if ( bIncreaseDomainExp ) { if (pWeapon->getItemClass() == Item::ITEM_CLASS_BLADE) { shareAttrExp(pSlayer, Damage , 8, 1, 1, _GCAttackMeleeOK1); increaseDomainExp(pSlayer, SKILL_DOMAIN_BLADE, Point, _GCAttackMeleeOK1); } else if (pWeapon->getItemClass() == Item::ITEM_CLASS_SWORD) { shareAttrExp(pSlayer, Damage, 8, 1, 1, _GCAttackMeleeOK1); increaseDomainExp(pSlayer, SKILL_DOMAIN_SWORD, Point, _GCAttackMeleeOK1); } else if (pWeapon->getItemClass() == Item::ITEM_CLASS_CROSS) { // 绞磊啊甫 甸绊 乐阑 版快 Heal 拌凯狼 版氰摹甫 棵妨霖促. shareAttrExp(pSlayer, Damage, 1, 1, 8, _GCAttackMeleeOK1); increaseDomainExp(pSlayer, SKILL_DOMAIN_HEAL, Point, _GCAttackMeleeOK1); } else if (pWeapon->getItemClass() == Item::ITEM_CLASS_MACE) { // 皋捞胶甫 甸绊 乐阑 版快 Enchant 拌凯狼 版氰摹甫 棵妨霖促. shareAttrExp(pSlayer, Damage, 1, 1, 8, _GCAttackMeleeOK1); increaseDomainExp(pSlayer, SKILL_DOMAIN_ENCHANT, Point, _GCAttackMeleeOK1); } else { // 促弗 拌凯狼 公扁甫 甸绊, AttackMelee甫 窍绰 巴篮 阂过(?)捞促. Assert(false); } } } else { // 酒公 公扁档 甸瘤 臼绊, 傍拜阑 且 版快, 瓷仿摹 版氰摹父 距埃 棵妨霖促. shareAttrExp(pSlayer, Damage , 1, 1, 1, _GCAttackMeleeOK1); } increaseAlignment(pSlayer, pTargetCreature, _GCAttackMeleeOK1); } _GCAttackMeleeOK3.setObjectID(pSlayer->getObjectID()); _GCAttackMeleeOK3.setTargetObjectID (TargetObjectID); _GCAttackMeleeOK1.setObjectID(TargetObjectID); pPlayer->sendPacket(&_GCAttackMeleeOK1); if (pTargetCreature->isPC()) { Player* pTargetPlayer = pTargetCreature->getPlayer(); if (pTargetPlayer != NULL) { _GCAttackMeleeOK2.setObjectID(pSlayer->getObjectID()); pTargetPlayer->sendPacket(&_GCAttackMeleeOK2); } } else if (pTargetCreature->isMonster()) { Monster* pMonster = dynamic_cast<Monster*>(pTargetCreature); pMonster->addEnemy(pSlayer); // 捞 何盒篮 货肺 父甸绢柳 何盒阑 积阿秦辑 绊媚廉具 窍绰单... // 付胶磐绰 掉饭捞绝促. 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; pMonster->setNextTurn(NewTurn); } } list<Creature *> cList; cList.push_back(pTargetCreature); cList.push_back(pSlayer); pZone->broadcastPacket(pSlayer->getX(), pSlayer->getY(), &_GCAttackMeleeOK3 , cList); pSkillSlot->setRunTime(); } else { executeSkillFailNormal(pSlayer, getSkillType(), pTargetCreature); } } catch (Throwable & t) { executeSkillFailException(pSlayer, getSkillType()); //cout << t.toString(); } //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End(slayer)" << endl; __END_CATCH}//////////////////////////////////////////////////////////////////////////////// 轨颇捞绢 坷宏璃飘//////////////////////////////////////////////////////////////////////////////void AttackMelee::execute(Vampire* pVampire, ObjectID_t TargetObjectID) throw(Error){ __BEGIN_TRY //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << "Begin (vampire)" << endl; Assert(pVampire != NULL); try { Player* pPlayer = pVampire->getPlayer(); Zone* pZone = pVampire->getZone(); Assert(pPlayer != NULL); Assert(pZone != NULL); Creature* pTargetCreature = pZone->getCreature(TargetObjectID); //Assert(pTargetCreature != NULL); // NoSuch力芭 锭巩俊. by sigi. 2002.5.2 if (pTargetCreature==NULL) { executeSkillFailException(pVampire, getSkillType()); return; } GCAttackMeleeOK1 _GCAttackMeleeOK1; GCAttackMeleeOK2 _GCAttackMeleeOK2; GCAttackMeleeOK3 _GCAttackMeleeOK3; // 胶懦 浇儿阑 罐酒柯促. VampireSkillSlot* pSkillSlot = pVampire->hasSkill(SKILL_ATTACK_MELEE); Assert(pSkillSlot != NULL); bool bCriticalHit = false; Damage_t Damage = computeDamage(pVampire, pTargetCreature, 0, bCriticalHit); bool bTimeCheck = verifyRunTime(pSkillSlot); bool bRangeCheck = verifyDistance(pVampire, pTargetCreature, 1); bool bHitRoll = HitRoll::isSuccess(pVampire, pTargetCreature); bool bCanHit = canHit(pVampire, pTargetCreature, SKILL_ATTACK_MELEE); bool bPK = verifyPK(pVampire, pTargetCreature); if (bTimeCheck && bRangeCheck && bHitRoll && bCanHit && bPK) { CheckCrossCounter(pVampire, pTargetCreature, Damage); // 单固瘤甫 林绊, 郴备档甫 冻绢哆赴促. setDamage(pTargetCreature, Damage, pVampire, SKILL_ATTACK_MELEE, &_GCAttackMeleeOK2, &_GCAttackMeleeOK1); computeAlignmentChange(pTargetCreature, Damage, pVampire, &_GCAttackMeleeOK2, &_GCAttackMeleeOK1); decreaseDurability(pVampire, pTargetCreature, 1, &_GCAttackMeleeOK1, &_GCAttackMeleeOK2); // 农府萍拿 洒飘扼搁 惑措规阑 第肺 拱矾唱霸 茄促. if (bCriticalHit) { knockbackCreature(pZone, pTargetCreature, pVampire->getX(), pVampire->getY()); } increaseAlignment(pVampire, pTargetCreature, _GCAttackMeleeOK1); // 惑措啊 磷菌促搁 版氰摹甫 粱 棵妨霖促. if (pTargetCreature->isDead()) { int exp = computeCreatureExp(pTargetCreature, KILL_EXP); shareVampExp(pVampire, exp, _GCAttackMeleeOK1); } _GCAttackMeleeOK1.setObjectID(TargetObjectID);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -