Files
Client/Server/RylServerProject/RylServerLibrary/Network/Packet/PacketStruct/GuildPacket.h
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

611 lines
18 KiB
C++

#ifndef _GUILD_PACKET_H_
#define _GUILD_PACKET_H_
#include <Network/Packet/PacketBase.h>
#include <Creature/Character/CharacterClass.h>
#include <Creature/CreatureStructure.h>
#include <Community/Guild/GuildConstants.h>
#include <Community/Guild/GuildStructure.h>
#pragma pack(1)
using namespace Guild;
// 길드 생성
struct PktCreateGuild : public PktBase
{
enum PktCreateGuildErr
{
FAIL_ALREADY_NAME = 2, // 이미 존재하는 이름
FAIL_DISSOLVE_GUILD = 3, // 길드 해체
FAIL_INVALID_NAME = 4 // 부적절한 이름
};
enum DissolveReason
{
NONE_LOGIN = 1, // 오랫동안 아무도 로그인하지 않음
MIN_MEMBER_TIMEOUT = 2, // 길드원이 최소 인원 미만인 채 일정 시간 경과
NONE_NEXT_GUILDMASTER_BY_NONE_LOGIN = 3, // 일정기간 길드마스터가 로그인하지 않아, 권한 이양하려 할 시에 길마가 없을 경우
NONE_NEXT_GUILDMASTER_BY_GUILDMASTER_OUT = 4, // 길드마스터 탈퇴시에 권한 이양하려 할 시에 길마가 없을 경우
NONE_NEXT_GUILDMASTER_BY_GUILDMASTER_DELETED = 5 // 길드마스터 삭제시에 권한 이양하려 할 시에 길마가 없을 경우
};
unsigned long m_dwCID;
unsigned long m_dwGID;
unsigned char m_cInclination;
char m_szGuildName[MAX_GUILD_NAME_LEN];
};
// 길드 리스트 (가변 길이) + 길드 정보
struct PktGuildList : public PktBase
{
enum { MAX_NUM_PER_PAGE = 10 };
unsigned long m_dwCID; // 캐릭터 아이디
unsigned char m_cSortCmd; // 명령
unsigned char m_cPage; // 페이지
unsigned char m_cSmallNodeNum; // 노드 수 (C -> S : 체크섬 노드, S -> C : 간략 노드)
unsigned char m_cLargeNodeNum; // 노드 수 (전체 정보 노드)
};
// 길드 정보 (체크섬)
struct GuildCheckSumNode
{
unsigned long m_dwGID; // 길드 아이디
unsigned long m_dwCheckSum; // 체크섬
};
// 길드 정보 (종종 변하지만 간혹 요청되는 자잘한 것들)
struct GuildSmallInfoNode
{
// TODO : 국가, 레벨, 길드 이름은 GuildLargeInfoNode로 빼면 될 듯 합니다.
// (국가와 길드 이름은 변경되지 않습니다. 레벨은 마크나 관계처럼 변경시마다 브로드캐스팅하면 됩니다.)
// 더불어 길드 생성시 생성되는 길드의 GuildLargeInfoNode를 브로드캐스팅해야 합니다.
// (이 때 주의할 점은 길드 생성 패킷 전송 당시엔 마스터가 가입하지 않은 상태이므로 마스터 이름을 별도로 넣어줘야 합니다.)
unsigned long m_dwGID; // 길드 아이디
unsigned char m_cIndex; // 리스트상의 인덱스
unsigned char m_cInclination; // 길드 성향
unsigned short m_wRank; // 순위
unsigned long m_dwFame; // 명성
unsigned char m_cLevel; // 레벨
unsigned char m_cCurrentMemberNum; // 인원수
char m_szName[MAX_GUILD_NAME_LEN]; // 길드 이름
char m_szMasterName[MAX_MEMBER_NAME_LEN]; // 마스터 이름
GuildSmallInfoNode()
: m_dwGID(0), m_cIndex(0), m_cInclination(0), m_wRank(0), m_dwFame(0), m_cLevel(0), m_cCurrentMemberNum(0)
{
std::fill_n(m_szName, int(MAX_GUILD_NAME_LEN), 0);
std::fill_n(m_szMasterName, int(MAX_MEMBER_NAME_LEN), 0);
}
GuildSmallInfoNode(unsigned long dwGID, unsigned char cIndex, unsigned char cInclination,
unsigned short wRank, unsigned long dwFame, unsigned char cLevel,
unsigned char cCurrentMemberNum, const char* szGuildName, const char* szMasterName)
: m_dwGID(dwGID), m_cIndex(cIndex), m_cInclination(cInclination),
m_wRank(wRank), m_dwFame(dwFame), m_cLevel(cLevel), m_cCurrentMemberNum(cCurrentMemberNum)
{
if (NULL != szGuildName)
{
strncpy(m_szName, szGuildName, MAX_GUILD_NAME_LEN);
}
if (NULL != szMasterName)
{
strncpy(m_szMasterName, szMasterName, MAX_MEMBER_NAME_LEN);
}
}
};
// 길드 정보 (모두)
struct GuildLargeInfoNode : public GuildSmallInfoNode
{
char m_szMark[MAX_MARK_SIZE]; // 마크
unsigned char m_cRelationByMine; // 클라이언트(유저)가 이 길드에 맺은 길드 관계
unsigned char m_cRelationByTarget; // 이 길드가 클라이언트(유저)에게 맺은 길드 관계
GuildLargeInfoNode()
: GuildSmallInfoNode(), m_cRelationByMine(0), m_cRelationByTarget(0)
{
std::fill_n(m_szMark, int(MAX_MARK_SIZE), 0);
}
GuildLargeInfoNode(unsigned long dwGID, unsigned char cIndex, unsigned char cInclination,
unsigned short wRank, unsigned long dwFame, unsigned char cLevel,
unsigned char cCurrentMemberNum, const char* szMasterName, const char* szGuildName,
const char* szMark, unsigned char cRelationByMine, unsigned char cRelationByTarget)
: GuildSmallInfoNode(dwGID, cIndex, cInclination, wRank, dwFame, cLevel, cCurrentMemberNum, szGuildName, szMasterName),
m_cRelationByMine(cRelationByMine), m_cRelationByTarget(cRelationByTarget)
{
if (NULL != szMark)
{
memcpy(m_szMark, szMark, MAX_MARK_SIZE);
}
}
};
// 길드 멤버 관련 명령
struct PktGuildCmd : public PktBase
{
enum GuildCmd
{
GC_INVITE = 0, // 초대
GC_JOIN = 1, // 가입 (초대에 의한)
GC_REFUSE = 2, // 거절 (초대에 대한)
GC_ASK_ENTER = 3, // 가입 신청
GC_ASK_LEAVE = 4, // 탈퇴 신청
GC_KICK = 5, // 강제 탈퇴
GC_SETUP_TITLE = 6, // 직위 변경
GC_LOGINOUT = 7, // 로그인/아웃
GC_RANK_UP = 8, // 서열 위로
GC_RANK_DOWN = 9, // 서열 아래로
GC_TACTICS = 10, // 용병 가입 신청.
GC_TACTICS_JOIN = 11, // 용병 가입 초대.
GC_TACTICS_TITLE = 12, // 용병 허가.
GC_TACTICS_KICK = 13, // 용병 삭제.
GC_TACTICS_LEAVE = 14, // 용병 탈퇴.
GC_TACTICS_REQUEST = 15, // 길드 전쟁 중 용병 허가 시 캐릭터 확인 요청.
};
enum PktGuildCmdErr
{
FAIL_NOT_MEMBER = 2, // 길드원이 아님
FAIL_NOT_RIGHT = 3, // 권한이 없음
FAIL_ALREADY_MEMBER = 4, // 이미 길드원임
FAIL_OVER_MEMBER = 5, // 길드 정원 초과
FAIL_NATION = 6, // 다른 국가의 길드
FAIL_DIFFERENCE_TITLE = 7, // 다른 직위로의 서열 변경
FAIL_OVER_MEMBER_NUM = 8, // 길드원 수 범위를 초과하는 서열 변경
FAIL_GUILDWAR_TIME_KICK = 9, // 길드전쟁 시간에 탈퇴를 시도하는 경우
FAIL_TACTICS_LIMITLEVEL = 10, // 용병 신청 레벨이 안되는 캐릭터.
FAIL_TACTICS_NATION = 11, // 국적이 다른 캐릭터.
FAIL_TACTICS_GUILDJOIN = 12, // 길드나 용병에 가입되어있거나 신청중인 캐릭터.
FAIL_TACTICS_OVER_MEMBER = 13, // 길드 정원 초과.
FAIL_TACTICS_LOGOUT = 14 // 용병 허가 시 로그아웃 상태일때.
};
unsigned long m_dwGID; // 길드 아이디
unsigned long m_dwSenderID; // 캐릭터 아이디 (주체)
unsigned long m_dwReferenceID; // 참조 아이디 (대상 캐릭터/서버 아이디/권한 비트)
char m_szGuildName[MAX_GUILD_NAME_LEN]; // 길드 이름
char m_szSenderName[MAX_MEMBER_NAME_LEN]; // 캐릭터 이름 (주체)
unsigned short m_wCmd; // 명령
};
// 멤버 리스트 (가변 길이) + 멤버 정보
struct PktGuildMemberList : public PktBase
{
enum { MAX_NUM_PER_PAGE = 10 };
unsigned long m_dwCID; // 캐릭터 아이디
unsigned char m_cMemberType; // 멤버리스트, 용병리스트
unsigned char m_cSortCmd; // 명령 (Guild::MemberSort)
unsigned char m_cPage; // 페이지
unsigned char m_cTotalMemberNum; // 총 멤버 수
unsigned char m_cNodeNum; // 노드 수 (멤버 노드)
};
// 멤버 정보
struct GuildMemberInfoNode
{
unsigned long m_dwCID;
char m_szName[MAX_MEMBER_NAME_LEN];
unsigned char m_cTactics;
unsigned long m_dwFame;
unsigned long m_dwGold;
unsigned long m_dwServerID;
unsigned char m_cRank;
unsigned char m_cTitle;
unsigned char m_cLevel;
unsigned char m_cClass;
unsigned char m_cGuildWarFlag;
};
// 멤버 정보 업데이트 (Game <-> DBAgent)
struct PktGuildMemberInfoUpdate : public PktBase
{
unsigned long m_dwGID;
unsigned long m_dwCID;
MemberListInfo m_MemberListInfo;
MemberDetailInfo m_MemberDetailInfo;
};
// 멤버 명성 업데이트
struct PktGuildMemberFameUpdate : public PktBase
{
unsigned long m_dwOurGID;
unsigned long m_dwEnemyGID;
unsigned long m_dwCID;
unsigned char m_cType;
int m_nAddFame;
};
// 멤버 돈 업데이트
struct PktGuildMemberGoldUpdate : public PktBase
{
unsigned long m_dwGID;
unsigned long m_dwCID;
unsigned long m_dwGold;
};
// 길드 마크
struct PktGuildMark : public PktBase
{
enum eError
{
FAIL_INVALID_GUILD = 2, // 존재하지않는 길드
FAIL_INVALID_MARK = 3, // 변경할 마크가 없음
FAIL_INVALID_CHARACTER = 4, // 존재하지않는 캐릭터
FAIL_NOT_MASTER = 5, // 마스터가 아님
FAIL_NOT_ENOUGH_GOLD = 6, // 금액 부족
};
unsigned long m_dwCID; // 캐릭터 아이디
unsigned long m_dwGID; // 길드 아이디
char m_szMark[MAX_MARK_SIZE]; // 마크
unsigned long m_dwGold; // 금고 잔액
};
// 길드 레벨
struct PktGuildLevel : public PktBase
{
unsigned long m_dwUID; // 아이디 (C -> S : 캐릭터 아이디, S -> C : 길드 아이디)
unsigned char m_cLevel; // 레벨
unsigned long m_dwGold; // 금고 잔액
};
// 길드 관계
struct PktGuildRelation : public PktBase
{
enum eSubCmd
{
GR_HOSTILITY = 0, // 적대 선언
GR_PEACE = 1, // 평화 선언
GR_ALERT = 2, // 경계 적대 선언
GR_COUNTER = 3, // 카운터 적대 선언
GR_REQUEST = 4, // 이미 적대인 길드와 평화 선언후 대상 길드와 적대 선언
// 카운터 적대 선언을 할지 물어보는 대화창
GR_HOSTILITYDEL = 5 // A->B로 적대선언을 한후 A->B에게 평화선언을 해도 B의 Target에 존재하는
// 적대선언 리스트는 사라지지 않는다. B가 직접 5번 커맨드로 취소해줘야만
// 취소가 된다.
};
enum eError
{
FAIL_NOT_MEMBER = 2, // 해당 길드의 멤버가 아님
FAIL_NOT_HOSTILITY_TIME = 3, // 적대 선언을 할수 없는 시간
FAIL_NOT_ALERT_TIME = 4, // 경계 적대 선언을 할수 없는 시간
FAIL_NOT_COUNTER_TIME = 5, // 카운터 적대 선언을 할수 없는 시간
FAIL_NOT_MASTER = 6, // 길드의 마스터가 아님
FAIL_NOT_EXIST_GUILD = 7, // 길드 ID가 0 이거나 길드가 존재하지 않음
FAIL_SELF_GUILD = 8, // 자신의 길드에게 적대/평화/경계/카운터 선언
FAIL_ALREADY_HOSTILITY = 9, // 대상 길드와 이미 적대 관계입니다.
FAIL_ALREADY_COUNTER_HOSTILITY = 10, // 대상 길드와 이미 카운터 적대 관계입니다.
FAIL_ALREADY_ALERT_HOSTILITY = 11, // 데상 길드와 이미 경계 적대 관계입니다.
FAIL_ALREADY_NEUTRALITY = 12, // 대상 길드와 이미 중립 관계입니다.
FAIL_MAX_ALERT_NUM = 13, // 경계 적대 선언권 초과
FAIL_NOT_HAVE_DEVELOPING_CAMP = 14, // 구축중인 길드 요새가 없음
FAIL_NOT_HAVE_ALERT = 15, // 경계 적대 신청을 받지 않고 카운터 적대 신청을 하려함
FAIL_TARGET_HOSTILITY_FULL = 16, // 적대 선언 받을 수 있는 한계치 초과
FAIL_REQUEST_WINDOW = 100, // 적대 선언수 초과로 인해 평화 선언후 적대 선언을 하도록 인증
FAIL_REQUEST_COUNTER = 101, // 카운터 적대 선언을 하도록 인증
};
unsigned long m_dwCID; // 캐릭터 아이디
unsigned long m_dwGID; // 자신의 GID
unsigned long m_dwTargetGID; // 상대 길드 아이디
unsigned long m_dwValue; // 적대 선언중인 GID ( GR_REQUEST 일때만... )
char m_cSubCmd; // 길드 관계 변경 커맨드
char m_szGuildName[MAX_GUILD_NAME_LEN]; // 대상 길드명 / 선포 길드명
char m_szTempGuildName[MAX_GUILD_NAME_LEN]; // 이미 적대 선언중인 길드 이름
};
// 길드 성향
struct PktGuildInclination : public PktBase
{
enum PktGIErr
{
FAIL_SO_FAST = 2, // 일정 시간동안을 변경할 수 없다.
FAIL_WRONG_NATION_KARTERANT = 3, // 카르테란트 길드에는 인간만 속할 수 있다.
FAIL_WRONG_NATION_MERKADIA = 4 // 메르카디아 길드에는 아칸만 속할 수 있다.
};
unsigned long m_dwUID; // 아이디 (C -> S : 캐릭터 아이디, S -> C : 길드 아이디)
unsigned char m_cInclination; // 성향 (Guild::Inclination 참고)
};
// 길드 권한 정보
struct GuildRight
{
enum Index
{
PUT_STOREHOUSE = 0,
GET_STOREHOUSE = 1,
USE_SAFE = 2,
INVITE_MEMBER = 3,
PERMIT_JOIN = 4,
CHANGE_PASSWORD = 5,
REGULATE_TEX = 6,
KICK_MEMBER = 7,
BOARD_ADMIN = 8,
SETUP_MARK_N_LEVEL = 9,
SETUP_MIDDLE = 10,
DIVIDE_GOLD = 11,
SETUP_POLICY = 12,
MAX_USING_RIGHT = 13
};
unsigned char m_aryRight[MAX_RIGHT_SIZE];
GuildRight()
{
Init(false);
}
GuildRight(bool bMaxRight)
{
Init(bMaxRight);
}
void Init(bool bMaxRight)
{
std::fill_n(m_aryRight, int(MAX_RIGHT_SIZE), Guild::NONE);
m_aryRight[CHANGE_PASSWORD] = (true == bMaxRight) ? Guild::COMMON : Guild::MASTER;
m_aryRight[PUT_STOREHOUSE] = (true == bMaxRight) ? Guild::COMMON : Guild::MASTER;
m_aryRight[GET_STOREHOUSE] = (true == bMaxRight) ? Guild::COMMON : Guild::MASTER;
m_aryRight[USE_SAFE] = (true == bMaxRight) ? Guild::COMMON : Guild::MASTER;
m_aryRight[INVITE_MEMBER] = (true == bMaxRight) ? Guild::COMMON : Guild::MASTER;
m_aryRight[PERMIT_JOIN] = (true == bMaxRight) ? Guild::COMMON : Guild::MASTER;
m_aryRight[REGULATE_TEX] = (true == bMaxRight) ? Guild::MIDDLE_ADMIN : Guild::MASTER;
m_aryRight[KICK_MEMBER] = (true == bMaxRight) ? Guild::MIDDLE_ADMIN : Guild::MASTER;
m_aryRight[BOARD_ADMIN] = (true == bMaxRight) ? Guild::MIDDLE_ADMIN : Guild::MASTER;
m_aryRight[SETUP_MARK_N_LEVEL] = (true == bMaxRight) ? Guild::MASTER : Guild::MASTER;
m_aryRight[SETUP_MIDDLE] = (true == bMaxRight) ? Guild::MASTER : Guild::MASTER;
m_aryRight[DIVIDE_GOLD] = (true == bMaxRight) ? Guild::MASTER : Guild::MASTER;
m_aryRight[SETUP_POLICY] = (true == bMaxRight) ? Guild::MASTER : Guild::MASTER;
}
int IsValid(void)
{
GuildRight MaxRight(true);
int nIndex = 0;
for (; nIndex < MAX_RIGHT_SIZE; ++nIndex)
{
if (m_aryRight[nIndex] > MaxRight.m_aryRight[nIndex])
{
return nIndex;
}
}
return nIndex;
}
};
// 길드 권한
struct PktGuildRight : public PktBase
{
unsigned long m_dwUID; // 아이디 (C -> S : 캐릭터 아이디, S -> C : 길드 아이디)
GuildRight m_GuildRight; // 길드 권한
};
// 자기 길드 정보
struct PktMyGuildInfo : public PktBase
{
unsigned long m_dwGold; // 길드 금고
GuildRight m_GuildRight; // 길드 권한
unsigned char m_cTitle; // 직위
};
// 적대 현황 리스트 (가변 길이) + 적대 현황 정보
struct PktGuildHostilityList : public PktBase
{
enum { MAX_NUM_PER_PAGE = 5 };
enum PageState
{
PAGE_CURRENT = 0,
PAGE_PREV = 1,
PAGE_NEXT = 2
};
unsigned long m_dwCID; // 캐릭터 아이디
unsigned char m_cCurrentPage; // 현재 페이지
unsigned char m_cPageState; // 요청한 페이지의 상태
unsigned char m_cNodeNum; // 가변 노드수
unsigned short m_wTotalItemNum; // 적대 현황의 총 리스트 수
char m_szHostility[MAX_GUILD_NAME_LEN]; // 적대 선언 중인 길드명
char m_szAlert[MAX_GUILD_NAME_LEN]; // 경계 적대 선언중인 길드명
};
// 길드 적대 현황 정보
struct GuildHostilityInfoNode
{
char m_szName[MAX_GUILD_NAME_LEN]; // 적대 관계 길드 이름
unsigned char m_cRelationType; // 적대 관계 타입 (Guild::Relation)
};
// 자신의 길드의 관계 리스트 요청 패킷 (가변 길이) + 관계 정보
struct PktGuildRelationInfo : public PktBase
{
unsigned long m_dwCID; // 요청 캐릭터
unsigned long m_dwGID; // 자신의 길드 ID
unsigned short m_wNodeNum; // 가변 노드수
};
// 길드 관계 정보
struct GuildRelationInfoNode
{
// GuildLargeInfo 의 내용과 동일
unsigned long m_dwGID;
unsigned char m_cRelationByMine;
unsigned char m_cRelationByTarget;
};
// 길드 금고
struct PktGuildSafe : public PktBase
{
enum PktGuildSafeErr
{
FAIL_NOT_ENOUGH_MONEY = 2, // 금고에 돈이 충분치 않음
FAIL_NOT_CHAR_MONEY = 3, // 캐릭터에 돈이 충분치 않음
FAIL_NOT_GUILD_DEPOSIT = 4, // 금고 입금하는데 실패했습니다.
FAIL_NOT_GUILD_UPDATE = 5, // 금고 정보를 업데이트 하는데 실패했습니다.
FAIL_REQUEST_DATA = 6, // 정보를 요청중입니다.
};
enum SafeCmd
{
SC_WITHDRAWAL = 0, // 출금
SC_DEPOSIT = 1, // 입금
SC_RELEASE = 2, // 길드원에게 방출
SC_REFER = 3, // 사용 내역 조회
SC_CAMPSHOP = 4, // 길드 요새 상점의 수익금
SC_BONUS = 5, // 보너스 입금
};
unsigned long m_dwCID; // 캐릭터 아이디
unsigned long m_dwGold; // 입금/출금/방출하는 금액
unsigned char m_cCmd; // 명령
};
// 길드 금고 Ack
struct PktGuildSafeAck : public PktBase
{
unsigned long m_dwCID; // 캐릭터 아이디
unsigned long m_dwGID; // 길드 아이디
unsigned long m_dwSafeGold; // 금고 잔액
unsigned long m_dwCharGold; // 캐릭터 잔액 (C -> S : 입금/출금/방출하는 금액)
unsigned char m_cCmd; // 명령
char m_szCharName[Guild::MAX_MEMBER_NAME_LEN]; // 캐릭터 이름
};
// 길드 DB (가변 길이) + 길드 정보
struct PktGuildDB : public PktBase
{
bool m_bStartFlag; // 시작 패킷인가? (PktGuildDB는 길드 수만큼 보내므로 첫번째 길드를 받았을 때 리스트를 초기화 해주어야 한다.)
unsigned long m_dwGID; // 길드 아이디
unsigned char m_cTotalMemberNum; // 길드원 수
unsigned char m_cRelationByMineNum; // 내가 맺은 길드 관계수
unsigned char m_cRelationByTargetNum; // 다른 길드가 맺은 길드 관계수
unsigned short m_wSize; // 길드 정보 크기
};
// 길드 정보 (DB)
struct GuildInfoDB
{
unsigned long m_dwGID;
char m_strName[MAX_GUILD_NAME_FOR_DB];
unsigned char m_cLevel;
unsigned long m_dwFame;
unsigned long m_dwGold;
TIME m_tmLastLogout;
TIME m_tmCheckMember;
TIME m_tmGMLastLogout;
char m_szMark[MAX_MARK_SIZE];
char m_szRight[MAX_RIGHT_SIZE];
unsigned char m_cInclination;
TIME m_tmChangeInclination;
};
// 길드 멤버 (DB)
struct GuildMemberDB
{
unsigned long m_dwGID;
unsigned long m_dwCID;
unsigned long m_dwRank;
char m_strName[MAX_MEMBER_NAME_LEN];
unsigned long m_dwTitle;
unsigned char m_cLevel;
unsigned short m_wClass;
unsigned long m_dwFame;
unsigned long m_dwGold;
unsigned char m_cGuildWarFlag;
TIME m_LeaveGuildTime;
unsigned char m_cTactics;
};
// 길드 관계 (DB)
struct GuildRelationDB
{
unsigned long m_dwGID;
unsigned long m_dwTargetGID;
unsigned char m_cRelation;
};
// 길드 포지션 설정 패킷.
struct PktGuildPosition : public PktBase
{
enum PktErr
{
FAIL_GUILD = 1, // 길드가 없을때.
FAIL_CONNECT_CHAR = 2, // 캐릭터가 접속 중일때.
FAIL_DB_UPDATE = 3, // DB 업데이트 실패.
FAIL_MEMBER_DELETE = 4 // 길드 멤버 삭제 실패.
};
enum Const
{
TYPE_POSITION = 0, // 포지션 변경시.
TYPE_MEMBERDELETE = 1 // 길드 멤버 삭제시.
};
unsigned long m_dwGID;
unsigned long m_dwCID;
unsigned char m_cPosition;
unsigned char m_cType;
};
// 위치가 없어서 임시로(조이스틱 키 설정 관련).
struct PktKeyInfo : public PktBase
{
enum Const
{
MAX_KEY_INFO = 34
};
unsigned long m_dwCID;
unsigned long m_dwKeyInfo[MAX_KEY_INFO];
};
#pragma pack()
#endif