1146 lines
33 KiB
C++
1146 lines
33 KiB
C++
#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("<22><><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("<22><>Ƽ <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("<22><><EFBFBD><EFBFBD>ȭ<EFBFBD><C8AD><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("<22><><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;
|
||
}
|
||
}
|