⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 handler_cg_skill.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 CPP
字号:
#include "StdAfx.h"
#include "Handler_CG_SKILL.h"
#include "PlayerManager.h"
#include <Struct.h>
#include <Protocol_CG.h>
#include <PacketStruct_CG.h>
#include "Field.h"
#include "Player.h"
#include "Monster.h"
#include "SkillInfoParser.h"
#include "SkillFactory.h"
#include "Skill.h"
#include "PublicMath.h"
#include "float.h"


VOID Handler_CG_SKILL::OnCG_SKILL_ACTION_SYN( ServerSession * pServerSession, MSG_BASE *pMsg, WORD wSize )
{
	MSG_CG_SKILL_ACTION_SYN *pRecvMsg = (MSG_CG_SKILL_ACTION_SYN*)pMsg;

	MSG_CG_SKILL_ACTION_NAK NakMsg;

	Player *pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
	if( !pPlayer ) return ;	//< 敲饭捞绢 技记捞 谗绢脸阑 锭

	Field *pField = pPlayer->GetField();
	if( !pField ) return;

	// 泅犁 谅钎啊 蜡瓤茄瘤 眉农
	if( !_finite(pRecvMsg->m_wvCurPos.x) || !_finite(pRecvMsg->m_wvCurPos.y) || !_finite(pRecvMsg->m_wvCurPos.z) )
	{
		SUNLOG( eCRITICAL_LOG,  "[Handler_CG_SKILL::OnCG_SKILL_ACTION_SYN] CurPos is Invalid! x[%f] y[%f] z[%f]", pRecvMsg->m_wvCurPos.x, pRecvMsg->m_wvCurPos.y, pRecvMsg->m_wvCurPos.z );
		NakMsg.m_byErrorCode = RC::RC_SKILL_POSITION_INVALID;
		pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) );
		return;
	}

	// 格利瘤 谅钎啊 蜡瓤茄瘤 眉农
	if( !_finite(pRecvMsg->m_wvDestPos.x) || !_finite(pRecvMsg->m_wvDestPos.y) || !_finite(pRecvMsg->m_wvDestPos.z) )
	{
		SUNLOG( eCRITICAL_LOG,  "[Handler_CG_SKILL::OnCG_SKILL_ACTION_SYN] DestPos is Invalid! x[%f] y[%f] z[%f]", pRecvMsg->m_wvDestPos.x, pRecvMsg->m_wvDestPos.y, pRecvMsg->m_wvDestPos.z );
		NakMsg.m_byErrorCode = RC::RC_SKILL_POSITION_INVALID;
		pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) );
		return;
	}

	// 努扼客 辑滚埃俊 困摹 焊沥
	WzVector wvResultCurPos, wvResultDestPos;
	pPlayer->ModifyPosition( pRecvMsg->m_wvCurPos, pRecvMsg->m_wvDestPos, wvResultCurPos, wvResultDestPos, pRecvMsg->m_SkillCode );

	// 矫傈磊啊 捞 胶懦阑 荤侩啊瓷茄瘤 眉农茄促.
	RC::eSKILL_RESULT rcResult = pPlayer->CanUseSkill( pRecvMsg->m_SkillCode );
	if( rcResult != RC::RC_SKILL_SUCCESS )
	{
		NakMsg.m_byErrorCode = rcResult;
		pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) );
		return;
	}

	// 货肺款 胶懦俊 措秦 皋葛府甫 且寸罐绊 胶懦沥焊甫 悸泼茄促.
	SkillScriptInfo *pBaseSkillInfo = (SkillScriptInfo *)SkillInfoParser::Instance()->GetSkillInfo( pRecvMsg->m_SkillCode );
	Skill* pNewSkill = (Skill*)SkillFactory::Instance()->AllocSkill( SKILL_TYPE_ACTIVE, pBaseSkillInfo );

	SkillInfo SkillInfoData;
	SkillInfoData.m_SkillCode			= pRecvMsg->m_SkillCode;
	SkillInfoData.m_dwClientSerial		= pRecvMsg->m_dwClientSerial;
	SkillInfoData.m_wvCurPos			= wvResultCurPos;
	SkillInfoData.m_wvDestPos			= wvResultDestPos;
	SkillInfoData.m_dwMainTargetKey		= pRecvMsg->m_dwMainTargetKey;
	SkillInfoData.m_wvMainTargetPos		= pRecvMsg->m_wvMainTargetPos;

	pNewSkill->Init( pPlayer, &SkillInfoData, pBaseSkillInfo );

	// 胶懦阑 敲饭捞绢狼 胶懦府胶飘俊 殿废茄促.
	pPlayer->AddSkill( pNewSkill );
}


VOID Handler_CG_SKILL::OnCG_SKILL_SELECT_SKILLPOINT_SYN( ServerSession * pServerSession, MSG_BASE * pMsg, WORD wSize )
{
	MSG_CG_SKILL_SELECT_SKILLPOINT_SYN * pRecvMsg = (MSG_CG_SKILL_SELECT_SKILLPOINT_SYN *)pMsg;

	Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
	if( !pPlayer )		return ;

	// 胶懦 嚼垫 趣篮 饭骇诀捞 啊瓷茄瘤 眉农
	SLOTCODE CurSkillCode = pRecvMsg->m_SkillCode;
	SLOTCODE NextSkillCode = 0;
	RC::eSKILL_RESULT rcResult = pPlayer->CanLevelUpSkill( pRecvMsg->m_bSkill, CurSkillCode, NextSkillCode );

	if( rcResult == RC::RC_SKILL_SUCCESS )
	{
		MSG_CG_SKILL_SELECT_SKILLPOINT_ACK AckMsg;

		// 角力肺 胶懦阑 嚼垫窍芭唱 饭骇诀阑 茄促.
		AckMsg.m_OldSkillCode = CurSkillCode;
		AckMsg.m_dwRemainSkillPoint = pPlayer->LevelUpSkill( pRecvMsg->m_bSkill, CurSkillCode, NextSkillCode, AckMsg.m_NewSkillSlot );

		pPlayer->SendPacket( &AckMsg, sizeof(AckMsg) );

		// 菩矫宏 胶懦捞扼搁 宏肺靛肺 舅赴促.
/*		SkillScriptInfo *pBaseSkillInfo = (SkillScriptInfo *)SkillInfoParser::Instance()->GetSkillInfo( CurSkillCode );
		if( pBaseSkillInfo && pBaseSkillInfo->m_bySkillType == SKILL_TYPE_PASSIVE )
		{
			MSG_CG_SKILL_PASSIVE_SKILL_ADD_CMD CmdMsg;
			CmdMsg.m_dwObjectKey = pPlayer->GetObjectKey();

			if( CurSkillCode == NextSkillCode )		CmdMsg.m_OldSkillCode = 0;
			else									CmdMsg.m_OldSkillCode = CurSkillCode;
			
			CmdMsg.m_NewSkillCode = NextSkillCode;

			pPlayer->SendPacketAround( &CmdMsg, sizeof(CmdMsg) );
		}*/
	}
	else
	{
		MSG_CG_SKILL_SELECT_SKILLPOINT_NAK NakMsg;
		NakMsg.m_SkillCode = pRecvMsg->m_SkillCode;
		NakMsg.m_byErrorCode = rcResult;

		pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) );
	}
}







⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -