📄 handler_cg_sync.cpp
字号:
#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 + -