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

📄 handler_cg_sync.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include "stdafx.h"
#include ".\handler_cg_sync.h"
#include "Field.h"
#include <Struct.h>
#include <PacketStruct_CG.h>
#include <PacketStruct_AG.h>
#include <Struct.h>
#include "Player.h"
#include "FieldServer.h"
#include "Map.h"
#include "PlayerManager.h"
#include "ServerSession.h"
#include "global.h"
#include "PublicMath.h"
#include "MissionManager.h"
#include "MovementChecker.h"
#include "GameZone.h"
#include "GameZoneManager.h"
#include "float.h"
#include "MoveStateControl.h"
#include "NumericValues.h"
#include "StatusManager.h"


Handler_CG_SYNC::Handler_CG_SYNC()
{
}

Handler_CG_SYNC::~Handler_CG_SYNC()
{
}
VOID Handler_CG_SYNC::OnAG_SYNC_PLAYER_ENTER_SYN( ServerSession * pServerSession, MSG_BASE * pMsg, WORD wSize )
{
	MSG_AG_SYNC_PLAYER_ENTER_SYN * pRecvMsg = (MSG_AG_SYNC_PLAYER_ENTER_SYN *)pMsg;
	Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
	ASSERT( pPlayer );
	if( !pPlayer ) return ;	//< 敲饭捞绢 技记捞 谗绢脸阑 锭

	GameZone * pEnterZone = NULL;
	CODETYPE FieldCode = 0;
	WzID AreaID = 0;
	eZONE_STATE eRoomState = pPlayer->GetGameZone( pEnterZone, FieldCode, &AreaID );

	if( eRoomState == ePRS_NOT_AT_ZONE ) return ;

	KEYTYPE	RoomKey = pEnterZone->GetKey();
	pEnterZone = g_GameZoneManager.GetZone( RoomKey );
	if( !pEnterZone )
	{
		SUNLOG( eCRITICAL_LOG,  "[Handler_CG_SYNC::OnCG_SYNC_PLAYER_ENTER_SYN] [U:%d][Room:%d]甸绢哎妨绰 甘捞 绝促.", pPlayer->GetUserKey(), RoomKey );
		MSG_CG_SYNC_PLAYER_ENTER_NAK nmsg;
		nmsg.m_dwErrorCode = 21;
		pPlayer->SendPacket( &nmsg, sizeof(nmsg) );
		return;
	}

	// 捞 何盒篮 例措肺 林籍贸府 窍瘤 富 巴!!!(林狼夸噶!!)
	if( pRecvMsg->m_dwCheckSum != 0 && FALSE == g_GameZoneManager.FieldVersionCheck( RoomKey, FieldCode, pRecvMsg->m_dwCheckSum ) )
	{
		SUNLOG( eCRITICAL_LOG, "[ID:%s]C/S Map Version is differnt[%d]!!", pPlayer->GetUserID(), pRecvMsg->m_dwCheckSum);

		MSG_CG_SYNC_PLAYER_ENTER_NAK nmsg;
		nmsg.m_dwErrorCode = 22;
		pPlayer->SendPacket( &nmsg, sizeof(nmsg) );
		return;
	}

	g_GameZoneManager.JoinPlayer( RoomKey, pPlayer, FieldCode, AreaID );


	// 固记 芒 顿况扼扼绰 疙飞 菩哦
	MissionManager * pMGR = pPlayer->GetMissionManager();
	if( pMGR->EnableWindowOpen() )
	{
		BYTE MissionNum = pPlayer->GetMissionManager()->ReservedMissionNum();
		MSG_CG_TRIGGER_REWARD_WINDOW_CMD cmsg;
		cmsg.m_Num = MissionNum;
		cmsg.m_Type = ( pMGR->GetMissionPoint(MissionNum) == 1 ? 0 : 1 );
		pPlayer->SendPacket( &cmsg, sizeof(cmsg) );
		SUNLOG( eFULL_LOG,  "[Handler_CG_SYNC::OnCG_SYNC_PLAYER_ENTER_SYN] [ID:%s]:固记 焊惑芒阑 顿奎促.", pPlayer->GetUserID() );
	}
}
VOID Handler_CG_SYNC::OnAG_SYNC_PLAYER_WARP_SYN( ServerSession * pServerSession, MSG_BASE * pMsg, WORD wSize )
{
	MSG_AG_SYNC_PLAYER_WARP_SYN * pRecvMsg = (MSG_AG_SYNC_PLAYER_WARP_SYN *)pMsg;
	Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
	ASSERT( pPlayer );
	if( !pPlayer ) return ;	//< 敲饭捞绢 技记捞 谗绢脸阑 锭

	GameZone * pEnterZone = NULL;
	CODETYPE FieldCode = 0;
	WzID AreaID = 0;
	eZONE_STATE eRoomState = pPlayer->GetGameZone( pEnterZone, FieldCode, &AreaID );

	if( eRoomState == ePRS_NOT_AT_ZONE ) return ;

	KEYTYPE	RoomKey = pEnterZone->GetKey();
	pEnterZone = g_GameZoneManager.GetZone( RoomKey );
	if( !pEnterZone )
	{
		SUNLOG( eCRITICAL_LOG,  "[Handler_CG_SYNC::OnCG_SYNC_PLAYER_ENTER_SYN] [U:%d][Room:%d]甸绢哎妨绰 甘捞 绝促.", pPlayer->GetUserKey(), RoomKey );
		MSG_CG_SYNC_PLAYER_ENTER_NAK nmsg;
		nmsg.m_dwErrorCode = 21;
		pPlayer->SendPacket( &nmsg, sizeof(nmsg) );
		return;
	}

	// 捞 何盒篮 例措肺 林籍贸府 窍瘤 富 巴!!!(林狼夸噶!!)
	if( pRecvMsg->m_dwCheckSum != 0 && FALSE == g_GameZoneManager.FieldVersionCheck( RoomKey, FieldCode, pRecvMsg->m_dwCheckSum ) )
	{
		SUNLOG( eCRITICAL_LOG, "[ID:%s]C/S Map Version is differnt[%d]!!", pPlayer->GetUserID(), pRecvMsg->m_dwCheckSum);

		MSG_CG_SYNC_PLAYER_ENTER_NAK nmsg;
		nmsg.m_dwErrorCode = 22;
		pPlayer->SendPacket( &nmsg, sizeof(nmsg) );
		return;
	}

	g_GameZoneManager.JoinPlayer( RoomKey, pPlayer, FieldCode, AreaID );


	// 固记 芒 顿况扼扼绰 疙飞 菩哦
	MissionManager * pMGR = pPlayer->GetMissionManager();
	if( pMGR->EnableWindowOpen() )
	{
		BYTE MissionNum = pPlayer->GetMissionManager()->ReservedMissionNum();
		MSG_CG_TRIGGER_REWARD_WINDOW_CMD cmsg;
		cmsg.m_Num = MissionNum;
		cmsg.m_Type = ( pMGR->GetMissionPoint(MissionNum) == 1 ? 0 : 1 );
		pPlayer->SendPacket( &cmsg, sizeof(cmsg) );
		SUNLOG( eFULL_LOG,  "[Handler_CG_SYNC::OnCG_SYNC_PLAYER_ENTER_SYN] [ID:%s]:固记 焊惑芒阑 顿奎促.", pPlayer->GetUserID() );
	}
}


// 捞悼菩哦 傍烹肺流(CG_SYNC_MOVE_SYN, CG_SYNC_TARGET_MOVE_SYN)
RC::eSYNC_RESULT Handler_CG_SYNC::MoveCommon(Player * pPlayer, BYTE byState, WzVector &wvCurPos, WzVector &wvDestPos, BYTE byNumRoute, TILEINDEX* piRoute)
{
	// 敲饭捞绢啊 乐绰 鞘靛 器牢磐啊 蜡瓤茄瘤 八荤
	Field* pField = pPlayer->GetField();
	if( !pField )	return RC::RC_SYNC_FIELD_IS_NULL;

	pPlayer->GetStatusManager()->Move();

	// 敲饭捞绢啊 混酒乐瘤 臼栏搁 府畔
	if( !pPlayer->IsAlive() ) 	return RC::RC_SYNC_PLAYER_IS_DEAD;

	WzVector wvPlayerPos;
	pPlayer->GetPos( &wvPlayerPos );

	float fCSDist = Math_VectorLength( wvPlayerPos, wvCurPos );
	if( fCSDist >= 5.0f )
	{
		// 菩哦俊 乐绰 捞悼 矫累 困摹啊 泅犁 辑滚啊 啊柳 困摹客 竭蹲嘎霸 促福搁 立加阑 谗绰促.
		//pPlayer->ForceDisconnect( MOVE_SYNC_BROKEN );
		//		return FALSE;
		__asm nop;
	}	

	if( byNumRoute > _MAX_PATHROUTE_SIZE )
	{
		SUNLOG( eCRITICAL_LOG,  "[Handler_CG_SYNC::MoveCommon] 捞悼 版肺 俺荐啊 %d俺甫 檬苞钦聪促. ObjectKey(%d) NumRoute(%d)",
			_MAX_PATHROUTE_SIZE, pPlayer->GetObjectKey(), byNumRoute );
		return RC::RC_SYNC_ROUTE_SIZE_EXCESS;
	}

	// 捞悼啊瓷茄瘤 眉农(烙矫...弊成 return 窍搁 救等促.)
	if( !pPlayer->CanMove() )
	{
		return RC::RC_SYNC_PLAYER_IS_UNMOVABLE_STATE;
	}

	// 鸥老牢郸胶 函券累诀(short硅凯 -> int硅凯)
	int iRoute[_MAX_PATHROUTE_SIZE];
	for(int iCnt = 0; iCnt < byNumRoute; iCnt++)
	{
		iRoute[iCnt] = piRoute[iCnt];
	}

	// 敲饭捞绢 困摹甫 努扼啊 焊郴霖 绢琶 矫累痢栏肺 颗变促.
	if( FALSE == pPlayer->SetPath( &wvCurPos, &wvDestPos, iRoute, byNumRoute ) )
	{
		SUNLOG( eMIDDLE_LOG,  "[Handler_CG_SYNC::MoveCommon] SetPath Error " );
		return RC::RC_SYNC_SETPATH_ERROR;
	}

	// 捞悼 加档 技泼
	if( byState == CMS_WALK || byState == CMS_RUN )
	{
		pPlayer->SetMoveState( (eCHAR_MOVE_STATE)byState );
	}
	else
	{
		SUNLOG( eCRITICAL_LOG,  "[Handler_CG_SYNC::MoveCommon] 叭扁档 崔府扁档 酒囱 捞悼篮 构瘤?" );
		return RC::RC_SYNC_INVALID_MOVESATE;
	}

	// 捞悼樊 眉农甫 困秦 穿利
	if( !pPlayer->GetMovementChecker()->AddMovement( wvCurPos ) )
	{
		SUNLOG( eCRITICAL_LOG,  "Warning: Speed hack! ObjectKey(%d) Name(%s)", pPlayer->GetObjectKey(), pPlayer->GetCharName() );
		//pPlayer->ForceDisconnect( SPEED_HACK );
	}

	return RC::RC_SYNC_SUCCESS;
}


VOID Handler_CG_SYNC::OnCG_SYNC_MOVE_SYN( ServerSession * pServerSession, MSG_BASE * pMsg, WORD wSize )
{
	MSG_CG_SYNC_MOVE_SYN * pRecvMsg = (MSG_CG_SYNC_MOVE_SYN *)pMsg;

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

	RC::eSYNC_RESULT rcResult = MoveCommon(	pPlayer, CMS_RUN, pRecvMsg->wvCurPos, pRecvMsg->wvDestPos, 
		pRecvMsg->m_byNumRoute, pRecvMsg->m_iRoute );

	if( rcResult == RC::RC_SYNC_SUCCESS )
	{
		// 促弗 敲饭捞绢甸俊霸 宏肺靛 某胶泼
		MSG_CG_SYNC_MOVE_BRD sendMsg;
		sendMsg.m_byCategory	= CG_SYNC;
		sendMsg.m_byProtocol	= CG_SYNC_MOVE_BRD;
		sendMsg.m_dwObjectKey	= pPlayer->GetObjectKey();
		sendMsg.m_byState		= CMS_RUN;//某腐磐狼 版快绰 公炼扒 顿扁父 粮犁!!(阁胶磐客 鞍捞 静绰 菩哦捞骨肺 蔼篮 持绢淋)
		sendMsg.wvCurPos		= pRecvMsg->wvCurPos;
		sendMsg.wvDestPos		= pRecvMsg->wvDestPos;

		pPlayer->SendPacketAround( &sendMsg, (WORD)sendMsg.GetPacketSize(), FALSE );
	}
	else
	{
		SendMoveNakMsg( pPlayer, rcResult );
	}
}

VOID Handler_CG_SYNC::OnCG_SYNC_TARGET_MOVE_SYN( ServerSession * pServerSession, MSG_BASE * pMsg, WORD wSize )
{
	MSG_CG_SYNC_TARGET_MOVE_SYN * pRecvMsg = (MSG_CG_SYNC_TARGET_MOVE_SYN *)pMsg;

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

	RC::eSYNC_RESULT rcResult = MoveCommon(	pPlayer, CMS_RUN, pRecvMsg->wvCurPos, pRecvMsg->wvDestPos, 
		pRecvMsg->m_byNumRoute, pRecvMsg->m_iRoute );

	if( rcResult == RC::RC_SYNC_SUCCESS )
	{
		// 促弗 敲饭捞绢甸俊霸 宏肺靛 某胶泼
		MSG_CG_SYNC_TARGET_MOVE_BRD sendMsg;
		sendMsg.m_byCategory	= CG_SYNC;
		sendMsg.m_byProtocol	= CG_SYNC_TARGET_MOVE_BRD;
		sendMsg.m_dwTargetKey	= pRecvMsg->m_dwTargetKey;
		sendMsg.m_wPlayerKey	= (WORD)pPlayer->GetObjectKey();//敲饭捞绢虐啊 泅犁绰 WORD裹困甫 逞瘤 臼扁锭巩!!(菩哦 弥利拳甫 困秦 临咯辑 焊晨)
		sendMsg.wvCurPos		= pRecvMsg->wvCurPos;
		sendMsg.wvDestPos		= pRecvMsg->wvDestPos;

		pPlayer->SendPacketAround( &sendMsg, (WORD)sendMsg.GetPacketSize(), FALSE );
	}
	else
	{
		SendMoveNakMsg( pPlayer, rcResult );
	}
}



VOID Handler_CG_SYNC::OnCG_SYNC_KBMOVE_SYN( ServerSession * pServerSession, MSG_BASE * pMsg, WORD wSize )
{
	MSG_CG_SYNC_KBMOVE_SYN *pRecvMsg = (MSG_CG_SYNC_KBMOVE_SYN*)pMsg;

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

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

	RC::eSYNC_RESULT rcResult = KBMoveCommon( pPlayer, pRecvMsg->wvCurPos );
	if( rcResult != RC::RC_SYNC_SUCCESS )
	{
		SendMoveNakMsg( pPlayer, rcResult ); 
		return;
	}

	// 傈饶柳捞唱 霸吧澜捞 绝绰 版快俊绰 弊成 沥瘤!
	if( !(pRecvMsg->m_byMoveState & KEYBOARDMOVE_ISMOVING) )
	{
		pPlayer->StopMoving();
	}
	else
	{

		// 弥辆 规氢阑 备茄促.
		WzVector wvFinalDir;
		CalcFinalDir( wvFinalDir, pRecvMsg->m_wAngle, FALSE, pRecvMsg->m_byMoveState );

⌨️ 快捷键说明

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