forked from metin2/client
Solution refactoring and restructuring, removed Boost dependency, removed unused tools
This commit is contained in:
291
src/UserInterface/PythonNetworkStreamPhaseSelect.cpp
Normal file
291
src/UserInterface/PythonNetworkStreamPhaseSelect.cpp
Normal file
@ -0,0 +1,291 @@
|
||||
#include "StdAfx.h"
|
||||
#include "PythonNetworkStream.h"
|
||||
#include "Packet.h"
|
||||
|
||||
extern DWORD g_adwEncryptKey[4];
|
||||
extern DWORD g_adwDecryptKey[4];
|
||||
|
||||
// Select Character ---------------------------------------------------------------------------
|
||||
void CPythonNetworkStream::SetSelectPhase()
|
||||
{
|
||||
if ("Select" != m_strPhase)
|
||||
m_phaseLeaveFunc.Run();
|
||||
|
||||
Tracen("");
|
||||
Tracen("## Network - Select Phase ##");
|
||||
Tracen("");
|
||||
|
||||
m_strPhase = "Select";
|
||||
|
||||
m_dwChangingPhaseTime = ELTimer_GetMSec();
|
||||
m_phaseProcessFunc.Set(this, &CPythonNetworkStream::SelectPhase);
|
||||
m_phaseLeaveFunc.Set(this, &CPythonNetworkStream::__LeaveSelectPhase);
|
||||
|
||||
if (__DirectEnterMode_IsSet())
|
||||
{
|
||||
PyCallClassMemberFunc(m_poHandler, "SetLoadingPhase", Py_BuildValue("()"));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (IsSelectedEmpire())
|
||||
PyCallClassMemberFunc(m_poHandler, "SetSelectCharacterPhase", Py_BuildValue("()"));
|
||||
else
|
||||
PyCallClassMemberFunc(m_poHandler, "SetSelectEmpirePhase", Py_BuildValue("()"));
|
||||
}
|
||||
}
|
||||
|
||||
void CPythonNetworkStream::SelectPhase()
|
||||
{
|
||||
TPacketHeader header;
|
||||
|
||||
if (!CheckPacket(&header))
|
||||
return;
|
||||
|
||||
switch (header)
|
||||
{
|
||||
case HEADER_GC_PHASE:
|
||||
if (RecvPhasePacket())
|
||||
return;
|
||||
break;
|
||||
|
||||
case HEADER_GC_EMPIRE:
|
||||
if (__RecvEmpirePacket())
|
||||
return;
|
||||
break;
|
||||
|
||||
case HEADER_GC_LOGIN_SUCCESS3:
|
||||
if (__RecvLoginSuccessPacket3())
|
||||
return;
|
||||
break;
|
||||
|
||||
case HEADER_GC_LOGIN_SUCCESS4:
|
||||
if (__RecvLoginSuccessPacket4())
|
||||
return;
|
||||
break;
|
||||
|
||||
|
||||
case HEADER_GC_PLAYER_CREATE_SUCCESS:
|
||||
if (__RecvPlayerCreateSuccessPacket())
|
||||
return;
|
||||
break;
|
||||
|
||||
case HEADER_GC_PLAYER_CREATE_FAILURE:
|
||||
if (__RecvPlayerCreateFailurePacket())
|
||||
return;
|
||||
break;
|
||||
|
||||
case HEADER_GC_PLAYER_DELETE_WRONG_SOCIAL_ID:
|
||||
if (__RecvPlayerDestroyFailurePacket())
|
||||
return;
|
||||
break;
|
||||
|
||||
case HEADER_GC_PLAYER_DELETE_SUCCESS:
|
||||
if (__RecvPlayerDestroySuccessPacket())
|
||||
return;
|
||||
break;
|
||||
|
||||
case HEADER_GC_CHANGE_NAME:
|
||||
if (__RecvChangeName())
|
||||
return;
|
||||
break;
|
||||
|
||||
case HEADER_GC_HANDSHAKE:
|
||||
RecvHandshakePacket();
|
||||
return;
|
||||
break;
|
||||
|
||||
case HEADER_GC_HANDSHAKE_OK:
|
||||
RecvHandshakeOKPacket();
|
||||
return;
|
||||
break;
|
||||
|
||||
case HEADER_GC_HYBRIDCRYPT_KEYS:
|
||||
RecvHybridCryptKeyPacket();
|
||||
return;
|
||||
break;
|
||||
|
||||
case HEADER_GC_HYBRIDCRYPT_SDB:
|
||||
RecvHybridCryptSDBPacket();
|
||||
return;
|
||||
break;
|
||||
|
||||
case HEADER_GC_PLAYER_POINT_CHANGE:
|
||||
TPacketGCPointChange PointChange;
|
||||
Recv(sizeof(TPacketGCPointChange), &PointChange);
|
||||
return;
|
||||
break;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
case HEADER_GC_PING:
|
||||
if (RecvPingPacket())
|
||||
return;
|
||||
break;
|
||||
}
|
||||
|
||||
RecvErrorPacket(header);
|
||||
}
|
||||
|
||||
bool CPythonNetworkStream::SendSelectEmpirePacket(DWORD dwEmpireID)
|
||||
{
|
||||
TPacketCGEmpire kPacketEmpire;
|
||||
kPacketEmpire.bHeader=HEADER_CG_EMPIRE;
|
||||
kPacketEmpire.bEmpire=dwEmpireID;
|
||||
|
||||
if (!Send(sizeof(kPacketEmpire), &kPacketEmpire))
|
||||
{
|
||||
Tracen("SendSelectEmpirePacket - Error");
|
||||
return false;
|
||||
}
|
||||
|
||||
SetEmpireID(dwEmpireID);
|
||||
return SendSequence();
|
||||
}
|
||||
|
||||
bool CPythonNetworkStream::SendSelectCharacterPacket(BYTE Index)
|
||||
{
|
||||
TPacketCGSelectCharacter SelectCharacterPacket;
|
||||
|
||||
SelectCharacterPacket.header = HEADER_CG_PLAYER_SELECT;
|
||||
SelectCharacterPacket.player_index = Index;
|
||||
|
||||
if (!Send(sizeof(TPacketCGSelectCharacter), &SelectCharacterPacket))
|
||||
{
|
||||
Tracen("SendSelectCharacterPacket - Error");
|
||||
return false;
|
||||
}
|
||||
|
||||
return SendSequence();
|
||||
}
|
||||
|
||||
bool CPythonNetworkStream::SendDestroyCharacterPacket(BYTE index, const char * szPrivateCode)
|
||||
{
|
||||
TPacketCGDestroyCharacter DestroyCharacterPacket;
|
||||
|
||||
DestroyCharacterPacket.header = HEADER_CG_PLAYER_DESTROY;
|
||||
DestroyCharacterPacket.index = index;
|
||||
strncpy(DestroyCharacterPacket.szPrivateCode, szPrivateCode, PRIVATE_CODE_LENGTH-1);
|
||||
|
||||
if (!Send(sizeof(TPacketCGDestroyCharacter), &DestroyCharacterPacket))
|
||||
{
|
||||
Tracen("SendDestroyCharacterPacket");
|
||||
return false;
|
||||
}
|
||||
|
||||
return SendSequence();
|
||||
}
|
||||
|
||||
bool CPythonNetworkStream::SendCreateCharacterPacket(BYTE index, const char *name, BYTE job, BYTE shape, BYTE byCON, BYTE byINT, BYTE bySTR, BYTE byDEX)
|
||||
{
|
||||
TPacketCGCreateCharacter createCharacterPacket;
|
||||
|
||||
createCharacterPacket.header = HEADER_CG_PLAYER_CREATE;
|
||||
createCharacterPacket.index = index;
|
||||
strncpy(createCharacterPacket.name, name, CHARACTER_NAME_MAX_LEN);
|
||||
createCharacterPacket.job = job;
|
||||
createCharacterPacket.shape = shape;
|
||||
createCharacterPacket.CON = byCON;
|
||||
createCharacterPacket.INT = byINT;
|
||||
createCharacterPacket.STR = bySTR;
|
||||
createCharacterPacket.DEX = byDEX;
|
||||
|
||||
if (!Send(sizeof(TPacketCGCreateCharacter), &createCharacterPacket))
|
||||
{
|
||||
Tracen("Failed to SendCreateCharacterPacket");
|
||||
return false;
|
||||
}
|
||||
|
||||
return SendSequence();
|
||||
}
|
||||
|
||||
bool CPythonNetworkStream::SendChangeNamePacket(BYTE index, const char *name)
|
||||
{
|
||||
TPacketCGChangeName ChangeNamePacket;
|
||||
ChangeNamePacket.header = HEADER_CG_CHANGE_NAME;
|
||||
ChangeNamePacket.index = index;
|
||||
strncpy(ChangeNamePacket.name, name, CHARACTER_NAME_MAX_LEN);
|
||||
|
||||
if (!Send(sizeof(TPacketCGChangeName), &ChangeNamePacket))
|
||||
{
|
||||
Tracen("Failed to SendChangeNamePacket");
|
||||
return false;
|
||||
}
|
||||
|
||||
return SendSequence();
|
||||
}
|
||||
|
||||
bool CPythonNetworkStream::__RecvPlayerCreateSuccessPacket()
|
||||
{
|
||||
TPacketGCPlayerCreateSuccess kCreateSuccessPacket;
|
||||
|
||||
if (!Recv(sizeof(kCreateSuccessPacket), &kCreateSuccessPacket))
|
||||
return false;
|
||||
|
||||
if (kCreateSuccessPacket.bAccountCharacterSlot>=PLAYER_PER_ACCOUNT4)
|
||||
{
|
||||
TraceError("CPythonNetworkStream::RecvPlayerCreateSuccessPacket - OUT OF RANGE SLOT(%d) > PLATER_PER_ACCOUNT(%d)",
|
||||
kCreateSuccessPacket.bAccountCharacterSlot, PLAYER_PER_ACCOUNT4);
|
||||
return true;
|
||||
}
|
||||
|
||||
m_akSimplePlayerInfo[kCreateSuccessPacket.bAccountCharacterSlot]=kCreateSuccessPacket.kSimplePlayerInfomation;
|
||||
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_CREATE], "OnCreateSuccess", Py_BuildValue("()"));
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CPythonNetworkStream::__RecvPlayerCreateFailurePacket()
|
||||
{
|
||||
TPacketGCCreateFailure packet;
|
||||
|
||||
if (!Recv(sizeof(TPacketGCCreateFailure), &packet))
|
||||
return false;
|
||||
|
||||
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_CREATE], "OnCreateFailure", Py_BuildValue("(i)", packet.bType));
|
||||
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_SELECT], "OnCreateFailure", Py_BuildValue("(i)", packet.bType));
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CPythonNetworkStream::__RecvPlayerDestroySuccessPacket()
|
||||
{
|
||||
TPacketGCDestroyCharacterSuccess packet;
|
||||
if (!Recv(sizeof(TPacketGCDestroyCharacterSuccess), &packet))
|
||||
return false;
|
||||
|
||||
memset(&m_akSimplePlayerInfo[packet.account_index], 0, sizeof(m_akSimplePlayerInfo[packet.account_index]));
|
||||
m_adwGuildID[packet.account_index] = 0;
|
||||
m_astrGuildName[packet.account_index] = "";
|
||||
|
||||
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_SELECT], "OnDeleteSuccess", Py_BuildValue("(i)", packet.account_index));
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CPythonNetworkStream::__RecvPlayerDestroyFailurePacket()
|
||||
{
|
||||
TPacketGCBlank packet_blank;
|
||||
if (!Recv(sizeof(TPacketGCBlank), &packet_blank))
|
||||
return false;
|
||||
|
||||
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_SELECT], "OnDeleteFailure", Py_BuildValue("()"));
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CPythonNetworkStream::__RecvChangeName()
|
||||
{
|
||||
TPacketGCChangeName ChangeNamePacket;
|
||||
if (!Recv(sizeof(TPacketGCChangeName), &ChangeNamePacket))
|
||||
return false;
|
||||
|
||||
for (int i = 0; i < PLAYER_PER_ACCOUNT4; ++i)
|
||||
{
|
||||
if (ChangeNamePacket.pid == m_akSimplePlayerInfo[i].dwID)
|
||||
{
|
||||
m_akSimplePlayerInfo[i].bChangeName = FALSE;
|
||||
strncpy(m_akSimplePlayerInfo[i].szName, ChangeNamePacket.name, CHARACTER_NAME_MAX_LEN);
|
||||
|
||||
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_SELECT], "OnChangeName", Py_BuildValue("(is)", i, ChangeNamePacket.name));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_SELECT], "OnCreateFailure", Py_BuildValue("(i)", 100));
|
||||
return true;
|
||||
}
|
Reference in New Issue
Block a user