cglearnskillhandler.cpp
来自「天之炼狱1服务器端源文件游戏服务端不完整」· C++ 代码 · 共 740 行 · 第 1/2 页
CPP
740 行
__END_DEBUG_EX __END_CATCH}//////////////////////////////////////////////////////////////////////////////// 浇饭捞绢 扁贱 嚼垫阑 贸府//////////////////////////////////////////////////////////////////////////////void CGLearnSkillHandler::executeSlayerSkill (CGLearnSkill* pPacket , Player* pPlayer) throw (ProtocolException, Error){ __BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__ // 菩哦 沥焊甫 惶酒辰促. SkillType_t targetSkillType = pPacket->getSkillType(); SkillDomainType_t targetDomainType = pPacket->getSkillDomainType(); GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer); Creature* pPC = pGamePlayer->getCreature(); Slayer* pSlayer = dynamic_cast<Slayer*>(pPC); bool bSuccess = false; // ETC 档皋牢狼 版快 葛电 档皋牢俊辑 傍侩栏肺 静捞绰 扁贱捞促. // ETC 档皋牢 扁贱俊 措秦辑绰 浇饭捞绢狼 啊厘 臭篮 档皋牢 饭骇苞 厚背茄促. SkillDomainType_t actualDomainType = targetDomainType; if ( actualDomainType == SKILL_DOMAIN_ETC ) actualDomainType = pSlayer->getHighestSkillDomain(); if (targetSkillType >= SKILL_MAX && targetSkillType < SKILL_DOUBLE_IMPACT) { GCLearnSkillFailed failpkt; failpkt.setSkillType(targetSkillType);; failpkt.setDesc(PARENT_SKILL_NEED); pPlayer->sendPacket(&failpkt); } // 弊 扁贱阑 硅匡 荐 乐绰 饭骇捞 泅犁 档皋牢狼 饭骇 焊促 撤促搁 扁贱阑 硅匡 荐 乐促. SkillInfo* pSkillInfo = g_pSkillInfoManager->getSkillInfo(targetSkillType);// if (pSkillInfo->getLevel() <= pSlayer->getSkillDomainLevel(pSkillInfo->getDomainType())) bSuccess = true; if (pSkillInfo->getLevel() <= pSlayer->getSkillDomainLevel(actualDomainType)) bSuccess = true; // 扁贱阑 硅匡荐 乐绰 版氰摹啊 酒聪搁 硅匡 荐 绝促. 饭骇捞 捞惑捞 乐阑 版快甫 措厚秦 版氰摹档 眉农茄促. // ETC 档皋牢老 版快 抗寇肺 贸府茄促. if ( targetDomainType != SKILL_DOMAIN_ETC )// if (pSlayer->getSkillDomainExp(pSkillInfo->getDomainType())// >= g_pSkillDomainInfoManager->getDomainInfo((SkillDomain)pSkillInfo->getDomainType(), (Level_t)max(0, (int)pSkillInfo->getLevel() - 1))->getAccumExp()) if ( pSlayer->getSkillDomainLevel(pSkillInfo->getDomainType()) >= pSkillInfo->getLevel() ) bSuccess = true; if ( pSlayer->hasSkill( targetSkillType ) ) { GCSystemMessage gcSM; gcSM.setMessage( g_pStringPool->getString(STRID_ALREAY_LEARN_SKILL) ); pPlayer->sendPacket( &gcSM ); } else // 己傍 咯何甫 眉农秦辑 舅嘎篮 菩哦阑 朝赴促. if (bSuccess) { // 扁贱阑 歹窍绊... pSlayer->addSkill(targetSkillType); // 扁贱 硅奎促绊 菩哦 朝妨霖促. GCLearnSkillOK okpkt; okpkt.setSkillType(targetSkillType); okpkt.setSkillDomainType(targetDomainType); pPlayer->sendPacket (&okpkt); // 老何 胶懦甸篮 瓷仿摹 包访 蔼甸捞 官肺 函茄促. switch (targetSkillType) { case SKILL_SWORD_MASTERY : case SKILL_SHIELD_MASTERY: case SKILL_SMG_MASTERY: case SKILL_SG_MASTERY: case SKILL_SR_MASTERY: case SKILL_AR_MASTERY: case SKILL_ARMS_MASTERY_1: case SKILL_ARMS_MASTERY_2: case SKILL_CONCENTRATION: case SKILL_EVASION: case SKILL_LIVENESS: case SKILL_FABULOUS_SOUL: case SKILL_WILL_OF_IRON: { SLAYER_RECORD prev; pSlayer->getSlayerRecord(prev); pSlayer->initAllStat(); pSlayer->sendRealWearingInfo(); pSlayer->sendModifyInfo(prev); } break; } } else { GCLearnSkillFailed failpkt; failpkt.setSkillType(targetSkillType);; failpkt.setDesc(PARENT_SKILL_NEED); pPlayer->sendPacket(&failpkt); }#endif __END_DEBUG_EX __END_CATCH}//////////////////////////////////////////////////////////////////////////////// 轨颇捞绢 扁贱 嚼垫阑 贸府//////////////////////////////////////////////////////////////////////////////void CGLearnSkillHandler::executeVampireSkill (CGLearnSkill* pPacket , Player* pPlayer) throw (ProtocolException, Error){ __BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__ // 菩哦 沥焊甫 惶酒辰促. SkillType_t targetSkillType = pPacket->getSkillType(); SkillDomainType_t targetDomainType = pPacket->getSkillDomainType(); // 菩哦俊辑 惶酒辰 沥焊甫 啊傍 GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer); Creature* pPC = pGamePlayer->getCreature(); Vampire* pVampire = dynamic_cast<Vampire*>(pPC); bool bSuccess = false; // 弊 扁贱阑 硅匡 荐 乐绰 饭骇捞 泅犁 饭骇 焊促 撤促搁 扁贱阑 硅匡 荐 乐促. SkillInfo* pSkillInfo = g_pSkillInfoManager->getSkillInfo(targetSkillType); if (pSkillInfo->getLevel() <= pVampire->getLevel()) bSuccess = true; // 己傍 咯何甫 眉农秦辑 舅嘎篮 菩哦阑 朝赴促. if (bSuccess) { pVampire->addSkill(targetSkillType); GCLearnSkillOK okpkt; okpkt.setSkillType(targetSkillType); okpkt.setSkillDomainType(targetDomainType); pPlayer->sendPacket (&okpkt); } else { GCLearnSkillFailed failpkt; failpkt.setSkillType(targetSkillType);; failpkt.setDesc(PARENT_SKILL_NEED); pPlayer->sendPacket(&failpkt); } switch ( targetSkillType ) { case SKILL_NAIL_MASTERY: { VAMPIRE_RECORD prev; pVampire->getVampireRecord( prev ); pVampire->initAllStat(); pVampire->sendRealWearingInfo(); pVampire->sendModifyInfo( prev ); } break; default : break; }#endif __END_DEBUG_EX __END_CATCH}void CGLearnSkillHandler::executeOustersSkill(CGLearnSkill* pPacket, Player* pPlayer) throw(ProtocolException, Error){ __BEGIN_DEBUG_EX __BEGIN_TRY#ifdef __GAME_SERVER__ // 菩哦 沥焊甫 惶酒辰促. SkillType_t targetSkillType = pPacket->getSkillType(); SkillDomainType_t targetDomainType = pPacket->getSkillDomainType(); // 菩哦俊辑 惶酒辰 沥焊甫 啊傍 GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer); Creature* pPC = pGamePlayer->getCreature(); Ousters* pOusters = dynamic_cast<Ousters*>(pPC); SkillInfo* pSkillInfo = g_pSkillInfoManager->getSkillInfo(targetSkillType); OustersSkillSlot* pOustersSkillSlot = pOusters->hasSkill( targetSkillType ); if ( pOustersSkillSlot != NULL ) { //////////////////////////////////////// // 胶懦狼 饭骇 诀捞促. //////////////////////////////////////// int LevelUpPoint = pSkillInfo->getLevelUpPoint(); if ( LevelUpPoint==0 || pOusters->getSkillBonus() < LevelUpPoint || pOustersSkillSlot->getExpLevel() >= 30 ) { GCLearnSkillFailed failpkt; failpkt.setSkillType(targetSkillType);; failpkt.setDesc(NPC_LEVEL_LIMIT); pPlayer->sendPacket(&failpkt); return; } pOusters->setSkillBonus( pOusters->getSkillBonus() - LevelUpPoint ); char query[50]; sprintf(query, "SkillBonus = %u", pOusters->getSkillBonus() ); pOusters->tinysave( query ); GCModifyInformation gcMI; gcMI.addShortData( MODIFY_SKILL_BONUS_POINT, pOusters->getSkillBonus() ); pPlayer->sendPacket( &gcMI ); pOustersSkillSlot->setExpLevel( pOustersSkillSlot->getExpLevel() + 1 ); pOustersSkillSlot->save(); GCLearnSkillOK okpkt; okpkt.setSkillType(targetSkillType); okpkt.setSkillDomainType(targetDomainType); pPlayer->sendPacket (&okpkt); switch ( targetSkillType ) { case SKILL_HIDE_SIGHT: { OUSTERS_RECORD prev; pOusters->getOustersRecord( prev ); pOusters->initAllStat(); pOusters->sendRealWearingInfo(); pOusters->sendModifyInfo( prev ); } break; default : break; } } else { if ( !CheckRequiredSkill( pSkillInfo, pOusters, pSkillInfo->getElementalDomain() ) ) { GCLearnSkillFailed failpkt; failpkt.setSkillType(targetSkillType);; failpkt.setDesc(PARENT_SKILL_NEED); pPlayer->sendPacket(&failpkt); return; } int SkillPoint = pSkillInfo->getSkillPoint(); if ( pOusters->getSkillBonus() < SkillPoint ) { GCLearnSkillFailed failpkt; failpkt.setSkillType(targetSkillType);; failpkt.setDesc(NPC_LEVEL_LIMIT); pPlayer->sendPacket(&failpkt); return; } pOusters->setSkillBonus( pOusters->getSkillBonus() - SkillPoint ); char query[50]; sprintf(query, "SkillBonus = %u", pOusters->getSkillBonus() ); pOusters->tinysave( query ); GCModifyInformation gcMI; gcMI.addShortData( MODIFY_SKILL_BONUS_POINT, pOusters->getSkillBonus() ); pPlayer->sendPacket( &gcMI ); pOusters->addSkill( targetSkillType ); GCLearnSkillOK okpkt; okpkt.setSkillType(targetSkillType); okpkt.setSkillDomainType(targetDomainType); pPlayer->sendPacket (&okpkt); switch ( targetSkillType ) { case SKILL_HIDE_SIGHT: case SKILL_FIRE_OF_SOUL_STONE: case SKILL_ICE_OF_SOUL_STONE: case SKILL_SAND_OF_SOUL_STONE: case SKILL_BLOCK_HEAD: { OUSTERS_RECORD prev; pOusters->getOustersRecord( prev ); pOusters->initAllStat(); pOusters->sendRealWearingInfo(); pOusters->sendModifyInfo( prev ); } break; default : break; } } #endif __END_DEBUG_EX __END_CATCH}#ifdef __GAME_SERVER__// 酒快胶磐令狼 胶懦甘俊辑 捞 胶懦阑 硅快扁 困秦 鞘夸茄 胶懦阑 眉农茄促.bool CheckRequiredSkill(SkillInfo* pSkillInfo, Ousters* pOusters, int domain){ if ( pSkillInfo->getType() == SKILL_SOUL_CHAIN ) { if ( pOusters->getLevel() >= 100 ) return true; else return false; } const list<SkillType_t>& RequiredSkills = pSkillInfo->getRequireSkills(); // 鞘夸茄 胶懦捞 绝栏搁 公炼扒.. if ( RequiredSkills.empty() ) return true; list<SkillType_t>::const_iterator itr = RequiredSkills.begin(); list<SkillType_t>::const_iterator endItr = RequiredSkills.end(); // 鞘夸茄 胶懦吝俊 窍唱扼档 乐栏搁 等促. for ( ; itr != endItr ; ++itr ) { // 鞘夸茄 胶懦捞 ETC 档皋牢老 版快, 绢蠢率 胶懦甘俊辑 硅款扒瘤 眉农秦具 茄促. SkillInfo* pParentSkillInfo = g_pSkillInfoManager->getSkillInfo( *itr ); if ( pParentSkillInfo->getElementalDomain() == ELEMENTAL_DOMAIN_ETC ) { if ( !CheckRequiredSkill(pParentSkillInfo, pOusters, domain ) ) continue; } // 鞘夸茄 胶懦捞 硅匡 胶懦苞 鞍篮 胶懦 甘俊 乐瘤 臼阑 版快浚 眉农秦林搁 救等促. else if ( domain != ELEMENTAL_DOMAIN_ETC && getSkillMapID((ElementalDomain)pParentSkillInfo->getElementalDomain()) != getSkillMapID((ElementalDomain)domain) ) continue; if ( pOusters->hasSkill(*itr) != NULL ) { return true; } } return false;}int getSkillMapID(ElementalDomain domain){ switch ( domain ) { case ELEMENTAL_DOMAIN_FIRE: case ELEMENTAL_DOMAIN_WATER: case ELEMENTAL_DOMAIN_EARTH: case ELEMENTAL_DOMAIN_WIND: return 1; case ELEMENTAL_DOMAIN_COMBAT: case ELEMENTAL_DOMAIN_ELEMENTAL_COMBAT: return 0; default: return -1; }}#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?