Files
Client/GameTools/GLOBALSCRIPT/Network/ClientSocket/ClientSocket.cpp
LGram16 dd97ddec92 Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code:
- Client: Game client source (moved to Client/Client/)
- Server: Game server source
- GameTools: Development tools
- CryptoSource: Encryption utilities
- database: Database scripts
- Script: Game scripts
- rylCoder_16.02.2008_src: Legacy coder tools
- GMFont, Game: Additional resources

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 20:17:20 +09:00

4904 lines
129 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
///////////////////////////////////////////////////////////////////////////////////////////////
//
// ClientSocket Class
//
///////////////////////////////////////////////////////////////////////////////////////////////
#include "ClientSocket.h"
#include <mmsystem.h>
#include <Network/Packet/PacketCommand.h>
#include <Network/Packet/PacketStruct/ServerPacket.h>
#include <Network/Packet/PacketStruct/PartyPacket.h>
#include <Network/Packet/PacketStruct/CharMovePacket.h>
#include <Network/Packet/PacketStruct/CharLoginOutPacket.h>
#include <Network/Packet/PacketStruct/CharAdminPacket.h>
#include <Network/Packet/PacketStruct/ClientToAuthServer.h>
#include <Network/Packet/PacketStruct/ClientToLoginServer.h>
#define SAFE_DELETE(p) { if (p) { delete (p); (p) = NULL; } }
ClientSocket::ClientSocket(HWND hWnd_In) :
m_hMainWnd(hWnd_In), m_UpdateCount(0), m_ConnectServer(0)
{
m_ClientList = new UDPList();
m_ClientList->SetGarbageStackLength(100);
m_PartyList = new UDPList();
m_PartyList->SetGarbageStackLength(10);
m_InstanceClientList = new UDPList();
m_InstanceClientList->SetGarbageStackLength(40);
memset(&m_PubUDPAddress, 0, sizeof(SOCKADDR_IN));
memset(&m_PriUDPAddress, 0, sizeof(SOCKADDR_IN));
memset(&m_GSSUDPAddress, 0, sizeof(SOCKADDR_IN));
m_RegAddress.S_un.S_addr = 0;
}
ClientSocket::~ClientSocket(void)
{
Disconnect();
SAFE_DELETE(m_InstanceClientList);
SAFE_DELETE(m_ClientList);
SAFE_DELETE(m_PartyList);
}
DWORD ClientSocket::InsertIntoAddressList(unsigned short List_In, DWORD CharID_In, SOCKADDR_IN PubAddress_In, SOCKADDR_IN PriAddress_In)
{
if(List_In == ListType_Client)
return m_ClientList->InsertIntoAddressList(CharID_In, PubAddress_In, PriAddress_In, GetPeerType(PubAddress_In, PriAddress_In));
else if(List_In == ListType_Party)
return m_PartyList->InsertIntoAddressList(CharID_In, PubAddress_In, PriAddress_In, GetPeerType(PubAddress_In, PriAddress_In));
return 0;
}
bool ClientSocket::DeleteFromAddressList(unsigned short List_In, DWORD CharID_In)
{
if(List_In == ListType_Client)
return m_ClientList->DeleteFromAddressList(CharID_In);
else if(List_In == ListType_Party)
return m_PartyList->DeleteFromAddressList(CharID_In);
return false;
}
bool ClientSocket::DeleteFromAddressList(unsigned short List_In, SOCKADDR_IN Address_In)
{
if(List_In == ListType_Client)
return m_ClientList->DeleteFromAddressList(Address_In);
else if(List_In == ListType_Party)
return m_PartyList->DeleteFromAddressList(Address_In);
return false;
}
bool ClientSocket::IsExistToList(unsigned short List_In, DWORD CharID_In)
{
if(List_In == ListType_Client)
{
if(NULL != m_ClientList->SearchFromAddressList(CharID_In))
return true;
}
else if(List_In == ListType_Party)
{
if(NULL != m_PartyList->SearchFromAddressList(CharID_In))
return true;
}
return false;
}
DWORD ClientSocket::GetListCount(unsigned short List_In)
{
if(List_In == ListType_Client)
{
return m_ClientList->GetListCount();
}
else if(List_In == ListType_Party)
{
return m_PartyList->GetListCount();
}
return 0;
}
bool ClientSocket::RegistInstanceUDPList(DWORD CharID_In)
{
LPUDP_LIST lpUDPList = m_ClientList->SearchFromAddressList(CharID_In);
if(!lpUDPList) lpUDPList = m_PartyList->SearchFromAddressList(CharID_In);
if(lpUDPList)
{
UDP_LIST *pAddNode=new UDP_LIST;
memset(pAddNode,0,sizeof(UDP_LIST));
pAddNode->CharID=lpUDPList->CharID;
pAddNode->PeerType=lpUDPList->PeerType;
pAddNode->PublicAddress=lpUDPList->PublicAddress;
pAddNode->PrivateAddress=lpUDPList->PrivateAddress;
m_InstanceClientList->InsertToList(pAddNode);
return true;
} else
return false;
}
void ClientSocket::DeleteInstanceUDPList()
{
m_InstanceClientList->DeleteAllFromList();
}
bool ClientSocket::IsRealIP(void)
{
if(m_PubUDPAddress.sin_addr.S_un.S_addr == m_PriUDPAddress.sin_addr.S_un.S_addr)
return true;
return false;
}
PEERTYPE ClientSocket::GetPeerType(SOCKADDR_IN PubAddress_In, SOCKADDR_IN PriAddress_In)
{
if(PubAddress_In.sin_addr.S_un.S_addr == PriAddress_In.sin_addr.S_un.S_addr)
return REAL_IP;
else
{
if(!IsRealIP() && PubAddress_In.sin_addr.S_un.S_addr == m_PubUDPAddress.sin_addr.S_un.S_addr)
return NAT_Friendly;
else
return NAT_Different;
}
return Not_Defined;
}
bool ClientSocket::UDPSendList(WSABUF &SendBuf_In, UDPList* lpList_In)
{
int send_byte = 0;
LPUDP_LIST lpDelete = NULL;
LPUDP_LIST lpList = lpList_In->m_pListHead;
if(lpList == NULL)
return false;
while(lpList)
{
if(!IsRealIP() && lpList->PeerType == NAT_Friendly)
{
// <20><><EFBFBD><20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> NAT
if(!SendTo(m_UDPSocket, lpList->PrivateAddress, SendBuf_In))
{
lpDelete = lpList;
lpList = lpList->pNext;
lpList_In->DeleteFromList(lpDelete);
continue;
}
}
else
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD> NAT<41><54> <20><><EFBFBD><EFBFBD>
if(!SendTo(m_UDPSocket, lpList->PublicAddress, SendBuf_In))
{
lpDelete = lpList;
lpList = lpList->pNext;
lpList_In->DeleteFromList(lpDelete);
continue;
}
}
lpList = lpList->pNext;
}
return true;
}
bool ClientSocket::UDPSendList(WSABUF &SendBuf_In, UDPList* lpList_In, DWORD CharID_In)
{
int send_byte = 0;
LPUDP_LIST lpList = lpList_In->SearchFromAddressList(CharID_In);
if(lpList == NULL)
return false;
if(lpList->PeerType == NAT_Friendly)
{
// <20><><EFBFBD><20><><EFBFBD><EFBFBD> NAT
if(!SendTo(m_UDPSocket, lpList->PrivateAddress, SendBuf_In))
{
lpList_In->DeleteFromList(lpList);
return false;
}
}
else
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̰ų<CCB0> <20><><EFBFBD><20><><EFBFBD><EFBFBD>/<2F>ٸ<EFBFBD> NAT<41><54> <20><><EFBFBD><EFBFBD>
if(!SendTo(m_UDPSocket, lpList->PublicAddress, SendBuf_In))
{
lpList_In->DeleteFromList(lpList);
return false;
}
}
return true;
}
bool ClientSocket::UDPRecv(void)
{
SOCKADDR_IN Address = {0,};
if(NetBase::UDPRecv(&Address) == false)
{
/* if(GetLastError() == 10054)
if(DeleteFromAddressList(ClientSocket::ListType_Client, Address))
return true;
*/
return false;
}
return true;
}
bool ClientSocket::ConnectToAuthServer(char *Address_In)
{
Disconnect();
if(!Socket::CreateTCPSocket(&m_TCPSocket, m_hMainWnd, WM_CLIENT_SOCKET))
return false;
m_ConnectServer = CO_SRV::CO_AUTH;
return Socket::Connect(m_TCPSocket, Socket::MakeSockAddr(Address_In, DemonAuthTCPPort), &m_pRecvDataBuffer);
}
bool ClientSocket::ConnectToGameServer(char *Address_In)
{
Disconnect();
if(!Socket::CreateTCPSocket(&m_TCPSocket, m_hMainWnd, WM_CLIENT_SOCKET))
return false;
bool NullBind = false;
IN_ADDR Addr = {0,};
if(Socket::GetHostIP(Addr, false))
// if(Socket::GetHostIP(Addr, true))
{
if(Socket::IsWrongIP(Addr))
{
// <20><><EFBFBD>̰<EFBFBD><CCB0><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϼ<EFBFBD><CFBC><EFBFBD> <20><><EFBFBD><EFBFBD>
NullBind = true;
}
}
else
{
NullBind = true;
}
if(true == NullBind)
{
m_PriUDPAddress = Socket::MakeSockAddr(NULL, DemonClientUDPPort);
if(!Socket::CreateUDPSocket(&m_UDPSocket, m_PriUDPAddress, m_hMainWnd, WM_UDP_SOCKET))
return false;
Socket::GetNATAddress(m_UDPSocket, &m_PriUDPAddress, true);
}
else
{
m_PriUDPAddress = Socket::MakeSockAddr(Addr, DemonClientUDPPort);
if(!Socket::CreateUDPSocket(&m_UDPSocket, m_PriUDPAddress, m_hMainWnd, WM_UDP_SOCKET))
return false;
}
m_ConnectServer = CO_SRV::CO_GAME;
return Socket::Connect(m_TCPSocket, Socket::MakeSockAddr(Address_In, DemonGameTCPPort), &m_pRecvDataBuffer);
}
bool ClientSocket::Disconnect(void)
{
if(m_TCPSocket)
Socket::DeleteSocket(&m_TCPSocket, m_hMainWnd);
if(m_UDPSocket)
Socket::DeleteSocket(&m_UDPSocket, m_hMainWnd);
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><> <20><>Ŷ [ public ]
//
// Parameter :
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::SendSysPing(void)
{
if(m_TCPSocket == NULL)
return false;
CPacket* lpBuffer = new CPacket(sizeof(PktSyP), CmdSysPing, 0);
LPPktSyP lpSyPAckPt = reinterpret_cast<LPPktSyP>(lpBuffer->GetBuf());
lpSyPAckPt->m_dwTickTime = GetTickCount();
lpBuffer->WrapPacket(true);
if(!Send(m_TCPSocket, lpBuffer->GetWSABuf()))
{
lpBuffer->Release();
return false;
}
lpBuffer->Release();
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD> <20><> <20>̵<EFBFBD> [ public ]
//
// Parameter :
// 1st : <20><>[In]
// 2st : <20><>ġ[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharMoveZone(char Zone_In, POS& NewPos_In)
{
if(m_TCPSocket == NULL)
return false;
CPacket* lpBuffer = new CPacket(sizeof(PktSZMv), CmdCharMoveZone, 0, 0);
LPPktSZMv lpSZMvPt = reinterpret_cast<LPPktSZMv>(lpBuffer->GetBuf());
lpSZMvPt->m_cZone = Zone_In;
lpSZMvPt->m_NewPos = NewPos_In;
lpBuffer->WrapPacket(true);
if(!Send(m_TCPSocket, lpBuffer->GetWSABuf()))
{
lpBuffer->Release();
return false;
}
lpBuffer->Release();
return true;
}
DWORD ClientSocket::HandleCharMoveZone(char *pBuffer_In, unsigned char *Zone_Out, unsigned short *lpChannelNum_Out)
{
LPPktSZMvAck lpSZMvAckPt = (LPPktSZMvAck)pBuffer_In;
if(lpSZMvAckPt == NULL || lpChannelNum_Out == NULL)
return WrongParameter;
if(lpSZMvAckPt->Error() != NoError)
return lpSZMvAckPt->Error();
*Zone_Out = lpSZMvAckPt->m_cZone;
memcpy(lpChannelNum_Out, lpSZMvAckPt->m_wChannelNum, sizeof(unsigned short) * PktSZMvAck::MAX_CHANNEL_NUM);
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD> <20><> [ public ]
//
// Parameter :
// 1st : <20><>[In]
// 2st : ä<><C3A4>[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::ServerZone(char Zone_In, char Channel_In)
{
if(m_TCPSocket == NULL)
return false;
CPacket* lpBuffer = new CPacket(sizeof(PktSZ), CmdServerZone, 0, 0);
LPPktSZ lpSZPt = reinterpret_cast<LPPktSZ>(lpBuffer->GetBuf());
lpSZPt->m_cZone = Zone_In;
lpSZPt->m_cChannel = Channel_In;
lpBuffer->WrapPacket(true);
if(!Send(m_TCPSocket, lpBuffer->GetWSABuf()))
{
lpBuffer->Release();
return false;
}
lpBuffer->Release();
return true;
}
DWORD ClientSocket::HandleServerZone(char *pBuffer_In, DWORD *ServerID_Out)
{
LPPktSZAck lpSZAckPt = (LPPktSZAck)pBuffer_In;
if(lpSZAckPt == NULL || ServerID_Out == NULL)
return WrongParameter;
if(lpSZAckPt->Error() != NoError)
return lpSZAckPt->Error();
*ServerID_Out = lpSZAckPt->m_dwServerID;
m_RegAddress = lpSZAckPt->m_GameAddress;
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD> [ public ]
//
// Parameter :
// 1st : <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// 2st : <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::UserLogin(DWORD SessionID_In, DWORD UserID_In, DWORD ServerID_In, DWORD CheckSum_In)
{
CrearRegAddress(); // <20>ּ<EFBFBD> <20>ʱ<EFBFBD>ȭ
if(m_TCPSocket == NULL || UserID_In == NULL)
return false;
CPacket* lpBuffer = new CPacket(sizeof(PktULi), CmdUserLogin, 0);
LPPktULi lpULiPt = reinterpret_cast<LPPktULi>(lpBuffer->GetBuf());
lpULiPt->m_dwSessionID = SessionID_In;
lpULiPt->m_dwUserID = UserID_In;
lpULiPt->m_dwServerID = ServerID_In;
lpULiPt->m_dwCheckSum = CheckSum_In;
lpBuffer->WrapPacket(true);
if(!Send(m_TCPSocket, lpBuffer->GetWSABuf()))
{
lpBuffer->Release();
return false;
}
lpBuffer->Release();
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD> [ public ]
//
// Parameter :
// 1st : <20><>Ŷ <20><><EFBFBD><EFBFBD>[In]
// 2st : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[Out]
// 3st : <20>α<EFBFBD><CEB1><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ü[Out]
//
// Return :
// <09><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD>
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleUserLogin(char *pBuffer_In, DWORD *UserID_Out, LPCHAR_VIEW CharRecode_Out)
{
LPPktULiAck lpULiAckPt = (LPPktULiAck)pBuffer_In;
if(lpULiAckPt == NULL || UserID_Out == NULL || CharRecode_Out == NULL)
return WrongParameter;
if(lpULiAckPt->Error() != NoError)
return lpULiAckPt->Error();
*UserID_Out = lpULiAckPt->m_dwUserID;
CopyMemory(CharRecode_Out, lpULiAckPt->m_CharView, sizeof(CHAR_VIEW) * 3);
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// 1st : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In] ex) 1 or 3 ....
// 2st : <20><><EFBFBD>õ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>[In] ex) 1 or 2 or 3
// 3st : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ü[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharCreate(DWORD UserID_In, DWORD SlotNum_In, CHAR_CREATE &Create_In)
{
if(m_TCPSocket == NULL || UserID_In == 0)
return false;
CPacket* lpBuffer = new CPacket(sizeof(PktCC), CmdCharCreate, 0, 0);
LPPktCC lpCCPt = reinterpret_cast<LPPktCC>(lpBuffer->GetBuf());
lpCCPt->m_dwUserID = UserID_In;
lpCCPt->m_dwSlotNum = SlotNum_In;
lpCCPt->m_CreateChar = Create_In;
lpBuffer->WrapPacket(true);
if(!Send(m_TCPSocket, lpBuffer->GetWSABuf()))
{
lpBuffer->Release();
return false;
}
lpBuffer->Release();
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// 1st : <20><>Ŷ <20><><EFBFBD><EFBFBD>[In]
// 2st : ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[Out]
// 3st : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[Out]
// 4st : ij<><C4B3><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[Out]
//
// Return :
// <09><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD>
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharCreate(char *pBuffer_In, DWORD *CharID_Out, DWORD *SlotNum_Out, LPCHAR_VIEW lpCharView_Out)
{
LPPktCCAck lpCCAckPt = (LPPktCCAck)pBuffer_In;
if(lpCCAckPt == NULL || CharID_Out == NULL)
return WrongParameter;
if(lpCCAckPt->Error() != NoError)
return lpCCAckPt->Error();
*CharID_Out = lpCCAckPt->m_dwCharID;
*SlotNum_Out = lpCCAckPt->m_dwSlotNum;
CopyMemory(lpCharView_Out, &(lpCCAckPt->m_CharView), sizeof(CHAR_VIEW));
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// 1st : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// 2st : <20><><EFBFBD>õ<EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharSelect(DWORD UserID_In, DWORD CharID_In)
{
if(m_TCPSocket == NULL || UserID_In == 0 || CharID_In == 0)
return false;
CPacket* lpBuffer = new CPacket(sizeof(PktCS), CmdCharSelect, 0, 0);
LPPktCS lpCSPt = reinterpret_cast<LPPktCS>(lpBuffer->GetBuf());
lpCSPt->m_dwUserID = UserID_In;
lpCSPt->m_dwCharID = CharID_In;
lpBuffer->WrapPacket(true);
if(!Send(m_TCPSocket, lpBuffer->GetWSABuf()))
{
lpBuffer->Release();
return false;
}
lpBuffer->Release();
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// 1st : <20><>Ŷ <20><><EFBFBD><EFBFBD>[In]
// 2st : ä<><C3A4> <20><><EFBFBD><EFBFBD>[In]
//
// Return :
// <09><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD>
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharSelect(char *pBuffer_In, unsigned char *Zone_Out, unsigned short *lpChannelNum_Out)
{
LPPktCSAck lpCSAckPt = (LPPktCSAck)pBuffer_In;
if(lpCSAckPt == NULL || lpChannelNum_Out == NULL)
return WrongParameter;
if(lpCSAckPt->Error() != NoError)
return lpCSAckPt->Error();
*Zone_Out = lpCSAckPt->m_cZone;
memcpy(lpChannelNum_Out, lpCSAckPt->m_wChannelNum, sizeof(unsigned short) * PktCSAck::MAX_CHANNEL_NUM);
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// 1st : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// 2st : ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// 3st : <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharDelete(DWORD UserID_In, DWORD CharID_In, DWORD SlotNum_In)
{
if(m_TCPSocket == NULL || UserID_In == 0)
return false;
CPacket* lpBuffer = new CPacket(sizeof(PktCD), CmdCharDelete, 0, 0);
LPPktCD lpCDPt = reinterpret_cast<LPPktCD>(lpBuffer->GetBuf());
lpCDPt->m_dwUserID = UserID_In;
lpCDPt->m_dwCharID = CharID_In;
lpCDPt->m_dwSlotNum = SlotNum_In;
lpBuffer->WrapPacket(true);
if(!Send(m_TCPSocket, lpBuffer->GetWSABuf()))
{
lpBuffer->Release();
return false;
}
lpBuffer->Release();
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// 1st : <20><>Ŷ <20><><EFBFBD><EFBFBD>[In]
// 2st : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[Out]
// 3st : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>[Out]
//
// Return :
// <09><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD>
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharDelete(char *pBuffer_In, DWORD *UserID_Out, DWORD *SlotNum_Out)
{
LPPktCDAck lpCDAckPt = (LPPktCDAck)pBuffer_In;
if(lpCDAckPt == NULL || UserID_Out == NULL || SlotNum_Out == NULL)
return WrongParameter;
if(lpCDAckPt->Error() != NoError)
return lpCDAckPt->Error();
*UserID_Out = lpCDAckPt->m_dwUserID;
*SlotNum_Out = lpCDAckPt->m_dwSlotNum;
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD> [ public ]
//
// Parameter :
// 1st : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// 2st : ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// 3st : <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharLogin(DWORD UserID_In, DWORD CharID_In, DWORD SessionID_In)
{
CrearRegAddress(); // <20>ּ<EFBFBD> <20>ʱ<EFBFBD>ȭ
if(m_TCPSocket == NULL || UserID_In == 0 || CharID_In == 0)
return false;
CPacket* lpBuffer = new CPacket(sizeof(PktCLi), CmdCharLogin, 0, 0);
LPPktCLi lpCLiPt = reinterpret_cast<LPPktCLi>(lpBuffer->GetBuf());
lpCLiPt->m_dwSessionID = SessionID_In;
lpCLiPt->m_dwUserID = UserID_In;
lpCLiPt->m_dwCharID = CharID_In;
lpBuffer->WrapPacket(true);
if(!Send(m_TCPSocket, lpBuffer->GetWSABuf()))
{
lpBuffer->Release();
return false;
}
lpBuffer->Release();
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD> [ public ]
//
// Parameter :
// 1st : <20><>Ŷ <20><><EFBFBD><EFBFBD>[In]
// 2st : ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// 3st : ij<><C4B3><EFBFBD><EFBFBD> <20><>ġ[Out]
// 4st : <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD>[Out]
//
// Return :
// <09><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD>
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharLogin(char *pBuffer_In, char *Admin_Out, LPCHAR_INFOST lpCharInfo_Out,
LPSKILL lpSkill_Out, LPQUICK lpQuick_Out, LPCHAR_POS lpPos_Out, DWORD *ServerTime_Out,
unsigned short *EquipSize_Out, char **lppEquipBuff_Out,
unsigned short *InvenSize_Out, char **lppInvenBuff_Out,
unsigned short *ExtraSize_Out, char **lppExtraBuff_Out,
unsigned short *ExchangeSize_Out, char **lppExchangeBuff_Out)
{
LPPktCLiAck lpCLiAckPt = (LPPktCLiAck)pBuffer_In;
if (lpCLiAckPt == NULL) {
return WrongParameter;
}
m_GSSUDPAddress = lpCLiAckPt->m_GSSUDPAddr;
*ServerTime_Out = lpCLiAckPt->m_dwServerTime;
*Admin_Out = lpCLiAckPt->m_cAdmin;
unsigned short *usUpdateLen = lpCLiAckPt->m_usUpdate;
*lppEquipBuff_Out = NULL;
*lppInvenBuff_Out = NULL;
*lppExtraBuff_Out = NULL;
*lppExchangeBuff_Out = NULL;
*EquipSize_Out = 0;
*InvenSize_Out = 0;
*ExtraSize_Out = 0;
*ExchangeSize_Out = 0;
char* OffSet = pBuffer_In + sizeof(PktCLiAck);
for (int nCount = 0; nCount < DBUpdateData::MAX_UPDATE_DB; ++nCount)
{
if (0 == usUpdateLen[nCount]) {
continue;
}
switch (nCount)
{
case DBUpdateData::STATUS_UPDATE: *lpCharInfo_Out = *(LPCHAR_INFOST)OffSet; break;
case DBUpdateData::POSITION_UPDATE: *lpPos_Out = *(LPCHAR_POS)OffSet; break;
case DBUpdateData::SKILL_UPDATE: *lpSkill_Out = *(LPSKILL)OffSet; break;
case DBUpdateData::QUICKSLOT_UPDATE: *lpQuick_Out = *(LPQUICK)OffSet; break;;
case DBUpdateData::ITEM_EQUIP_UPDATE: *lppEquipBuff_Out = OffSet; *EquipSize_Out = usUpdateLen[nCount]; break;
case DBUpdateData::ITEM_INVEN_UPDATE: *lppInvenBuff_Out = OffSet; *InvenSize_Out = usUpdateLen[nCount]; break;
case DBUpdateData::ITEM_EXTRA_UPDATE: *lppExtraBuff_Out = OffSet; *ExtraSize_Out = usUpdateLen[nCount]; break;
case DBUpdateData::ITEM_EXCHANGE_UPDATE: *lppExchangeBuff_Out = OffSet; *ExchangeSize_Out = usUpdateLen[nCount]; break;
};
OffSet += usUpdateLen[nCount];
}
if(lpCLiAckPt->Error() != NoError) {
return lpCLiAckPt->Error();
}
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20>α׾ƿ<D7BE> [ public ]
//
// Parameter :
// 1st : ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharLogout(DWORD CharID_In)
{
if(m_TCPSocket == NULL || CharID_In == 0)
return false;
CPacket* lpBuffer = new CPacket(sizeof(PktCLo), CmdCharLogout, 0, 0);
LPPktCLo lpCLoPt = reinterpret_cast<LPPktCLo>(lpBuffer->GetBuf());
lpCLoPt->m_dwCharID = CharID_In;
lpBuffer->WrapPacket(true);
if(!Send(m_TCPSocket, lpBuffer->GetWSABuf()))
{
lpBuffer->Release();
return false;
}
lpBuffer->Release();
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20>α׾ƿ<D7BE> [ public ]
//
// Parameter :
// 1st : <20><>Ŷ <20><><EFBFBD><EFBFBD>[In]
// 2st : ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
//
// Return :
// <09><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD>
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharLogout(char *pBuffer_In, DWORD *CharID_Out)
{
LPPktCLoAck lpCLoAckPt = (LPPktCLoAck)pBuffer_In;
if(lpCLoAckPt == NULL || CharID_Out == NULL)
return WrongParameter;
*CharID_Out = lpCLoAckPt->m_dwCharID;
if(lpCLoAckPt->Error() != NoError)
return lpCLoAckPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20>α׾ƿ<D7BE> [ public ]
//
// Parameter :
// 1st : <20><>Ŷ <20><><EFBFBD><EFBFBD>[In]
// 2st : <20>÷<EFBFBD><C3B7><EFBFBD>[Out]
// 3st : <20>ش<EFBFBD> <20><>[Out]
// 4st : <20>ϼ<EFBFBD>[Out]
// 5st : â<><C3A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[Out]
// 6st : â<><C3A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[Out]
//
// Return :
// <09><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD>
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleDepositUpdate(char *pBuffer_In, DWORD *Flag_Out, unsigned char *TabNum_Out, bool *Complete_Out, unsigned short *StoreSize_Out, char **lppStoreBuff_Out)
{
PktDepositUpdateDB* lpDepositUpdateDB = (PktDepositUpdateDB*)pBuffer_In;
if (lpDepositUpdateDB == NULL) {
return WrongParameter;
}
*Flag_Out = lpDepositUpdateDB->m_dwTabFlag;
*TabNum_Out = lpDepositUpdateDB->m_cTabNum;
*Complete_Out = lpDepositUpdateDB->m_bUpdateComplete;
*StoreSize_Out = lpDepositUpdateDB->m_usDataSize;
*lppStoreBuff_Out = pBuffer_In + sizeof(PktDepositUpdateDB);
if(lpDepositUpdateDB->Error() != NoError) {
return lpDepositUpdateDB->Error();
}
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// UDP <20>ּ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ [ public ]
//
// Parameter :
// 1st : ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharUpdateAddress(DWORD CharID_In)
{
if(m_UDPSocket == NULL)
return false;
CPacket* lpBuffer = new CPacket(sizeof(PktUA), CmdCharUpdateAddress, 0, 0);
LPPktUA lpUAPt = reinterpret_cast<LPPktUA>(lpBuffer->GetBuf());
lpUAPt->m_dwCharID = CharID_In;
lpUAPt->m_PrivateAddress = m_PriUDPAddress;
lpBuffer->WrapPacket(true);
if(!SendTo(m_UDPSocket, m_GSSUDPAddress, lpBuffer->GetWSABuf()))
{
lpBuffer->Release();
return false;
}
lpBuffer->Release();
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// UDP <20>ּ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ [ public ]
//
// Parameter :
// 1st : <20><>Ŷ <20><><EFBFBD><EFBFBD>[In]
//
// Return :
// <09><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD>
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharUpdateAddress(char *pBuffer_In)
{
LPPktUAAck lpUAAckPt = (LPPktUAAck)pBuffer_In;
if(lpUAAckPt == NULL)
return WrongParameter;
m_PriUDPAddress = lpUAAckPt->m_PrivateAddress;
m_PubUDPAddress = lpUAAckPt->m_PublicAddress;
if(lpUAAckPt->Error() != NoError)
return lpUAAckPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD> <20><>û [ public ]
//
// Parameter :
// : <20><EFBFBD><E4B1B8> <20><><EFBFBD>̵<EFBFBD>[In]
// : <20>ش<EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// : Ŀ<>ǵ<EFBFBD>
// 0 : HP, MP <20><><EFBFBD><EFBFBD>, 1 : UDP <20>ּ<EFBFBD>, 2 : <20><><EFBFBD><EFBFBD>
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharRequireInfo(DWORD SenderID_In, DWORD TargetID_In, unsigned char Cmd_In)
{
if(m_TCPSocket == NULL || SenderID_In == 0 || TargetID_In == 0)
return false;
CPacket* lpBuffer = new CPacket(sizeof(PktRI), CmdCharRequireInfo, 0, 0);
LPPktRI lpRIPt = reinterpret_cast<LPPktRI>(lpBuffer->GetBuf());
lpRIPt->m_dwCharID = SenderID_In;
lpRIPt->m_cCmd = Cmd_In;
lpRIPt->m_PublicAddress = m_PubUDPAddress;
lpRIPt->m_PrivateAddress = m_PriUDPAddress;
lpBuffer->WrapPacket(true);
UDPSendList(lpBuffer->GetWSABuf(), m_ClientList, TargetID_In);
lpBuffer->Release();
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20>ּ<EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// 1st : <20><>Ŷ <20><><EFBFBD><EFBFBD>[In]
// 2st : ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// 3st : UDP <20>ּ<EFBFBD> Public[Out]
// 4st : UDP <20>ּ<EFBFBD> Private[Out]
//
// Return :
// <09><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD>
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharRequireInfo(char *pBuffer_In, DWORD *CharID_Out, SOCKADDR_IN* PubAddress_Out, SOCKADDR_IN* PriAddress_Out, unsigned char *Cmd_Out)
{
LPPktRI lpRIPt = (LPPktRI)pBuffer_In;
if(lpRIPt == NULL || CharID_Out == NULL)
return WrongParameter;
*CharID_Out = lpRIPt->m_dwCharID;
*Cmd_Out = lpRIPt->m_cCmd;
*PubAddress_Out = lpRIPt->m_PublicAddress;
*PriAddress_Out = lpRIPt->m_PrivateAddress;
if(lpRIPt->Error() != NoError)
return lpRIPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20>ּ<EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// : Ư<><C6AF> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//
// Parameter :
// 1st : ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
//
// Return :
// <09><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD>
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharAddressInfo(DWORD CharID_In, DWORD TargetID_In)
{
if(m_UDPSocket == NULL || CharID_In == 0)
return false;
CPacket* lpBuffer = new CPacket(sizeof(PktAI), CmdCharAddressInfo, 0, 0);
LPPktAI lpAIPt = reinterpret_cast<LPPktAI>(lpBuffer->GetBuf());
lpAIPt->m_AddressInfo.m_dwCharID = CharID_In;
lpAIPt->m_AddressInfo.m_PublicAddress = m_PubUDPAddress;
lpAIPt->m_AddressInfo.m_PrivateAddress = m_PriUDPAddress;
lpBuffer->WrapPacket(true);
UDPSendList(lpBuffer->GetWSABuf(), m_ClientList, TargetID_In);
lpBuffer->Release();
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20>ּ<EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// 1st : <20><>Ŷ <20><><EFBFBD><EFBFBD>[In]
// 2st : ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// 3st : UDP <20>ּ<EFBFBD> Public[Out]
// 4st : UDP <20>ּ<EFBFBD> Private[Out]
//
// Return :
// <09><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD>
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharAddressInfo(char *pBuffer_In, DWORD *CharID_Out, SOCKADDR_IN* PubAddress_Out, SOCKADDR_IN* PriAddress_Out)
{
LPPktAI lpAIPt = (LPPktAI)pBuffer_In;
if(lpAIPt == NULL || CharID_Out == NULL || PubAddress_Out == NULL || PriAddress_Out == NULL)
return WrongParameter;
*CharID_Out = lpAIPt->m_AddressInfo.m_dwCharID;
*PubAddress_Out = lpAIPt->m_AddressInfo.m_PublicAddress;
*PriAddress_Out = lpAIPt->m_AddressInfo.m_PrivateAddress;
if(lpAIPt->Error() != NoError)
return lpAIPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20>̵<EFBFBD> [ public ]
//
// Parameter :
// 1st : ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// 2st : <20><><EFBFBD><EFBFBD> <20><>ġ[In]
// 3st : <20><><EFBFBD><EFBFBD>[In]
// 4st : <20><><EFBFBD><EFBFBD> <20>׼<EFBFBD> <20>ѹ<EFBFBD>[In]
// 5st : <20><><EFBFBD><EFBFBD> <20>׼<EFBFBD> <20>ѹ<EFBFBD>[In]
// 6st : <20><><EFBFBD><EFBFBD>[In]
// 7st : æƮ <20><><EFBFBD><EFBFBD>Ʈ ǥ<><C7A5>[In]
// 8st : <20><>æƮ <20><><EFBFBD><EFBFBD>Ʈ ǥ<><C7A5>[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharMove(DWORD CharID_In, LPPOS Pos_In, float Dir_In, unsigned short UAct_In, unsigned short LAct_In, char Level_In, DWORD ChantEf_In, DWORD EnchantEf_In)
{
if(m_UDPSocket == NULL || CharID_In == 0)
return false;
CPacket* lpBuffer = new CPacket(sizeof(PktMV), CmdCharMove, 0, 0);
LPPktMV lpMVPt = reinterpret_cast<LPPktMV>(lpBuffer->GetBuf());
lpMVPt->m_dwCharID = CharID_In;
lpMVPt->m_Position = *Pos_In;
lpMVPt->m_fDir = Dir_In;
lpMVPt->m_wUAct = UAct_In;
lpMVPt->m_wLAct = LAct_In;
lpMVPt->m_wLevel = Level_In;
lpMVPt->m_dwChantEf = ChantEf_In;
lpMVPt->m_dwEnchantEf = EnchantEf_In;
lpBuffer->WrapPacket(true);
// UDPSendList(lpBuffer->GetWSABuf(), m_ClientList);
UDPSendList(lpBuffer->GetWSABuf(), m_InstanceClientList);
lpBuffer->Release();
DeleteInstanceUDPList();
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20>̵<EFBFBD> [ public ]
//
// Parameter :
// 1st : <20><>Ŷ <20><><EFBFBD><EFBFBD>[In]
// 1st : ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// 2st : <20><><EFBFBD><EFBFBD> <20><>ġ[Out]
// 3st : <20><><EFBFBD><EFBFBD> <20><>ġ[Out]
// 4st : <20>׼<EFBFBD> <20>ѹ<EFBFBD>[Out]
// 5st : <20><><EFBFBD><EFBFBD>[Out]
// 6st : æƮ <20><><EFBFBD><EFBFBD>Ʈ ǥ<><C7A5>[Out]
// 7st : <20><>æƮ <20><><EFBFBD><EFBFBD>Ʈ ǥ<><C7A5>[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharMove(char *pBuffer_In, DWORD *CharID_Out, LPPOS Pos_Out, float *Dir_Out, unsigned short *UAct_Out, unsigned short *LAct_Out, char *Level_Out, DWORD *ChantEf_Out, DWORD *EnchantEf_Out, DWORD *PtCount_Out)
{
LPPktMV lpMVPt = (LPPktMV)pBuffer_In;
if(lpMVPt == NULL || CharID_Out == NULL)
return WrongParameter;
*CharID_Out = lpMVPt->m_dwCharID;
*Pos_Out = lpMVPt->m_Position;
*Dir_Out = lpMVPt->m_fDir;
*UAct_Out = lpMVPt->m_wUAct;
*LAct_Out = lpMVPt->m_wLAct;
*Level_Out = lpMVPt->m_wLevel;
*ChantEf_Out = lpMVPt->m_dwChantEf;
*EnchantEf_Out = lpMVPt->m_dwEnchantEf;
*PtCount_Out = lpMVPt->GetStartBit();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20>̵<EFBFBD> [ public ]
//
// Parameter :
// 1st : ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// 2st : <20><><EFBFBD><EFBFBD> <20><>ġ[In]
// 3st : <20><><EFBFBD><EFBFBD>[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharMoveUpdate(DWORD CharID_In, bool SitMode_In, LPPOS Pos_In, float Dir_In)
{
if(m_TCPSocket == NULL || CharID_In == 0)
return false;
CPacket* lpBuffer = new CPacket( sizeof(PktMU), CmdCharMoveUpdate, 0, 0);
LPPktMU lpMUPt = reinterpret_cast<LPPktMU>(lpBuffer->GetBuf());
lpMUPt->m_dwTick = GetTickCount(); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ƾ
lpMUPt->m_bSitMode = SitMode_In;
lpMUPt->m_Position = *Pos_In;
lpMUPt->m_fDir = Dir_In;
lpBuffer->WrapPacket(true);
if(!Send(m_TCPSocket, lpBuffer->GetWSABuf()))
{
lpBuffer->Release();
return false;
}
lpBuffer->Release();
// 1<>и<EFBFBD><D0B8><EFBFBD> <20>ѹ<EFBFBD><D1B9><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UDP <20><>Ŷ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20>Ѵ<EFBFBD>.
if(60 == m_UpdateCount)
{
m_UpdateCount = 0;
CharUpdateAddress(CharID_In);
}
else
{
++m_UpdateCount;
}
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> ä<><C3A4> [ public ]
//
// Parameter :
// 1st : ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// 2st : Ŀ<>ǵ<EFBFBD>[In]
// 0 : <20><><EFBFBD><EFBFBD>, 1 : <20><>Ƽ, 2 : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 3 : <20><><EFBFBD><EFBFBD>, 4 : <20><><EFBFBD><EFBFBD>, 5 : <20>α<EFBFBD>
// 3st : ä<><C3A4> <20><><EFBFBD>ڿ<EFBFBD>[In]
// 4st : ä<><C3A4> <20><><EFBFBD>ڿ<EFBFBD> ũ<><C5A9>[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharChat(DWORD CharID_In, unsigned short Cmd_In, char* Message_In, int MessageSize_In)
{
if (m_UDPSocket == NULL || Message_In == NULL || MessageSize_In == 0) {
return false;
}
CPacket* lpBuffer = new CPacket(
static_cast<unsigned short>(sizeof(PktCt) + MessageSize_In + 1), CmdCharChat, 0, 0);
LPPktCt lpCtPt = reinterpret_cast<LPPktCt>(lpBuffer->GetBuf());
lpCtPt->m_dwCharID = CharID_In;
lpCtPt->m_sCmd = Cmd_In;
*(Message_In + MessageSize_In) = NULL;
CopyMemory(lpBuffer->GetBuf() + sizeof(PktCt), Message_In, MessageSize_In + 1);
lpBuffer->WrapPacket(true);
switch (Cmd_In)
{
// case PktCt::NORMAL: UDPSendList(lpBuffer->GetWSABuf(), m_ClientList); break; // <20><><EFBFBD><EFBFBD>
case PktCt::NORMAL: UDPSendList(lpBuffer->GetWSABuf(), m_InstanceClientList); break; // <20><><EFBFBD><EFBFBD>
case PktCt::PARTY: UDPSendList(lpBuffer->GetWSABuf(), m_PartyList); break; // <20><>Ƽ
case PktCt::FRIEND: break; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
case PktCt::GUILD: break; // <20><><EFBFBD><EFBFBD>
case PktCt::NOTICE: break; // <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
case PktCt::CLIENT_LOG: // <20>α<EFBFBD>
case PktCt::STALL: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȭ<EFBFBD><C8AD>
{
if (m_TCPSocket == NULL || CharID_In == 0) {
return false;
}
if (false == Send(m_TCPSocket, lpBuffer->GetWSABuf()))
{
lpBuffer->Release();
return false;
}
}
}
lpBuffer->Release();
DeleteInstanceUDPList();
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> ä<><C3A4> [ public ]
//
// Parameter :
// 1st : <20><>Ŷ <20><><EFBFBD><EFBFBD>[In]
// 2st : ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// 2st : Ŀ<>ǵ<EFBFBD>[Out]
// 3st : <20>޽<EFBFBD><DEBD><EFBFBD>[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharChat(char *pBuffer_In, DWORD *CharID_Out, unsigned short *Cmd_Out, char *Message_Out)
{
LPPktCt lpCtPt = (LPPktCt)pBuffer_In;
if(lpCtPt == NULL || Message_Out == NULL)
return WrongParameter;
char *pBuffer = (char *)lpCtPt + sizeof(PktCt);
int nLen = lpCtPt->GetLen();
*CharID_Out = lpCtPt->m_dwCharID;
*Cmd_Out = lpCtPt->m_sCmd;
CopyMemory(Message_Out, pBuffer, nLen - sizeof(PktCt));
Message_Out[nLen - sizeof(PktCt) - 1] = NULL;
if(lpCtPt->Error() != NoError)
return lpCtPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20>ӼӸ<D3BC> [ public ]
//
// Parameter :
// 1st : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20≯<EFBFBD>[In]
// 2nd : <20>޴<EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20≯<EFBFBD>[In]
// 3rd : ä<><C3A4> <20><><EFBFBD>ڿ<EFBFBD>[In]
// 4th : ä<><C3A4> <20><><EFBFBD>ڿ<EFBFBD> ũ<><C5A9>[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharWhisper(char* SenderName_In, char *RecverName_In, char* Message_In, int MessageSize_In)
{
if(m_TCPSocket == NULL || SenderName_In == NULL || Message_In == NULL)
return false;
LPPktWh lpWhPt = reinterpret_cast<LPPktWh>(GetSendBuffer());
lpWhPt->InitPtHead(static_cast<unsigned short>(sizeof(PktWh) + MessageSize_In + 1), CmdCharWhisper, 0, 0);
strncpy(lpWhPt->m_SenderName, SenderName_In, 16);
strncpy(lpWhPt->m_RecverName, RecverName_In, 16);
*(Message_In + MessageSize_In) = NULL;
CopyMemory(GetSendBuffer() + sizeof(PktWh), Message_In, MessageSize_In + 1);
PutSendBuffer(true);
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20>ӼӸ<D3BC> [ public ]
//
// Parameter :
// 1st : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20≯<EFBFBD>[In]
// 2nd : <20>޴<EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20≯<EFBFBD>[In]
// 3rd : ä<><C3A4> <20><><EFBFBD>ڿ<EFBFBD>[In]
// 4th : ä<><C3A4> <20><><EFBFBD>ڿ<EFBFBD> ũ<><C5A9>[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharWhisper(char *pBuffer_In, char *SenderName_Out, char *RecverName_Out, char *Message_Out)
{
LPPktWh lpWhPt = (LPPktWh)pBuffer_In;
if(lpWhPt == NULL || SenderName_Out == NULL || RecverName_Out == NULL || Message_Out == NULL)
return WrongParameter;
char *pBuffer = (char *)lpWhPt + sizeof(PktWh);
int nLen = lpWhPt->GetLen();
strncpy(SenderName_Out, lpWhPt->m_SenderName, 16);
strncpy(RecverName_Out, lpWhPt->m_RecverName, 16);
CopyMemory(Message_Out, pBuffer, nLen - sizeof(PktWh));
Message_Out[nLen - sizeof(PktWh) - 1] = NULL;
if(lpWhPt->Error() != NoError)
return lpWhPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><> <20>α<EFBFBD><CEB1><EFBFBD> [ public ]
//
// Parameter :
// 1st : <20><>Ŷ <20><><EFBFBD><EFBFBD>[In]
// 1st : ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// 2st : Ŀ<>ǵ<EFBFBD>[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharCellLogin(char *pBuffer_In, DWORD *CharID_Out, LPPOS Pos_Out, SOCKADDR_IN* PubAddress_Out, SOCKADDR_IN* PriAddress_Out, unsigned char *Cmd_Out)
{
LPPktCCLi lpCCLiPt = (LPPktCCLi)pBuffer_In;
if(lpCCLiPt == NULL || CharID_Out == NULL)
return WrongParameter;
*CharID_Out = lpCCLiPt->m_dwCharID;
*Cmd_Out = lpCCLiPt->m_cCmd;
*Pos_Out = lpCCLiPt->m_Pos;
*PubAddress_Out = lpCCLiPt->m_PublicAddress;
*PriAddress_Out = lpCCLiPt->m_PrivateAddress;
if(lpCCLiPt->Error() != NoError)
return lpCCLiPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><> <20>α׾ƿ<D7BE> [ public ]
//
// Parameter :
// 1st : <20><>Ŷ <20><><EFBFBD><EFBFBD>[In]
// 1st : ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// 2st : Ŀ<>ǵ<EFBFBD>[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharCellLogout(char *pBuffer_In, DWORD *CharID_Out, unsigned char *Cmd_Out)
{
LPPktCCLo lpCCLoPt = (LPPktCCLo)pBuffer_In;
if(lpCCLoPt == NULL || CharID_Out == NULL)
return WrongParameter;
*CharID_Out = lpCCLoPt->m_dwCharID;
*Cmd_Out = lpCCLoPt->m_cCmd;
if(lpCCLoPt->Error() != NoError)
return lpCCLoPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// 1st : <20><>Ŷ <20><><EFBFBD><EFBFBD>[In]
// 2st : <20><>ġ[Out]
// 3st : <20><><EFBFBD><EFBFBD>[Out]
// 4st : <20>ӵ<EFBFBD>[Out]
// 5st : <20>׼<EFBFBD>[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleMonMove(char *pBuffer_In, DWORD *MonID_Out, LPPOS lpPos_Out, float *Dir_Out, float *Vec_Out, unsigned short *Act_Out, unsigned short *AniNum_Out)
{
LPPktMM lpMMPt = (LPPktMM)pBuffer_In;
if(lpMMPt == NULL)
return WrongParameter;
*MonID_Out = lpMMPt->m_dwMonID;
*lpPos_Out = lpMMPt->m_Position;
*Dir_Out = lpMMPt->m_fDir;
*Vec_Out = lpMMPt->m_fVec;
*Act_Out = lpMMPt->m_wAct;
*AniNum_Out = lpMMPt->m_wAniNum;
if(lpMMPt->Error() != NoError)
return lpMMPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// 2st : <20><>ġ[Out]
// 3st : <20><><EFBFBD><EFBFBD>[Out]
// 4st : <20>ӵ<EFBFBD>[Out]
// 5st : <20>׼<EFBFBD>[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharAttack(DWORD CharID_In, LPPOS lpPos_In, float Dir_In, AtType &AtType_In, AtNode &AtNode_In)
{
if(m_TCPSocket == NULL || CharID_In == 0)
return false;
LPPktAt lpAtPt = reinterpret_cast<LPPktAt>(GetSendBuffer());
lpAtPt->InitPtHead(sizeof(PktAt), CmdCharAttack, 0, 0);
lpAtPt->m_dwCharID = CharID_In;
lpAtPt->m_Postion = *lpPos_In;
lpAtPt->m_fDir = Dir_In;
lpAtPt->m_AtType = AtType_In;
lpAtPt->m_AtNode = AtNode_In;
// <20><>Ŷ <20>ݺ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
InsertPtCount(GetSendBuffer());
PutSendBuffer(true);
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// 1st : <20><>Ŷ <20><><EFBFBD><EFBFBD>[In]
// 1st : ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// 2st : <20><><EFBFBD><EFBFBD>ġ[Out]
// 3st : HP[Out]
// 4st : MP[Out]
// 5st : <20>ε<EFBFBD><CEB5><EFBFBD>[Out]
// 6st : <20><>[Out]
// 7st : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>[Out]
// 8st : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharAttack(char *pBuffer_In, DWORD *CharID_Out, LPAtType lpAtType_Out, unsigned short *HP_Out, unsigned short *MP_Out,
DWORD *RightIndex_Out, DWORD *RightValue_Out, DWORD *LeftIndex_Out, DWORD *LeftValue_Out,
char *Judge_Out, unsigned char *DefenserNum_Out, LPDefenserNode *lppNode_Out)
{
LPPktAtAck lpAtAckPt = (LPPktAtAck)pBuffer_In;
if(lpAtAckPt == NULL) {
return WrongParameter;
}
*CharID_Out = lpAtAckPt->m_dwCharID;
*lpAtType_Out = lpAtAckPt->m_AtType;
*HP_Out = lpAtAckPt->m_wHP;
*MP_Out = lpAtAckPt->m_wMP;
*RightIndex_Out = lpAtAckPt->m_cRightHandIndex;
*RightValue_Out = lpAtAckPt->m_cRightHandValue;
*LeftIndex_Out = lpAtAckPt->m_cLeftHandIndex;
*LeftValue_Out = lpAtAckPt->m_cLeftHandValue;
*Judge_Out = lpAtAckPt->m_cJudge;
*DefenserNum_Out = lpAtAckPt->m_cDefenserNum;
*lppNode_Out = (LPDefenserNode)(pBuffer_In + sizeof(PktAtAck));
if(lpAtAckPt->Error() != NoError) {
return lpAtAckPt->Error();
}
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// 1st : ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// 2st : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>[In]
// 3st : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharAttackInfo(DWORD CharID_In, AtType &AtType_In, unsigned char DefenserNum_In, LPDefenserNode lpNode_In)
{
if(m_UDPSocket == NULL || CharID_In == 0)
return false;
CPacket* lpBuffer = new CPacket(sizeof(PktAtInfo) + sizeof(DefenserNode) * DefenserNum_In, CmdCharAttackInfo, 0, 0);
LPPktAtInfo lpAtInfoPt = reinterpret_cast<LPPktAtInfo>(lpBuffer->GetBuf());
lpAtInfoPt->m_dwCharID = CharID_In;
lpAtInfoPt->m_AtType = AtType_In;
lpAtInfoPt->m_cDefenserNum = DefenserNum_In;
CopyMemory(lpBuffer->GetBuf() + sizeof(PktAtInfo), lpNode_In, sizeof(DefenserNode) * DefenserNum_In);
lpBuffer->WrapPacket(true);
// UDPSendList(lpBuffer->GetWSABuf(), m_ClientList);
UDPSendList(lpBuffer->GetWSABuf(), m_InstanceClientList);
lpBuffer->Release();
DeleteInstanceUDPList();
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// <09><>Ŷ <20><><EFBFBD><EFBFBD>[In]
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>[Out]
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharAttackInfo(char *pBuffer_In, DWORD *CharID_Out, LPAtType lpAtType_Out, unsigned char *DefenserNum_Out, LPDefenserNode *lppNode_Out)
{
LPPktAtInfo lpAtInfoPt = (LPPktAtInfo)pBuffer_In;
if(lpAtInfoPt == NULL)
return WrongParameter;
*CharID_Out = lpAtInfoPt->m_dwCharID;
*lpAtType_Out = lpAtInfoPt->m_AtType;
*DefenserNum_Out = lpAtInfoPt->m_cDefenserNum;
*lppNode_Out = (LPDefenserNode)(pBuffer_In + sizeof(PktAtInfo));
if(lpAtInfoPt->Error() != NoError)
return lpAtInfoPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharRespawn(DWORD CharID_In, unsigned char cCmd_In, POS& Pos_In)
{
if (m_TCPSocket == NULL || CharID_In == 0) {
return false;
}
LPPktRs lpRsPt = reinterpret_cast<LPPktRs>(GetSendBuffer());
lpRsPt->InitPtHead(sizeof(PktRs), CmdCharRespawn, 0, 0);
lpRsPt->m_dwCharID = CharID_In;
lpRsPt->m_cCmd = cCmd_In;
lpRsPt->m_Position = Pos_In;
PutSendBuffer(true);
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// <09><>Ŷ <20><><EFBFBD><EFBFBD>[In]
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// HP[Out]
// MP[Out]
// <09><>ġ[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharRespawn(char *pBuffer_In, DWORD *CharID_Out, unsigned short *HP_Out, unsigned short *MP_Out, LPPOS lpPos_Out, __int64 *Exp_Out)
{
LPPktRsAck lpRsAckPt = (LPPktRsAck)pBuffer_In;
if(lpRsAckPt == NULL)
return WrongParameter;
*CharID_Out = lpRsAckPt->m_dwCharID;
*HP_Out = lpRsAckPt->m_wHP;
*MP_Out = lpRsAckPt->m_wMP;
*lpPos_Out = lpRsAckPt->m_Position;
*Exp_Out = lpRsAckPt->m_dlExp;
if(lpRsAckPt->Error() != NoError)
return lpRsAckPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// <09><>Ŷ <20><><EFBFBD><EFBFBD>[In]
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// <09><><EFBFBD><EFBFBD> Ÿ<><C5B8>[Out]
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ[Out]
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>[Out]
// <09><> HP[Out]
// <09><> MP[Out]
// <09><> <20><><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD>[Out]
// <09><> <20><><EFBFBD><EFBFBD> <20>ջ<EFBFBD> <20><>[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharAttacked(char *pBuffer_In, DWORD *AtCharID_Out, AtType *AtType_Out, LPPOS lpAtPos_Out, float *AtDir_Out, unsigned short *Judge_Out, unsigned short *MyHP_Out, unsigned short *MyMP_Out, unsigned char *MyIndex_Out, unsigned char *MyValue_Out)
{
LPPktAted lpAtedPt = (LPPktAted)pBuffer_In;
if(lpAtedPt == NULL)
return WrongParameter;
*AtCharID_Out = lpAtedPt->m_dwCharID;
*AtType_Out = lpAtedPt->m_AtType;
*lpAtPos_Out = lpAtedPt->m_Postion;
*AtDir_Out = lpAtedPt->m_fDir;
*Judge_Out = lpAtedPt->m_cJudge;
*MyHP_Out = lpAtedPt->m_wMyHP;
*MyMP_Out = lpAtedPt->m_wMyMP;
*MyIndex_Out = lpAtedPt->m_cMyWeaponIndex;
*MyValue_Out = lpAtedPt->m_cMyWeaponValue;
if(lpAtedPt->Error() != NoError)
return lpAtedPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// <09><>Ŷ <20><><EFBFBD><EFBFBD>[In]
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// <09><><EFBFBD><EFBFBD>ġ[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharAward(char *pBuffer_In, DWORD *CharID_Out, DWORD *Exp_Out)
{
LPPktAw lpAwPt = (LPPktAw)pBuffer_In;
if(lpAwPt == NULL)
return WrongParameter;
*CharID_Out = lpAwPt->m_dwCharID;
*Exp_Out = lpAwPt->m_dwExp;
if(lpAwPt->Error() != NoError)
return lpAwPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>[In]
// <09><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><>[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharShapeInfo(LPCHAR_VIEW lpCharView_In, unsigned char cSelectedHands_In, unsigned long dwStatusFlag_In, char *StallName_In)
{
if(m_UDPSocket == NULL)
return false;
CPacket* lpBuffer = new CPacket(sizeof(PktSI), CmdCharShapeInfo, 0, 0);
LPPktSI lpSIPt = reinterpret_cast<LPPktSI>(lpBuffer->GetBuf());
lpSIPt->m_CharView = *lpCharView_In;
lpSIPt->m_cSelectedHands = cSelectedHands_In;
lpSIPt->m_dwStatusFlag = dwStatusFlag_In;
strncpy(lpSIPt->m_StallName, StallName_In, PktSI::MAX_STALL_NAME_LEN);
lpBuffer->WrapPacket(true);
// UDPSendList(lpBuffer->GetWSABuf(), m_ClientList);
UDPSendList(lpBuffer->GetWSABuf(), m_InstanceClientList);
lpBuffer->Release();
DeleteInstanceUDPList();
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>[In]
// <09><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><>[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharShapeInfo(DWORD CharID_In, LPCHAR_VIEW lpCharView_In,
unsigned char cSelectedHands_In, unsigned long dwStatusFlag_In, char *StallName_In)
{
if(m_UDPSocket == NULL)
return false;
CPacket* lpBuffer = new CPacket(sizeof(PktSI), CmdCharShapeInfo, 0, 0);
LPPktSI lpSIPt = reinterpret_cast<LPPktSI>(lpBuffer->GetBuf());
lpSIPt->m_CharView = *lpCharView_In;
lpSIPt->m_cSelectedHands = cSelectedHands_In;
lpSIPt->m_dwStatusFlag = dwStatusFlag_In;
strncpy(lpSIPt->m_StallName, StallName_In, PktSI::MAX_STALL_NAME_LEN);
lpBuffer->WrapPacket(true);
UDPSendList(lpBuffer->GetWSABuf(), m_ClientList, CharID_In);
lpBuffer->Release();
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// <09><>Ŷ <20><><EFBFBD><EFBFBD>[In]
// <09><> <20><><EFBFBD><EFBFBD>ü[Out]
// <09><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><>[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharShapeInfo(char *pBuffer_In, LPCHAR_VIEW lpCharView_Out,
unsigned char *cSelectedHands_Out, unsigned long *dwStatusFlag_Out, char *StallName_Out)
{
LPPktSI lpSIPt = (LPPktSI)pBuffer_In;
if (lpSIPt == NULL) {
return WrongParameter;
}
*lpCharView_Out = lpSIPt->m_CharView;
*cSelectedHands_Out = lpSIPt->m_cSelectedHands;
*dwStatusFlag_Out = lpSIPt->m_dwStatusFlag;
strncpy(StallName_Out, lpSIPt->m_StallName, PktSI::MAX_STALL_NAME_LEN);
if (lpSIPt->Error() != NoError) {
return lpSIPt->Error();
}
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD>̵<EFBFBD>[In]
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ[In]
// <09>ε<EFBFBD><CEB5><EFBFBD>[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharPickUp(DWORD CharID_In, DWORD ObjectID_In, Item::ItemPos Index_In)
{
if(m_TCPSocket == NULL || CharID_In == 0)
return false;
LPPktPU lpPUPt = reinterpret_cast<LPPktPU>(GetSendBuffer());
lpPUPt->InitPtHead(sizeof(PktPU), CmdCharPickUp, 0, 0);
lpPUPt->m_dwCharID = CharID_In;
lpPUPt->m_dwObjectID = ObjectID_In;
lpPUPt->m_itemPos = Index_In;
PutSendBuffer(true);
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// <09><>Ŷ <20><><EFBFBD><EFBFBD>[In]
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD>̵<EFBFBD>[Out]
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ[Out]
// <09>ε<EFBFBD><CEB5><EFBFBD>[Out]
// <09><>[Out] # <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̶<EFBFBD><CCB6><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0<≯<EFBFBD> <20><><EFBFBD>۴<EFBFBD> NULL
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[Out]
// <09><><EFBFBD><EFBFBD>[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharPickUp(char *pBuffer_In, DWORD *CharID_Out, DWORD *ObjectID_Out,
Item::ItemPos* lpIndex_Out, DWORD *Gold_Out, DWORD *Size_Out,
unsigned char* cNum_Out, char **lppBuffer_Out)
{
LPPktPUAck lpPUAckPt = (LPPktPUAck)pBuffer_In;
if(lpPUAckPt == NULL)
return WrongParameter;
*CharID_Out = lpPUAckPt->m_dwCharID;
*ObjectID_Out = lpPUAckPt->m_dwObjectID;
*lpIndex_Out = lpPUAckPt->m_itemPos;
*cNum_Out = lpPUAckPt->m_cNum;
switch(lpPUAckPt->m_cType)
{
case PktPUAck::Item:
*Gold_Out = 0;
*Size_Out = lpPUAckPt->m_dwSize;
*lppBuffer_Out = (char *)(pBuffer_In + sizeof(PktPUAck));
break;
case PktPUAck::Gold:
*Gold_Out = lpPUAckPt->m_dwSize;
*Size_Out = 0;
*lppBuffer_Out = NULL;
break;
};
if(lpPUAckPt->Error() != NoError)
return lpPUAckPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// <09><>Ŷ <20><><EFBFBD><EFBFBD>[In]
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD>̵<EFBFBD>[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharPickUpInfo(char *pBuffer_In, DWORD *CharID_Out, DWORD *ObjectID_Out)
{
LPPktPUInfo lpPUInfoPt = (LPPktPUInfo)pBuffer_In;
if(lpPUInfoPt == NULL)
return WrongParameter;
*CharID_Out = lpPUInfoPt->m_dwCharID;
*ObjectID_Out = lpPUInfoPt->m_dwObjectID;
if(lpPUInfoPt->Error() != NoError)
return lpPUInfoPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD><EFBFBD>߸<EFBFBD><DFB8><EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ[In]
// <09>ε<EFBFBD><CEB5><EFBFBD>[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharPullDown(DWORD CharID_In, Item::ItemPos Index_In, unsigned char cNum)
{
if(m_TCPSocket == NULL || CharID_In == 0)
return false;
LPPktPD lpPDPt = reinterpret_cast<LPPktPD>(GetSendBuffer());
lpPDPt->InitPtHead(sizeof(PktPD), CmdCharPullDown, 0, 0);
lpPDPt->m_dwCharID = CharID_In;
lpPDPt->m_itemPos = Index_In;
lpPDPt->m_cNum = cNum;
PutSendBuffer(true);
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD><EFBFBD>߸<EFBFBD><DFB8><EFBFBD> [ public ]
//
// Parameter :
// <09><>Ŷ <20><><EFBFBD><EFBFBD>[In]
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ[Out]
// <09>ε<EFBFBD><CEB5><EFBFBD>[Out]
// <09>ʵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharPullDown(char *pBuffer_In, DWORD *CharID_Out, Item::ItemPos* lpIndex_Out, LPFieldObject lpFieldObject_Out)
{
LPPktPDAck lpPDAckPt = (LPPktPDAck)pBuffer_In;
if(lpPDAckPt == NULL)
return WrongParameter;
*CharID_Out = lpPDAckPt->m_dwCharID;
*lpFieldObject_Out = lpPDAckPt->m_FieldObject;
*lpIndex_Out = lpPDAckPt->m_itemPos;
if(lpPDAckPt->Error() != NoError)
return lpPDAckPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD><EFBFBD>߸<EFBFBD><DFB8><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// <09>ʵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharPullDownInfo(char *pBuffer_In, DWORD *CharID_Out, LPFieldObject lpFieldObject_Out)
{
LPPktPDInfo lpPDInfoPt = (LPPktPDInfo)pBuffer_In;
if(lpPDInfoPt == NULL)
return WrongParameter;
*CharID_Out = lpPDInfoPt->m_dwCharID;
*lpFieldObject_Out = lpPDInfoPt->m_FieldObject;
if(lpPDInfoPt->Error() != NoError)
return lpPDInfoPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// <09><>Ŷ <20><><EFBFBD><EFBFBD>[In]
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>[Out]
// <09>ʵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleGameCellInfo(char *pBuffer_In, unsigned char *ObjectNum_Out, LPFieldObject *lppFieldObject_Out)
{
LPPktCeInfo lpCeInfoPt = (LPPktCeInfo)pBuffer_In;
if(lpCeInfoPt == NULL)
return WrongParameter;
*ObjectNum_Out = lpCeInfoPt->m_cObjectNum;
*lppFieldObject_Out = (LPFieldObject)(pBuffer_In + sizeof(PktCeInfo));
if(lpCeInfoPt->Error() != NoError)
return lpCeInfoPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// ó<><C3B3> <20><><EFBFBD><EFBFBD>[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharTakeItem(DWORD CharID_In, TakeType TakeType_In)
{
if(m_TCPSocket == NULL || CharID_In == 0)
return false;
LPPktTI lpTIPt = reinterpret_cast<LPPktTI>(GetSendBuffer());
lpTIPt->InitPtHead(sizeof(PktTI), CmdCharTakeItem, 0, 0);
lpTIPt->m_dwCharID = CharID_In;
lpTIPt->m_TakeType = TakeType_In;
PutSendBuffer(true);
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3> [ public ]
//
// Parameter :
// <09><>Ŷ <20><><EFBFBD><EFBFBD>[In]
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// ó<><C3B3> <20><><EFBFBD><EFBFBD>[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharTakeItem(char *pBuffer_In, DWORD *CharID_Out, LPTakeType lpTakeType_Out)
{
LPPktTI lpTIPt = (LPPktTI)pBuffer_In;
if(lpTIPt == NULL)
return WrongParameter;
*CharID_Out = lpTIPt->m_dwCharID;
*lpTakeType_Out = lpTIPt->m_TakeType;
if(lpTIPt->Error() != NoError)
return lpTIPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// ó<><C3B3> <20>ҽ<EFBFBD> <20><><EFBFBD><EFBFBD>[In]
// ó<><C3B3> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharSwapItem(DWORD CharID_In, TakeType SrcType_In, TakeType DstType_In)
{
if(m_TCPSocket == NULL || CharID_In == 0)
return false;
LPPktSwI lpSwIPt = reinterpret_cast<LPPktSwI>(GetSendBuffer());
lpSwIPt->InitPtHead(sizeof(PktSwI), CmdCharSwapItem, 0, 0);
lpSwIPt->m_dwCharID = CharID_In;
lpSwIPt->m_SwapSrc = SrcType_In;
lpSwIPt->m_SwapDst = DstType_In;
PutSendBuffer(true);
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// <09><>Ŷ <20><><EFBFBD><EFBFBD>[In]
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// ó<><C3B3> <20>ҽ<EFBFBD> <20><><EFBFBD><EFBFBD>[Out]
// ó<><C3B3> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharSwapItem(char *pBuffer_In, DWORD *CharID_Out, LPTakeType lpSrcType_Out, LPTakeType lpDstType_Out)
{
LPPktSwI lpSwIPt = (LPPktSwI)pBuffer_In;
if(lpSwIPt == NULL)
return WrongParameter;
*CharID_Out = lpSwIPt->m_dwCharID;
*lpSrcType_Out = lpSwIPt->m_SwapSrc;
*lpDstType_Out = lpSwIPt->m_SwapDst;
if(lpSwIPt->Error() != NoError)
return lpSwIPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ŷ<EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// NPC <20><><EFBFBD>̵<EFBFBD>[In]
// <09>ŷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// <09>ŷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ
// <09>ŷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD>
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharTradeItem(DWORD CharID_In, DWORD NPCID_In, unsigned short ItemID_In, TakeType TakeType_In)
{
if(m_TCPSocket == NULL || CharID_In == 0)
return false;
LPPktTr lpTrPt = reinterpret_cast<LPPktTr>(GetSendBuffer());
lpTrPt->InitPtHead(sizeof(PktTr), CmdCharTradeItem, 0, 0);
lpTrPt->m_dwCustomerID = CharID_In;
lpTrPt->m_dwOwnerID = NPCID_In;
lpTrPt->m_wBuyItemID = ItemID_In;
lpTrPt->m_TakeType = TakeType_In;
PutSendBuffer(true);
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ŷ<EFBFBD> [ public ]
//
// Parameter :
// <09><>Ŷ <20><><EFBFBD><EFBFBD>[In]
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// NPC <20><><EFBFBD>̵<EFBFBD>[In]
// <09>ŷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// <09>ŷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ
// <09>ŷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD>
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharTradeItem(char *pBuffer_In, DWORD *CharID_Out, DWORD *NPCID_Out, unsigned char *Pos_Out, Item::ItemPos* lpIndex_Out,
unsigned char *Num_Out, DWORD *Gold_Out, unsigned short *Size_Out, char **lppBuffer_Out)
{
LPPktTrAck lpTrAckPt = (LPPktTrAck)pBuffer_In;
if(lpTrAckPt == NULL)
return WrongParameter;
*CharID_Out = lpTrAckPt->m_dwCharID;
*NPCID_Out = lpTrAckPt->m_dwNPCID;
*lpIndex_Out = lpTrAckPt->m_itemPos;
*Num_Out = lpTrAckPt->m_cNum;
*Gold_Out = lpTrAckPt->m_dwGold;
if(0 == lpTrAckPt->m_wSize)
{
*Size_Out = 0;
*lppBuffer_Out = NULL;
}
else
{
*Size_Out = lpTrAckPt->m_wSize;
*lppBuffer_Out = pBuffer_In + sizeof(PktTrAck);
}
if(lpTrAckPt->Error() != NoError)
return lpTrAckPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// NPC <20><><EFBFBD>̵<EFBFBD>[In]
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ[In]
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD>[In]
// <09><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharRepairItem(DWORD NPCID_In, Item::ItemPos* lpIndex_In, DWORD Gold_In)
{
if(m_TCPSocket == NULL || NPCID_In == 0)
return false;
LPPktRpI lpRpIPt = reinterpret_cast<LPPktRpI>(GetSendBuffer());
lpRpIPt->InitPtHead(sizeof(PktRpI), CmdCharRepairItem, 0, 0);
lpRpIPt->m_dwCharID = NPCID_In;
lpRpIPt->m_dwGold = Gold_In;
lpRpIPt->m_itemPos = *lpIndex_In;
PutSendBuffer(true);
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// <09><>Ŷ <20><><EFBFBD><EFBFBD>[In]
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ[Out]
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD>[Out]
// <09><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharRepairItem(char *pBuffer_In, DWORD *CharID_Out, Item::ItemPos* lpIndex_Out, DWORD *Gold_Out)
{
LPPktRpI lpRpIPt = (LPPktRpI)pBuffer_In;
if(lpRpIPt == NULL)
return WrongParameter;
*CharID_Out = lpRpIPt->m_dwCharID;
*Gold_Out = lpRpIPt->m_dwGold;
*lpIndex_Out = lpRpIPt->m_itemPos;
if(lpRpIPt->Error() != NoError)
return lpRpIPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// <09>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// <09>޴<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD>[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharUseItem(DWORD SenderID_In, DWORD RecverID_In, Item::ItemPos* lpIndex_In)
{
if(m_TCPSocket == NULL || SenderID_In == 0 || RecverID_In == 0)
return false;
LPPktUI lpUIPt = reinterpret_cast<LPPktUI>(GetSendBuffer());
lpUIPt->InitPtHead(sizeof(PktUI), CmdCharUseItem, 0, 0);
lpUIPt->m_dwSender = SenderID_In;
lpUIPt->m_dwRecver = RecverID_In;
lpUIPt->m_itemPos = *lpIndex_In;
PutSendBuffer(true);
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// <09><>Ŷ <20><><EFBFBD><EFBFBD>[In]
// <09>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// <09>޴<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD>[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharUseItem(char *pBuffer_In, DWORD *SenderID_Out, DWORD *Recver_Out, Item::ItemPos* lpIndex_Out)
{
LPPktUI lpUIPt = (LPPktUI)pBuffer_In;
if(lpUIPt == NULL)
return WrongParameter;
*SenderID_Out = lpUIPt->m_dwSender;
*Recver_Out = lpUIPt->m_dwRecver;
*lpIndex_Out = lpUIPt->m_itemPos;
if(lpUIPt->Error() != NoError)
return lpUIPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// <09>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// <09>޴<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// ij<><C4B3>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharCastObject(DWORD SenderID_In, DWORD RecverID_In, CastObject &CastObject_In)
{
if(m_TCPSocket == NULL || SenderID_In == 0 || RecverID_In == 0)
return false;
LPPktCO lpCOPt = reinterpret_cast<LPPktCO>(GetSendBuffer());
lpCOPt->InitPtHead(sizeof(PktCO), CmdCharCastObject, 0, 0);
lpCOPt->m_dwSenderID = SenderID_In;
lpCOPt->m_dwReceiverID = RecverID_In;
lpCOPt->m_sCastObject = CastObject_In;
PutSendBuffer(true);
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// <09><>Ŷ <20><><EFBFBD><EFBFBD>[In]
// <09>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// <09>޴<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// ij<><C4B3>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharCastObject(char *pBuffer_In, DWORD *SenderID_Out, DWORD *RecverID_Out, LPCastObject lpCastObject)
{
LPPktCO lpCOPt = (LPPktCO)pBuffer_In;
if(lpCOPt == NULL)
return WrongParameter;
*SenderID_Out = lpCOPt->m_dwSenderID;
*RecverID_Out = lpCOPt->m_dwReceiverID;
*lpCastObject = lpCOPt->m_sCastObject;
if(lpCOPt->Error() != NoError)
return lpCOPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// <09>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// <09>޴<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// ij<><C4B3>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharCastObjectInfo(DWORD SenderID_In, DWORD RecverID_In, CastObject &CastObject_In)
{
if(m_TCPSocket == NULL || SenderID_In == 0 || RecverID_In == 0)
return false;
CPacket* lpBuffer = new CPacket(sizeof(PktCOInfo), CmdCharCastObjectInfo, 0, 0);
LPPktCOInfo lpCOInfoPt = reinterpret_cast<LPPktCOInfo>(lpBuffer->GetBuf());
lpCOInfoPt->m_dwSenderID = SenderID_In;
lpCOInfoPt->m_dwReceiverID = RecverID_In;
lpCOInfoPt->m_sCastObject = CastObject_In;
lpBuffer->WrapPacket(true);
// UDPSendList(lpBuffer->GetWSABuf(), m_ClientList);
UDPSendList(lpBuffer->GetWSABuf(), m_InstanceClientList);
lpBuffer->Release();
DeleteInstanceUDPList();
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// <09><>Ŷ <20><><EFBFBD><EFBFBD>[In]
// <09>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// <09>޴<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// ij<><C4B3>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharCastObjectInfo(char *pBuffer_In, DWORD *SenderID_Out, DWORD *RecverID_Out, LPCastObject lpCastObject)
{
LPPktCOInfo lpCOInfoPt = (LPPktCOInfo)pBuffer_In;
if(lpCOInfoPt == NULL)
return WrongParameter;
*SenderID_Out = lpCOInfoPt->m_dwSenderID;
*RecverID_Out = lpCOInfoPt->m_dwReceiverID;
*lpCastObject = lpCOInfoPt->m_sCastObject;
if(lpCOInfoPt->Error() != NoError)
return lpCOInfoPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD> <20><>ġ [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// <09><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ[In]
// <09><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD>[In]
// <09><><EFBFBD><EFBFBD> <20><>ġ[In]
// <09><><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD>[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharInstallSocket(DWORD CharID_In, Item::ItemPos* lpEquipIndex_In, Item::ItemPos* lpSocket_In)
{
if(m_TCPSocket == NULL || CharID_In == 0)
return false;
LPPktIS lpISPt = reinterpret_cast<LPPktIS>(GetSendBuffer());
lpISPt->InitPtHead(sizeof(PktIS), CmdCharInstallSocket, 0, 0);
lpISPt->m_dwCharID = CharID_In;
lpISPt->m_equipPos = *lpEquipIndex_In;
lpISPt->m_gemPos = *lpSocket_In;
PutSendBuffer(true);
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD> <20><>ġ [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// <09><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ[Out]
// <09><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD>[Out]
// <09><><EFBFBD><EFBFBD> <20><>ġ[Out]
// <09><><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD>[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharInstallSocket(char *pBuffer_In, DWORD *CharID_Out, Item::ItemPos* lpEquipIndex_Out,
Item::ItemPos* lpSocket_Out, unsigned short *Size_Out, char **lppBuffer_Out)
{
LPPktISAck lpISAckPt = (LPPktISAck)pBuffer_In;
if (lpISAckPt == NULL) {
return WrongParameter;
}
*CharID_Out = lpISAckPt->m_dwCharID;
*lpEquipIndex_Out = lpISAckPt->m_equipPos;
*lpSocket_Out = lpISAckPt->m_gemPos;
*Size_Out = lpISAckPt->m_wSize;
if (lpISAckPt->m_wSize > 0) {
*lppBuffer_Out = (char *)(pBuffer_In + sizeof(PktISAck));
}
if(lpISAckPt->Error() != NoError) {
return lpISAckPt->Error();
}
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20>ڻ<EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharSuicide(DWORD CharID_In)
{
if(m_TCPSocket == NULL || CharID_In == 0)
return false;
LPPktSC lpSCPt = reinterpret_cast<LPPktSC>(GetSendBuffer());
lpSCPt->InitPtHead(sizeof(PktSC), CmdCharSuicide, 0, 0);
lpSCPt->m_dwCharID = CharID_In;
PutSendBuffer(true);
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20>ڻ<EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// ij<><C4B3><EFBFBD><EFBFBD> <20><>ġ[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharSuicide(char *pBuffer_In, DWORD *CharID_Out, LPPOS lpPos_Out)
{
LPPktSCAck lpSCAckPt = (LPPktSCAck)pBuffer_In;
if(lpSCAckPt == NULL)
return WrongParameter;
*CharID_Out = lpSCAckPt->m_dwCharID;
*lpPos_Out = lpSCAckPt->m_Pos;
if(lpSCAckPt->Error() != NoError)
return lpSCAckPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><>ġ <20><><EFBFBD>ε<EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// Ŀ<>ǵ<EFBFBD>[In]
// <09><>ġ[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharBindPos(DWORD NPCID_In, unsigned char Cmd_In, LPPOS lpPos_In, char Zone_In)
{
if(m_TCPSocket == NULL || NPCID_In == 0)
return false;
LPPktBP lpBPPt = reinterpret_cast<LPPktBP>(GetSendBuffer());
lpBPPt->InitPtHead(sizeof(PktBP), CmdCharBindPosition, 0, 0);
lpBPPt->m_Pos = *lpPos_In;
lpBPPt->m_dwNPCID = NPCID_In;
lpBPPt->m_cCmd = Cmd_In;
lpBPPt->m_cZone = Zone_In;
PutSendBuffer(true);
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><>ġ <20><><EFBFBD>ε<EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// Ŀ<>ǵ<EFBFBD>[Out]
// <09><>ġ[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharBindPos(char *pBuffer_In, DWORD *NPCID_Out, unsigned char *Cmd_Out, LPPOS lpPos_Out, char *Zone_Out)
{
LPPktBP lpBPPt = (LPPktBP)pBuffer_In;
if(lpBPPt == NULL)
return WrongParameter;
*lpPos_Out = lpBPPt->m_Pos;
*NPCID_Out = lpBPPt->m_dwNPCID;
*Cmd_Out = lpBPPt->m_cCmd;
*Zone_Out = lpBPPt->m_cZone;
if(lpBPPt->Error() != NoError)
return lpBPPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// <09><><EFBFBD><EFBFBD>[Out]
// ij<><C4B3><EFBFBD><EFBFBD> <20>ɷ<EFBFBD>ġ[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharLevelUp(char *pBuffer_In, DWORD *CharID_Out, unsigned char *Level_Out, LPChState lpChState_Out)
{
LPPktLU lpLUPt = (LPPktLU)pBuffer_In;
if(lpLUPt == NULL)
return WrongParameter;
*CharID_Out = lpLUPt->m_dwCharID;
*Level_Out = lpLUPt->m_cLevel;
*lpChState_Out = lpLUPt->m_State;
if(lpLUPt->Error() != NoError)
return lpLUPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// <09><><EFBFBD><EFBFBD>Ʈ[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharIncreasePoint(DWORD CharID_In, unsigned char StateType_In)
{
if(m_TCPSocket == NULL || CharID_In == 0)
return false;
LPPktIP lpIPPt = reinterpret_cast<LPPktIP>(GetSendBuffer());
lpIPPt->InitPtHead(sizeof(PktIP), CmdCharIncreasePoint, 0, 0);
lpIPPt->m_dwCharID = CharID_In;
lpIPPt->m_cStateType = StateType_In;
PutSendBuffer(true);
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// <09><><EFBFBD><EFBFBD>[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharIncreasePoint(char *pBuffer_In, DWORD *CharID_Out, LPChState lpChState_Out)
{
LPPktIPAck lpIPAckPt = (LPPktIPAck)pBuffer_In;
if(lpIPAckPt == NULL)
return WrongParameter;
*CharID_Out = lpIPAckPt->m_dwCharID;
*lpChState_Out = lpIPAckPt->m_State;
if(lpIPAckPt->Error() != NoError)
return lpIPAckPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD>׷<EFBFBD><D7B7>̵<EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharClassUpgrade(DWORD CharID_In, unsigned char ClassID_In)
{
if(m_TCPSocket == NULL || CharID_In == 0)
return false;
LPPktCU lpCUPt = reinterpret_cast<LPPktCU>(GetSendBuffer());
lpCUPt->InitPtHead(sizeof(PktCU), CmdCharClassUpgrade, 0, 0);
lpCUPt->m_dwCharID = CharID_In;
lpCUPt->m_cClass = ClassID_In;
PutSendBuffer(true);
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD>׷<EFBFBD><D7B7>̵<EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// <09><>ų <20>ε<EFBFBD><CEB5><EFBFBD>[Out]
// <09><>ų <20><><EFBFBD>̵<EFBFBD>[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharClassUpgrade(char *pBuffer_In, DWORD *CharID_Out, unsigned short *ClassID_Out, LPChState lpState_Out, char *Index_Out, unsigned short *Skill_Out)
{
LPPktCUAck lpCUAckPt = (LPPktCUAck)pBuffer_In;
if(lpCUAckPt == NULL)
return WrongParameter;
*lpState_Out = lpCUAckPt->m_State;
*CharID_Out = lpCUAckPt->m_dwCharID;
*Skill_Out = lpCUAckPt->m_wSkill;
*ClassID_Out = lpCUAckPt->m_cClass;
*Index_Out = lpCUAckPt->m_cIndex;
if(lpCUAckPt->Error() != NoError)
return lpCUAckPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><>ų <20><> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// <09><>ų <20>ε<EFBFBD><CEB5><EFBFBD>[In]
// <09><>ų <20><><EFBFBD>̵<EFBFBD>[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharSkillLock(DWORD CharID_In, unsigned short SkillID_In, unsigned char Index_In)
{
if(m_TCPSocket == NULL || CharID_In == 0)
return false;
LPPktSk lpSkPt = reinterpret_cast<LPPktSk>(GetSendBuffer());
lpSkPt->InitPtHead(sizeof(PktSk), CmdCharSkillLock, 0, 0);
lpSkPt->m_dwCharID = CharID_In;
lpSkPt->m_wSkill = SkillID_In;
lpSkPt->m_cIndex = Index_In;
PutSendBuffer(true);
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><>ų <20><> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// <09><>ų <20>ε<EFBFBD><CEB5><EFBFBD>[Out]
// <09><>ų <20><><EFBFBD>̵<EFBFBD>[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharSkillLock(char *pBuffer_In, DWORD *CharID_Out, unsigned short *SkillID_Out, unsigned char *Index_Out)
{
LPPktSk lpSkPt = (LPPktSk)pBuffer_In;
if(lpSkPt == NULL)
return WrongParameter;
*CharID_Out = lpSkPt->m_dwCharID;
*SkillID_Out = lpSkPt->m_wSkill;
*Index_Out = lpSkPt->m_cIndex;
if(lpSkPt->Error() != NoError)
return lpSkPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><>ų <20><> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// <09><>ų <20>ε<EFBFBD><CEB5><EFBFBD>[In]
// <09><>ų <20><><EFBFBD>̵<EFBFBD>[In]
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD>[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharSkillUnLock(DWORD CharID_In, unsigned short SkillID_In, unsigned char Index_In, Item::ItemPos* lpIndex_In)
{
if (m_TCPSocket == NULL || CharID_In == 0) {
return false;
}
LPPktSkUL lpSkULPt = reinterpret_cast<LPPktSkUL>(GetSendBuffer());
lpSkULPt->InitPtHead(sizeof(PktSkUL), CmdCharSkillUnLock, 0, 0);
lpSkULPt->m_dwCharID = CharID_In;
lpSkULPt->m_wSkill = SkillID_In;
lpSkULPt->m_cIndex = Index_In;
lpSkULPt->m_itemPos = *lpIndex_In;
PutSendBuffer(true);
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><>ų <20><> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// <09><>ų <20>ε<EFBFBD><CEB5><EFBFBD>[Out]
// <09><>ų <20><><EFBFBD>̵<EFBFBD>[Out]
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD>[Out]
// <09>Ҹ<EFBFBD><D2B8>Ǵ<EFBFBD> <20><>[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharSkillUnLock(char *pBuffer_In, DWORD *CharID_Out, unsigned short *SkillID_Out, unsigned char *Index_Out,
Item::ItemPos* lpIndex_Out, unsigned long *Gold_Out)
{
LPPktSkULAck lpSkULAckPt = (LPPktSkULAck)pBuffer_In;
if(lpSkULAckPt == NULL) {
return WrongParameter;
}
*CharID_Out = lpSkULAckPt->m_dwCharID;
*SkillID_Out = lpSkULAckPt->m_wSkill;
*Index_Out = lpSkULAckPt->m_cIndex;
*Gold_Out = lpSkULAckPt->m_dwGold;
*lpIndex_Out = lpSkULAckPt->m_itemPos;
if (lpSkULAckPt->Error() != NoError) {
return lpSkULAckPt->Error();
}
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// <09><>ų <20>ε<EFBFBD><CEB5><EFBFBD>[In]
// <09><>ų <20><><EFBFBD>̵<EFBFBD>[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharSkillCreate(DWORD CharID_In, unsigned short SkillID_In, unsigned char Index_In)
{
if(m_TCPSocket == NULL || CharID_In == 0)
return false;
LPPktSk lpSkPt = reinterpret_cast<LPPktSk>(GetSendBuffer());
lpSkPt->InitPtHead(sizeof(PktSk), CmdCharSkillCreate, 0, 0);
lpSkPt->m_dwCharID = CharID_In;
lpSkPt->m_wSkill = SkillID_In;
lpSkPt->m_cIndex = Index_In;
PutSendBuffer(true);
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// <09><>ų <20>ε<EFBFBD><CEB5><EFBFBD>[Out]
// <09><>ų <20><><EFBFBD>̵<EFBFBD>[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharSkillCreate(char *pBuffer_In, DWORD *CharID_Out, unsigned short *SkillID_Out, unsigned char *Index_Out)
{
LPPktSk lpSkPt = (LPPktSk)pBuffer_In;
if(lpSkPt == NULL)
return WrongParameter;
*CharID_Out = lpSkPt->m_dwCharID;
*SkillID_Out = lpSkPt->m_wSkill;
*Index_Out = lpSkPt->m_cIndex;
if(lpSkPt->Error() != NoError)
return lpSkPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// <09><>ų <20>ε<EFBFBD><CEB5><EFBFBD>[In]
// <09><>ų <20><><EFBFBD>̵<EFBFBD>[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharSkillErase(DWORD CharID_In, unsigned short SkillID_In, unsigned char Index_In)
{
if(m_TCPSocket == NULL || CharID_In == 0)
return false;
LPPktSk lpSkPt = reinterpret_cast<LPPktSk>(GetSendBuffer());
lpSkPt->InitPtHead(sizeof(PktSk), CmdCharSkillErase, 0, 0);
lpSkPt->m_dwCharID = CharID_In;
lpSkPt->m_wSkill = SkillID_In;
lpSkPt->m_cIndex = Index_In;
PutSendBuffer(true);
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// <09><>ų <20>ε<EFBFBD><CEB5><EFBFBD>[Out]
// <09><>ų <20><><EFBFBD>̵<EFBFBD>[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharSkillErase(char *pBuffer_In, DWORD *CharID_Out, unsigned short *SkillID_Out, unsigned char *Index_Out)
{
LPPktSk lpSkPt = (LPPktSk)pBuffer_In;
if(lpSkPt == NULL)
return WrongParameter;
*CharID_Out = lpSkPt->m_dwCharID;
*SkillID_Out = lpSkPt->m_wSkill;
*Index_Out = lpSkPt->m_cIndex;
if(lpSkPt->Error() != NoError)
return lpSkPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><>Ƽ <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// <09><>Ƽ <20><><EFBFBD>̵<EFBFBD>[Out]
// <09><>Ƽ <20><><EFBFBD><EFBFBD>[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharPartyInfo(char *pBuffer_In, LPPARTY lpParty_Out)
{
LPPktPI lpPIPt = (LPPktPI)pBuffer_In;
if(lpPIPt == NULL)
return WrongParameter;
*lpParty_Out = lpPIPt->m_Party;
if(lpPIPt->Error() != NoError)
return lpPIPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><>Ƽ Ŀ<>ǵ<EFBFBD> [ public ]
//
// Parameter :
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// <09>޴<EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// <09><>Ƽ <20><><EFBFBD>̵<EFBFBD>[In]
// Ŀ<>ǵ<EFBFBD>[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharPartyCmd(DWORD SenderID_In, DWORD ReferenceID_In, DWORD PartyID_In, unsigned short Cmd_In)
{
if(m_TCPSocket == NULL || SenderID_In == 0)
return false;
LPPktPC lpPCPt = reinterpret_cast<LPPktPC>(GetSendBuffer());
lpPCPt->InitPtHead(sizeof(PktPC), CmdCharPartyCmd, 0, 0);
lpPCPt->m_wCmd = Cmd_In;
lpPCPt->m_dwPartyID = PartyID_In;
lpPCPt->m_dwSenderID = SenderID_In;
lpPCPt->m_dwReferenceID = ReferenceID_In;
PutSendBuffer(true);
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><>Ƽ <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharPartyCmd(char *pBuffer_In, LPAddressInfo SenderAddress_Out, char *SenderName_Out, DWORD *SenderID_Out, DWORD *ReferenceID_Out, DWORD *PartyID_Out, unsigned short *Cmd_Out)
{
LPPktPCAck lpPCAckPt = (LPPktPCAck)pBuffer_In;
if(lpPCAckPt == NULL)
return WrongParameter;
*SenderAddress_Out = lpPCAckPt->m_SenderAddressInfo;
strncpy(SenderName_Out, lpPCAckPt->m_strSenderName, 16);
*SenderID_Out = lpPCAckPt->m_dwSenderID;
*ReferenceID_Out = lpPCAckPt->m_dwReferenceID;
*PartyID_Out = lpPCAckPt->m_dwPartyID;
*Cmd_Out = lpPCAckPt->m_cCmd;
if(lpPCAckPt->Error() != NoError)
return lpPCAckPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><>Ƽ <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// <09>޴<EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// <09><>Ƽ <20><><EFBFBD>̵<EFBFBD>[Out]
// Ŀ<>ǵ<EFBFBD>[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharPartyCmdInfo(char *pBuffer_In, DWORD *MemberID_Out, DWORD *PartyID_Out, unsigned short *Cmd_Out)
{
LPPktPCInfo lpPCInfoPt = (LPPktPCInfo)pBuffer_In;
if(lpPCInfoPt == NULL)
return WrongParameter;
*MemberID_Out = lpPCInfoPt->m_dwMemberID;
*PartyID_Out = lpPCInfoPt->m_dwPartyID;
*Cmd_Out = lpPCInfoPt->m_cCmd;
if(lpPCInfoPt->Error() != NoError)
return lpPCInfoPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><>Ƽ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// <09><>Ƽ <20><><EFBFBD>̵<EFBFBD>[In]
// <09>ִ<EFBFBD> HP[In]
// <09><><EFBFBD><EFBFBD> HP[In]
// <09>ִ<EFBFBD> MP[In]
// <09><><EFBFBD><EFBFBD> MP[In]
// æƮ[In]
// <09><>æƮ[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharPartyMemInfo(DWORD CharID_In, DWORD PartyID_In, unsigned char Class_In, char Level_In, unsigned short MaxHP_In, short CurHP_In, unsigned short MaxMP_In, short CurMP_In, DWORD Chant_In, DWORD Enchant_In)
{
if(m_UDPSocket == NULL || CharID_In == 0)
return false;
CPacket* lpBuffer = new CPacket(sizeof(PktPM), CmdCharPartyMemInfo, 0, 0);
LPPktPM lpPMPt = reinterpret_cast<LPPktPM>(lpBuffer->GetBuf());
lpPMPt->m_dwCharID = CharID_In;
lpPMPt->m_dwPartyID = PartyID_In;
lpPMPt->m_cClass = Class_In;
lpPMPt->m_cLevel = Level_In;
lpPMPt->m_wMaxHP = MaxHP_In;
lpPMPt->m_sCurrHP = CurHP_In;
lpPMPt->m_wMaxMP = MaxMP_In;
lpPMPt->m_sCurrMP = CurMP_In;
lpPMPt->m_dwChant = Chant_In;
lpPMPt->m_dwEnchant = Enchant_In;
lpPMPt->m_PublicAddress = m_PubUDPAddress;
lpPMPt->m_PrivateAddress = m_PriUDPAddress;
lpBuffer->WrapPacket(true);
UDPSendList(lpBuffer->GetWSABuf(), m_PartyList);
lpBuffer->Release();
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><>Ƽ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// <09><>Ƽ <20><><EFBFBD>̵<EFBFBD>[Out]
// <09>ִ<EFBFBD> HP[Out]
// <09><><EFBFBD><EFBFBD> HP[Out]
// <09>ִ<EFBFBD> MP[Out]
// <09><><EFBFBD><EFBFBD> MP[Out]
// æƮ[Out]
// <09><>æƮ[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharPartyMemInfo(char *pBuffer_In, DWORD *CharID_Out, DWORD *PartyID_Out, unsigned char *Class_Out, char *Level_Out, unsigned short *MaxHP_Out, unsigned short *CurHP_Out, unsigned short *MaxMP_Out, unsigned short *CurMP_Out, DWORD *Chant_Out, DWORD *Enchant_Out, SOCKADDR_IN* PubAddress_Out, SOCKADDR_IN* PriAddress_Out)
{
LPPktPM lpPMPt = (LPPktPM)pBuffer_In;
if(lpPMPt == NULL)
return WrongParameter;
*CharID_Out = lpPMPt->m_dwCharID;
*PartyID_Out = lpPMPt->m_dwPartyID;
*Class_Out = lpPMPt->m_cClass;
*Level_Out = lpPMPt->m_cLevel;
*MaxHP_Out = lpPMPt->m_wMaxHP;
*CurHP_Out = lpPMPt->m_sCurrHP;
*MaxMP_Out = lpPMPt->m_wMaxMP;
*CurMP_Out = lpPMPt->m_sCurrMP;
*Chant_Out = lpPMPt->m_dwChant;
*Enchant_Out = lpPMPt->m_dwEnchant;
*PubAddress_Out = lpPMPt->m_PublicAddress;
*PriAddress_Out = lpPMPt->m_PrivateAddress;
if(lpPMPt->Error() != NoError)
return lpPMPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><>Ƽ ã<><C3A3> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharPartyFind(DWORD CharID_In)
{
if (m_TCPSocket == NULL || CharID_In == 0) {
return false;
}
LPPktPF lpPFPt = reinterpret_cast<LPPktPF>(GetSendBuffer());
lpPFPt->InitPtHead(sizeof(PktPF), CmdCharPartyFind, 0, 0);
lpPFPt->m_dwCharID = CharID_In;
PutSendBuffer(true);
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><>Ƽ ã<><C3A3> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// <09><>Ƽ<EFBFBD><C6BC> ã<><C3A3> ij<><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>[Out]
// <09><>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD> ã<><C3A3> <20><>Ƽ<EFBFBD><C6BC> <20><>[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharPartyFind(char *pBuffer_In, DWORD *CharID_Out, unsigned char *MemberFindPartyNum_Out, unsigned char *PartyFindMemberNum_Out,
LPMemberFindParty *lppMemberFindParty_Out, LPPartyFindMember *lppPartyFindMember_Out)
{
LPPktPFAck lpPFAckPt = (LPPktPFAck)pBuffer_In;
if (lpPFAckPt == NULL) {
return WrongParameter;
}
*CharID_Out = lpPFAckPt->m_dwCharID;
*MemberFindPartyNum_Out = lpPFAckPt->m_cMemberFindPartyNum;
*PartyFindMemberNum_Out = lpPFAckPt->m_cPartyFindMemberNum;
*lppMemberFindParty_Out = (LPMemberFindParty)(pBuffer_In + sizeof(PktPFAck));
*lppPartyFindMember_Out = (LPPartyFindMember)(pBuffer_In + sizeof(PktPFAck) + (*MemberFindPartyNum_Out * sizeof(MemberFindParty)));
if (lpPFAckPt->Error() != NoError) {
return lpPFAckPt->Error();
}
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>׷<EFBFBD><D7B7>̵<EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// <09><><EFBFBD><EFBFBD> <20><>ġ[In]
// <09><><EFBFBD><EFBFBD> <20>͵<EFBFBD><CDB5><EFBFBD>[In]
// <09><><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD>[In]
// <09><><EFBFBD><EFBFBD> <20><>[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharUpgradeItem(DWORD CharID_In, unsigned char MineralNum_In)
{
if(m_TCPSocket == NULL || CharID_In == 0)
return false;
LPPktUgI lpUgIPt = reinterpret_cast<LPPktUgI>(GetSendBuffer());
lpUgIPt->InitPtHead(sizeof(PktUgI), CmdCharUpgradeItem, 0, 0);
lpUgIPt->m_dwCharID = CharID_In;
lpUgIPt->m_cMineralNum = MineralNum_In;
PutSendBuffer(true);
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>׷<EFBFBD><D7B7>̵<EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// <09><><EFBFBD><EFBFBD> <20><>ġ[Out]
// <09><><EFBFBD><EFBFBD> <20>͵<EFBFBD><CDB5><EFBFBD>[Out]
// <09><><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD>[Out]
// <09><><EFBFBD><EFBFBD> <20><>[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharUpgradeItem(char *pBuffer_In, DWORD *CharID_Out, unsigned char *Size_Out, char **lppBuffer_Out)
{
LPPktUgIAck lpUgIAckPt = (LPPktUgIAck)pBuffer_In;
if(lpUgIAckPt == NULL)
return WrongParameter;
*CharID_Out = lpUgIAckPt->m_dwCharID;
*Size_Out = lpUgIAckPt->m_cSize;
if(lpUgIAckPt->m_cSize > 0)
{
*lppBuffer_Out = (char *)(pBuffer_In + sizeof(PktUgIAck));
}
if(lpUgIAckPt->Error() != NoError)
return lpUgIAckPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> HP <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// HP <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[Out]
// MP <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharHPRegen(char *pBuffer_In, DWORD *CharID_Out, unsigned short *HP_Out, unsigned short *MP_Out)
{
LPPktHP lpHPPt = (LPPktHP)pBuffer_In;
if(lpHPPt == NULL)
return WrongParameter;
*CharID_Out = lpHPPt->m_dwCharID;
*HP_Out = lpHPPt->m_sHP;
*MP_Out = lpHPPt->m_sMP;
if(lpHPPt->Error() != NoError)
return lpHPPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// <09><><EFBFBD><EFBFBD>[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharLevelUpInfo(DWORD CharID_In, unsigned char Level_In)
{
if(m_UDPSocket == NULL || CharID_In == 0)
return false;
CPacket* lpBuffer = new CPacket(sizeof(PktLUInfo), CmdCharLevelUpInfo, 0, 0);
LPPktLUInfo lpLUInfoPt = reinterpret_cast<LPPktLUInfo>(lpBuffer->GetBuf());
lpLUInfoPt->m_dwCharID = CharID_In;
lpLUInfoPt->m_cLevel = Level_In;
lpBuffer->WrapPacket(true);
// if(!UDPSendList(lpBuffer->GetWSABuf(), m_ClientList))
if(!UDPSendList(lpBuffer->GetWSABuf(), m_InstanceClientList))
{
lpBuffer->Release();
DeleteInstanceUDPList();
return false;
}
DeleteInstanceUDPList();
if(!UDPSendList(lpBuffer->GetWSABuf(), m_PartyList))
{
lpBuffer->Release();
return false;
}
lpBuffer->Release();
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// <09><><EFBFBD><EFBFBD>[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharLevelUpInfo(char *pBuffer_In, DWORD *CharID_Out, unsigned char *Level_Out)
{
LPPktLUInfo lpLUInfoPt = (LPPktLUInfo)pBuffer_In;
if(lpLUInfoPt == NULL)
return WrongParameter;
*CharID_Out = lpLUInfoPt->m_dwCharID;
*Level_Out = lpLUInfoPt->m_cLevel;
if(lpLUInfoPt->Error() != NoError)
return lpLUInfoPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(<28><><EFBFBD>嵵) <20><><EFBFBD><EFBFBD> <20><>û [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// <09><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharFameInfo(DWORD CharID_In, unsigned char Cmd_In)
{
if (m_TCPSocket == NULL || CharID_In == 0)
return false;
LPPktFI lpFIPt = reinterpret_cast<LPPktFI>(GetSendBuffer());
lpFIPt->InitPtHead(sizeof(PktFI), CmdCharFameInfo, 0, 0);
lpFIPt->m_dwCharID = CharID_In;
lpFIPt->m_cInfoKind = Cmd_In;
PutSendBuffer(true);
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(<28><><EFBFBD>嵵) <20><><EFBFBD><EFBFBD> <20><>û [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// <09><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>[Out]
// <09><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>[Out]
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>[Out]
// Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharFameInfo(char *pBuffer_In, DWORD *CharID_Out, unsigned char *Cmd_Out,
unsigned long *FameOrMerits_Out, unsigned char *RankingByRace_Out, unsigned char *RankingByClass_Out)
{
LPPktFIAck lpFIAckPt = (LPPktFIAck)pBuffer_In;
if (lpFIAckPt == NULL) {
return WrongParameter;
}
*CharID_Out = lpFIAckPt->m_dwCharID;
*Cmd_Out = lpFIAckPt->m_cInfoKind;
*FameOrMerits_Out = lpFIAckPt->m_dwFameOrMerits;
*RankingByRace_Out = lpFIAckPt->m_cRankingByRace;
*RankingByClass_Out = lpFIAckPt->m_cRankingByClass;
if (lpFIAckPt->Error() != NoError) {
return lpFIAckPt->Error();
}
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD>[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharStallOpen(DWORD CharID_In, char* StallName_In)
{
if (NULL == m_TCPSocket) {
return false;
}
LPPktStO lpStOPt = reinterpret_cast<LPPktStO>(GetSendBuffer());
lpStOPt->InitPtHead(sizeof(PktStO), CmdCharStallOpen, 0, 0);
lpStOPt->m_dwCharID = CharID_In;
strncpy(lpStOPt->m_StallName, StallName_In, PktStO::MAX_STALL_NAME_LEN);
PutSendBuffer(true);
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD>[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharStallOpen(char *pBuffer_In, DWORD *CharID_Out, char* StallName_Out)
{
LPPktStO lpStOPt = (LPPktStO)pBuffer_In;
if (NULL == lpStOPt) {
return WrongParameter;
}
*CharID_Out = lpStOPt->m_dwCharID;
strncpy(StallName_Out, lpStOPt->m_StallName, PktStO::MAX_STALL_NAME_LEN);
if (lpStOPt->Error() != NoError) {
return lpStOPt->Error();
}
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// <09><><EFBFBD><EFBFBD>ũ <20><><EFBFBD><EFBFBD>ü[In]
// <09><><EFBFBD><EFBFBD>[In]
// <09><><EFBFBD><EFBFBD>[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharStallRegisterItem(DWORD CharID_In, TakeType TakeType_In, unsigned long Price_In, unsigned char Cmd_In)
{
if (NULL == m_TCPSocket || 0 == CharID_In) {
return false;
}
LPPktStRI lpStRIPt = reinterpret_cast<LPPktStRI>(GetSendBuffer());
lpStRIPt->InitPtHead(sizeof(PktStRI), CmdCharStallRegisterItem, 0, 0);
lpStRIPt->m_dwCharID = CharID_In;
lpStRIPt->m_TakeType = TakeType_In;
lpStRIPt->m_dwPrice = Price_In;
lpStRIPt->m_cCmd = Cmd_In;
PutSendBuffer(true);
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// <09><><EFBFBD><EFBFBD>ũ <20><><EFBFBD><EFBFBD>ü[Out]
// <09><><EFBFBD><EFBFBD>[Out]
// <09><><EFBFBD><EFBFBD>[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharStallRegisterItem(char *pBuffer_In, DWORD *CharID_Out,
TakeType *TakeType_Out, unsigned long *Price_Out, unsigned char *Cmd_Out)
{
LPPktStRI lpStRIPt = (LPPktStRI)pBuffer_In;
if (NULL == lpStRIPt) {
return WrongParameter;
}
*CharID_Out = lpStRIPt->m_dwCharID;
*TakeType_Out = lpStRIPt->m_TakeType;
*Price_Out = lpStRIPt->m_dwPrice;
*Cmd_Out = lpStRIPt->m_cCmd;
if (lpStRIPt->Error() != NoError) {
return lpStRIPt->Error();
}
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// <09>մ<EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// <09><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharStallEnter(DWORD CustomerID_In, DWORD Owner_In)
{
if (NULL == m_TCPSocket || 0 == CustomerID_In) {
return false;
}
LPPktStE lpStEPt = reinterpret_cast<LPPktStE>(GetSendBuffer());
lpStEPt->InitPtHead(sizeof(PktStE), CmdCharStallEnter, 0, 0);
lpStEPt->m_dwCustomerID = CustomerID_In;
lpStEPt->m_dwOwnerID = Owner_In;
PutSendBuffer(true);
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// <09>մ<EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// <09><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharStallEnter(char *pBuffer_In, DWORD *CustomerID_Out, DWORD *Owner_Out)
{
LPPktStE lpStEPt = (LPPktStE)pBuffer_In;
if (NULL == lpStEPt) {
return WrongParameter;
}
*CustomerID_Out = lpStEPt->m_dwCustomerID;
*Owner_Out = lpStEPt->m_dwOwnerID;
if (lpStEPt->Error() != NoError) {
return lpStEPt->Error();
}
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[Out]
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharStallItemInfo(char *pBuffer_In, unsigned long *StallSize_Out, char **lppStallBuff_Out,
unsigned short *ItemNum_Out, unsigned long **StallPrice_Out)
{
LPPktStIInfo lpPktStIInfo = (LPPktStIInfo)pBuffer_In;
if (lpPktStIInfo == NULL) {
return WrongParameter;
}
*StallSize_Out = lpPktStIInfo->m_dwItemSize;
*lppStallBuff_Out = pBuffer_In + sizeof(PktStIInfo);
*ItemNum_Out = lpPktStIInfo->m_wItemNum;
*StallPrice_Out = reinterpret_cast<unsigned long*>(pBuffer_In + sizeof(PktStIInfo) + lpPktStIInfo->m_dwItemSize);
if (lpPktStIInfo->Error() != NoError) {
return lpPktStIInfo->Error();
}
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// <09><><EFBFBD><EFBFBD>ũ <20><><EFBFBD><EFBFBD>ü[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharSplitItem(DWORD CharID_In, TakeType &TakeType_In)
{
if(m_TCPSocket == NULL || CharID_In == 0)
return false;
LPPktSplt lpSpltPt = reinterpret_cast<LPPktSplt>(GetSendBuffer());
lpSpltPt->InitPtHead(sizeof(PktSplt), CmdCharSplitItem, 0, 0);
lpSpltPt->m_dwCharID = CharID_In;
lpSpltPt->m_TakeType = TakeType_In;
PutSendBuffer(true);
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[Out]
// <09><><EFBFBD><EFBFBD>ũ <20><><EFBFBD><EFBFBD>ü[Out]
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ü <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[Out]
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ü[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharSplitItem(char *pBuffer_In, DWORD *CharID_Out, LPTakeType lpTakeType_Out, unsigned char *Size_Out, char **lppBuffer_Out)
{
LPPktSpItAck lpSpltAckPt = (LPPktSpItAck)pBuffer_In;
if(lpSpltAckPt == NULL)
return WrongParameter;
*CharID_Out = lpSpltAckPt->m_dwCharID;
*lpTakeType_Out = lpSpltAckPt->m_TakeType;
*Size_Out = lpSpltAckPt->m_cSize;
if(lpSpltAckPt->m_cSize > 0)
{
*lppBuffer_Out = (char *)(pBuffer_In + sizeof(PktSpItAck));
}
if(lpSpltAckPt->Error() != NoError)
return lpSpltAckPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20>̵<EFBFBD> [ public ]
//
// Parameter :
// <09>̵<EFBFBD>[In]
// <09><>ų <20><><EFBFBD><EFBFBD>[In]
// <09><>ų <20><> ī<><C4AB>Ʈ[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharQuickSlotMove(TakeType &TakeType_In)
{
if(m_TCPSocket == NULL)
return false;
LPPktQSM lpQSMPt = reinterpret_cast<LPPktQSM>(GetSendBuffer());
lpQSMPt->InitPtHead(sizeof(PktQSM), CmdCharQuickSlotMove, 0, 0);
lpQSMPt->m_TakeType = TakeType_In;
PutSendBuffer(true);
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20>̵<EFBFBD> [ public ]
//
// Parameter :
// <09>̵<EFBFBD>[Out]
// <09><>ų <20><><EFBFBD><EFBFBD>[Out]
// <09><>ų <20><> ī<><C4AB>Ʈ[Out]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharQuickSlotMove(char *pBuffer_In, LPTakeType lpTakeType_Out)
{
LPPktQSM lpQSMPt = (LPPktQSM)pBuffer_In;
if(lpQSMPt == NULL)
return WrongParameter;
*lpTakeType_Out = lpQSMPt->m_TakeType;
if(lpQSMPt->Error() != NoError)
return lpQSMPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><> <20>ٲٱ<D9B2> [ public ]
//
// Parameter :
// <09><><EFBFBD><EFBFBD> <20><>[In] ( 1 = <20><><EFBFBD><EFBFBD>1 & <20><><EFBFBD><EFBFBD>1, 2 = <20><><EFBFBD><EFBFBD>2 & <20><><EFBFBD><EFBFBD>2 )
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharSwitchHand(unsigned char SelectHand_In)
{
if(m_TCPSocket == NULL)
return false;
LPPktSwH lpSwHPt = reinterpret_cast<LPPktSwH>(GetSendBuffer());
lpSwHPt->InitPtHead(sizeof(PktSwH), CmdCharSwitchHand, 0, 0);
lpSwHPt->m_cSelect = SelectHand_In;
PutSendBuffer(true);
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><> <20>ٲٱ<D9B2> [ public ]
//
// Parameter :
// <09><><EFBFBD><EFBFBD> <20><>[Out] ( 1 = <20><><EFBFBD><EFBFBD>1 & <20><><EFBFBD><EFBFBD>1, 2 = <20><><EFBFBD><EFBFBD>2 & <20><><EFBFBD><EFBFBD>2 )
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharSwitchHand(char *pBuffer_In, unsigned char *SelectHand_Out)
{
LPPktSwH lpSwHPt = (LPPktSwH)pBuffer_In;
if(lpSwHPt == NULL)
return WrongParameter;
*SelectHand_Out = lpSwHPt->m_cSelect;
if(lpSwHPt->Error() != NoError)
return lpSwHPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٷ<EFBFBD><D9B7><EFBFBD>(<28><><EFBFBD><EFBFBD>) [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
// <09><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// <09><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharTakeItems(unsigned long CharID_In, unsigned char TakeNum_In, LPTakeType lpTakeTypes_In)
{
if(m_TCPSocket == NULL)
return false;
LPPktTIs lpTIsPt = reinterpret_cast<LPPktTIs>(GetSendBuffer());
lpTIsPt->InitPtHead(sizeof(PktTIs) + sizeof(TakeType) * TakeNum_In, CmdCharTakeItems, 0, 0);
lpTIsPt->m_dwCharID = CharID_In;
lpTIsPt->m_TakeNum = TakeNum_In;
CopyMemory(GetSendBuffer() + sizeof(PktTIs), lpTakeTypes_In, sizeof(TakeType) * TakeNum_In);
PutSendBuffer(true);
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٷ<EFBFBD><D9B7><EFBFBD>(<28><><EFBFBD><EFBFBD>) [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
// <09><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// <09><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharTakeItems(char *pBuffer_In, unsigned long *CharID_Out, unsigned char *TakeNum_Out, LPTakeType *lppTakeTypes_Out)
{
LPPktTIs lpTIsPt = (LPPktTIs)pBuffer_In;
if(lpTIsPt == NULL)
return WrongParameter;
*CharID_Out = lpTIsPt->m_dwCharID;
*TakeNum_Out = lpTIsPt->m_TakeNum;
*lppTakeTypes_Out = (LPTakeType)(pBuffer_In + sizeof(PktTIs));
if(lpTIsPt->Error() != NoError)
return lpTIsPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><> <20>ٷ<EFBFBD><D9B7><EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
// <09>ҽ<EFBFBD> <20><>ġ
// <09><><EFBFBD><EFBFBD> <20><>ġ
// <09><>
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharTakeGold(DWORD CharID_In, unsigned char SrcPos_In, unsigned char DstPos_In, DWORD Gold_In)
{
if(m_TCPSocket == NULL)
return false;
LPPktTG lpTGPt = reinterpret_cast<LPPktTG>(GetSendBuffer());
lpTGPt->InitPtHead(sizeof(PktTG), CmdCharTakeGold, 0, 0);
lpTGPt->m_dwCharID = CharID_In;
lpTGPt->m_cSrcPos = SrcPos_In;
lpTGPt->m_cDstPos = DstPos_In;
lpTGPt->m_dwGold = Gold_In;
PutSendBuffer(true);
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><> <20>ٷ<EFBFBD><D9B7><EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
// <09>ҽ<EFBFBD> <20><>ġ
// <09><><EFBFBD><EFBFBD> <20><>ġ
// <09><>
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharTakeGold(char *pBuffer_In, unsigned long *CharID_Out, unsigned char *SrcPos_Out, unsigned char *DstPos_Out, DWORD *Gold_Out)
{
LPPktTG lpTGPt = (LPPktTG)pBuffer_In;
if(lpTGPt == NULL)
return WrongParameter;
*CharID_Out = lpTGPt->m_dwCharID;
*SrcPos_Out = lpTGPt->m_cSrcPos;
*DstPos_Out = lpTGPt->m_cDstPos;
*Gold_Out = lpTGPt->m_dwGold;
if(lpTGPt->Error() != NoError)
return lpTGPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><>ȯ <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
// <09>޴<EFBFBD><DEB4><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
// <09><><EFBFBD><EFBFBD>
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharExchangeCmd(DWORD SenderID_In, DWORD RecverID_In, unsigned char Cmd_In)
{
if(m_TCPSocket == NULL)
return false;
LPPktExC lpExCPt = reinterpret_cast<LPPktExC>(GetSendBuffer());
lpExCPt->InitPtHead(sizeof(PktExC), CmdCharExchangeCmd, 0, 0);
lpExCPt->m_dwSenderID = SenderID_In;
lpExCPt->m_dwRecverID = RecverID_In;
lpExCPt->m_cCmd = Cmd_In;
PutSendBuffer(true);
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><>ȯ <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
// <09>޴<EFBFBD><DEB4><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
// <09><><EFBFBD><EFBFBD>
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharExchangeCmd(char *pBuffer_In, DWORD *SenderID_Out, DWORD *RecverID_Out, unsigned char *Cmd_Out)
{
LPPktExC lpExCPt = (LPPktExC)pBuffer_In;
if(lpExCPt == NULL)
return WrongParameter;
*SenderID_Out = lpExCPt->m_dwSenderID;
*RecverID_Out = lpExCPt->m_dwRecverID;
*Cmd_Out = lpExCPt->m_cCmd;
if(lpExCPt->Error() != NoError)
return lpExCPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
// <09>ε<EFBFBD><CEB5><EFBFBD>
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharExchangeItem(char *pBuffer_In, DWORD *CharID_Out, DWORD *Size_Out, Item::ItemPos* lpIndex_Out, unsigned char *Type_Out, unsigned char *Num_Out, char **lppBuffer_Out)
{
LPPktExI lpExIPt = (LPPktExI)pBuffer_In;
if(lpExIPt == NULL)
return WrongParameter;
*CharID_Out = lpExIPt->m_dwCharID;
*Size_Out = lpExIPt->m_dwSize;
*lpIndex_Out = lpExIPt->m_itemPos;
*Type_Out = lpExIPt->m_cType;
*Num_Out = lpExIPt->m_cNum;
if(0 == *Size_Out)
{
*lppBuffer_Out = NULL;
}
else
{
*lppBuffer_Out = (char *)(pBuffer_In + sizeof(PktExI));
}
if(lpExIPt->Error() != NoError)
return lpExIPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><> <20><><EFBFBD>ε<EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// <09><><EFBFBD><EFBFBD>
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// <09>ּ<EFBFBD> <20><><EFBFBD><EFBFBD>
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCellBroadCasting(char *pBuffer_In, unsigned short *CharNum_Out, LPAddressInfo *lppAddress_Out)
{
LPPktCB lpCBPt = (LPPktCB)pBuffer_In;
if(lpCBPt == NULL)
return WrongParameter;
*CharNum_Out = lpCBPt->m_sCharNum;
if(0 == *CharNum_Out)
{
*lppAddress_Out = NULL;
}
else
{
*lppAddress_Out = reinterpret_cast<LPAddressInfo>(pBuffer_In + sizeof(PktCB));
}
if(lpCBPt->Error() != NoError)
return lpCBPt->Error();
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><>Ƽ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
// <09><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharPartyData(DWORD CharID_In, unsigned short Cmd_In, unsigned short Len_In, void *Data_In)
{
if(m_UDPSocket == NULL || CharID_In == 0)
return false;
CPacket* lpBuffer = new CPacket(sizeof(PktPMD) + Len_In, CmdCharPartyMemData, 0, 0);
LPPktMD lpMDPt = reinterpret_cast<LPPktMD>(lpBuffer->GetBuf());
lpMDPt->m_dwCharID = CharID_In;
lpMDPt->m_wCmd = Cmd_In;
lpMDPt->m_wLen = Len_In;
CopyMemory(lpBuffer->GetBuf() + sizeof(PktMD), Data_In, Len_In);
lpBuffer->WrapPacket(true);
UDPSendList(lpBuffer->GetWSABuf(), m_PartyList);
lpBuffer->Release();
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20>ɼ<EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
// <09>ź<EFBFBD> <20>ɼ<EFBFBD>
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharControlOption(DWORD CharID_In, RejectOption &Reject_In)
{
if (NULL == m_TCPSocket || 0 == CharID_In) {
return false;
}
LPPktCOp lpCOpPt = reinterpret_cast<LPPktCOp>(GetSendBuffer());
lpCOpPt->InitPtHead(sizeof(PktCOp), CmdCharControlOption, 0, 0);
lpCOpPt->m_dwCharID = CharID_In;
lpCOpPt->m_RejectOption = Reject_In;
PutSendBuffer(true);
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20>ɼ<EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
// <09>ź<EFBFBD> <20>ɼ<EFBFBD>
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleControlOption(char *pBuffer_In, DWORD *CharID_Out, LPRejectOption Reject_Out)
{
LPPktCOp lpCOpPt = (LPPktCOp)pBuffer_In;
if (NULL == lpCOpPt) {
return WrongParameter;
}
*CharID_Out = lpCOpPt->m_dwCharID;
*Reject_Out = lpCOpPt->m_RejectOption;
if (lpCOpPt->Error() != NoError) {
return lpCOpPt->Error();
}
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
// <09>޴<EFBFBD><DEB4><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
// <09><><EFBFBD><EFBFBD>
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharDuelCmd(DWORD SenderID_In, DWORD RecverID_In, unsigned char Cmd_In)
{
if(m_TCPSocket == NULL)
return false;
LPPktDuC lpDuCPt = reinterpret_cast<LPPktDuC>(GetSendBuffer());
lpDuCPt->InitPtHead(sizeof(PktDuC), CmdCharDuelCmd, 0, 0);
lpDuCPt->m_dwSenderID = SenderID_In;
lpDuCPt->m_dwRecverID = RecverID_In;
lpDuCPt->m_cCmd = Cmd_In;
PutSendBuffer(true);
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
// <09>޴<EFBFBD><DEB4><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
// <09><><EFBFBD><EFBFBD>
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharDuelCmd(char *pBuffer_In, DWORD *SenderID_Out, DWORD *RecverID_Out, unsigned char *Cmd_Out)
{
LPPktDuC lpDuCPt = (LPPktDuC)pBuffer_In;
if (lpDuCPt == NULL) {
return WrongParameter;
}
*SenderID_Out = lpDuCPt->m_dwSenderID;
*RecverID_Out = lpDuCPt->m_dwRecverID;
*Cmd_Out = lpDuCPt->m_cCmd;
if (lpDuCPt->Error() != NoError) {
return lpDuCPt->Error();
}
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD>Ʋ <20><><EFBFBD><EFBFBD> <20><>û [ public ]
//
// Parameter :
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD>
// <09><><EFBFBD><EFBFBD> <20><>Ƽ<EFBFBD><C6BC> <20><><EFBFBD><EFBFBD>
// <09><><EFBFBD><EFBFBD> <20><>Ƽ<EFBFBD><C6BC> <20><><EFBFBD>̵<EFBFBD>
// <09><><EFBFBD><EFBFBD> <20><>Ƽ<EFBFBD><C6BC> <20><><EFBFBD><EFBFBD>
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharTeamBattleInfo(char *pBuffer_In, unsigned long *CharID_Out, char *ChallengerName_Out, unsigned char *Cmd_Out,
unsigned char *MemberNum_Out, unsigned long *MemberID_Out, unsigned char *MemberLevel_Out)
{
LPPktTBInfo lpPktTBInfo = (LPPktTBInfo)pBuffer_In;
if (lpPktTBInfo == NULL) {
return WrongParameter;
}
*CharID_Out = lpPktTBInfo->m_dwCharID;
::strncpy(ChallengerName_Out, lpPktTBInfo->m_strChallengerName, CHAR_INFOST::MAX_NAME_LEN);
*Cmd_Out = lpPktTBInfo->m_cCmd;
*MemberNum_Out = lpPktTBInfo->m_cMemberNum;
for (int nIndex = 0; nIndex < *MemberNum_Out; nIndex++)
{
MemberID_Out[nIndex] = *(reinterpret_cast<unsigned long *>(pBuffer_In + sizeof(PktTBInfo) +
nIndex * (sizeof(unsigned long) + sizeof(unsigned char))));
MemberLevel_Out[nIndex] = *(reinterpret_cast<unsigned char *>(pBuffer_In + sizeof(PktTBInfo) +
nIndex * (sizeof(unsigned long) + sizeof(unsigned char)) + sizeof(unsigned long)));
}
if (lpPktTBInfo->Error() != NoError) {
return lpPktTBInfo->Error();
}
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20>ֹ<EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
// <09>ֹ<EFBFBD> Ÿ<><C5B8>
// <09>ֹ<EFBFBD> <20><><EFBFBD><EFBFBD>
// On/Off
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharSpellInfo(char *pBuffer_In, DWORD *CharID_Out, unsigned char *SpellType_Out, unsigned short *EnchantLevel_Out, bool *OnOff_Out)
{
LPPktSpInfo lpSpInfoPt = (LPPktSpInfo)pBuffer_In;
if (lpSpInfoPt == NULL) {
return WrongParameter;
}
*CharID_Out = lpSpInfoPt->m_dwCharID;
*SpellType_Out = lpSpInfoPt->m_cSpellType;
*EnchantLevel_Out = lpSpInfoPt->m_nEnchantLevel;
*OnOff_Out = lpSpInfoPt->m_bOnOff;
if (lpSpInfoPt->Error() != NoError) {
return lpSpInfoPt->Error();
}
return NoError;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// â<><C3A2> <20>α<EFBFBD><CEB1><EFBFBD> [ public ]
//
// Parameter :
// <09>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD>
// <09>н<EFBFBD> <20><><EFBFBD><EFBFBD>
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::StoreLogin(char *Password_In, char PassSave_In)
{
if(m_TCPSocket == NULL)
return false;
CPacket* lpBuffer = new CPacket(sizeof(PktDeposit), CmdDeposit, 0);
PktDeposit* lpDeposit = reinterpret_cast<PktDeposit*>(lpBuffer->GetBuf());
lpDeposit->m_cCmd = PktDeposit::CMD::LOGIN;
memcpy(&lpDeposit->m_szData[0], Password_In, Deposit::PASSWORD_LENGTH);
lpDeposit->m_szData[4] = PassSave_In;
lpBuffer->WrapPacket(true);
if(!Send(m_TCPSocket, lpBuffer->GetWSABuf()))
{
lpBuffer->Release();
return false;
}
lpBuffer->Release();
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// â<><C3A2> <20>α׾ƿ<D7BE> [ public ]
//
// Parameter :
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::StoreLogout(void)
{
if(m_TCPSocket == NULL)
return false;
CPacket* lpBuffer = new CPacket(sizeof(PktDeposit), CmdDeposit, 0);
PktDeposit* lpDeposit = reinterpret_cast<PktDeposit*>(lpBuffer->GetBuf());
lpDeposit->m_cCmd = PktDeposit::CMD::LOGOUT;
lpBuffer->WrapPacket(true);
if(!Send(m_TCPSocket, lpBuffer->GetWSABuf()))
{
lpBuffer->Release();
return false;
}
lpBuffer->Release();
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// <09><><EFBFBD><EFBFBD> <20><> <20><>ȣ
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::StoreBuyTab(char TabNum_In)
{
if(m_TCPSocket == NULL)
return false;
CPacket* lpBuffer = new CPacket(sizeof(PktDeposit), CmdDeposit, 0);
PktDeposit* lpDeposit = reinterpret_cast<PktDeposit*>(lpBuffer->GetBuf());
lpDeposit->m_cCmd = PktDeposit::CMD::BUY_TAB;
lpDeposit->m_szData[0] = TabNum_In;
lpBuffer->WrapPacket(true);
if(!Send(m_TCPSocket, lpBuffer->GetWSABuf()))
{
lpBuffer->Release();
return false;
}
lpBuffer->Release();
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20>н<EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// <09>н<EFBFBD>
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::StoreChangePass(char *Password_In, char *NewPassword_In)
{
if(m_TCPSocket == NULL)
return false;
CPacket* lpBuffer = new CPacket(sizeof(PktDeposit), CmdDeposit, 0);
PktDeposit* lpDeposit = reinterpret_cast<PktDeposit*>(lpBuffer->GetBuf());
lpDeposit->m_cCmd = PktDeposit::CMD::CHANGE_PASS;
memcpy(&lpDeposit->m_szData[0], Password_In, Deposit::PASSWORD_LENGTH);
memcpy(&lpDeposit->m_szData[4], NewPassword_In, Deposit::PASSWORD_LENGTH);
lpBuffer->WrapPacket(true);
if(!Send(m_TCPSocket, lpBuffer->GetWSABuf()))
{
lpBuffer->Release();
return false;
}
lpBuffer->Release();
return true;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [ public ]
//
// Parameter :
// <09>н<EFBFBD>
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool ClientSocket::CharAdmin(unsigned short Cmd_In, char* Name_In, char Zone_In, char Channel_In, unsigned short ProtoTypeID, POS& Pos_In)
{
if(m_TCPSocket == NULL)
return false;
CPacket* lpBuffer = new CPacket(sizeof(PktAdmin), CmdCharAdminCmd, 0);
PktAdmin* lpAdmin = reinterpret_cast<PktAdmin*>(lpBuffer->GetBuf());
lpAdmin->m_usCmd = Cmd_In;
memcpy(lpAdmin->m_stName, Name_In, PktAdmin::MAX_NAME_LEN);
if(0 != ProtoTypeID)
{
lpAdmin->m_usProtoTypeID = ProtoTypeID;
}
else
{
lpAdmin->m_ZoneInfo.m_cZone = Zone_In;
lpAdmin->m_ZoneInfo.m_cChannel = Channel_In;
}
lpAdmin->m_Position = Pos_In;
lpBuffer->WrapPacket(true);
if(!Send(m_TCPSocket, lpBuffer->GetWSABuf()))
{
lpBuffer->Release();
return false;
}
lpBuffer->Release();
return true;
}
DWORD ClientSocket::HandleDeposit(char *pBuffer_In, unsigned char *Cmd_Out, DWORD *Gold_Out, char *PassSave_Out)
{
PktDeposit* lpDepositPt = (PktDeposit*)pBuffer_In;
if (lpDepositPt == NULL) {
return WrongParameter;
}
*Cmd_Out = lpDepositPt->m_cCmd;
memcpy(Gold_Out, &lpDepositPt->m_szData[0], sizeof(DWORD));
*PassSave_Out = lpDepositPt->m_szData[4];
if (lpDepositPt->Error() != NoError) {
return lpDepositPt->Error();
}
return NoError;
}
// ģ<><C4A3> <20><><EFBFBD><EFBFBD>
bool ClientSocket::CharFriendAddRequest(char* szName_In, PktFriendAddReq::CMD addType)
{
// ģ<><C4A3> <20>Ǵ<EFBFBD> <20>ź<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20>߰<EFBFBD><DFB0>Ѵ<EFBFBD>.
if(m_TCPSocket == NULL)
return false;
switch(addType)
{
case PktFriendAddReq::ADD_FRIEND_REQ:
case PktFriendAddReq::BAN_FRIEND_REQ:
break;
default:
return false;
};
CPacket* lpBuffer = new CPacket(sizeof(PktFriendAddReq), CmdFriendAddRequest, 0);
PktFriendAddReq* lpPktFriendAddRequest = reinterpret_cast<PktFriendAddReq*>(lpBuffer->GetBuf());
memcpy(lpPktFriendAddRequest->m_szName, szName_In, PktFriendAddReq::MAX_NAME);
lpPktFriendAddRequest->m_cCmd = addType;
lpBuffer->WrapPacket(true);
if(!Send(m_TCPSocket, lpBuffer->GetWSABuf()))
{
lpBuffer->Release();
return false;
}
lpBuffer->Release();
return true;
}
bool ClientSocket::CharFriendRemoveRequest(unsigned long dwCID, PktFriendRemoveReq::CMD removeType)
{
// ģ<><C4A3> <20>Ǵ<EFBFBD> <20>ź<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
if(m_TCPSocket == NULL)
return false;
CPacket* lpBuffer = new CPacket(sizeof(PktFriendRemoveReq), CmdFriendRemoveRequest, 0);
PktFriendRemoveReq* lpPktFriendRemoveRequest = reinterpret_cast<PktFriendRemoveReq*>(lpBuffer->GetBuf());
lpPktFriendRemoveRequest->m_cCmd = removeType;
lpPktFriendRemoveRequest->m_dwCID = dwCID;
lpBuffer->WrapPacket(true);
if(!Send(m_TCPSocket, lpBuffer->GetWSABuf()))
{
lpBuffer->Release();
return false;
}
lpBuffer->Release();
return true;
}
bool ClientSocket::CharFriendEtcRequest(unsigned long dwCID, unsigned long dwData, PktFriendEtc::CMD etcType)
{
if(m_TCPSocket == NULL)
return false;
switch(etcType)
{
case PktFriendEtc::SETGROUP:
break;
default:
return false;
};
CPacket* lpBuffer = new CPacket(sizeof(PktFriendEtc), CmdFriendEtcRequest, 0);
PktFriendEtc* lpPktFriendEtc = reinterpret_cast<PktFriendEtc*>(lpBuffer->GetBuf());
lpPktFriendEtc->m_dwCID = dwCID;
lpPktFriendEtc->m_dwData = dwData;
lpPktFriendEtc->m_cCmd = etcType;
lpBuffer->WrapPacket(true);
if(!Send(m_TCPSocket, lpBuffer->GetWSABuf()))
{
lpBuffer->Release();
return false;
}
lpBuffer->Release();
return true;
}
// ģ<><C4A3> <20><><EFBFBD><EFBFBD>Ʈ, <20>ź<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20>´<EFBFBD>.
DWORD ClientSocket::HandleCharFriendDB(char *pBuffer_In, unsigned char* cDataType_Out, char **ppFriendListData_Out, DWORD *dwDataSize_Out)
{
PktFriendDB* lpPktFriendDB = reinterpret_cast<PktFriendDB*>(pBuffer_In);
switch(lpPktFriendDB->m_cCmd)
{
case PktFriendDB::FRIEND_LIST:
case PktFriendDB::BAN_LIST:
*cDataType_Out = lpPktFriendDB->m_cCmd;
*dwDataSize_Out = lpPktFriendDB->m_dwData;
*ppFriendListData_Out = pBuffer_In + sizeof(PktFriendDB);
break;
default:
return 1;
};
return lpPktFriendDB->GetError();
}
// <20><><EFBFBD><EFBFBD> Ack<63><6B> <20>´<EFBFBD>. (ģ<><C4A3>, <20>ź<EFBFBD><C5BA><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> Ack, ģ<><C4A3><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD>, <20>α׾ƿ<D7BE> <20><><EFBFBD><EFBFBD> <20>뺸)
DWORD ClientSocket::HandleCharFriendAck(char *pBuffer_In, unsigned char* cCmd_Out, DWORD *dwCID_Out)
{
PktFriendAck* lpPktFriendAck = reinterpret_cast<PktFriendAck*>(pBuffer_In);
*cCmd_Out = lpPktFriendAck->m_cCmd;
*dwCID_Out = lpPktFriendAck->m_dwCID;
return lpPktFriendAck->GetError();
}
// <20><><EFBFBD><EFBFBD> ģ<><C4A3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20>´<EFBFBD>.
DWORD ClientSocket::HandleCharFriendRegistered(char *pBuffer_In, char* szName_Out)
{
PktFriendAddReq* lpPktFriendAddRequest = reinterpret_cast<PktFriendAddReq*>(pBuffer_In);
memcpy(szName_Out, lpPktFriendAddRequest->m_szName, PktFriendAddReq::MAX_NAME);
return lpPktFriendAddRequest->GetError();
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD>ʽ<EFBFBD> [ public ]
//
// Parameter :
// <09><><EFBFBD><EFBFBD>
// <09><><EFBFBD>ʽ<EFBFBD> <20><><EFBFBD><EFBFBD>
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
DWORD ClientSocket::HandleCharEliteBonus(char *pBuffer_In, char *Nation_Out, unsigned char *Level_Out)
{
LPPktEB lpEBPt = (LPPktEB)pBuffer_In;
if (lpEBPt == NULL) {
return WrongParameter;
}
*Nation_Out = lpEBPt->m_EliteBonus.m_cNation;
*Level_Out = lpEBPt->m_EliteBonus.m_cLevel;
if (lpEBPt->Error() != NoError) {
return lpEBPt->Error();
}
return NoError;
}