cgskilltoobjecthandler.cpp
来自「天之炼狱1服务器端源文件游戏服务端不完整」· C++ 代码 · 共 231 行
CPP
231 行
//////////////////////////////////////////////////////////////////////////////// Filename : CGSkillToObjectHandler.cc// Written By : elca@ewestsoft.com// Description ://////////////////////////////////////////////////////////////////////////////#include "CGSkillToObject.h"#ifdef __GAME_SERVER__ #include "GamePlayer.h" #include "SkillHandlerManager.h" #include "ZoneUtil.h" #include "Effect.h" #include "skill/Sniping.h" #include "Gpackets/GCSkillFailed1.h" //#define __PROFILE_SKILLS__ #ifdef __PROFILE_SKILLS__ #include "Profile.h" #endif#endif // __GAME_SERVER__////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGSkillToObjectHandler::execute (CGSkillToObject* pPacket , Player* pPlayer) throw (Error){ __BEGIN_TRY __BEGIN_DEBUG_EX #ifdef __GAME_SERVER__ Assert(pPacket != NULL); Assert(pPlayer != NULL); GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer); Assert(pGamePlayer != NULL); if (pGamePlayer->getPlayerStatus() != GPS_NORMAL) return; try { Creature* pCreature = pGamePlayer->getCreature(); Assert(pCreature != NULL); Zone* pZone = pCreature->getZone(); Assert(pZone != NULL); SkillType_t SkillType = pPacket->getSkillType(); // 肯傈 救傈瘤措扼搁 扁贱 荤侩 阂啊. by sigi. 2002.11.14 ZoneLevel_t ZoneLevel = pZone->getZoneLevel(pCreature->getX(), pCreature->getY()); if (ZoneLevel & COMPLETE_SAFE_ZONE) { GCSkillFailed1 _GCSkillFailed1; _GCSkillFailed1.setSkillType(SkillType); pPlayer->sendPacket(&_GCSkillFailed1); return; } ObjectID_t TargetObjectID = pPacket->getTargetObjectID(); CEffectID_t EffectID = pPacket->getCEffectID(); Creature* pTargetCreature = pZone->getCreature(TargetObjectID); if ( pTargetCreature != NULL && pTargetCreature->getCreatureClass() != pCreature->getCreatureClass() ) { pCreature->setLastTarget( TargetObjectID ); } disableFlags( pCreature, pZone, SkillType); if (pCreature->isSlayer()) { Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature); SkillSlot* pSkillSlot = ((Slayer *)pCreature)->hasSkill(SkillType); bool bSuccess = true; if (pSkillSlot == NULL) bSuccess = false; if (!isAbleToUseObjectSkill(pSlayer)) bSuccess = false;/* if (pSlayer->isFlag(Effect::EFFECT_CLASS_SNIPING_MODE)) { g_Sniping.checkRevealRatio(pSlayer, 20, 10); } */ // 父距俊 鞍篮 辆练狼 己拱焊包窃捞扼搁 扁贱捞 荤侩登瘤 臼绰促. /* if ( pTargetCreature->isMonster() ) { Monster* pMonster = dynamic_cast<Monster*>(pTargetCreature); Assert( pMonster != NULL); if ( pMonster->getMonsterType() == 371 || pMonster->getMonsterType() == 372 || pMonster->getMonsterType() == 373) bSuccess = false; }*/ if (bSuccess) { SkillHandler* SkillHandler = g_pSkillHandlerManager->getSkillHandler(SkillType); Assert(SkillHandler != NULL); #ifdef __PROFILE_SKILLS__ beginProfileEx(SkillTypes2String[SkillType]); SkillHandler->execute(pSlayer, TargetObjectID, pSkillSlot, EffectID); endProfileEx(SkillTypes2String[SkillType]); #else SkillHandler->execute(pSlayer, TargetObjectID, pSkillSlot, EffectID); #endif } else { GCSkillFailed1 _GCSkillFailed1; _GCSkillFailed1.setSkillType(SkillType); pPlayer->sendPacket(&_GCSkillFailed1); } } else if (pCreature->isVampire()) { Vampire* pVampire = dynamic_cast<Vampire*>(pCreature); VampireSkillSlot* pVampireSkillSlot = pVampire->hasSkill(SkillType); bool bSuccess = true; // BITE OF DEATH 况匡橇 眉农绰 isAbleToUseObjectSkill 救俊辑 茄促. if (pVampireSkillSlot == NULL && SkillType != SKILL_BITE_OF_DEATH) bSuccess = false; if (!isAbleToUseObjectSkill(pVampire)) bSuccess = false;/* if (pVampire->isFlag(Effect::EFFECT_CLASS_INVISIBILITY)) { addVisibleCreature(pZone, pVampire, true); } */ // 父距 EXTREME 扁贱阑 荤侩茄 惑怕扼搁 扁贱阑 秦力秦 林绢具 茄促. // EXTREME 扁贱篮 促弗 扁贱苞 捍青秦辑 荤侩窍瘤 给茄促. // 捞蜡绰 EXTREME扁贱狼 单固瘤 惑铰捞 呈公 农扁 锭巩捞绊. // EXTREME扁贱阑 荤侩茄 惑怕俊辑 促弗 扁贱阑 荤侩且锭 Effect啊 绝扁 锭巩捞促. // 2002.4.1 // EXTREME 扁贱阑 荤侩茄 惑怕俊辑 MELEE Attack俊 措秦辑绰 荤侩啊瓷窍档废 荐沥沁促. // 盖颊 傍拜父栏肺绰 呈公 何练窍促绰 狼斑锭巩 // EXTREME 扁贱阑 荤侩茄 惑怕俊辑 荤侩且 荐 乐绰 MELEE Skill篮 // ACID TOUCH, POISONOUS HAND, BLOODY NAIL捞 乐促. // /* if (pVampire->isFlag(Effect::EFFECT_CLASS_EXTREME)) { if(!(SkillType == SKILL_ACID_TOUCH) && !(SkillType == SKILL_POISONOUS_HANDS) && !(SkillType == SKILL_BLOODY_NAIL)) { EffectManager * pEffectManager = pVampire->getEffectManager(); Assert( pEffectManager != NULL ); Effect * pEffect = pEffectManager->findEffect( Effect::EFFECT_CLASS_EXTREME ); if ( pEffect != NULL ) { pEffect->setDeadline(0); } } } */ /* // 父距俊 鞍篮 辆练狼 己拱焊包窃捞扼搁 扁贱捞 荤侩登瘤 臼绰促. if ( pTargetCreature->isMonster() ) { Monster* pMonster = dynamic_cast<Monster*>(pTargetCreature); Assert( pMonster != NULL); if ( pMonster->getMonsterType() == 374 || pMonster->getMonsterType() == 375 || pMonster->getMonsterType() == 376) bSuccess = false; } */ if (bSuccess) { SkillHandler* pSkillHandler = g_pSkillHandlerManager->getSkillHandler(SkillType); Assert(pSkillHandler != NULL); #ifdef __PROFILE_SKILLS__ beginProfileEx(SkillTypes2String[SkillType]); pSkillHandler->execute(pVampire, TargetObjectID, pVampireSkillSlot, EffectID); endProfileEx(SkillTypes2String[SkillType]); #else pSkillHandler->execute(pVampire, TargetObjectID, pVampireSkillSlot, EffectID); #endif } else { GCSkillFailed1 _GCSkillFailed1; _GCSkillFailed1.setSkillType(SkillType); pPlayer->sendPacket(&_GCSkillFailed1); } } else if (pCreature->isOusters()) { Ousters* pOusters = dynamic_cast<Ousters*>(pCreature); OustersSkillSlot* pOustersSkillSlot = pOusters->hasSkill(SkillType); bool bSuccess = true; if (pOustersSkillSlot == NULL) bSuccess = false; if (!isAbleToUseObjectSkill(pOusters)) bSuccess = false; if (bSuccess) { SkillHandler* pSkillHandler = g_pSkillHandlerManager->getSkillHandler(SkillType); Assert(pSkillHandler != NULL); #ifdef __PROFILE_SKILLS__ beginProfileEx(SkillTypes2String[SkillType]); pSkillHandler->execute(pOusters, TargetObjectID, pOustersSkillSlot, EffectID); endProfileEx(SkillTypes2String[SkillType]); #else pSkillHandler->execute(pOusters, TargetObjectID, pOustersSkillSlot, EffectID); #endif } else { GCSkillFailed1 _GCSkillFailed1; _GCSkillFailed1.setSkillType(SkillType); pPlayer->sendPacket(&_GCSkillFailed1); } } } catch (Throwable & t) { //cout << t.toString() << endl; }#endif // __GAME_SERVER__ __END_DEBUG_EX __END_CATCH}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?