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>
215 lines
6.3 KiB
C++
215 lines
6.3 KiB
C++
#ifndef _CHAR_FRIEND_PACKET_H_
|
|
#define _CHAR_FRIEND_PACKET_H_
|
|
|
|
// CharFriendPacket.h
|
|
#include <Network/Packet/PacketBase.h>
|
|
#pragma pack(1)
|
|
|
|
/*
|
|
struct PktFriendAddReq : public PktBase CMD : 0x64
|
|
struct PktFriendRemoveReq : public PktBase CMD : 0x65
|
|
struct PktFriendEtc : public PktBase CMD : 0x66
|
|
struct PktFriendAck : public PktBase CMD : 0x67
|
|
struct PktFriendDB : public PktBase CMD : 0x68
|
|
|
|
친구 관련 Operations
|
|
|
|
<Client->GameServer>
|
|
|
|
친구 등록 : PktFriendAddReq
|
|
거부 등록 : PktFriendAddReq
|
|
친구 삭제 : PktFriendRemoveReq
|
|
거부 삭제 : PktFriendRemoveReq
|
|
그룹 설정 : PktFriendEtc(Ack없음)
|
|
|
|
<GameServer->Client>
|
|
|
|
친구 리스트 주기 : PktFriendDB
|
|
거부 리스트 추기 : PktFriendDB
|
|
|
|
친구 등록 Ack : PktFriendAck
|
|
친구 삭제 Ack : PktFriendAck
|
|
거부 등록 Ack : PktFriendAck
|
|
거부 삭제 Ack : PktFriendAck
|
|
|
|
친구 로그인 : PktFriendAck
|
|
친구 로그아웃 : PktFriendAck
|
|
친구 등록당함 : PktFriendAddReq
|
|
|
|
|
|
<GameServer->DBAgent>
|
|
|
|
친구 등록 : PktFriendDB
|
|
거부 등록 : PktFriendDB
|
|
친구 제거 : PktFriendDB
|
|
거부 제거 : PktFriendDB
|
|
그룹 세팅 : PktFriendDB
|
|
|
|
|
|
<DBAgent->GameServer>
|
|
|
|
친구 리스트 주기 : PktFriendDB
|
|
거부 리스트 주기 : PktFriendDB
|
|
*/
|
|
|
|
|
|
struct FriendInfo
|
|
{
|
|
private:
|
|
|
|
enum StatusMask
|
|
{
|
|
IS_LOGINED = 0x00000001,
|
|
GROUP = 0x000000F0
|
|
};
|
|
|
|
public:
|
|
|
|
enum { MAX_NAME = 16 };
|
|
|
|
unsigned long m_dwStatusFlag;
|
|
char m_szName[MAX_NAME];
|
|
|
|
bool IsLogined() { return (0 != (m_dwStatusFlag & IS_LOGINED)); }
|
|
void SetLoginStatus(bool bLogined)
|
|
{
|
|
if(bLogined) { m_dwStatusFlag |= IS_LOGINED; }
|
|
else { m_dwStatusFlag &= ~IS_LOGINED; }
|
|
}
|
|
|
|
unsigned long GetGroup() { return ((m_dwStatusFlag & GROUP) >> 4); }
|
|
bool SetGroup(unsigned long dwGroup)
|
|
{
|
|
if(0xF < dwGroup) { return false; }
|
|
m_dwStatusFlag = (m_dwStatusFlag & (~GROUP)) | (dwGroup << 4);
|
|
return true;
|
|
}
|
|
};
|
|
|
|
|
|
struct BanInfo
|
|
{
|
|
enum { MAX_NAME = 16 };
|
|
char m_szName[MAX_NAME];
|
|
};
|
|
|
|
|
|
|
|
// 추가 패킷
|
|
struct PktFriendAddReq : public PktBase
|
|
{
|
|
enum { MAX_NAME = 16 };
|
|
|
|
enum CMD
|
|
{
|
|
ADD_FRIEND_REQ = 0, // 친구 등록 (Client->GameServer), m_szName는 등록할 사람의 이름.
|
|
BAN_FRIEND_REQ = 1, // 거부 등록 (Client->GameServer), m_szName은 등록할 사람의 이름.
|
|
ADDED_INFO = 2 // 친구가 등록됨 (GameServer->Client), m_szName은 나를 등록한 사람의 이름.
|
|
};
|
|
|
|
char m_szName[MAX_NAME]; // 등록한 사람 이름.
|
|
unsigned char m_cCmd;
|
|
};
|
|
|
|
|
|
// 제거 패킷
|
|
struct PktFriendRemoveReq : public PktBase
|
|
{
|
|
enum CMD
|
|
{
|
|
REMOVE_FRIEND_REQ = 0, // 친구 제거 (Client->GameServer), m_dwCID는 제거할 사람의 CID.
|
|
REMOVE_BAN_REQ = 1, // 거부 등록 제거 (Client->GameServer), m_dwCID는 제거할 사람의 CID.
|
|
};
|
|
|
|
unsigned long m_dwCID; // 대상자 CID;
|
|
unsigned char m_cCmd;
|
|
};
|
|
|
|
|
|
// 기타 패킷
|
|
struct PktFriendEtc : public PktBase
|
|
{
|
|
enum CMD
|
|
{
|
|
SETGROUP = 0, // 그룹 등록 (Client->GameServer),
|
|
// m_dwCID는 그룹 세팅할 사람의 CID, m_dwData는 바뀔 그룹 번호
|
|
|
|
};
|
|
|
|
unsigned long m_dwCID;
|
|
unsigned long m_dwData;
|
|
unsigned char m_cCmd;
|
|
};
|
|
|
|
|
|
// 친구 관련 패킷 ( Client <--> GameServer )
|
|
struct PktFriendAck : public PktBase
|
|
{
|
|
enum CMD
|
|
{
|
|
ADD_FRIEND_ACK = 0, // 친구 등록 Ack (GameServer->Client)
|
|
// 가능한 에러 : SERVER_ERROR (서버 에러)
|
|
// NOT_LOGINED (로그인되지 않은 캐릭터를 등록하려 함)
|
|
// REJECTED (거부 리스트에 있음)
|
|
// LIST_FULL (친구 리스트가 꽉 차 있음)
|
|
|
|
REMOVE_FRIEND_ACK = 1, // 친구 제거 Ack (GameServer->Client)
|
|
// 가능한 에러 : SERVER_ERROR (서버 에러)
|
|
|
|
ADD_BAN_ACK = 2, // 거부 등록 Ack (GameServer->Client)
|
|
// 가능한 에러 : SERVER_ERROR (서버 에러)
|
|
// NOT_LOGINED (로그인되지 않은 캐릭터를 등록하려 함)
|
|
// LIST_FULL (친구 리스트가 꽉 차 있음)
|
|
|
|
REMOVE_BAN_ACK = 3, // 거부 제거 Ack (GameServer->Client)
|
|
// 가능한 에러 : SERVER_ERROR (서버 에러)
|
|
|
|
FRIEND_LOGIN = 4, // 친구 로그인 (GameServer->Client), m_dwCID는 로그인한 친구의 CID
|
|
FRIEND_LOGOUT = 5 // 친구 로그아웃 (GameServer->Client), m_dwCID는 로그아웃한 친구의 CID
|
|
};
|
|
|
|
enum FriendERROR
|
|
{
|
|
SERVER_ERROR = 1,
|
|
NOT_LOGINED = 2,
|
|
REJECTED = 3,
|
|
LIST_FULL = 4
|
|
};
|
|
|
|
unsigned long m_dwCID;
|
|
unsigned char m_cCmd;
|
|
};
|
|
|
|
|
|
// 친구 관련 패킷
|
|
struct PktFriendDB : public PktBase
|
|
{
|
|
enum CMD
|
|
{
|
|
ADD_FRIEND = 0, // 친구 등록 (GameServer->DBAgent) Owner가 Reference를 등록.
|
|
REMOVE_FRIEND = 1, // 친구 제거 (GameServer->DBAgent) Owner가 Reference를 제거.
|
|
ADD_BAN = 2, // 거부 등록 (GameServer->DBAgent) Owner가 Reference를 등록.
|
|
REMOVE_BAN = 3, // 거부 제거 (GameServer->DBAgent) Owner가 Reference를 제거.
|
|
|
|
SETGROUP = 4, // 그룹 세팅 (GameServer->DBAgent)
|
|
// Owner가 Reference를 m_dwData에 들어 있는 그룹으로 세팅.
|
|
|
|
FRIEND_LIST = 5, // 친구 리스트 (DBAgent->GameServer, GameServer->Client)
|
|
// CIDTable에서 SerializeOut한 데이터가 뒤에 붙는다.
|
|
// Reference는 의미 없음. m_dwData는 뒤에 붙는 데이터의 크기.
|
|
|
|
BAN_LIST = 6, // 거부 리스트 (DBAgent->GameServer, GameServer->Client)
|
|
// CIDTable에서 SerializeOut한 데이터가 뒤에 붙는다.
|
|
// Reference는 의미 없음. m_dwData는 뒤에 붙는 데이터의 크기.
|
|
};
|
|
|
|
unsigned long m_dwOwnerUID; // 등록 하는 사람 UID
|
|
unsigned long m_dwOwnerCID; // 등록 하는 사람 CID
|
|
unsigned long m_dwReferenceCID; // 등록 되는 사람 CID
|
|
unsigned long m_dwData; // Data
|
|
unsigned char m_cCmd;
|
|
};
|
|
|
|
#pragma pack()
|
|
|
|
#endif |