DragonNest/Client/DnDummyClient/DnDummyClientReceiver.cpp

1147 lines
33 KiB
C++
Raw Permalink Normal View History

#include "stdafx.h"
#include "DNSecure.h"
#include "DnDummyClientReceiver.h"
#include "DNCommonDef.h"
#include "DnProtocol.h"
#include "DnPacket.h"
//#include "ServerPacket.h"
#include "NetCommon.h"
#include "DnDummyClient.h"
#include "DnServerApp.h"
#include "DnDummySession.h"
#include "DnDummySettingPropertyPanel.h"
#include "DnPacket.h"
#include "EngineUtil.h"
#include "Stream.h"
#include "DnDummyClientMgr.h"
void
DnDummyClientTCPReceiver::OnPacket(NxPacket& Packet)
{
//DNTPacket *pHeader = (DNTPacket*)Packet.GetPacketBuffer();
DNEncryptPacketSeq *pHeader = (DNEncryptPacketSeq*)Packet.GetPacketBuffer();
int nLen = pHeader->nLen - sizeof(BYTE) - sizeof(USHORT);
CDNSecure::GetInstance().Tea_decrypt( reinterpret_cast<char*>(&pHeader->Packet), nLen );
_OnPacket(pHeader->Packet.cMainCmd, pHeader->Packet.cSubCmd, pHeader->Packet.buf, pHeader->Packet.iLen);
}
void
DnDummyClientTCPReceiver::_OnPacket(int iMainCmd, int iSubCmd, char *pData, int nSize)
{
switch( iMainCmd)
{
case SC_ACTOR: OnTRecvActorMsg(iMainCmd, iSubCmd, pData, nSize); break;
case SC_ACTORBUNDLE: OnTRecvActorBundleMessage(iMainCmd, iSubCmd, pData, nSize); break;
case SC_LOGIN: OnTRecvLoginMsg(iMainCmd, iSubCmd, pData, nSize); break;
case SC_CHAR: OnTRecvCharMsg(iMainCmd, iSubCmd, pData, nSize); break;
case SC_PARTY: OnTRecvPartyMsg(iMainCmd, iSubCmd, pData, nSize); break;
case SC_SYSTEM: OnTRecvSystemMsg(iMainCmd, iSubCmd, pData, nSize); break;
case SC_ROOM: OnTRecvRoomMsg(iMainCmd, iSubCmd, pData, nSize); break;
case SC_CHAT:
{
SCChat * pPacket = (SCChat*)pData;
m_pDummyClient->Answer(_wtoi(pPacket->wszChatMsg), iMainCmd, iSubCmd, timeGetTime());
}
case SC_ITEM:
OnTRecvItemMsg( iMainCmd, iSubCmd, pData, nSize);
break;
}
}
void
DnDummyClientTCPReceiver::OnTRecvSystemMsg(int iMainCmd, int iSubCmd, char *pData, int nSize)
{
switch(iSubCmd)
{
case eSystem::SC_VILLAGEINFO: OnRecvSystemVillageInfo( pData ); break;
case eSystem::SC_CONNECTVILLAGE: OnRecvSystemConnectVillage( pData ); break;
case eSystem::SC_GAMEINFO: OnRecvSystemGameInfo( pData ); break;
case eSystem::SC_CONNECTED_RESULT: OnRecvSystemConnectedResult( pData ); break;
case eSystem::SC_RECONNECT_REQ: OnRecvSystemReconnectReq(); break;
case eSystem::SC_TCP_CONNECT_REQ: OnRecvSystemGameTcpConnectReq(); break;
case eSystem::SC_RECONNECTLOGIN: OnRecvSystemReconnectLogin( pData ); break;
}
}
void
DnDummyClientTCPReceiver::OnTRecvLoginMsg(int iMainCmd, int iSubCmd, char *pData, int nSize)
{
switch(iSubCmd){
case eLogin::SC_CHECKVERSION:
{
FUNC_USER_LOG();
SCCheckVersion *pVersion = (SCCheckVersion *)pData;
if (pVersion->nRet != 0)
_ASSERT(0);
/*!!!
if( pVersion->cRet != 0 )
{
m_pDummyClient->GetProperty().nPlayState = PlayStateInfo::PS_ERROR;
m_pDummyClient->AddUserLog(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>."));
return;
}
*/
tstring szIP;
WORD nPort;
g_ServerApp.GetLocalIpPort(m_pDummyClient->m_pSession->GetUID(), szIP, nPort);
#ifdef _KOR_NEXON
m_pDummyClient->m_TCPSender.SendKorCheckLogin((WCHAR*)m_pDummyClient->m_CreateInfo.szExtra.c_str());
#else //_KOR_NEXON
m_pDummyClient->m_TCPSender.SendLogin(m_pDummyClient->m_CreateInfo.szUserID.c_str(), m_pDummyClient->m_CreateInfo.szPasswd.c_str(), szIP.c_str(), nPort);
#endif //_KOR_NEXON
}
break;
case eLogin::SC_CHECKLOGIN:
{
OnTRecvLoginCheckLogin( pData );
}
break;
case eLogin::SC_SERVERLIST:
{
OnTRecvLoginServerList(pData);
}
break;
case eLogin::SC_CHARLIST:
{
OnTRecvLoginCharList( pData );
}
break;
case eLogin::SC_CREATECHAR:
{
OnTRecvLoginCharCreate( pData );
}
break;
case eLogin::SC_DELETECHAR:
{
SCDeleteChar *pCharDelete = (SCDeleteChar *)pData;
OnTRecvLoginCharDelete( pData );
if( pCharDelete->nRet == 0 )
{
//m_pDummyClient->m_TCPSender.SendCharList();
}
}
break;
case eLogin::SC_CHANNELLIST:
{
OnTRecvLoginChannelList(pData);
}
break;
}
}
void
DnDummyClientTCPReceiver::OnTRecvCharMsg(int iMainCmd, int iSubCmd, char *pData, int nSize)
{
switch(iSubCmd)
{
case eChar::SC_MAPINFO: OnTRecvVillageMapInfo( pData ); break;
case eChar::SC_ENTER: OnTRecvVillageEntered( pData ); break;
case eChar::SC_ENTERUSER: OnTRecvVillageUserEntered( pData ); break;
// case eChar::SC_ACTORMSG: OnTRecvVillageActorMsg( pData ); break;
default:
break;
}
}
void
DnDummyClientTCPReceiver::OnTRecvPartyMsg(int iMainCmd, int iSubCmd, char *pData, int nSize)
{
switch(iSubCmd)
{
case eParty::SC_CREATEPARTY: OnTRecvPartyCreateParty(pData); break;
// case SC_DESTROYPARTY: OnTRecvPartyDestroyedParty(pPacket); break;
case eParty::SC_JOINPARTY: OnTRecvPartyJoinParty(pData); break;
case eParty::SC_REFRESHPARTY: OnTRecvPartyRefresh(pData); break;
// case SC_PARTYOUT: OnTRecvPartyOutParty( pPacket ); break;
//!!!case eParty::SC_PARTYLIST: OnTRecvPartyList( pData ); break;
case eParty::SC_PARTYLISTINFO: OnTRecvPartyListInfo( pData ); break;
case eParty::SC_PARTYINFO_ERROR: OnTRecvPartyListInfoError( pData ); break;
// case SC_PUSHPARTYLIST: OnTRecvPartyListPush( pPacket ); break;
// case SC_ERASEPARTYLIST: OnTRecvPartyListErase( pPacket ); break;
case eParty::SC_REFRESHGATEINFO: OnTRecvPartyRefreshGateInfo( pData ); break;
case eParty::SC_GATEINFO: OnTRecvPartyReadyGate( pData ); break;
case eParty::SC_STARTSTAGE:
case eParty::SC_STARTSTAGEDIRECT:
{
OnTRecvPartyStageStart( pData );
}
break;
case eParty::SC_CANCELSTAGE: OnTRecvPartyStageCancel( pData ); break;
case eParty::SC_EQUIPDATA: OnRecvPartyEquipData( pData ); break;
}
}
void
DnDummyClientTCPReceiver::OnTRecvRoomMsg(int iMainCmd, int iSubCmd, char *pData, int nSize)
{
switch( iSubCmd )
{
case eRoom::SC_SYNC_WAIT: OnRecvRoomSyncWait( pData );break;
case eRoom::SC_SYNC_START: OnRecvRoomSyncStart( pData ); break;
}
}
void DnDummyClientTCPReceiver::OnTRecvItemMsg(int iMainCmd, int iSubCmd, char *pData, int nSize)
{
switch( iSubCmd )
{
case eItem::SC_INVENLIST: OnRecvInvenList( pData ); break;
}
}
void DnDummyClientTCPReceiver::OnRecvInvenList( char *pPacket )
{
m_InvenList = *( SCInvenList * )pPacket;
}
void
DnDummyClientTCPReceiver::OnRecvRoomSyncWait( char *pPacket )
{
FUNC_USER_LOG();
m_pDummyClient->AddUserLog(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
m_pDummyClient->GetProperty().nPlayState = PlayStateInfo::PS_WAIT_GAME_START;
}
void
DnDummyClientTCPReceiver::OnRecvRoomSyncStart( char *pPacket )
{
FUNC_USER_LOG();
m_pDummyClient->AddUserLog(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>!!! "));
m_pDummyClient->GetProperty().nPlayState = PlayStateInfo::PS_GAME_PLAY;
m_pDummyClient->GetProperty().m_vPos = m_pDummyClient->GetNewPos();
m_pDummyClient->m_UDPSender.SendToggleBattle(true);
m_pDummyClient->m_UDPSender.SendStartStage(1);
m_pDummyClient->SetRemainPlayTime( g_SettingPropertyPanel->GetSettingPropertyData().nBasePlayTime + rand()%(g_SettingPropertyPanel->GetSettingPropertyData().nRandomPlayTime) );
}
void
DnDummyClientTCPReceiver::OnRecvSystemVillageInfo( char *pData )
{
FUNC_USER_LOG();
// <20>α<EFBFBD><CEB1>μ<EFBFBD><CEBC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
if ( m_pDummyClient->GetProperty().nCurPosition != CurrentServerInfo::_LOGIN_SERVER )
{
m_pDummyClient->GetProperty().nPlayState = PlayStateInfo::PS_ERROR;
m_pDummyClient->AddUserLog(_T("<EFBFBD>α<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>°<EFBFBD> <20>ƴ<EFBFBD>."));
m_pDummyClient->Disconnect();
return;
}
m_pDummyClient->Disconnect();
m_pDummyClient->Update();
SCVillageInfo* pPacket = (SCVillageInfo*)pData;
std::wstring wszIP;
ToWideString(pPacket->szVillageIp, wszIP);
m_pDummyClient->m_biCertifyingKey = pPacket->biCertifyingKey;
m_pDummyClient->m_nAccountDBID = pPacket->nAccountDBID;
m_pDummyClient->ConnectToVillageServer(wszIP.c_str(), pPacket->wVillagePort);
}
void
DnDummyClientTCPReceiver::OnRecvSystemConnectVillage( char *pData )
{
FUNC_USER_LOG();
m_pDummyClient->GetProperty().nPlayState = PlayStateInfo::PS_VILLAGE_LOGIN;
m_pDummyClient->AddUserLog(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>õ<EFBFBD>"));
m_pDummyClient->m_TCPSender.SendVillageReady(true);
}
void
DnDummyClientTCPReceiver::OnRecvSystemGameInfo( char *pData )
{
FUNC_USER_LOG();
if ( m_pDummyClient->GetProperty().nCurPosition != CurrentServerInfo::_VILLAGE_SERVER )
{
m_pDummyClient->GetProperty().nPlayState = PlayStateInfo::PS_ERROR;
m_pDummyClient->AddUserLog(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>°<EFBFBD> <20>ƴ<EFBFBD>."));
m_pDummyClient->Disconnect();
return;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD> <20><><EFBFBD>ӵ<EFBFBD> <20><><EFBFBD>´<EFBFBD>.
m_pDummyClient->Disconnect();
m_pDummyClient->Update();
SCGameInfo* pPacket = (SCGameInfo*)pData;
m_pDummyClient->ConnectToGameServer(pPacket->nGameServerIP, pPacket->nGameServerPort, pPacket->nGameServerTcpPort);
}
void DnDummyClientTCPReceiver::OnRecvSystemReconnectReq()
{
FUNC_USER_LOG();
}
void DnDummyClientTCPReceiver::OnRecvSystemGameTcpConnectReq()
{
FUNC_USER_LOG();
m_pDummyClient->m_TCPSender.SendGameTcpConnect(m_pDummyClient->m_nUniqueID);
}
void
DnDummyClientTCPReceiver::OnRecvSystemReconnectLogin( char* pData )
{
FUNC_USER_LOG();
SCReconnectLogin* pPacket = (SCReconnectLogin *)pData;
}
void
DnDummyClientTCPReceiver::OnRecvSystemConnectedResult( char *pData )
{
FUNC_USER_LOG();
m_pDummyClient->m_UDPSender.SendReady2Receive(m_pDummyClient->m_nUniqueID);
}
void
DnDummyClientTCPReceiver::OnTRecvLoginCheckLogin( char *pPacket )
{
FUNC_USER_LOG();
SCCheckLogin *pLogin = (SCCheckLogin*)pPacket;
if( pLogin->nRet != 0 )
{
m_pDummyClient->GetProperty().nPlayState = PlayStateInfo::PS_ERROR;
std::wstring logStr;
if (pLogin->nRet == 4)
logStr = L"<EFBFBD>ߺ<EFBFBD><EFBFBD>α<EFBFBD><EFBFBD><EFBFBD>";
else
logStr = L"<EFBFBD>α<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>";
m_pDummyClient->AddUserLog(logStr.c_str());
m_pDummyClient->Disconnect();
return;
}
m_pDummyClient->m_TCPSender.SendServerList();
m_pDummyClient->m_nUniqueID = pLogin->nSessionID;
}
void
DnDummyClientTCPReceiver::OnTRecvLoginServerList( char *pPacket )
{
FUNC_USER_LOG();
SCServerList *pServerList = (SCServerList*)pPacket;
if ( pServerList->cServerCount > 0 )
{
for ( int i = 0 ; i < WORLDCOUNTMAX ; i++ )
{
if ( g_SettingPropertyPanel->GetSettingPropertyData().szServerName == pServerList->ServerListData[i].wszServerName )
{
m_nSelectedServerIdx = pServerList->ServerListData[i].cServerIndex;
return m_pDummyClient->m_TCPSender.SendSelectedServer((BYTE)m_nSelectedServerIdx);
}
}
}
else
{
m_pDummyClient->GetProperty().nPlayState = PlayStateInfo::PS_ERROR;
m_pDummyClient->AddUserLog(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> "));
m_pDummyClient->Disconnect();
}
m_pDummyClient->GetProperty().nPlayState = PlayStateInfo::PS_ERROR;
m_pDummyClient->AddUserLog(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20>´<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<><C3A3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> "));
m_pDummyClient->Disconnect();
}
void
DnDummyClientTCPReceiver::OnTRecvLoginChannelList( char *pPacket )
{
FUNC_USER_LOG();
SCChannelList *pData = (SCChannelList*)pPacket;
int nChannelIdx = g_SettingPropertyPanel->GetSettingPropertyData().nChannelIndex;
m_pDummyClient->m_TCPSender.SendSelectedChannel(nChannelIdx, false);
m_pDummyClient->AddUserLog( _T("ä<EFBFBD>ο<EFBFBD> <20><><EFBFBD><EFBFBD>: [%d]<5D><> ä<><C3A4>"), nChannelIdx);
//m_pDummyClient->m_TCPSender.SendSelectedChannel(rand()%pData->cCount);
}
static int s_Equip[] = { 295001, 296003, 0, 291003, 292003, 293001, 294003, 0, 0, 0, 0, 0, 0, 0, 0 };
static DWORD s_Hair = 235087017;
static BYTE s_Class = 1;
void
DnDummyClientTCPReceiver::OnTRecvLoginCharList( char *pPacket )
{
FUNC_USER_LOG();
SCCharList *pCharList = (SCCharList*)pPacket;
if (pCharList->nRet != ERROR_NONE)
{
m_pDummyClient->GetProperty().nPlayState = PlayStateInfo::PS_ERROR;
m_pDummyClient->AddUserLog(_T("ij<EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>"));
m_pDummyClient->Disconnect();
return;
}
int nCharSlotCount = pCharList->cCharCount;
std::vector<int> IndexList;
for ( int i = 0 ; i < nCharSlotCount ; i++ )
{
IndexList.push_back((int)pCharList->CharListData[i].cCharIndex);
}
if ( IndexList.size() < 1 )
{
m_pDummyClient->GetProperty().nPlayState = PlayStateInfo::PS_ERROR;
m_pDummyClient->AddUserLog(_T("ij<EFBFBD><EFBFBD><EFBFBD>;<EFBFBD><EFBFBD><EFBFBD>"));
m_pDummyClient->Disconnect();
/*WCHAR wszCharName[NAMELENMAX];
std::vector<std::wstring> tokens;
TokenizeW(m_pDummyClient->GetProperty().szUserID, tokens, std::wstring(L"_") );
_swprintf(wszCharName, L"%s%d", tokens[0].c_str(), s_Class);
m_pDummyClient->m_TCPSender.SendCreateChar(s_Equip, wszCharName, s_Hair, s_Class);
m_pDummyClient->GetProperty().nPlayState = PlayStateInfo::PS_CREATECHAR;*/
return;
}
//int nSelected = IndexList[rand()%IndexList.size()];
int nSelected = IndexList[ 0 ];
m_pDummyClient->GetProperty().cClass = pCharList->CharListData[nSelected].cJob;
m_pDummyClient->AddUserLog(_T("%d"), nSelected);
switch(m_pDummyClient->GetProperty().cClass)
{
case CLASS_WARRIER:
m_pDummyClient->GetProperty().szCharacter = _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
case CLASS_ARCHER:
m_pDummyClient->GetProperty().szCharacter = _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
case CLASS_SOCERESS:
m_pDummyClient->GetProperty().szCharacter = _T("<EFBFBD>Ҽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
case CLASS_CLERIC:
m_pDummyClient->GetProperty().szCharacter = _T("Ŭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
}
m_pDummyClient->m_TCPSender.SendSelectChar((BYTE)nSelected);
}
void
DnDummyClientTCPReceiver::OnTRecvLoginCharCreate( char *pData )
{
FUNC_USER_LOG();
SCCreateChar * pPacket = (SCCreateChar*)pData;
if (pPacket->nRet == ERROR_NONE)
m_pDummyClient->m_TCPSender.SendSelectedServer((BYTE)m_nSelectedServerIdx);
else
{
m_pDummyClient->GetProperty().nPlayState = PlayStateInfo::PS_ERROR;
m_pDummyClient->Disconnect();
}
}
void
DnDummyClientTCPReceiver::OnTRecvLoginCharDelete( char *pPacket )
{
FUNC_USER_LOG();
}
void
DnDummyClientTCPReceiver::OnTRecvLoginEnterVillage( char *pPacket )
{
FUNC_USER_LOG();
m_pDummyClient->GetProperty().nPlayState = PlayStateInfo::PS_VILLAGE_LOGIN;
m_pDummyClient->AddUserLog(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>õ<EFBFBD>"));
m_pDummyClient->m_TCPSender.SendVillageReady(true);
}
void
DnDummyClientTCPReceiver::OnTRecvVillageActorMsg( char *pPacket)
{
FUNC_USER_LOG();
}
void
DnDummyClientTCPReceiver::OnTRecvVillageMapInfo( char *pPacket)
{
FUNC_USER_LOG();
SCMapInfo *pStruct = (SCMapInfo*)pPacket;
int m_nVillageMapIndex = pStruct->nMapIndex;
int m_nVillageMapArrayIndex = pStruct->cMapArrayIndex;
int m_nVillageMapEnviIndex = pStruct->cEnviIndex;
int m_nVillageMapEnviArrayIndex = pStruct->cEnviArrayIndex;
m_pDummyClient->m_TCPSender.SendEnter();
}
void
DnDummyClientTCPReceiver::OnTRecvVillageEntered( char *pPacket )
{
FUNC_USER_LOG();
m_pDummyClient->GetProperty().nPlayState = PlayStateInfo::PS_COMPLETE_VLOGIN;
m_pDummyClient->AddUserLog(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD>"));
//if ( g_DummyClientMgr.GetMode() == DnDummyClientMgr::VillageMode )
{
m_pDummyClient->GetProperty().nPlayState = PlayStateInfo::PS_IDLE;
m_pDummyClient->AddUserLog(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̵<EFBFBD>"));
}
// <20><>Ƽ <20><><EFBFBD><EFBFBD>Ʈ <20><>û<EFBFBD><C3BB> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
//m_pDummyClient->m_TCPSender.SendReqPartyListInfo(m_pDummyClient->m_nReqPartyPage);
//m_pDummyClient->m_nPartyReqStartIndex = 0;
SCEnter * pEnter = (SCEnter*)pPacket;
m_pDummyClient->m_Property.m_vNewPos = pEnter->Position;
m_pDummyClient->m_TCPSender.SendCompleteLoad();
}
void
DnDummyClientTCPReceiver::OnTRecvVillageUserEntered( char *pPacket)
{
//FUNC_USER_LOG();
}
void
DnDummyClientTCPReceiver::OnTRecvPartyList( char *pPacket )
{
FUNC_USER_LOG();
/*!!!
SCPartyList *pData = (SCPartyList *)pPacket;
m_pDummyClient->GetProperty().nPlayState = PlayStateInfo::PS_THINKING_PARTY;
m_pDummyClient->AddUserLog(_T("<EFBFBD><EFBFBD>Ƽ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [<5B><><EFBFBD><EFBFBD> <20><>Ƽ : %d <20><>]"), pData->nPartyVecSize );
// <20><>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_pDummyClient->m_PartyList.clear();
m_pDummyClient->m_nPartyReqStartIndex = 0;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŭ <20><> <20><>Ƽ <20><><EFBFBD><EFBFBD>ü<EFBFBD><C3BC> <20>߰<EFBFBD><DFB0>Ѵ<EFBFBD> -_-++++++++++++++++++
for ( int i = 0 ; i < pData->nPartyVecSize ; i++ )
{
m_pDummyClient->m_PartyList.push_back(PartyListStruct());
}
m_pDummyClient->SetNextCmdTime();
*/
}
void
DnDummyClientTCPReceiver::OnTRecvPartyListInfoError( char *pData )
{
FUNC_USER_LOG();
m_pDummyClient->GetProperty().nPlayState = PlayStateInfo::PS_THINKING_PARTY;
m_pDummyClient->SetNextCmdTime();
}
void
DnDummyClientTCPReceiver::OnTRecvPartyListInfo( char *packet )
{
FUNC_USER_LOG();
SCPartyListInfo *pPacket = (SCPartyListInfo*)packet;
m_pDummyClient->m_mapPartyListInfo.clear();
if( pPacket->cCount > PARTYLISTOFFSET )
{
m_pDummyClient->GetProperty().nPlayState = PlayStateInfo::PS_ERROR;
m_pDummyClient->AddUserLog(_T("pPacket->cCount >= PARTYLISTOFFSET"));
m_pDummyClient->Disconnect();
return;
}
for( int i=0; i<pPacket->cCount; i++ )
{
PartyListStruct Struct;
Struct.nCurCount = pPacket->PartyListInfo[i].cCurrentCount;
Struct.nMaxCount = pPacket->PartyListInfo[i].cMaxCount;
Struct.nPartyIndex = pPacket->PartyListInfo[i].nPartyID;
Struct.nActLvLimit = 0;
Struct.nUserLvLimit = pPacket->PartyListInfo[i].cUserLvLimitMax;
Struct.bSecret = pPacket->PartyListInfo[i].cIsPrivateRoom == 1 ? true : false;
Struct.bEmpty = false;
Struct.szPartyName.assign( pPacket->PartyListInfo[i].wszBuf, pPacket->PartyListInfo[i].cPartyNameLen );
int nPartyIndex = pPacket->PartyListInfo[i].nPartyID;
m_pDummyClient->m_mapPartyListInfo.insert( std::make_pair( nPartyIndex, Struct ));
}
m_pDummyClient->m_nPartyListCount = pPacket->nWholeCount;
#ifdef _TEST_CODE_KAL
#else
int nPartyIdx = m_pDummyClient->GetPossibleJoinPartyIndex();
if ( nPartyIdx > -1 )
{
m_pDummyClient->GetProperty().nPlayState = PlayStateInfo::PS_JOIN_REQ_PARTY;
m_pDummyClient->AddUserLog(_T("<EFBFBD><EFBFBD>Ƽ <20><><EFBFBD><EFBFBD> <20><>û : %d "), nPartyIdx );
m_pDummyClient->m_TCPSender.SendJoinParty(nPartyIdx);
return;
}
#endif
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ƽ<EFBFBD><C6BC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٽ<EFBFBD> <20><>û <20>ϰų<CFB0> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><D8BA><EFBFBD>.
if ( rand () % 2 )
{
m_pDummyClient->AddUserLog(_T("<EFBFBD><EFBFBD>Ƽ <20><><EFBFBD><EFBFBD> <20><>û"));
m_pDummyClient->m_TCPSender.SendCreateParty();
m_pDummyClient->SetNextCmdTime();
m_pDummyClient->GetProperty().nPlayState = PlayStateInfo::PS_CREATE_REQ_PARTY;
return;
}
else
{
m_pDummyClient->AddUserLog(_T("<EFBFBD><EFBFBD>Ƽ <20><><EFBFBD><EFBFBD> <20>ٽ<EFBFBD> <20><>û<EFBFBD><C3BB> <20><><EFBFBD><EFBFBD>"));
// <20>ƴϸ<C6B4> <20><>Ƽ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٽ<EFBFBD> <20><>û<EFBFBD>ϰ<EFBFBD> <20><><EFBFBD>ٸ<EFBFBD><D9B8><EFBFBD>.
if (pPacket->nWholeCount > PARTYLISTOFFSET && m_pDummyClient->m_nReqPartyPage == 0)
m_pDummyClient->m_nReqPartyPage = m_pDummyClient->m_nReqPartyPage+1;
else
m_pDummyClient->m_nReqPartyPage = 0;
m_pDummyClient->m_TCPSender.SendReqPartyListInfo(m_pDummyClient->m_nReqPartyPage);
//m_pDummyClient->m_nPartyReqStartIndex = 0;
m_pDummyClient->SetNextCmdTime();
m_pDummyClient->GetProperty().nPlayState = PlayStateInfo::PS_PARTYLIST_REQ;
}
}
void
DnDummyClientTCPReceiver::OnTRecvPartyCreateParty( char *pPacket )
{
FUNC_USER_LOG();
// m_pDummyClient->m_PartyList.clear();
SCCreateParty *pData = (SCCreateParty*)pPacket;
if( pData->nRetCode != 0 )
{
m_pDummyClient->GetProperty().nPlayState = PlayStateInfo::PS_THINKING_PARTY;
m_pDummyClient->AddUserLog(_T("<EFBFBD><EFBFBD>Ƽ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : %d "), pData->nPartyID );
m_pDummyClient->SetNextCmdTime();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ƽ<EFBFBD><C6BC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٽ<EFBFBD> <20><>û <20>ϰų<CFB0> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><D8BA><EFBFBD>.
if ( rand () % 10 == 2 )
{
m_pDummyClient->AddUserLog(_T("<EFBFBD><EFBFBD>Ƽ <20><><EFBFBD><EFBFBD> <20>ٽ<EFBFBD> <20><>û<EFBFBD><C3BB> <20><><EFBFBD><EFBFBD>"));
// <20>ƴϸ<C6B4> <20><>Ƽ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٽ<EFBFBD> <20><>û<EFBFBD>ϰ<EFBFBD> <20><><EFBFBD>ٸ<EFBFBD><D9B8><EFBFBD>.
//m_pDummyClient->m_nReqPartyPage = m_pDummyClient->m_nReqPartyPage+1;
m_pDummyClient->m_TCPSender.SendReqPartyListInfo(m_pDummyClient->m_nReqPartyPage);
//m_pDummyClient->m_nPartyReqStartIndex = 0;
m_pDummyClient->GetProperty().nPlayState = PlayStateInfo::PS_PARTYLIST_REQ;
}
else
{
m_pDummyClient->GetProperty().nPlayState = PlayStateInfo::PS_THINKING_PARTY;
}
return;
}
m_pDummyClient->m_nPartyIndex = pData->nPartyID;
m_pDummyClient->GetProperty().nPlayState = PlayStateInfo::PS_COMPLETE_CREATE_PARTY;
m_pDummyClient->AddUserLog(_T("<EFBFBD><EFBFBD>Ƽ <20><><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD> : %d "), pData->nPartyID );
m_pDummyClient->m_bPartyLeader = true;
m_pDummyClient->SetNextCmdTime();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ǹ<EFBFBD> <20>ٷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>
m_pDummyClient->_UpdateCompleteCreateParty();
}
void
DnDummyClientTCPReceiver::OnTRecvPartyJoinParty( char *pPacket )
{
FUNC_USER_LOG();
SCJoinParty *pData = (SCJoinParty*)pPacket;
if( pData->nRetCode != 0 )
{
m_pDummyClient->AddUserLog(_T("<EFBFBD><EFBFBD>Ƽ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : %d "), pData->nPartyID );
m_pDummyClient->SetNextCmdTime();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ƽ<EFBFBD><C6BC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٽ<EFBFBD> <20><>û <20>ϰų<CFB0> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><D8BA><EFBFBD>.
if ( rand () % 10 == 2 )
{
m_pDummyClient->AddUserLog(_T("<EFBFBD><EFBFBD>Ƽ <20><><EFBFBD><EFBFBD> <20>ٽ<EFBFBD> <20><>û<EFBFBD><C3BB> <20><><EFBFBD><EFBFBD>"));
// <20>ƴϸ<C6B4> <20><>Ƽ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٽ<EFBFBD> <20><>û<EFBFBD>ϰ<EFBFBD> <20><><EFBFBD>ٸ<EFBFBD><D9B8><EFBFBD>.
//m_pDummyClient->m_nReqPartyPage = m_pDummyClient->m_nReqPartyPage+1;
m_pDummyClient->m_TCPSender.SendReqPartyListInfo(m_pDummyClient->m_nReqPartyPage);
//m_pDummyClient->m_nPartyReqStartIndex = 0;
m_pDummyClient->GetProperty().nPlayState = PlayStateInfo::PS_PARTYLIST_REQ;
}
else
{
m_pDummyClient->GetProperty().nPlayState = PlayStateInfo::PS_THINKING_PARTY;
}
return;
}
m_pDummyClient->m_nPartyIndex = pData->nPartyID;
m_pDummyClient->GetProperty().nPlayState = PlayStateInfo::PS_COMPLETE_PARTY_JOIN;
m_pDummyClient->AddUserLog(_T("<EFBFBD><EFBFBD>Ƽ <20><><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD> : %d "), pData->nPartyID );
}
void
DnDummyClientTCPReceiver::OnTRecvPartyRefresh( char *pPacket )
{
FUNC_USER_LOG();
SCRefreshParty *pData = (SCRefreshParty*)pPacket;
CopyMemory( &(m_pDummyClient->m_PartyMember[0]), &(pData->Member[0]), sizeof(SPartyMemberInfo)*PARTYMAX);
}
void
DnDummyClientTCPReceiver::OnTRecvPartyRefreshGateInfo( char *pPacket )
{
FUNC_USER_LOG();
}
void
DnDummyClientTCPReceiver::OnTRecvPartyReadyGate( char *pPacket )
{
FUNC_USER_LOG();
}
void
DnDummyClientTCPReceiver::OnTRecvPartyStageStart( char *pPacket )
{
FUNC_USER_LOG();
SCStartStage *pData = (SCStartStage *)pPacket;
m_pDummyClient->m_UDPSender.SendGameSyncWait(m_pDummyClient->m_nUniqueID);
m_pDummyClient->GetProperty().nPlayState = PlayStateInfo::PS_START_STAGE;
}
void
DnDummyClientTCPReceiver::OnTRecvPartyStageCancel( char *pPacket )
{
SCCancelStage *pData = (SCCancelStage *)pPacket;
m_pDummyClient->GetProperty().nPlayState = PlayStateInfo::PS_ERROR;
m_pDummyClient->Disconnect();
FUNC_USER_LOG();
}
void
DnDummyClientTCPReceiver::OnRecvPartyEquipData(char * pData )
{
FUNC_USER_LOG();
}
//----------------------------------------------------------------------------------------
void
DnDummyClientUDPReceiver::OnPacket(int header, int sub_header, char * data, int size, _ADDR * addr)
{
int a = 0;
/*
switch( header )
{
case DNPACKET_SERVER_SYNC_WAIT_SERVER: OnURecvPartySyncWait( data );break;
case DNPACKET_SERVER_SYNC_START_SERVER: OnURecvPartySyncStart( data ); break;
case DNPACKET_SERVER_ACTOR_MSG_SERVER : OnURecvGameActorMsg(data); break;
}
*/
}
void
DnDummyClientTCPReceiver::OnURecvPartySyncWait( char *pPacket )
{
FUNC_USER_LOG();
/*
DNPACKET_DATA_SYNC_WAIT_SERVER * packet = (DNPACKET_DATA_SYNC_WAIT_SERVER * ) pPacket;
m_pDummyClient->AddUserLog(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
m_pDummyClient->GetProperty().nPlayState = PlayStateInfo::PS_WAIT_GAME_START;
*/
}
void
DnDummyClientTCPReceiver::OnURecvPartySyncStart( char *pPacket )
{
FUNC_USER_LOG();
/*
m_pDummyClient->AddUserLog(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>!!! "));
m_pDummyClient->GetProperty().nPlayState = PlayStateInfo::PS_GAME_PLAY;
m_pDummyClient->GetProperty().m_vPos = m_pDummyClient->GetNewPos();
*/
}
struct SHitParam
{
std::string szActionName;
//DnWeaponHandle hWeapon;
int nDamage;
int HitType;
EtVector3 vPosition;
EtVector3 vVelocity;
EtVector3 vResistance;
EtVector3 vViewVec;
float fStiffDelta;
float fDownDelta;
int nBoneIndex;
bool bFirstHit;
SHitParam()
: vVelocity( 0.f, 0.f, 0.f )
, vResistance( 0.f, 0.f, 0.f )
, vPosition( 0.f, 0.f, 0.f )
, vViewVec( 0.f, 0.f, 0.f )
{
nDamage = 0;
HitType = 0;
fStiffDelta = 0.f;
fDownDelta = 0.f;
nBoneIndex = -1;
bFirstHit = false;
}
};
void
DnDummyClientTCPReceiver::OnURecvGameActorMsg( char *pPacket )
{
/*
DNPACKET_DATA_ACTOR_MSG_SERVER * packet = (DNPACKET_DATA_ACTOR_MSG_SERVER *)pPacket;
DWORD dwProtocol = packet->act;
if ( packet->uid == m_pDummyClient->m_nUniqueID )
{
}
switch( dwProtocol )
{
case APT_CMDMOVE:
{
CPacketCompressStream Stream( packet->buf, 128 );
int nActionIndex, nLoopCount;
EtVector3 vPos, vXVec, vTargetPos;
EtVector2 vZVec, vLook;
Stream.Read( &nActionIndex, sizeof(int), CPacketCompressStream::INTEGER_CHAR );
Stream.Read( &vPos, sizeof(EtVector3), CPacketCompressStream::VECTOR3_BIT );
Stream.Read( &vTargetPos, sizeof(EtVector3), CPacketCompressStream::VECTOR3_BIT );
Stream.Read( &vZVec, sizeof(EtVector2), CPacketCompressStream::VECTOR2_SHORT );
Stream.Read( &vLook, sizeof(EtVector2), CPacketCompressStream::VECTOR2_SHORT );
Stream.Read( &nLoopCount, sizeof(int), CPacketCompressStream::INTEGER_CHAR );
}
break;
case APT_CMDACTION:
{
CPacketCompressStream Stream( packet->buf, 128 );
int nActionIndex, nLoopCount;
float fBlendFrame;
EtVector3 vPos;
EtVector2 vLook;
Stream.Read( &nActionIndex, sizeof(int), CPacketCompressStream::INTEGER_CHAR );
Stream.Read( &nLoopCount, sizeof(int), CPacketCompressStream::INTEGER_CHAR );
Stream.Read( &fBlendFrame, sizeof(float), CPacketCompressStream::FLOAT_SHORT, 10.f );
Stream.Read( &vLook, sizeof(EtVector2), CPacketCompressStream::VECTOR2_SHORT );
Stream.Read( &vPos, sizeof(EtVector3), CPacketCompressStream::VECTOR3_BIT );
}
break;
case APT_CMDMOVETARGET:
{
CPacketCompressStream Stream( packet->buf, 128 );
int nActionIndex, nLoopCount;
EtVector3 vXVec, vPos;
EtVector2 vZVec, vLook;
DWORD dwUniqueID;
float fMinDistance;
Stream.Read( &nActionIndex, sizeof(int), CPacketCompressStream::INTEGER_CHAR );
Stream.Read( &dwUniqueID, sizeof(DWORD) );
Stream.Read( &fMinDistance, sizeof(float), CPacketCompressStream::FLOAT_SHORT, 1.f );
Stream.Read( &vZVec, sizeof(EtVector2), CPacketCompressStream::VECTOR2_SHORT );
Stream.Read( &vLook, sizeof(EtVector2), CPacketCompressStream::VECTOR2_SHORT );
Stream.Read( &vPos, sizeof(EtVector3), CPacketCompressStream::VECTOR3_BIT );
Stream.Read( &nLoopCount, sizeof(int), CPacketCompressStream::INTEGER_CHAR );
}
break;
case APT_ONDAMAGE:
{
CPacketCompressStream Stream( packet->buf, 128 );
int nSeed;
DWORD dwUniqueID, dwWeaponUniqueID = -1;
int nActionIndex;
bool bSendWeaponSerialID;
INT64 nWeaponSerialID = -1;
SHitParam HitParam;
EtVector3 vPos;
Stream.Read( &nSeed, sizeof(int) );
Stream.Read( &dwUniqueID, sizeof(DWORD) );
Stream.Read( &bSendWeaponSerialID, sizeof(bool) );
if( bSendWeaponSerialID ) Stream.Read( &nWeaponSerialID, sizeof(INT64) );
else Stream.Read( &dwWeaponUniqueID, sizeof(DWORD) );
Stream.Read( &nActionIndex, sizeof(int), CPacketCompressStream::INTEGER_CHAR );
Stream.Read( &HitParam.nDamage, sizeof(int), CPacketCompressStream::INTEGER_SHORT );
Stream.Read( &HitParam.HitType, sizeof(int), CPacketCompressStream::INTEGER_CHAR );
Stream.Read( &vPos, sizeof(EtVector3), CPacketCompressStream::VECTOR3_BIT );
Stream.Read( &HitParam.vVelocity, sizeof(EtVector3), CPacketCompressStream::VECTOR3_SHORT, 10.f );
Stream.Read( &HitParam.vResistance, sizeof(EtVector3), CPacketCompressStream::VECTOR3_SHORT, 10.f );
Stream.Read( &HitParam.vPosition, sizeof(EtVector3), CPacketCompressStream::VECTOR3_BIT );
Stream.Read( &HitParam.vViewVec, sizeof(EtVector3), CPacketCompressStream::VECTOR3_SHORT, 10.f );
Stream.Read( &HitParam.bFirstHit, sizeof(bool) );
Stream.Read( &HitParam.nBoneIndex, sizeof(int), CPacketCompressStream::INTEGER_SHORT );
m_pDummyClient->AddUserLog(_T("m_pDummyClient->m_nUniqueID : %d , dwUniqueID : %d packet->uid : %d"), m_pDummyClient->m_nUniqueID , dwUniqueID, packet->uid );
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ȴ<EFBFBD>.
if ( m_pDummyClient->m_nUniqueID == dwUniqueID )
{
m_pDummyClient->GetProperty().nHitCnt++;
}
// <20><><EFBFBD><EFBFBD> <20>¾Ҵ<C2BE>.
if ( m_pDummyClient->m_nUniqueID == packet->uid )
{
m_pDummyClient->GetProperty().nDamageCnt++;
}
}
}
*/
}
void DnDummyClientTCPReceiver::OnTRecvActorBundleMessage(int iMainCmd, int iSubCmd, char *pData, int nSize)
{
SCActorBundleMessage *pPacket = (SCActorBundleMessage *)pData;
BYTE cSubCmd;
WORD nCurSize;
int nOffset = 0;
SCActorMessage Packet;
ZeroMemory(&Packet, sizeof(SCActorMessage));
for( int i=0; i<iSubCmd; i++ ) {
memcpy( &Packet.nSessionID, pPacket->cBuf + nOffset, sizeof(DWORD) ); nOffset += sizeof(DWORD);
memcpy( &cSubCmd, pPacket->cBuf + nOffset, sizeof(BYTE) ); nOffset += sizeof(BYTE);
memcpy( &nCurSize, pPacket->cBuf + nOffset, sizeof(WORD) ); nOffset += sizeof(WORD);
memcpy( Packet.cBuf, pPacket->cBuf + nOffset, nCurSize ); nOffset += nCurSize;
OnTRecvActorMsg( iMainCmd, cSubCmd, (char*)&Packet, nCurSize );
}
}
void
DnDummyClientTCPReceiver::OnTRecvActorMsg(int iMainCmd, int iSubCmd, char *pData, int nSize)
{
SCActorMessage *pPacket = (SCActorMessage *)pData;
switch(iSubCmd)
{
case eActor::SC_CMDMOVE:
{
CPacketCompressStream Stream( pPacket->cBuf, 128 );
int nActionIndex, nLoopCount;
EtVector3 vPos, vXVec, vTargetPos;
EtVector2 vZVec, vLook;
Stream.Read( &nActionIndex, sizeof(int), CPacketCompressStream::INTEGER_CHAR );
Stream.Read( &vPos, sizeof(EtVector3), CPacketCompressStream::VECTOR3_BIT );
Stream.Read( &vTargetPos, sizeof(EtVector3), CPacketCompressStream::VECTOR3_BIT );
Stream.Read( &vZVec, sizeof(EtVector2), CPacketCompressStream::VECTOR2_SHORT );
Stream.Read( &vLook, sizeof(EtVector2), CPacketCompressStream::VECTOR2_SHORT );
Stream.Read( &nLoopCount, sizeof(int), CPacketCompressStream::INTEGER_CHAR );
m_pDummyClient->Answer(pPacket->nSessionID, SC_ACTOR, eActor::SC_CMDMOVE, timeGetTime());
}
break;
case eActor::SC_CMDSTOP: break;
case eActor::SC_CMDACTION:
{
CPacketCompressStream Stream( pPacket->cBuf, 128 );
int nActionIndex, nLoopCount;
float fBlendFrame;
EtVector3 vPos;
EtVector2 vLook;
Stream.Read( &nActionIndex, sizeof(int), CPacketCompressStream::INTEGER_CHAR );
Stream.Read( &nLoopCount, sizeof(int), CPacketCompressStream::INTEGER_CHAR );
Stream.Read( &fBlendFrame, sizeof(float), CPacketCompressStream::FLOAT_SHORT, 10.f );
Stream.Read( &vLook, sizeof(EtVector2), CPacketCompressStream::VECTOR2_SHORT );
Stream.Read( &vPos, sizeof(EtVector3), CPacketCompressStream::VECTOR3_BIT );
}break;
case eActor::SC_CMDMIXEDACTION: break;
case eActor::SC_CMDMOVETARGET:
{
CPacketCompressStream Stream( pPacket->cBuf, 128 );
int nActionIndex, nLoopCount;
EtVector3 vXVec, vPos;
EtVector2 vZVec, vLook;
DWORD dwUniqueID;
float fMinDistance;
Stream.Read( &nActionIndex, sizeof(int), CPacketCompressStream::INTEGER_CHAR );
Stream.Read( &dwUniqueID, sizeof(DWORD) );
Stream.Read( &fMinDistance, sizeof(float), CPacketCompressStream::FLOAT_SHORT, 1.f );
Stream.Read( &vZVec, sizeof(EtVector2), CPacketCompressStream::VECTOR2_SHORT );
Stream.Read( &vLook, sizeof(EtVector2), CPacketCompressStream::VECTOR2_SHORT );
Stream.Read( &vPos, sizeof(EtVector3), CPacketCompressStream::VECTOR3_BIT );
Stream.Read( &nLoopCount, sizeof(int), CPacketCompressStream::INTEGER_CHAR );
}break;
case eActor::SC_CMDLOOKTARGET: break;
case eActor::SC_ONDAMAGE:
{
CPacketCompressStream Stream( pPacket->cBuf, 128 );
int nSeed;
DWORD dwUniqueID, dwWeaponUniqueID = -1;
int nActionIndex;
bool bSendWeaponSerialID;
INT64 nWeaponSerialID = -1;
SHitParam HitParam;
EtVector3 vPos;
Stream.Read( &nSeed, sizeof(int) );
Stream.Read( &dwUniqueID, sizeof(DWORD) );
Stream.Read( &bSendWeaponSerialID, sizeof(bool) );
if( bSendWeaponSerialID ) Stream.Read( &nWeaponSerialID, sizeof(INT64) );
else Stream.Read( &dwWeaponUniqueID, sizeof(DWORD) );
Stream.Read( &nActionIndex, sizeof(int), CPacketCompressStream::INTEGER_CHAR );
Stream.Read( &HitParam.nDamage, sizeof(int), CPacketCompressStream::INTEGER_SHORT );
Stream.Read( &HitParam.HitType, sizeof(int), CPacketCompressStream::INTEGER_CHAR );
Stream.Read( &vPos, sizeof(EtVector3), CPacketCompressStream::VECTOR3_BIT );
Stream.Read( &HitParam.vVelocity, sizeof(EtVector3), CPacketCompressStream::VECTOR3_SHORT, 10.f );
Stream.Read( &HitParam.vResistance, sizeof(EtVector3), CPacketCompressStream::VECTOR3_SHORT, 10.f );
Stream.Read( &HitParam.vPosition, sizeof(EtVector3), CPacketCompressStream::VECTOR3_BIT );
Stream.Read( &HitParam.vViewVec, sizeof(EtVector3), CPacketCompressStream::VECTOR3_SHORT, 10.f );
Stream.Read( &HitParam.bFirstHit, sizeof(bool) );
Stream.Read( &HitParam.nBoneIndex, sizeof(int), CPacketCompressStream::INTEGER_SHORT );
m_pDummyClient->AddUserLog(_T("m_pDummyClient->m_nUniqueID : %d , dwUniqueID : %d packet->uid : %d"), m_pDummyClient->m_nUniqueID , dwUniqueID, pPacket->nSessionID );
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ȴ<EFBFBD>.
if ( m_pDummyClient->m_nUniqueID == dwUniqueID )
{
m_pDummyClient->GetProperty().nHitCnt++;
}
// <20><><EFBFBD><EFBFBD> <20>¾Ҵ<C2BE>.
if ( m_pDummyClient->m_nUniqueID == pPacket->nSessionID )
{
m_pDummyClient->GetProperty().nDamageCnt++;
}
}break;
case eActor::SC_PROJECTILE: break;
case eActor::SC_CMDLOOK: break;
case eActor::SC_PLAYERPITCH: break;
case eActor::SC_CMDENTEREDGATE: break;
case eActor::SC_USESKILL: break;
case eActor::SC_AGGROTARGET: break;
case eActor::SC_VIEWSYNC: break;
case eActor::SC_CMDTOGGLEBATTLE: break;
case eActor::SC_CMDPASSIVESKILLACTION: break;
case eActor::SC_CMDADDSTATEEFFECT: break;
case eActor::SC_CMDREMOVESTATEEFFECT: break;
case eActor::SC_ADDEXP: break;
case eActor::SC_LEVELUP: break;
case eActor::SC_ADDCOIN: break;
//case eActor::SC_CHAIN: break;
case eActor::SC_PARTYCHAIN: break;
// case eActor::SC_REBIRTH: break;
// case eActor::SC_REBIRTH_COIN: break;
}
}