cglearnskillhandler.cpp

来自「dk1游戏的原代码文件,完整.编译系统redhat7.3,mysql 3.23 」· 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 + -
显示快捷键?